{
  "_format": "hh-sol-artifact-1",
  "contractName": "ERC721",
  "sourceName": "contracts/abstract/ERC721.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "name_",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol_",
          "type": "string"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "approved",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "ApprovalForAll",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "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": [],
      "name": "baseURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "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": "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": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "ownerOf",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "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"
    }
  ],
  "bytecode": "0x60806040523480156200001157600080fd5b506040516200221a3803806200221a833981016040819052620000349162000252565b620000466301ffc9a760e01b620000b0565b81516200005b9060069060208501906200010b565b508051620000719060079060208401906200010b565b50620000846380ac58cd60e01b620000b0565b62000096635b5e139f60e01b620000b0565b620000a863780e9d6360e01b620000b0565b5050620002f0565b6001600160e01b03198082161415620000e65760405162461bcd60e51b8152600401620000dd90620002b9565b60405180910390fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826200014357600085556200018e565b82601f106200015e57805160ff19168380011785556200018e565b828001600101855582156200018e579182015b828111156200018e57825182559160200191906001019062000171565b506200019c929150620001a0565b5090565b5b808211156200019c5760008155600101620001a1565b600082601f830112620001c8578081fd5b81516001600160401b0380821115620001dd57fe5b6040516020601f8401601f1916820181018381118382101715620001fd57fe5b604052838252858401810187101562000214578485fd5b8492505b8383101562000237578583018101518284018201529182019162000218565b838311156200024857848185840101525b5095945050505050565b6000806040838503121562000265578182fd5b82516001600160401b03808211156200027c578384fd5b6200028a86838701620001b7565b93506020850151915080821115620002a0578283fd5b50620002af85828601620001b7565b9150509250929050565b6020808252601c908201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604082015260600190565b611f1a80620003006000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80634f6ccce7116100b257806395d89b4111610081578063b88d4fde11610066578063b88d4fde1461023d578063c87b56dd14610250578063e985e9c5146102635761011b565b806395d89b4114610222578063a22cb4651461022a5761011b565b80634f6ccce7146101e15780636352211e146101f45780636c0360eb1461020757806370a082311461020f5761011b565b806318160ddd116100ee57806318160ddd1461019357806323b872dd146101a85780632f745c59146101bb57806342842e0e146101ce5761011b565b806301ffc9a71461012057806306fdde0314610149578063081812fc1461015e578063095ea7b31461017e575b600080fd5b61013361012e3660046118de565b610276565b6040516101409190611a11565b60405180910390f35b6101516102b1565b6040516101409190611a1c565b61017161016c366004611916565b610365565b60405161014091906119a7565b61019161018c3660046118b5565b6103d8565b005b61019b6104d8565b6040516101409190611e08565b6101916101b6366004611762565b6104e9565b61019b6101c93660046118b5565b61053b565b6101916101dc366004611762565b610573565b61019b6101ef366004611916565b61058e565b610171610202366004611916565b6105a4565b6101516105cc565b61019b61021d366004611716565b61064b565b6101516106c8565b61019161023836600461187b565b610747565b61019161024b36600461179d565b610881565b61015161025e366004611916565b6108da565b610133610271366004611730565b610a56565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081526020819052604090205460ff165b919050565b60068054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561035b5780601f106103305761010080835404028352916020019161035b565b820191906000526020600020905b81548152906001019060200180831161033e57829003601f168201915b5050505050905090565b600061037082610a91565b6103af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a690611c37565b60405180910390fd5b5060009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60006103e3826105a4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561044b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a690611d4e565b8073ffffffffffffffffffffffffffffffffffffffff1661046a610a9e565b73ffffffffffffffffffffffffffffffffffffffff161480610493575061049381610271610a9e565b6104c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a690611b7d565b6104d38383610aa2565b505050565b60006104e46002610b42565b905090565b6104fa6104f4610a9e565b82610b4d565b610530576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a690611dab565b6104d3838383610c20565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040812061056a9083610dbd565b90505b92915050565b6104d383838360405180602001604052806000815250610881565b60008061059c600284610dc9565b509392505050565b600061056d82604051806060016040528060298152602001611ec36029913960029190610de5565b60098054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561035b5780601f106103305761010080835404028352916020019161035b565b600073ffffffffffffffffffffffffffffffffffffffff821661069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a690611bda565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902061056d90610b42565b60078054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561035b5780601f106103305761010080835404028352916020019161035b565b61074f610a9e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156107b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a690611ae9565b80600560006107c1610a9e565b73ffffffffffffffffffffffffffffffffffffffff90811682526020808301939093526040918201600090812091871680825291909352912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001692151592909217909155610830610a9e565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516108759190611a11565b60405180910390a35050565b61089261088c610a9e565b83610b4d565b6108c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a690611dab565b6108d484848484610dfc565b50505050565b60606108e582610a91565b61091b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a690611cf1565b60008281526008602090815260408083208054825160026001831615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190921691909104601f8101859004850282018501909352828152929091908301828280156109cc5780601f106109a1576101008083540402835291602001916109cc565b820191906000526020600020905b8154815290600101906020018083116109af57829003601f168201915b5050505050905060006109dd6105cc565b90508051600014156109f1575090506102ac565b815115610a23578082604051602001610a0b929190611978565b604051602081830303815290604052925050506102ac565b80610a2d85610e49565b604051602001610a3e929190611978565b60405160208183030381529060405292505050919050565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b600061056d600283610f76565b3390565b600081815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091558190610afc826105a4565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061056d82610f82565b6000610b5882610a91565b610b8e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a690611b20565b6000610b99836105a4565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610c0857508373ffffffffffffffffffffffffffffffffffffffff16610bf084610365565b73ffffffffffffffffffffffffffffffffffffffff16145b80610c185750610c188185610a56565b949350505050565b8273ffffffffffffffffffffffffffffffffffffffff16610c40826105a4565b73ffffffffffffffffffffffffffffffffffffffff1614610c8d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a690611c94565b73ffffffffffffffffffffffffffffffffffffffff8216610cda576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a690611a8c565b610ce58383836104d3565b610cf0600082610aa2565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600160205260409020610d1f9082610f86565b5073ffffffffffffffffffffffffffffffffffffffff82166000908152600160205260409020610d4f9082610f92565b50610d5c60028284610f9e565b50808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061056a8383610fc1565b6000808080610dd8868661103f565b9097909650945050505050565b6000610df28484846110d4565b90505b9392505050565b610e07848484610c20565b610e13848484846111b8565b6108d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a690611a2f565b606081610e8a575060408051808201909152600181527f300000000000000000000000000000000000000000000000000000000000000060208201526102ac565b8160005b8115610ea257600101600a82049150610e8e565b60008167ffffffffffffffff81118015610ebb57600080fd5b506040519080825280601f01601f191660200182016040528015610ee6576020820181803683370190505b5085935090507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82015b8315610f6d57600a840660300160f81b82828060019003935081518110610f3357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a84049350610f10565b50949350505050565b600061056a8383611325565b5490565b600061056a838361133d565b600061056a8383611421565b6000610df2848473ffffffffffffffffffffffffffffffffffffffff851661146b565b8154600090821061101d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180611e6f6022913960400191505060405180910390fd5b82600001828154811061102c57fe5b9060005260206000200154905092915050565b81546000908190831061109d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180611eec6022913960400191505060405180910390fd5b60008460000184815481106110ae57fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b60008281526001840160205260408120548281611189576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561114e578181015183820152602001611136565b50505050905090810190601f16801561117b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5084600001600182038154811061119c57fe5b9060005260206000209060020201600101549150509392505050565b60006111d98473ffffffffffffffffffffffffffffffffffffffff16611502565b6111e557506001610c18565b60006112bd7f150b7a0200000000000000000000000000000000000000000000000000000000611213610a9e565b88878760405160240161122994939291906119c8565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051806060016040528060328152602001611e916032913973ffffffffffffffffffffffffffffffffffffffff88169190611508565b90506000818060200190518101906112d591906118fa565b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a02000000000000000000000000000000000000000000000000000000001492505050949350505050565b60009081526001919091016020526040902054151590565b600081815260018301602052604081205480156114175783547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808301919081019060009087908390811061138e57fe5b90600052602060002001549050808760000184815481106113ab57fe5b6000918252602080832090910192909255828152600189810190925260409020908401905586548790806113db57fe5b6001900381819060005260206000200160009055905586600101600087815260200190815260200160002060009055600194505050505061056d565b600091505061056d565b600061142d8383611325565b6114635750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561056d565b50600061056d565b6000828152600184016020526040812054806114d0575050604080518082018252838152602080820184815286546001818101895560008981528481209551600290930290950191825591519082015586548684528188019092529290912055610df5565b828560000160018303815481106114e357fe5b9060005260206000209060020201600101819055506000915050610df5565b3b151590565b6060610df284846000858561151c85611502565b61158757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b602083106115f057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016115b3565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611652576040519150601f19603f3d011682016040523d82523d6000602084013e611657565b606091505b5091509150611667828286611672565b979650505050505050565b60608315611681575081610df5565b8251156116915782518084602001fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181815284516024840152845185939192839260440191908501908083836000831561114e578181015183820152602001611136565b803573ffffffffffffffffffffffffffffffffffffffff811681146102ac57600080fd5b600060208284031215611727578081fd5b61056a826116f2565b60008060408385031215611742578081fd5b61174b836116f2565b9150611759602084016116f2565b90509250929050565b600080600060608486031215611776578081fd5b61177f846116f2565b925061178d602085016116f2565b9150604084013590509250925092565b600080600080608085870312156117b2578081fd5b6117bb856116f2565b935060206117ca8187016116f2565b935060408601359250606086013567ffffffffffffffff808211156117ed578384fd5b818801915088601f830112611800578384fd5b81358181111561180c57fe5b604051847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116820101818110848211171561184757fe5b60405281815283820185018b101561185d578586fd5b81858501868301379081019093019390935250939692955090935050565b6000806040838503121561188d578182fd5b611896836116f2565b9150602083013580151581146118aa578182fd5b809150509250929050565b600080604083850312156118c7578182fd5b6118d0836116f2565b946020939093013593505050565b6000602082840312156118ef578081fd5b8135610df581611e3d565b60006020828403121561190b578081fd5b8151610df581611e3d565b600060208284031215611927578081fd5b5035919050565b60008151808452611946816020860160208601611e11565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6000835161198a818460208801611e11565b83519083019061199e818360208801611e11565b01949350505050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152611a07608083018461192e565b9695505050505050565b901515815260200190565b60006020825261056a602083018461192e565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527f63656976657220696d706c656d656e7465720000000000000000000000000000606082015260800190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460408201527f7265737300000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201527f697374656e7420746f6b656e0000000000000000000000000000000000000000606082015260800190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560408201527f726f206164647265737300000000000000000000000000000000000000000000606082015260800190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201527f697374656e7420746f6b656e0000000000000000000000000000000000000000606082015260800190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201527f73206e6f74206f776e0000000000000000000000000000000000000000000000606082015260800190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000606082015260800190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560408201527f7200000000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60408201527f776e6572206e6f7220617070726f766564000000000000000000000000000000606082015260800190565b90815260200190565b60005b83811015611e2c578181015183820152602001611e14565b838111156108d45750506000910152565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114611e6b57600080fd5b5056fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e6473a164736f6c6343000706000a",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061011b5760003560e01c80634f6ccce7116100b257806395d89b4111610081578063b88d4fde11610066578063b88d4fde1461023d578063c87b56dd14610250578063e985e9c5146102635761011b565b806395d89b4114610222578063a22cb4651461022a5761011b565b80634f6ccce7146101e15780636352211e146101f45780636c0360eb1461020757806370a082311461020f5761011b565b806318160ddd116100ee57806318160ddd1461019357806323b872dd146101a85780632f745c59146101bb57806342842e0e146101ce5761011b565b806301ffc9a71461012057806306fdde0314610149578063081812fc1461015e578063095ea7b31461017e575b600080fd5b61013361012e3660046118de565b610276565b6040516101409190611a11565b60405180910390f35b6101516102b1565b6040516101409190611a1c565b61017161016c366004611916565b610365565b60405161014091906119a7565b61019161018c3660046118b5565b6103d8565b005b61019b6104d8565b6040516101409190611e08565b6101916101b6366004611762565b6104e9565b61019b6101c93660046118b5565b61053b565b6101916101dc366004611762565b610573565b61019b6101ef366004611916565b61058e565b610171610202366004611916565b6105a4565b6101516105cc565b61019b61021d366004611716565b61064b565b6101516106c8565b61019161023836600461187b565b610747565b61019161024b36600461179d565b610881565b61015161025e366004611916565b6108da565b610133610271366004611730565b610a56565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081526020819052604090205460ff165b919050565b60068054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561035b5780601f106103305761010080835404028352916020019161035b565b820191906000526020600020905b81548152906001019060200180831161033e57829003601f168201915b5050505050905090565b600061037082610a91565b6103af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a690611c37565b60405180910390fd5b5060009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60006103e3826105a4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561044b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a690611d4e565b8073ffffffffffffffffffffffffffffffffffffffff1661046a610a9e565b73ffffffffffffffffffffffffffffffffffffffff161480610493575061049381610271610a9e565b6104c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a690611b7d565b6104d38383610aa2565b505050565b60006104e46002610b42565b905090565b6104fa6104f4610a9e565b82610b4d565b610530576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a690611dab565b6104d3838383610c20565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040812061056a9083610dbd565b90505b92915050565b6104d383838360405180602001604052806000815250610881565b60008061059c600284610dc9565b509392505050565b600061056d82604051806060016040528060298152602001611ec36029913960029190610de5565b60098054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561035b5780601f106103305761010080835404028352916020019161035b565b600073ffffffffffffffffffffffffffffffffffffffff821661069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a690611bda565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902061056d90610b42565b60078054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561035b5780601f106103305761010080835404028352916020019161035b565b61074f610a9e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156107b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a690611ae9565b80600560006107c1610a9e565b73ffffffffffffffffffffffffffffffffffffffff90811682526020808301939093526040918201600090812091871680825291909352912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001692151592909217909155610830610a9e565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516108759190611a11565b60405180910390a35050565b61089261088c610a9e565b83610b4d565b6108c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a690611dab565b6108d484848484610dfc565b50505050565b60606108e582610a91565b61091b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a690611cf1565b60008281526008602090815260408083208054825160026001831615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190921691909104601f8101859004850282018501909352828152929091908301828280156109cc5780601f106109a1576101008083540402835291602001916109cc565b820191906000526020600020905b8154815290600101906020018083116109af57829003601f168201915b5050505050905060006109dd6105cc565b90508051600014156109f1575090506102ac565b815115610a23578082604051602001610a0b929190611978565b604051602081830303815290604052925050506102ac565b80610a2d85610e49565b604051602001610a3e929190611978565b60405160208183030381529060405292505050919050565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b600061056d600283610f76565b3390565b600081815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091558190610afc826105a4565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061056d82610f82565b6000610b5882610a91565b610b8e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a690611b20565b6000610b99836105a4565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610c0857508373ffffffffffffffffffffffffffffffffffffffff16610bf084610365565b73ffffffffffffffffffffffffffffffffffffffff16145b80610c185750610c188185610a56565b949350505050565b8273ffffffffffffffffffffffffffffffffffffffff16610c40826105a4565b73ffffffffffffffffffffffffffffffffffffffff1614610c8d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a690611c94565b73ffffffffffffffffffffffffffffffffffffffff8216610cda576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a690611a8c565b610ce58383836104d3565b610cf0600082610aa2565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600160205260409020610d1f9082610f86565b5073ffffffffffffffffffffffffffffffffffffffff82166000908152600160205260409020610d4f9082610f92565b50610d5c60028284610f9e565b50808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061056a8383610fc1565b6000808080610dd8868661103f565b9097909650945050505050565b6000610df28484846110d4565b90505b9392505050565b610e07848484610c20565b610e13848484846111b8565b6108d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a690611a2f565b606081610e8a575060408051808201909152600181527f300000000000000000000000000000000000000000000000000000000000000060208201526102ac565b8160005b8115610ea257600101600a82049150610e8e565b60008167ffffffffffffffff81118015610ebb57600080fd5b506040519080825280601f01601f191660200182016040528015610ee6576020820181803683370190505b5085935090507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82015b8315610f6d57600a840660300160f81b82828060019003935081518110610f3357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a84049350610f10565b50949350505050565b600061056a8383611325565b5490565b600061056a838361133d565b600061056a8383611421565b6000610df2848473ffffffffffffffffffffffffffffffffffffffff851661146b565b8154600090821061101d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180611e6f6022913960400191505060405180910390fd5b82600001828154811061102c57fe5b9060005260206000200154905092915050565b81546000908190831061109d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180611eec6022913960400191505060405180910390fd5b60008460000184815481106110ae57fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b60008281526001840160205260408120548281611189576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561114e578181015183820152602001611136565b50505050905090810190601f16801561117b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5084600001600182038154811061119c57fe5b9060005260206000209060020201600101549150509392505050565b60006111d98473ffffffffffffffffffffffffffffffffffffffff16611502565b6111e557506001610c18565b60006112bd7f150b7a0200000000000000000000000000000000000000000000000000000000611213610a9e565b88878760405160240161122994939291906119c8565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051806060016040528060328152602001611e916032913973ffffffffffffffffffffffffffffffffffffffff88169190611508565b90506000818060200190518101906112d591906118fa565b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a02000000000000000000000000000000000000000000000000000000001492505050949350505050565b60009081526001919091016020526040902054151590565b600081815260018301602052604081205480156114175783547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808301919081019060009087908390811061138e57fe5b90600052602060002001549050808760000184815481106113ab57fe5b6000918252602080832090910192909255828152600189810190925260409020908401905586548790806113db57fe5b6001900381819060005260206000200160009055905586600101600087815260200190815260200160002060009055600194505050505061056d565b600091505061056d565b600061142d8383611325565b6114635750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561056d565b50600061056d565b6000828152600184016020526040812054806114d0575050604080518082018252838152602080820184815286546001818101895560008981528481209551600290930290950191825591519082015586548684528188019092529290912055610df5565b828560000160018303815481106114e357fe5b9060005260206000209060020201600101819055506000915050610df5565b3b151590565b6060610df284846000858561151c85611502565b61158757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b602083106115f057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016115b3565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611652576040519150601f19603f3d011682016040523d82523d6000602084013e611657565b606091505b5091509150611667828286611672565b979650505050505050565b60608315611681575081610df5565b8251156116915782518084602001fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181815284516024840152845185939192839260440191908501908083836000831561114e578181015183820152602001611136565b803573ffffffffffffffffffffffffffffffffffffffff811681146102ac57600080fd5b600060208284031215611727578081fd5b61056a826116f2565b60008060408385031215611742578081fd5b61174b836116f2565b9150611759602084016116f2565b90509250929050565b600080600060608486031215611776578081fd5b61177f846116f2565b925061178d602085016116f2565b9150604084013590509250925092565b600080600080608085870312156117b2578081fd5b6117bb856116f2565b935060206117ca8187016116f2565b935060408601359250606086013567ffffffffffffffff808211156117ed578384fd5b818801915088601f830112611800578384fd5b81358181111561180c57fe5b604051847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116820101818110848211171561184757fe5b60405281815283820185018b101561185d578586fd5b81858501868301379081019093019390935250939692955090935050565b6000806040838503121561188d578182fd5b611896836116f2565b9150602083013580151581146118aa578182fd5b809150509250929050565b600080604083850312156118c7578182fd5b6118d0836116f2565b946020939093013593505050565b6000602082840312156118ef578081fd5b8135610df581611e3d565b60006020828403121561190b578081fd5b8151610df581611e3d565b600060208284031215611927578081fd5b5035919050565b60008151808452611946816020860160208601611e11565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6000835161198a818460208801611e11565b83519083019061199e818360208801611e11565b01949350505050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152611a07608083018461192e565b9695505050505050565b901515815260200190565b60006020825261056a602083018461192e565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527f63656976657220696d706c656d656e7465720000000000000000000000000000606082015260800190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460408201527f7265737300000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201527f697374656e7420746f6b656e0000000000000000000000000000000000000000606082015260800190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560408201527f726f206164647265737300000000000000000000000000000000000000000000606082015260800190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201527f697374656e7420746f6b656e0000000000000000000000000000000000000000606082015260800190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201527f73206e6f74206f776e0000000000000000000000000000000000000000000000606082015260800190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000606082015260800190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560408201527f7200000000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60408201527f776e6572206e6f7220617070726f766564000000000000000000000000000000606082015260800190565b90815260200190565b60005b83811015611e2c578181015183820152602001611e14565b838111156108d45750506000910152565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114611e6b57600080fd5b5056fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e6473a164736f6c6343000706000a",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
