@credenza-web3/contracts
Version:
Credenza Contracts
1,114 lines • 78.1 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "CredenzaERC721Contract",
"sourceName": "contracts/tokens/CredenzaERC721Contract.sol",
"abi": [
{
"inputs": [
{
"internalType": "string",
"name": "name",
"type": "string"
},
{
"internalType": "string",
"name": "symbol",
"type": "string"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "approved",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "Approval",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"indexed": false,
"internalType": "bool",
"name": "approved",
"type": "bool"
}
],
"name": "ApprovalForAll",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "to",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "Transfer",
"type": "event"
},
{
"inputs": [
{
"internalType": "address",
"name": "contractAddress",
"type": "address"
}
],
"name": "addAvailableCurrencyTokenContract",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "addOwner",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "approve",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "burn",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "requestedAmount",
"type": "uint256"
},
{
"internalType": "address",
"name": "recipient",
"type": "address"
}
],
"name": "buyWithEther",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "requestedAmount",
"type": "uint256"
},
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"internalType": "address",
"name": "currencyTokenContract",
"type": "address"
}
],
"name": "buyWithToken",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "requestedAmount",
"type": "uint256"
},
{
"internalType": "address",
"name": "recipient",
"type": "address"
}
],
"name": "buyWithToken",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "clearOwners",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "decreaseAvailableMintForSaleAmount",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "getApproved",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getAvailableCurrencyTokenContractsList",
"outputs": [
{
"internalType": "address[]",
"name": "",
"type": "address[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getAvailableMintForSaleAmount",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getBeneficiaryAddress",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getDefaultCurrencyTokenContract",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getDescription",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getOwners",
"outputs": [
{
"internalType": "address[]",
"name": "",
"type": "address[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "id",
"type": "uint256"
}
],
"name": "getPriceEther",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "id",
"type": "uint256"
}
],
"name": "getPriceFiat",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "currencyContract",
"type": "address"
},
{
"internalType": "uint256",
"name": "id",
"type": "uint256"
}
],
"name": "getPriceToken",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "id",
"type": "uint256"
}
],
"name": "getPriceToken",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getTrustedForwarder",
"outputs": [
{
"internalType": "address",
"name": "forwarder",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getVersion",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [],
"name": "image",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "address",
"name": "operator",
"type": "address"
}
],
"name": "isApprovedForAll",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "contractAddress",
"type": "address"
}
],
"name": "isAvailableCurrencyTokenContract",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "addr",
"type": "address"
}
],
"name": "isOwner",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "forwarder",
"type": "address"
}
],
"name": "isTrustedForwarder",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"internalType": "string",
"name": "tokenURI",
"type": "string"
}
],
"name": "mint",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "mintBatch",
"outputs": [
{
"internalType": "uint256[]",
"name": "arr",
"type": "uint256[]"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "name",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "ownerOf",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "id",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "ownerTransfer",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "contractAddress",
"type": "address"
}
],
"name": "removeAvailableCurrencyTokenContract",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "removeOwner",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "safeTransferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "safeTransferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "bool",
"name": "approved",
"type": "bool"
}
],
"name": "setApprovalForAll",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "setAvailableMintForSaleAmount",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "uri",
"type": "string"
}
],
"name": "setBaseUri",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address payable",
"name": "addr",
"type": "address"
}
],
"name": "setBeneficiaryAddress",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "tokenContract",
"type": "address"
}
],
"name": "setDefaultCurrencyTokenContractAddress",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "description",
"type": "string"
}
],
"name": "setDescription",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "newImage",
"type": "string"
}
],
"name": "setImage",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "newName",
"type": "string"
}
],
"name": "setName",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "setOwner",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "id",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "price",
"type": "uint256"
}
],
"name": "setPriceEther",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "id",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "price",
"type": "uint256"
}
],
"name": "setPriceFiat",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "id",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "price",
"type": "uint256"
}
],
"name": "setPriceToken",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "currencyContract",
"type": "address"
},
{
"internalType": "uint256",
"name": "id",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "price",
"type": "uint256"
}
],
"name": "setPriceToken",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "newSymbol",
"type": "string"
}
],
"name": "setSymbol",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "string",
"name": "_tokenURI",
"type": "string"
}
],
"name": "setTokenURI",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "index",
"type": "uint256"
},
{
"internalType": "string",
"name": "_tokenURI",
"type": "string"
}
],
"name": "setTokenURIByIndex",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_forwarder",
"type": "address"
}
],
"name": "setTrustedForwarder",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "symbol",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "tokenURI",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "index",
"type": "uint256"
}
],
"name": "tokenURIByIndex",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "transferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"bytecode": "0x608060405234801562000010575f80fd5b50604051620037b1380380620037b18339810160408190526200003391620002ad565b81815f6200004283826200039f565b5060016200005182826200039f565b506014915062000064905083826200039f565b5060156200007382826200039f565b50620000886200008262000090565b620000a0565b505062000467565b5f6200009b620001ba565b905090565b6007541580620000d65750620000d6620000b962000090565b6001600160a01b03165f9081526006602052604090205460ff1690565b620001325760405162461bcd60e51b815260206004820152602260248201527f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f604482015261371760f11b606482015260840160405180910390fd5b6001600160a01b0381165f9081526006602052604090205460ff16620001b7576001600160a01b0381165f818152600660205260408120805460ff191660019081179091556007805491820181559091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b03191690911790555b50565b5f60143610801590620001d757506009546001600160a01b031633145b15620001ea575060131936013560601c90565b503390565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011262000213575f80fd5b81516001600160401b0380821115620002305762000230620001ef565b604051601f8301601f19908116603f011681019082821181831017156200025b576200025b620001ef565b8160405283815260209250868385880101111562000277575f80fd5b5f91505b838210156200029a57858201830151818301840152908201906200027b565b5f93810190920192909252949350505050565b5f8060408385031215620002bf575f80fd5b82516001600160401b0380821115620002d6575f80fd5b620002e48683870162000203565b93506020850151915080821115620002fa575f80fd5b50620003098582860162000203565b9150509250929050565b600181811c908216806200032857607f821691505b6020821081036200034757634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200039a575f81815260208120601f850160051c81016020861015620003755750805b601f850160051c820191505b81811015620003965782815560010162000381565b5050505b505050565b81516001600160401b03811115620003bb57620003bb620001ef565b620003d381620003cc845462000313565b846200034d565b602080601f83116001811462000409575f8415620003f15750858301515b5f19600386901b1c1916600185901b17855562000396565b5f85815260208120601f198616915b82811015620004395788860151825594840194600190910190840162000418565b50858210156200045757878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b61333c80620004755f395ff3fe60806040526004361061037c575f3560e01c806371adb5e6116101d3578063b88d4fde116100fd578063d36223f11161009d578063e4c450771161006d578063e4c4507714610aa0578063e985e9c514610abf578063ec6be06e14610b06578063f3ccaac014610b25575f80fd5b8063d36223f114610a18578063d93f5bed14610a37578063da74222814610a56578063e1461f1214610a75575f80fd5b8063ce1b815f116100d8578063ce1b815f146109a0578063d0def521146109bd578063d114c9dc146109dc578063d1eff895146109fb575f80fd5b8063b88d4fde14610943578063c47f002714610962578063c87b56dd14610981575f80fd5b806395d89b4111610173578063adfadad311610143578063adfadad3146108a3578063b33a599f146108ce578063b68de974146108ed578063b84c824614610924575f80fd5b806395d89b411461083d578063a0bcfc7f14610851578063a0e67e2b14610870578063a22cb46514610884575f80fd5b80638003e27f116101ae5780638003e27f146107cb57806380dc439e146107ec57806388d0f86a146107ff57806390c3f38f1461081e575f80fd5b806371adb5e61461076e578063724e5c171461078d5780637fd39247146107ac575f80fd5b8063248b71fc116102b457806342966c6811610254578063578680be11610224578063578680be146106f25780636352211e146107115780637065cb481461073057806370a082311461074f575f80fd5b806342966c681461067d57806346dfdd691461069c5780635260f5e6146106b0578063572b6c05146106c4575f80fd5b80633a932dba1161028f5780633a932dba146106015780633d6f563f146106205780633de4fdc81461063f57806342842e0e1461065e575f80fd5b8063248b71fc1461057f578063253d2086146105ab5780632f54bf6e146105ca575f80fd5b806316bef5961161031f578063177ed0f3116102fa578063177ed0f31461050e5780631a0925411461052d5780631abe7cb31461054157806323b872dd14610560575f80fd5b806316bef596146104be578063173825d9146104db57806317422c9d146104fa575f80fd5b8063081812fc1161035a578063081812fc14610402578063095ea7b3146104395780630d8e6e2c1461045a578063162094c41461049f575f80fd5b806301ffc9a714610380578063031f5c87146103b457806306fdde03146103e1575b5f80fd5b34801561038b575f80fd5b5061039f61039a3660046129c2565b610b39565b60405190151581526020015b60405180910390f35b3480156103bf575f80fd5b506103d36103ce3660046129f1565b610b8a565b6040519081526020016103ab565b3480156103ec575f80fd5b506103f5610bb1565b6040516103ab9190612a68565b34801561040d575f80fd5b5061042161041c366004612a7a565b610c41565b6040516001600160a01b0390911681526020016103ab565b348015610444575f80fd5b506104586104533660046129f1565b610c66565b005b348015610465575f80fd5b5060408051808201909152601e81527f43726564656e7a61455243373231436f6e7472616374207620312e312e30000060208201526103f5565b3480156104aa575f80fd5b506104586104b9366004612b36565b610d91565b3480156104c9575f80fd5b50600d546001600160a01b0316610421565b3480156104e6575f80fd5b506104586104f5366004612b7a565b610dd1565b348015610505575f80fd5b506017546103d3565b348015610519575f80fd5b506103d3610528366004612a7a565b610e96565b348015610538575f80fd5b506103f5610eae565b34801561054c575f80fd5b5061045861055b366004612b95565b610ebd565b34801561056b575f80fd5b5061045861057a366004612bb5565b610eff565b34801561058a575f80fd5b5061059e6105993660046129f1565b610f37565b6040516103ab9190612bf3565b3480156105b6575f80fd5b506104586105c5366004612a7a565b611016565b3480156105d5575f80fd5b5061039f6105e4366004612b7a565b6001600160a01b03165f9081526006602052604090205460ff1690565b34801561060c575f80fd5b5061045861061b366004612b7a565b61104c565b34801561062b575f80fd5b5061045861063a366004612c36565b6110a1565b34801561064a575f80fd5b50610458610659366004612b7a565b6110dd565b348015610669575f80fd5b50610458610678366004612bb5565b611192565b348015610688575f80fd5b50610458610697366004612a7a565b6111ac565b3480156106a7575f80fd5b506104586111e6565b3480156106bb575f80fd5b5061045861122d565b3480156106cf575f80fd5b5061039f6106de366004612b7a565b6009546001600160a01b0391821691161490565b3480156106fd575f80fd5b5061045861070c366004612b95565b6112d4565b34801561071c575f80fd5b5061042161072b366004612a7a565b61131c565b34801561073b575f80fd5b5061045861074a366004612b7a565b61137b565b34801561075a575f80fd5b506103d3610769366004612b7a565b611430565b348015610779575f80fd5b50610458610788366004612c82565b6114b4565b348015610798575f80fd5b506104586107a7366004612cb4565b6114f1565b3480156107b7575f80fd5b506104586107c6366004612cfb565b61152e565b3480156107d6575f80fd5b506107df611581565b6040516103ab9190612d29565b6104586107fa366004612d69565b6115e0565b34801561080a575f80fd5b50610458610819366004612b95565b6116dc565b348015610829575f80fd5b50610458610838366004612c82565b61171e565b348015610848575f80fd5b506103f561175b565b34801561085c575f80fd5b5061045861086b366004612c82565b61176a565b34801561087b575f80fd5b506107df6117a7565b34801561088f575f80fd5b5061045861089e366004612dac565b611805565b3480156108ae575f80fd5b506103d36108bd366004612a7a565b5f908152600b602052604090205490565b3480156108d9575f80fd5b506104586108e8366004612b7a565b611817565b3480156108f8575f80fd5b5061039f610907366004612b7a565b6001600160a01b03165f908152600e602052604090205460ff1690565b34801561092f575f80fd5b5061045861093e366004612c82565b6118d9565b34801561094e575f80fd5b5061045861095d366004612dd8565b611916565b34801561096d575f80fd5b5061045861097c366004612c82565b61194f565b34801561098c575f80fd5b506103f561099b366004612a7a565b61198c565b3480156109ab575f80fd5b506009546001600160a01b0316610421565b3480156109c8575f80fd5b506103d36109d7366004612e53565b611a8b565b3480156109e7575f80fd5b506104586109f6366004612e8a565b611ac8565b348015610a06575f80fd5b506010546001600160a01b0316610421565b348015610a23575f80fd5b50610458610a32366004612d69565b611b20565b348015610a42575f80fd5b50610458610a51366004612ecd565b611b8a565b348015610a61575f80fd5b50610458610a70366004612b7a565b611be0565b348015610a80575f80fd5b506103d3610a8f366004612a7a565b5f908152600a602052604090205490565b348015610aab575f80fd5b506103f5610aba366004612b95565b611c2f565b348015610aca575f80fd5b5061039f610ad9366004612eff565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205460ff1690565b348015610b11575f80fd5b50610458610b20366004612b7a565b611d30565b348015610b30575f80fd5b506103f5611d83565b5f6001600160e01b031982166380ac58cd60e01b1480610b6957506001600160e01b03198216635b5e139f60e01b145b80610b8457506301ffc9a760e01b6001600160e01b03198316145b92915050565b6001600160a01b03919091165f908152600c60209081526040808320938352929052205490565b606060148054610bc090612f2b565b80601f0160208091040260200160405190810160405280929190818152602001828054610bec90612f2b565b8015610c375780601f10610c0e57610100808354040283529160200191610c37565b820191905f5260205f20905b815481529060010190602001808311610c1a57829003601f168201915b5050505050905090565b5f610c4b82611e0f565b505f908152600460205260409020546001600160a01b031690565b5f610c708261131c565b9050806001600160a01b0316836001600160a01b031603610ce25760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b806001600160a01b0316610cf4611e6d565b6001600160a01b03161480610d105750610d1081610ad9611e6d565b610d825760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610cd9565b610d8c8383611e7b565b505050565b6007541580610da65750610da66105e4611e6d565b610dc25760405162461bcd60e51b8152600401610cd990612f63565b610dcd825f83611ee8565b5050565b6007541580610de65750610de66105e4611e6d565b610e025760405162461bcd60e51b8152600401610cd990612f63565b6001600160a01b0381165f9081526006602052604090205460ff16610e695760405162461bcd60e51b815260206004820152601e60248201527f5461726765742061646472657373206973206e6f7420616e206f776e657200006044820152606401610cd9565b6001600160a01b0381165f908152600660205260409020805460ff19169055610e93600782611f84565b50565b600d545f90610b84906001600160a01b031683610b8a565b606060088054610bc090612f2b565b6007541580610ed25750610ed26105e4611e6d565b610eee5760405162461bcd60e51b8152600401610cd990612f63565b5f918252600a602052604090912055565b610f10610f0a611e6d565b82612083565b610f2c5760405162461bcd60e51b8152600401610cd990612fa5565b610d8c8383836120ff565b6007546060901580610f4f5750610f4f6105e4611e6d565b610f6b5760405162461bcd60e51b8152600401610cd990612f63565b8167ffffffffffffffff811115610f8457610f84612a91565b604051908082528060200260200182016040528015610fad578160200160208202803683370190505b5090505f5b8281101561100f57610fc8601280546001019055565b5f610fd260125490565b9050610fde8582612261565b80838381518110610ff157610ff1612ff2565b602090810291909101015250806110078161301a565b915050610fb2565b5092915050565b600754158061102b575061102b6105e4611e6d565b6110475760405162461bcd60e51b8152600401610cd990612f63565b601755565b600754158061106157506110616105e4611e6d565b61107d5760405162461bcd60e51b8152600401610cd990612f63565b600d80546001600160a01b0319166001600160a01b038316179055610e93816110dd565b60075415806110b657506110b66105e4611e6d565b6110d25760405162461bcd60e51b8152600401610cd990612f63565b610d8c838383611ee8565b60075415806110f257506110f26105e4611e6d565b61110e5760405162461bcd60e51b8152600401610cd990612f63565b6001600160a01b0381165f908152600e602052604090205460ff16610e93576001600160a01b03165f818152600e60205260408120805460ff19166001908117909155600f805491820181559091527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac8020180546001600160a01b0319169091179055565b610d8c83838360405180602001604052805f815250611916565b60075415806111c157506111c16105e4611e6d565b6111dd5760405162461bcd60e51b8152600401610cd990612f63565b610e93816123e9565b60075415806111fb57506111fb6105e4611e6d565b6112175760405162461bcd60e51b8152600401610cd990612f63565b60178054905f61122683613032565b9190505550565b600754158061124257506112426105e4611e6d565b61125e5760405162461bcd60e51b8152600401610cd990612f63565b5f5b6007548110156112c6575f60065f6007848154811061128157611281612ff2565b5f918252602080832091909101546001600160a01b031683528201929092526040019020805460ff1916911515919091179055806112be8161301a565b915050611260565b506112d260075f61297f565b565b60075415806112e957506112e96105e4611e6d565b6113055760405162461bcd60e51b8152600401610cd990612f63565b600d54610dcd906001600160a01b03168383611b8a565b5f818152600260205260408120546001600160a01b031680610b845760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610cd9565b600754158061139057506113906105e4611e6d565b6113ac5760405162461bcd60e51b8152600401610cd990612f63565b6001600160a01b0381165f9081526006602052604090205460ff16610e93576001600160a01b03165f818152600660205260408120805460ff191660019081179091556007805491820181559091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b0319169091179055565b5f6001600160a01b0382166114995760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610cd9565b506001600160a01b03165f9081526003602052604090205490565b60075415806114c957506114c96105e4611e6d565b6114e55760405162461bcd60e51b8152600401610cd990612f63565b6013610dcd828261308c565b60405162461bcd60e51b815260206004820152601260248201527113d4115490551253d397d11254d05093115160721b6044820152606401610cd9565b600754158061154357506115436105e4611e6d565b61155f5760405162461bcd60e51b8152600401610cd990612f63565b610dcd61156b8361131c565b828460405180602001604052805f81525061247b565b6060600f805480602002602001604051908101604052809291908181526020018280548015610c3757602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116115b9575050505050905090565b6010546001600160a01b03166115f58461131c565b6001600160a01b03161461161b5760405162461bcd60e51b8152600401610cd990613148565b5f838152600b60205260409020541561163e576116398360016124ae565b611649565b6116495f60016124ae565b82156116835760105460408051808201909152600381526203078360ec1b6020820152610d8c916001600160a01b0316908390869061247b565b5f61168d60175490565b116116aa5760405162461bcd60e51b8152600401610cd990613148565b60178054905f6116b983613032565b91905055506116d68160405180602001604052805f815250612597565b50505050565b60075415806116f157506116f16105e4611e6d565b61170d5760405162461bcd60e51b8152600401610cd990612f63565b5f918252600b602052604090912055565b600754158061173357506117336105e4611e6d565b61174f5760405162461bcd60e51b8152600401610cd990612f63565b6008610dcd828261308c565b606060158054610bc090612f2b565b600754158061177f575061177f6105e4611e6d565b61179b5760405162461bcd60e51b8152600401610cd990612f63565b6016610dcd828261308c565b60606007805480602002602001604051908101604052809291908181526020018280548015610c3757602002820191905f5260205f209081546001600160a01b031681526001909101906020018083116115b9575050505050905090565b610dcd611810611e6d565b83836125c7565b600754158061182c575061182c6105e4611e6d565b6118485760405162461bcd60e51b8152600401610cd990612f63565b6001600160a01b0381165f908152600e602052604090205460ff166118af5760405162461bcd60e51b815260206004820181905260248201527f54617267657420636f6e7472616374206973206e6f7420617661696c61626c656044820152606401610cd9565b6001600160a01b0381165f908152600e60205260409020805460ff19169055610e93600f82611f84565b60075415806118ee57506118ee6105e4611e6d565b61190a5760405162461bcd60e51b8152600401610cd990612f63565b6015610dcd828261308c565b611927611921611e6d565b83612083565b6119435760405162461bcd60e51b8152600401610cd990612fa5565b6116d68484848461247b565b600754158061196457506119646105e4611e6d565b6119805760405162461bcd60e51b8152600401610cd990612f63565b6014610dcd828261308c565b606061199782611e0f565b5f828152601160209081526040808320838052909152812080546119ba90612f2b565b80601f01602080910402602001604051908101604052809291908181526020018280546119e690612f2b565b8015611a315780601f10611a0857610100808354040283529160200191611a31565b820191905f5260205f20905b815481529060010190602001808311611a1457829003601f168201915b505050505090505f611a41612694565b905080515f03611a52575092915050565b815115611a84578082604051602001611a6c92919061316a565b60405160208183030381529060405292505050919050565b9392505050565b6007545f901580611aa25750611aa26105e4611e6d565b611abe5760405162461bcd60e51b8152600401610cd990612f63565b611a848383612597565b6007541580611add5750611add6105e4611e6d565b611af95760405162461bcd60e51b8152600401610cd990612f63565b6116d68484846040518060400160405280600381526020016203078360ec1b81525061247b565b6010546001600160a01b0316611b358461131c565b6001600160a01b03161480611b48575082155b611b645760405162461bcd60e51b8152600401610cd990613148565b5f611b6e84610e96565b1115611b7f576116398360016126a3565b6116495f60016126a3565b6007541580611b9f5750611b9f6105e4611e6d565b611bbb5760405162461bcd60e51b8152600401610cd990612f63565b6001600160a01b039092165f908152600c602090815260408083209383529290522055565b6007541580611bf55750611bf56105e4611e6d565b611c115760405162461bcd60e51b8152600401610cd990612f63565b600980546001600160a01b0319166001600160a01b03831617905550565b6060611c3a83611e0f565b5f83815260116020908152604080832085845290915281208054611c5d90612f2b565b80601f0160208091040260200160405190810160405280929190818152602001828054611c8990612f2b565b8015611cd45780601f10611cab57610100808354040283529160200191611cd4565b820191905f5260205f20905b815481529060010190602001808311611cb757829003601f168201915b505050505090505f611ce4612694565b905080515f03611cf657509050610b84565b815115611d28578082604051602001611d1092919061316a565b60405160208183030381529060405292505050610b84565b949350505050565b6007541580611d455750611d456105e4611e6d565b611d615760405162461bcd60e51b8152600401610cd990612f63565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b60138054611d9090612f2b565b80601f0160208091040260200160405190810160405280929190818152602001828054611dbc90612f2b565b8015611e075780601f10611dde57610100808354040283529160200191611e07565b820191905f5260205f20905b815481529060010190602001808311611dea57829003601f168201915b505050505081565b5f818152600260205260409020546001600160a01b0316610e935760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610cd9565b5f611e766126bc565b905090565b5f81815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611eaf8261131c565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b5f838152600260205260409020546001600160a01b0316611f625760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201526d32bc34b9ba32b73a103a37b5b2b760911b6064820152608401610cd9565b5f83815260116020908152604080832085845290915290206116d6828261308c565b5f5b8254811015610d8c57816001600160a01b0316838281548110611fab57611fab612ff2565b5f918252602090912001546001600160a01b0316036120715782548390611fd490600190613198565b81548110611fe457611fe4612ff2565b905f5260205f20015f9054906101000a90046001600160a01b031683828154811061201157612011612ff2565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508280548061204c5761204c6131ab565b5f8281526020902081015f1990810180546001600160a01b0319169055019055505050565b8061207b8161301a565b915050611f86565b5f8061208e8361131c565b9050806001600160a01b0316846001600160a01b031614806120d457506001600160a01b038082165f9081526005602090815260408083209388168352929052205460ff165b80611d285750836001600160a01b03166120ed84610c41565b6001600160a01b031614949350505050565b826001600160a01b03166121128261131c565b6001600160a01b0316146121385760405162461bcd60e51b8152600401610cd9906131bf565b6001600160a01b03821661219a5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610cd9565b826001600160a01b03166121ad8261131c565b6001600160a01b0316146121d35760405162461bcd60e51b8152600401610cd9906131bf565b5f81815260046020908152604080832080546001600160a01b03199081169091556001600160a01b038781168086526003855283862080545f1901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6001600160a01b0382166122b75760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610cd9565b5f818152600260205260409020546001600160a01b03161561231b5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610cd9565b5f818152600260205260409020546001600160a01b03161561237f5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610cd9565b6001600160a01b0382165f81815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b5f6123f38261131c565b90506123fe8261131c565b5f83815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526003845282852080545f190190558785526002909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6124868484846120ff565b612492848484846126ef565b6116d65760405162461bcd60e51b8152600401610cd990613204565b5f828152600b6020526040812054116124d95760405162461bcd60e51b8152600401610cd990613256565b6010546001600160a01b03166125015760405162461bcd60e51b8152600401610cd990613256565b5f828152600b602052604081205461251a90839061327d565b9050803410156125615760405162461bcd60e51b8152602060048201526012602482015271494e53554646494349454e545f56414c554560701b6044820152606401610cd9565b6010546040516001600160a01b03909116903480156108fc02915f818181858888f193505050501580156116d6573d5f803e3d5ffd5b5f6125a6601280546001019055565b5f6125b060125490565b90506125bc8482612261565b611a84815f85611ee8565b816001600160a01b0316836001600160a01b0316036126285760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610cd9565b6001600160a01b038381165f81815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b606060168054610bc090612f2b565b600d54610dcd90839083906001600160a01b03166127f3565b5f601436108015906126d857506009546001600160a01b031633145b156126ea575060131936013560601c90565b503390565b5f6001600160a01b0384163b156127e857836001600160a01b031663150b7a02612717611e6d565b8786866040518563ffffffff1660e01b81526004016127399493929190613294565b6020604051808303815f875af1925050508015612773575060408051601f3d908101601f19168201909252612770918101906132d0565b60015b6127ce573d8080156127a0576040519150601f19603f3d011682016040523d82523d5f602084013e6127a5565b606091505b5080515f036127c65760405162461bcd60e51b8152600401610cd990613204565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611d28565b506001949350505050565b6001600160a01b0381165f908152600e602052604090205460ff1661285a5760405162461bcd60e51b815260206004820152601f60248201527f43555252454e43595f434f4e54524143545f4e4f545f535550504f52544544006044820152606401610cd9565b5f6128658285610b8a565b116128825760405162461bcd60e51b8152600401610cd990613256565b6010546001600160a01b03166128aa5760405162461bcd60e51b8152600401610cd990613256565b6001600160a01b0381166128d05760405162461bcd60e51b8152600401610cd990613256565b5f6128db8285610b8a565b6128e5908461327d565b9050816001600160a01b0381166323b872dd6128ff611e6d565b60105460405160e084901b6001600160e01b03191681526001600160a01b03928316600482015291166024820152604481018590526064016020604051808303815f875af1158015612953573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061297791906132eb565b505050505050565b5080545f8255905f5260205f2090810190610e9391905b808211156129a9575f8155600101612996565b5090565b6001600160e01b031981168114610e93575f80fd5b5f602082840312156129d2575f80fd5b8135611a84816129ad565b6001600160a01b0381168114610e93575f80fd5b5f8060408385031215612a02575f80fd5b8235612a0d816129dd565b946020939093013593505050565b5f5b83811015612a35578181015183820152602001612a1d565b50505f910152565b5f8151808452612a54816020860160208601612a1b565b601f01601f19169290920160200192915050565b602081525f611a846020830184612a3d565b5f60208284031215612a8a575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b5f67ffffffffffffffff80841115612abf57612abf612a91565b604051601f8501601f19908116603f01168101908282118183101715612ae757612ae7612a91565b81604052809350858152868686011115612aff575f80fd5b858560208301375f602087830101525050509392505050565b5f82601f830112612b27575f80fd5b611a8483833560208501612aa5565b5f8060408385031215612b47575f80fd5b82359150602083013567ffffffffffffffff811115612b64575f80fd5b612b7085828601612b18565b9150509250929050565b5f60208284031215612b8a575f80fd5b8135611a84816129dd565b5f8060408385031215612ba6575f80fd5b50508035926020909101359150565b5f805f60608486031215612bc7575f80fd5b8335612bd2816129dd565b92506020840135612be2816129dd565b929592945050506040919091013590565b602080825282518282018190525f9190848201906040850190845b81811015612c2a57835183529284019291840191600101612c0e565b50909695505050505050565b5f805f60608486031215612c48575f80fd5b8335925060208401359150604084013567ffffffffffffffff811115612c6c575f80fd5b612c7886828701612b18565b9150509250925092565b5f60208284031215612c92575f80fd5b813567ffffffffffffffff811115612ca8575f80fd5b611d2884828501612b18565b5f805f8060808587031215612cc7575f80fd5b84359350602085013592506040850135612ce0816129dd565b91506060850135612cf0816129dd565b939692955090935050565b5f8060408385031215612d0c575f80fd5b823591506020830135612d1e816129dd565b809150509250929050565b602080825282518282018190525f9190848201906040850190845b81811015612c2a5783516001600160a01b031683529284019291840191600101612d44565b5f805f60608486031215612d7b575f80fd5b83359250602084013591506040840135612d94816129dd565b809150509250925092565b8015158114610e93575f80fd5b5f8060408385031215612dbd575f80fd5b8235612dc8816129dd565b91506020830135612d1e81612d9f565b5f805f8060808587031215612deb575f80fd5b8435612df6816129dd565b93506020850135612e06816129dd565b925060408501359150606085013567ffffffffffffffff811115612e28575f80fd5b8501601f81018713612e38575f80fd5b612e4787823560208401612aa5565b91505092959194509250565b5f8060408385031215612e64575f80fd5b8235612e6f816129dd565b9150602083013567ffffffffffffffff811115612b64575f80fd5b5f805f8060808587031215612e9d575f80fd5b8435612ea8816129dd565b93506020850135612eb8816129dd565b93969395505050506040820135916060013590565b5f805f60608486031215612edf575f80fd5b8335612eea816129dd565b95602085013595506040909401359392505050565b5f8060408385031215612f10575f80fd5b8235612f1b816129dd565b91506020830135612d1e816129dd565b600181811c90821680612f3f57607f821691505b602082108103612f5d57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208082526022908201527f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f604082015261371760f11b606082015260800190565b6020808252602d908201527f4552433732313a2063616c6