{
  "_format": "hh-sol-artifact-1",
  "contractName": "ERC721ACWithMutableMinterRoyalties",
  "sourceName": "contracts/examples/erc721ac/ERC721ACWithMutableMinterRoyalties.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "uint96",
          "name": "defaultRoyaltyFeeNumerator_",
          "type": "uint96"
        },
        {
          "internalType": "string",
          "name": "name_",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol_",
          "type": "string"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "ApprovalCallerNotOwnerNorApproved",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ApprovalQueryForNonexistentToken",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "BalanceQueryForZeroAddress",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "CreatorTokenBase__InvalidTransferValidatorContract",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "CreatorTokenBase__SetTransferValidatorFirst",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MintERC2309QuantityExceedsLimit",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MintToZeroAddress",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MintZeroQuantity",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MutableMinterRoyalties__MinterCannotBeZeroAddress",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MutableMinterRoyalties__MinterHasAlreadyBeenAssignedToTokenId",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MutableMinterRoyalties__OnlyMinterCanChangeRoyaltyFee",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MutableMinterRoyalties__RoyaltyFeeWillExceedSalePrice",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OwnerQueryForNonexistentToken",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OwnershipNotInitializedForExtraData",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ShouldNotMintToBurnAddress",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TransferCallerNotOwnerNorApproved",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TransferFromIncorrectOwner",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TransferToNonERC721ReceiverImplementer",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TransferToZeroAddress",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "URIQueryForNonexistentToken",
      "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": true,
          "internalType": "uint256",
          "name": "fromTokenId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "toTokenId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "ConsecutiveTransfer",
      "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": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint96",
          "name": "feeNumerator",
          "type": "uint96"
        }
      ],
      "name": "RoyaltySet",
      "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": "oldValidator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newValidator",
          "type": "address"
        }
      ],
      "name": "TransferValidatorUpdated",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DEFAULT_OPERATOR_WHITELIST_ID",
      "outputs": [
        {
          "internalType": "uint120",
          "name": "",
          "type": "uint120"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "DEFAULT_TRANSFER_SECURITY_LEVEL",
      "outputs": [
        {
          "internalType": "enum TransferSecurityLevels",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "DEFAULT_TRANSFER_VALIDATOR",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "FEE_DENOMINATOR",
      "outputs": [
        {
          "internalType": "uint96",
          "name": "",
          "type": "uint96"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "burn",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "defaultRoyaltyFeeNumerator",
      "outputs": [
        {
          "internalType": "uint96",
          "name": "",
          "type": "uint96"
        }
      ],
      "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": "getPermittedContractReceivers",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getSecurityPolicy",
      "outputs": [
        {
          "components": [
            {
              "internalType": "enum TransferSecurityLevels",
              "name": "transferSecurityLevel",
              "type": "uint8"
            },
            {
              "internalType": "uint120",
              "name": "operatorWhitelistId",
              "type": "uint120"
            },
            {
              "internalType": "uint120",
              "name": "permittedContractReceiversId",
              "type": "uint120"
            }
          ],
          "internalType": "struct CollectionSecurityPolicy",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getTransferValidator",
      "outputs": [
        {
          "internalType": "contract ICreatorTokenTransferValidator",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getWhitelistedOperators",
      "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": "receiver",
          "type": "address"
        }
      ],
      "name": "isContractReceiverPermitted",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "isOperatorWhitelisted",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "isTransferAllowed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "quantity",
          "type": "uint256"
        }
      ],
      "name": "mint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "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": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "salePrice",
          "type": "uint256"
        }
      ],
      "name": "royaltyInfo",
      "outputs": [
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "royaltyAmount",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "quantity",
          "type": "uint256"
        }
      ],
      "name": "safeMint",
      "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": "payable",
      "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": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "setApprovalForAll",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint96",
          "name": "royaltyFeeNumerator",
          "type": "uint96"
        }
      ],
      "name": "setRoyaltyFee",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "enum TransferSecurityLevels",
          "name": "level",
          "type": "uint8"
        },
        {
          "internalType": "uint120",
          "name": "operatorWhitelistId",
          "type": "uint120"
        },
        {
          "internalType": "uint120",
          "name": "permittedContractReceiversAllowlistId",
          "type": "uint120"
        }
      ],
      "name": "setToCustomSecurityPolicy",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "validator",
          "type": "address"
        },
        {
          "internalType": "enum TransferSecurityLevels",
          "name": "level",
          "type": "uint8"
        },
        {
          "internalType": "uint120",
          "name": "operatorWhitelistId",
          "type": "uint120"
        },
        {
          "internalType": "uint120",
          "name": "permittedContractReceiversAllowlistId",
          "type": "uint120"
        }
      ],
      "name": "setToCustomValidatorAndSecurityPolicy",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "setToDefaultSecurityPolicy",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "transferValidator_",
          "type": "address"
        }
      ],
      "name": "setTransferValidator",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "tokenURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "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": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60a06040523480156200001157600080fd5b5060405162002fac38038062002fac8339810160408190526200003491620002b8565b828282818181600290805190602001906200005192919062000145565b5080516200006790600390602084019062000145565b50506001600055506200007a336200009e565b5062000088905081620000f0565b6001600160601b0316608052506200037f915050565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6127106001600160601b03821611156200011d576040516316fc4d9760e01b815260040160405180910390fd5b600980546001600160601b03909216600160a01b026001600160a01b03909216919091179055565b828054620001539062000342565b90600052602060002090601f016020900481019282620001775760008555620001c2565b82601f106200019257805160ff1916838001178555620001c2565b82800160010185558215620001c2579182015b82811115620001c2578251825591602001919060010190620001a5565b50620001d0929150620001d4565b5090565b5b80821115620001d05760008155600101620001d5565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200021357600080fd5b81516001600160401b0380821115620002305762000230620001eb565b604051601f8301601f19908116603f011681019082821181831017156200025b576200025b620001eb565b816040528381526020925086838588010111156200027857600080fd5b600091505b838210156200029c57858201830151818301840152908201906200027d565b83821115620002ae5760008385830101525b9695505050505050565b600080600060608486031215620002ce57600080fd5b83516001600160601b0381168114620002e657600080fd5b60208501519093506001600160401b03808211156200030457600080fd5b620003128783880162000201565b935060408601519150808211156200032957600080fd5b50620003388682870162000201565b9150509250925092565b600181811c908216806200035757607f821691505b602082108114156200037957634e487b7160e01b600052602260045260246000fd5b50919050565b608051612bfc620003b0600039600081816104f101528181610c3c01528181611f8601526121910152612bfc6000f3fe6080604052600436106102855760003560e01c80636134716211610153578063a22cb465116100cb578063d007af5c1161007f578063e985e9c511610064578063e985e9c514610720578063f2fde38b14610769578063fd762d921461078957600080fd5b8063d007af5c146106f5578063d73792a91461070a57600080fd5b8063b88d4fde116100b0578063b88d4fde146106a0578063be537f43146106b3578063c87b56dd146106d557600080fd5b8063a22cb46514610660578063a9fc664e1461068057600080fd5b8063715018a61161012257806395d89b411161010757806395d89b411461060b5780639d645a4414610620578063a14481941461064057600080fd5b8063715018a6146105d85780638da5cb5b146105ed57600080fd5b806361347162146105635780636352211e146105835780636c3b8699146105a357806370a08231146105b857600080fd5b806323b872dd1161020157806342966c68116101b55780634ef622531161019a5780634ef62253146104c2578063521f5e6a146104e25780635d4c1d461461052e57600080fd5b806342966c6814610480578063495c8bf9146104a057600080fd5b80632e8da829116101e65780632e8da8291461042d57806340c10f191461044d57806342842e0e1461046d57600080fd5b806323b872dd146103db5780632a55205a146103ee57600080fd5b8063095ea7b31161025857806318160ddd1161023d57806318160ddd146103725780631b25b077146103995780631c33b328146103b957600080fd5b8063095ea7b31461033f578063098144d41461035457600080fd5b8063014635461461028a57806301ffc9a7146102cd57806306fdde03146102fd578063081812fc1461031f575b600080fd5b34801561029657600080fd5b506102b071721c310194ccfc01e523fc93c9cccfa2a0ac81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102d957600080fd5b506102ed6102e836600461244c565b6107a9565b60405190151581526020016102c4565b34801561030957600080fd5b506103126107ba565b6040516102c491906124c1565b34801561032b57600080fd5b506102b061033a3660046124d4565b61084c565b61035261034d366004612502565b6108a9565b005b34801561036057600080fd5b506009546001600160a01b03166102b0565b34801561037e57600080fd5b5060015460005403600019015b6040519081526020016102c4565b3480156103a557600080fd5b506102ed6103b436600461252e565b61096f565b3480156103c557600080fd5b506103ce600181565b6040516102c4919061259b565b6103526103e93660046125a9565b610a08565b3480156103fa57600080fd5b5061040e6104093660046125ea565b610bf0565b604080516001600160a01b0390931683526020830191909152016102c4565b34801561043957600080fd5b506102ed61044836600461260c565b610ca8565b34801561045957600080fd5b50610352610468366004612502565b610dda565b61035261047b3660046125a9565b610de8565b34801561048c57600080fd5b5061035261049b3660046124d4565b610e08565b3480156104ac57600080fd5b506104b5610e14565b6040516102c49190612629565b3480156104ce57600080fd5b506103526104dd366004612676565b610f4b565b3480156104ee57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040516bffffffffffffffffffffffff90911681526020016102c4565b34801561053a57600080fd5b50610543600181565b6040516effffffffffffffffffffffffffffff90911681526020016102c4565b34801561056f57600080fd5b5061035261057e3660046126e1565b61104b565b34801561058f57600080fd5b506102b061059e3660046124d4565b6111f0565b3480156105af57600080fd5b506103526111fb565b3480156105c457600080fd5b5061038b6105d336600461260c565b6112f3565b3480156105e457600080fd5b5061035261135b565b3480156105f957600080fd5b506008546001600160a01b03166102b0565b34801561061757600080fd5b5061031261136f565b34801561062c57600080fd5b506102ed61063b36600461260c565b61137e565b34801561064c57600080fd5b5061035261065b366004612502565b61145d565b34801561066c57600080fd5b5061035261067b36600461272f565b611467565b34801561068c57600080fd5b5061035261069b36600461260c565b6114e0565b6103526106ae3660046127a4565b61163a565b3480156106bf57600080fd5b506106c861167e565b6040516102c49190612868565b3480156106e157600080fd5b506103126106f03660046124d4565b611748565b34801561070157600080fd5b506104b56117f2565b34801561071657600080fd5b5061051161271081565b34801561072c57600080fd5b506102ed61073b3660046128ac565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b34801561077557600080fd5b5061035261078436600461260c565b6118c2565b34801561079557600080fd5b506103526107a43660046128da565b611954565b60006107b482611a78565b92915050565b6060600280546107c990612936565b80601f01602080910402602001604051908101604052809291908181526020018280546107f590612936565b80156108425780601f1061081757610100808354040283529160200191610842565b820191906000526020600020905b81548152906001019060200180831161082557829003601f168201915b5050505050905090565b600061085782611ac6565b61088d576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b60006108b4826111f0565b9050336001600160a01b03821614610906576108d0813361073b565b610906576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082815260066020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6009546000906001600160a01b0316156109fd5760095460405163050bf71960e31b81526001600160a01b038681166004830152858116602483015284811660448301529091169063285fb8c89060640160006040518083038186803b1580156109d857600080fd5b505afa9250505080156109e9575060015b6109f557506000610a01565b506001610a01565b5060015b9392505050565b6000610a1382611afb565b9050836001600160a01b0316816001600160a01b031614610a60576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526006602052604090208054610a8c8187335b6001600160a01b039081169116811491141790565b610ab757610a9a863361073b565b610ab757604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b038516610af7576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b048686866001611b7d565b8015610b0f57600082555b6001600160a01b038681166000908152600560205260408082208054600019019055918716808252919020805460010190554260a01b17600160e11b17600085815260046020526040902055600160e11b8316610b9a5760018401600081815260046020526040902054610b98576000548114610b985760008181526004602052604090208490555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610be88686866001611bab565b505050505050565b6000828152600a602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046bffffffffffffffffffffffff16928201929092528291610c6f577f00000000000000000000000000000000000000000000000000000000000000006bffffffffffffffffffffffff1660208201525b8051602082015161271090610c92906bffffffffffffffffffffffff1687612987565b610c9c91906129a6565b92509250509250929050565b6009546000906001600160a01b031615610dd257600954604051635caaa2a960e11b81523060048201526001600160a01b039091169063d72dde5e90829063b95545529060240160606040518083038186803b158015610d0757600080fd5b505afa158015610d1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3f91906129c8565b602001516040516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526001600160a01b03851660248201526044015b60206040518083038186803b158015610d9a57600080fd5b505afa158015610dae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b49190612a3a565b506000919050565b610de48282611bd2565b5050565b610e038383836040518060200160405280600081525061163a565b505050565b610e1181611c06565b50565b6009546060906001600160a01b031615610f3857600954604051635caaa2a960e11b81523060048201526001600160a01b0390911690633fe5df9990829063b95545529060240160606040518083038186803b158015610e7357600080fd5b505afa158015610e87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eab91906129c8565b602001516040516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526024015b60006040518083038186803b158015610ef757600080fd5b505afa158015610f0b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f339190810190612a57565b905090565b5060408051600081526020810190915290565b6127106bffffffffffffffffffffffff82161115610f95576040517f16fc4d9700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152600a6020526040902080546001600160a01b03163314610fe6576040517f130e6cf200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80546001600160a01b0316600160a01b6bffffffffffffffffffffffff8416908102919091178255604051908152339084907f93c3d3c02f3e5b8ff28a98e2ff5dc3d9395f4f02af3a830c3789c8af25420253906020015b60405180910390a3505050565b611053611c18565b60006110676009546001600160a01b031690565b90506001600160a01b0381166110a9576040517f39ffc7ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604051630368065360e61b81526001600160a01b0382169063da0194c0906110d79030908890600401612b09565b600060405180830381600087803b1580156110f157600080fd5b505af1158015611105573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526effffffffffffffffffffffffffffff861660248201526001600160a01b0384169250632304aa029150604401600060405180830381600087803b15801561116157600080fd5b505af1158015611175573d6000803e3d6000fd5b505060405163235d10c560e21b81523060048201526effffffffffffffffffffffffffffff851660248201526001600160a01b0384169250638d74431491506044015b600060405180830381600087803b1580156111d257600080fd5b505af11580156111e6573d6000803e3d6000fd5b5050505050505050565b60006107b482611afb565b611203611c18565b61121e71721c310194ccfc01e523fc93c9cccfa2a0ac6114e0565b604051630368065360e61b815271721c310194ccfc01e523fc93c9cccfa2a0ac9063da0194c090611256903090600190600401612b09565b600060405180830381600087803b15801561127057600080fd5b505af1158015611284573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526001602482015271721c310194ccfc01e523fc93c9cccfa2a0ac9250632304aa029150604401600060405180830381600087803b1580156112d957600080fd5b505af11580156112ed573d6000803e3d6000fd5b50505050565b60006001600160a01b038216611335576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b611363611c1c565b61136d6000611c76565b565b6060600380546107c990612936565b6009546000906001600160a01b031615610dd257600954604051635caaa2a960e11b81523060048201526001600160a01b0390911690639445f53090829063b95545529060240160606040518083038186803b1580156113dd57600080fd5b505afa1580156113f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141591906129c8565b60409081015190516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526001600160a01b0385166024820152604401610d82565b610de48282611cd5565b3360008181526007602090815260408083206001600160a01b0387168085529252909120805460ff1916841515179055906001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114d4911515815260200190565b60405180910390a35050565b6114e8611c18565b60006001600160a01b0382163b15611576576040516301ffc9a760e01b8152600060048201526001600160a01b038316906301ffc9a79060240160206040518083038186803b15801561153a57600080fd5b505afa92505050801561156a575060408051601f3d908101601f1916820190925261156791810190612a3a565b60015b61157357611576565b90505b6001600160a01b0382161580159061158c575080155b156115c3576040517f32483afb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600954604080516001600160a01b03928316815291841660208301527fcc5dc080ff977b3c3a211fa63ab74f90f658f5ba9d3236e92c8f59570f442aac910160405180910390a1506009805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b611645848484610a08565b6001600160a01b0383163b156112ed5761166184848484611cef565b6112ed576040516368d2bf6b60e11b815260040160405180910390fd5b60408051606081018252600080825260208201819052918101919091526009546001600160a01b03161561172757600954604051635caaa2a960e11b81523060048201526001600160a01b039091169063b95545529060240160606040518083038186803b1580156116ef57600080fd5b505afa158015611703573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3391906129c8565b50604080516060810182526000808252602082018190529181019190915290565b606061175382611ac6565b611789576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006117a060408051602081019091526000815290565b90508051600014156117c15760405180602001604052806000815250610a01565b806117cb84611de6565b6040516020016117dc929190612b26565b6040516020818303038152906040529392505050565b6009546060906001600160a01b031615610f3857600954604051635caaa2a960e11b81523060048201526001600160a01b03909116906317e94a6c90829063b95545529060240160606040518083038186803b15801561185157600080fd5b505afa158015611865573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188991906129c8565b60409081015190516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff9091166004820152602401610edf565b6118ca611c1c565b6001600160a01b03811661194b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610e1181611c76565b61195c611c18565b611965846114e0565b604051630368065360e61b81526001600160a01b0385169063da0194c0906119939030908790600401612b09565b600060405180830381600087803b1580156119ad57600080fd5b505af11580156119c1573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526effffffffffffffffffffffffffffff851660248201526001600160a01b0387169250632304aa029150604401600060405180830381600087803b158015611a1d57600080fd5b505af1158015611a31573d6000803e3d6000fd5b505060405163235d10c560e21b81523060048201526effffffffffffffffffffffffffffff841660248201526001600160a01b0387169250638d74431491506044016111b8565b60006001600160e01b031982167f2a55205a0000000000000000000000000000000000000000000000000000000014806107b457506301ffc9a760e01b6001600160e01b03198316146107b4565b600081600111158015611ada575060005482105b80156107b4575050600090815260046020526040902054600160e01b161590565b60008180600111611b4b57600054811015611b4b57600081815260046020526040902054600160e01b8116611b49575b80610a01575060001901600081815260046020526040902054611b2b565b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015611ba457611b9c8585611b978487612b55565b611e34565b600101611b80565b5050505050565b60005b81811015611ba457611bca8585611bc58487612b55565b611e90565b600101611bae565b60008054905b82811015611bfb57611bf384611bee8385612b55565b611ede565b600101611bd8565b50610e038383612011565b611c0f81612151565b610e118161215c565b61136d5b6008546001600160a01b0316331461136d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611942565b600880546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610de48282604051806020016040528060008152506121d3565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290611d24903390899088908890600401612b6d565b602060405180830381600087803b158015611d3e57600080fd5b505af1925050508015611d6e575060408051601f3d908101601f19168201909252611d6b91810190612ba9565b60015b611dc9573d808015611d9c576040519150601f19603f3d011682016040523d82523d6000602084013e611da1565b606091505b508051611dc1576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b606060a06040510180604052602081039150506000815280825b600183039250600a81066030018353600a900480611e1d57611e22565b611e00565b50819003601f19909101908152919050565b6001600160a01b038381161590831615818015611e4e5750805b15611e6c57604051635cbd944160e01b815260040160405180910390fd5b8115611e78575b611ba4565b8015611e8357611e73565b611ba43386868634612239565b6001600160a01b038381161590831615818015611eaa5750805b15611ec857604051635cbd944160e01b815260040160405180910390fd5b8115611ed357611e73565b8015611e7357611e73565b6001600160a01b038216611f1e576040517fddc3fc8700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000818152600a60205260409020546001600160a01b031615611f6d576040517f3b2a1e5500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805180820182526001600160a01b038481168083527f00000000000000000000000000000000000000000000000000000000000000006bffffffffffffffffffffffff818116602080870182815260008a8152600a835289902097519051909316600160a01b02929095169190911790945593519283529184917f93c3d3c02f3e5b8ff28a98e2ff5dc3d9395f4f02af3a830c3789c8af25420253910161103e565b6000548161204b576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120586000848385611b7d565b6001600160a01b03831660008181526005602090815260408083208054680100000000000000018802019055848352600490915281206001851460e11b4260a01b178317905582840190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b81811461210757808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a46001016120cf565b508161213f576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000908155610e039150848385611bab565b610e118160006122be565b6000818152600a60205260408120819055817f93c3d3c02f3e5b8ff28a98e2ff5dc3d9395f4f02af3a830c3789c8af254202537f00000000000000000000000000000000000000000000000000000000000000006040516bffffffffffffffffffffffff909116815260200160405180910390a350565b6121dd8383611bd2565b6001600160a01b0383163b15610e03576000548281035b6122076000868380600101945086611cef565b612224576040516368d2bf6b60e11b815260040160405180910390fd5b8181106121f4578160005414611ba457600080fd5b6009546001600160a01b031615611ba45760095460405163050bf71960e31b81526001600160a01b038781166004830152868116602483015285811660448301529091169063285fb8c89060640160006040518083038186803b15801561229f57600080fd5b505afa1580156122b3573d6000803e3d6000fd5b505050505050505050565b60006122c983611afb565b9050806000806122e786600090815260066020526040902080549091565b915091508415612327576122fc818433610a77565b6123275761230a833361073b565b61232757604051632ce44b5f60e11b815260040160405180910390fd5b612335836000886001611b7d565b801561234057600082555b6001600160a01b038316600081815260056020526040902080546fffffffffffffffffffffffffffffffff0190554260a01b177c030000000000000000000000000000000000000000000000000000000017600087815260046020526040902055600160e11b84166123e057600186016000818152600460205260409020546123de5760005481146123de5760008181526004602052604090208590555b505b60405186906000906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a4612426836000886001611bab565b5050600180548101905550505050565b6001600160e01b031981168114610e1157600080fd5b60006020828403121561245e57600080fd5b8135610a0181612436565b60005b8381101561248457818101518382015260200161246c565b838111156112ed5750506000910152565b600081518084526124ad816020860160208601612469565b601f01601f19169290920160200192915050565b602081526000610a016020830184612495565b6000602082840312156124e657600080fd5b5035919050565b6001600160a01b0381168114610e1157600080fd5b6000806040838503121561251557600080fd5b8235612520816124ed565b946020939093013593505050565b60008060006060848603121561254357600080fd5b833561254e816124ed565b9250602084013561255e816124ed565b9150604084013561256e816124ed565b809150509250925092565b6007811061259757634e487b7160e01b600052602160045260246000fd5b9052565b602081016107b48284612579565b6000806000606084860312156125be57600080fd5b83356125c9816124ed565b925060208401356125d9816124ed565b929592945050506040919091013590565b600080604083850312156125fd57600080fd5b50508035926020909101359150565b60006020828403121561261e57600080fd5b8135610a01816124ed565b6020808252825182820181905260009190848201906040850190845b8181101561266a5783516001600160a01b031683529284019291840191600101612645565b50909695505050505050565b6000806040838503121561268957600080fd5b8235915060208301356bffffffffffffffffffffffff811681146126ac57600080fd5b809150509250929050565b60078110610e1157600080fd5b6effffffffffffffffffffffffffffff81168114610e1157600080fd5b6000806000606084860312156126f657600080fd5b8335612701816126b7565b92506020840135612711816126c4565b9150604084013561256e816126c4565b8015158114610e1157600080fd5b6000806040838503121561274257600080fd5b823561274d816124ed565b915060208301356126ac81612721565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561279c5761279c61275d565b604052919050565b600080600080608085870312156127ba57600080fd5b84356127c5816124ed565b93506020858101356127d6816124ed565b935060408601359250606086013567ffffffffffffffff808211156127fa57600080fd5b818801915088601f83011261280e57600080fd5b8135818111156128205761282061275d565b612832601f8201601f19168501612773565b9150808252898482850101111561284857600080fd5b808484018584013760008482840101525080935050505092959194509250565b600060608201905061287b828451612579565b60208301516effffffffffffffffffffffffffffff8082166020850152806040860151166040850152505092915050565b600080604083850312156128bf57600080fd5b82356128ca816124ed565b915060208301356126ac816124ed565b600080600080608085870312156128f057600080fd5b84356128fb816124ed565b9350602085013561290b816126b7565b9250604085013561291b816126c4565b9150606085013561292b816126c4565b939692955090935050565b600181811c9082168061294a57607f821691505b6020821081141561296b57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156129a1576129a1612971565b500290565b6000826129c357634e487b7160e01b600052601260045260246000fd5b500490565b6000606082840312156129da57600080fd5b6040516060810181811067ffffffffffffffff821117156129fd576129fd61275d565b6040528251612a0b816126b7565b81526020830151612a1b816126c4565b60208201526040830151612a2e816126c4565b60408201529392505050565b600060208284031215612a4c57600080fd5b8151610a0181612721565b60006020808385031215612a6a57600080fd5b825167ffffffffffffffff80821115612a8257600080fd5b818501915085601f830112612a9657600080fd5b815181811115612aa857612aa861275d565b8060051b9150612ab9848301612773565b8181529183018401918481019088841115612ad357600080fd5b938501935b83851015612afd5784519250612aed836124ed565b8282529385019390850190612ad8565b98975050505050505050565b6001600160a01b038316815260408101610a016020830184612579565b60008351612b38818460208801612469565b835190830190612b4c818360208801612469565b01949350505050565b60008219821115612b6857612b68612971565b500190565b60006001600160a01b03808716835280861660208401525083604083015260806060830152612b9f6080830184612495565b9695505050505050565b600060208284031215612bbb57600080fd5b8151610a018161243656fea2646970667358221220512c4516a58e90680b65be015620480571aa8d0b22af8047625da56aaf22a4ca64736f6c63430008090033",
  "deployedBytecode": "0x6080604052600436106102855760003560e01c80636134716211610153578063a22cb465116100cb578063d007af5c1161007f578063e985e9c511610064578063e985e9c514610720578063f2fde38b14610769578063fd762d921461078957600080fd5b8063d007af5c146106f5578063d73792a91461070a57600080fd5b8063b88d4fde116100b0578063b88d4fde146106a0578063be537f43146106b3578063c87b56dd146106d557600080fd5b8063a22cb46514610660578063a9fc664e1461068057600080fd5b8063715018a61161012257806395d89b411161010757806395d89b411461060b5780639d645a4414610620578063a14481941461064057600080fd5b8063715018a6146105d85780638da5cb5b146105ed57600080fd5b806361347162146105635780636352211e146105835780636c3b8699146105a357806370a08231146105b857600080fd5b806323b872dd1161020157806342966c68116101b55780634ef622531161019a5780634ef62253146104c2578063521f5e6a146104e25780635d4c1d461461052e57600080fd5b806342966c6814610480578063495c8bf9146104a057600080fd5b80632e8da829116101e65780632e8da8291461042d57806340c10f191461044d57806342842e0e1461046d57600080fd5b806323b872dd146103db5780632a55205a146103ee57600080fd5b8063095ea7b31161025857806318160ddd1161023d57806318160ddd146103725780631b25b077146103995780631c33b328146103b957600080fd5b8063095ea7b31461033f578063098144d41461035457600080fd5b8063014635461461028a57806301ffc9a7146102cd57806306fdde03146102fd578063081812fc1461031f575b600080fd5b34801561029657600080fd5b506102b071721c310194ccfc01e523fc93c9cccfa2a0ac81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102d957600080fd5b506102ed6102e836600461244c565b6107a9565b60405190151581526020016102c4565b34801561030957600080fd5b506103126107ba565b6040516102c491906124c1565b34801561032b57600080fd5b506102b061033a3660046124d4565b61084c565b61035261034d366004612502565b6108a9565b005b34801561036057600080fd5b506009546001600160a01b03166102b0565b34801561037e57600080fd5b5060015460005403600019015b6040519081526020016102c4565b3480156103a557600080fd5b506102ed6103b436600461252e565b61096f565b3480156103c557600080fd5b506103ce600181565b6040516102c4919061259b565b6103526103e93660046125a9565b610a08565b3480156103fa57600080fd5b5061040e6104093660046125ea565b610bf0565b604080516001600160a01b0390931683526020830191909152016102c4565b34801561043957600080fd5b506102ed61044836600461260c565b610ca8565b34801561045957600080fd5b50610352610468366004612502565b610dda565b61035261047b3660046125a9565b610de8565b34801561048c57600080fd5b5061035261049b3660046124d4565b610e08565b3480156104ac57600080fd5b506104b5610e14565b6040516102c49190612629565b3480156104ce57600080fd5b506103526104dd366004612676565b610f4b565b3480156104ee57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040516bffffffffffffffffffffffff90911681526020016102c4565b34801561053a57600080fd5b50610543600181565b6040516effffffffffffffffffffffffffffff90911681526020016102c4565b34801561056f57600080fd5b5061035261057e3660046126e1565b61104b565b34801561058f57600080fd5b506102b061059e3660046124d4565b6111f0565b3480156105af57600080fd5b506103526111fb565b3480156105c457600080fd5b5061038b6105d336600461260c565b6112f3565b3480156105e457600080fd5b5061035261135b565b3480156105f957600080fd5b506008546001600160a01b03166102b0565b34801561061757600080fd5b5061031261136f565b34801561062c57600080fd5b506102ed61063b36600461260c565b61137e565b34801561064c57600080fd5b5061035261065b366004612502565b61145d565b34801561066c57600080fd5b5061035261067b36600461272f565b611467565b34801561068c57600080fd5b5061035261069b36600461260c565b6114e0565b6103526106ae3660046127a4565b61163a565b3480156106bf57600080fd5b506106c861167e565b6040516102c49190612868565b3480156106e157600080fd5b506103126106f03660046124d4565b611748565b34801561070157600080fd5b506104b56117f2565b34801561071657600080fd5b5061051161271081565b34801561072c57600080fd5b506102ed61073b3660046128ac565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b34801561077557600080fd5b5061035261078436600461260c565b6118c2565b34801561079557600080fd5b506103526107a43660046128da565b611954565b60006107b482611a78565b92915050565b6060600280546107c990612936565b80601f01602080910402602001604051908101604052809291908181526020018280546107f590612936565b80156108425780601f1061081757610100808354040283529160200191610842565b820191906000526020600020905b81548152906001019060200180831161082557829003601f168201915b5050505050905090565b600061085782611ac6565b61088d576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b60006108b4826111f0565b9050336001600160a01b03821614610906576108d0813361073b565b610906576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082815260066020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6009546000906001600160a01b0316156109fd5760095460405163050bf71960e31b81526001600160a01b038681166004830152858116602483015284811660448301529091169063285fb8c89060640160006040518083038186803b1580156109d857600080fd5b505afa9250505080156109e9575060015b6109f557506000610a01565b506001610a01565b5060015b9392505050565b6000610a1382611afb565b9050836001600160a01b0316816001600160a01b031614610a60576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526006602052604090208054610a8c8187335b6001600160a01b039081169116811491141790565b610ab757610a9a863361073b565b610ab757604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b038516610af7576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b048686866001611b7d565b8015610b0f57600082555b6001600160a01b038681166000908152600560205260408082208054600019019055918716808252919020805460010190554260a01b17600160e11b17600085815260046020526040902055600160e11b8316610b9a5760018401600081815260046020526040902054610b98576000548114610b985760008181526004602052604090208490555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610be88686866001611bab565b505050505050565b6000828152600a602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046bffffffffffffffffffffffff16928201929092528291610c6f577f00000000000000000000000000000000000000000000000000000000000000006bffffffffffffffffffffffff1660208201525b8051602082015161271090610c92906bffffffffffffffffffffffff1687612987565b610c9c91906129a6565b92509250509250929050565b6009546000906001600160a01b031615610dd257600954604051635caaa2a960e11b81523060048201526001600160a01b039091169063d72dde5e90829063b95545529060240160606040518083038186803b158015610d0757600080fd5b505afa158015610d1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3f91906129c8565b602001516040516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526001600160a01b03851660248201526044015b60206040518083038186803b158015610d9a57600080fd5b505afa158015610dae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b49190612a3a565b506000919050565b610de48282611bd2565b5050565b610e038383836040518060200160405280600081525061163a565b505050565b610e1181611c06565b50565b6009546060906001600160a01b031615610f3857600954604051635caaa2a960e11b81523060048201526001600160a01b0390911690633fe5df9990829063b95545529060240160606040518083038186803b158015610e7357600080fd5b505afa158015610e87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eab91906129c8565b602001516040516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526024015b60006040518083038186803b158015610ef757600080fd5b505afa158015610f0b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f339190810190612a57565b905090565b5060408051600081526020810190915290565b6127106bffffffffffffffffffffffff82161115610f95576040517f16fc4d9700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152600a6020526040902080546001600160a01b03163314610fe6576040517f130e6cf200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80546001600160a01b0316600160a01b6bffffffffffffffffffffffff8416908102919091178255604051908152339084907f93c3d3c02f3e5b8ff28a98e2ff5dc3d9395f4f02af3a830c3789c8af25420253906020015b60405180910390a3505050565b611053611c18565b60006110676009546001600160a01b031690565b90506001600160a01b0381166110a9576040517f39ffc7ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604051630368065360e61b81526001600160a01b0382169063da0194c0906110d79030908890600401612b09565b600060405180830381600087803b1580156110f157600080fd5b505af1158015611105573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526effffffffffffffffffffffffffffff861660248201526001600160a01b0384169250632304aa029150604401600060405180830381600087803b15801561116157600080fd5b505af1158015611175573d6000803e3d6000fd5b505060405163235d10c560e21b81523060048201526effffffffffffffffffffffffffffff851660248201526001600160a01b0384169250638d74431491506044015b600060405180830381600087803b1580156111d257600080fd5b505af11580156111e6573d6000803e3d6000fd5b5050505050505050565b60006107b482611afb565b611203611c18565b61121e71721c310194ccfc01e523fc93c9cccfa2a0ac6114e0565b604051630368065360e61b815271721c310194ccfc01e523fc93c9cccfa2a0ac9063da0194c090611256903090600190600401612b09565b600060405180830381600087803b15801561127057600080fd5b505af1158015611284573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526001602482015271721c310194ccfc01e523fc93c9cccfa2a0ac9250632304aa029150604401600060405180830381600087803b1580156112d957600080fd5b505af11580156112ed573d6000803e3d6000fd5b50505050565b60006001600160a01b038216611335576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b611363611c1c565b61136d6000611c76565b565b6060600380546107c990612936565b6009546000906001600160a01b031615610dd257600954604051635caaa2a960e11b81523060048201526001600160a01b0390911690639445f53090829063b95545529060240160606040518083038186803b1580156113dd57600080fd5b505afa1580156113f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141591906129c8565b60409081015190516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526001600160a01b0385166024820152604401610d82565b610de48282611cd5565b3360008181526007602090815260408083206001600160a01b0387168085529252909120805460ff1916841515179055906001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114d4911515815260200190565b60405180910390a35050565b6114e8611c18565b60006001600160a01b0382163b15611576576040516301ffc9a760e01b8152600060048201526001600160a01b038316906301ffc9a79060240160206040518083038186803b15801561153a57600080fd5b505afa92505050801561156a575060408051601f3d908101601f1916820190925261156791810190612a3a565b60015b61157357611576565b90505b6001600160a01b0382161580159061158c575080155b156115c3576040517f32483afb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600954604080516001600160a01b03928316815291841660208301527fcc5dc080ff977b3c3a211fa63ab74f90f658f5ba9d3236e92c8f59570f442aac910160405180910390a1506009805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b611645848484610a08565b6001600160a01b0383163b156112ed5761166184848484611cef565b6112ed576040516368d2bf6b60e11b815260040160405180910390fd5b60408051606081018252600080825260208201819052918101919091526009546001600160a01b03161561172757600954604051635caaa2a960e11b81523060048201526001600160a01b039091169063b95545529060240160606040518083038186803b1580156116ef57600080fd5b505afa158015611703573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3391906129c8565b50604080516060810182526000808252602082018190529181019190915290565b606061175382611ac6565b611789576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006117a060408051602081019091526000815290565b90508051600014156117c15760405180602001604052806000815250610a01565b806117cb84611de6565b6040516020016117dc929190612b26565b6040516020818303038152906040529392505050565b6009546060906001600160a01b031615610f3857600954604051635caaa2a960e11b81523060048201526001600160a01b03909116906317e94a6c90829063b95545529060240160606040518083038186803b15801561185157600080fd5b505afa158015611865573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188991906129c8565b60409081015190516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff9091166004820152602401610edf565b6118ca611c1c565b6001600160a01b03811661194b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610e1181611c76565b61195c611c18565b611965846114e0565b604051630368065360e61b81526001600160a01b0385169063da0194c0906119939030908790600401612b09565b600060405180830381600087803b1580156119ad57600080fd5b505af11580156119c1573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526effffffffffffffffffffffffffffff851660248201526001600160a01b0387169250632304aa029150604401600060405180830381600087803b158015611a1d57600080fd5b505af1158015611a31573d6000803e3d6000fd5b505060405163235d10c560e21b81523060048201526effffffffffffffffffffffffffffff841660248201526001600160a01b0387169250638d74431491506044016111b8565b60006001600160e01b031982167f2a55205a0000000000000000000000000000000000000000000000000000000014806107b457506301ffc9a760e01b6001600160e01b03198316146107b4565b600081600111158015611ada575060005482105b80156107b4575050600090815260046020526040902054600160e01b161590565b60008180600111611b4b57600054811015611b4b57600081815260046020526040902054600160e01b8116611b49575b80610a01575060001901600081815260046020526040902054611b2b565b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015611ba457611b9c8585611b978487612b55565b611e34565b600101611b80565b5050505050565b60005b81811015611ba457611bca8585611bc58487612b55565b611e90565b600101611bae565b60008054905b82811015611bfb57611bf384611bee8385612b55565b611ede565b600101611bd8565b50610e038383612011565b611c0f81612151565b610e118161215c565b61136d5b6008546001600160a01b0316331461136d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611942565b600880546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610de48282604051806020016040528060008152506121d3565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290611d24903390899088908890600401612b6d565b602060405180830381600087803b158015611d3e57600080fd5b505af1925050508015611d6e575060408051601f3d908101601f19168201909252611d6b91810190612ba9565b60015b611dc9573d808015611d9c576040519150601f19603f3d011682016040523d82523d6000602084013e611da1565b606091505b508051611dc1576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b606060a06040510180604052602081039150506000815280825b600183039250600a81066030018353600a900480611e1d57611e22565b611e00565b50819003601f19909101908152919050565b6001600160a01b038381161590831615818015611e4e5750805b15611e6c57604051635cbd944160e01b815260040160405180910390fd5b8115611e78575b611ba4565b8015611e8357611e73565b611ba43386868634612239565b6001600160a01b038381161590831615818015611eaa5750805b15611ec857604051635cbd944160e01b815260040160405180910390fd5b8115611ed357611e73565b8015611e7357611e73565b6001600160a01b038216611f1e576040517fddc3fc8700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000818152600a60205260409020546001600160a01b031615611f6d576040517f3b2a1e5500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805180820182526001600160a01b038481168083527f00000000000000000000000000000000000000000000000000000000000000006bffffffffffffffffffffffff818116602080870182815260008a8152600a835289902097519051909316600160a01b02929095169190911790945593519283529184917f93c3d3c02f3e5b8ff28a98e2ff5dc3d9395f4f02af3a830c3789c8af25420253910161103e565b6000548161204b576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120586000848385611b7d565b6001600160a01b03831660008181526005602090815260408083208054680100000000000000018802019055848352600490915281206001851460e11b4260a01b178317905582840190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b81811461210757808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a46001016120cf565b508161213f576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000908155610e039150848385611bab565b610e118160006122be565b6000818152600a60205260408120819055817f93c3d3c02f3e5b8ff28a98e2ff5dc3d9395f4f02af3a830c3789c8af254202537f00000000000000000000000000000000000000000000000000000000000000006040516bffffffffffffffffffffffff909116815260200160405180910390a350565b6121dd8383611bd2565b6001600160a01b0383163b15610e03576000548281035b6122076000868380600101945086611cef565b612224576040516368d2bf6b60e11b815260040160405180910390fd5b8181106121f4578160005414611ba457600080fd5b6009546001600160a01b031615611ba45760095460405163050bf71960e31b81526001600160a01b038781166004830152868116602483015285811660448301529091169063285fb8c89060640160006040518083038186803b15801561229f57600080fd5b505afa1580156122b3573d6000803e3d6000fd5b505050505050505050565b60006122c983611afb565b9050806000806122e786600090815260066020526040902080549091565b915091508415612327576122fc818433610a77565b6123275761230a833361073b565b61232757604051632ce44b5f60e11b815260040160405180910390fd5b612335836000886001611b7d565b801561234057600082555b6001600160a01b038316600081815260056020526040902080546fffffffffffffffffffffffffffffffff0190554260a01b177c030000000000000000000000000000000000000000000000000000000017600087815260046020526040902055600160e11b84166123e057600186016000818152600460205260409020546123de5760005481146123de5760008181526004602052604090208590555b505b60405186906000906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a4612426836000886001611bab565b5050600180548101905550505050565b6001600160e01b031981168114610e1157600080fd5b60006020828403121561245e57600080fd5b8135610a0181612436565b60005b8381101561248457818101518382015260200161246c565b838111156112ed5750506000910152565b600081518084526124ad816020860160208601612469565b601f01601f19169290920160200192915050565b602081526000610a016020830184612495565b6000602082840312156124e657600080fd5b5035919050565b6001600160a01b0381168114610e1157600080fd5b6000806040838503121561251557600080fd5b8235612520816124ed565b946020939093013593505050565b60008060006060848603121561254357600080fd5b833561254e816124ed565b9250602084013561255e816124ed565b9150604084013561256e816124ed565b809150509250925092565b6007811061259757634e487b7160e01b600052602160045260246000fd5b9052565b602081016107b48284612579565b6000806000606084860312156125be57600080fd5b83356125c9816124ed565b925060208401356125d9816124ed565b929592945050506040919091013590565b600080604083850312156125fd57600080fd5b50508035926020909101359150565b60006020828403121561261e57600080fd5b8135610a01816124ed565b6020808252825182820181905260009190848201906040850190845b8181101561266a5783516001600160a01b031683529284019291840191600101612645565b50909695505050505050565b6000806040838503121561268957600080fd5b8235915060208301356bffffffffffffffffffffffff811681146126ac57600080fd5b809150509250929050565b60078110610e1157600080fd5b6effffffffffffffffffffffffffffff81168114610e1157600080fd5b6000806000606084860312156126f657600080fd5b8335612701816126b7565b92506020840135612711816126c4565b9150604084013561256e816126c4565b8015158114610e1157600080fd5b6000806040838503121561274257600080fd5b823561274d816124ed565b915060208301356126ac81612721565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561279c5761279c61275d565b604052919050565b600080600080608085870312156127ba57600080fd5b84356127c5816124ed565b93506020858101356127d6816124ed565b935060408601359250606086013567ffffffffffffffff808211156127fa57600080fd5b818801915088601f83011261280e57600080fd5b8135818111156128205761282061275d565b612832601f8201601f19168501612773565b9150808252898482850101111561284857600080fd5b808484018584013760008482840101525080935050505092959194509250565b600060608201905061287b828451612579565b60208301516effffffffffffffffffffffffffffff8082166020850152806040860151166040850152505092915050565b600080604083850312156128bf57600080fd5b82356128ca816124ed565b915060208301356126ac816124ed565b600080600080608085870312156128f057600080fd5b84356128fb816124ed565b9350602085013561290b816126b7565b9250604085013561291b816126c4565b9150606085013561292b816126c4565b939692955090935050565b600181811c9082168061294a57607f821691505b6020821081141561296b57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156129a1576129a1612971565b500290565b6000826129c357634e487b7160e01b600052601260045260246000fd5b500490565b6000606082840312156129da57600080fd5b6040516060810181811067ffffffffffffffff821117156129fd576129fd61275d565b6040528251612a0b816126b7565b81526020830151612a1b816126c4565b60208201526040830151612a2e816126c4565b60408201529392505050565b600060208284031215612a4c57600080fd5b8151610a0181612721565b60006020808385031215612a6a57600080fd5b825167ffffffffffffffff80821115612a8257600080fd5b818501915085601f830112612a9657600080fd5b815181811115612aa857612aa861275d565b8060051b9150612ab9848301612773565b8181529183018401918481019088841115612ad357600080fd5b938501935b83851015612afd5784519250612aed836124ed565b8282529385019390850190612ad8565b98975050505050505050565b6001600160a01b038316815260408101610a016020830184612579565b60008351612b38818460208801612469565b835190830190612b4c818360208801612469565b01949350505050565b60008219821115612b6857612b68612971565b500190565b60006001600160a01b03808716835280861660208401525083604083015260806060830152612b9f6080830184612495565b9695505050505050565b600060208284031215612bbb57600080fd5b8151610a018161243656fea2646970667358221220512c4516a58e90680b65be015620480571aa8d0b22af8047625da56aaf22a4ca64736f6c63430008090033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
