{
  "_format": "hh-sol-artifact-1",
  "contractName": "ERC721ACWithReassignableMinterRoyalties",
  "sourceName": "contracts/examples/erc721ac/ERC721ACWithReassignableMinterRoyalties.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "royaltyFeeNumerator_",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "royaltyRightsNFTReference_",
          "type": "address"
        },
        {
          "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": "MinterRoyaltiesReassignableRightsNFT__MinterCannotBeZeroAddress",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MinterRoyaltiesReassignableRightsNFT__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": "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": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "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": [
        {
          "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": [],
      "name": "royaltyFeeNumerator",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "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": [],
      "name": "royaltyRightsNFT",
      "outputs": [
        {
          "internalType": "contract ICloneableRoyaltyRightsERC721",
          "name": "",
          "type": "address"
        }
      ],
      "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": "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": "0x60c06040523480156200001157600080fd5b506040516200301f3803806200301f83398101604081905262000034916200039c565b83838383818181600290805190602001906200005292919062000229565b5080516200006890600390602084019062000229565b50506001600055506200007b3362000131565b5050612710821115620000a15760405163574f72a160e11b815260040160405180910390fd5b81608081815250506000620000c1826200018360201b620019a71760201c565b9050806001600160a01b031663321f16136040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620000ff57600080fd5b505af115801562000114573d6000803e3d6000fd5b505050506001600160a01b031660a052506200046e945050505050565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008260601b60e81c176000526e5af43d82803e903d91602b57fd5bf38260781b17602052603760096000f090506001600160a01b038116620002245760405162461bcd60e51b815260206004820152601660248201527f455243313136373a20637265617465206661696c656400000000000000000000604482015260640160405180910390fd5b919050565b828054620002379062000431565b90600052602060002090601f0160209004810192826200025b5760008555620002a6565b82601f106200027657805160ff1916838001178555620002a6565b82800160010185558215620002a6579182015b82811115620002a657825182559160200191906001019062000289565b50620002b4929150620002b8565b5090565b5b80821115620002b45760008155600101620002b9565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620002f757600080fd5b81516001600160401b0380821115620003145762000314620002cf565b604051601f8301601f19908116603f011681019082821181831017156200033f576200033f620002cf565b816040528381526020925086838588010111156200035c57600080fd5b600091505b8382101562000380578582018301518183018401529082019062000361565b83821115620003925760008385830101525b9695505050505050565b60008060008060808587031215620003b357600080fd5b845160208601519094506001600160a01b0381168114620003d357600080fd5b60408601519093506001600160401b0380821115620003f157600080fd5b620003ff88838901620002e5565b935060608701519150808211156200041657600080fd5b506200042587828801620002e5565b91505092959194509250565b600181811c908216806200044657607f821691505b602082108114156200046857634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a051612b6f620004b06000396000818161038401528181610bf301528181611f2d01526120ff0152600081816105c70152610c9c0152612b6f6000f3fe6080604052600436106102855760003560e01c80636352211e11610153578063a22cb465116100cb578063d007af5c1161007f578063e985e9c511610064578063e985e9c51461071c578063f2fde38b14610765578063fd762d921461078557600080fd5b8063d007af5c146106f1578063d73792a91461070657600080fd5b8063b88d4fde116100b0578063b88d4fde1461069c578063be537f43146106af578063c87b56dd146106d157600080fd5b8063a22cb4651461065c578063a9fc664e1461067c57600080fd5b806381ddcc1f1161012257806395d89b411161010757806395d89b41146106075780639d645a441461061c578063a14481941461063c57600080fd5b806381ddcc1f146105b55780638da5cb5b146105e957600080fd5b80636352211e1461054b5780636c3b86991461056b57806370a0823114610580578063715018a6146105a057600080fd5b80631c33b3281161020157806342842e0e116101b5578063495c8bf91161019a578063495c8bf9146104d45780635d4c1d46146104f6578063613471621461052b57600080fd5b806342842e0e146104a157806342966c68146104b457600080fd5b80632a55205a116101e65780632a55205a146104225780632e8da8291461046157806340c10f191461048157600080fd5b80631c33b328146103ed57806323b872dd1461040f57600080fd5b8063095ea7b311610258578063115767561161023d578063115767561461037257806318160ddd146103a65780631b25b077146103cd57600080fd5b8063095ea7b31461033f578063098144d41461035457600080fd5b8063014635461461028a57806301ffc9a7146102cd57806306fdde03146102fd578063081812fc1461031f575b600080fd5b34801561029657600080fd5b506102b071721c310194ccfc01e523fc93c9cccfa2a0ac81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102d957600080fd5b506102ed6102e83660046123d8565b6107a5565b60405190151581526020016102c4565b34801561030957600080fd5b506103126107b6565b6040516102c4919061244d565b34801561032b57600080fd5b506102b061033a366004612460565b610848565b61035261034d36600461248e565b6108a5565b005b34801561036057600080fd5b506009546001600160a01b03166102b0565b34801561037e57600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b3480156103b257600080fd5b5060015460005403600019015b6040519081526020016102c4565b3480156103d957600080fd5b506102ed6103e83660046124ba565b61096b565b3480156103f957600080fd5b50610402600181565b6040516102c49190612527565b61035261041d366004612535565b610a04565b34801561042e57600080fd5b5061044261043d366004612576565b610bec565b604080516001600160a01b0390931683526020830191909152016102c4565b34801561046d57600080fd5b506102ed61047c366004612598565b610cd7565b34801561048d57600080fd5b5061035261049c36600461248e565b610e09565b6103526104af366004612535565b610e17565b3480156104c057600080fd5b506103526104cf366004612460565b610e37565b3480156104e057600080fd5b506104e9610e43565b6040516102c491906125b5565b34801561050257600080fd5b5061050b600181565b6040516effffffffffffffffffffffffffffff90911681526020016102c4565b34801561053757600080fd5b5061035261054636600461262c565b610f7a565b34801561055757600080fd5b506102b0610566366004612460565b61111f565b34801561057757600080fd5b5061035261112a565b34801561058c57600080fd5b506103bf61059b366004612598565b611222565b3480156105ac57600080fd5b5061035261128a565b3480156105c157600080fd5b506103bf7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105f557600080fd5b506008546001600160a01b03166102b0565b34801561061357600080fd5b5061031261129e565b34801561062857600080fd5b506102ed610637366004612598565b6112ad565b34801561064857600080fd5b5061035261065736600461248e565b61138c565b34801561066857600080fd5b5061035261067736600461267a565b611396565b34801561068857600080fd5b50610352610697366004612598565b61140f565b6103526106aa3660046126fa565b611569565b3480156106bb57600080fd5b506106c46115ad565b6040516102c491906127be565b3480156106dd57600080fd5b506103126106ec366004612460565b611677565b3480156106fd57600080fd5b506104e9611721565b34801561071257600080fd5b506103bf61271081565b34801561072857600080fd5b506102ed610737366004612802565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b34801561077157600080fd5b50610352610780366004612598565b6117f1565b34801561079157600080fd5b506103526107a0366004612830565b611883565b60006107b082611a48565b92915050565b6060600280546107c59061288c565b80601f01602080910402602001604051908101604052809291908181526020018280546107f19061288c565b801561083e5780601f106108135761010080835404028352916020019161083e565b820191906000526020600020905b81548152906001019060200180831161082157829003601f168201915b5050505050905090565b600061085382611a96565b610889576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b60006108b08261111f565b9050336001600160a01b03821614610902576108cc8133610737565b610902576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082815260066020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6009546000906001600160a01b0316156109f95760095460405163050bf71960e31b81526001600160a01b038681166004830152858116602483015284811660448301529091169063285fb8c89060640160006040518083038186803b1580156109d457600080fd5b505afa9250505080156109e5575060015b6109f1575060006109fd565b5060016109fd565b5060015b9392505050565b6000610a0f82611acb565b9050836001600160a01b0316816001600160a01b031614610a5c576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526006602052604090208054610a888187335b6001600160a01b039081169116811491141790565b610ab357610a968633610737565b610ab357604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b038516610af3576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b008686866001611b4d565b8015610b0b57600082555b6001600160a01b038681166000908152600560205260408082208054600019019055918716808252919020805460010190554260a01b17600160e11b17600085815260046020526040902055600160e11b8316610b965760018401600081815260046020526040902054610b94576000548114610b945760008181526004602052604090208490555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610be48686866001611b7b565b505050505050565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636352211e866040518263ffffffff1660e01b8152600401610c3f91815260200190565b60206040518083038186803b158015610c5757600080fd5b505afa925050508015610c87575060408051601f3d908101601f19168201909252610c84918101906128c7565b60015b610c9057610c93565b90505b80612710610cc17f0000000000000000000000000000000000000000000000000000000000000000876128fa565b610ccb9190612919565b92509250509250929050565b6009546000906001600160a01b031615610e0157600954604051635caaa2a960e11b81523060048201526001600160a01b039091169063d72dde5e90829063b95545529060240160606040518083038186803b158015610d3657600080fd5b505afa158015610d4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6e919061293b565b602001516040516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526001600160a01b03851660248201526044015b60206040518083038186803b158015610dc957600080fd5b505afa158015610ddd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b091906129ad565b506000919050565b610e138282611ba2565b5050565b610e3283838360405180602001604052806000815250611569565b505050565b610e4081611bd6565b50565b6009546060906001600160a01b031615610f6757600954604051635caaa2a960e11b81523060048201526001600160a01b0390911690633fe5df9990829063b95545529060240160606040518083038186803b158015610ea257600080fd5b505afa158015610eb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eda919061293b565b602001516040516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526024015b60006040518083038186803b158015610f2657600080fd5b505afa158015610f3a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f6291908101906129ca565b905090565b5060408051600081526020810190915290565b610f82611be8565b6000610f966009546001600160a01b031690565b90506001600160a01b038116610fd8576040517f39ffc7ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604051630368065360e61b81526001600160a01b0382169063da0194c0906110069030908890600401612a7c565b600060405180830381600087803b15801561102057600080fd5b505af1158015611034573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526effffffffffffffffffffffffffffff861660248201526001600160a01b0384169250632304aa029150604401600060405180830381600087803b15801561109057600080fd5b505af11580156110a4573d6000803e3d6000fd5b505060405163235d10c560e21b81523060048201526effffffffffffffffffffffffffffff851660248201526001600160a01b0384169250638d74431491506044015b600060405180830381600087803b15801561110157600080fd5b505af1158015611115573d6000803e3d6000fd5b5050505050505050565b60006107b082611acb565b611132611be8565b61114d71721c310194ccfc01e523fc93c9cccfa2a0ac61140f565b604051630368065360e61b815271721c310194ccfc01e523fc93c9cccfa2a0ac9063da0194c090611185903090600190600401612a7c565b600060405180830381600087803b15801561119f57600080fd5b505af11580156111b3573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526001602482015271721c310194ccfc01e523fc93c9cccfa2a0ac9250632304aa029150604401600060405180830381600087803b15801561120857600080fd5b505af115801561121c573d6000803e3d6000fd5b50505050565b60006001600160a01b038216611264576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b611292611bec565b61129c6000611c46565b565b6060600380546107c59061288c565b6009546000906001600160a01b031615610e0157600954604051635caaa2a960e11b81523060048201526001600160a01b0390911690639445f53090829063b95545529060240160606040518083038186803b15801561130c57600080fd5b505afa158015611320573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611344919061293b565b60409081015190516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526001600160a01b0385166024820152604401610db1565b610e138282611ca5565b3360008181526007602090815260408083206001600160a01b0387168085529252909120805460ff1916841515179055906001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611403911515815260200190565b60405180910390a35050565b611417611be8565b60006001600160a01b0382163b156114a5576040516301ffc9a760e01b8152600060048201526001600160a01b038316906301ffc9a79060240160206040518083038186803b15801561146957600080fd5b505afa925050508015611499575060408051601f3d908101601f19168201909252611496918101906129ad565b60015b6114a2576114a5565b90505b6001600160a01b038216158015906114bb575080155b156114f2576040517f32483afb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600954604080516001600160a01b03928316815291841660208301527fcc5dc080ff977b3c3a211fa63ab74f90f658f5ba9d3236e92c8f59570f442aac910160405180910390a1506009805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b611574848484610a04565b6001600160a01b0383163b1561121c5761159084848484611cbf565b61121c576040516368d2bf6b60e11b815260040160405180910390fd5b60408051606081018252600080825260208201819052918101919091526009546001600160a01b03161561165657600954604051635caaa2a960e11b81523060048201526001600160a01b039091169063b95545529060240160606040518083038186803b15801561161e57600080fd5b505afa158015611632573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f62919061293b565b50604080516060810182526000808252602082018190529181019190915290565b606061168282611a96565b6116b8576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006116cf60408051602081019091526000815290565b90508051600014156116f057604051806020016040528060008152506109fd565b806116fa84611db6565b60405160200161170b929190612a99565b6040516020818303038152906040529392505050565b6009546060906001600160a01b031615610f6757600954604051635caaa2a960e11b81523060048201526001600160a01b03909116906317e94a6c90829063b95545529060240160606040518083038186803b15801561178057600080fd5b505afa158015611794573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b8919061293b565b60409081015190516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff9091166004820152602401610f0e565b6117f9611bec565b6001600160a01b03811661187a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610e4081611c46565b61188b611be8565b6118948461140f565b604051630368065360e61b81526001600160a01b0385169063da0194c0906118c29030908790600401612a7c565b600060405180830381600087803b1580156118dc57600080fd5b505af11580156118f0573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526effffffffffffffffffffffffffffff851660248201526001600160a01b0387169250632304aa029150604401600060405180830381600087803b15801561194c57600080fd5b505af1158015611960573d6000803e3d6000fd5b505060405163235d10c560e21b81523060048201526effffffffffffffffffffffffffffff841660248201526001600160a01b0387169250638d74431491506044016110e7565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008260601b60e81c176000526e5af43d82803e903d91602b57fd5bf38260781b17602052603760096000f090506001600160a01b038116611a435760405162461bcd60e51b815260206004820152601660248201527f455243313136373a20637265617465206661696c6564000000000000000000006044820152606401611871565b919050565b60006001600160e01b031982167f2a55205a0000000000000000000000000000000000000000000000000000000014806107b057506301ffc9a760e01b6001600160e01b03198316146107b0565b600081600111158015611aaa575060005482105b80156107b0575050600090815260046020526040902054600160e01b161590565b60008180600111611b1b57600054811015611b1b57600081815260046020526040902054600160e01b8116611b19575b806109fd575060001901600081815260046020526040902054611afb565b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015611b7457611b6c8585611b678487612ac8565b611e04565b600101611b50565b5050505050565b60005b81811015611b7457611b9a8585611b958487612ac8565b611e60565b600101611b7e565b60008054905b82811015611bcb57611bc384611bbe8385612ac8565b611eae565b600101611ba8565b50610e328383611f85565b611bdf816120c5565b610e40816120d0565b61129c5b6008546001600160a01b0316331461129c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611871565b600880546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610e1382826040518060200160405280600081525061215f565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290611cf4903390899088908890600401612ae0565b602060405180830381600087803b158015611d0e57600080fd5b505af1925050508015611d3e575060408051601f3d908101601f19168201909252611d3b91810190612b1c565b60015b611d99573d808015611d6c576040519150601f19603f3d011682016040523d82523d6000602084013e611d71565b606091505b508051611d91576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b606060a06040510180604052602081039150506000815280825b600183039250600a81066030018353600a900480611ded57611df2565b611dd0565b50819003601f19909101908152919050565b6001600160a01b038381161590831615818015611e1e5750805b15611e3c57604051635cbd944160e01b815260040160405180910390fd5b8115611e48575b611b74565b8015611e5357611e43565b611b7433868686346121c5565b6001600160a01b038381161590831615818015611e7a5750805b15611e9857604051635cbd944160e01b815260040160405180910390fd5b8115611ea357611e43565b8015611e4357611e43565b6001600160a01b038216611eee576040517fa3d450ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018390527f000000000000000000000000000000000000000000000000000000000000000016906340c10f1990604401600060405180830381600087803b158015611f7157600080fd5b505af1158015610be4573d6000803e3d6000fd5b60005481611fbf576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611fcc6000848385611b4d565b6001600160a01b03831660008181526005602090815260408083208054680100000000000000018802019055848352600490915281206001851460e11b4260a01b178317905582840190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b81811461207b57808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600101612043565b50816120b3576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000908155610e329150848385611b7b565b610e4081600061224a565b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906342966c6890602401600060405180830381600087803b15801561214b57600080fd5b505af1158015611b74573d6000803e3d6000fd5b6121698383611ba2565b6001600160a01b0383163b15610e32576000548281035b6121936000868380600101945086611cbf565b6121b0576040516368d2bf6b60e11b815260040160405180910390fd5b818110612180578160005414611b7457600080fd5b6009546001600160a01b031615611b745760095460405163050bf71960e31b81526001600160a01b038781166004830152868116602483015285811660448301529091169063285fb8c89060640160006040518083038186803b15801561222b57600080fd5b505afa15801561223f573d6000803e3d6000fd5b505050505050505050565b600061225583611acb565b90508060008061227386600090815260066020526040902080549091565b9150915084156122b357612288818433610a73565b6122b3576122968333610737565b6122b357604051632ce44b5f60e11b815260040160405180910390fd5b6122c1836000886001611b4d565b80156122cc57600082555b6001600160a01b038316600081815260056020526040902080546fffffffffffffffffffffffffffffffff0190554260a01b177c030000000000000000000000000000000000000000000000000000000017600087815260046020526040902055600160e11b841661236c576001860160008181526004602052604090205461236a57600054811461236a5760008181526004602052604090208590555b505b60405186906000906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a46123b2836000886001611b7b565b5050600180548101905550505050565b6001600160e01b031981168114610e4057600080fd5b6000602082840312156123ea57600080fd5b81356109fd816123c2565b60005b838110156124105781810151838201526020016123f8565b8381111561121c5750506000910152565b600081518084526124398160208601602086016123f5565b601f01601f19169290920160200192915050565b6020815260006109fd6020830184612421565b60006020828403121561247257600080fd5b5035919050565b6001600160a01b0381168114610e4057600080fd5b600080604083850312156124a157600080fd5b82356124ac81612479565b946020939093013593505050565b6000806000606084860312156124cf57600080fd5b83356124da81612479565b925060208401356124ea81612479565b915060408401356124fa81612479565b809150509250925092565b6007811061252357634e487b7160e01b600052602160045260246000fd5b9052565b602081016107b08284612505565b60008060006060848603121561254a57600080fd5b833561255581612479565b9250602084013561256581612479565b929592945050506040919091013590565b6000806040838503121561258957600080fd5b50508035926020909101359150565b6000602082840312156125aa57600080fd5b81356109fd81612479565b6020808252825182820181905260009190848201906040850190845b818110156125f65783516001600160a01b0316835292840192918401916001016125d1565b50909695505050505050565b60078110610e4057600080fd5b6effffffffffffffffffffffffffffff81168114610e4057600080fd5b60008060006060848603121561264157600080fd5b833561264c81612602565b9250602084013561265c8161260f565b915060408401356124fa8161260f565b8015158114610e4057600080fd5b6000806040838503121561268d57600080fd5b823561269881612479565b915060208301356126a88161266c565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156126f2576126f26126b3565b604052919050565b6000806000806080858703121561271057600080fd5b843561271b81612479565b935060208581013561272c81612479565b935060408601359250606086013567ffffffffffffffff8082111561275057600080fd5b818801915088601f83011261276457600080fd5b813581811115612776576127766126b3565b612788601f8201601f191685016126c9565b9150808252898482850101111561279e57600080fd5b808484018584013760008482840101525080935050505092959194509250565b60006060820190506127d1828451612505565b60208301516effffffffffffffffffffffffffffff8082166020850152806040860151166040850152505092915050565b6000806040838503121561281557600080fd5b823561282081612479565b915060208301356126a881612479565b6000806000806080858703121561284657600080fd5b843561285181612479565b9350602085013561286181612602565b925060408501356128718161260f565b915060608501356128818161260f565b939692955090935050565b600181811c908216806128a057607f821691505b602082108114156128c157634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156128d957600080fd5b81516109fd81612479565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612914576129146128e4565b500290565b60008261293657634e487b7160e01b600052601260045260246000fd5b500490565b60006060828403121561294d57600080fd5b6040516060810181811067ffffffffffffffff82111715612970576129706126b3565b604052825161297e81612602565b8152602083015161298e8161260f565b602082015260408301516129a18161260f565b60408201529392505050565b6000602082840312156129bf57600080fd5b81516109fd8161266c565b600060208083850312156129dd57600080fd5b825167ffffffffffffffff808211156129f557600080fd5b818501915085601f830112612a0957600080fd5b815181811115612a1b57612a1b6126b3565b8060051b9150612a2c8483016126c9565b8181529183018401918481019088841115612a4657600080fd5b938501935b83851015612a705784519250612a6083612479565b8282529385019390850190612a4b565b98975050505050505050565b6001600160a01b0383168152604081016109fd6020830184612505565b60008351612aab8184602088016123f5565b835190830190612abf8183602088016123f5565b01949350505050565b60008219821115612adb57612adb6128e4565b500190565b60006001600160a01b03808716835280861660208401525083604083015260806060830152612b126080830184612421565b9695505050505050565b600060208284031215612b2e57600080fd5b81516109fd816123c256fea2646970667358221220e9dc07eae55a29fbb7109defac92678c3da7760932e2d622cdec4b060a5a392464736f6c63430008090033",
  "deployedBytecode": "0x6080604052600436106102855760003560e01c80636352211e11610153578063a22cb465116100cb578063d007af5c1161007f578063e985e9c511610064578063e985e9c51461071c578063f2fde38b14610765578063fd762d921461078557600080fd5b8063d007af5c146106f1578063d73792a91461070657600080fd5b8063b88d4fde116100b0578063b88d4fde1461069c578063be537f43146106af578063c87b56dd146106d157600080fd5b8063a22cb4651461065c578063a9fc664e1461067c57600080fd5b806381ddcc1f1161012257806395d89b411161010757806395d89b41146106075780639d645a441461061c578063a14481941461063c57600080fd5b806381ddcc1f146105b55780638da5cb5b146105e957600080fd5b80636352211e1461054b5780636c3b86991461056b57806370a0823114610580578063715018a6146105a057600080fd5b80631c33b3281161020157806342842e0e116101b5578063495c8bf91161019a578063495c8bf9146104d45780635d4c1d46146104f6578063613471621461052b57600080fd5b806342842e0e146104a157806342966c68146104b457600080fd5b80632a55205a116101e65780632a55205a146104225780632e8da8291461046157806340c10f191461048157600080fd5b80631c33b328146103ed57806323b872dd1461040f57600080fd5b8063095ea7b311610258578063115767561161023d578063115767561461037257806318160ddd146103a65780631b25b077146103cd57600080fd5b8063095ea7b31461033f578063098144d41461035457600080fd5b8063014635461461028a57806301ffc9a7146102cd57806306fdde03146102fd578063081812fc1461031f575b600080fd5b34801561029657600080fd5b506102b071721c310194ccfc01e523fc93c9cccfa2a0ac81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102d957600080fd5b506102ed6102e83660046123d8565b6107a5565b60405190151581526020016102c4565b34801561030957600080fd5b506103126107b6565b6040516102c4919061244d565b34801561032b57600080fd5b506102b061033a366004612460565b610848565b61035261034d36600461248e565b6108a5565b005b34801561036057600080fd5b506009546001600160a01b03166102b0565b34801561037e57600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b3480156103b257600080fd5b5060015460005403600019015b6040519081526020016102c4565b3480156103d957600080fd5b506102ed6103e83660046124ba565b61096b565b3480156103f957600080fd5b50610402600181565b6040516102c49190612527565b61035261041d366004612535565b610a04565b34801561042e57600080fd5b5061044261043d366004612576565b610bec565b604080516001600160a01b0390931683526020830191909152016102c4565b34801561046d57600080fd5b506102ed61047c366004612598565b610cd7565b34801561048d57600080fd5b5061035261049c36600461248e565b610e09565b6103526104af366004612535565b610e17565b3480156104c057600080fd5b506103526104cf366004612460565b610e37565b3480156104e057600080fd5b506104e9610e43565b6040516102c491906125b5565b34801561050257600080fd5b5061050b600181565b6040516effffffffffffffffffffffffffffff90911681526020016102c4565b34801561053757600080fd5b5061035261054636600461262c565b610f7a565b34801561055757600080fd5b506102b0610566366004612460565b61111f565b34801561057757600080fd5b5061035261112a565b34801561058c57600080fd5b506103bf61059b366004612598565b611222565b3480156105ac57600080fd5b5061035261128a565b3480156105c157600080fd5b506103bf7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105f557600080fd5b506008546001600160a01b03166102b0565b34801561061357600080fd5b5061031261129e565b34801561062857600080fd5b506102ed610637366004612598565b6112ad565b34801561064857600080fd5b5061035261065736600461248e565b61138c565b34801561066857600080fd5b5061035261067736600461267a565b611396565b34801561068857600080fd5b50610352610697366004612598565b61140f565b6103526106aa3660046126fa565b611569565b3480156106bb57600080fd5b506106c46115ad565b6040516102c491906127be565b3480156106dd57600080fd5b506103126106ec366004612460565b611677565b3480156106fd57600080fd5b506104e9611721565b34801561071257600080fd5b506103bf61271081565b34801561072857600080fd5b506102ed610737366004612802565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b34801561077157600080fd5b50610352610780366004612598565b6117f1565b34801561079157600080fd5b506103526107a0366004612830565b611883565b60006107b082611a48565b92915050565b6060600280546107c59061288c565b80601f01602080910402602001604051908101604052809291908181526020018280546107f19061288c565b801561083e5780601f106108135761010080835404028352916020019161083e565b820191906000526020600020905b81548152906001019060200180831161082157829003601f168201915b5050505050905090565b600061085382611a96565b610889576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b60006108b08261111f565b9050336001600160a01b03821614610902576108cc8133610737565b610902576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082815260066020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6009546000906001600160a01b0316156109f95760095460405163050bf71960e31b81526001600160a01b038681166004830152858116602483015284811660448301529091169063285fb8c89060640160006040518083038186803b1580156109d457600080fd5b505afa9250505080156109e5575060015b6109f1575060006109fd565b5060016109fd565b5060015b9392505050565b6000610a0f82611acb565b9050836001600160a01b0316816001600160a01b031614610a5c576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526006602052604090208054610a888187335b6001600160a01b039081169116811491141790565b610ab357610a968633610737565b610ab357604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b038516610af3576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b008686866001611b4d565b8015610b0b57600082555b6001600160a01b038681166000908152600560205260408082208054600019019055918716808252919020805460010190554260a01b17600160e11b17600085815260046020526040902055600160e11b8316610b965760018401600081815260046020526040902054610b94576000548114610b945760008181526004602052604090208490555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610be48686866001611b7b565b505050505050565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636352211e866040518263ffffffff1660e01b8152600401610c3f91815260200190565b60206040518083038186803b158015610c5757600080fd5b505afa925050508015610c87575060408051601f3d908101601f19168201909252610c84918101906128c7565b60015b610c9057610c93565b90505b80612710610cc17f0000000000000000000000000000000000000000000000000000000000000000876128fa565b610ccb9190612919565b92509250509250929050565b6009546000906001600160a01b031615610e0157600954604051635caaa2a960e11b81523060048201526001600160a01b039091169063d72dde5e90829063b95545529060240160606040518083038186803b158015610d3657600080fd5b505afa158015610d4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6e919061293b565b602001516040516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526001600160a01b03851660248201526044015b60206040518083038186803b158015610dc957600080fd5b505afa158015610ddd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b091906129ad565b506000919050565b610e138282611ba2565b5050565b610e3283838360405180602001604052806000815250611569565b505050565b610e4081611bd6565b50565b6009546060906001600160a01b031615610f6757600954604051635caaa2a960e11b81523060048201526001600160a01b0390911690633fe5df9990829063b95545529060240160606040518083038186803b158015610ea257600080fd5b505afa158015610eb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eda919061293b565b602001516040516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526024015b60006040518083038186803b158015610f2657600080fd5b505afa158015610f3a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f6291908101906129ca565b905090565b5060408051600081526020810190915290565b610f82611be8565b6000610f966009546001600160a01b031690565b90506001600160a01b038116610fd8576040517f39ffc7ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604051630368065360e61b81526001600160a01b0382169063da0194c0906110069030908890600401612a7c565b600060405180830381600087803b15801561102057600080fd5b505af1158015611034573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526effffffffffffffffffffffffffffff861660248201526001600160a01b0384169250632304aa029150604401600060405180830381600087803b15801561109057600080fd5b505af11580156110a4573d6000803e3d6000fd5b505060405163235d10c560e21b81523060048201526effffffffffffffffffffffffffffff851660248201526001600160a01b0384169250638d74431491506044015b600060405180830381600087803b15801561110157600080fd5b505af1158015611115573d6000803e3d6000fd5b5050505050505050565b60006107b082611acb565b611132611be8565b61114d71721c310194ccfc01e523fc93c9cccfa2a0ac61140f565b604051630368065360e61b815271721c310194ccfc01e523fc93c9cccfa2a0ac9063da0194c090611185903090600190600401612a7c565b600060405180830381600087803b15801561119f57600080fd5b505af11580156111b3573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526001602482015271721c310194ccfc01e523fc93c9cccfa2a0ac9250632304aa029150604401600060405180830381600087803b15801561120857600080fd5b505af115801561121c573d6000803e3d6000fd5b50505050565b60006001600160a01b038216611264576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b611292611bec565b61129c6000611c46565b565b6060600380546107c59061288c565b6009546000906001600160a01b031615610e0157600954604051635caaa2a960e11b81523060048201526001600160a01b0390911690639445f53090829063b95545529060240160606040518083038186803b15801561130c57600080fd5b505afa158015611320573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611344919061293b565b60409081015190516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526001600160a01b0385166024820152604401610db1565b610e138282611ca5565b3360008181526007602090815260408083206001600160a01b0387168085529252909120805460ff1916841515179055906001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611403911515815260200190565b60405180910390a35050565b611417611be8565b60006001600160a01b0382163b156114a5576040516301ffc9a760e01b8152600060048201526001600160a01b038316906301ffc9a79060240160206040518083038186803b15801561146957600080fd5b505afa925050508015611499575060408051601f3d908101601f19168201909252611496918101906129ad565b60015b6114a2576114a5565b90505b6001600160a01b038216158015906114bb575080155b156114f2576040517f32483afb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600954604080516001600160a01b03928316815291841660208301527fcc5dc080ff977b3c3a211fa63ab74f90f658f5ba9d3236e92c8f59570f442aac910160405180910390a1506009805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b611574848484610a04565b6001600160a01b0383163b1561121c5761159084848484611cbf565b61121c576040516368d2bf6b60e11b815260040160405180910390fd5b60408051606081018252600080825260208201819052918101919091526009546001600160a01b03161561165657600954604051635caaa2a960e11b81523060048201526001600160a01b039091169063b95545529060240160606040518083038186803b15801561161e57600080fd5b505afa158015611632573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f62919061293b565b50604080516060810182526000808252602082018190529181019190915290565b606061168282611a96565b6116b8576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006116cf60408051602081019091526000815290565b90508051600014156116f057604051806020016040528060008152506109fd565b806116fa84611db6565b60405160200161170b929190612a99565b6040516020818303038152906040529392505050565b6009546060906001600160a01b031615610f6757600954604051635caaa2a960e11b81523060048201526001600160a01b03909116906317e94a6c90829063b95545529060240160606040518083038186803b15801561178057600080fd5b505afa158015611794573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b8919061293b565b60409081015190516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff9091166004820152602401610f0e565b6117f9611bec565b6001600160a01b03811661187a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610e4081611c46565b61188b611be8565b6118948461140f565b604051630368065360e61b81526001600160a01b0385169063da0194c0906118c29030908790600401612a7c565b600060405180830381600087803b1580156118dc57600080fd5b505af11580156118f0573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526effffffffffffffffffffffffffffff851660248201526001600160a01b0387169250632304aa029150604401600060405180830381600087803b15801561194c57600080fd5b505af1158015611960573d6000803e3d6000fd5b505060405163235d10c560e21b81523060048201526effffffffffffffffffffffffffffff841660248201526001600160a01b0387169250638d74431491506044016110e7565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008260601b60e81c176000526e5af43d82803e903d91602b57fd5bf38260781b17602052603760096000f090506001600160a01b038116611a435760405162461bcd60e51b815260206004820152601660248201527f455243313136373a20637265617465206661696c6564000000000000000000006044820152606401611871565b919050565b60006001600160e01b031982167f2a55205a0000000000000000000000000000000000000000000000000000000014806107b057506301ffc9a760e01b6001600160e01b03198316146107b0565b600081600111158015611aaa575060005482105b80156107b0575050600090815260046020526040902054600160e01b161590565b60008180600111611b1b57600054811015611b1b57600081815260046020526040902054600160e01b8116611b19575b806109fd575060001901600081815260046020526040902054611afb565b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015611b7457611b6c8585611b678487612ac8565b611e04565b600101611b50565b5050505050565b60005b81811015611b7457611b9a8585611b958487612ac8565b611e60565b600101611b7e565b60008054905b82811015611bcb57611bc384611bbe8385612ac8565b611eae565b600101611ba8565b50610e328383611f85565b611bdf816120c5565b610e40816120d0565b61129c5b6008546001600160a01b0316331461129c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611871565b600880546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610e1382826040518060200160405280600081525061215f565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290611cf4903390899088908890600401612ae0565b602060405180830381600087803b158015611d0e57600080fd5b505af1925050508015611d3e575060408051601f3d908101601f19168201909252611d3b91810190612b1c565b60015b611d99573d808015611d6c576040519150601f19603f3d011682016040523d82523d6000602084013e611d71565b606091505b508051611d91576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b606060a06040510180604052602081039150506000815280825b600183039250600a81066030018353600a900480611ded57611df2565b611dd0565b50819003601f19909101908152919050565b6001600160a01b038381161590831615818015611e1e5750805b15611e3c57604051635cbd944160e01b815260040160405180910390fd5b8115611e48575b611b74565b8015611e5357611e43565b611b7433868686346121c5565b6001600160a01b038381161590831615818015611e7a5750805b15611e9857604051635cbd944160e01b815260040160405180910390fd5b8115611ea357611e43565b8015611e4357611e43565b6001600160a01b038216611eee576040517fa3d450ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018390527f000000000000000000000000000000000000000000000000000000000000000016906340c10f1990604401600060405180830381600087803b158015611f7157600080fd5b505af1158015610be4573d6000803e3d6000fd5b60005481611fbf576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611fcc6000848385611b4d565b6001600160a01b03831660008181526005602090815260408083208054680100000000000000018802019055848352600490915281206001851460e11b4260a01b178317905582840190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b81811461207b57808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600101612043565b50816120b3576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000908155610e329150848385611b7b565b610e4081600061224a565b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906342966c6890602401600060405180830381600087803b15801561214b57600080fd5b505af1158015611b74573d6000803e3d6000fd5b6121698383611ba2565b6001600160a01b0383163b15610e32576000548281035b6121936000868380600101945086611cbf565b6121b0576040516368d2bf6b60e11b815260040160405180910390fd5b818110612180578160005414611b7457600080fd5b6009546001600160a01b031615611b745760095460405163050bf71960e31b81526001600160a01b038781166004830152868116602483015285811660448301529091169063285fb8c89060640160006040518083038186803b15801561222b57600080fd5b505afa15801561223f573d6000803e3d6000fd5b505050505050505050565b600061225583611acb565b90508060008061227386600090815260066020526040902080549091565b9150915084156122b357612288818433610a73565b6122b3576122968333610737565b6122b357604051632ce44b5f60e11b815260040160405180910390fd5b6122c1836000886001611b4d565b80156122cc57600082555b6001600160a01b038316600081815260056020526040902080546fffffffffffffffffffffffffffffffff0190554260a01b177c030000000000000000000000000000000000000000000000000000000017600087815260046020526040902055600160e11b841661236c576001860160008181526004602052604090205461236a57600054811461236a5760008181526004602052604090208590555b505b60405186906000906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a46123b2836000886001611b7b565b5050600180548101905550505050565b6001600160e01b031981168114610e4057600080fd5b6000602082840312156123ea57600080fd5b81356109fd816123c2565b60005b838110156124105781810151838201526020016123f8565b8381111561121c5750506000910152565b600081518084526124398160208601602086016123f5565b601f01601f19169290920160200192915050565b6020815260006109fd6020830184612421565b60006020828403121561247257600080fd5b5035919050565b6001600160a01b0381168114610e4057600080fd5b600080604083850312156124a157600080fd5b82356124ac81612479565b946020939093013593505050565b6000806000606084860312156124cf57600080fd5b83356124da81612479565b925060208401356124ea81612479565b915060408401356124fa81612479565b809150509250925092565b6007811061252357634e487b7160e01b600052602160045260246000fd5b9052565b602081016107b08284612505565b60008060006060848603121561254a57600080fd5b833561255581612479565b9250602084013561256581612479565b929592945050506040919091013590565b6000806040838503121561258957600080fd5b50508035926020909101359150565b6000602082840312156125aa57600080fd5b81356109fd81612479565b6020808252825182820181905260009190848201906040850190845b818110156125f65783516001600160a01b0316835292840192918401916001016125d1565b50909695505050505050565b60078110610e4057600080fd5b6effffffffffffffffffffffffffffff81168114610e4057600080fd5b60008060006060848603121561264157600080fd5b833561264c81612602565b9250602084013561265c8161260f565b915060408401356124fa8161260f565b8015158114610e4057600080fd5b6000806040838503121561268d57600080fd5b823561269881612479565b915060208301356126a88161266c565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156126f2576126f26126b3565b604052919050565b6000806000806080858703121561271057600080fd5b843561271b81612479565b935060208581013561272c81612479565b935060408601359250606086013567ffffffffffffffff8082111561275057600080fd5b818801915088601f83011261276457600080fd5b813581811115612776576127766126b3565b612788601f8201601f191685016126c9565b9150808252898482850101111561279e57600080fd5b808484018584013760008482840101525080935050505092959194509250565b60006060820190506127d1828451612505565b60208301516effffffffffffffffffffffffffffff8082166020850152806040860151166040850152505092915050565b6000806040838503121561281557600080fd5b823561282081612479565b915060208301356126a881612479565b6000806000806080858703121561284657600080fd5b843561285181612479565b9350602085013561286181612602565b925060408501356128718161260f565b915060608501356128818161260f565b939692955090935050565b600181811c908216806128a057607f821691505b602082108114156128c157634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156128d957600080fd5b81516109fd81612479565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612914576129146128e4565b500290565b60008261293657634e487b7160e01b600052601260045260246000fd5b500490565b60006060828403121561294d57600080fd5b6040516060810181811067ffffffffffffffff82111715612970576129706126b3565b604052825161297e81612602565b8152602083015161298e8161260f565b602082015260408301516129a18161260f565b60408201529392505050565b6000602082840312156129bf57600080fd5b81516109fd8161266c565b600060208083850312156129dd57600080fd5b825167ffffffffffffffff808211156129f557600080fd5b818501915085601f830112612a0957600080fd5b815181811115612a1b57612a1b6126b3565b8060051b9150612a2c8483016126c9565b8181529183018401918481019088841115612a4657600080fd5b938501935b83851015612a705784519250612a6083612479565b8282529385019390850190612a4b565b98975050505050505050565b6001600160a01b0383168152604081016109fd6020830184612505565b60008351612aab8184602088016123f5565b835190830190612abf8183602088016123f5565b01949350505050565b60008219821115612adb57612adb6128e4565b500190565b60006001600160a01b03808716835280861660208401525083604083015260806060830152612b126080830184612421565b9695505050505050565b600060208284031215612b2e57600080fd5b81516109fd816123c256fea2646970667358221220e9dc07eae55a29fbb7109defac92678c3da7760932e2d622cdec4b060a5a392464736f6c63430008090033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
