From b096dc75f36d3d4ccac549c29507b9263c643800 Mon Sep 17 00:00:00 2001 From: dvli2007 Date: Wed, 15 May 2024 21:23:12 -0400 Subject: [PATCH] Update ERC721 pointer contract (#1671) * Update ERC721 pointer contract * Handle contract compile warnings * Add abi/bin for ERC721 pointer * Fix tests * Fix bug: handle str from extractAsBytes that preserves `"` * Fix test and update binary for CW721ERC721Pointer --- contracts/src/CW721ERC721Pointer.sol | 65 +++++++++++--- contracts/test/CW721ERC721PointerTest.t.sol | 34 +++++-- x/evm/artifacts/cw721/CW721ERC721Pointer.abi | 2 +- x/evm/artifacts/cw721/CW721ERC721Pointer.bin | 2 +- x/evm/artifacts/cw721/cw721.go | 95 +++++++++++++++++++- 5 files changed, 177 insertions(+), 21 deletions(-) diff --git a/contracts/src/CW721ERC721Pointer.sol b/contracts/src/CW721ERC721Pointer.sol index 9f49474861..f02adce372 100644 --- a/contracts/src/CW721ERC721Pointer.sol +++ b/contracts/src/CW721ERC721Pointer.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity ^0.8.4; import "@openzeppelin/contracts/token/common/ERC2981.sol"; import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; @@ -21,6 +21,9 @@ contract CW721ERC721Pointer is ERC721,ERC2981 { IJson public JsonPrecompile; IAddr public AddrPrecompile; + error NotImplementedOnCosmwasmContract(string method); + error NotImplemented(string method); + constructor(string memory Cw721Address_, string memory name_, string memory symbol_) ERC721(name_, symbol_) { WasmdPrecompile = IWasmd(WASMD_PRECOMPILE_ADDRESS); JsonPrecompile = IJson(JSON_PRECOMPILE_ADDRESS); @@ -41,11 +44,22 @@ contract CW721ERC721Pointer is ERC721,ERC2981 { if (owner == address(0)) { revert ERC721InvalidOwner(address(0)); } + uint256 numTokens = 0; + string memory startAfter; string memory ownerAddr = _formatPayload("owner", _doubleQuotes(AddrPrecompile.getSeiAddr(owner))); string memory req = _curlyBrace(_formatPayload("tokens", _curlyBrace(ownerAddr))); bytes memory response = WasmdPrecompile.query(Cw721Address, bytes(req)); bytes[] memory tokens = JsonPrecompile.extractAsBytesList(response, "tokens"); - return tokens.length; + uint256 tokensLength = tokens.length; + while (tokensLength > 0) { + numTokens += tokensLength; + startAfter = _formatPayload("start_after", string(tokens[tokensLength-1])); + req = _curlyBrace(_formatPayload("tokens", _curlyBrace(_join(ownerAddr, startAfter, ",")))); + response = WasmdPrecompile.query(Cw721Address, bytes(req)); + tokens = JsonPrecompile.extractAsBytesList(response, "tokens"); + tokensLength = tokens.length; + } + return numTokens; } function ownerOf(uint256 tokenId) public view override returns (address) { @@ -82,22 +96,12 @@ contract CW721ERC721Pointer is ERC721,ERC2981 { return false; } - function tokenURI(uint256 tokenId) public view override returns (string memory) { - // revert if token isn't owned - ownerOf(tokenId); - string memory tId = _formatPayload("token_id", _doubleQuotes(Strings.toString(tokenId))); - string memory req = _curlyBrace(_formatPayload("nft_info", _curlyBrace(tId))); - bytes memory response = WasmdPrecompile.query(Cw721Address, bytes(req)); - bytes memory uri = JsonPrecompile.extractAsBytes(response, "token_uri"); - return string(uri); - } - // 2981 function royaltyInfo(uint256 tokenId, uint256 salePrice) public view override returns (address, uint256) { bytes memory checkRoyaltyResponse = WasmdPrecompile.query(Cw721Address, bytes("{\"extension\":{\"msg\":{\"check_royalties\":{}}}}")); bytes memory isRoyaltyImplemented = JsonPrecompile.extractAsBytes(checkRoyaltyResponse, "royalty_payments"); if (keccak256(isRoyaltyImplemented) != keccak256("true")) { - revert("royalty info not implemented on the underlying CosmWasm contract"); + revert NotImplementedOnCosmwasmContract("royalty_info"); } string memory tId = _formatPayload("token_id", _doubleQuotes(Strings.toString(tokenId))); string memory sPrice = _formatPayload("sale_price", _doubleQuotes(Strings.toString(salePrice))); @@ -112,6 +116,31 @@ contract CW721ERC721Pointer is ERC721,ERC2981 { return (AddrPrecompile.getEvmAddr(string(addr)), amt); } + function tokenURI(uint256 tokenId) public view override returns (string memory) { + // revert if token isn't owned + ownerOf(tokenId); + string memory tId = _formatPayload("token_id", _doubleQuotes(Strings.toString(tokenId))); + string memory req = _curlyBrace(_formatPayload("nft_info", _curlyBrace(tId))); + bytes memory response = WasmdPrecompile.query(Cw721Address, bytes(req)); + bytes memory uri = JsonPrecompile.extractAsBytes(response, "token_uri"); + return string(uri); + } + + // 721-Enumerable + function totalSupply() public view virtual returns (uint256) { + string memory req = _curlyBrace(_formatPayload("num_tokens", "{}")); + bytes memory response = WasmdPrecompile.query(Cw721Address, bytes(req)); + return JsonPrecompile.extractAsUint256(response, "count"); + } + + function tokenOfOwnerByIndex(address, uint256) public view virtual returns (uint256) { + revert NotImplemented("tokenOfOwnerByIndex"); + } + + function tokenByIndex(uint256) public view virtual returns (uint256) { + revert NotImplemented("tokenByIndex"); + } + // Transactions function transferFrom(address from, address to, uint256 tokenId) public override { if (to == address(0)) { @@ -156,6 +185,16 @@ contract CW721ERC721Pointer is ERC721,ERC2981 { return ret; } + function _queryContractInfo() internal view virtual returns (string memory, string memory) { + string memory req = _curlyBrace(_formatPayload("contract_info", "{}")); + bytes memory response = WasmdPrecompile.query(Cw721Address, bytes(req)); + bytes memory respName = JsonPrecompile.extractAsBytes(response, "name"); + bytes memory respSymbol = JsonPrecompile.extractAsBytes(response, "symbol"); + string memory nameStr = string(respName); + string memory symbolStr = string(respSymbol); + return (nameStr, symbolStr); + } + function _formatPayload(string memory key, string memory value) internal pure returns (string memory) { return _join(_doubleQuotes(key), value, ":"); } diff --git a/contracts/test/CW721ERC721PointerTest.t.sol b/contracts/test/CW721ERC721PointerTest.t.sol index 9c4602e7cd..d727a7e197 100644 --- a/contracts/test/CW721ERC721PointerTest.t.sol +++ b/contracts/test/CW721ERC721PointerTest.t.sol @@ -109,15 +109,39 @@ contract CW721ERC721PointerTest is Test { abi.encodeWithSignature("query(string,bytes)", MockCWContractAddress, bytes("{\"tokens\":{\"owner\":\"sei19zhelek4q5lt4zam8mcarmgv92vzgqd3ux32jw\"}}")), abi.encode("{\"tokens\":[\"a\",\"b\"]}") ); - bytes[] memory response = new bytes[](2); - response[0] = bytes("a"); - response[1] = bytes("b"); + vm.mockCall( + WASMD_PRECOMPILE_ADDRESS, + abi.encodeWithSignature("query(string,bytes)", MockCWContractAddress, bytes("{\"tokens\":{\"owner\":\"sei19zhelek4q5lt4zam8mcarmgv92vzgqd3ux32jw\",\"start_after\":\"b\"}}")), + abi.encode("{\"tokens\":[\"c\",\"d\"]}") + ); + vm.mockCall( + WASMD_PRECOMPILE_ADDRESS, + abi.encodeWithSignature("query(string,bytes)", MockCWContractAddress, bytes("{\"tokens\":{\"owner\":\"sei19zhelek4q5lt4zam8mcarmgv92vzgqd3ux32jw\",\"start_after\":\"d\"}}")), + abi.encode("{\"tokens\":[]}") + ); + bytes[] memory resp1 = new bytes[](2); + bytes[] memory resp2 = new bytes[](2); + bytes[] memory resp3 = new bytes[](0); + resp1[0] = bytes("\"a\""); + resp1[1] = bytes("\"b\""); + resp2[0] = bytes("\"c\""); + resp2[1] = bytes("\"d\""); vm.mockCall( JSON_PRECOMPILE_ADDRESS, abi.encodeWithSignature("extractAsBytesList(bytes,string)", bytes("{\"tokens\":[\"a\",\"b\"]}"), "tokens"), - abi.encode(response) + abi.encode(resp1) + ); + vm.mockCall( + JSON_PRECOMPILE_ADDRESS, + abi.encodeWithSignature("extractAsBytesList(bytes,string)", bytes("{\"tokens\":[\"c\",\"d\"]}"), "tokens"), + abi.encode(resp2) + ); + vm.mockCall( + JSON_PRECOMPILE_ADDRESS, + abi.encodeWithSignature("extractAsBytesList(bytes,string)", bytes("{\"tokens\":[]}"), "tokens"), + abi.encode(resp3) ); - assertEq(pointer.balanceOf(MockCallerEVMAddr), 2); + assertEq(pointer.balanceOf(MockCallerEVMAddr), 4); } function testOwnerOf() public { diff --git a/x/evm/artifacts/cw721/CW721ERC721Pointer.abi b/x/evm/artifacts/cw721/CW721ERC721Pointer.abi index a13566a001..7dc59839dc 100644 --- a/x/evm/artifacts/cw721/CW721ERC721Pointer.abi +++ b/x/evm/artifacts/cw721/CW721ERC721Pointer.abi @@ -1 +1 @@ -[{"inputs":[{"internalType":"string","name":"Cw721Address_","type":"string"},{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"denominator","type":"uint256"}],"name":"ERC2981InvalidDefaultRoyalty","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC2981InvalidDefaultRoyaltyReceiver","type":"error"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"denominator","type":"uint256"}],"name":"ERC2981InvalidTokenRoyalty","type":"error"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC2981InvalidTokenRoyaltyReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"name":"ERC721IncorrectOwner","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ERC721InsufficientApproval","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC721InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"ERC721InvalidOperator","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"ERC721InvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC721InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC721InvalidSender","type":"error"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ERC721NonexistentToken","type":"error"},{"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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"AddrPrecompile","outputs":[{"internalType":"contract IAddr","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Cw721Address","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"JsonPrecompile","outputs":[{"internalType":"contract IJson","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WasmdPrecompile","outputs":[{"internalType":"contract IWasmd","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"approved","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","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":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"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"},{"internalType":"uint256","name":"salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"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":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","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":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"}] \ No newline at end of file +[{"inputs":[{"internalType":"string","name":"Cw721Address_","type":"string"},{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"denominator","type":"uint256"}],"name":"ERC2981InvalidDefaultRoyalty","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC2981InvalidDefaultRoyaltyReceiver","type":"error"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"denominator","type":"uint256"}],"name":"ERC2981InvalidTokenRoyalty","type":"error"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC2981InvalidTokenRoyaltyReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"name":"ERC721IncorrectOwner","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ERC721InsufficientApproval","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC721InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"ERC721InvalidOperator","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"ERC721InvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC721InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC721InvalidSender","type":"error"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ERC721NonexistentToken","type":"error"},{"inputs":[{"internalType":"string","name":"method","type":"string"}],"name":"NotImplemented","type":"error"},{"inputs":[{"internalType":"string","name":"method","type":"string"}],"name":"NotImplementedOnCosmwasmContract","type":"error"},{"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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"AddrPrecompile","outputs":[{"internalType":"contract IAddr","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Cw721Address","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"JsonPrecompile","outputs":[{"internalType":"contract IJson","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WasmdPrecompile","outputs":[{"internalType":"contract IWasmd","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"approved","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","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":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"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"},{"internalType":"uint256","name":"salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"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":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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"}] \ No newline at end of file diff --git a/x/evm/artifacts/cw721/CW721ERC721Pointer.bin b/x/evm/artifacts/cw721/CW721ERC721Pointer.bin index 4ce131ed2c..66803ded44 100644 --- a/x/evm/artifacts/cw721/CW721ERC721Pointer.bin +++ b/x/evm/artifacts/cw721/CW721ERC721Pointer.bin @@ -1 +1 @@ -608060405234801562000010575f80fd5b506040516200465d3803806200465d8339818101604052810190620000369190620002c3565b8181815f9081620000489190620005b0565b5080600190816200005a9190620005b0565b50505061100260095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611003600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611004600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508260089081620001349190620005b0565b5050505062000694565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6200019f8262000157565b810181811067ffffffffffffffff82111715620001c157620001c062000167565b5b80604052505050565b5f620001d56200013e565b9050620001e3828262000194565b919050565b5f67ffffffffffffffff82111562000205576200020462000167565b5b620002108262000157565b9050602081019050919050565b5f5b838110156200023c5780820151818401526020810190506200021f565b5f8484015250505050565b5f6200025d6200025784620001e8565b620001ca565b9050828152602081018484840111156200027c576200027b62000153565b5b620002898482856200021d565b509392505050565b5f82601f830112620002a857620002a76200014f565b5b8151620002ba84826020860162000247565b91505092915050565b5f805f60608486031215620002dd57620002dc62000147565b5b5f84015167ffffffffffffffff811115620002fd57620002fc6200014b565b5b6200030b8682870162000291565b935050602084015167ffffffffffffffff8111156200032f576200032e6200014b565b5b6200033d8682870162000291565b925050604084015167ffffffffffffffff8111156200036157620003606200014b565b5b6200036f8682870162000291565b9150509250925092565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620003c857607f821691505b602082108103620003de57620003dd62000383565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620004427fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000405565b6200044e868362000405565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000498620004926200048c8462000466565b6200046f565b62000466565b9050919050565b5f819050919050565b620004b38362000478565b620004cb620004c2826200049f565b84845462000411565b825550505050565b5f90565b620004e1620004d3565b620004ee818484620004a8565b505050565b5b818110156200051557620005095f82620004d7565b600181019050620004f4565b5050565b601f82111562000564576200052e81620003e4565b6200053984620003f6565b8101602085101562000549578190505b620005616200055885620003f6565b830182620004f3565b50505b505050565b5f82821c905092915050565b5f620005865f198460080262000569565b1980831691505092915050565b5f620005a0838362000575565b9150826002028217905092915050565b620005bb8262000379565b67ffffffffffffffff811115620005d757620005d662000167565b5b620005e38254620003b0565b620005f082828562000519565b5f60209050601f83116001811462000626575f841562000611578287015190505b6200061d858262000593565b8655506200068c565b601f1984166200063686620003e4565b5f5b828110156200065f5784890151825560018201915060208501945060208101905062000638565b868310156200067f57848901516200067b601f89168262000575565b8355505b6001600288020188555050505b505050505050565b613fbb80620006a25f395ff3fe608060405234801561000f575f80fd5b5060043610610114575f3560e01c806370a08231116100a0578063c2aed3021161006f578063c2aed302146102ef578063c87b56dd1461030d578063de4725cc1461033d578063e985e9c51461035b578063f00b02551461038b57610114565b806370a082311461026957806395d89b4114610299578063a22cb465146102b7578063b88d4fde146102d357610114565b806323b872dd116100e757806323b872dd146101b25780632a55205a146101ce57806342842e0e146101ff5780635c4aead71461021b5780636352211e1461023957610114565b806301ffc9a71461011857806306fdde0314610148578063081812fc14610166578063095ea7b314610196575b5f80fd5b610132600480360381019061012d9190612b24565b6103a9565b60405161013f9190612b69565b60405180910390f35b61015061054a565b60405161015d9190612c0c565b60405180910390f35b610180600480360381019061017b9190612c5f565b6105d9565b60405161018d9190612cc9565b60405180910390f35b6101b060048036038101906101ab9190612d0c565b610933565b005b6101cc60048036038101906101c79190612d4a565b610b6f565b005b6101e860048036038101906101e39190612d9a565b610e8a565b6040516101f6929190612de7565b60405180910390f35b61021960048036038101906102149190612d4a565b6114bb565b005b6102236114da565b6040516102309190612c0c565b60405180910390f35b610253600480360381019061024e9190612c5f565b611566565b6040516102609190612cc9565b60405180910390f35b610283600480360381019061027e9190612e0e565b6117f0565b6040516102909190612e39565b60405180910390f35b6102a1611ae6565b6040516102ae9190612c0c565b60405180910390f35b6102d160048036038101906102cc9190612e7c565b611b76565b005b6102ed60048036038101906102e89190612fe6565b611d79565b005b6102f7611d96565b60405161030491906130c1565b60405180910390f35b61032760048036038101906103229190612c5f565b611dbb565b6040516103349190612c0c565b60405180910390f35b610345611fb8565b60405161035291906130fa565b60405180910390f35b61037560048036038101906103709190613113565b611fdd565b6040516103829190612b69565b60405180910390f35b610393612417565b6040516103a09190613171565b60405180910390f35b5f7f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061047357507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104db57507f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061054357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60605f8054610558906131b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610584906131b7565b80156105cf5780601f106105a6576101008083540402835291602001916105cf565b820191905f5260205f20905b8154815290600101906020018083116105b257829003601f168201915b5050505050905090565b5f8061062a6040518060400160405280600881526020017f746f6b656e5f69640000000000000000000000000000000000000000000000008152506106256106208661243c565b612506565b61254e565b90505f61067c6106776040518060400160405280600981526020017f617070726f76616c730000000000000000000000000000000000000000000000815250610672856125a0565b61254e565b6125a0565b90505f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306d81d296008846040518363ffffffff1660e01b81526004016106dc9291906132cc565b5f60405180830381865afa1580156106f6573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061071e919061336f565b90505f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166387cdf621836040518263ffffffff1660e01b815260040161077b9190613400565b5f60405180830381865afa158015610795573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906107bd9190613515565b90505f81511115610926575f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166308d858e5835f815181106108195761081861355c565b5b60200260200101516040518263ffffffff1660e01b815260040161083d91906135d3565b5f60405180830381865afa158015610857573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061087f919061336f565b9050600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631778e539826040518263ffffffff1660e01b81526004016108db9190612c0c565b602060405180830381865afa1580156108f6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061091a919061361a565b9550505050505061092e565b5f9450505050505b919050565b5f610a166040518060400160405280600781526020017f7370656e64657200000000000000000000000000000000000000000000000000815250610a11600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630c3c20ed876040518263ffffffff1660e01b81526004016109ca9190612cc9565b5f60405180830381865afa1580156109e4573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610a0c91906136e3565b612506565b61254e565b90505f610a686040518060400160405280600881526020017f746f6b656e5f6964000000000000000000000000000000000000000000000000815250610a63610a5e8661243c565b612506565b61254e565b90505f610af9610af46040518060400160405280600781526020017f617070726f766500000000000000000000000000000000000000000000000000815250610aef610aea87876040518060400160405280600181526020017f2c000000000000000000000000000000000000000000000000000000000000008152506125e8565b6125a0565b61254e565b6125a0565b9050610b0481612636565b50838573ffffffffffffffffffffffffffffffffffffffff16610b2686611566565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610bdf575f6040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401610bd69190612cc9565b60405180910390fd5b610be881611566565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610c55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4c90613774565b60405180910390fd5b5f610d386040518060400160405280600981526020017f726563697069656e740000000000000000000000000000000000000000000000815250610d33600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630c3c20ed876040518263ffffffff1660e01b8152600401610cec9190612cc9565b5f60405180830381865afa158015610d06573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610d2e91906136e3565b612506565b61254e565b90505f610d8a6040518060400160405280600881526020017f746f6b656e5f6964000000000000000000000000000000000000000000000000815250610d85610d808661243c565b612506565b61254e565b90505f610e1b610e166040518060400160405280600c81526020017f7472616e736665725f6e66740000000000000000000000000000000000000000815250610e11610e0c87876040518060400160405280600181526020017f2c000000000000000000000000000000000000000000000000000000000000008152506125e8565b6125a0565b61254e565b6125a0565b9050610e2681612636565b50838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050505050565b5f805f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306d81d2960086040518060600160405280602c8152602001613f5a602c91396040518363ffffffff1660e01b8152600401610f029291906132cc565b5f60405180830381865afa158015610f1c573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610f44919061336f565b90505f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166308d858e5836040518263ffffffff1660e01b8152600401610fa191906137dc565b5f60405180830381865afa158015610fbb573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610fe3919061336f565b90507f6273151f959616268004b58dbb21e5c851b7b8d04498b4aabee12291d22fc03481805190602001201461104e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110459061387f565b60405180910390fd5b5f61109e6040518060400160405280600881526020017f746f6b656e5f69640000000000000000000000000000000000000000000000008152506110996110948a61243c565b612506565b61254e565b90505f6110f06040518060400160405280600a81526020017f73616c655f7072696365000000000000000000000000000000000000000000008152506110eb6110e68a61243c565b612506565b61254e565b90505f61118161117c6040518060400160405280600c81526020017f726f79616c74795f696e666f000000000000000000000000000000000000000081525061117761117287876040518060400160405280600181526020017f2c000000000000000000000000000000000000000000000000000000000000008152506125e8565b6125a0565b61254e565b6125a0565b90505f61121161120c6040518060400160405280600981526020017f657874656e73696f6e00000000000000000000000000000000000000000000008152506112076112026040518060400160405280600381526020017f6d736700000000000000000000000000000000000000000000000000000000008152508761254e565b6125a0565b61254e565b6125a0565b90505f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306d81d296008846040518363ffffffff1660e01b81526004016112719291906132cc565b5f60405180830381865afa15801561128b573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906112b3919061336f565b90505f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166308d858e5836040518263ffffffff1660e01b815260040161131091906138e7565b5f60405180830381865afa15801561132a573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611352919061336f565b90505f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635a558982846040518263ffffffff1660e01b81526004016113af9190613964565b602060405180830381865afa1580156113ca573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113ee91906139ab565b90505f82510361140c575f819a509a505050505050505050506114b4565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631778e539836040518263ffffffff1660e01b81526004016114669190612c0c565b602060405180830381865afa158015611481573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114a5919061361a565b819a509a505050505050505050505b9250929050565b6114d583838360405180602001604052805f815250611d79565b505050565b600880546114e7906131b7565b80601f0160208091040260200160405190810160405280929190818152602001828054611513906131b7565b801561155e5780601f106115355761010080835404028352916020019161155e565b820191905f5260205f20905b81548152906001019060200180831161154157829003601f168201915b505050505081565b5f806115b76040518060400160405280600881526020017f746f6b656e5f69640000000000000000000000000000000000000000000000008152506115b26115ad8661243c565b612506565b61254e565b90505f6116096116046040518060400160405280600881526020017f6f776e65725f6f660000000000000000000000000000000000000000000000008152506115ff856125a0565b61254e565b6125a0565b90505f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306d81d296008846040518363ffffffff1660e01b81526004016116699291906132cc565b5f60405180830381865afa158015611683573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906116ab919061336f565b90505f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166308d858e5836040518263ffffffff1660e01b81526004016117089190613a20565b5f60405180830381865afa158015611722573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061174a919061336f565b9050600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631778e539826040518263ffffffff1660e01b81526004016117a69190612c0c565b602060405180830381865afa1580156117c1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117e5919061361a565b945050505050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611861575f6040517f89c62b640000000000000000000000000000000000000000000000000000000081526004016118589190612cc9565b60405180910390fd5b5f6119446040518060400160405280600581526020017f6f776e657200000000000000000000000000000000000000000000000000000081525061193f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630c3c20ed876040518263ffffffff1660e01b81526004016118f89190612cc9565b5f60405180830381865afa158015611912573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061193a91906136e3565b612506565b61254e565b90505f6119966119916040518060400160405280600681526020017f746f6b656e73000000000000000000000000000000000000000000000000000081525061198c856125a0565b61254e565b6125a0565b90505f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306d81d296008846040518363ffffffff1660e01b81526004016119f69291906132cc565b5f60405180830381865afa158015611a10573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611a38919061336f565b90505f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166387cdf621836040518263ffffffff1660e01b8152600401611a959190613a9d565b5f60405180830381865afa158015611aaf573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611ad79190613515565b90508051945050505050919050565b606060018054611af5906131b7565b80601f0160208091040260200160405190810160405280929190818152602001828054611b21906131b7565b8015611b6c5780601f10611b4357610100808354040283529160200191611b6c565b820191905f5260205f20905b815481529060010190602001808311611b4f57829003601f168201915b5050505050905090565b5f611c61611c5c6040518060400160405280600881526020017f6f70657261746f72000000000000000000000000000000000000000000000000815250611c57600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630c3c20ed886040518263ffffffff1660e01b8152600401611c109190612cc9565b5f60405180830381865afa158015611c2a573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611c5291906136e3565b612506565b61254e565b6125a0565b90508115611cbe57611cb8611cb3611cae6040518060400160405280600b81526020017f617070726f76655f616c6c0000000000000000000000000000000000000000008152508461254e565b6125a0565b612636565b50611d0f565b611d0d611d08611d036040518060400160405280600a81526020017f7265766f6b655f616c6c000000000000000000000000000000000000000000008152508461254e565b6125a0565b612636565b505b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3184604051611d6c9190612b69565b60405180910390a3505050565b611d84848484610b6f565b611d90848484846127b4565b50505050565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060611dc682611566565b505f611e176040518060400160405280600881526020017f746f6b656e5f6964000000000000000000000000000000000000000000000000815250611e12611e0d8661243c565b612506565b61254e565b90505f611e69611e646040518060400160405280600881526020017f6e66745f696e666f000000000000000000000000000000000000000000000000815250611e5f856125a0565b61254e565b6125a0565b90505f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306d81d296008846040518363ffffffff1660e01b8152600401611ec99291906132cc565b5f60405180830381865afa158015611ee3573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611f0b919061336f565b90505f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166308d858e5836040518263ffffffff1660e01b8152600401611f689190613b1a565b5f60405180830381865afa158015611f82573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611faa919061336f565b905080945050505050919050565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f806120c16040518060400160405280600581526020017f6f776e65720000000000000000000000000000000000000000000000000000008152506120bc600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630c3c20ed886040518263ffffffff1660e01b81526004016120759190612cc9565b5f60405180830381865afa15801561208f573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906120b791906136e3565b612506565b61254e565b90505f61211361210e6040518060400160405280600d81526020017f616c6c5f6f70657261746f727300000000000000000000000000000000000000815250612109856125a0565b61254e565b6125a0565b90505f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306d81d296008846040518363ffffffff1660e01b81526004016121739291906132cc565b5f60405180830381865afa15801561218d573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906121b5919061336f565b90505f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166387cdf621836040518263ffffffff1660e01b81526004016122129190613b97565b5f60405180830381865afa15801561222c573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906122549190613515565b90505f5b8151811015612408575f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166308d858e58484815181106122b2576122b161355c565b5b60200260200101516040518263ffffffff1660e01b81526004016122d691906135d3565b5f60405180830381865afa1580156122f0573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190612318919061336f565b90508773ffffffffffffffffffffffffffffffffffffffff16600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631778e539836040518263ffffffff1660e01b815260040161238b9190612c0c565b602060405180830381865afa1580156123a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123ca919061361a565b73ffffffffffffffffffffffffffffffffffffffff16036123f45760019650505050505050612411565b50808061240090613bf7565b915050612258565b505f9450505050505b92915050565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60605f600161244a84612966565b0190505f8167ffffffffffffffff81111561246857612467612ec2565b5b6040519080825280601f01601f19166020018201604052801561249a5781602001600182028036833780820191505090505b5090505f82602001820190505b6001156124fb578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816124f0576124ef613c3e565b5b0494505f85036124a7575b819350505050919050565b6060816040516020016125199190613ccb565b6040516020818303038152906040526040516020016125389190613cf0565b6040516020818303038152906040529050919050565b606061259861255c84612506565b836040518060400160405280600181526020017f3a000000000000000000000000000000000000000000000000000000000000008152506125e8565b905092915050565b6060816040516020016125b39190613d3b565b6040516020818303038152906040526040516020016125d29190613d86565b6040516020818303038152906040529050919050565b60608382846040516020016125fe929190613dab565b60405160208183030381529060405260405160200161261e929190613dab565b60405160208183030381529060405290509392505050565b60605f8061100273ffffffffffffffffffffffffffffffffffffffff166008856040518060400160405280600281526020017f5b5d00000000000000000000000000000000000000000000000000000000000081525060405160240161269e93929190613dce565b6040516020818303038152906040527f44d227ae000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516127289190613e52565b5f60405180830381855af49150503d805f8114612760576040519150601f19603f3d011682016040523d82523d5f602084013e612765565b606091505b5091509150816127aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a190613eb2565b60405180910390fd5b8092505050919050565b5f8373ffffffffffffffffffffffffffffffffffffffff163b1115612960578273ffffffffffffffffffffffffffffffffffffffff1663150b7a026127f7612ab7565b8685856040518563ffffffff1660e01b81526004016128199493929190613ed0565b6020604051808303815f875af192505050801561285457506040513d601f19601f820116820180604052508101906128519190613f2e565b60015b6128d5573d805f8114612882576040519150601f19603f3d011682016040523d82523d5f602084013e612887565b606091505b505f8151036128cd57836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016128c49190612cc9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461295e57836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016129559190612cc9565b60405180910390fd5b505b50505050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106129c2577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816129b8576129b7613c3e565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106129ff576d04ee2d6d415b85acef810000000083816129f5576129f4613c3e565b5b0492506020810190505b662386f26fc100008310612a2e57662386f26fc100008381612a2457612a23613c3e565b5b0492506010810190505b6305f5e1008310612a57576305f5e1008381612a4d57612a4c613c3e565b5b0492506008810190505b6127108310612a7c576127108381612a7257612a71613c3e565b5b0492506004810190505b60648310612a9f5760648381612a9557612a94613c3e565b5b0492506002810190505b600a8310612aae576001810190505b80915050919050565b5f33905090565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612b0381612acf565b8114612b0d575f80fd5b50565b5f81359050612b1e81612afa565b92915050565b5f60208284031215612b3957612b38612ac7565b5b5f612b4684828501612b10565b91505092915050565b5f8115159050919050565b612b6381612b4f565b82525050565b5f602082019050612b7c5f830184612b5a565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612bb9578082015181840152602081019050612b9e565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612bde82612b82565b612be88185612b8c565b9350612bf8818560208601612b9c565b612c0181612bc4565b840191505092915050565b5f6020820190508181035f830152612c248184612bd4565b905092915050565b5f819050919050565b612c3e81612c2c565b8114612c48575f80fd5b50565b5f81359050612c5981612c35565b92915050565b5f60208284031215612c7457612c73612ac7565b5b5f612c8184828501612c4b565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612cb382612c8a565b9050919050565b612cc381612ca9565b82525050565b5f602082019050612cdc5f830184612cba565b92915050565b612ceb81612ca9565b8114612cf5575f80fd5b50565b5f81359050612d0681612ce2565b92915050565b5f8060408385031215612d2257612d21612ac7565b5b5f612d2f85828601612cf8565b9250506020612d4085828601612c4b565b9150509250929050565b5f805f60608486031215612d6157612d60612ac7565b5b5f612d6e86828701612cf8565b9350506020612d7f86828701612cf8565b9250506040612d9086828701612c4b565b9150509250925092565b5f8060408385031215612db057612daf612ac7565b5b5f612dbd85828601612c4b565b9250506020612dce85828601612c4b565b9150509250929050565b612de181612c2c565b82525050565b5f604082019050612dfa5f830185612cba565b612e076020830184612dd8565b9392505050565b5f60208284031215612e2357612e22612ac7565b5b5f612e3084828501612cf8565b91505092915050565b5f602082019050612e4c5f830184612dd8565b92915050565b612e5b81612b4f565b8114612e65575f80fd5b50565b5f81359050612e7681612e52565b92915050565b5f8060408385031215612e9257612e91612ac7565b5b5f612e9f85828601612cf8565b9250506020612eb085828601612e68565b9150509250929050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612ef882612bc4565b810181811067ffffffffffffffff82111715612f1757612f16612ec2565b5b80604052505050565b5f612f29612abe565b9050612f358282612eef565b919050565b5f67ffffffffffffffff821115612f5457612f53612ec2565b5b612f5d82612bc4565b9050602081019050919050565b828183375f83830152505050565b5f612f8a612f8584612f3a565b612f20565b905082815260208101848484011115612fa657612fa5612ebe565b5b612fb1848285612f6a565b509392505050565b5f82601f830112612fcd57612fcc612eba565b5b8135612fdd848260208601612f78565b91505092915050565b5f805f8060808587031215612ffe57612ffd612ac7565b5b5f61300b87828801612cf8565b945050602061301c87828801612cf8565b935050604061302d87828801612c4b565b925050606085013567ffffffffffffffff81111561304e5761304d612acb565b5b61305a87828801612fb9565b91505092959194509250565b5f819050919050565b5f61308961308461307f84612c8a565b613066565b612c8a565b9050919050565b5f61309a8261306f565b9050919050565b5f6130ab82613090565b9050919050565b6130bb816130a1565b82525050565b5f6020820190506130d45f8301846130b2565b92915050565b5f6130e482613090565b9050919050565b6130f4816130da565b82525050565b5f60208201905061310d5f8301846130eb565b92915050565b5f806040838503121561312957613128612ac7565b5b5f61313685828601612cf8565b925050602061314785828601612cf8565b9150509250929050565b5f61315b82613090565b9050919050565b61316b81613151565b82525050565b5f6020820190506131845f830184613162565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806131ce57607f821691505b6020821081036131e1576131e061318a565b5b50919050565b5f819050815f5260205f209050919050565b5f8154613205816131b7565b61320f8186612b8c565b9450600182165f8114613229576001811461323f57613271565b60ff198316865281151560200286019350613271565b613248856131e7565b5f5b838110156132695781548189015260018201915060208101905061324a565b808801955050505b50505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f61329e8261327a565b6132a88185613284565b93506132b8818560208601612b9c565b6132c181612bc4565b840191505092915050565b5f6040820190508181035f8301526132e481856131f9565b905081810360208301526132f88184613294565b90509392505050565b5f61331361330e84612f3a565b612f20565b90508281526020810184848401111561332f5761332e612ebe565b5b61333a848285612b9c565b509392505050565b5f82601f83011261335657613355612eba565b5b8151613366848260208601613301565b91505092915050565b5f6020828403121561338457613383612ac7565b5b5f82015167ffffffffffffffff8111156133a1576133a0612acb565b5b6133ad84828501613342565b91505092915050565b7f617070726f76616c7300000000000000000000000000000000000000000000005f82015250565b5f6133ea600983612b8c565b91506133f5826133b6565b602082019050919050565b5f6040820190508181035f8301526134188184613294565b9050818103602083015261342b816133de565b905092915050565b5f67ffffffffffffffff82111561344d5761344c612ec2565b5b602082029050602081019050919050565b5f80fd5b5f61347461346f84613433565b612f20565b905080838252602082019050602084028301858111156134975761349661345e565b5b835b818110156134de57805167ffffffffffffffff8111156134bc576134bb612eba565b5b8086016134c98982613342565b85526020850194505050602081019050613499565b5050509392505050565b5f82601f8301126134fc576134fb612eba565b5b815161350c848260208601613462565b91505092915050565b5f6020828403121561352a57613529612ac7565b5b5f82015167ffffffffffffffff81111561354757613546612acb565b5b613553848285016134e8565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f7370656e646572000000000000000000000000000000000000000000000000005f82015250565b5f6135bd600783612b8c565b91506135c882613589565b602082019050919050565b5f6040820190508181035f8301526135eb8184613294565b905081810360208301526135fe816135b1565b905092915050565b5f8151905061361481612ce2565b92915050565b5f6020828403121561362f5761362e612ac7565b5b5f61363c84828501613606565b91505092915050565b5f67ffffffffffffffff82111561365f5761365e612ec2565b5b61366882612bc4565b9050602081019050919050565b5f61368761368284613645565b612f20565b9050828152602081018484840111156136a3576136a2612ebe565b5b6136ae848285612b9c565b509392505050565b5f82601f8301126136ca576136c9612eba565b5b81516136da848260208601613675565b91505092915050565b5f602082840312156136f8576136f7612ac7565b5b5f82015167ffffffffffffffff81111561371557613714612acb565b5b613721848285016136b6565b91505092915050565b7f6066726f6d60206d75737420626520746865206f776e657200000000000000005f82015250565b5f61375e601883612b8c565b91506137698261372a565b602082019050919050565b5f6020820190508181035f83015261378b81613752565b9050919050565b7f726f79616c74795f7061796d656e7473000000000000000000000000000000005f82015250565b5f6137c6601083612b8c565b91506137d182613792565b602082019050919050565b5f6040820190508181035f8301526137f48184613294565b90508181036020830152613807816137ba565b905092915050565b7f726f79616c747920696e666f206e6f7420696d706c656d656e746564206f6e205f8201527f74686520756e6465726c79696e6720436f736d5761736d20636f6e7472616374602082015250565b5f613869604083612b8c565b91506138748261380f565b604082019050919050565b5f6020820190508181035f8301526138968161385d565b9050919050565b7f61646472657373000000000000000000000000000000000000000000000000005f82015250565b5f6138d1600783612b8c565b91506138dc8261389d565b602082019050919050565b5f6040820190508181035f8301526138ff8184613294565b90508181036020830152613912816138c5565b905092915050565b7f726f79616c74795f616d6f756e740000000000000000000000000000000000005f82015250565b5f61394e600e83612b8c565b91506139598261391a565b602082019050919050565b5f6040820190508181035f83015261397c8184613294565b9050818103602083015261398f81613942565b905092915050565b5f815190506139a581612c35565b92915050565b5f602082840312156139c0576139bf612ac7565b5b5f6139cd84828501613997565b91505092915050565b7f6f776e65720000000000000000000000000000000000000000000000000000005f82015250565b5f613a0a600583612b8c565b9150613a15826139d6565b602082019050919050565b5f6040820190508181035f830152613a388184613294565b90508181036020830152613a4b816139fe565b905092915050565b7f746f6b656e7300000000000000000000000000000000000000000000000000005f82015250565b5f613a87600683612b8c565b9150613a9282613a53565b602082019050919050565b5f6040820190508181035f830152613ab58184613294565b90508181036020830152613ac881613a7b565b905092915050565b7f746f6b656e5f75726900000000000000000000000000000000000000000000005f82015250565b5f613b04600983612b8c565b9150613b0f82613ad0565b602082019050919050565b5f6040820190508181035f830152613b328184613294565b90508181036020830152613b4581613af8565b905092915050565b7f6f70657261746f727300000000000000000000000000000000000000000000005f82015250565b5f613b81600983612b8c565b9150613b8c82613b4d565b602082019050919050565b5f6040820190508181035f830152613baf8184613294565b90508181036020830152613bc281613b75565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613c0182612c2c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613c3357613c32613bca565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f81905092915050565b5f613c7f82612b82565b613c898185613c6b565b9350613c99818560208601612b9c565b80840191505092915050565b7f2200000000000000000000000000000000000000000000000000000000000000815250565b5f613cd68284613c75565b9150613ce182613ca5565b60018201915081905092915050565b5f613cfa82613ca5565b600182019150613d0a8284613c75565b915081905092915050565b7f7d00000000000000000000000000000000000000000000000000000000000000815250565b5f613d468284613c75565b9150613d5182613d15565b60018201915081905092915050565b7f7b00000000000000000000000000000000000000000000000000000000000000815250565b5f613d9082613d60565b600182019150613da08284613c75565b915081905092915050565b5f613db68285613c75565b9150613dc28284613c75565b91508190509392505050565b5f6060820190508181035f830152613de681866131f9565b90508181036020830152613dfa8185613294565b90508181036040830152613e0e8184613294565b9050949350505050565b5f81905092915050565b5f613e2c8261327a565b613e368185613e18565b9350613e46818560208601612b9c565b80840191505092915050565b5f613e5d8284613e22565b915081905092915050565b7f436f736d5761736d2065786563757465206661696c65640000000000000000005f82015250565b5f613e9c601783612b8c565b9150613ea782613e68565b602082019050919050565b5f6020820190508181035f830152613ec981613e90565b9050919050565b5f608082019050613ee35f830187612cba565b613ef06020830186612cba565b613efd6040830185612dd8565b8181036060830152613f0f8184613294565b905095945050505050565b5f81519050613f2881612afa565b92915050565b5f60208284031215613f4357613f42612ac7565b5b5f613f5084828501613f1a565b9150509291505056fe7b22657874656e73696f6e223a7b226d7367223a7b22636865636b5f726f79616c74696573223a7b7d7d7d7da26469706673582212208e5bf5b10dbd07520ba4eabc456fe6d4e15af90bab1225519bcf4381501a7ffd64736f6c63430008150033 \ No newline at end of file +608060405234801561000f575f80fd5b50604051614c26380380614c268339818101604052810190610031919061027f565b8181815f90816100419190610530565b5080600190816100519190610530565b50505061100260095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611003600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611004600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600890816101299190610530565b505050506105ff565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6101918261014b565b810181811067ffffffffffffffff821117156101b0576101af61015b565b5b80604052505050565b5f6101c2610132565b90506101ce8282610188565b919050565b5f67ffffffffffffffff8211156101ed576101ec61015b565b5b6101f68261014b565b9050602081019050919050565b8281835e5f83830152505050565b5f61022361021e846101d3565b6101b9565b90508281526020810184848401111561023f5761023e610147565b5b61024a848285610203565b509392505050565b5f82601f83011261026657610265610143565b5b8151610276848260208601610211565b91505092915050565b5f805f606084860312156102965761029561013b565b5b5f84015167ffffffffffffffff8111156102b3576102b261013f565b5b6102bf86828701610252565b935050602084015167ffffffffffffffff8111156102e0576102df61013f565b5b6102ec86828701610252565b925050604084015167ffffffffffffffff81111561030d5761030c61013f565b5b61031986828701610252565b9150509250925092565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061037157607f821691505b6020821081036103845761038361032d565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026103e67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826103ab565b6103f086836103ab565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61043461042f61042a84610408565b610411565b610408565b9050919050565b5f819050919050565b61044d8361041a565b6104616104598261043b565b8484546103b7565b825550505050565b5f90565b610475610469565b610480818484610444565b505050565b5b818110156104a3576104985f8261046d565b600181019050610486565b5050565b601f8211156104e8576104b98161038a565b6104c28461039c565b810160208510156104d1578190505b6104e56104dd8561039c565b830182610485565b50505b505050565b5f82821c905092915050565b5f6105085f19846008026104ed565b1980831691505092915050565b5f61052083836104f9565b9150826002028217905092915050565b61053982610323565b67ffffffffffffffff8111156105525761055161015b565b5b61055c825461035a565b6105678282856104a7565b5f60209050601f831160018114610598575f8415610586578287015190505b6105908582610515565b8655506105f7565b601f1984166105a68661038a565b5f5b828110156105cd578489015182556001820191506020850194506020810190506105a8565b868310156105ea57848901516105e6601f8916826104f9565b8355505b6001600288020188555050505b505050505050565b61461a8061060c5f395ff3fe608060405234801561000f575f80fd5b5060043610610135575f3560e01c80635c4aead7116100b6578063b88d4fde1161007a578063b88d4fde14610372578063c2aed3021461038e578063c87b56dd146103ac578063de4725cc146103dc578063e985e9c5146103fa578063f00b02551461042a57610135565b80635c4aead7146102ba5780636352211e146102d857806370a082311461030857806395d89b4114610338578063a22cb4651461035657610135565b806323b872dd116100fd57806323b872dd146101f15780632a55205a1461020d5780632f745c591461023e57806342842e0e1461026e5780634f6ccce71461028a57610135565b806301ffc9a71461013957806306fdde0314610169578063081812fc14610187578063095ea7b3146101b757806318160ddd146101d3575b5f80fd5b610153600480360381019061014e9190613057565b610448565b604051610160919061309c565b60405180910390f35b6101716105e9565b60405161017e9190613125565b60405180910390f35b6101a1600480360381019061019c9190613178565b610678565b6040516101ae91906131e2565b60405180910390f35b6101d160048036038101906101cc9190613225565b6109d2565b005b6101db610c0e565b6040516101e89190613272565b60405180910390f35b61020b6004803603810190610206919061328b565b610dd0565b005b610227600480360381019061022291906132db565b6110eb565b604051610235929190613319565b60405180910390f35b61025860048036038101906102539190613225565b61171c565b6040516102659190613272565b60405180910390f35b6102886004803603810190610283919061328b565b611758565b005b6102a4600480360381019061029f9190613178565b611777565b6040516102b19190613272565b60405180910390f35b6102c26117b3565b6040516102cf9190613125565b60405180910390f35b6102f260048036038101906102ed9190613178565b61183f565b6040516102ff91906131e2565b60405180910390f35b610322600480360381019061031d9190613340565b611ac9565b60405161032f9190613272565b60405180910390f35b61034061201f565b60405161034d9190613125565b60405180910390f35b610370600480360381019061036b9190613395565b6120af565b005b61038c600480360381019061038791906134ff565b6122b2565b005b6103966122cf565b6040516103a391906135da565b60405180910390f35b6103c660048036038101906103c19190613178565b6122f4565b6040516103d39190613125565b60405180910390f35b6103e46124f1565b6040516103f19190613613565b60405180910390f35b610414600480360381019061040f919061362c565b612516565b604051610421919061309c565b60405180910390f35b61043261294a565b60405161043f919061368a565b60405180910390f35b5f7f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061051257507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061057a57507f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105e257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60605f80546105f7906136d0565b80601f0160208091040260200160405190810160405280929190818152602001828054610623906136d0565b801561066e5780601f106106455761010080835404028352916020019161066e565b820191905f5260205f20905b81548152906001019060200180831161065157829003601f168201915b5050505050905090565b5f806106c96040518060400160405280600881526020017f746f6b656e5f69640000000000000000000000000000000000000000000000008152506106c46106bf8661296f565b612a39565b612a81565b90505f61071b6107166040518060400160405280600981526020017f617070726f76616c73000000000000000000000000000000000000000000000081525061071185612ad3565b612a81565b612ad3565b90505f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306d81d296008846040518363ffffffff1660e01b815260040161077b9291906137e5565b5f60405180830381865afa158015610795573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906107bd9190613888565b90505f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166387cdf621836040518263ffffffff1660e01b815260040161081a9190613919565b5f60405180830381865afa158015610834573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061085c9190613a2e565b90505f815111156109c5575f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166308d858e5835f815181106108b8576108b7613a75565b5b60200260200101516040518263ffffffff1660e01b81526004016108dc9190613aec565b5f60405180830381865afa1580156108f6573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061091e9190613888565b9050600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631778e539826040518263ffffffff1660e01b815260040161097a9190613125565b602060405180830381865afa158015610995573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109b99190613b33565b955050505050506109cd565b5f9450505050505b919050565b5f610ab56040518060400160405280600781526020017f7370656e64657200000000000000000000000000000000000000000000000000815250610ab0600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630c3c20ed876040518263ffffffff1660e01b8152600401610a6991906131e2565b5f60405180830381865afa158015610a83573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610aab9190613bfc565b612a39565b612a81565b90505f610b076040518060400160405280600881526020017f746f6b656e5f6964000000000000000000000000000000000000000000000000815250610b02610afd8661296f565b612a39565b612a81565b90505f610b98610b936040518060400160405280600781526020017f617070726f766500000000000000000000000000000000000000000000000000815250610b8e610b8987876040518060400160405280600181526020017f2c00000000000000000000000000000000000000000000000000000000000000815250612b1b565b612ad3565b612a81565b612ad3565b9050610ba381612b69565b50838573ffffffffffffffffffffffffffffffffffffffff16610bc58661183f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050505050565b5f80610c8c610c876040518060400160405280600a81526020017f6e756d5f746f6b656e73000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f7b7d000000000000000000000000000000000000000000000000000000000000815250612a81565b612ad3565b90505f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306d81d296008846040518363ffffffff1660e01b8152600401610cec9291906137e5565b5f60405180830381865afa158015610d06573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610d2e9190613888565b9050600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635a558982826040518263ffffffff1660e01b8152600401610d8a9190613c8d565b602060405180830381865afa158015610da5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dc99190613cd4565b9250505090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e40575f6040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401610e3791906131e2565b60405180910390fd5b610e498161183f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610eb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ead90613d49565b60405180910390fd5b5f610f996040518060400160405280600981526020017f726563697069656e740000000000000000000000000000000000000000000000815250610f94600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630c3c20ed876040518263ffffffff1660e01b8152600401610f4d91906131e2565b5f60405180830381865afa158015610f67573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610f8f9190613bfc565b612a39565b612a81565b90505f610feb6040518060400160405280600881526020017f746f6b656e5f6964000000000000000000000000000000000000000000000000815250610fe6610fe18661296f565b612a39565b612a81565b90505f61107c6110776040518060400160405280600c81526020017f7472616e736665725f6e6674000000000000000000000000000000000000000081525061107261106d87876040518060400160405280600181526020017f2c00000000000000000000000000000000000000000000000000000000000000815250612b1b565b612ad3565b612a81565b612ad3565b905061108781612b69565b50838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050505050565b5f805f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306d81d2960086040518060600160405280602c81526020016145b9602c91396040518363ffffffff1660e01b81526004016111639291906137e5565b5f60405180830381865afa15801561117d573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906111a59190613888565b90505f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166308d858e5836040518263ffffffff1660e01b81526004016112029190613db1565b5f60405180830381865afa15801561121c573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906112449190613888565b90507f6273151f959616268004b58dbb21e5c851b7b8d04498b4aabee12291d22fc0348180519060200120146112af576040517f438c4bcb0000000000000000000000000000000000000000000000000000000081526004016112a690613e2e565b60405180910390fd5b5f6112ff6040518060400160405280600881526020017f746f6b656e5f69640000000000000000000000000000000000000000000000008152506112fa6112f58a61296f565b612a39565b612a81565b90505f6113516040518060400160405280600a81526020017f73616c655f70726963650000000000000000000000000000000000000000000081525061134c6113478a61296f565b612a39565b612a81565b90505f6113e26113dd6040518060400160405280600c81526020017f726f79616c74795f696e666f00000000000000000000000000000000000000008152506113d86113d387876040518060400160405280600181526020017f2c00000000000000000000000000000000000000000000000000000000000000815250612b1b565b612ad3565b612a81565b612ad3565b90505f61147261146d6040518060400160405280600981526020017f657874656e73696f6e00000000000000000000000000000000000000000000008152506114686114636040518060400160405280600381526020017f6d7367000000000000000000000000000000000000000000000000000000000081525087612a81565b612ad3565b612a81565b612ad3565b90505f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306d81d296008846040518363ffffffff1660e01b81526004016114d29291906137e5565b5f60405180830381865afa1580156114ec573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906115149190613888565b90505f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166308d858e5836040518263ffffffff1660e01b81526004016115719190613e96565b5f60405180830381865afa15801561158b573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906115b39190613888565b90505f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635a558982846040518263ffffffff1660e01b81526004016116109190613f13565b602060405180830381865afa15801561162b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061164f9190613cd4565b90505f82510361166d575f819a509a50505050505050505050611715565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631778e539836040518263ffffffff1660e01b81526004016116c79190613125565b602060405180830381865afa1580156116e2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117069190613b33565b819a509a505050505050505050505b9250929050565b5f6040517f74115a7400000000000000000000000000000000000000000000000000000000815260040161174f90613f90565b60405180910390fd5b61177283838360405180602001604052805f8152506122b2565b505050565b5f6040517f74115a740000000000000000000000000000000000000000000000000000000081526004016117aa90613ff8565b60405180910390fd5b600880546117c0906136d0565b80601f01602080910402602001604051908101604052809291908181526020018280546117ec906136d0565b80156118375780601f1061180e57610100808354040283529160200191611837565b820191905f5260205f20905b81548152906001019060200180831161181a57829003601f168201915b505050505081565b5f806118906040518060400160405280600881526020017f746f6b656e5f696400000000000000000000000000000000000000000000000081525061188b6118868661296f565b612a39565b612a81565b90505f6118e26118dd6040518060400160405280600881526020017f6f776e65725f6f660000000000000000000000000000000000000000000000008152506118d885612ad3565b612a81565b612ad3565b90505f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306d81d296008846040518363ffffffff1660e01b81526004016119429291906137e5565b5f60405180830381865afa15801561195c573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906119849190613888565b90505f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166308d858e5836040518263ffffffff1660e01b81526004016119e19190614060565b5f60405180830381865afa1580156119fb573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611a239190613888565b9050600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631778e539826040518263ffffffff1660e01b8152600401611a7f9190613125565b602060405180830381865afa158015611a9a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611abe9190613b33565b945050505050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b3a575f6040517f89c62b64000000000000000000000000000000000000000000000000000000008152600401611b3191906131e2565b60405180910390fd5b5f60605f611c206040518060400160405280600581526020017f6f776e6572000000000000000000000000000000000000000000000000000000815250611c1b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630c3c20ed896040518263ffffffff1660e01b8152600401611bd491906131e2565b5f60405180830381865afa158015611bee573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611c169190613bfc565b612a39565b612a81565b90505f611c72611c6d6040518060400160405280600681526020017f746f6b656e730000000000000000000000000000000000000000000000000000815250611c6885612ad3565b612a81565b612ad3565b90505f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306d81d296008846040518363ffffffff1660e01b8152600401611cd29291906137e5565b5f60405180830381865afa158015611cec573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611d149190613888565b90505f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166387cdf621836040518263ffffffff1660e01b8152600401611d7191906140dd565b5f60405180830381865afa158015611d8b573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611db39190613a2e565b90505f815190505b5f811115612010578087611dcf919061413d565b9650611e366040518060400160405280600b81526020017f73746172745f616674657200000000000000000000000000000000000000000081525083600184611e189190614170565b81518110611e2957611e28613a75565b5b6020026020010151612a81565b9550611ec6611ec16040518060400160405280600681526020017f746f6b656e730000000000000000000000000000000000000000000000000000815250611ebc611eb7898b6040518060400160405280600181526020017f2c00000000000000000000000000000000000000000000000000000000000000815250612b1b565b612ad3565b612a81565b612ad3565b935060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306d81d296008866040518363ffffffff1660e01b8152600401611f259291906137e5565b5f60405180830381865afa158015611f3f573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611f679190613888565b9250600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166387cdf621846040518263ffffffff1660e01b8152600401611fc391906140dd565b5f60405180830381865afa158015611fdd573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906120059190613a2e565b915081519050611dbb565b86975050505050505050919050565b60606001805461202e906136d0565b80601f016020809104026020016040519081016040528092919081815260200182805461205a906136d0565b80156120a55780601f1061207c576101008083540402835291602001916120a5565b820191905f5260205f20905b81548152906001019060200180831161208857829003601f168201915b5050505050905090565b5f61219a6121956040518060400160405280600881526020017f6f70657261746f72000000000000000000000000000000000000000000000000815250612190600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630c3c20ed886040518263ffffffff1660e01b815260040161214991906131e2565b5f60405180830381865afa158015612163573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061218b9190613bfc565b612a39565b612a81565b612ad3565b905081156121f7576121f16121ec6121e76040518060400160405280600b81526020017f617070726f76655f616c6c00000000000000000000000000000000000000000081525084612a81565b612ad3565b612b69565b50612248565b61224661224161223c6040518060400160405280600a81526020017f7265766f6b655f616c6c0000000000000000000000000000000000000000000081525084612a81565b612ad3565b612b69565b505b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31846040516122a5919061309c565b60405180910390a3505050565b6122bd848484610dd0565b6122c984848484612ce7565b50505050565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606122ff8261183f565b505f6123506040518060400160405280600881526020017f746f6b656e5f696400000000000000000000000000000000000000000000000081525061234b6123468661296f565b612a39565b612a81565b90505f6123a261239d6040518060400160405280600881526020017f6e66745f696e666f00000000000000000000000000000000000000000000000081525061239885612ad3565b612a81565b612ad3565b90505f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306d81d296008846040518363ffffffff1660e01b81526004016124029291906137e5565b5f60405180830381865afa15801561241c573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906124449190613888565b90505f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166308d858e5836040518263ffffffff1660e01b81526004016124a191906141ed565b5f60405180830381865afa1580156124bb573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906124e39190613888565b905080945050505050919050565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f806125fa6040518060400160405280600581526020017f6f776e65720000000000000000000000000000000000000000000000000000008152506125f5600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630c3c20ed886040518263ffffffff1660e01b81526004016125ae91906131e2565b5f60405180830381865afa1580156125c8573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906125f09190613bfc565b612a39565b612a81565b90505f61264c6126476040518060400160405280600d81526020017f616c6c5f6f70657261746f72730000000000000000000000000000000000000081525061264285612ad3565b612a81565b612ad3565b90505f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306d81d296008846040518363ffffffff1660e01b81526004016126ac9291906137e5565b5f60405180830381865afa1580156126c6573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906126ee9190613888565b90505f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166387cdf621836040518263ffffffff1660e01b815260040161274b919061426a565b5f60405180830381865afa158015612765573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061278d9190613a2e565b90505f5b815181101561293b575f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166308d858e58484815181106127eb576127ea613a75565b5b60200260200101516040518263ffffffff1660e01b815260040161280f9190613aec565b5f60405180830381865afa158015612829573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906128519190613888565b90508773ffffffffffffffffffffffffffffffffffffffff16600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631778e539836040518263ffffffff1660e01b81526004016128c49190613125565b602060405180830381865afa1580156128df573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129039190613b33565b73ffffffffffffffffffffffffffffffffffffffff160361292d5760019650505050505050612944565b508080600101915050612791565b505f9450505050505b92915050565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60605f600161297d84612e99565b0190505f8167ffffffffffffffff81111561299b5761299a6133db565b5b6040519080825280601f01601f1916602001820160405280156129cd5781602001600182028036833780820191505090505b5090505f82602001820190505b600115612a2e578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581612a2357612a2261429d565b5b0494505f85036129da575b819350505050919050565b606081604051602001612a4c919061432a565b604051602081830303815290604052604051602001612a6b919061434f565b6040516020818303038152906040529050919050565b6060612acb612a8f84612a39565b836040518060400160405280600181526020017f3a00000000000000000000000000000000000000000000000000000000000000815250612b1b565b905092915050565b606081604051602001612ae6919061439a565b604051602081830303815290604052604051602001612b0591906143e5565b6040516020818303038152906040529050919050565b6060838284604051602001612b3192919061440a565b604051602081830303815290604052604051602001612b5192919061440a565b60405160208183030381529060405290509392505050565b60605f8061100273ffffffffffffffffffffffffffffffffffffffff166008856040518060400160405280600281526020017f5b5d000000000000000000000000000000000000000000000000000000000000815250604051602401612bd19392919061442d565b6040516020818303038152906040527f44d227ae000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051612c5b91906144b1565b5f60405180830381855af49150503d805f8114612c93576040519150601f19603f3d011682016040523d82523d5f602084013e612c98565b606091505b509150915081612cdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd490614511565b60405180910390fd5b8092505050919050565b5f8373ffffffffffffffffffffffffffffffffffffffff163b1115612e93578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02612d2a612fea565b8685856040518563ffffffff1660e01b8152600401612d4c949392919061452f565b6020604051808303815f875af1925050508015612d8757506040513d601f19601f82011682018060405250810190612d84919061458d565b60015b612e08573d805f8114612db5576040519150601f19603f3d011682016040523d82523d5f602084013e612dba565b606091505b505f815103612e0057836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401612df791906131e2565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612e9157836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401612e8891906131e2565b60405180910390fd5b505b50505050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612ef5577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381612eeb57612eea61429d565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310612f32576d04ee2d6d415b85acef81000000008381612f2857612f2761429d565b5b0492506020810190505b662386f26fc100008310612f6157662386f26fc100008381612f5757612f5661429d565b5b0492506010810190505b6305f5e1008310612f8a576305f5e1008381612f8057612f7f61429d565b5b0492506008810190505b6127108310612faf576127108381612fa557612fa461429d565b5b0492506004810190505b60648310612fd25760648381612fc857612fc761429d565b5b0492506002810190505b600a8310612fe1576001810190505b80915050919050565b5f33905090565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61303681613002565b8114613040575f80fd5b50565b5f813590506130518161302d565b92915050565b5f6020828403121561306c5761306b612ffa565b5b5f61307984828501613043565b91505092915050565b5f8115159050919050565b61309681613082565b82525050565b5f6020820190506130af5f83018461308d565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6130f7826130b5565b61310181856130bf565b93506131118185602086016130cf565b61311a816130dd565b840191505092915050565b5f6020820190508181035f83015261313d81846130ed565b905092915050565b5f819050919050565b61315781613145565b8114613161575f80fd5b50565b5f813590506131728161314e565b92915050565b5f6020828403121561318d5761318c612ffa565b5b5f61319a84828501613164565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6131cc826131a3565b9050919050565b6131dc816131c2565b82525050565b5f6020820190506131f55f8301846131d3565b92915050565b613204816131c2565b811461320e575f80fd5b50565b5f8135905061321f816131fb565b92915050565b5f806040838503121561323b5761323a612ffa565b5b5f61324885828601613211565b925050602061325985828601613164565b9150509250929050565b61326c81613145565b82525050565b5f6020820190506132855f830184613263565b92915050565b5f805f606084860312156132a2576132a1612ffa565b5b5f6132af86828701613211565b93505060206132c086828701613211565b92505060406132d186828701613164565b9150509250925092565b5f80604083850312156132f1576132f0612ffa565b5b5f6132fe85828601613164565b925050602061330f85828601613164565b9150509250929050565b5f60408201905061332c5f8301856131d3565b6133396020830184613263565b9392505050565b5f6020828403121561335557613354612ffa565b5b5f61336284828501613211565b91505092915050565b61337481613082565b811461337e575f80fd5b50565b5f8135905061338f8161336b565b92915050565b5f80604083850312156133ab576133aa612ffa565b5b5f6133b885828601613211565b92505060206133c985828601613381565b9150509250929050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b613411826130dd565b810181811067ffffffffffffffff821117156134305761342f6133db565b5b80604052505050565b5f613442612ff1565b905061344e8282613408565b919050565b5f67ffffffffffffffff82111561346d5761346c6133db565b5b613476826130dd565b9050602081019050919050565b828183375f83830152505050565b5f6134a361349e84613453565b613439565b9050828152602081018484840111156134bf576134be6133d7565b5b6134ca848285613483565b509392505050565b5f82601f8301126134e6576134e56133d3565b5b81356134f6848260208601613491565b91505092915050565b5f805f806080858703121561351757613516612ffa565b5b5f61352487828801613211565b945050602061353587828801613211565b935050604061354687828801613164565b925050606085013567ffffffffffffffff81111561356757613566612ffe565b5b613573878288016134d2565b91505092959194509250565b5f819050919050565b5f6135a261359d613598846131a3565b61357f565b6131a3565b9050919050565b5f6135b382613588565b9050919050565b5f6135c4826135a9565b9050919050565b6135d4816135ba565b82525050565b5f6020820190506135ed5f8301846135cb565b92915050565b5f6135fd826135a9565b9050919050565b61360d816135f3565b82525050565b5f6020820190506136265f830184613604565b92915050565b5f806040838503121561364257613641612ffa565b5b5f61364f85828601613211565b925050602061366085828601613211565b9150509250929050565b5f613674826135a9565b9050919050565b6136848161366a565b82525050565b5f60208201905061369d5f83018461367b565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806136e757607f821691505b6020821081036136fa576136f96136a3565b5b50919050565b5f819050815f5260205f209050919050565b5f815461371e816136d0565b61372881866130bf565b9450600182165f811461374257600181146137585761378a565b60ff19831686528115156020028601935061378a565b61376185613700565b5f5b8381101561378257815481890152600182019150602081019050613763565b808801955050505b50505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f6137b782613793565b6137c1818561379d565b93506137d18185602086016130cf565b6137da816130dd565b840191505092915050565b5f6040820190508181035f8301526137fd8185613712565b9050818103602083015261381181846137ad565b90509392505050565b5f61382c61382784613453565b613439565b905082815260208101848484011115613848576138476133d7565b5b6138538482856130cf565b509392505050565b5f82601f83011261386f5761386e6133d3565b5b815161387f84826020860161381a565b91505092915050565b5f6020828403121561389d5761389c612ffa565b5b5f82015167ffffffffffffffff8111156138ba576138b9612ffe565b5b6138c68482850161385b565b91505092915050565b7f617070726f76616c7300000000000000000000000000000000000000000000005f82015250565b5f6139036009836130bf565b915061390e826138cf565b602082019050919050565b5f6040820190508181035f83015261393181846137ad565b90508181036020830152613944816138f7565b905092915050565b5f67ffffffffffffffff821115613966576139656133db565b5b602082029050602081019050919050565b5f80fd5b5f61398d6139888461394c565b613439565b905080838252602082019050602084028301858111156139b0576139af613977565b5b835b818110156139f757805167ffffffffffffffff8111156139d5576139d46133d3565b5b8086016139e2898261385b565b855260208501945050506020810190506139b2565b5050509392505050565b5f82601f830112613a1557613a146133d3565b5b8151613a2584826020860161397b565b91505092915050565b5f60208284031215613a4357613a42612ffa565b5b5f82015167ffffffffffffffff811115613a6057613a5f612ffe565b5b613a6c84828501613a01565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f7370656e646572000000000000000000000000000000000000000000000000005f82015250565b5f613ad66007836130bf565b9150613ae182613aa2565b602082019050919050565b5f6040820190508181035f830152613b0481846137ad565b90508181036020830152613b1781613aca565b905092915050565b5f81519050613b2d816131fb565b92915050565b5f60208284031215613b4857613b47612ffa565b5b5f613b5584828501613b1f565b91505092915050565b5f67ffffffffffffffff821115613b7857613b776133db565b5b613b81826130dd565b9050602081019050919050565b5f613ba0613b9b84613b5e565b613439565b905082815260208101848484011115613bbc57613bbb6133d7565b5b613bc78482856130cf565b509392505050565b5f82601f830112613be357613be26133d3565b5b8151613bf3848260208601613b8e565b91505092915050565b5f60208284031215613c1157613c10612ffa565b5b5f82015167ffffffffffffffff811115613c2e57613c2d612ffe565b5b613c3a84828501613bcf565b91505092915050565b7f636f756e740000000000000000000000000000000000000000000000000000005f82015250565b5f613c776005836130bf565b9150613c8282613c43565b602082019050919050565b5f6040820190508181035f830152613ca581846137ad565b90508181036020830152613cb881613c6b565b905092915050565b5f81519050613cce8161314e565b92915050565b5f60208284031215613ce957613ce8612ffa565b5b5f613cf684828501613cc0565b91505092915050565b7f6066726f6d60206d75737420626520746865206f776e657200000000000000005f82015250565b5f613d336018836130bf565b9150613d3e82613cff565b602082019050919050565b5f6020820190508181035f830152613d6081613d27565b9050919050565b7f726f79616c74795f7061796d656e7473000000000000000000000000000000005f82015250565b5f613d9b6010836130bf565b9150613da682613d67565b602082019050919050565b5f6040820190508181035f830152613dc981846137ad565b90508181036020830152613ddc81613d8f565b905092915050565b7f726f79616c74795f696e666f00000000000000000000000000000000000000005f82015250565b5f613e18600c836130bf565b9150613e2382613de4565b602082019050919050565b5f6020820190508181035f830152613e4581613e0c565b9050919050565b7f61646472657373000000000000000000000000000000000000000000000000005f82015250565b5f613e806007836130bf565b9150613e8b82613e4c565b602082019050919050565b5f6040820190508181035f830152613eae81846137ad565b90508181036020830152613ec181613e74565b905092915050565b7f726f79616c74795f616d6f756e740000000000000000000000000000000000005f82015250565b5f613efd600e836130bf565b9150613f0882613ec9565b602082019050919050565b5f6040820190508181035f830152613f2b81846137ad565b90508181036020830152613f3e81613ef1565b905092915050565b7f746f6b656e4f664f776e65724279496e646578000000000000000000000000005f82015250565b5f613f7a6013836130bf565b9150613f8582613f46565b602082019050919050565b5f6020820190508181035f830152613fa781613f6e565b9050919050565b7f746f6b656e4279496e64657800000000000000000000000000000000000000005f82015250565b5f613fe2600c836130bf565b9150613fed82613fae565b602082019050919050565b5f6020820190508181035f83015261400f81613fd6565b9050919050565b7f6f776e65720000000000000000000000000000000000000000000000000000005f82015250565b5f61404a6005836130bf565b915061405582614016565b602082019050919050565b5f6040820190508181035f83015261407881846137ad565b9050818103602083015261408b8161403e565b905092915050565b7f746f6b656e7300000000000000000000000000000000000000000000000000005f82015250565b5f6140c76006836130bf565b91506140d282614093565b602082019050919050565b5f6040820190508181035f8301526140f581846137ad565b90508181036020830152614108816140bb565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61414782613145565b915061415283613145565b925082820190508082111561416a57614169614110565b5b92915050565b5f61417a82613145565b915061418583613145565b925082820390508181111561419d5761419c614110565b5b92915050565b7f746f6b656e5f75726900000000000000000000000000000000000000000000005f82015250565b5f6141d76009836130bf565b91506141e2826141a3565b602082019050919050565b5f6040820190508181035f83015261420581846137ad565b90508181036020830152614218816141cb565b905092915050565b7f6f70657261746f727300000000000000000000000000000000000000000000005f82015250565b5f6142546009836130bf565b915061425f82614220565b602082019050919050565b5f6040820190508181035f83015261428281846137ad565b9050818103602083015261429581614248565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f81905092915050565b5f6142de826130b5565b6142e881856142ca565b93506142f88185602086016130cf565b80840191505092915050565b7f2200000000000000000000000000000000000000000000000000000000000000815250565b5f61433582846142d4565b915061434082614304565b60018201915081905092915050565b5f61435982614304565b60018201915061436982846142d4565b915081905092915050565b7f7d00000000000000000000000000000000000000000000000000000000000000815250565b5f6143a582846142d4565b91506143b082614374565b60018201915081905092915050565b7f7b00000000000000000000000000000000000000000000000000000000000000815250565b5f6143ef826143bf565b6001820191506143ff82846142d4565b915081905092915050565b5f61441582856142d4565b915061442182846142d4565b91508190509392505050565b5f6060820190508181035f8301526144458186613712565b9050818103602083015261445981856137ad565b9050818103604083015261446d81846137ad565b9050949350505050565b5f81905092915050565b5f61448b82613793565b6144958185614477565b93506144a58185602086016130cf565b80840191505092915050565b5f6144bc8284614481565b915081905092915050565b7f436f736d5761736d2065786563757465206661696c65640000000000000000005f82015250565b5f6144fb6017836130bf565b9150614506826144c7565b602082019050919050565b5f6020820190508181035f830152614528816144ef565b9050919050565b5f6080820190506145425f8301876131d3565b61454f60208301866131d3565b61455c6040830185613263565b818103606083015261456e81846137ad565b905095945050505050565b5f815190506145878161302d565b92915050565b5f602082840312156145a2576145a1612ffa565b5b5f6145af84828501614579565b9150509291505056fe7b22657874656e73696f6e223a7b226d7367223a7b22636865636b5f726f79616c74696573223a7b7d7d7d7da2646970667358221220022186fd49994512b40a064b258280560e068a8c6981dfd1fb2f9992b6d7212664736f6c63430008190033 \ No newline at end of file diff --git a/x/evm/artifacts/cw721/cw721.go b/x/evm/artifacts/cw721/cw721.go index 4ea2671b6d..570c13a89d 100644 --- a/x/evm/artifacts/cw721/cw721.go +++ b/x/evm/artifacts/cw721/cw721.go @@ -31,7 +31,7 @@ var ( // Cw721MetaData contains all meta data concerning the Cw721 contract. var Cw721MetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"Cw721Address_\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"name_\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol_\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"numerator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"denominator\",\"type\":\"uint256\"}],\"name\":\"ERC2981InvalidDefaultRoyalty\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC2981InvalidDefaultRoyaltyReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numerator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"denominator\",\"type\":\"uint256\"}],\"name\":\"ERC2981InvalidTokenRoyalty\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC2981InvalidTokenRoyaltyReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721IncorrectOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721InsufficientApproval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC721InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721NonexistentToken\",\"type\":\"error\"},{\"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\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"AddrPrecompile\",\"outputs\":[{\"internalType\":\"contractIAddr\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"Cw721Address\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"JsonPrecompile\",\"outputs\":[{\"internalType\":\"contractIJson\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WasmdPrecompile\",\"outputs\":[{\"internalType\":\"contractIWasmd\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"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\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"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\"},{\"internalType\":\"uint256\",\"name\":\"salePrice\",\"type\":\"uint256\"}],\"name\":\"royaltyInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"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\":\"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\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"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\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + ABI: "[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"Cw721Address_\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"name_\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol_\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"numerator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"denominator\",\"type\":\"uint256\"}],\"name\":\"ERC2981InvalidDefaultRoyalty\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC2981InvalidDefaultRoyaltyReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numerator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"denominator\",\"type\":\"uint256\"}],\"name\":\"ERC2981InvalidTokenRoyalty\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC2981InvalidTokenRoyaltyReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721IncorrectOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721InsufficientApproval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC721InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721NonexistentToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"method\",\"type\":\"string\"}],\"name\":\"NotImplemented\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"method\",\"type\":\"string\"}],\"name\":\"NotImplementedOnCosmwasmContract\",\"type\":\"error\"},{\"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\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"AddrPrecompile\",\"outputs\":[{\"internalType\":\"contractIAddr\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"Cw721Address\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"JsonPrecompile\",\"outputs\":[{\"internalType\":\"contractIJson\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WasmdPrecompile\",\"outputs\":[{\"internalType\":\"contractIWasmd\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"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\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"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\"},{\"internalType\":\"uint256\",\"name\":\"salePrice\",\"type\":\"uint256\"}],\"name\":\"royaltyInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"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\":\"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\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"tokenByIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"tokenOfOwnerByIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"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\"}]", } // Cw721ABI is the input ABI used to generate the binding from. @@ -553,6 +553,68 @@ func (_Cw721 *Cw721CallerSession) Symbol() (string, error) { return _Cw721.Contract.Symbol(&_Cw721.CallOpts) } +// TokenByIndex is a free data retrieval call binding the contract method 0x4f6ccce7. +// +// Solidity: function tokenByIndex(uint256 ) view returns(uint256) +func (_Cw721 *Cw721Caller) TokenByIndex(opts *bind.CallOpts, arg0 *big.Int) (*big.Int, error) { + var out []interface{} + err := _Cw721.contract.Call(opts, &out, "tokenByIndex", arg0) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// TokenByIndex is a free data retrieval call binding the contract method 0x4f6ccce7. +// +// Solidity: function tokenByIndex(uint256 ) view returns(uint256) +func (_Cw721 *Cw721Session) TokenByIndex(arg0 *big.Int) (*big.Int, error) { + return _Cw721.Contract.TokenByIndex(&_Cw721.CallOpts, arg0) +} + +// TokenByIndex is a free data retrieval call binding the contract method 0x4f6ccce7. +// +// Solidity: function tokenByIndex(uint256 ) view returns(uint256) +func (_Cw721 *Cw721CallerSession) TokenByIndex(arg0 *big.Int) (*big.Int, error) { + return _Cw721.Contract.TokenByIndex(&_Cw721.CallOpts, arg0) +} + +// TokenOfOwnerByIndex is a free data retrieval call binding the contract method 0x2f745c59. +// +// Solidity: function tokenOfOwnerByIndex(address , uint256 ) view returns(uint256) +func (_Cw721 *Cw721Caller) TokenOfOwnerByIndex(opts *bind.CallOpts, arg0 common.Address, arg1 *big.Int) (*big.Int, error) { + var out []interface{} + err := _Cw721.contract.Call(opts, &out, "tokenOfOwnerByIndex", arg0, arg1) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// TokenOfOwnerByIndex is a free data retrieval call binding the contract method 0x2f745c59. +// +// Solidity: function tokenOfOwnerByIndex(address , uint256 ) view returns(uint256) +func (_Cw721 *Cw721Session) TokenOfOwnerByIndex(arg0 common.Address, arg1 *big.Int) (*big.Int, error) { + return _Cw721.Contract.TokenOfOwnerByIndex(&_Cw721.CallOpts, arg0, arg1) +} + +// TokenOfOwnerByIndex is a free data retrieval call binding the contract method 0x2f745c59. +// +// Solidity: function tokenOfOwnerByIndex(address , uint256 ) view returns(uint256) +func (_Cw721 *Cw721CallerSession) TokenOfOwnerByIndex(arg0 common.Address, arg1 *big.Int) (*big.Int, error) { + return _Cw721.Contract.TokenOfOwnerByIndex(&_Cw721.CallOpts, arg0, arg1) +} + // TokenURI is a free data retrieval call binding the contract method 0xc87b56dd. // // Solidity: function tokenURI(uint256 tokenId) view returns(string) @@ -584,6 +646,37 @@ func (_Cw721 *Cw721CallerSession) TokenURI(tokenId *big.Int) (string, error) { return _Cw721.Contract.TokenURI(&_Cw721.CallOpts, tokenId) } +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_Cw721 *Cw721Caller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _Cw721.contract.Call(opts, &out, "totalSupply") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_Cw721 *Cw721Session) TotalSupply() (*big.Int, error) { + return _Cw721.Contract.TotalSupply(&_Cw721.CallOpts) +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_Cw721 *Cw721CallerSession) TotalSupply() (*big.Int, error) { + return _Cw721.Contract.TotalSupply(&_Cw721.CallOpts) +} + // Approve is a paid mutator transaction binding the contract method 0x095ea7b3. // // Solidity: function approve(address approved, uint256 tokenId) returns()