@vaimee/my3sec-contracts
Version:
A set of contracts that implements the My3Sec protocol
596 lines (595 loc) • 48.4 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "My3SecProfiles",
"sourceName": "contracts/profiles/My3SecProfiles.sol",
"abi": [
{
"inputs": [],
"name": "InitParamsInvalid",
"type": "error"
},
{
"inputs": [],
"name": "NotHub",
"type": "error"
},
{
"inputs": [],
"name": "NotProfileOwner",
"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": "uint8",
"name": "version",
"type": "uint8"
}
],
"name": "Initialized",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "to",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "Transfer",
"type": "event"
},
{
"inputs": [
{
"internalType": "address",
"name": "hub",
"type": "address"
}
],
"name": "__HubControllable_init",
"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": "address",
"name": "to",
"type": "address"
},
{
"internalType": "string",
"name": "uri",
"type": "string"
}
],
"name": "createProfile",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "getApproved",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "getDefaultProfileId",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "hub",
"type": "address"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"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": [],
"name": "renounceOwnership",
"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": "address",
"name": "account",
"type": "address"
},
{
"internalType": "uint256",
"name": "profileId",
"type": "uint256"
}
],
"name": "setDefaultProfile",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "hub",
"type": "address"
}
],
"name": "setHub",
"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"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "profileId",
"type": "uint256"
},
{
"internalType": "string",
"name": "uri",
"type": "string"
}
],
"name": "updateProfile",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"bytecode": "0x608060405234801561001057600080fd5b50612344806100206000396000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c8063715018a6116100de578063b88d4fde11610097578063e93a724a11610071578063e93a724a14610368578063e985e9c51461037b578063f2fde38b146103b7578063f414c97d146103ca57600080fd5b8063b88d4fde1461032f578063c4d66de814610342578063c87b56dd1461035557600080fd5b8063715018a6146102d55780637765eba1146102dd57806389c7e0a0146102f05780638da5cb5b1461030357806395d89b4114610314578063a22cb4651461031c57600080fd5b806323b872dd1161014b57806342842e0e1161012557806342842e0e146102895780634f6ccce71461029c5780636352211e146102af57806370a08231146102c257600080fd5b806323b872dd146102505780632f745c591461026357806331962cdc1461027657600080fd5b806301ffc9a71461019357806305b186b6146101bb57806306fdde03146101f3578063081812fc14610208578063095ea7b31461023357806318160ddd14610248575b600080fd5b6101a66101a1366004611c41565b6103dd565b60405190151581526020015b60405180910390f35b6101e56101c9366004611c7a565b6001600160a01b0316600090815261012f602052604090205490565b6040519081526020016101b2565b6101fb6103ee565b6040516101b29190611ce5565b61021b610216366004611cf8565b610480565b6040516001600160a01b0390911681526020016101b2565b610246610241366004611d11565b6104a7565b005b60cc546101e5565b61024661025e366004611d3b565b6105c1565b6101e5610271366004611d11565b6105f2565b610246610284366004611c7a565b610688565b610246610297366004611d3b565b6106d9565b6101e56102aa366004611cf8565b6106f4565b61021b6102bd366004611cf8565b610787565b6101e56102d0366004611c7a565b6107e7565b61024661086d565b6101e56102eb366004611e23565b610881565b6102466102fe366004611e71565b610904565b6065546001600160a01b031661021b565b6101fb61093d565b61024661032a366004611ea2565b61094c565b61024661033d366004611ede565b610957565b610246610350366004611c7a565b61098f565b6101fb610363366004611cf8565b610afe565b610246610376366004611d11565b610b09565b6101a6610389366004611f5a565b6001600160a01b039182166000908152609d6020908152604080832093909416825291909152205460ff1690565b6102466103c5366004611c7a565b610b3e565b6102466103d8366004611c7a565b610bb7565b60006103e882610bef565b92915050565b6060609880546103fd90611f8d565b80601f016020809104026020016040519081016040528092919081815260200182805461042990611f8d565b80156104765780601f1061044b57610100808354040283529160200191610476565b820191906000526020600020905b81548152906001019060200180831161045957829003601f168201915b5050505050905090565b600061048b82610c14565b506000908152609c60205260409020546001600160a01b031690565b60006104b282610787565b9050806001600160a01b0316836001600160a01b0316036105245760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b038216148061054057506105408133610389565b6105b25760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000606482015260840161051b565b6105bc8383610c73565b505050565b6105cb3382610ce1565b6105e75760405162461bcd60e51b815260040161051b90611fc7565b6105bc838383610d60565b60006105fd836107e7565b821061065f5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b606482015260840161051b565b506001600160a01b0391909116600090815260ca60209081526040808320938352929052205490565b610690610ed1565b6001600160a01b0381166106b7576040516348be0eb360e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b6105bc83838360405180602001604052806000815250610957565b60006106ff60cc5490565b82106107625760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b606482015260840161051b565b60cc828154811061077557610775612014565b90600052602060002001549050919050565b6000818152609a60205260408120546001600160a01b0316806103e85760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161051b565b60006001600160a01b0382166108515760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b606482015260840161051b565b506001600160a01b03166000908152609b602052604090205490565b610875610ed1565b61087f6000610f2b565b565b6097546000906001600160a01b031633146108af576040516313bd2e8360e31b815260040160405180910390fd5b600061012e600081546108c190612040565b918290555090506108d28482610f7d565b6108dc8184610f97565b60006108e7856107e7565b600114905080156108fc576108fc858361102a565b509392505050565b6097546001600160a01b0316331461092f576040516313bd2e8360e31b815260040160405180910390fd5b6109398282610f97565b5050565b6060609980546103fd90611f8d565b61093933838361108f565b6109613383610ce1565b61097d5760405162461bcd60e51b815260040161051b90611fc7565b6109898484848461115d565b50505050565b600054610100900460ff16158080156109af5750600054600160ff909116105b806109c95750303b1580156109c9575060005460ff166001145b610a2c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161051b565b6000805460ff191660011790558015610a4f576000805461ff0019166101001790555b610a9c6040518060400160405280600f81526020016e4d79335365632050726f66696c657360881b8152506040518060400160405280600481526020016304d3353560e41b815250611190565b610aa46111c1565b610aac6111c1565b610ab582610bb7565b8015610939576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b60606103e8826111e8565b6097546001600160a01b03163314610b34576040516313bd2e8360e31b815260040160405180910390fd5b610939828261102a565b610b46610ed1565b6001600160a01b038116610bab5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161051b565b610bb481610f2b565b50565b600054610100900460ff16610bde5760405162461bcd60e51b815260040161051b90612059565b610be66112f0565b610bb481610688565b60006001600160e01b0319821663780e9d6360e01b14806103e857506103e88261131f565b6000818152609a60205260409020546001600160a01b0316610bb45760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161051b565b6000818152609c6020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610ca882610787565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610ced83610787565b9050806001600160a01b0316846001600160a01b03161480610d3457506001600160a01b038082166000908152609d602090815260408083209388168352929052205460ff165b80610d585750836001600160a01b0316610d4d84610480565b6001600160a01b0316145b949350505050565b826001600160a01b0316610d7382610787565b6001600160a01b031614610d995760405162461bcd60e51b815260040161051b906120a4565b6001600160a01b038216610dfb5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161051b565b610e08838383600161136f565b826001600160a01b0316610e1b82610787565b6001600160a01b031614610e415760405162461bcd60e51b815260040161051b906120a4565b6000818152609c6020908152604080832080546001600160a01b03199081169091556001600160a01b03878116808652609b8552838620805460001901905590871680865283862080546001019055868652609a90945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6065546001600160a01b0316331461087f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161051b565b606580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6109398282604051806020016040528060008152506113b7565b6000828152609a60205260409020546001600160a01b03166110125760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201526d32bc34b9ba32b73a103a37b5b2b760911b606482015260840161051b565b600082815260fc602052604090206105bc8282612137565b600081118015611054575061103e81610787565b6001600160a01b0316826001600160a01b031614155b156110725760405163f194fae560e01b815260040160405180910390fd5b6001600160a01b03909116600090815261012f6020526040902055565b816001600160a01b0316836001600160a01b0316036110f05760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161051b565b6001600160a01b038381166000818152609d6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611168848484610d60565b611174848484846113ea565b6109895760405162461bcd60e51b815260040161051b906121f7565b600054610100900460ff166111b75760405162461bcd60e51b815260040161051b90612059565b61093982826114eb565b600054610100900460ff1661087f5760405162461bcd60e51b815260040161051b90612059565b60606111f382610c14565b600082815260fc60205260408120805461120c90611f8d565b80601f016020809104026020016040519081016040528092919081815260200182805461123890611f8d565b80156112855780601f1061125a57610100808354040283529160200191611285565b820191906000526020600020905b81548152906001019060200180831161126857829003601f168201915b5050505050905060006112a360408051602081019091526000815290565b905080516000036112b5575092915050565b8151156112e75780826040516020016112cf929190612249565b60405160208183030381529060405292505050919050565b610d588461152b565b600054610100900460ff166113175760405162461bcd60e51b815260040161051b90612059565b61087f61159f565b60006001600160e01b031982166380ac58cd60e01b148061135057506001600160e01b03198216635b5e139f60e01b145b806103e857506301ffc9a760e01b6001600160e01b03198316146103e8565b6001600160a01b038416600090815261012f60205260409020548290036113ab576001600160a01b038416600090815261012f60205260408120555b610989848484846115cf565b6113c1838361170f565b6113ce60008484846113ea565b6105bc5760405162461bcd60e51b815260040161051b906121f7565b60006001600160a01b0384163b156114e057604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061142e903390899088908890600401612278565b6020604051808303816000875af1925050508015611469575060408051601f3d908101601f19168201909252611466918101906122b5565b60015b6114c6573d808015611497576040519150601f19603f3d011682016040523d82523d6000602084013e61149c565b606091505b5080516000036114be5760405162461bcd60e51b815260040161051b906121f7565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610d58565b506001949350505050565b600054610100900460ff166115125760405162461bcd60e51b815260040161051b90612059565b609861151e8382612137565b5060996105bc8282612137565b606061153682610c14565b600061154d60408051602081019091526000815290565b9050600081511161156d5760405180602001604052806000815250611598565b80611577846118a8565b604051602001611588929190612249565b6040516020818303038152906040525b9392505050565b600054610100900460ff166115c65760405162461bcd60e51b815260040161051b90612059565b61087f33610f2b565b6115db8484848461193b565b600181111561164a5760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b606482015260840161051b565b816001600160a01b0385166116a6576116a18160cc8054600083815260cd60205260408120829055600182018355919091527f47197230e1e4b29fc0bd84d7d78966c0925452aff72a2a121538b102457e9ebe0155565b6116c9565b836001600160a01b0316856001600160a01b0316146116c9576116c985826119c3565b6001600160a01b0384166116e5576116e081611a60565b611708565b846001600160a01b0316846001600160a01b031614611708576117088482611b0f565b5050505050565b6001600160a01b0382166117655760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161051b565b6000818152609a60205260409020546001600160a01b0316156117ca5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161051b565b6117d860008383600161136f565b6000818152609a60205260409020546001600160a01b03161561183d5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161051b565b6001600160a01b0382166000818152609b6020908152604080832080546001019055848352609a90915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b606060006118b583611b53565b600101905060008167ffffffffffffffff8111156118d5576118d5611d77565b6040519080825280601f01601f1916602001820160405280156118ff576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461190957509392505050565b6001811115610989576001600160a01b03841615611981576001600160a01b0384166000908152609b60205260408120805483929061197b9084906122d2565b90915550505b6001600160a01b03831615610989576001600160a01b0383166000908152609b6020526040812080548392906119b89084906122e5565b909155505050505050565b600060016119d0846107e7565b6119da91906122d2565b600083815260cb6020526040902054909150808214611a2d576001600160a01b038416600090815260ca60209081526040808320858452825280832054848452818420819055835260cb90915290208190555b50600091825260cb602090815260408084208490556001600160a01b03909416835260ca81528383209183525290812055565b60cc54600090611a72906001906122d2565b600083815260cd602052604081205460cc8054939450909284908110611a9a57611a9a612014565b906000526020600020015490508060cc8381548110611abb57611abb612014565b600091825260208083209091019290925582815260cd909152604080822084905585825281205560cc805480611af357611af36122f8565b6001900381819060005260206000200160009055905550505050565b6000611b1a836107e7565b6001600160a01b03909316600090815260ca60209081526040808320868452825280832085905593825260cb9052919091209190915550565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310611b925772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310611bbe576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310611bdc57662386f26fc10000830492506010015b6305f5e1008310611bf4576305f5e100830492506008015b6127108310611c0857612710830492506004015b60648310611c1a576064830492506002015b600a83106103e85760010192915050565b6001600160e01b031981168114610bb457600080fd5b600060208284031215611c5357600080fd5b813561159881611c2b565b80356001600160a01b0381168114611c7557600080fd5b919050565b600060208284031215611c8c57600080fd5b61159882611c5e565b60005b83811015611cb0578181015183820152602001611c98565b50506000910152565b60008151808452611cd1816020860160208601611c95565b601f01601f19169290920160200192915050565b6020815260006115986020830184611cb9565b600060208284031215611d0a57600080fd5b5035919050565b60008060408385031215611d2457600080fd5b611d2d83611c5e565b946020939093013593505050565b600080600060608486031215611d5057600080fd5b611d5984611c5e565b9250611d6760208501611c5e565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611da857611da8611d77565b604051601f8501601f19908116603f01168101908282118183101715611dd057611dd0611d77565b81604052809350858152868686011115611de957600080fd5b858560208301376000602087830101525050509392505050565b600082601f830112611e1457600080fd5b61159883833560208501611d8d565b60008060408385031215611e3657600080fd5b611e3f83611c5e565b9150602083013567ffffffffffffffff811115611e5b57600080fd5b611e6785828601611e03565b9150509250929050565b60008060408385031215611e8457600080fd5b82359150602083013567ffffffffffffffff811115611e5b57600080fd5b60008060408385031215611eb557600080fd5b611ebe83611c5e565b915060208301358015158114611ed357600080fd5b809150509250929050565b60008060008060808587031215611ef457600080fd5b611efd85611c5e565b9350611f0b60208601611c5e565b925060408501359150606085013567ffffffffffffffff811115611f2e57600080fd5b8501601f81018713611f3f57600080fd5b611f4e87823560208401611d8d565b91505092959194509250565b60008060408385031215611f6d57600080fd5b611f7683611c5e565b9150611f8460208401611c5e565b90509250929050565b600181811c90821680611fa157607f821691505b602082108103611fc157634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016120525761205261202a565b5060010190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b601f8211156105bc57600081815260208120601f850160051c810160208610156121105750805b601f850160051c820191505b8181101561212f5782815560010161211c565b505050505050565b815167ffffffffffffffff81111561215157612151611d77565b6121658161215f8454611f8d565b846120e9565b602080601f83116001811461219a57600084156121825750858301515b600019600386901b1c1916600185901b17855561212f565b600085815260208120601f198616915b828110156121c9578886015182559484019460019091019084016121aa565b50858210156121e75787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6000835161225b818460208801611c95565b83519083019061226f818360208801611c95565b01949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906122ab90830184611cb9565b9695505050505050565b6000602082840312156122c757600080fd5b815161159881611c2b565b818103818111156103e8576103e861202a565b808201808211156103e8576103e861202a565b634e487b7160e01b600052603160045260246000fdfea26469706673582212207c97dca10fc93414618a3f6422dcc2fab07a892a1b396426e61f4284a58496a364736f6c63430008110033",
"deployedBytecode": "0x608060405234801561001057600080fd5b506004361061018e5760003560e01c8063715018a6116100de578063b88d4fde11610097578063e93a724a11610071578063e93a724a14610368578063e985e9c51461037b578063f2fde38b146103b7578063f414c97d146103ca57600080fd5b8063b88d4fde1461032f578063c4d66de814610342578063c87b56dd1461035557600080fd5b8063715018a6146102d55780637765eba1146102dd57806389c7e0a0146102f05780638da5cb5b1461030357806395d89b4114610314578063a22cb4651461031c57600080fd5b806323b872dd1161014b57806342842e0e1161012557806342842e0e146102895780634f6ccce71461029c5780636352211e146102af57806370a08231146102c257600080fd5b806323b872dd146102505780632f745c591461026357806331962cdc1461027657600080fd5b806301ffc9a71461019357806305b186b6146101bb57806306fdde03146101f3578063081812fc14610208578063095ea7b31461023357806318160ddd14610248575b600080fd5b6101a66101a1366004611c41565b6103dd565b60405190151581526020015b60405180910390f35b6101e56101c9366004611c7a565b6001600160a01b0316600090815261012f602052604090205490565b6040519081526020016101b2565b6101fb6103ee565b6040516101b29190611ce5565b61021b610216366004611cf8565b610480565b6040516001600160a01b0390911681526020016101b2565b610246610241366004611d11565b6104a7565b005b60cc546101e5565b61024661025e366004611d3b565b6105c1565b6101e5610271366004611d11565b6105f2565b610246610284366004611c7a565b610688565b610246610297366004611d3b565b6106d9565b6101e56102aa366004611cf8565b6106f4565b61021b6102bd366004611cf8565b610787565b6101e56102d0366004611c7a565b6107e7565b61024661086d565b6101e56102eb366004611e23565b610881565b6102466102fe366004611e71565b610904565b6065546001600160a01b031661021b565b6101fb61093d565b61024661032a366004611ea2565b61094c565b61024661033d366004611ede565b610957565b610246610350366004611c7a565b61098f565b6101fb610363366004611cf8565b610afe565b610246610376366004611d11565b610b09565b6101a6610389366004611f5a565b6001600160a01b039182166000908152609d6020908152604080832093909416825291909152205460ff1690565b6102466103c5366004611c7a565b610b3e565b6102466103d8366004611c7a565b610bb7565b60006103e882610bef565b92915050565b6060609880546103fd90611f8d565b80601f016020809104026020016040519081016040528092919081815260200182805461042990611f8d565b80156104765780601f1061044b57610100808354040283529160200191610476565b820191906000526020600020905b81548152906001019060200180831161045957829003601f168201915b5050505050905090565b600061048b82610c14565b506000908152609c60205260409020546001600160a01b031690565b60006104b282610787565b9050806001600160a01b0316836001600160a01b0316036105245760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b038216148061054057506105408133610389565b6105b25760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000606482015260840161051b565b6105bc8383610c73565b505050565b6105cb3382610ce1565b6105e75760405162461bcd60e51b815260040161051b90611fc7565b6105bc838383610d60565b60006105fd836107e7565b821061065f5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b606482015260840161051b565b506001600160a01b0391909116600090815260ca60209081526040808320938352929052205490565b610690610ed1565b6001600160a01b0381166106b7576040516348be0eb360e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b6105bc83838360405180602001604052806000815250610957565b60006106ff60cc5490565b82106107625760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b606482015260840161051b565b60cc828154811061077557610775612014565b90600052602060002001549050919050565b6000818152609a60205260408120546001600160a01b0316806103e85760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161051b565b60006001600160a01b0382166108515760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b606482015260840161051b565b506001600160a01b03166000908152609b602052604090205490565b610875610ed1565b61087f6000610f2b565b565b6097546000906001600160a01b031633146108af576040516313bd2e8360e31b815260040160405180910390fd5b600061012e600081546108c190612040565b918290555090506108d28482610f7d565b6108dc8184610f97565b60006108e7856107e7565b600114905080156108fc576108fc858361102a565b509392505050565b6097546001600160a01b0316331461092f576040516313bd2e8360e31b815260040160405180910390fd5b6109398282610f97565b5050565b6060609980546103fd90611f8d565b61093933838361108f565b6109613383610ce1565b61097d5760405162461bcd60e51b815260040161051b90611fc7565b6109898484848461115d565b50505050565b600054610100900460ff16158080156109af5750600054600160ff909116105b806109c95750303b1580156109c9575060005460ff166001145b610a2c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161051b565b6000805460ff191660011790558015610a4f576000805461ff0019166101001790555b610a9c6040518060400160405280600f81526020016e4d79335365632050726f66696c657360881b8152506040518060400160405280600481526020016304d3353560e41b815250611190565b610aa46111c1565b610aac6111c1565b610ab582610bb7565b8015610939576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b60606103e8826111e8565b6097546001600160a01b03163314610b34576040516313bd2e8360e31b815260040160405180910390fd5b610939828261102a565b610b46610ed1565b6001600160a01b038116610bab5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161051b565b610bb481610f2b565b50565b600054610100900460ff16610bde5760405162461bcd60e51b815260040161051b90612059565b610be66112f0565b610bb481610688565b60006001600160e01b0319821663780e9d6360e01b14806103e857506103e88261131f565b6000818152609a60205260409020546001600160a01b0316610bb45760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161051b565b6000818152609c6020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610ca882610787565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610ced83610787565b9050806001600160a01b0316846001600160a01b03161480610d3457506001600160a01b038082166000908152609d602090815260408083209388168352929052205460ff165b80610d585750836001600160a01b0316610d4d84610480565b6001600160a01b0316145b949350505050565b826001600160a01b0316610d7382610787565b6001600160a01b031614610d995760405162461bcd60e51b815260040161051b906120a4565b6001600160a01b038216610dfb5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161051b565b610e08838383600161136f565b826001600160a01b0316610e1b82610787565b6001600160a01b031614610e415760405162461bcd60e51b815260040161051b906120a4565b6000818152609c6020908152604080832080546001600160a01b03199081169091556001600160a01b03878116808652609b8552838620805460001901905590871680865283862080546001019055868652609a90945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6065546001600160a01b0316331461087f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161051b565b606580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6109398282604051806020016040528060008152506113b7565b6000828152609a60205260409020546001600160a01b03166110125760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201526d32bc34b9ba32b73a103a37b5b2b760911b606482015260840161051b565b600082815260fc602052604090206105bc8282612137565b600081118015611054575061103e81610787565b6001600160a01b0316826001600160a01b031614155b156110725760405163f194fae560e01b815260040160405180910390fd5b6001600160a01b03909116600090815261012f6020526040902055565b816001600160a01b0316836001600160a01b0316036110f05760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161051b565b6001600160a01b038381166000818152609d6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611168848484610d60565b611174848484846113ea565b6109895760405162461bcd60e51b815260040161051b906121f7565b600054610100900460ff166111b75760405162461bcd60e51b815260040161051b90612059565b61093982826114eb565b600054610100900460ff1661087f5760405162461bcd60e51b815260040161051b90612059565b60606111f382610c14565b600082815260fc60205260408120805461120c90611f8d565b80601f016020809104026020016040519081016040528092919081815260200182805461123890611f8d565b80156112855780601f1061125a57610100808354040283529160200191611285565b820191906000526020600020905b81548152906001019060200180831161126857829003601f168201915b5050505050905060006112a360408051602081019091526000815290565b905080516000036112b5575092915050565b8151156112e75780826040516020016112cf929190612249565b60405160208183030381529060405292505050919050565b610d588461152b565b600054610100900460ff166113175760405162461bcd60e51b815260040161051b90612059565b61087f61159f565b60006001600160e01b031982166380ac58cd60e01b148061135057506001600160e01b03198216635b5e139f60e01b145b806103e857506301ffc9a760e01b6001600160e01b03198316146103e8565b6001600160a01b038416600090815261012f60205260409020548290036113ab576001600160a01b038416600090815261012f60205260408120555b610989848484846115cf565b6113c1838361170f565b6113ce60008484846113ea565b6105bc5760405162461bcd60e51b815260040161051b906121f7565b60006001600160a01b0384163b156114e057604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061142e903390899088908890600401612278565b6020604051808303816000875af1925050508015611469575060408051601f3d908101601f19168201909252611466918101906122b5565b60015b6114c6573d808015611497576040519150601f19603f3d011682016040523d82523d6000602084013e61149c565b606091505b5080516000036114be5760405162461bcd60e51b815260040161051b906121f7565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610d58565b506001949350505050565b600054610100900460ff166115125760405162461bcd60e51b815260040161051b90612059565b609861151e8382612137565b5060996105bc8282612137565b606061153682610c14565b600061154d60408051602081019091526000815290565b9050600081511161156d5760405180602001604052806000815250611598565b80611577846118a8565b604051602001611588929190612249565b6040516020818303038152906040525b9392505050565b600054610100900460ff166115c65760405162461bcd60e51b815260040161051b90612059565b61087f33610f2b565b6115db8484848461193b565b600181111561164a5760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b606482015260840161051b565b816001600160a01b0385166116a6576116a18160cc8054600083815260cd60205260408120829055600182018355919091527f47197230e1e4b29fc0bd84d7d78966c0925452aff72a2a121538b102457e9ebe0155565b6116c9565b836001600160a01b0316856001600160a01b0316146116c9576116c985826119c3565b6001600160a01b0384166116e5576116e081611a60565b611708565b846001600160a01b0316846001600160a01b031614611708576117088482611b0f565b5050505050565b6001600160a01b0382166117655760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161051b565b6000818152609a60205260409020546001600160a01b0316156117ca5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161051b565b6117d860008383600161136f565b6000818152609a60205260409020546001600160a01b03161561183d5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161051b565b6001600160a01b0382166000818152609b6020908152604080832080546001019055848352609a90915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b606060006118b583611b53565b600101905060008167ffffffffffffffff8111156118d5576118d5611d77565b6040519080825280601f01601f1916602001820160405280156118ff576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461190957509392505050565b6001811115610989576001600160a01b03841615611981576001600160a01b0384166000908152609b60205260408120805483929061197b9084906122d2565b90915550505b6001600160a01b03831615610989576001600160a01b0383166000908152609b6020526040812080548392906119b89084906122e5565b909155505050505050565b600060016119d0846107e7565b6119da91906122d2565b600083815260cb6020526040902054909150808214611a2d576001600160a01b038416600090815260ca60209081526040808320858452825280832054848452818420819055835260cb90915290208190555b50600091825260cb602090815260408084208490556001600160a01b03909416835260ca81528383209183525290812055565b60cc54600090611a72906001906122d2565b600083815260cd602052604081205460cc8054939450909284908110611a9a57611a9a612014565b906000526020600020015490508060cc8381548110611abb57611abb612014565b600091825260208083209091019290925582815260cd909152604080822084905585825281205560cc805480611af357611af36122f8565b6001900381819060005260206000200160009055905550505050565b6000611b1a836107e7565b6001600160a01b03909316600090815260ca60209081526040808320868452825280832085905593825260cb9052919091209190915550565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310611b925772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310611bbe576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310611bdc57662386f26fc10000830492506010015b6305f5e1008310611bf4576305f5e100830492506008015b6127108310611c0857612710830492506004015b60648310611c1a576064830492506002015b600a83106103e85760010192915050565b6001600160e01b031981168114610bb457600080fd5b600060208284031215611c5357600080fd5b813561159881611c2b565b80356001600160a01b0381168114611c7557600080fd5b919050565b600060208284031215611c8c57600080fd5b61159882611c5e565b60005b83811015611cb0578181015183820152602001611c98565b50506000910152565b60008151808452611cd1816020860160208601611c95565b601f01601f19169290920160200192915050565b6020815260006115986020830184611cb9565b600060208284031215611d0a57600080fd5b5035919050565b60008060408385031215611d2457600080fd5b611d2d83611c5e565b946020939093013593505050565b600080600060608486031215611d5057600080fd5b611d5984611c5e565b9250611d6760208501611c5e565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611da857611da8611d77565b604051601f8501601f19908116603f01168101908282118183101715611dd057611dd0611d77565b81604052809350858152868686011115611de957600080fd5b858560208301376000602087830101525050509392505050565b600082601f830112611e1457600080fd5b61159883833560208501611d8d565b60008060408385031215611e3657600080fd5b611e3f83611c5e565b9150602083013567ffffffffffffffff811115611e5b57600080fd5b611e6785828601611e03565b9150509250929050565b60008060408385031215611e8457600080fd5b82359150602083013567ffffffffffffffff811115611e5b57600080fd5b60008060408385031215611eb557600080fd5b611ebe83611c5e565b915060208301358015158114611ed357600080fd5b809150509250929050565b60008060008060808587031215611ef457600080fd5b611efd85611c5e565b9350611f0b60208601611c5e565b925060408501359150606085013567ffffffffffffffff811115611f2e57600080fd5b8501601f81018713611f3f57600080fd5b611f4e87823560208401611d8d565b91505092959194509250565b60008060408385031215611f6d57600080fd5b611f7683611c5e565b9150611f8460208401611c5e565b90509250929050565b600181811c90821680611fa157607f821691505b602082108103611fc157634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016120525761205261202a565b5060010190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b601f8211156105bc57600081815260208120601f850160051c810160208610156121105750805b601f850160051c820191505b8181101561212f5782815560010161211c565b505050505050565b815167ffffffffffffffff81111561215157612151611d77565b6121658161215f8454611f8d565b846120e9565b602080601f83116001811461219a57600084156121825750858301515b600019600386901b1c1916600185901b17855561212f565b600085815260208120601f198616915b828110156121c9578886015182559484019460019091019084016121aa565b50858210156121e75787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6000835161225b818460208801611c95565b83519083019061226f818360208801611c95565b01949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906122ab90830184611cb9565b9695505050505050565b6000602082840312156122c757600080fd5b815161159881611c2b565b818103818111156103e8576103e861202a565b808201808211156103e8576103e861202a565b634e487b7160e01b600052603160045260246000fdfea26469706673582212207c97dca10fc93414618a3f6422dcc2fab07a892a1b396426e61f4284a58496a364736f6c63430008110033",
"linkReferences": {},
"deployedLinkReferences": {}
}