{
  "_format": "hh-sol-artifact-1",
  "contractName": "UnicornNFT",
  "sourceName": "src/Unicorn/Unicorn.sol",
  "abi": [
    {
      "inputs": [],
      "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": "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"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "creator",
          "type": "address"
        }
      ],
      "name": "UnicornCreatorAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "creator",
          "type": "address"
        }
      ],
      "name": "UnicornCreatorRemoved",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_address",
          "type": "address"
        }
      ],
      "name": "addUnicornCreator",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_unicornId",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_balance",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "getApproved",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getUnicornCreators",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "isApprovedForAll",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_address",
          "type": "address"
        }
      ],
      "name": "isUnicornCreator",
      "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": "_unicornId",
          "type": "uint256"
        }
      ],
      "name": "ownerOf",
      "outputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_address",
          "type": "address"
        }
      ],
      "name": "removeUnicornCreator",
      "outputs": [],
      "stateMutability": "nonpayable",
      "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": "string",
          "name": "_name",
          "type": "string"
        },
        {
          "internalType": "uint256",
          "name": "_unicornId",
          "type": "uint256"
        }
      ],
      "name": "setNewName",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "_tokenURI",
          "type": "string"
        },
        {
          "internalType": "uint256",
          "name": "_unicornId",
          "type": "uint256"
        }
      ],
      "name": "setUnicornURI",
      "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": "_unicornId",
          "type": "uint256"
        }
      ],
      "name": "takeOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "tokenURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_unicornId",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "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": "transferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "name": "unicornNameExists",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "unicornToOwner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040523480156200001157600080fd5b506040518060400160405280601981526020017f43727970746f20556e69636f726e20436f6c6c656374696f6e0000000000000081525060405180604001604052806006815260200165435259554e4960d01b815250620000816200007b6200025060201b60201c565b62000254565b6200008d6000620002a4565b620000aa620000a46000546001600160a01b031690565b620002a4565b8151620000bf90600390602085019062000336565b508051620000d590600490602084019062000336565b50506040805161014081018252600e61010082019081526d34b734ba34b0b62ab734b1b7b93760911b610120830152815260006020808301829052928201819052606082018190526080820181905260a0820181905260c0820181905260e08201819052600a805460018101825591528151805192945060039091027fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80192620001859284929091019062000336565b50602082015160018201556040820151600290910180546060840151608085015160a086015160c087015160e0909701516001600160401b039687166001600160801b03199095169490941768010000000000000000969093169590950291909117600160801b600160c01b031916600160801b63ffffffff9283160263ffffffff60a01b191617600160a01b91909416029290921763ffffffff60c01b1916600160c01b61ffff9485160261ffff60d01b191617600160d01b939092169290920217905562000419565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600280546001600160a01b03831660008181526001602081815260408084208690559185018655949091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90920180546001600160a01b0319168217905590519081527f687fdbab9bf405d8e49b6aae8573c18a70f271210d900511c58363b78faef7b2910160405180910390a150565b8280546200034490620003dc565b90600052602060002090601f016020900481019282620003685760008555620003b3565b82601f106200038357805160ff1916838001178555620003b3565b82800160010185558215620003b3579182015b82811115620003b357825182559160200191906001019062000396565b50620003c1929150620003c5565b5090565b5b80821115620003c15760008155600101620003c6565b600181811c90821680620003f157607f821691505b602082108114156200041357634e487b7160e01b600052602260045260246000fd5b50919050565b611f7c80620004296000396000f3fe608060405234801561001057600080fd5b50600436106101ae5760003560e01c806395d89b41116100ee578063ca3d77b111610097578063de89a30811610071578063de89a308146103dd578063e985e9c514610406578063f2fde38b14610442578063fffec9681461045557600080fd5b8063ca3d77b1146103a2578063d346cc86146103b5578063d8d2d423146103ca57600080fd5b8063b2e6ceeb116100c8578063b2e6ceeb14610369578063b88d4fde1461037c578063c87b56dd1461038f57600080fd5b806395d89b411461033b578063a22cb46514610343578063a9059cbb1461035657600080fd5b8063252a9d5c1161015b5780636352211e116101355780636352211e146102c257806370a08231146102eb578063715018a6146103225780638da5cb5b1461032a57600080fd5b8063252a9d5c1461026e57806342842e0e1461028157806358d9bd2b1461029457600080fd5b8063095ea7b31161018c578063095ea7b31461021b5780631383cac61461023057806323b872dd1461025b57600080fd5b806301ffc9a7146101b357806306fdde03146101db578063081812fc146101f0575b600080fd5b6101c66101c1366004611a15565b610468565b60405190151581526020015b60405180910390f35b6101e361054d565b6040516101d29190611a8a565b6102036101fe366004611a9d565b6105df565b6040516001600160a01b0390911681526020016101d2565b61022e610229366004611ad2565b61068a565b005b6101c661023e366004611afc565b6001600160a01b0316600090815260016020526040902054151590565b61022e610269366004611b17565b610759565b61022e61027c366004611bff565b6107e5565b61022e61028f366004611b17565b61088d565b6101c66102a2366004611c44565b8051602081830181018051600d8252928201919093012091525460ff1681565b6102036102d0366004611a9d565b6000908152600b60205260409020546001600160a01b031690565b6103146102f9366004611afc565b6001600160a01b03166000908152600c602052604090205490565b6040519081526020016101d2565b61022e6108a8565b6000546001600160a01b0316610203565b6101e361090e565b61022e610351366004611c79565b61091d565b61022e610364366004611ad2565b610a00565b61022e610377366004611a9d565b610a73565b61022e61038a366004611cb5565b610b00565b6101e361039d366004611a9d565b610b8e565b61022e6103b0366004611afc565b610d21565b6103bd610e11565b6040516101d29190611d31565b61022e6103d8366004611bff565b610e72565b6102036103eb366004611a9d565b600b602052600090815260409020546001600160a01b031681565b6101c6610414366004611d7e565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b61022e610450366004611afc565b610ee4565b61022e610463366004611afc565b610fc6565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806104fb57507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061054757507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606003805461055c90611db1565b80601f016020809104026020016040519081016040528092919081815260200182805461058890611db1565b80156105d55780601f106105aa576101008083540402835291602001916105d5565b820191906000526020600020905b8154815290600101906020018083116105b857829003601f168201915b5050505050905090565b6000818152600560205260408120546001600160a01b031661066e5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b506000908152600760205260409020546001600160a01b031690565b6000818152600b602052604090205481906001600160a01b031633146106f25760405162461bcd60e51b815260206004820152601160248201527f4e6f7420756e69636f726e206f776e65720000000000000000000000000000006044820152606401610665565b6000828152600e6020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0387169081179091559051849233917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259190a4505050565b61076333826110d8565b6107d55760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610665565b6107e08383836111dc565b505050565b6000818152600b602052604090205481906001600160a01b0316331461084d5760405162461bcd60e51b815260206004820152601160248201527f4e6f7420756e69636f726e206f776e65720000000000000000000000000000006044820152606401610665565b6000600a838154811061086257610862611dec565b6000918252602091829020865160039092020192506108869183919087019061194e565b5050505050565b6107e083838360405180602001604052806000815250610b00565b6000546001600160a01b031633146109025760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610665565b61090c60006112a8565b565b60606004805461055c90611db1565b6001600160a01b0382163314156109765760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610665565b3360008181526008602090815260408083206001600160a01b0387168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6000818152600b602052604090205481906001600160a01b03163314610a685760405162461bcd60e51b815260206004820152601160248201527f4e6f7420756e69636f726e206f776e65720000000000000000000000000000006044820152606401610665565b6107e03384846111dc565b6000818152600e60205260409020546001600160a01b03163314610ad95760405162461bcd60e51b815260206004820152600c60248201527f4e6f7420617070726f76656400000000000000000000000000000000000000006044820152606401610665565b6000818152600b60205260409020546001600160a01b0316610afc8133846111dc565b5050565b610b0a33836110d8565b610b7c5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610665565b610b8884848484611305565b50505050565b6000818152600560205260409020546060906001600160a01b0316610c1b5760405162461bcd60e51b815260206004820152603160248201527f45524337323155524953746f726167653a2055524920717565727920666f722060448201527f6e6f6e6578697374656e7420746f6b656e0000000000000000000000000000006064820152608401610665565b60008281526009602052604081208054610c3490611db1565b80601f0160208091040260200160405190810160405280929190818152602001828054610c6090611db1565b8015610cad5780601f10610c8257610100808354040283529160200191610cad565b820191906000526020600020905b815481529060010190602001808311610c9057829003601f168201915b505050505090506000610ccb60408051602081019091526000815290565b9050805160001415610cde575092915050565b815115610d10578082604051602001610cf8929190611e02565b60405160208183030381529060405292505050919050565b610d198461138e565b949350505050565b6000546001600160a01b03163314610d7b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610665565b6001600160a01b038116600090815260016020526040812080549190556002805482908110610dac57610dac611dec565b600091825260209182902001805473ffffffffffffffffffffffffffffffffffffffff191690556040516001600160a01b03841681527f2d823f6048a80d720162c84ab7cbc8ebbea8d898ab659cb73f2b40718a63ee11910160405180910390a15050565b606060028054806020026020016040519081016040528092919081815260200182805480156105d557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610e4b575050505050905090565b6000818152600b602052604090205481906001600160a01b03163314610eda5760405162461bcd60e51b815260206004820152601160248201527f4e6f7420756e69636f726e206f776e65720000000000000000000000000000006044820152606401610665565b6107e08284611484565b6000546001600160a01b03163314610f3e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610665565b6001600160a01b038116610fba5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610665565b610fc3816112a8565b50565b6000546001600160a01b031633146110205760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610665565b6001600160a01b0381163014156110795760405162461bcd60e51b815260206004820152601060248201527f636f6e74726163742061646472657373000000000000000000000000000000006044820152606401610665565b6001600160a01b0381166110cf5760405162461bcd60e51b815260206004820152600c60248201527f7a65726f206164647265737300000000000000000000000000000000000000006044820152606401610665565b610fc38161152d565b6000818152600560205260408120546001600160a01b03166111625760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610665565b600061116d836115cc565b9050806001600160a01b0316846001600160a01b031614806111a85750836001600160a01b031661119d846105df565b6001600160a01b0316145b80610d1957506001600160a01b0380821660009081526008602090815260408083209388168352929052205460ff16610d19565b6001600160a01b0382166000908152600c6020526040902054611200906001611657565b6001600160a01b0383166000908152600c602052604080822092909255338152205461122d906001611663565b336000908152600c6020908152604080832093909355838252600b9052818120805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038681169182179092559251849392918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6113108484846111dc565b61131c8484848461166f565b610b885760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610665565b6000818152600560205260409020546060906001600160a01b031661141b5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006064820152608401610665565b600061143260408051602081019091526000815290565b90506000815111611452576040518060200160405280600081525061147d565b8061145c8461181c565b60405160200161146d929190611e02565b6040516020818303038152906040525b9392505050565b6000828152600560205260409020546001600160a01b031661150e5760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201527f6578697374656e7420746f6b656e0000000000000000000000000000000000006064820152608401610665565b600082815260096020908152604090912082516107e09284019061194e565b600280546001600160a01b03831660008181526001602081815260408084208690559185018655949091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace909201805473ffffffffffffffffffffffffffffffffffffffff19168217905590519081527f687fdbab9bf405d8e49b6aae8573c18a70f271210d900511c58363b78faef7b2910160405180910390a150565b6000818152600560205260408120546001600160a01b0316806105475760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610665565b600061147d8284611e47565b600061147d8284611e5f565b60006001600160a01b0384163b15611811576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a02906116cc903390899088908890600401611e76565b602060405180830381600087803b1580156116e657600080fd5b505af1925050508015611716575060408051601f3d908101601f1916820190925261171391810190611eb2565b60015b6117c6573d808015611744576040519150601f19603f3d011682016040523d82523d6000602084013e611749565b606091505b5080516117be5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610665565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050610d19565b506001949350505050565b60608161185c57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611886578061187081611ecf565b915061187f9050600a83611f1e565b9150611860565b60008167ffffffffffffffff8111156118a1576118a1611b53565b6040519080825280601f01601f1916602001820160405280156118cb576020820181803683370190505b5090505b8415610d19576118e0600183611e5f565b91506118ed600a86611f32565b6118f8906030611e47565b60f81b81838151811061190d5761190d611dec565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611947600a86611f1e565b94506118cf565b82805461195a90611db1565b90600052602060002090601f01602090048101928261197c57600085556119c2565b82601f1061199557805160ff19168380011785556119c2565b828001600101855582156119c2579182015b828111156119c25782518255916020019190600101906119a7565b506119ce9291506119d2565b5090565b5b808211156119ce57600081556001016119d3565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610fc357600080fd5b600060208284031215611a2757600080fd5b813561147d816119e7565b60005b83811015611a4d578181015183820152602001611a35565b83811115610b885750506000910152565b60008151808452611a76816020860160208601611a32565b601f01601f19169290920160200192915050565b60208152600061147d6020830184611a5e565b600060208284031215611aaf57600080fd5b5035919050565b80356001600160a01b0381168114611acd57600080fd5b919050565b60008060408385031215611ae557600080fd5b611aee83611ab6565b946020939093013593505050565b600060208284031215611b0e57600080fd5b61147d82611ab6565b600080600060608486031215611b2c57600080fd5b611b3584611ab6565b9250611b4360208501611ab6565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611b8457611b84611b53565b604051601f8501601f19908116603f01168101908282118183101715611bac57611bac611b53565b81604052809350858152868686011115611bc557600080fd5b858560208301376000602087830101525050509392505050565b600082601f830112611bf057600080fd5b61147d83833560208501611b69565b60008060408385031215611c1257600080fd5b823567ffffffffffffffff811115611c2957600080fd5b611c3585828601611bdf565b95602094909401359450505050565b600060208284031215611c5657600080fd5b813567ffffffffffffffff811115611c6d57600080fd5b610d1984828501611bdf565b60008060408385031215611c8c57600080fd5b611c9583611ab6565b915060208301358015158114611caa57600080fd5b809150509250929050565b60008060008060808587031215611ccb57600080fd5b611cd485611ab6565b9350611ce260208601611ab6565b925060408501359150606085013567ffffffffffffffff811115611d0557600080fd5b8501601f81018713611d1657600080fd5b611d2587823560208401611b69565b91505092959194509250565b6020808252825182820181905260009190848201906040850190845b81811015611d725783516001600160a01b031683529284019291840191600101611d4d565b50909695505050505050565b60008060408385031215611d9157600080fd5b611d9a83611ab6565b9150611da860208401611ab6565b90509250929050565b600181811c90821680611dc557607f821691505b60208210811415611de657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b60008351611e14818460208801611a32565b835190830190611e28818360208801611a32565b01949350505050565b634e487b7160e01b600052601160045260246000fd5b60008219821115611e5a57611e5a611e31565b500190565b600082821015611e7157611e71611e31565b500390565b60006001600160a01b03808716835280861660208401525083604083015260806060830152611ea86080830184611a5e565b9695505050505050565b600060208284031215611ec457600080fd5b815161147d816119e7565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611f0157611f01611e31565b5060010190565b634e487b7160e01b600052601260045260246000fd5b600082611f2d57611f2d611f08565b500490565b600082611f4157611f41611f08565b50069056fea2646970667358221220ee3dac01a91a3f6cc360f870be8ed8694c08583a44d4e846954ef4e42f53643364736f6c63430008090033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101ae5760003560e01c806395d89b41116100ee578063ca3d77b111610097578063de89a30811610071578063de89a308146103dd578063e985e9c514610406578063f2fde38b14610442578063fffec9681461045557600080fd5b8063ca3d77b1146103a2578063d346cc86146103b5578063d8d2d423146103ca57600080fd5b8063b2e6ceeb116100c8578063b2e6ceeb14610369578063b88d4fde1461037c578063c87b56dd1461038f57600080fd5b806395d89b411461033b578063a22cb46514610343578063a9059cbb1461035657600080fd5b8063252a9d5c1161015b5780636352211e116101355780636352211e146102c257806370a08231146102eb578063715018a6146103225780638da5cb5b1461032a57600080fd5b8063252a9d5c1461026e57806342842e0e1461028157806358d9bd2b1461029457600080fd5b8063095ea7b31161018c578063095ea7b31461021b5780631383cac61461023057806323b872dd1461025b57600080fd5b806301ffc9a7146101b357806306fdde03146101db578063081812fc146101f0575b600080fd5b6101c66101c1366004611a15565b610468565b60405190151581526020015b60405180910390f35b6101e361054d565b6040516101d29190611a8a565b6102036101fe366004611a9d565b6105df565b6040516001600160a01b0390911681526020016101d2565b61022e610229366004611ad2565b61068a565b005b6101c661023e366004611afc565b6001600160a01b0316600090815260016020526040902054151590565b61022e610269366004611b17565b610759565b61022e61027c366004611bff565b6107e5565b61022e61028f366004611b17565b61088d565b6101c66102a2366004611c44565b8051602081830181018051600d8252928201919093012091525460ff1681565b6102036102d0366004611a9d565b6000908152600b60205260409020546001600160a01b031690565b6103146102f9366004611afc565b6001600160a01b03166000908152600c602052604090205490565b6040519081526020016101d2565b61022e6108a8565b6000546001600160a01b0316610203565b6101e361090e565b61022e610351366004611c79565b61091d565b61022e610364366004611ad2565b610a00565b61022e610377366004611a9d565b610a73565b61022e61038a366004611cb5565b610b00565b6101e361039d366004611a9d565b610b8e565b61022e6103b0366004611afc565b610d21565b6103bd610e11565b6040516101d29190611d31565b61022e6103d8366004611bff565b610e72565b6102036103eb366004611a9d565b600b602052600090815260409020546001600160a01b031681565b6101c6610414366004611d7e565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b61022e610450366004611afc565b610ee4565b61022e610463366004611afc565b610fc6565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806104fb57507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061054757507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606003805461055c90611db1565b80601f016020809104026020016040519081016040528092919081815260200182805461058890611db1565b80156105d55780601f106105aa576101008083540402835291602001916105d5565b820191906000526020600020905b8154815290600101906020018083116105b857829003601f168201915b5050505050905090565b6000818152600560205260408120546001600160a01b031661066e5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b506000908152600760205260409020546001600160a01b031690565b6000818152600b602052604090205481906001600160a01b031633146106f25760405162461bcd60e51b815260206004820152601160248201527f4e6f7420756e69636f726e206f776e65720000000000000000000000000000006044820152606401610665565b6000828152600e6020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0387169081179091559051849233917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259190a4505050565b61076333826110d8565b6107d55760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610665565b6107e08383836111dc565b505050565b6000818152600b602052604090205481906001600160a01b0316331461084d5760405162461bcd60e51b815260206004820152601160248201527f4e6f7420756e69636f726e206f776e65720000000000000000000000000000006044820152606401610665565b6000600a838154811061086257610862611dec565b6000918252602091829020865160039092020192506108869183919087019061194e565b5050505050565b6107e083838360405180602001604052806000815250610b00565b6000546001600160a01b031633146109025760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610665565b61090c60006112a8565b565b60606004805461055c90611db1565b6001600160a01b0382163314156109765760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610665565b3360008181526008602090815260408083206001600160a01b0387168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6000818152600b602052604090205481906001600160a01b03163314610a685760405162461bcd60e51b815260206004820152601160248201527f4e6f7420756e69636f726e206f776e65720000000000000000000000000000006044820152606401610665565b6107e03384846111dc565b6000818152600e60205260409020546001600160a01b03163314610ad95760405162461bcd60e51b815260206004820152600c60248201527f4e6f7420617070726f76656400000000000000000000000000000000000000006044820152606401610665565b6000818152600b60205260409020546001600160a01b0316610afc8133846111dc565b5050565b610b0a33836110d8565b610b7c5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610665565b610b8884848484611305565b50505050565b6000818152600560205260409020546060906001600160a01b0316610c1b5760405162461bcd60e51b815260206004820152603160248201527f45524337323155524953746f726167653a2055524920717565727920666f722060448201527f6e6f6e6578697374656e7420746f6b656e0000000000000000000000000000006064820152608401610665565b60008281526009602052604081208054610c3490611db1565b80601f0160208091040260200160405190810160405280929190818152602001828054610c6090611db1565b8015610cad5780601f10610c8257610100808354040283529160200191610cad565b820191906000526020600020905b815481529060010190602001808311610c9057829003601f168201915b505050505090506000610ccb60408051602081019091526000815290565b9050805160001415610cde575092915050565b815115610d10578082604051602001610cf8929190611e02565b60405160208183030381529060405292505050919050565b610d198461138e565b949350505050565b6000546001600160a01b03163314610d7b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610665565b6001600160a01b038116600090815260016020526040812080549190556002805482908110610dac57610dac611dec565b600091825260209182902001805473ffffffffffffffffffffffffffffffffffffffff191690556040516001600160a01b03841681527f2d823f6048a80d720162c84ab7cbc8ebbea8d898ab659cb73f2b40718a63ee11910160405180910390a15050565b606060028054806020026020016040519081016040528092919081815260200182805480156105d557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610e4b575050505050905090565b6000818152600b602052604090205481906001600160a01b03163314610eda5760405162461bcd60e51b815260206004820152601160248201527f4e6f7420756e69636f726e206f776e65720000000000000000000000000000006044820152606401610665565b6107e08284611484565b6000546001600160a01b03163314610f3e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610665565b6001600160a01b038116610fba5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610665565b610fc3816112a8565b50565b6000546001600160a01b031633146110205760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610665565b6001600160a01b0381163014156110795760405162461bcd60e51b815260206004820152601060248201527f636f6e74726163742061646472657373000000000000000000000000000000006044820152606401610665565b6001600160a01b0381166110cf5760405162461bcd60e51b815260206004820152600c60248201527f7a65726f206164647265737300000000000000000000000000000000000000006044820152606401610665565b610fc38161152d565b6000818152600560205260408120546001600160a01b03166111625760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610665565b600061116d836115cc565b9050806001600160a01b0316846001600160a01b031614806111a85750836001600160a01b031661119d846105df565b6001600160a01b0316145b80610d1957506001600160a01b0380821660009081526008602090815260408083209388168352929052205460ff16610d19565b6001600160a01b0382166000908152600c6020526040902054611200906001611657565b6001600160a01b0383166000908152600c602052604080822092909255338152205461122d906001611663565b336000908152600c6020908152604080832093909355838252600b9052818120805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038681169182179092559251849392918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6113108484846111dc565b61131c8484848461166f565b610b885760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610665565b6000818152600560205260409020546060906001600160a01b031661141b5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006064820152608401610665565b600061143260408051602081019091526000815290565b90506000815111611452576040518060200160405280600081525061147d565b8061145c8461181c565b60405160200161146d929190611e02565b6040516020818303038152906040525b9392505050565b6000828152600560205260409020546001600160a01b031661150e5760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201527f6578697374656e7420746f6b656e0000000000000000000000000000000000006064820152608401610665565b600082815260096020908152604090912082516107e09284019061194e565b600280546001600160a01b03831660008181526001602081815260408084208690559185018655949091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace909201805473ffffffffffffffffffffffffffffffffffffffff19168217905590519081527f687fdbab9bf405d8e49b6aae8573c18a70f271210d900511c58363b78faef7b2910160405180910390a150565b6000818152600560205260408120546001600160a01b0316806105475760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610665565b600061147d8284611e47565b600061147d8284611e5f565b60006001600160a01b0384163b15611811576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a02906116cc903390899088908890600401611e76565b602060405180830381600087803b1580156116e657600080fd5b505af1925050508015611716575060408051601f3d908101601f1916820190925261171391810190611eb2565b60015b6117c6573d808015611744576040519150601f19603f3d011682016040523d82523d6000602084013e611749565b606091505b5080516117be5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610665565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050610d19565b506001949350505050565b60608161185c57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611886578061187081611ecf565b915061187f9050600a83611f1e565b9150611860565b60008167ffffffffffffffff8111156118a1576118a1611b53565b6040519080825280601f01601f1916602001820160405280156118cb576020820181803683370190505b5090505b8415610d19576118e0600183611e5f565b91506118ed600a86611f32565b6118f8906030611e47565b60f81b81838151811061190d5761190d611dec565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611947600a86611f1e565b94506118cf565b82805461195a90611db1565b90600052602060002090601f01602090048101928261197c57600085556119c2565b82601f1061199557805160ff19168380011785556119c2565b828001600101855582156119c2579182015b828111156119c25782518255916020019190600101906119a7565b506119ce9291506119d2565b5090565b5b808211156119ce57600081556001016119d3565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610fc357600080fd5b600060208284031215611a2757600080fd5b813561147d816119e7565b60005b83811015611a4d578181015183820152602001611a35565b83811115610b885750506000910152565b60008151808452611a76816020860160208601611a32565b601f01601f19169290920160200192915050565b60208152600061147d6020830184611a5e565b600060208284031215611aaf57600080fd5b5035919050565b80356001600160a01b0381168114611acd57600080fd5b919050565b60008060408385031215611ae557600080fd5b611aee83611ab6565b946020939093013593505050565b600060208284031215611b0e57600080fd5b61147d82611ab6565b600080600060608486031215611b2c57600080fd5b611b3584611ab6565b9250611b4360208501611ab6565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611b8457611b84611b53565b604051601f8501601f19908116603f01168101908282118183101715611bac57611bac611b53565b81604052809350858152868686011115611bc557600080fd5b858560208301376000602087830101525050509392505050565b600082601f830112611bf057600080fd5b61147d83833560208501611b69565b60008060408385031215611c1257600080fd5b823567ffffffffffffffff811115611c2957600080fd5b611c3585828601611bdf565b95602094909401359450505050565b600060208284031215611c5657600080fd5b813567ffffffffffffffff811115611c6d57600080fd5b610d1984828501611bdf565b60008060408385031215611c8c57600080fd5b611c9583611ab6565b915060208301358015158114611caa57600080fd5b809150509250929050565b60008060008060808587031215611ccb57600080fd5b611cd485611ab6565b9350611ce260208601611ab6565b925060408501359150606085013567ffffffffffffffff811115611d0557600080fd5b8501601f81018713611d1657600080fd5b611d2587823560208401611b69565b91505092959194509250565b6020808252825182820181905260009190848201906040850190845b81811015611d725783516001600160a01b031683529284019291840191600101611d4d565b50909695505050505050565b60008060408385031215611d9157600080fd5b611d9a83611ab6565b9150611da860208401611ab6565b90509250929050565b600181811c90821680611dc557607f821691505b60208210811415611de657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b60008351611e14818460208801611a32565b835190830190611e28818360208801611a32565b01949350505050565b634e487b7160e01b600052601160045260246000fd5b60008219821115611e5a57611e5a611e31565b500190565b600082821015611e7157611e71611e31565b500390565b60006001600160a01b03808716835280861660208401525083604083015260806060830152611ea86080830184611a5e565b9695505050505050565b600060208284031215611ec457600080fd5b815161147d816119e7565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611f0157611f01611e31565b5060010190565b634e487b7160e01b600052601260045260246000fd5b600082611f2d57611f2d611f08565b500490565b600082611f4157611f41611f08565b50069056fea2646970667358221220ee3dac01a91a3f6cc360f870be8ed8694c08583a44d4e846954ef4e42f53643364736f6c63430008090033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
