[ { "inputs": [ { "internalType": "address", "name": "_dataSeeker", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AccessControlBadConfirmation", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "bytes32", "name": "neededRole", "type": "bytes32" } ], "name": "AccessControlUnauthorizedAccount", "type": "error" }, { "inputs": [], "name": "ERC721EnumerableForbiddenBatchMint", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC721IncorrectOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ERC721InsufficientApproval", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC721InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" } ], "name": "ERC721InvalidOperator", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC721InvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC721InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC721InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ERC721NonexistentToken", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "ERC721OutOfBoundsIndex", "type": "error" }, { "inputs": [], "name": "EmptyAddress", "type": "error" }, { "inputs": [], "name": "InvalidConsent", "type": "error" }, { "inputs": [], "name": "InvalidDataHolder", "type": "error" }, { "inputs": [], "name": "InvalidDataOwner", "type": "error" }, { "inputs": [], "name": "InvalidDataSeeker", "type": "error" }, { "inputs": [], "name": "InvalidSignature", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "approved", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "_fromTokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "_toTokenId", "type": "uint256" } ], "name": "BatchMetadataUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "consentId", "type": "uint256" }, { "indexed": true, "internalType": "enum InterfaceConsentManagement.ConsentTokenStatus", "name": "status", "type": "uint8" } ], "name": "ConsentTokenUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "MetadataUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "HOLDER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "OWNER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "SEEKER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "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": "", "type": "uint256" } ], "name": "consentInfo", "outputs": [ { "internalType": "enum InterfaceConsentManagement.ConsentTokenStatus", "name": "status", "type": "uint8" }, { "internalType": "string", "name": "approved", "type": "string" }, { "internalType": "string", "name": "revoked", "type": "string" }, { "internalType": "bool", "name": "enabled", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "consentToOwner", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "dataSeeker", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "factory", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "dataOwner", "type": "address" }, { "internalType": "string", "name": "signature", "type": "string" } ], "name": "grant", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_factory", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "dataOwner", "type": "address" } ], "name": "process", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "callerConfirmation", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "dataOwner", "type": "address" } ], "name": "request", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "role", "type": "string" } ], "name": "returnBytesRole", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "dataOwner", "type": "address" }, { "internalType": "string", "name": "signature", "type": "string" } ], "name": "revoke", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "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": "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": "index", "type": "uint256" } ], "name": "tokenByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenOfOwnerByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60806040523480156200001157600080fd5b5060405162003026380380620030268339810160408190526200003491620002a0565b336040518060400160405280601c81526020017f73696e676c65436f6e73656e744d616e6167656d656e74546f6b656e00000000815250604051806040016040528060048152602001631cd0d35560e21b815250816000908162000099919062000377565b506001620000a8828262000377565b5050506001600160a01b038116620000da57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b620000e5816200019b565b506001600160a01b038116620000fa57600080fd5b62000107600033620001ed565b50620001347f88a91f33d69233608ec901106cda3805f1356caac193014d6c70c694090df4ae33620001ed565b50620001617fd2866946407505bd0b9d080df92fa8cfb142009ab3d681c7828026e281e1d14b82620001ed565b50600e8054336001600160a01b031991821617909155600f80549091166001600160a01b03929092169190911790556001600d5562000443565b600c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000828152600b602090815260408083206001600160a01b038516845290915281205460ff1662000296576000838152600b602090815260408083206001600160a01b03861684529091529020805460ff191660011790556200024d3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016200029a565b5060005b92915050565b600060208284031215620002b357600080fd5b81516001600160a01b0381168114620002cb57600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620002fd57607f821691505b6020821081036200031e57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200037257600081815260208120601f850160051c810160208610156200034d5750805b601f850160051c820191505b818110156200036e5782815560010162000359565b5050505b505050565b81516001600160401b03811115620003935762000393620002d2565b620003ab81620003a48454620002e8565b8462000324565b602080601f831160018114620003e35760008415620003ca5750858301515b600019600386901b1c1916600185901b1785556200036e565b600085815260208120601f198616915b828110156200041457888601518255948401946001909101908401620003f3565b5085821015620004335787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b612bd380620004536000396000f3fe608060405234801561001057600080fd5b50600436106102325760003560e01c80634f6ccce711610130578063a217fddf116100b8578063c87b56dd1161007c578063c87b56dd146104fe578063d547741f14610511578063e58378bb14610524578063e985e9c514610539578063f2fde38b1461054c57600080fd5b8063a217fddf1461049a578063a22cb465146104a2578063afb5a12c146104b5578063b88d4fde146104d8578063c45a0155146104eb57600080fd5b8063715018a6116100ff578063715018a6146104535780638da5cb5b1461045b57806391d148541461046c57806395d89b411461047f5780639604a6631461048757600080fd5b80634f6ccce7146103f35780635059575f146104065780636352211e1461042d57806370a082311461044057600080fd5b8063248a9ca3116101be57806336568abe1161018257806336568abe1461039457806338977686146103a757806342842e0e146103ba578063429ea975146103cd57806346c2dcf1146103e057600080fd5b8063248a9ca31461032557806327c78c42146103485780632e9b1e601461035b5780632f2ff15d1461036e5780632f745c591461038157600080fd5b8063095ea7b311610205578063095ea7b3146102c057806318160ddd146102d55780631c9c304d146102dd578063235e98e9146102f257806323b872dd1461031257600080fd5b806301ffc9a7146102375780630632542d1461025f57806306fdde0314610280578063081812fc14610295575b600080fd5b61024a610245366004612455565b61055f565b60405190151581526020015b60405180910390f35b61027261026d36600461253f565b610570565b604051908152602001610256565b6102886105a0565b60405161025691906125c4565b6102a86102a33660046125d7565b610632565b6040516001600160a01b039091168152602001610256565b6102d36102ce36600461260c565b61065b565b005b600954610272565b610272600080516020612b7e83398151915281565b610272610300366004612636565b60116020526000908152604090205481565b6102d3610320366004612651565b61066a565b6102726103333660046125d7565b6000908152600b602052604090206001015490565b6102d3610356366004612636565b6106fa565b6102d361036936600461268d565b6109b7565b6102d361037c3660046126e4565b610c9d565b61027261038f36600461260c565b610cc2565b6102d36103a23660046126e4565b610d27565b6102d36103b5366004612636565b610d5f565b6102d36103c8366004612651565b610db2565b6102d36103db3660046126e4565b610dcd565b600f546102a8906001600160a01b031681565b6102726104013660046125d7565b6110f3565b6102727fd2866946407505bd0b9d080df92fa8cfb142009ab3d681c7828026e281e1d14b81565b6102a861043b3660046125d7565b61114c565b61027261044e366004612636565b611157565b6102d361119f565b600c546001600160a01b03166102a8565b61024a61047a3660046126e4565b6111b3565b6102886111de565b6102d361049536600461268d565b6111ed565b610272600081565b6102d36104b036600461271e565b6114aa565b6104c86104c33660046125d7565b6114b5565b604051610256949392919061276b565b6102d36104e63660046127c8565b6115f5565b600e546102a8906001600160a01b031681565b61028861050c3660046125d7565b61160c565b6102d361051f3660046126e4565b611617565b610272600080516020612b5e83398151915281565b61024a610547366004612844565b61163c565b6102d361055a366004612636565b61166a565b600061056a826116a8565b92915050565b600081604051602001610583919061286e565b604051602081830303815290604052805190602001209050919050565b6060600080546105af9061288a565b80601f01602080910402602001604051908101604052809291908181526020018280546105db9061288a565b80156106285780601f106105fd57610100808354040283529160200191610628565b820191906000526020600020905b81548152906001019060200180831161060b57829003601f168201915b5050505050905090565b600061063d826116cd565b506000828152600460205260409020546001600160a01b031661056a565b610666828233611706565b5050565b6001600160a01b03821661069957604051633250574960e11b8152600060048201526024015b60405180910390fd5b60006106a6838333611713565b9050836001600160a01b0316816001600160a01b0316146106f4576040516364283d7b60e01b81526001600160a01b0380861660048301526024820184905282166044820152606401610690565b50505050565b336107257fd2866946407505bd0b9d080df92fa8cfb142009ab3d681c7828026e281e1d14b826111b3565b151560011461074757604051638908e8f760e01b815260040160405180910390fd5b600061075283611157565b111561077157604051630df0f4e960e41b815260040160405180910390fd5b600e546040516346efdc3360e01b81526001600160a01b038481166004830152909116906346efdc3390602401602060405180830381865afa1580156107bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107df91906128c4565b6107fc57604051630df0f4e960e41b815260040160405180910390fd5b600d80546000918261080d836128f7565b91905055905061081d8382611728565b6108a181600e60009054906101000a90046001600160a01b03166001600160a01b031663bc9c2d556040518163ffffffff1660e01b8152600401600060405180830381865afa158015610874573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261089c9190810190612910565b611742565b6108b9600080516020612b5e83398151915284611792565b5060408051608081018252600080825282516020808201855282825280840191909152835180820185528281528385015260016060840181905285835260109091529290208151815492938493839160ff199091169083600381111561092157610921612755565b02179055506020820151600182019061093a90826129d5565b506040820151600282019061094f90826129d5565b50606091909101516003909101805460ff19169115159190911790556001600160a01b038416600090815260116020526040812083905560405183907ffd567a48de03cdcb8f2d3d8432c8ae410d82eeadaf09bec6609a00e4910bb16590600090a350505050565b336109d0600080516020612b7e833981519152826111b3565b15156001146109f257604051636e34874f60e11b815260040160405180910390fd5b8383610a0c600080516020612b5e833981519152826111b3565b1515600114610a2e5760405163f8fb253960e01b815260040160405180910390fd5b806001600160a01b0316610a418361114c565b6001600160a01b031614610a6857604051630df0f4e960e41b815260040160405180910390fd5b6000868152601060205260408082208151608081019092528054829060ff166003811115610a9857610a98612755565b6003811115610aa957610aa9612755565b8152602001600182018054610abd9061288a565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae99061288a565b8015610b365780601f10610b0b57610100808354040283529160200191610b36565b820191906000526020600020905b815481529060010190602001808311610b1957829003601f168201915b50505050508152602001600282018054610b4f9061288a565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7b9061288a565b8015610bc85780601f10610b9d57610100808354040283529160200191610bc8565b820191906000526020600020905b815481529060010190602001808311610bab57829003601f168201915b505050918352505060039182015460ff1615156020909101529091508181905250604080820186905260008881526010602052208151815483929190829060ff19166001836003811115610c1e57610c1e612755565b021790555060208201516001820190610c3790826129d5565b5060408201516002820190610c4c90826129d5565b50606091909101516003918201805460ff19169115159190911790555b60405188907ffd567a48de03cdcb8f2d3d8432c8ae410d82eeadaf09bec6609a00e4910bb16590600090a350505050505050565b6000828152600b6020526040902060010154610cb881611826565b6106f48383611792565b6000610ccd83611157565b8210610cfe5760405163295f44f760e21b81526001600160a01b038416600482015260248101839052604401610690565b506001600160a01b03919091166000908152600760209081526040808320938352929052205490565b6001600160a01b0381163314610d505760405163334bd91960e11b815260040160405180910390fd5b610d5a8282611830565b505050565b33610d78600080516020612b7e833981519152826111b3565b1515600114610d9a57604051636e34874f60e11b815260040160405180910390fd5b610d5a600080516020612b7e83398151915283611792565b610d5a838383604051806020016040528060008152506115f5565b33610de6600080516020612b7e833981519152826111b3565b1515600114610e0857604051636e34874f60e11b815260040160405180910390fd5b8282610e22600080516020612b5e833981519152826111b3565b1515600114610e445760405163f8fb253960e01b815260040160405180910390fd5b806001600160a01b0316610e578361114c565b6001600160a01b031614610e7e57604051630df0f4e960e41b815260040160405180910390fd5b600160008681526010602052604090205460ff166003811115610ea357610ea3612755565b14610ec157604051630df0f4e960e41b815260040160405180910390fd5b6000858152601060205260408082208151608081019092528054829060ff166003811115610ef157610ef1612755565b6003811115610f0257610f02612755565b8152602001600182018054610f169061288a565b80601f0160208091040260200160405190810160405280929190818152602001828054610f429061288a565b8015610f8f5780601f10610f6457610100808354040283529160200191610f8f565b820191906000526020600020905b815481529060010190602001808311610f7257829003601f168201915b50505050508152602001600282018054610fa89061288a565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd49061288a565b80156110215780601f10610ff657610100808354040283529160200191611021565b820191906000526020600020905b81548152906001019060200180831161100457829003601f168201915b50505091835250506003919091015460ff16151560209091015290506002818190525060008681526010602052604090208151815483929190829060ff1916600183600381111561107457611074612755565b02179055506020820151600182019061108d90826129d5565b50604082015160028201906110a290826129d5565b50606091909101516003909101805460ff1916911515919091179055600260405187907ffd567a48de03cdcb8f2d3d8432c8ae410d82eeadaf09bec6609a00e4910bb16590600090a3505050505050565b60006110fe60095490565b82106111275760405163295f44f760e21b81526000600482015260248101839052604401610690565b6009828154811061113a5761113a612a95565b90600052602060002001549050919050565b600061056a826116cd565b60006001600160a01b038216611183576040516322718ad960e21b815260006004820152602401610690565b506001600160a01b031660009081526003602052604090205490565b6111a761189d565b6111b160006118ca565b565b6000918252600b602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060600180546105af9061288a565b33611206600080516020612b7e833981519152826111b3565b151560011461122857604051636e34874f60e11b815260040160405180910390fd5b8383611242600080516020612b5e833981519152826111b3565b15156001146112645760405163f8fb253960e01b815260040160405180910390fd5b806001600160a01b03166112778361114c565b6001600160a01b03161461129e57604051630df0f4e960e41b815260040160405180910390fd5b6000868152601060205260408082208151608081019092528054829060ff1660038111156112ce576112ce612755565b60038111156112df576112df612755565b81526020016001820180546112f39061288a565b80601f016020809104026020016040519081016040528092919081815260200182805461131f9061288a565b801561136c5780601f106113415761010080835404028352916020019161136c565b820191906000526020600020905b81548152906001019060200180831161134f57829003601f168201915b505050505081526020016002820180546113859061288a565b80601f01602080910402602001604051908101604052809291908181526020018280546113b19061288a565b80156113fe5780601f106113d3576101008083540402835291602001916113fe565b820191906000526020600020905b8154815290600101906020018083116113e157829003601f168201915b50505091835250506003919091015460ff161515602090910152905060018181905250602080820186905260008881526010909152604090208151815483929190829060ff1916600183600381111561145957611459612755565b02179055506020820151600182019061147290826129d5565b506040820151600282019061148790826129d5565b50606091909101516003909101805460ff19169115159190911790556001610c69565b61066633838361191c565b6010602052600090815260409020805460018201805460ff90921692916114db9061288a565b80601f01602080910402602001604051908101604052809291908181526020018280546115079061288a565b80156115545780601f1061152957610100808354040283529160200191611554565b820191906000526020600020905b81548152906001019060200180831161153757829003601f168201915b5050505050908060020180546115699061288a565b80601f01602080910402602001604051908101604052809291908181526020018280546115959061288a565b80156115e25780601f106115b7576101008083540402835291602001916115e2565b820191906000526020600020905b8154815290600101906020018083116115c557829003601f168201915b5050506003909301549192505060ff1684565b61160084848461066a565b6106f4848484846119bb565b606061056a82611ae4565b6000828152600b602052604090206001015461163281611826565b6106f48383611830565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b61167261189d565b6001600160a01b03811661169c57604051631e4fbdf760e01b815260006004820152602401610690565b6116a5816118ca565b50565b60006001600160e01b03198216637965db0b60e01b148061056a575061056a82611bed565b6000818152600260205260408120546001600160a01b03168061056a57604051637e27328960e01b815260048101849052602401610690565b610d5a8383836001611c12565b6000611720848484611d18565b949350505050565b610666828260405180602001604052806000815250611de5565b600082815260066020526040902061175a82826129d5565b506040518281527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79060200160405180910390a15050565b600061179e83836111b3565b61181e576000838152600b602090815260408083206001600160a01b03861684529091529020805460ff191660011790556117d63390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161056a565b50600061056a565b6116a58133611dfc565b600061183c83836111b3565b1561181e576000838152600b602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161056a565b600c546001600160a01b031633146111b15760405163118cdaa760e01b8152336004820152602401610690565b600c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821661194e57604051630b61174360e31b81526001600160a01b0383166004820152602401610690565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b156106f457604051630a85bd0160e11b81526001600160a01b0384169063150b7a02906119fd903390889087908790600401612aab565b6020604051808303816000875af1925050508015611a38575060408051601f3d908101601f19168201909252611a3591810190612ae8565b60015b611aa1573d808015611a66576040519150601f19603f3d011682016040523d82523d6000602084013e611a6b565b606091505b508051600003611a9957604051633250574960e11b81526001600160a01b0385166004820152602401610690565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b14611add57604051633250574960e11b81526001600160a01b0385166004820152602401610690565b5050505050565b6060611aef826116cd565b5060008281526006602052604081208054611b099061288a565b80601f0160208091040260200160405190810160405280929190818152602001828054611b359061288a565b8015611b825780601f10611b5757610100808354040283529160200191611b82565b820191906000526020600020905b815481529060010190602001808311611b6557829003601f168201915b505050505090506000611ba060408051602081019091526000815290565b90508051600003611bb2575092915050565b815115611be4578082604051602001611bcc929190612b05565b60405160208183030381529060405292505050919050565b61172084611e35565b60006001600160e01b0319821663780e9d6360e01b148061056a575061056a82611eaa565b8080611c2657506001600160a01b03821615155b15611ce8576000611c36846116cd565b90506001600160a01b03831615801590611c625750826001600160a01b0316816001600160a01b031614155b8015611c755750611c73818461163c565b155b15611c9e5760405163a9fbf51f60e01b81526001600160a01b0384166004820152602401610690565b8115611ce65783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b600080611d26858585611ecf565b90506001600160a01b038116611d8357611d7e84600980546000838152600a60205260408120829055600182018355919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0155565b611da6565b846001600160a01b0316816001600160a01b031614611da657611da68185611fc8565b6001600160a01b038516611dc257611dbd84612059565b611720565b846001600160a01b0316816001600160a01b031614611720576117208585612108565b611def8383612158565b610d5a60008484846119bb565b611e0682826111b3565b6106665760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610690565b6060611e40826116cd565b506000611e5860408051602081019091526000815290565b90506000815111611e785760405180602001604052806000815250611ea3565b80611e82846121bd565b604051602001611e93929190612b05565b6040516020818303038152906040525b9392505050565b60006001600160e01b03198216632483248360e11b148061056a575061056a82612250565b6000828152600260205260408120546001600160a01b0390811690831615611efc57611efc8184866122a0565b6001600160a01b03811615611f3a57611f19600085600080611c12565b6001600160a01b038116600090815260036020526040902080546000190190555b6001600160a01b03851615611f69576001600160a01b0385166000908152600360205260409020805460010190555b60008481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b6000611fd383611157565b600083815260086020526040902054909150808214612026576001600160a01b03841660009081526007602090815260408083208584528252808320548484528184208190558352600890915290208190555b5060009182526008602090815260408084208490556001600160a01b039094168352600781528383209183525290812055565b60095460009061206b90600190612b34565b6000838152600a60205260408120546009805493945090928490811061209357612093612a95565b9060005260206000200154905080600983815481106120b4576120b4612a95565b6000918252602080832090910192909255828152600a909152604080822084905585825281205560098054806120ec576120ec612b47565b6001900381819060005260206000200160009055905550505050565b6000600161211584611157565b61211f9190612b34565b6001600160a01b039093166000908152600760209081526040808320868452825280832085905593825260089052919091209190915550565b6001600160a01b03821661218257604051633250574960e11b815260006004820152602401610690565b600061219083836000611713565b90506001600160a01b03811615610d5a576040516339e3563760e11b815260006004820152602401610690565b606060006121ca83612304565b600101905060008167ffffffffffffffff8111156121ea576121ea612472565b6040519080825280601f01601f191660200182016040528015612214576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461221e57509392505050565b60006001600160e01b031982166380ac58cd60e01b148061228157506001600160e01b03198216635b5e139f60e01b145b8061056a57506301ffc9a760e01b6001600160e01b031983161461056a565b6122ab8383836123dc565b610d5a576001600160a01b0383166122d957604051637e27328960e01b815260048101829052602401610690565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401610690565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106123435772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef8100000000831061236f576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061238d57662386f26fc10000830492506010015b6305f5e10083106123a5576305f5e100830492506008015b61271083106123b957612710830492506004015b606483106123cb576064830492506002015b600a831061056a5760010192915050565b60006001600160a01b038316158015906117205750826001600160a01b0316846001600160a01b031614806124165750612416848461163c565b806117205750506000908152600460205260409020546001600160a01b03908116911614919050565b6001600160e01b0319811681146116a557600080fd5b60006020828403121561246757600080fd5b8135611ea38161243f565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156124b1576124b1612472565b604052919050565b600067ffffffffffffffff8211156124d3576124d3612472565b50601f01601f191660200190565b60006124f46124ef846124b9565b612488565b905082815283838301111561250857600080fd5b828260208301376000602084830101529392505050565b600082601f83011261253057600080fd5b611ea3838335602085016124e1565b60006020828403121561255157600080fd5b813567ffffffffffffffff81111561256857600080fd5b6117208482850161251f565b60005b8381101561258f578181015183820152602001612577565b50506000910152565b600081518084526125b0816020860160208601612574565b601f01601f19169290920160200192915050565b602081526000611ea36020830184612598565b6000602082840312156125e957600080fd5b5035919050565b80356001600160a01b038116811461260757600080fd5b919050565b6000806040838503121561261f57600080fd5b612628836125f0565b946020939093013593505050565b60006020828403121561264857600080fd5b611ea3826125f0565b60008060006060848603121561266657600080fd5b61266f846125f0565b925061267d602085016125f0565b9150604084013590509250925092565b6000806000606084860312156126a257600080fd5b833592506126b2602085016125f0565b9150604084013567ffffffffffffffff8111156126ce57600080fd5b6126da8682870161251f565b9150509250925092565b600080604083850312156126f757600080fd5b82359150612707602084016125f0565b90509250929050565b80151581146116a557600080fd5b6000806040838503121561273157600080fd5b61273a836125f0565b9150602083013561274a81612710565b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b60006004861061278b57634e487b7160e01b600052602160045260246000fd5b858252608060208301526127a26080830186612598565b82810360408401526127b48186612598565b915050821515606083015295945050505050565b600080600080608085870312156127de57600080fd5b6127e7856125f0565b93506127f5602086016125f0565b925060408501359150606085013567ffffffffffffffff81111561281857600080fd5b8501601f8101871361282957600080fd5b612838878235602084016124e1565b91505092959194509250565b6000806040838503121561285757600080fd5b612860836125f0565b9150612707602084016125f0565b60008251612880818460208701612574565b9190910192915050565b600181811c9082168061289e57607f821691505b6020821081036128be57634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156128d657600080fd5b8151611ea381612710565b634e487b7160e01b600052601160045260246000fd5b600060018201612909576129096128e1565b5060010190565b60006020828403121561292257600080fd5b815167ffffffffffffffff81111561293957600080fd5b8201601f8101841361294a57600080fd5b80516129586124ef826124b9565b81815285602083850101111561296d57600080fd5b61297e826020830160208601612574565b95945050505050565b601f821115610d5a57600081815260208120601f850160051c810160208610156129ae5750805b601f850160051c820191505b818110156129cd578281556001016129ba565b505050505050565b815167ffffffffffffffff8111156129ef576129ef612472565b612a03816129fd845461288a565b84612987565b602080601f831160018114612a385760008415612a205750858301515b600019600386901b1c1916600185901b1785556129cd565b600085815260208120601f198616915b82811015612a6757888601518255948401946001909101908401612a48565b5085821015612a855787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612ade90830184612598565b9695505050505050565b600060208284031215612afa57600080fd5b8151611ea38161243f565b60008351612b17818460208801612574565b835190830190612b2b818360208801612574565b01949350505050565b8181038181111561056a5761056a6128e1565b634e487b7160e01b600052603160045260246000fdfeb19546dff01e856fb3f010c267a7b1c60363cf8a4664e21cc89c26224620214e88a91f33d69233608ec901106cda3805f1356caac193014d6c70c694090df4aea26469706673582212203b0c5d4c8c93d4dada08cbc5015ba7e7c94e42a275c7791f1f444eb489cfafee64736f6c634300081400330000000000000000000000006425873ba67ddc66fe99769e56f3ab43815a69f2