From 35a192e3380442748732088ed7a0d8e8d087dd7b Mon Sep 17 00:00:00 2001 From: Andres Adjimann Date: Wed, 14 Aug 2024 12:36:55 -0300 Subject: [PATCH 1/2] WIP --- .../LandPreSale_35/bundles.testnet.json | 5 ++ .../LandPreSale_35/sectors.testnet.json | 63 +++++++++++++++++++ packages/core/data/landSales/deadlines.ts | 1 + .../08_landsale/01_deploy_estate_sale.ts | 1 + 4 files changed, 70 insertions(+) create mode 100644 packages/core/data/landSales/LandPreSale_35/bundles.testnet.json create mode 100644 packages/core/data/landSales/LandPreSale_35/sectors.testnet.json diff --git a/packages/core/data/landSales/LandPreSale_35/bundles.testnet.json b/packages/core/data/landSales/LandPreSale_35/bundles.testnet.json new file mode 100644 index 0000000000..dee2c7f7e9 --- /dev/null +++ b/packages/core/data/landSales/LandPreSale_35/bundles.testnet.json @@ -0,0 +1,5 @@ +{ + "198": [ + "1879073777507537447029520769267953353987681801241708" + ] +} diff --git a/packages/core/data/landSales/LandPreSale_35/sectors.testnet.json b/packages/core/data/landSales/LandPreSale_35/sectors.testnet.json new file mode 100644 index 0000000000..da55aeb477 --- /dev/null +++ b/packages/core/data/landSales/LandPreSale_35/sectors.testnet.json @@ -0,0 +1,63 @@ +[ + { + "sector": 58, + "limit": 10000, + "lands": [ + { + "coordinateX": -105, + "coordinateY": 60, + "ownerAddress": "", + "bundleId": "" + }, + { + "coordinateX": -105, + "coordinateY": 61, + "ownerAddress": "", + "bundleId": "" + }, + { + "coordinateX": -105, + "coordinateY": 62, + "ownerAddress": "", + "bundleId": "" + }, + { + "coordinateX": -104, + "coordinateY": 60, + "ownerAddress": "", + "bundleId": "" + }, + { + "coordinateX": -104, + "coordinateY": 61, + "ownerAddress": "", + "bundleId": "198" + }, + { + "coordinateX": -104, + "coordinateY": 62, + "ownerAddress": "", + "bundleId": "" + }, + { + "coordinateX": -103, + "coordinateY": 60, + "ownerAddress": "", + "bundleId": "" + }, + { + "coordinateX": -103, + "coordinateY": 61, + "ownerAddress": "", + "bundleId": "" + }, + { + "coordinateX": -103, + "coordinateY": 62, + "ownerAddress": "", + "bundleId": "" + } + ], + "estates": [] + } +] diff --git a/packages/core/data/landSales/deadlines.ts b/packages/core/data/landSales/deadlines.ts index d30964a107..1487529c7e 100644 --- a/packages/core/data/landSales/deadlines.ts +++ b/packages/core/data/landSales/deadlines.ts @@ -56,5 +56,6 @@ const deadlines: { [sector: number]: number } = { 55: new Date("2024-03-20T12:00:00.000Z").valueOf() / 1000, 56: new Date("2024-04-19T12:00:00.000Z").valueOf() / 1000, 57: new Date("2024-07-29T12:00:00.000Z").valueOf() / 1000, + 58: new Date("2024-08-28T12:00:00.000Z").valueOf() / 1000, }; export default deadlines; diff --git a/packages/core/deploy_polygon/08_landsale/01_deploy_estate_sale.ts b/packages/core/deploy_polygon/08_landsale/01_deploy_estate_sale.ts index 10118efd9d..5df63ce65a 100644 --- a/packages/core/deploy_polygon/08_landsale/01_deploy_estate_sale.ts +++ b/packages/core/deploy_polygon/08_landsale/01_deploy_estate_sale.ts @@ -38,6 +38,7 @@ const sales: SaleDeployment[] = [ {name: 'LandPreSale_32', skip: async () => true}, {name: 'LandPreSale_33', skip: async () => true}, {name: 'LandPreSale_34', skip: async () => true}, + {name: 'LandPreSale_35', skip: async () => false}, ]; const func: DeployFunction = async function (hre) { From b090b49f96bcab4769a724d01eaba8c46e1ce89d Mon Sep 17 00:00:00 2001 From: Andres Adjimann Date: Fri, 16 Aug 2024 08:04:39 -0300 Subject: [PATCH 2/2] chore: land sale 58 deployment on amoy --- .../amoy/PolygonLandPreSale_58.json | 1022 +++++++++++++++++ 1 file changed, 1022 insertions(+) create mode 100644 packages/core/deployments/amoy/PolygonLandPreSale_58.json diff --git a/packages/core/deployments/amoy/PolygonLandPreSale_58.json b/packages/core/deployments/amoy/PolygonLandPreSale_58.json new file mode 100644 index 0000000000..3c7f7a0989 --- /dev/null +++ b/packages/core/deployments/amoy/PolygonLandPreSale_58.json @@ -0,0 +1,1022 @@ +{ + "address": "0x0D24A34C384306C4bD9f535F97d0E5c02da509E2", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "landAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "sandContractAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "initialMetaTx", + "type": "address" + }, + { + "internalType": "address", + "name": "admin", + "type": "address" + }, + { + "internalType": "address payable", + "name": "initialWalletAddress", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "merkleRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "expiryTime", + "type": "uint256" + }, + { + "internalType": "address", + "name": "initialSigningWallet", + "type": "address" + }, + { + "internalType": "uint256", + "name": "initialMaxCommissionRate", + "type": "uint256" + }, + { + "internalType": "address", + "name": "estate", + "type": "address" + }, + { + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "internalType": "address", + "name": "feeDistributor", + "type": "address" + }, + { + "internalType": "address", + "name": "authValidator", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "buyer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "topCornerId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "size", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "price", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amountPaid", + "type": "uint256" + } + ], + "name": "LandQuadPurchased", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "newMaxCommissionRate", + "type": "uint256" + } + ], + "name": "MaxCommissionRateUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "metaTransactionProcessor", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "enabled", + "type": "bool" + } + ], + "name": "MetaTransactionProcessor", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newWallet", + "type": "address" + } + ], + "name": "NewReceivingWallet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "referrer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "referee", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "commission", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + } + ], + "name": "ReferralUsed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newSigningWallet", + "type": "address" + } + ], + "name": "SigningWalletUpdated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "buyer", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "address", + "name": "reserved", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "info", + "type": "uint256[]" + }, + { + "internalType": "bytes32", + "name": "salt", + "type": "bytes32" + }, + { + "internalType": "uint256[]", + "name": "assetIds", + "type": "uint256[]" + }, + { + "internalType": "bytes32[]", + "name": "proof", + "type": "bytes32[]" + }, + { + "internalType": "bytes", + "name": "referral", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "name": "buyLandWithSand", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "referral", + "type": "bytes" + } + ], + "name": "decodeReferral", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "disableWallet", + "type": "address" + } + ], + "name": "disablePreviousSigningWallet", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getAdmin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getExpiryTime", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getMaxCommissionRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getMerkleRoot", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getSigningWallet", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "who", + "type": "address" + } + ], + "name": "isMetaTransactionProcessor", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + }, + { + "internalType": "address", + "name": "referrer", + "type": "address" + }, + { + "internalType": "address", + "name": "referee", + "type": "address" + }, + { + "internalType": "uint256", + "name": "expiryTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + } + ], + "name": "isReferralValid", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC1155BatchReceived", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC1155Received", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "metaTransactionProcessor", + "type": "address" + }, + { + "internalType": "bool", + "name": "enabled", + "type": "bool" + } + ], + "name": "setMetaTransactionProcessor", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address payable", + "name": "newWallet", + "type": "address" + } + ], + "name": "setReceivingWallet", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newMaxCommissionRate", + "type": "uint256" + } + ], + "name": "updateMaxCommissionRate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newSigningWallet", + "type": "address" + } + ], + "name": "updateSigningWallet", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "assetIds", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "values", + "type": "uint256[]" + } + ], + "name": "withdrawAssets", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0xcbdee4ba980156a108bc6e6c0707849fd537f08f3ee9bfe802c8cbdfa0f2b2e6", + "receipt": { + "to": null, + "from": "0x5F890c9522dCE5670d741D4277BFCC2d9cA8Af02", + "contractAddress": "0x0D24A34C384306C4bD9f535F97d0E5c02da509E2", + "transactionIndex": 2, + "gasUsed": "2668417", + "logsBloom": "0x00000000000000000000000000000000000000002000000000040000000000000002000000000000000000000000000000008000000000000000000040000000000000000000000000000000000000800000000000000000000100000000002000000000000000100000000000000000000000000000000080040001010000000000000000000000000000000000000000000000000000000000000000200000200000000000000000000000000000000000000000000000000000000000004000000000000000000001000000000000000000000000000000108008000000000000000000000000000000000000000000000000000000000000000000100000", + "blockHash": "0x63d4c0e4ec4065eb2bd7b7852cdab17fa17d6865160b7def080c30b079312d14", + "transactionHash": "0xcbdee4ba980156a108bc6e6c0707849fd537f08f3ee9bfe802c8cbdfa0f2b2e6", + "logs": [ + { + "transactionIndex": 2, + "blockNumber": 10785657, + "transactionHash": "0xcbdee4ba980156a108bc6e6c0707849fd537f08f3ee9bfe802c8cbdfa0f2b2e6", + "address": "0x0D24A34C384306C4bD9f535F97d0E5c02da509E2", + "topics": [ + "0xb21eb88b4e33b3f1281830a7178d74d8aa73220416215726b68ae23d539515cb" + ], + "data": "0x000000000000000000000000d20fbd836e80dabfb777e6aabbe52e96c07ecd1b0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 6, + "blockHash": "0x63d4c0e4ec4065eb2bd7b7852cdab17fa17d6865160b7def080c30b079312d14" + }, + { + "transactionIndex": 2, + "blockNumber": 10785657, + "transactionHash": "0xcbdee4ba980156a108bc6e6c0707849fd537f08f3ee9bfe802c8cbdfa0f2b2e6", + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000005f890c9522dce5670d741d4277bfcc2d9ca8af02", + "0x0000000000000000000000004631753190f2f5a15a7ba172bbac102b7d95fa22" + ], + "data": "0x000000000000000000000000000000000000000000000000011c67556b8aeb71000000000000000000000000000000000000000000000002321a2678f90f512400000000000000000000000000000000000000000000016f2417467cb707651300000000000000000000000000000000000000000000000230fdbf238d8465b300000000000000000000000000000000000000000000016f2533add222925084", + "logIndex": 7, + "blockHash": "0x63d4c0e4ec4065eb2bd7b7852cdab17fa17d6865160b7def080c30b079312d14" + } + ], + "blockNumber": 10785657, + "cumulativeGasUsed": "2814076", + "status": 1, + "byzantium": true + }, + "args": [ + "0xEdE111C053616a91975488F8aB3B51382A32979b", + "0xD20fbd836e80DabFb777E6AaBbe52e96c07eCD1B", + "0xD20fbd836e80DabFb777E6AaBbe52e96c07eCD1B", + "0x49c4D4C94829B9c44052C5f5Cb164Fc612181165", + "0xa5Eb9C9Eb4F4c35B9Be8cFaAA7909F9ebe6Cb609", + "0x2fcec1cfbb1762dea0885df5d6d1c1a099db2b4d154b42c6400c9ecc33fa92e1", + 2040206400, + "0xB7060D3FeCAC3AE1F0A0AA416E3e8E472257950e", + 2000, + "0x0000000000000000000000000000000000000000", + "0x2D0f3dfe9B7e86b36d188A3AAdE83898d4BeE7a2", + "0xAc3ff31f526Af7f386ea43649e3fa67e329AeF93", + "0x34C87E3A9eD80D50a146C1833043265221c5Abd2" + ], + "numDeployments": 1, + "linkedData": [ + { + "x": 99, + "y": 264, + "size": 1, + "price": "1011000000000000000000", + "reserved": "", + "salt": "0x0ce8f9d0c5a13d9b0f0dee190823623847a53b41276323b1caf14f6cea9fce02", + "assetIds": [] + }, + { + "x": 99, + "y": 265, + "size": 1, + "price": "1011000000000000000000", + "reserved": "", + "salt": "0xcf4976f2b1ef88f02245229c8714ec679fa3af14341b20535b892d5d3b2f9fd6", + "assetIds": [] + }, + { + "x": 99, + "y": 266, + "size": 1, + "price": "1011000000000000000000", + "reserved": "", + "salt": "0xdbb2f533860ad32b9902c5eedd20aac0716aaddaf3da48446dc183fdc2630315", + "assetIds": [] + }, + { + "x": 100, + "y": 264, + "size": 1, + "price": "1011000000000000000000", + "reserved": "", + "salt": "0xec8aff06f20dce590e209198b4ab0b9fec25889f4ae658f0baa9c7795b733a78", + "assetIds": [] + }, + { + "x": 100, + "y": 265, + "size": 1, + "price": "4683000000000000000000", + "reserved": "", + "salt": "0x8bd112405c36e647c7a85041d12a6bbc5237b2af087d7ef65c26fc30133faf8f", + "assetIds": [ + "1879073777507537447029520769267953353987681801241708" + ] + }, + { + "x": 100, + "y": 266, + "size": 1, + "price": "1011000000000000000000", + "reserved": "", + "salt": "0x356c793b017a436ea3c3dc59211b0f4b911a695490f0ad9cdae615c566f369cb", + "assetIds": [] + }, + { + "x": 101, + "y": 264, + "size": 1, + "price": "1011000000000000000000", + "reserved": "", + "salt": "0x96da01048677b7eae8a6baba5b91f80f444ec6cfdcb936d25194ed77dbd1ec05", + "assetIds": [] + }, + { + "x": 101, + "y": 265, + "size": 1, + "price": "1011000000000000000000", + "reserved": "", + "salt": "0xad18b2a77c642cdbc58e7313f32984ec73e51ebf04b0cdeed55c62a8764c1f7e", + "assetIds": [] + }, + { + "x": 101, + "y": 266, + "size": 1, + "price": "1011000000000000000000", + "reserved": "", + "salt": "0x853004f6f3dcb01699a0dbef3df1c23be7047b2327338d282c6bda2cba0659b3", + "assetIds": [] + } + ], + "solcInputHash": "b42a863a795806b4ea3a8f05dfa42539", + "metadata": "{\"compiler\":{\"version\":\"0.6.5+commit.f956cc89\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"landAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sandContractAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialMetaTx\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"initialWalletAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"expiryTime\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"initialSigningWallet\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"initialMaxCommissionRate\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"estate\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeDistributor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"authValidator\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"buyer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"topCornerId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"size\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountPaid\",\"type\":\"uint256\"}],\"name\":\"LandQuadPurchased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newMaxCommissionRate\",\"type\":\"uint256\"}],\"name\":\"MaxCommissionRateUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"metaTransactionProcessor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"MetaTransactionProcessor\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newWallet\",\"type\":\"address\"}],\"name\":\"NewReceivingWallet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"referrer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"referee\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"commission\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"commissionRate\",\"type\":\"uint256\"}],\"name\":\"ReferralUsed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newSigningWallet\",\"type\":\"address\"}],\"name\":\"SigningWalletUpdated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"buyer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"reserved\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"info\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"assetIds\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes\",\"name\":\"referral\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"buyLandWithSand\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"referral\",\"type\":\"bytes\"}],\"name\":\"decodeReferral\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"disableWallet\",\"type\":\"address\"}],\"name\":\"disablePreviousSigningWallet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getExpiryTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxCommissionRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMerkleRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSigningWallet\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"who\",\"type\":\"address\"}],\"name\":\"isMetaTransactionProcessor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"referrer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"referee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expiryTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"commissionRate\",\"type\":\"uint256\"}],\"name\":\"isReferralValid\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155BatchReceived\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"metaTransactionProcessor\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setMetaTransactionProcessor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"newWallet\",\"type\":\"address\"}],\"name\":\"setReceivingWallet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newMaxCommissionRate\",\"type\":\"uint256\"}],\"name\":\"updateMaxCommissionRate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newSigningWallet\",\"type\":\"address\"}],\"name\":\"updateSigningWallet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"assetIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"name\":\"withdrawAssets\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{\"buyLandWithSand(address,address,address,uint256[],bytes32,uint256[],bytes32[],bytes,bytes)\":{\"params\":{\"assetIds\":\"asset ids (lands) that will be bought\",\"buyer\":\"address that perform the payment\",\"info\":\"[X_INDEX=0] x coordinate of the Land [Y_INDEX=1] y coordinate of the Land [SIZE_INDEX=2] size of the pack of Land to purchase [PRICE_INDEX=3] price in SAND to purchase that Land\",\"proof\":\"merkleProof for that particular Land\",\"referral\":\"referral id\",\"reserved\":\"the reserved address (if any)\",\"salt\":\"The salt submitted for verification.\",\"signature\":\"A signed message specifying tx details\",\"to\":\"address that will own the purchased Land\"}},\"changeAdmin(address)\":{\"details\":\"change the administrator to be `newAdmin`.\",\"params\":{\"newAdmin\":\"address of the new administrator.\"}},\"disablePreviousSigningWallet(address)\":{\"details\":\"Disable compromised signing wallet\",\"params\":{\"disableWallet\":\"The wallet address to be disabled\"}},\"getAdmin()\":{\"details\":\"gives the current administrator of this contract.\",\"returns\":{\"_0\":\"the current administrator of this contract.\"}},\"getSigningWallet()\":{\"details\":\"signing wallet authorized for referral\",\"returns\":{\"_0\":\"the address of the signing wallet\"}},\"isMetaTransactionProcessor(address)\":{\"details\":\"check whether address `who` is given meta-transaction execution rights.\",\"params\":{\"who\":\"The address to query.\"},\"returns\":{\"_0\":\"whether the address has meta-transaction execution rights.\"}},\"isReferralValid(bytes,address,address,uint256,uint256)\":{\"params\":{\"commissionRate\":\"The commissionRate of the referral\",\"expiryTime\":\"The expiry time of the referral\",\"referee\":\"The address of the referee\",\"referrer\":\"The address of the referrer\",\"signature\":\"The signature to check (signed referral)\"},\"returns\":{\"_0\":\"True if the referral is valid\"}},\"setMetaTransactionProcessor(address,bool)\":{\"details\":\"Enable or disable the ability of `metaTransactionProcessor` to perform meta-tx (metaTransactionProcessor rights).\",\"params\":{\"enabled\":\"set whether the metaTransactionProcessor is enabled or disabled.\",\"metaTransactionProcessor\":\"address that will be given/removed metaTransactionProcessor rights.\"}},\"setReceivingWallet(address)\":{\"params\":{\"newWallet\":\"address of the new receiving wallet\"}},\"updateMaxCommissionRate(uint256)\":{\"details\":\"Update the maximum commission rate\",\"params\":{\"newMaxCommissionRate\":\"The new maximum commission rate\"}},\"updateSigningWallet(address)\":{\"details\":\"Update the signing wallet The previous wallet is still valid for a grace period (_previousSigningDelay). If you want to disable the previous wallet, use the disablePreviousSigningWallet function.\",\"params\":{\"newSigningWallet\":\"The new address of the signing wallet\"}},\"withdrawAssets(address,uint256[],uint256[])\":{\"params\":{\"assetIds\":\"the assetIds to be transferred\",\"to\":\"intended recipient of the asset tokens\",\"values\":\"the quantities of the assetIds to be transferred\"}}},\"title\":\"Estate Sale contract with referral\"},\"userdoc\":{\"methods\":{\"buyLandWithSand(address,address,address,uint256[],bytes32,uint256[],bytes32[],bytes,bytes)\":{\"notice\":\"buy Land with SAND using the merkle proof associated with it\"},\"getExpiryTime()\":{\"notice\":\"Gets the expiry time for the current sale\"},\"getMaxCommissionRate()\":{\"notice\":\"the max commission rate\"},\"getMerkleRoot()\":{\"notice\":\"Gets the Merkle root associated with the current sale\"},\"isReferralValid(bytes,address,address,uint256,uint256)\":{\"notice\":\"Check if a referral is valid\"},\"setReceivingWallet(address)\":{\"notice\":\"set the wallet receiving the proceeds\"},\"withdrawAssets(address,uint256[],uint256[])\":{\"notice\":\"enable Admin to withdraw remaining assets from EstateSaleWithFee contract\"}},\"notice\":\"This contract manages the sale of our lands as Estates\"}},\"settings\":{\"compilationTarget\":{\"src/solc_0.6/EstateSale/EstateSaleWithAuth.sol\":\"EstateSaleWithAuth\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":2000},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-0.6/cryptography/ECDSA.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.6.0;\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n // Check the signature length\\n if (signature.length != 65) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n }\\n\\n // Divide the signature in r, s and v variables\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n revert(\\\"ECDSA: invalid signature 's' value\\\");\\n }\\n\\n if (v != 27 && v != 28) {\\n revert(\\\"ECDSA: invalid signature 'v' value\\\");\\n }\\n\\n // If the signature is valid (and not malleable), return the signer address\\n address signer = ecrecover(hash, v, r, s);\\n require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n return signer;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * replicates the behavior of the\\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n * JSON-RPC method.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash));\\n }\\n}\\n\",\"keccak256\":\"0x1efcb1ccef6b3bce65467c4b704cec8d0582e35ff48352269ba8cda4b54ae3da\"},\"@openzeppelin/contracts-0.6/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.6.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xfa152b6e88a1dc50780e8f1580426dc23ad2e1e2c2f086a088adf206a202f453\"},\"@openzeppelin/contracts-0.6/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.6.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n return sub(a, b, \\\"SafeMath: subtraction overflow\\\");\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n uint256 c = a - b;\\n\\n return c;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) {\\n return 0;\\n }\\n\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers. Reverts on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n return div(a, b, \\\"SafeMath: division by zero\\\");\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers. Reverts with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n uint256 c = a / b;\\n // assert(a == b * c + a % b); // There is no case in which this doesn't hold\\n\\n return c;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * Reverts when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n return mod(a, b, \\\"SafeMath: modulo by zero\\\");\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * Reverts with custom message when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b != 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x9a9cf02622cd7a64261b10534fc3260449da25c98c9e96d1b4ae8110a20e5806\"},\"@openzeppelin/contracts-0.6/token/ERC1155/IERC1155.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.6.2;\\n\\nimport \\\"../../introspection/IERC165.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155 is IERC165 {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x31691ad0817f8cb338531b78d2ab2989027d9f27e6f8e62492b754fed9429b10\"},\"@openzeppelin/contracts-0.6/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.6.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x5c26b39d26f7ed489e555d955dcd3e01872972e71fdd1528e93ec164e4f23385\"},\"@openzeppelin/contracts-0.6/token/ERC20/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.6.0;\\n\\nimport \\\"./IERC20.sol\\\";\\nimport \\\"../../math/SafeMath.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n using SafeMath for uint256;\\n using Address for address;\\n\\n function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n }\\n\\n function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n }\\n\\n /**\\n * @dev Deprecated. This function has issues similar to the ones found in\\n * {IERC20-approve}, and its usage is discouraged.\\n *\\n * Whenever possible, use {safeIncreaseAllowance} and\\n * {safeDecreaseAllowance} instead.\\n */\\n function safeApprove(IERC20 token, address spender, uint256 value) internal {\\n // safeApprove should only be called when setting an initial allowance,\\n // or when resetting it to zero. To increase and decrease it, use\\n // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n // solhint-disable-next-line max-line-length\\n require((value == 0) || (token.allowance(address(this), spender) == 0),\\n \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n );\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n }\\n\\n function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\\n uint256 newAllowance = token.allowance(address(this), spender).add(value);\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n }\\n\\n function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {\\n uint256 newAllowance = token.allowance(address(this), spender).sub(value, \\\"SafeERC20: decreased allowance below zero\\\");\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n }\\n\\n /**\\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n * on the return value: the return value is optional (but if data is returned, it must not be false).\\n * @param token The token targeted by the call.\\n * @param data The call data (encoded using abi.encode or one of its variants).\\n */\\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that\\n // the target address contains contract code and also asserts for success in the low-level call.\\n\\n bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n if (returndata.length > 0) { // Return data is optional\\n // solhint-disable-next-line max-line-length\\n require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n }\\n }\\n}\\n\",\"keccak256\":\"0xf3b30f8a49631420635a8c35daacfcaa338012755f18a76fdd118730256f9a27\"},\"@openzeppelin/contracts-0.6/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.6.2;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies in extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, avoid-call-value\\n (bool success, ) = recipient.call{ value: amount }(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return _functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n return _functionCallWithValue(target, data, value, errorMessage);\\n }\\n\\n function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xf5fa8cbdffa5ef8be49b246b5628facc30b71707e78a45d80d93b64eff3fe390\"},\"@openzeppelin/contracts-0.6/utils/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.6.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\ncontract ReentrancyGuard {\\n // Booleans are more expensive than uint256 or any type that takes up a full\\n // word because each write operation emits an extra SLOAD to first read the\\n // slot's contents, replace the bits taken up by the boolean, and then write\\n // back. This is the compiler's defense against contract upgrades and\\n // pointer aliasing, and it cannot be disabled.\\n\\n // The values being non-zero value makes deployment a bit more expensive,\\n // but in exchange the refund on every call to nonReentrant will be lower in\\n // amount. Since refunds are capped to a percentage of the total\\n // transaction's gas, it is best to keep them low in cases like this one, to\\n // increase the likelihood of the full refund coming into effect.\\n uint256 private constant _NOT_ENTERED = 1;\\n uint256 private constant _ENTERED = 2;\\n\\n uint256 private _status;\\n\\n constructor () internal {\\n _status = _NOT_ENTERED;\\n }\\n\\n /**\\n * @dev Prevents a contract from calling itself, directly or indirectly.\\n * Calling a `nonReentrant` function from another `nonReentrant`\\n * function is not supported. It is possible to prevent this from happening\\n * by making the `nonReentrant` function external, and make it call a\\n * `private` function that does the actual work.\\n */\\n modifier nonReentrant() {\\n // On the first call to nonReentrant, _notEntered will be true\\n require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n // Any calls to nonReentrant after this point will fail\\n _status = _ENTERED;\\n\\n _;\\n\\n // By storing the original value once again, a refund is triggered (see\\n // https://eips.ethereum.org/EIPS/eip-2200)\\n _status = _NOT_ENTERED;\\n }\\n}\\n\",\"keccak256\":\"0x7ff0067f2d7df4187eaa1cb4800949b929602c9d9cb20fcaee6922a7613ef2fb\"},\"src/solc_0.6/EstateSale/AuthValidator.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity 0.6.5;\\n\\nimport \\\"@openzeppelin/contracts-0.6/cryptography/ECDSA.sol\\\";\\nimport \\\"../common/BaseWithStorage/Admin.sol\\\";\\n\\ncontract AuthValidator is Admin {\\n address public _signingAuthWallet;\\n\\n event SigningWallet(address indexed signingWallet);\\n\\n constructor(address adminWallet, address initialSigningWallet) public {\\n require(adminWallet != address(0), \\\"AuthValidator: zero address\\\");\\n\\n _admin = adminWallet;\\n _updateSigningAuthWallet(initialSigningWallet);\\n }\\n\\n function updateSigningAuthWallet(address newSigningWallet) external onlyAdmin {\\n _updateSigningAuthWallet(newSigningWallet);\\n }\\n\\n function _updateSigningAuthWallet(address newSigningWallet) internal {\\n require(newSigningWallet != address(0), \\\"AuthValidator: INVALID_SIGNING_WALLET\\\");\\n _signingAuthWallet = newSigningWallet;\\n emit SigningWallet(newSigningWallet);\\n }\\n\\n function isAuthValid(bytes memory signature, bytes32 hashedData) public view returns (bool) {\\n address signer = ECDSA.recover(ECDSA.toEthSignedMessageHash(hashedData), signature);\\n return signer == _signingAuthWallet;\\n }\\n}\\n\",\"keccak256\":\"0x949c6063b3d90a8c53ca8d3c80a1097da05b7189e87d8c8825b97acc17dbd38e\"},\"src/solc_0.6/EstateSale/EstateSaleWithAuth.sol\":{\"content\":\"/* solhint-disable not-rely-on-time, func-order */\\npragma solidity 0.6.5;\\n\\nimport \\\"@openzeppelin/contracts-0.6/utils/ReentrancyGuard.sol\\\";\\nimport \\\"@openzeppelin/contracts-0.6/math/SafeMath.sol\\\";\\nimport \\\"@openzeppelin/contracts-0.6/utils/Address.sol\\\";\\nimport \\\"@openzeppelin/contracts-0.6/token/ERC20/IERC20.sol\\\";\\nimport \\\"@openzeppelin/contracts-0.6/token/ERC1155/IERC1155.sol\\\";\\nimport \\\"./ILandToken.sol\\\";\\nimport \\\"../common/BaseWithStorage/MetaTransactionReceiver.sol\\\";\\nimport \\\"../ReferralValidator/ReferralValidator.sol\\\";\\nimport \\\"./AuthValidator.sol\\\";\\n\\n/// @title Estate Sale contract with referral\\n/// @notice This contract manages the sale of our lands as Estates\\ncontract EstateSaleWithAuth is ReentrancyGuard, MetaTransactionReceiver, ReferralValidator {\\n using SafeMath for uint256;\\n using Address for address;\\n using SafeERC20 for IERC20;\\n\\n event LandQuadPurchased(\\n address indexed buyer,\\n address indexed to,\\n uint256 indexed topCornerId,\\n uint256 size,\\n uint256 price,\\n address token,\\n uint256 amountPaid\\n );\\n\\n event NewReceivingWallet(address indexed newWallet);\\n\\n /// @notice set the wallet receiving the proceeds\\n /// @param newWallet address of the new receiving wallet\\n function setReceivingWallet(address payable newWallet) external {\\n require(newWallet != address(0), \\\"ZERO_ADDRESS\\\");\\n require(msg.sender == _admin, \\\"NOT_AUTHORIZED\\\");\\n _wallet = newWallet;\\n\\n emit NewReceivingWallet(newWallet);\\n }\\n\\n /// @notice buy Land with SAND using the merkle proof associated with it\\n /// @param buyer address that perform the payment\\n /// @param to address that will own the purchased Land\\n /// @param reserved the reserved address (if any)\\n /// @param info [X_INDEX=0] x coordinate of the Land [Y_INDEX=1] y coordinate of the Land [SIZE_INDEX=2] size of the pack of Land to purchase [PRICE_INDEX=3] price in SAND to purchase that Land\\n /// @param salt The salt submitted for verification.\\n /// @param assetIds asset ids (lands) that will be bought\\n /// @param proof merkleProof for that particular Land\\n /// @param referral referral id\\n /// @param signature A signed message specifying tx details\\n function buyLandWithSand(\\n address buyer,\\n address to,\\n address reserved,\\n uint256[] calldata info,\\n bytes32 salt,\\n uint256[] calldata assetIds,\\n bytes32[] calldata proof,\\n bytes calldata referral,\\n bytes calldata signature\\n ) external nonReentrant {\\n _checkAddressesAndExpiryTime(buyer, reserved);\\n _checkAuthAndProofValidity(to, reserved, info, salt, assetIds, proof, signature);\\n _handleFeeAndReferral(buyer, info[PRICE_INDEX], referral);\\n _mint(buyer, to, info);\\n _sendAssets(to, assetIds);\\n }\\n\\n /// @notice Gets the expiry time for the current sale\\n /// @return The expiry time, as a unix epoch\\n function getExpiryTime() external view returns (uint256) {\\n return _expiryTime;\\n }\\n\\n /// @notice Gets the Merkle root associated with the current sale\\n /// @return The Merkle root, as a bytes32 hash\\n function getMerkleRoot() external view returns (bytes32) {\\n return _merkleRoot;\\n }\\n\\n /// @notice enable Admin to withdraw remaining assets from EstateSaleWithFee contract\\n /// @param to intended recipient of the asset tokens\\n /// @param assetIds the assetIds to be transferred\\n /// @param values the quantities of the assetIds to be transferred\\n function withdrawAssets(\\n address to,\\n uint256[] calldata assetIds,\\n uint256[] calldata values\\n ) external {\\n require(msg.sender == _admin, \\\"NOT_AUTHORIZED\\\");\\n _asset.safeBatchTransferFrom(address(this), to, assetIds, values, \\\"\\\");\\n }\\n\\n function onERC1155Received(\\n address, /*operator*/\\n address, /*from*/\\n uint256, /*id*/\\n uint256, /*value*/\\n bytes calldata /*data*/\\n ) external pure returns (bytes4) {\\n return 0xf23a6e61;\\n }\\n\\n function onERC1155BatchReceived(\\n address, /*operator*/\\n address, /*from*/\\n uint256[] calldata, /*ids*/\\n uint256[] calldata, /*values*/\\n bytes calldata /*data*/\\n ) external pure returns (bytes4) {\\n return 0xbc197c81;\\n }\\n\\n function _sendAssets(address to, uint256[] memory assetIds) internal {\\n uint256[] memory values = new uint256[](assetIds.length);\\n for (uint256 i = 0; i < assetIds.length; i++) {\\n values[i] = 1;\\n }\\n _asset.safeBatchTransferFrom(address(this), to, assetIds, values, \\\"\\\");\\n }\\n\\n // NOTE: _checkAddressesAndExpiryTime & _checkAuthAndProofValidity were split due to a stack too deep issue\\n function _checkAddressesAndExpiryTime(address buyer, address reserved) internal view {\\n /* solium-disable-next-line security/no-block-members */\\n require(block.timestamp < _expiryTime, \\\"SALE_IS_OVER\\\");\\n require(buyer == msg.sender || _metaTransactionContracts[msg.sender], \\\"NOT_AUTHORIZED\\\");\\n require(reserved == address(0) || reserved == buyer, \\\"RESERVED_LAND\\\");\\n }\\n\\n // NOTE: _checkAddressesAndExpiryTime & _checkAuthAndProofValidity were split due to a stack too deep issue\\n function _checkAuthAndProofValidity(\\n address to,\\n address reserved,\\n uint256[] memory info,\\n bytes32 salt,\\n uint256[] memory assetIds,\\n bytes32[] memory proof,\\n bytes memory signature\\n ) internal view {\\n bytes32 hashedData = keccak256(\\n abi.encodePacked(\\n to,\\n reserved,\\n info[X_INDEX],\\n info[Y_INDEX],\\n info[SIZE_INDEX],\\n info[PRICE_INDEX],\\n salt,\\n keccak256(abi.encodePacked(assetIds)),\\n keccak256(abi.encodePacked(proof))\\n )\\n );\\n require(_authValidator.isAuthValid(signature, hashedData), \\\"INVALID_AUTH\\\");\\n\\n bytes32 leaf = _generateLandHash(\\n info[X_INDEX],\\n info[Y_INDEX],\\n info[SIZE_INDEX],\\n info[PRICE_INDEX],\\n reserved,\\n salt,\\n assetIds\\n );\\n require(_verify(proof, leaf), \\\"INVALID_LAND\\\");\\n }\\n\\n function _mint(\\n address buyer,\\n address to,\\n uint256[] memory info\\n ) internal {\\n if (info[SIZE_INDEX] == 1 || _estate == address(0)) {\\n _land.mintQuad(to, info[SIZE_INDEX], info[X_INDEX], info[Y_INDEX], \\\"\\\");\\n } else {\\n _land.mintQuad(_estate, info[SIZE_INDEX], info[X_INDEX], info[Y_INDEX], abi.encode(to));\\n }\\n emit LandQuadPurchased(\\n buyer,\\n to,\\n info[X_INDEX] + (info[Y_INDEX] * GRID_SIZE),\\n info[SIZE_INDEX],\\n info[PRICE_INDEX],\\n address(_sand),\\n info[PRICE_INDEX]\\n );\\n }\\n\\n function _generateLandHash(\\n uint256 x,\\n uint256 y,\\n uint256 size,\\n uint256 price,\\n address reserved,\\n bytes32 salt,\\n uint256[] memory assetIds\\n ) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(x, y, size, price, reserved, salt, assetIds));\\n }\\n\\n function _verify(bytes32[] memory proof, bytes32 leaf) internal view returns (bool) {\\n bytes32 computedHash = leaf;\\n\\n for (uint256 i = 0; i < proof.length; i++) {\\n bytes32 proofElement = proof[i];\\n\\n if (computedHash < proofElement) {\\n computedHash = keccak256(abi.encodePacked(computedHash, proofElement));\\n } else {\\n computedHash = keccak256(abi.encodePacked(proofElement, computedHash));\\n }\\n }\\n\\n return computedHash == _merkleRoot;\\n }\\n\\n function _handleFeeAndReferral(\\n address buyer,\\n uint256 priceInSand,\\n bytes memory referral\\n ) internal {\\n // send 5% fee to a specially configured instance of FeeDistributor.sol\\n uint256 remainingAmountInSand = _handleSandFee(buyer, priceInSand);\\n\\n // calculate referral based on 95% of original priceInSand\\n handleReferralWithERC20(buyer, remainingAmountInSand, referral, _wallet, address(_sand));\\n }\\n\\n function _handleSandFee(address buyer, uint256 priceInSand) internal returns (uint256) {\\n uint256 feeAmountInSand = priceInSand.mul(FEE).div(100);\\n _sand.safeTransferFrom(buyer, address(_feeDistributor), feeAmountInSand);\\n return priceInSand.sub(feeAmountInSand);\\n }\\n\\n uint256 internal constant GRID_SIZE = 408; // 408 is the size of the Land\\n\\n IERC1155 internal immutable _asset;\\n ILandToken internal immutable _land;\\n IERC20 internal immutable _sand;\\n address internal immutable _estate;\\n address internal immutable _feeDistributor;\\n\\n address payable internal _wallet;\\n AuthValidator internal _authValidator;\\n uint256 internal immutable _expiryTime;\\n bytes32 internal immutable _merkleRoot;\\n\\n uint256 private constant FEE = 5; // percentage of land sale price to be diverted to a specially configured instance of FeeDistributor, shown as an integer\\n // buyLandWithSand info indexes\\n uint256 private constant X_INDEX = 0;\\n uint256 private constant Y_INDEX = 1;\\n uint256 private constant SIZE_INDEX = 2;\\n uint256 private constant PRICE_INDEX = 3;\\n\\n constructor(\\n address landAddress,\\n address sandContractAddress,\\n address initialMetaTx,\\n address admin,\\n address payable initialWalletAddress,\\n bytes32 merkleRoot,\\n uint256 expiryTime,\\n address initialSigningWallet,\\n uint256 initialMaxCommissionRate,\\n address estate,\\n address asset,\\n address feeDistributor,\\n address authValidator\\n ) public ReferralValidator(initialSigningWallet, initialMaxCommissionRate) {\\n require(landAddress.isContract(), \\\"EstateSaleWithAuth: is not a contract\\\");\\n require(sandContractAddress.isContract(), \\\"EstateSaleWithAuth: is not a contract\\\");\\n require(initialMetaTx != address(0), \\\"EstateSaleWithAuth: zero address\\\");\\n require(admin != address(0), \\\"EstateSaleWithAuth: zero address\\\");\\n require(initialWalletAddress != address(0), \\\"EstateSaleWithAuth: zero address\\\");\\n require(asset.isContract(), \\\"EstateSaleWithAuth: is not a contract\\\");\\n require(feeDistributor != address(0), \\\"EstateSaleWithAuth: zero address\\\");\\n require(authValidator.isContract(), \\\"EstateSaleWithAuth: is not a contract\\\");\\n\\n\\n _land = ILandToken(landAddress);\\n _sand = IERC20(sandContractAddress);\\n _setMetaTransactionProcessor(initialMetaTx, true);\\n _wallet = initialWalletAddress;\\n _merkleRoot = merkleRoot;\\n _expiryTime = expiryTime;\\n _admin = admin;\\n _estate = estate;\\n _asset = IERC1155(asset);\\n _feeDistributor = feeDistributor;\\n _authValidator = AuthValidator(authValidator);\\n }\\n}\\n\",\"keccak256\":\"0x039331cd15021fe3b9312674d873fdc02b968ae2af5343caf14e6c054a2fcc1d\"},\"src/solc_0.6/EstateSale/ILandToken.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.6.5;\\n\\n\\ninterface ILandToken {\\n function mintQuad(\\n address to,\\n uint256 size,\\n uint256 x,\\n uint256 y,\\n bytes calldata data\\n ) external;\\n}\\n\",\"keccak256\":\"0x8d03b53d325fbb052d78f274b106f14bf9a5afc928451b26bc9e579585ae44b2\"},\"src/solc_0.6/ReferralValidator/ReferralValidator.sol\":{\"content\":\"/* solhint-disable not-rely-on-time, func-order */\\n\\n// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.6.5;\\n\\nimport \\\"@openzeppelin/contracts-0.6/utils/Address.sol\\\";\\nimport \\\"@openzeppelin/contracts-0.6/cryptography/ECDSA.sol\\\";\\nimport \\\"@openzeppelin/contracts-0.6/token/ERC20/SafeERC20.sol\\\";\\nimport \\\"@openzeppelin/contracts-0.6/math/SafeMath.sol\\\";\\nimport \\\"../common/BaseWithStorage/Admin.sol\\\";\\n\\n\\n/// @dev This contract verifies if a referral is valid\\ncontract ReferralValidator is Admin {\\n using Address for address;\\n using SafeERC20 for IERC20;\\n\\n address private _signingWallet;\\n uint256 private _maxCommissionRate;\\n\\n mapping(address => uint256) private _previousSigningWallets;\\n uint256 constant private _previousSigningDelay = 10 days;\\n\\n event ReferralUsed(\\n address indexed referrer,\\n address indexed referee,\\n address indexed token,\\n uint256 amount,\\n uint256 commission,\\n uint256 commissionRate\\n );\\n\\n event SigningWalletUpdated(address indexed newSigningWallet);\\n event MaxCommissionRateUpdated(uint256 indexed newMaxCommissionRate);\\n\\n constructor(address initialSigningWallet, uint256 initialMaxCommissionRate) public {\\n require(initialSigningWallet != address(0), \\\"ReferralValidator: zero address\\\");\\n\\n _signingWallet = initialSigningWallet;\\n _maxCommissionRate = initialMaxCommissionRate;\\n }\\n\\n /**\\n * @dev Update the signing wallet\\n * The previous wallet is still valid for a grace period (_previousSigningDelay). If you want to\\n * disable the previous wallet, use the disablePreviousSigningWallet function.\\n * @param newSigningWallet The new address of the signing wallet\\n */\\n function updateSigningWallet(address newSigningWallet) external onlyAdmin {\\n require(newSigningWallet != address(0), \\\"ReferralValidator: zero address\\\");\\n _previousSigningWallets[_signingWallet] = now + _previousSigningDelay;\\n _signingWallet = newSigningWallet;\\n\\n emit SigningWalletUpdated(newSigningWallet);\\n }\\n\\n /**\\n * @dev Disable compromised signing wallet\\n * @param disableWallet The wallet address to be disabled\\n */\\n function disablePreviousSigningWallet(address disableWallet) external {\\n require(_admin == msg.sender, \\\"ReferralValidator: Sender not admin\\\");\\n require(disableWallet != address(0), \\\"ReferralValidator: zero address\\\");\\n _previousSigningWallets[disableWallet] = 0;\\n }\\n\\n /**\\n * @dev signing wallet authorized for referral\\n * @return the address of the signing wallet\\n */\\n function getSigningWallet() external view returns (address) {\\n return _signingWallet;\\n }\\n\\n /**\\n * @notice the max commission rate\\n * @return the maximum commission rate that a referral can give\\n */\\n function getMaxCommissionRate() external view returns (uint256) {\\n return _maxCommissionRate;\\n }\\n\\n /**\\n * @dev Update the maximum commission rate\\n * @param newMaxCommissionRate The new maximum commission rate\\n */\\n function updateMaxCommissionRate(uint256 newMaxCommissionRate) external onlyAdmin {\\n _maxCommissionRate = newMaxCommissionRate;\\n\\n emit MaxCommissionRateUpdated(newMaxCommissionRate);\\n }\\n\\n function handleReferralWithETH(\\n uint256 amount,\\n bytes memory referral,\\n address payable destination\\n ) internal {\\n uint256 amountForDestination = amount;\\n\\n require(msg.value >= amount, \\\"ReferralValidator: insufficient funds\\\");\\n\\n if (referral.length > 0) {\\n (bytes memory signature, address referrer, address referee, uint256 expiryTime, uint256 commissionRate) = decodeReferral(referral);\\n\\n require(commissionRate < 10000, \\\"ReferralValidator: invalid commisionRate\\\");\\n\\n uint256 commission = 0;\\n\\n if (isReferralValid(signature, referrer, referee, expiryTime, commissionRate)) {\\n commission = SafeMath.div(SafeMath.mul(amount, commissionRate), 10000);\\n\\n emit ReferralUsed(referrer, referee, address(0), amount, commission, commissionRate);\\n amountForDestination = SafeMath.sub(amountForDestination, commission);\\n }\\n\\n if (commission > 0) {\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, ) = payable(referrer).call{value:commission}(\\\"\\\");\\n require(success, \\\"ReferralValidator: Transfer failed.\\\");\\n }\\n }\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, ) = destination.call{value:amountForDestination}(\\\"\\\");\\n require(success, \\\"ReferralValidator: Transfer failed.\\\");\\n }\\n\\n function handleReferralWithERC20(\\n address buyer,\\n uint256 amount,\\n bytes memory referral,\\n address payable destination,\\n address tokenAddress\\n ) internal {\\n IERC20 token = IERC20(tokenAddress);\\n uint256 amountForDestination = amount;\\n\\n if (referral.length > 0) {\\n (bytes memory signature, address referrer, address referee, uint256 expiryTime, uint256 commissionRate) = decodeReferral(referral);\\n\\n uint256 commission = 0;\\n\\n if (isReferralValid(signature, referrer, referee, expiryTime, commissionRate)) {\\n commission = SafeMath.div(SafeMath.mul(amount, commissionRate), 10000);\\n\\n emit ReferralUsed(referrer, referee, tokenAddress, amount, commission, commissionRate);\\n amountForDestination = SafeMath.sub(amountForDestination, commission);\\n }\\n\\n if (commission > 0) {\\n token.safeTransferFrom(buyer, referrer, commission);\\n }\\n }\\n\\n token.safeTransferFrom(buyer, destination, amountForDestination);\\n }\\n\\n /**\\n * @notice Check if a referral is valid\\n * @param signature The signature to check (signed referral)\\n * @param referrer The address of the referrer\\n * @param referee The address of the referee\\n * @param expiryTime The expiry time of the referral\\n * @param commissionRate The commissionRate of the referral\\n * @return True if the referral is valid\\n */\\n function isReferralValid(\\n bytes memory signature,\\n address referrer,\\n address referee,\\n uint256 expiryTime,\\n uint256 commissionRate\\n ) public view returns (bool) {\\n if (commissionRate > _maxCommissionRate || referrer == referee || now > expiryTime) {\\n return false;\\n }\\n\\n bytes32 hashedData = keccak256(abi.encodePacked(referrer, referee, expiryTime, commissionRate));\\n\\n address signer = ECDSA.recover(keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hashedData)), signature);\\n\\n if (_previousSigningWallets[signer] >= now) {\\n return true;\\n }\\n\\n return _signingWallet == signer;\\n }\\n\\n function decodeReferral(bytes memory referral)\\n public\\n pure\\n returns (\\n bytes memory,\\n address,\\n address,\\n uint256,\\n uint256\\n )\\n {\\n (bytes memory signature, address referrer, address referee, uint256 expiryTime, uint256 commissionRate) = abi.decode(\\n referral,\\n (bytes, address, address, uint256, uint256)\\n );\\n\\n return (signature, referrer, referee, expiryTime, commissionRate);\\n }\\n}\\n\",\"keccak256\":\"0xad5300e058f15841c54f3bc70ad5c89a6c9a0853aa6e0b542e7a9e59192687d2\"},\"src/solc_0.6/common/BaseWithStorage/Admin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.6.5;\\n\\n\\ncontract Admin {\\n address internal _admin;\\n\\n /// @dev emitted when the contract administrator is changed.\\n /// @param oldAdmin address of the previous administrator.\\n /// @param newAdmin address of the new administrator.\\n event AdminChanged(address oldAdmin, address newAdmin);\\n\\n /// @dev gives the current administrator of this contract.\\n /// @return the current administrator of this contract.\\n function getAdmin() external view returns (address) {\\n return _admin;\\n }\\n\\n /// @dev change the administrator to be `newAdmin`.\\n /// @param newAdmin address of the new administrator.\\n function changeAdmin(address newAdmin) external {\\n require(msg.sender == _admin, \\\"only admin can change admin\\\");\\n require(_admin != newAdmin, \\\"already admin\\\");\\n emit AdminChanged(_admin, newAdmin);\\n _admin = newAdmin;\\n }\\n\\n modifier onlyAdmin() {\\n require(msg.sender == _admin, \\\"only admin allowed\\\");\\n _;\\n }\\n}\\n\",\"keccak256\":\"0xe1a95ec41b32e523a6fad060f90aa6d03a72a545857a91c2f51473b6072637dc\"},\"src/solc_0.6/common/BaseWithStorage/MetaTransactionReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.6.5;\\n\\nimport \\\"./Admin.sol\\\";\\n\\ncontract MetaTransactionReceiver is Admin {\\n mapping(address => bool) internal _metaTransactionContracts;\\n\\n /// @dev emiited when a meta transaction processor is enabled/disabled\\n /// @param metaTransactionProcessor address that will be given/removed metaTransactionProcessor rights.\\n /// @param enabled set whether the metaTransactionProcessor is enabled or disabled.\\n event MetaTransactionProcessor(address metaTransactionProcessor, bool enabled);\\n\\n /// @dev Enable or disable the ability of `metaTransactionProcessor` to perform meta-tx (metaTransactionProcessor rights).\\n /// @param metaTransactionProcessor address that will be given/removed metaTransactionProcessor rights.\\n /// @param enabled set whether the metaTransactionProcessor is enabled or disabled.\\n function setMetaTransactionProcessor(address metaTransactionProcessor, bool enabled) public onlyAdmin {\\n _setMetaTransactionProcessor(metaTransactionProcessor, enabled);\\n }\\n\\n function _setMetaTransactionProcessor(address metaTransactionProcessor, bool enabled) internal {\\n require(metaTransactionProcessor != address(0), \\\"MetaTransactionReceiver: zero address\\\");\\n _metaTransactionContracts[metaTransactionProcessor] = enabled;\\n emit MetaTransactionProcessor(metaTransactionProcessor, enabled);\\n }\\n\\n /// @dev check whether address `who` is given meta-transaction execution rights.\\n /// @param who The address to query.\\n /// @return whether the address has meta-transaction execution rights.\\n function isMetaTransactionProcessor(address who) external view returns (bool) {\\n return _metaTransactionContracts[who];\\n }\\n}\\n\",\"keccak256\":\"0x4a11e21dfc85fb9330c02abc019bfb5b1e40d0fcd36e2a2e652d4c06b6e8105b\"}},\"version\":1}", + "bytecode": "0x6101606040523480156200001257600080fd5b50604051620031e9380380620031e983398181016040526101a08110156200003957600080fd5b508051602082015160408301516060840151608085015160a086015160c087015160e08801516101008901516101208a01516101408b01516101608c0151610180909c015160016000559a9b999a9899979896979596949593949293919290919085856001600160a01b038216620000f8576040805162461bcd60e51b815260206004820152601f60248201527f526566657272616c56616c696461746f723a207a65726f206164647265737300604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b0393841617905560045562000130908e1662000459602090811b62002adc17901c565b6200016d5760405162461bcd60e51b8152600401808060200182810382526025815260200180620031c46025913960400191505060405180910390fd5b6200018c8c6001600160a01b03166200045960201b62002adc1760201c565b620001c95760405162461bcd60e51b8152600401808060200182810382526025815260200180620031c46025913960400191505060405180910390fd5b6001600160a01b038b1662000214576040805162461bcd60e51b815260206004820181905260248201526000805160206200317f833981519152604482015290519081900360640190fd5b6001600160a01b038a166200025f576040805162461bcd60e51b815260206004820181905260248201526000805160206200317f833981519152604482015290519081900360640190fd5b6001600160a01b038916620002aa576040805162461bcd60e51b815260206004820181905260248201526000805160206200317f833981519152604482015290519081900360640190fd5b620002c9836001600160a01b03166200045960201b62002adc1760201c565b620003065760405162461bcd60e51b8152600401808060200182810382526025815260200180620031c46025913960400191505060405180910390fd5b6001600160a01b03821662000351576040805162461bcd60e51b815260206004820181905260248201526000805160206200317f833981519152604482015290519081900360640190fd5b62000370816001600160a01b03166200045960201b62002adc1760201c565b620003ad5760405162461bcd60e51b8152600401808060200182810382526025815260200180620031c46025913960400191505060405180910390fd5b6001600160601b031960608e811b821660a0528d901b1660c052620003dd8b60016001600160e01b036200045f16565b600680546001600160a01b039a8b166001600160a01b031991821617909155610140989098526101209690965260018054998916998816999099179098556001600160601b0319606092831b811660e05290821b811660805296901b909516610100525060078054919093169116179055506200050a92505050565b3b151590565b6001600160a01b038216620004a65760405162461bcd60e51b81526004018080602001828103825260258152602001806200319f6025913960400191505060405180910390fd5b6001600160a01b038216600081815260026020908152604091829020805460ff191685151590811790915582519384529083015280517fb21eb88b4e33b3f1281830a7178d74d8aa73220416215726b68ae23d539515cb9281900390910190a15050565b60805160601c60a05160601c60c05160601c60e05160601c6101005160601c6101205161014051612bef6200059060003980610be0528061247e525080610bbc528061159d5250806124fc525080611af25280611c4f525080611aa85280611e4e52806124d9525080611b235280611c205250806111075280611f3a5250612bef6000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c8063984d6252116100b2578063c10a420811610081578063dc5074af11610066578063dc5074af146108a0578063e56f8a9e146108c6578063f23a6e61146108e357610136565b8063c10a4208146107c1578063caed35001461089857610136565b8063984d62521461055f578063ab1cc78c14610631578063b522ecff14610639578063bc197c811461065f57610136565b806365194ce71161010957806378e6e5b9116100ee57806378e6e5b9146104e55780638a04af6a1461050b5780638f2839701461053957610136565b806365194ce7146103635780636e9960c3146104c157610136565b80631187fd3c1461013b57806325cb5bc01461031b578063495906571461033557806358bc29441461033d575b600080fd5b610319600480360361012081101561015257600080fd5b6001600160a01b038235811692602081013582169260408201359092169181019060808101606082013564010000000081111561018e57600080fd5b8201836020820111156101a057600080fd5b803590602001918460208302840111640100000000831117156101c257600080fd5b919390928235926040810190602001356401000000008111156101e457600080fd5b8201836020820111156101f657600080fd5b8035906020019184602083028401116401000000008311171561021857600080fd5b91939092909160208101903564010000000081111561023657600080fd5b82018360208201111561024857600080fd5b8035906020019184602083028401116401000000008311171561026a57600080fd5b91939092909160208101903564010000000081111561028857600080fd5b82018360208201111561029a57600080fd5b803590602001918460018302840111640100000000831117156102bc57600080fd5b9193909290916020810190356401000000008111156102da57600080fd5b8201836020820111156102ec57600080fd5b8035906020019184600183028401116401000000008311171561030e57600080fd5b509092509050610978565b005b610323610bba565b60408051918252519081900360200190f35b610323610bde565b6103196004803603602081101561035357600080fd5b50356001600160a01b0316610c02565b6104096004803603602081101561037957600080fd5b81019060208101813564010000000081111561039457600080fd5b8201836020820111156103a657600080fd5b803590602001918460018302840111640100000000831117156103c857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610d2e945050505050565b6040518080602001866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001848152602001838152602001828103825287818151815260200191508051906020019080838360005b8381101561048257818101518382015260200161046a565b50505050905090810190601f1680156104af5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390f35b6104c9610e33565b604080516001600160a01b039092168252519081900360200190f35b610319600480360360208110156104fb57600080fd5b50356001600160a01b0316610e42565b6103196004803603604081101561052157600080fd5b506001600160a01b0381351690602001351515610f00565b6103196004803603602081101561054f57600080fd5b50356001600160a01b0316610f6d565b6103196004803603606081101561057557600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156105a057600080fd5b8201836020820111156105b257600080fd5b803590602001918460208302840111640100000000831117156105d457600080fd5b9193909290916020810190356401000000008111156105f257600080fd5b82018360208201111561060457600080fd5b8035906020019184602083028401116401000000008311171561062657600080fd5b5090925090506110a6565b610323611231565b6103196004803603602081101561064f57600080fd5b50356001600160a01b0316611237565b61078c600480360360a081101561067557600080fd5b6001600160a01b0382358116926020810135909116918101906060810160408201356401000000008111156106a957600080fd5b8201836020820111156106bb57600080fd5b803590602001918460208302840111640100000000831117156106dd57600080fd5b9193909290916020810190356401000000008111156106fb57600080fd5b82018360208201111561070d57600080fd5b8035906020019184602083028401116401000000008311171561072f57600080fd5b91939092909160208101903564010000000081111561074d57600080fd5b82018360208201111561075f57600080fd5b8035906020019184600183028401116401000000008311171561078157600080fd5b509092509050611348565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b610884600480360360a08110156107d757600080fd5b8101906020810181356401000000008111156107f257600080fd5b82018360208201111561080457600080fd5b8035906020019184600183028401116401000000008311171561082657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b038335811694506020840135169260408101359250606001359050611375565b604080519115158252519081900360200190f35b6104c96114b1565b610884600480360360208110156108b657600080fd5b50356001600160a01b03166114c0565b610319600480360360208110156108dc57600080fd5b50356114de565b61078c600480360360a08110156108f957600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a08101608082013564010000000081111561093957600080fd5b82018360208201111561094b57600080fd5b8035906020019184600183028401116401000000008311171561096d57600080fd5b509092509050611570565b600260005414156109d0576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026000556109df8e8d61159b565b610ad68d8d8d8d80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508c8c8c80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508b8b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020601f8d018190048102820181019092528b815292508b91508a90819084018382808284376000920191909152506116fe92505050565b610b2a8e8c8c6003818110610ae757fe5b9050602002013586868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a8192505050565b610b688e8e8d8d80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250611ad292505050565b610ba58d898980806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250611ec392505050565b50506001600055505050505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b6001546001600160a01b03163314610c61576040805162461bcd60e51b815260206004820152601260248201527f6f6e6c792061646d696e20616c6c6f7765640000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b038116610cbc576040805162461bcd60e51b815260206004820152601f60248201527f526566657272616c56616c696461746f723a207a65726f206164647265737300604482015290519081900360640190fd5b600380546001600160a01b03908116600090815260056020526040808220620d2f0042019055835473ffffffffffffffffffffffffffffffffffffffff1916928516928317909355915190917fbbb5fb2ee7e707ae0c968f63e94211ea81e66a718c34e2f810a7619e5678a21791a250565b606060008060008060606000806000808a80602001905160a0811015610d5357600080fd5b8101908080516040519392919084640100000000821115610d7357600080fd5b908301906020820185811115610d8857600080fd5b8251640100000000811182820188101715610da257600080fd5b82525081516020918201929091019080838360005b83811015610dcf578181015183820152602001610db7565b50505050905090810190601f168015610dfc5780820380516001836020036101000a031916815260200191505b5060409081526020820151908201516060830151608090930151959f50909d509b5099509197505050505050505091939590929450565b6001546001600160a01b031690565b6001546001600160a01b03163314610e8b5760405162461bcd60e51b8152600401808060200182810382526023815260200180612b056023913960400191505060405180910390fd5b6001600160a01b038116610ee6576040805162461bcd60e51b815260206004820152601f60248201527f526566657272616c56616c696461746f723a207a65726f206164647265737300604482015290519081900360640190fd5b6001600160a01b0316600090815260056020526040812055565b6001546001600160a01b03163314610f5f576040805162461bcd60e51b815260206004820152601260248201527f6f6e6c792061646d696e20616c6c6f7765640000000000000000000000000000604482015290519081900360640190fd5b610f698282612087565b5050565b6001546001600160a01b03163314610fcc576040805162461bcd60e51b815260206004820152601b60248201527f6f6e6c792061646d696e2063616e206368616e67652061646d696e0000000000604482015290519081900360640190fd5b6001546001600160a01b038281169116141561102f576040805162461bcd60e51b815260206004820152600d60248201527f616c72656164792061646d696e00000000000000000000000000000000000000604482015290519081900360640190fd5b600154604080516001600160a01b039283168152918316602083015280517f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f9281900390910190a16001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6001546001600160a01b03163314611105576040805162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a4544000000000000000000000000000000000000604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632eb2c2d63087878787876040518763ffffffff1660e01b815260040180876001600160a01b03166001600160a01b03168152602001866001600160a01b03166001600160a01b031681526020018060200180602001806020018481038452888882818152602001925060200280828437600083820152601f01601f19169091018581038452868152602090810191508790870280828437600081840152601f19601f8201169050808301925050508481038252600081526020016020019950505050505050505050600060405180830381600087803b15801561121257600080fd5b505af1158015611226573d6000803e3d6000fd5b505050505050505050565b60045490565b6001600160a01b038116611292576040805162461bcd60e51b815260206004820152600c60248201527f5a45524f5f414444524553530000000000000000000000000000000000000000604482015290519081900360640190fd5b6001546001600160a01b031633146112f1576040805162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a4544000000000000000000000000000000000000604482015290519081900360640190fd5b6006805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f4d66958b757eb92a1b43d02be4c38c9500b73f532420ee3706cb43d420ba023690600090a250565b7fbc197c810000000000000000000000000000000000000000000000000000000098975050505050505050565b60006004548211806113985750836001600160a01b0316856001600160a01b0316145b806113a257508242115b156113af575060006114a8565b60408051606087811b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009081166020808501919091529188901b166034830152604882018690526068808301869052835180840390910181526088830184528051908201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000060a884015260c48084018290528451808503909101815260e49093019093528151910120600090611466908961214e565b6001600160a01b0381166000908152600560205260409020549091504211611493576001925050506114a8565b6003546001600160a01b039081169116149150505b95945050505050565b6003546001600160a01b031690565b6001600160a01b031660009081526002602052604090205460ff1690565b6001546001600160a01b0316331461153d576040805162461bcd60e51b815260206004820152601260248201527f6f6e6c792061646d696e20616c6c6f7765640000000000000000000000000000604482015290519081900360640190fd5b600481905560405181907f774069781371d65424b3b0b101c1d40014532cac040f979595b99a3fcf8ce08c90600090a250565b7ff23a6e61000000000000000000000000000000000000000000000000000000009695505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000421061160f576040805162461bcd60e51b815260206004820152600c60248201527f53414c455f49535f4f5645520000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b03821633148061163557503360009081526002602052604090205460ff165b611686576040805162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a4544000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b03811615806116ad5750816001600160a01b0316816001600160a01b0316145b610f69576040805162461bcd60e51b815260206004820152600d60248201527f52455345525645445f4c414e4400000000000000000000000000000000000000604482015290519081900360640190fd5b600087878760008151811061170f57fe5b60200260200101518860018151811061172457fe5b60200260200101518960028151811061173957fe5b60200260200101518a60038151811061174e57fe5b60200260200101518a8a60405160200180828051906020019060200280838360005b83811015611788578181015183820152602001611770565b50505050905001915050604051602081830303815290604052805190602001208a60405160200180828051906020019060200280838360005b838110156117d95781810151838201526020016117c1565b5050505090500191505060405160208183030381529060405280519060200120604051602001808a6001600160a01b03166001600160a01b031660601b8152601401896001600160a01b03166001600160a01b031660601b81526014018881526020018781526020018681526020018581526020018481526020018381526020018281526020019950505050505050505050604051602081830303815290604052805190602001209050600760009054906101000a90046001600160a01b03166001600160a01b031663012847ed83836040518363ffffffff1660e01b81526004018080602001838152602001828103825284818151815260200191508051906020019080838360005b838110156118fb5781810151838201526020016118e3565b50505050905090810190601f1680156119285780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b15801561194657600080fd5b505afa15801561195a573d6000803e3d6000fd5b505050506040513d602081101561197057600080fd5b50516119c3576040805162461bcd60e51b815260206004820152600c60248201527f494e56414c49445f415554480000000000000000000000000000000000000000604482015290519081900360640190fd5b6000611a24876000815181106119d557fe5b6020026020010151886001815181106119ea57fe5b6020026020010151896002815181106119ff57fe5b60200260200101518a600381518110611a1457fe5b60200260200101518c8b8b612337565b9050611a3084826123dc565b611226576040805162461bcd60e51b815260206004820152600c60248201527f494e56414c49445f4c414e440000000000000000000000000000000000000000604482015290519081900360640190fd5b6000611a8d84846124a5565b600654909150611acc908590839085906001600160a01b03167f000000000000000000000000000000000000000000000000000000000000000061253f565b50505050565b80600281518110611adf57fe5b602002602001015160011480611b1c57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316155b15611c1e577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e1e3bbf8383600281518110611b5e57fe5b602002602001015184600081518110611b7357fe5b602002602001015185600181518110611b8857fe5b60200260200101516040518563ffffffff1660e01b815260040180856001600160a01b03166001600160a01b031681526020018481526020018381526020018281526020018060200182810382526000815260200160200195505050505050600060405180830381600087803b158015611c0157600080fd5b505af1158015611c15573d6000803e3d6000fd5b50505050611dbe565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e1e3bbf7f000000000000000000000000000000000000000000000000000000000000000083600281518110611c7b57fe5b602002602001015184600081518110611c9057fe5b602002602001015185600181518110611ca557fe5b60200260200101518760405160200180826001600160a01b03166001600160a01b031681526020019150506040516020818303038152906040526040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b0316815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611d55578181015183820152602001611d3d565b50505050905090810190601f168015611d825780820380516001836020036101000a031916815260200191505b509650505050505050600060405180830381600087803b158015611da557600080fd5b505af1158015611db9573d6000803e3d6000fd5b505050505b61019881600181518110611dce57fe5b60200260200101510281600081518110611de457fe5b602002602001015101826001600160a01b0316846001600160a01b03167fe4dfa6ac11314892f3029b34a25b1a887da3b1cab2bbf8506d87128ba6e3ac0284600281518110611e2f57fe5b602002602001015185600381518110611e4457fe5b60200260200101517f000000000000000000000000000000000000000000000000000000000000000087600381518110611e7a57fe5b602002602001015160405180858152602001848152602001836001600160a01b03166001600160a01b0316815260200182815260200194505050505060405180910390a4505050565b6060815167ffffffffffffffff81118015611edd57600080fd5b50604051908082528060200260200182016040528015611f07578160200160208202803683370190505b50905060005b8251811015611f37576001828281518110611f2457fe5b6020908102919091010152600101611f0d565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632eb2c2d6308585856040518563ffffffff1660e01b815260040180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b03168152602001806020018060200180602001848103845286818151815260200191508051906020019060200280838360005b83811015611ff2578181015183820152602001611fda565b50505050905001848103835285818151815260200191508051906020019060200280838360005b83811015612031578181015183820152602001612019565b50505050905001848103825260008152602001602001975050505050505050600060405180830381600087803b15801561206a57600080fd5b505af115801561207e573d6000803e3d6000fd5b50505050505050565b6001600160a01b0382166120cc5760405162461bcd60e51b8152600401808060200182810382526025815260200180612b6b6025913960400191505060405180910390fd5b6001600160a01b03821660008181526002602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915582519384529083015280517fb21eb88b4e33b3f1281830a7178d74d8aa73220416215726b68ae23d539515cb9281900390910190a15050565b600081516041146121a6576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156122175760405162461bcd60e51b8152600401808060200182810382526022815260200180612ae36022913960400191505060405180910390fd5b8060ff16601b1415801561222f57508060ff16601c14155b1561226b5760405162461bcd60e51b8152600401808060200182810382526022815260200180612b286022913960400191505060405180910390fd5b60408051600080825260208083018085528a905260ff85168385015260608301879052608083018690529251909260019260a080820193601f1981019281900390910190855afa1580156122c3573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661232b576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b93505050505b92915050565b60008787878787878760405160200180888152602001878152602001868152602001858152602001846001600160a01b03166001600160a01b031660601b8152601401838152602001828051906020019060200280838360005b838110156123a9578181015183820152602001612391565b50505050905001975050505050505050604051602081830303815290604052805190602001209050979650505050505050565b600081815b845181101561247b5760008582815181106123f857fe5b60200260200101519050808310156124405782816040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209250612472565b808360405160200180838152602001828152602001925050506040516020818303038152906040528051906020012092505b506001016123e1565b507f0000000000000000000000000000000000000000000000000000000000000000149392505050565b6000806124ca60646124be85600563ffffffff61264716565b9063ffffffff6126a716565b90506125276001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016857f00000000000000000000000000000000000000000000000000000000000000008463ffffffff6126e916565b612537838263ffffffff61277116565b949350505050565b8251819085901561262c57606060008060008061255b8a610d2e565b93985091965094509250905060006125768686868686611375565b15612604576125906125888d84612647565b6127106126a7565b9050886001600160a01b0316846001600160a01b0316866001600160a01b03167fac7a699eb95c3c6d390ec4626de17ef9a67b35891efdb197beba7c7fdd45fac48f858760405180848152602001838152602001828152602001935050505060405180910390a46126018782612771565b96505b8015612625576126256001600160a01b0389168e878463ffffffff6126e916565b5050505050505b61207e6001600160a01b03831688868463ffffffff6126e916565b60008261265657506000612331565b8282028284828161266357fe5b04146126a05760405162461bcd60e51b8152600401808060200182810382526021815260200180612b4a6021913960400191505060405180910390fd5b9392505050565b60006126a083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506127b3565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052611acc908590612855565b60006126a083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061290b565b6000818361283f5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156128045781810151838201526020016127ec565b50505050905090810190601f1680156128315780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161284b57fe5b0495945050505050565b60606128aa826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166129659092919063ffffffff16565b805190915015612906578080602001905160208110156128c957600080fd5b50516129065760405162461bcd60e51b815260040180806020018281038252602a815260200180612b90602a913960400191505060405180910390fd5b505050565b6000818484111561295d5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156128045781810151838201526020016127ec565b505050900390565b60606125378484600085606061297a85612adc565b6129cb576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b60208310612a0a5780518252601f1990920191602091820191016129eb565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612a6c576040519150601f19603f3d011682016040523d82523d6000602084013e612a71565b606091505b50915091508115612a855791506125379050565b805115612a955780518082602001fd5b60405162461bcd60e51b81526020600482018181528651602484015286518793919283926044019190850190808383600083156128045781810151838201526020016127ec565b3b15159056fe45434453413a20696e76616c6964207369676e6174757265202773272076616c7565526566657272616c56616c696461746f723a2053656e646572206e6f742061646d696e45434453413a20696e76616c6964207369676e6174757265202776272076616c7565536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774d6574615472616e73616374696f6e52656365697665723a207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a264697066735822122077f2d13cbcb85fa08010a53c1e4ef27117b031e8c1c9273d55cef362af299f3164736f6c6343000605003345737461746553616c6557697468417574683a207a65726f20616464726573734d6574615472616e73616374696f6e52656365697665723a207a65726f206164647265737345737461746553616c6557697468417574683a206973206e6f74206120636f6e7472616374", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101365760003560e01c8063984d6252116100b2578063c10a420811610081578063dc5074af11610066578063dc5074af146108a0578063e56f8a9e146108c6578063f23a6e61146108e357610136565b8063c10a4208146107c1578063caed35001461089857610136565b8063984d62521461055f578063ab1cc78c14610631578063b522ecff14610639578063bc197c811461065f57610136565b806365194ce71161010957806378e6e5b9116100ee57806378e6e5b9146104e55780638a04af6a1461050b5780638f2839701461053957610136565b806365194ce7146103635780636e9960c3146104c157610136565b80631187fd3c1461013b57806325cb5bc01461031b578063495906571461033557806358bc29441461033d575b600080fd5b610319600480360361012081101561015257600080fd5b6001600160a01b038235811692602081013582169260408201359092169181019060808101606082013564010000000081111561018e57600080fd5b8201836020820111156101a057600080fd5b803590602001918460208302840111640100000000831117156101c257600080fd5b919390928235926040810190602001356401000000008111156101e457600080fd5b8201836020820111156101f657600080fd5b8035906020019184602083028401116401000000008311171561021857600080fd5b91939092909160208101903564010000000081111561023657600080fd5b82018360208201111561024857600080fd5b8035906020019184602083028401116401000000008311171561026a57600080fd5b91939092909160208101903564010000000081111561028857600080fd5b82018360208201111561029a57600080fd5b803590602001918460018302840111640100000000831117156102bc57600080fd5b9193909290916020810190356401000000008111156102da57600080fd5b8201836020820111156102ec57600080fd5b8035906020019184600183028401116401000000008311171561030e57600080fd5b509092509050610978565b005b610323610bba565b60408051918252519081900360200190f35b610323610bde565b6103196004803603602081101561035357600080fd5b50356001600160a01b0316610c02565b6104096004803603602081101561037957600080fd5b81019060208101813564010000000081111561039457600080fd5b8201836020820111156103a657600080fd5b803590602001918460018302840111640100000000831117156103c857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610d2e945050505050565b6040518080602001866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001848152602001838152602001828103825287818151815260200191508051906020019080838360005b8381101561048257818101518382015260200161046a565b50505050905090810190601f1680156104af5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390f35b6104c9610e33565b604080516001600160a01b039092168252519081900360200190f35b610319600480360360208110156104fb57600080fd5b50356001600160a01b0316610e42565b6103196004803603604081101561052157600080fd5b506001600160a01b0381351690602001351515610f00565b6103196004803603602081101561054f57600080fd5b50356001600160a01b0316610f6d565b6103196004803603606081101561057557600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156105a057600080fd5b8201836020820111156105b257600080fd5b803590602001918460208302840111640100000000831117156105d457600080fd5b9193909290916020810190356401000000008111156105f257600080fd5b82018360208201111561060457600080fd5b8035906020019184602083028401116401000000008311171561062657600080fd5b5090925090506110a6565b610323611231565b6103196004803603602081101561064f57600080fd5b50356001600160a01b0316611237565b61078c600480360360a081101561067557600080fd5b6001600160a01b0382358116926020810135909116918101906060810160408201356401000000008111156106a957600080fd5b8201836020820111156106bb57600080fd5b803590602001918460208302840111640100000000831117156106dd57600080fd5b9193909290916020810190356401000000008111156106fb57600080fd5b82018360208201111561070d57600080fd5b8035906020019184602083028401116401000000008311171561072f57600080fd5b91939092909160208101903564010000000081111561074d57600080fd5b82018360208201111561075f57600080fd5b8035906020019184600183028401116401000000008311171561078157600080fd5b509092509050611348565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b610884600480360360a08110156107d757600080fd5b8101906020810181356401000000008111156107f257600080fd5b82018360208201111561080457600080fd5b8035906020019184600183028401116401000000008311171561082657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b038335811694506020840135169260408101359250606001359050611375565b604080519115158252519081900360200190f35b6104c96114b1565b610884600480360360208110156108b657600080fd5b50356001600160a01b03166114c0565b610319600480360360208110156108dc57600080fd5b50356114de565b61078c600480360360a08110156108f957600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a08101608082013564010000000081111561093957600080fd5b82018360208201111561094b57600080fd5b8035906020019184600183028401116401000000008311171561096d57600080fd5b509092509050611570565b600260005414156109d0576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026000556109df8e8d61159b565b610ad68d8d8d8d80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508c8c8c80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508b8b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020601f8d018190048102820181019092528b815292508b91508a90819084018382808284376000920191909152506116fe92505050565b610b2a8e8c8c6003818110610ae757fe5b9050602002013586868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a8192505050565b610b688e8e8d8d80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250611ad292505050565b610ba58d898980806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250611ec392505050565b50506001600055505050505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b6001546001600160a01b03163314610c61576040805162461bcd60e51b815260206004820152601260248201527f6f6e6c792061646d696e20616c6c6f7765640000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b038116610cbc576040805162461bcd60e51b815260206004820152601f60248201527f526566657272616c56616c696461746f723a207a65726f206164647265737300604482015290519081900360640190fd5b600380546001600160a01b03908116600090815260056020526040808220620d2f0042019055835473ffffffffffffffffffffffffffffffffffffffff1916928516928317909355915190917fbbb5fb2ee7e707ae0c968f63e94211ea81e66a718c34e2f810a7619e5678a21791a250565b606060008060008060606000806000808a80602001905160a0811015610d5357600080fd5b8101908080516040519392919084640100000000821115610d7357600080fd5b908301906020820185811115610d8857600080fd5b8251640100000000811182820188101715610da257600080fd5b82525081516020918201929091019080838360005b83811015610dcf578181015183820152602001610db7565b50505050905090810190601f168015610dfc5780820380516001836020036101000a031916815260200191505b5060409081526020820151908201516060830151608090930151959f50909d509b5099509197505050505050505091939590929450565b6001546001600160a01b031690565b6001546001600160a01b03163314610e8b5760405162461bcd60e51b8152600401808060200182810382526023815260200180612b056023913960400191505060405180910390fd5b6001600160a01b038116610ee6576040805162461bcd60e51b815260206004820152601f60248201527f526566657272616c56616c696461746f723a207a65726f206164647265737300604482015290519081900360640190fd5b6001600160a01b0316600090815260056020526040812055565b6001546001600160a01b03163314610f5f576040805162461bcd60e51b815260206004820152601260248201527f6f6e6c792061646d696e20616c6c6f7765640000000000000000000000000000604482015290519081900360640190fd5b610f698282612087565b5050565b6001546001600160a01b03163314610fcc576040805162461bcd60e51b815260206004820152601b60248201527f6f6e6c792061646d696e2063616e206368616e67652061646d696e0000000000604482015290519081900360640190fd5b6001546001600160a01b038281169116141561102f576040805162461bcd60e51b815260206004820152600d60248201527f616c72656164792061646d696e00000000000000000000000000000000000000604482015290519081900360640190fd5b600154604080516001600160a01b039283168152918316602083015280517f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f9281900390910190a16001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6001546001600160a01b03163314611105576040805162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a4544000000000000000000000000000000000000604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632eb2c2d63087878787876040518763ffffffff1660e01b815260040180876001600160a01b03166001600160a01b03168152602001866001600160a01b03166001600160a01b031681526020018060200180602001806020018481038452888882818152602001925060200280828437600083820152601f01601f19169091018581038452868152602090810191508790870280828437600081840152601f19601f8201169050808301925050508481038252600081526020016020019950505050505050505050600060405180830381600087803b15801561121257600080fd5b505af1158015611226573d6000803e3d6000fd5b505050505050505050565b60045490565b6001600160a01b038116611292576040805162461bcd60e51b815260206004820152600c60248201527f5a45524f5f414444524553530000000000000000000000000000000000000000604482015290519081900360640190fd5b6001546001600160a01b031633146112f1576040805162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a4544000000000000000000000000000000000000604482015290519081900360640190fd5b6006805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f4d66958b757eb92a1b43d02be4c38c9500b73f532420ee3706cb43d420ba023690600090a250565b7fbc197c810000000000000000000000000000000000000000000000000000000098975050505050505050565b60006004548211806113985750836001600160a01b0316856001600160a01b0316145b806113a257508242115b156113af575060006114a8565b60408051606087811b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009081166020808501919091529188901b166034830152604882018690526068808301869052835180840390910181526088830184528051908201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000060a884015260c48084018290528451808503909101815260e49093019093528151910120600090611466908961214e565b6001600160a01b0381166000908152600560205260409020549091504211611493576001925050506114a8565b6003546001600160a01b039081169116149150505b95945050505050565b6003546001600160a01b031690565b6001600160a01b031660009081526002602052604090205460ff1690565b6001546001600160a01b0316331461153d576040805162461bcd60e51b815260206004820152601260248201527f6f6e6c792061646d696e20616c6c6f7765640000000000000000000000000000604482015290519081900360640190fd5b600481905560405181907f774069781371d65424b3b0b101c1d40014532cac040f979595b99a3fcf8ce08c90600090a250565b7ff23a6e61000000000000000000000000000000000000000000000000000000009695505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000421061160f576040805162461bcd60e51b815260206004820152600c60248201527f53414c455f49535f4f5645520000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b03821633148061163557503360009081526002602052604090205460ff165b611686576040805162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a4544000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b03811615806116ad5750816001600160a01b0316816001600160a01b0316145b610f69576040805162461bcd60e51b815260206004820152600d60248201527f52455345525645445f4c414e4400000000000000000000000000000000000000604482015290519081900360640190fd5b600087878760008151811061170f57fe5b60200260200101518860018151811061172457fe5b60200260200101518960028151811061173957fe5b60200260200101518a60038151811061174e57fe5b60200260200101518a8a60405160200180828051906020019060200280838360005b83811015611788578181015183820152602001611770565b50505050905001915050604051602081830303815290604052805190602001208a60405160200180828051906020019060200280838360005b838110156117d95781810151838201526020016117c1565b5050505090500191505060405160208183030381529060405280519060200120604051602001808a6001600160a01b03166001600160a01b031660601b8152601401896001600160a01b03166001600160a01b031660601b81526014018881526020018781526020018681526020018581526020018481526020018381526020018281526020019950505050505050505050604051602081830303815290604052805190602001209050600760009054906101000a90046001600160a01b03166001600160a01b031663012847ed83836040518363ffffffff1660e01b81526004018080602001838152602001828103825284818151815260200191508051906020019080838360005b838110156118fb5781810151838201526020016118e3565b50505050905090810190601f1680156119285780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b15801561194657600080fd5b505afa15801561195a573d6000803e3d6000fd5b505050506040513d602081101561197057600080fd5b50516119c3576040805162461bcd60e51b815260206004820152600c60248201527f494e56414c49445f415554480000000000000000000000000000000000000000604482015290519081900360640190fd5b6000611a24876000815181106119d557fe5b6020026020010151886001815181106119ea57fe5b6020026020010151896002815181106119ff57fe5b60200260200101518a600381518110611a1457fe5b60200260200101518c8b8b612337565b9050611a3084826123dc565b611226576040805162461bcd60e51b815260206004820152600c60248201527f494e56414c49445f4c414e440000000000000000000000000000000000000000604482015290519081900360640190fd5b6000611a8d84846124a5565b600654909150611acc908590839085906001600160a01b03167f000000000000000000000000000000000000000000000000000000000000000061253f565b50505050565b80600281518110611adf57fe5b602002602001015160011480611b1c57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316155b15611c1e577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e1e3bbf8383600281518110611b5e57fe5b602002602001015184600081518110611b7357fe5b602002602001015185600181518110611b8857fe5b60200260200101516040518563ffffffff1660e01b815260040180856001600160a01b03166001600160a01b031681526020018481526020018381526020018281526020018060200182810382526000815260200160200195505050505050600060405180830381600087803b158015611c0157600080fd5b505af1158015611c15573d6000803e3d6000fd5b50505050611dbe565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e1e3bbf7f000000000000000000000000000000000000000000000000000000000000000083600281518110611c7b57fe5b602002602001015184600081518110611c9057fe5b602002602001015185600181518110611ca557fe5b60200260200101518760405160200180826001600160a01b03166001600160a01b031681526020019150506040516020818303038152906040526040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b0316815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611d55578181015183820152602001611d3d565b50505050905090810190601f168015611d825780820380516001836020036101000a031916815260200191505b509650505050505050600060405180830381600087803b158015611da557600080fd5b505af1158015611db9573d6000803e3d6000fd5b505050505b61019881600181518110611dce57fe5b60200260200101510281600081518110611de457fe5b602002602001015101826001600160a01b0316846001600160a01b03167fe4dfa6ac11314892f3029b34a25b1a887da3b1cab2bbf8506d87128ba6e3ac0284600281518110611e2f57fe5b602002602001015185600381518110611e4457fe5b60200260200101517f000000000000000000000000000000000000000000000000000000000000000087600381518110611e7a57fe5b602002602001015160405180858152602001848152602001836001600160a01b03166001600160a01b0316815260200182815260200194505050505060405180910390a4505050565b6060815167ffffffffffffffff81118015611edd57600080fd5b50604051908082528060200260200182016040528015611f07578160200160208202803683370190505b50905060005b8251811015611f37576001828281518110611f2457fe5b6020908102919091010152600101611f0d565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632eb2c2d6308585856040518563ffffffff1660e01b815260040180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b03168152602001806020018060200180602001848103845286818151815260200191508051906020019060200280838360005b83811015611ff2578181015183820152602001611fda565b50505050905001848103835285818151815260200191508051906020019060200280838360005b83811015612031578181015183820152602001612019565b50505050905001848103825260008152602001602001975050505050505050600060405180830381600087803b15801561206a57600080fd5b505af115801561207e573d6000803e3d6000fd5b50505050505050565b6001600160a01b0382166120cc5760405162461bcd60e51b8152600401808060200182810382526025815260200180612b6b6025913960400191505060405180910390fd5b6001600160a01b03821660008181526002602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915582519384529083015280517fb21eb88b4e33b3f1281830a7178d74d8aa73220416215726b68ae23d539515cb9281900390910190a15050565b600081516041146121a6576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156122175760405162461bcd60e51b8152600401808060200182810382526022815260200180612ae36022913960400191505060405180910390fd5b8060ff16601b1415801561222f57508060ff16601c14155b1561226b5760405162461bcd60e51b8152600401808060200182810382526022815260200180612b286022913960400191505060405180910390fd5b60408051600080825260208083018085528a905260ff85168385015260608301879052608083018690529251909260019260a080820193601f1981019281900390910190855afa1580156122c3573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661232b576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b93505050505b92915050565b60008787878787878760405160200180888152602001878152602001868152602001858152602001846001600160a01b03166001600160a01b031660601b8152601401838152602001828051906020019060200280838360005b838110156123a9578181015183820152602001612391565b50505050905001975050505050505050604051602081830303815290604052805190602001209050979650505050505050565b600081815b845181101561247b5760008582815181106123f857fe5b60200260200101519050808310156124405782816040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209250612472565b808360405160200180838152602001828152602001925050506040516020818303038152906040528051906020012092505b506001016123e1565b507f0000000000000000000000000000000000000000000000000000000000000000149392505050565b6000806124ca60646124be85600563ffffffff61264716565b9063ffffffff6126a716565b90506125276001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016857f00000000000000000000000000000000000000000000000000000000000000008463ffffffff6126e916565b612537838263ffffffff61277116565b949350505050565b8251819085901561262c57606060008060008061255b8a610d2e565b93985091965094509250905060006125768686868686611375565b15612604576125906125888d84612647565b6127106126a7565b9050886001600160a01b0316846001600160a01b0316866001600160a01b03167fac7a699eb95c3c6d390ec4626de17ef9a67b35891efdb197beba7c7fdd45fac48f858760405180848152602001838152602001828152602001935050505060405180910390a46126018782612771565b96505b8015612625576126256001600160a01b0389168e878463ffffffff6126e916565b5050505050505b61207e6001600160a01b03831688868463ffffffff6126e916565b60008261265657506000612331565b8282028284828161266357fe5b04146126a05760405162461bcd60e51b8152600401808060200182810382526021815260200180612b4a6021913960400191505060405180910390fd5b9392505050565b60006126a083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506127b3565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052611acc908590612855565b60006126a083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061290b565b6000818361283f5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156128045781810151838201526020016127ec565b50505050905090810190601f1680156128315780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161284b57fe5b0495945050505050565b60606128aa826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166129659092919063ffffffff16565b805190915015612906578080602001905160208110156128c957600080fd5b50516129065760405162461bcd60e51b815260040180806020018281038252602a815260200180612b90602a913960400191505060405180910390fd5b505050565b6000818484111561295d5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156128045781810151838201526020016127ec565b505050900390565b60606125378484600085606061297a85612adc565b6129cb576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b60208310612a0a5780518252601f1990920191602091820191016129eb565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612a6c576040519150601f19603f3d011682016040523d82523d6000602084013e612a71565b606091505b50915091508115612a855791506125379050565b805115612a955780518082602001fd5b60405162461bcd60e51b81526020600482018181528651602484015286518793919283926044019190850190808383600083156128045781810151838201526020016127ec565b3b15159056fe45434453413a20696e76616c6964207369676e6174757265202773272076616c7565526566657272616c56616c696461746f723a2053656e646572206e6f742061646d696e45434453413a20696e76616c6964207369676e6174757265202776272076616c7565536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774d6574615472616e73616374696f6e52656365697665723a207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a264697066735822122077f2d13cbcb85fa08010a53c1e4ef27117b031e8c1c9273d55cef362af299f3164736f6c63430006050033", + "devdoc": { + "methods": { + "buyLandWithSand(address,address,address,uint256[],bytes32,uint256[],bytes32[],bytes,bytes)": { + "params": { + "assetIds": "asset ids (lands) that will be bought", + "buyer": "address that perform the payment", + "info": "[X_INDEX=0] x coordinate of the Land [Y_INDEX=1] y coordinate of the Land [SIZE_INDEX=2] size of the pack of Land to purchase [PRICE_INDEX=3] price in SAND to purchase that Land", + "proof": "merkleProof for that particular Land", + "referral": "referral id", + "reserved": "the reserved address (if any)", + "salt": "The salt submitted for verification.", + "signature": "A signed message specifying tx details", + "to": "address that will own the purchased Land" + } + }, + "changeAdmin(address)": { + "details": "change the administrator to be `newAdmin`.", + "params": { + "newAdmin": "address of the new administrator." + } + }, + "disablePreviousSigningWallet(address)": { + "details": "Disable compromised signing wallet", + "params": { + "disableWallet": "The wallet address to be disabled" + } + }, + "getAdmin()": { + "details": "gives the current administrator of this contract.", + "returns": { + "_0": "the current administrator of this contract." + } + }, + "getSigningWallet()": { + "details": "signing wallet authorized for referral", + "returns": { + "_0": "the address of the signing wallet" + } + }, + "isMetaTransactionProcessor(address)": { + "details": "check whether address `who` is given meta-transaction execution rights.", + "params": { + "who": "The address to query." + }, + "returns": { + "_0": "whether the address has meta-transaction execution rights." + } + }, + "isReferralValid(bytes,address,address,uint256,uint256)": { + "params": { + "commissionRate": "The commissionRate of the referral", + "expiryTime": "The expiry time of the referral", + "referee": "The address of the referee", + "referrer": "The address of the referrer", + "signature": "The signature to check (signed referral)" + }, + "returns": { + "_0": "True if the referral is valid" + } + }, + "setMetaTransactionProcessor(address,bool)": { + "details": "Enable or disable the ability of `metaTransactionProcessor` to perform meta-tx (metaTransactionProcessor rights).", + "params": { + "enabled": "set whether the metaTransactionProcessor is enabled or disabled.", + "metaTransactionProcessor": "address that will be given/removed metaTransactionProcessor rights." + } + }, + "setReceivingWallet(address)": { + "params": { + "newWallet": "address of the new receiving wallet" + } + }, + "updateMaxCommissionRate(uint256)": { + "details": "Update the maximum commission rate", + "params": { + "newMaxCommissionRate": "The new maximum commission rate" + } + }, + "updateSigningWallet(address)": { + "details": "Update the signing wallet The previous wallet is still valid for a grace period (_previousSigningDelay). If you want to disable the previous wallet, use the disablePreviousSigningWallet function.", + "params": { + "newSigningWallet": "The new address of the signing wallet" + } + }, + "withdrawAssets(address,uint256[],uint256[])": { + "params": { + "assetIds": "the assetIds to be transferred", + "to": "intended recipient of the asset tokens", + "values": "the quantities of the assetIds to be transferred" + } + } + }, + "title": "Estate Sale contract with referral" + }, + "userdoc": { + "methods": { + "buyLandWithSand(address,address,address,uint256[],bytes32,uint256[],bytes32[],bytes,bytes)": { + "notice": "buy Land with SAND using the merkle proof associated with it" + }, + "getExpiryTime()": { + "notice": "Gets the expiry time for the current sale" + }, + "getMaxCommissionRate()": { + "notice": "the max commission rate" + }, + "getMerkleRoot()": { + "notice": "Gets the Merkle root associated with the current sale" + }, + "isReferralValid(bytes,address,address,uint256,uint256)": { + "notice": "Check if a referral is valid" + }, + "setReceivingWallet(address)": { + "notice": "set the wallet receiving the proceeds" + }, + "withdrawAssets(address,uint256[],uint256[])": { + "notice": "enable Admin to withdraw remaining assets from EstateSaleWithFee contract" + } + }, + "notice": "This contract manages the sale of our lands as Estates" + }, + "storageLayout": { + "storage": [ + { + "astId": 1129, + "contract": "src/solc_0.6/EstateSale/EstateSaleWithAuth.sol:EstateSaleWithAuth", + "label": "_status", + "offset": 0, + "slot": "0", + "type": "t_uint256" + }, + { + "astId": 14099, + "contract": "src/solc_0.6/EstateSale/EstateSaleWithAuth.sol:EstateSaleWithAuth", + "label": "_admin", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 14168, + "contract": "src/solc_0.6/EstateSale/EstateSaleWithAuth.sol:EstateSaleWithAuth", + "label": "_metaTransactionContracts", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 12200, + "contract": "src/solc_0.6/EstateSale/EstateSaleWithAuth.sol:EstateSaleWithAuth", + "label": "_signingWallet", + "offset": 0, + "slot": "3", + "type": "t_address" + }, + { + "astId": 12202, + "contract": "src/solc_0.6/EstateSale/EstateSaleWithAuth.sol:EstateSaleWithAuth", + "label": "_maxCommissionRate", + "offset": 0, + "slot": "4", + "type": "t_uint256" + }, + { + "astId": 12206, + "contract": "src/solc_0.6/EstateSale/EstateSaleWithAuth.sol:EstateSaleWithAuth", + "label": "_previousSigningWallets", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_address,t_uint256)" + }, + { + "astId": 7750, + "contract": "src/solc_0.6/EstateSale/EstateSaleWithAuth.sol:EstateSaleWithAuth", + "label": "_wallet", + "offset": 0, + "slot": "6", + "type": "t_address_payable" + }, + { + "astId": 7752, + "contract": "src/solc_0.6/EstateSale/EstateSaleWithAuth.sol:EstateSaleWithAuth", + "label": "_authValidator", + "offset": 0, + "slot": "7", + "type": "t_contract(AuthValidator)7063" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_address_payable": { + "encoding": "inplace", + "label": "address payable", + "numberOfBytes": "20" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_contract(AuthValidator)7063": { + "encoding": "inplace", + "label": "contract AuthValidator", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + } +} \ No newline at end of file