[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "ApprovalCallerNotOwnerNorApproved", "type": "error" }, { "inputs": [], "name": "ApprovalQueryForNonexistentToken", "type": "error" }, { "inputs": [], "name": "BalanceQueryForZeroAddress", "type": "error" }, { "inputs": [], "name": "InvalidInput", "type": "error" }, { "inputs": [], "name": "MintERC2309QuantityExceedsLimit", "type": "error" }, { "inputs": [], "name": "MintToZeroAddress", "type": "error" }, { "inputs": [], "name": "MintZeroQuantity", "type": "error" }, { "inputs": [], "name": "NotAuthorized", "type": "error" }, { "inputs": [], "name": "NotAvailable", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" } ], "name": "OperatorNotAllowed", "type": "error" }, { "inputs": [], "name": "OwnerQueryForNonexistentToken", "type": "error" }, { "inputs": [], "name": "OwnershipNotInitializedForExtraData", "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": false, "internalType": "uint256", "name": "_fromTokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "_toTokenId", "type": "uint256" } ], "name": "BatchMetadataUpdate", "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": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "MetadataUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [ { "internalType": "uint256", "name": "index", "type": "uint256" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "uint256", "name": "primeNumber", "type": "uint256" }, { "components": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "mimetype", "type": "string" }, { "internalType": "uint256", "name": "occurrence", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "bool", "name": "hide", "type": "bool" }, { "internalType": "bool", "name": "useExistingData", "type": "bool" }, { "internalType": "uint256", "name": "existingDataIndex", "type": "uint256" } ], "internalType": "struct TraitDTO[]", "name": "_traits", "type": "tuple[]" }, { "internalType": "uint256", "name": "_numberOfLayers", "type": "uint256" } ], "name": "addLayer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "layerIndex", "type": "uint256" }, { "internalType": "uint256", "name": "traitIndex", "type": "uint256" }, { "components": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "mimetype", "type": "string" }, { "internalType": "uint256", "name": "occurrence", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "bool", "name": "hide", "type": "bool" }, { "internalType": "bool", "name": "useExistingData", "type": "bool" }, { "internalType": "uint256", "name": "existingDataIndex", "type": "uint256" } ], "internalType": "struct TraitDTO", "name": "_trait", "type": "tuple" } ], "name": "addTrait", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "layerIndex", "type": "uint256" }, { "components": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "mimetype", "type": "string" }, { "internalType": "uint256", "name": "occurrence", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "bool", "name": "hide", "type": "bool" }, { "internalType": "bool", "name": "useExistingData", "type": "bool" }, { "internalType": "uint256", "name": "existingDataIndex", "type": "uint256" } ], "internalType": "struct TraitDTO[]", "name": "_traits", "type": "tuple[]" } ], "name": "addTraitsToLayer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "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": [], "name": "baseURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "claimCondition", "outputs": [ { "internalType": "uint256", "name": "startTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "maxClaimableSupply", "type": "uint256" }, { "internalType": "uint256", "name": "supplyClaimed", "type": "uint256" }, { "internalType": "uint256", "name": "quantityLimitPerWallet", "type": "uint256" }, { "internalType": "bytes32", "name": "merkleRoot", "type": "bytes32" }, { "internalType": "uint256", "name": "pricePerToken", "type": "uint256" }, { "internalType": "string", "name": "metadata", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_hash", "type": "string" } ], "name": "hashToMetadata", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_hash", "type": "string" } ], "name": "hashToSVG", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" }, { "internalType": "uint256", "name": "_maxSupply", "type": "uint256" }, { "components": [ { "internalType": "bool", "name": "isContractSealed", "type": "bool" }, { "internalType": "string", "name": "description", "type": "string" } ], "internalType": "struct Settings", "name": "_settings", "type": "tuple" }, { "components": [ { "internalType": "address", "name": "royaltyAddress", "type": "address" }, { "internalType": "uint96", "name": "royaltyAmount", "type": "uint96" } ], "internalType": "struct RoyaltySettings", "name": "_royaltySettings", "type": "tuple" }, { "components": [ { "internalType": "address", "name": "indelibleSecurity", "type": "address" }, { "internalType": "address", "name": "deployer", "type": "address" }, { "internalType": "address", "name": "operatorFilter", "type": "address" } ], "internalType": "struct FactorySettings", "name": "_factorySettings", "type": "tuple" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_ipURI", "type": "string" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" }, { "internalType": "uint8", "name": "v", "type": "uint8" } ], "name": "intelectualPropertySignature", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "ipSignature", "outputs": [ { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" }, { "internalType": "uint8", "name": "v", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "ipURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isRevealed", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_receiver", "type": "address" }, { "internalType": "uint256", "name": "_quantity", "type": "uint256" }, { "internalType": "uint256", "name": "_pricePerToken", "type": "uint256" }, { "components": [ { "internalType": "bytes32[]", "name": "proof", "type": "bytes32[]" }, { "internalType": "uint256", "name": "quantityLimitPerWallet", "type": "uint256" }, { "internalType": "uint256", "name": "pricePerToken", "type": "uint256" } ], "internalType": "struct AllowlistProof", "name": "_allowlistProof", "type": "tuple" } ], "name": "mint", "outputs": [], "stateMutability": "payable", "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": "punk4762", "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": "", "type": "address" }, { "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": "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": [], "name": "sealContract", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "uri", "type": "string" } ], "name": "setBaseURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint256", "name": "startTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "maxClaimableSupply", "type": "uint256" }, { "internalType": "uint256", "name": "supplyClaimed", "type": "uint256" }, { "internalType": "uint256", "name": "quantityLimitPerWallet", "type": "uint256" }, { "internalType": "bytes32", "name": "merkleRoot", "type": "bytes32" }, { "internalType": "uint256", "name": "pricePerToken", "type": "uint256" }, { "internalType": "string", "name": "metadata", "type": "string" } ], "internalType": "struct ClaimCondition", "name": "_condition", "type": "tuple" }, { "internalType": "bool", "name": "_resetClaimEligibility", "type": "bool" } ], "name": "setClaimConditions", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "string", "name": "tokenHash", "type": "string" } ], "name": "setHashOverride", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_punk4762", "type": "address" } ], "name": "setIPSigner", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint256[]", "name": "traitA", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "traitB", "type": "uint256[]" } ], "internalType": "struct LinkedTraitDTO[]", "name": "_linkedTraits", "type": "tuple[]" } ], "name": "setLinkedTraits", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_placeholderImage", "type": "string" } ], "name": "setPlaceholderImage", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "setRevealSeed", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "settings", "outputs": [ { "internalType": "bool", "name": "isContractSealed", "type": "bool" }, { "internalType": "string", "name": "description", "type": "string" } ], "stateMutability": "view", "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": "tokenIdToHash", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenIdToSVG", "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": "uint256", "name": "layerIndex", "type": "uint256" }, { "internalType": "uint256", "name": "traitIndex", "type": "uint256" } ], "name": "traitData", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "layerIndex", "type": "uint256" }, { "internalType": "uint256", "name": "traitIndex", "type": "uint256" } ], "name": "traitDetails", "outputs": [ { "components": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "mimetype", "type": "string" }, { "internalType": "uint256", "name": "occurrence", "type": "uint256" }, { "internalType": "address", "name": "dataPointer", "type": "address" }, { "internalType": "bool", "name": "hide", "type": "bool" } ], "internalType": "struct Trait", "name": "", "type": "tuple" } ], "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" }, { "inputs": [], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
6080604052610101805460ff60a01b1916600160a01b1790553480156200002557600080fd5b506200003062000036565b620000f8565b600054610100900460ff1615620000a35760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620000f6576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b615d7480620001086000396000f3fe6080604052600436106102875760003560e01c80636c0360eb1161015a578063c11feac1116100c1578063ea84b59b1161007a578063ea84b59b1461078d578063f2fde38b146107ba578063f9689f3c146107da578063fbba18a8146107fa578063fbc95ae41461081a578063fcfebae11461083a57600080fd5b8063c11feac1146106cb578063c87b56dd146106eb578063d5abeb011461070b578063d637ed5914610722578063e06174e41461074a578063e985e9c51461076d57600080fd5b806395d89b411161011357806395d89b4114610630578063a22cb46514610645578063b456806614610665578063b75f1aef14610685578063b88d4fde146106a5578063bfa806b2146106b857600080fd5b80636c0360eb146105885780636cf02bd21461059d57806370a08231146105bd578063715018a6146105dd57806389ce3074146105f25780638da5cb5b1461061257600080fd5b80633ccfd60b116101fe5780636352211e116101b75780636352211e146104ba578063650262d1146104da57806366420cdf146104fb57806366e338701461053e57806368bd580e1461055e57806369393a771461057357600080fd5b80633ccfd60b1461041a57806342842e0e1461042f57806354214f691461044257806355f804b31461045a57806356cb4d001461047a578063621a1f741461049a57600080fd5b806309dbabca1161025057806309dbabca1461035057806318160ddd146103705780631b523406146103935780631d7b420f146103b357806323b872dd146103c85780632a55205a146103db57600080fd5b8062b8bcc11461028c57806301ffc9a7146102ae57806306fdde03146102e3578063081812fc14610305578063095ea7b31461033d575b600080fd5b34801561029857600080fd5b506102ac6102a73660046148ac565b61085a565b005b3480156102ba57600080fd5b506102ce6102c9366004614976565b610b99565b60405190151581526020015b60405180910390f35b3480156102ef57600080fd5b506102f8610bb9565b6040516102da91906149e3565b34801561031157600080fd5b506103256103203660046149f6565b610c54565b6040516001600160a01b0390911681526020016102da565b6102ac61034b366004614a26565b610ca1565b34801561035c57600080fd5b506102f861036b366004614a50565b610cba565b34801561037c57600080fd5b50610385610cf3565b6040519081526020016102da565b34801561039f57600080fd5b506102ac6103ae366004614ab3565b610d12565b3480156103bf57600080fd5b506102f8610d5e565b6102ac6103d6366004614afe565b610ded565b3480156103e757600080fd5b506103fb6103f6366004614a50565b610e12565b604080516001600160a01b0390931683526020830191909152016102da565b34801561042657600080fd5b506102ac610ec0565b6102ac61043d366004614afe565b610ef3565b34801561044e57600080fd5b506101025415156102ce565b34801561046657600080fd5b506102ac610475366004614b3a565b610f18565b34801561048657600080fd5b506102ac610495366004614b7b565b610f93565b3480156104a657600080fd5b506102f86104b53660046149f6565b610fbe565b3480156104c657600080fd5b506103256104d53660046149f6565b611494565b3480156104e657600080fd5b5061010854610325906001600160a01b031681565b34801561050757600080fd5b5061010a5461010b5461010c5461052092919060ff1683565b60408051938452602084019290925260ff16908201526060016102da565b34801561054a57600080fd5b506102f8610559366004614b96565b61149f565b34801561056a57600080fd5b506102ac61162a565b34801561057f57600080fd5b506102ac611667565b34801561059457600080fd5b506102f8611747565b3480156105a957600080fd5b506102ac6105b8366004614bdc565b611755565b3480156105c957600080fd5b506103856105d8366004614b7b565b611960565b3480156105e957600080fd5b506102ac6119c8565b3480156105fe57600080fd5b506102f861060d366004614b96565b6119da565b34801561061e57600080fd5b506033546001600160a01b0316610325565b34801561063c57600080fd5b506102f8611bfe565b34801561065157600080fd5b506102ac610660366004614c39565b611c16565b34801561067157600080fd5b506102ac610680366004614cb4565b611c2a565b34801561069157600080fd5b506102ac6106a0366004614b3a565b611dce565b6102ac6106b3366004614ce9565b611de4565b6102ac6106c6366004614d64565b611e11565b3480156106d757600080fd5b506102f86106e63660046149f6565b611f58565b3480156106f757600080fd5b506102f86107063660046149f6565b611f84565b34801561071757600080fd5b506103856101055481565b34801561072e57600080fd5b5061073761218d565b6040516102da9796959493929190614db8565b34801561075657600080fd5b5061075f612243565b6040516102da929190614dfc565b34801561077957600080fd5b506102ce610788366004614e17565b6122e0565b34801561079957600080fd5b506107ad6107a8366004614a50565b61231d565b6040516102da9190614e4a565b3480156107c657600080fd5b506102ac6107d5366004614b7b565b6124d8565b3480156107e657600080fd5b506102ac6107f5366004614eb8565b612551565b34801561080657600080fd5b506102ac610815366004614efe565b6126da565b34801561082657600080fd5b506102ac610835366004614f89565b612a50565b34801561084657600080fd5b506102ac610855366004614fc7565b612e2a565b600080516020615d1f83398151915254610100900460ff1661088f57600080516020615d1f8339815191525460ff1615610893565b303b155b61090a5760405162461bcd60e51b815260206004820152603760248201527f455243373231415f5f496e697469616c697a61626c653a20636f6e747261637460448201527f20697320616c726561647920696e697469616c697a656400000000000000000060648201526084015b60405180910390fd5b600080516020615d1f83398151915254610100900460ff1615801561094657600080516020615d1f833981519152805461ffff19166101011790555b600054610100900460ff16158080156109665750600054600160ff909116105b806109805750303b158015610980575060005460ff166001145b6109e35760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610901565b6000805460ff191660011790558015610a06576000805461ff0019166101001790555b610a108888612ee2565b610a18612f20565b61010586905584610106610a2c82826151bd565b5050610106805460ff19169055610a466020840184614b7b565b61010180546001600160a01b0319166001600160a01b0392909216919091179055610a8c610a776020860186614b7b565b610a8760408701602088016152c9565b612f4f565b610a996020850185614b7b565b61010d80546001600160a01b0319166001600160a01b0392909216919091179055610acd6107d56040850160208601614b7b565b604051806060016040528060308152602001615c6a6030913961011790610af490826152f2565b50610b2a610b086060850160408601614b7b565b6000610b1a6060870160408801614b7b565b6001600160a01b0316141561304c565b8015610b70576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b508015610b9057600080516020615d1f833981519152805461ff00191690555b50505050505050565b6000610ba4826131f3565b80610bb35750610bb382613241565b92915050565b6060610bc3613276565b6002018054610bd190615075565b80601f0160208091040260200160405190810160405280929190818152602001828054610bfd90615075565b8015610c4a5780601f10610c1f57610100808354040283529160200191610c4a565b820191906000526020600020905b815481529060010190602001808311610c2d57829003601f168201915b5050505050905090565b6000610c5f8261329a565b610c7c576040516333d1c03960e21b815260040160405180910390fd5b610c84613276565b60009283526006016020525060409020546001600160a01b031690565b81610cab816132d6565b610cb5838361338f565b505050565b600082815260fc60209081526040808320848452909152902060030154606090610cec906001600160a01b031661339b565b9392505050565b600080610cfe613276565b60010154610d0a613276565b540303919050565b6101065460ff1615610d375760405163ea8e4eb560e01b815260040160405180910390fd5b610d3f6133e5565b600083815260ff60205260409020610d58828483615104565b50505050565b6101098054610d6c90615075565b80601f0160208091040260200160405190810160405280929190818152602001828054610d9890615075565b8015610de55780601f10610dba57610100808354040283529160200191610de5565b820191906000526020600020905b815481529060010190602001808311610dc857829003601f168201915b505050505081565b826001600160a01b0381163314610e0757610e07336132d6565b610d5884848461343f565b60008281526098602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b0316928201929092528291610e875750604080518082019091526097546001600160a01b0381168252600160a01b90046001600160601b031660208201525b602081015160009061271090610ea6906001600160601b0316876153c1565b610eb091906153ee565b91519350909150505b9250929050565b610ec86133e5565b610ed0613632565b61010d54610ee7906001600160a01b03164761368b565b610ef1600160c955565b565b826001600160a01b0381163314610f0d57610f0d336132d6565b610d588484846137a4565b610f206133e5565b610104610f2e828483615104565b506000610f396137bf565b1115610f8f577f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c60006001610f6c6137bf565b610f769190615402565b6040805192835260208301919091520160405180910390a15b5050565b610f9b6133e5565b61010880546001600160a01b0319166001600160a01b0392909216919091179055565b60606101025460001480610fd85750610fd68261329a565b155b15610ff65760405163d9b9141960e01b815260040160405180910390fd5b600082815260ff60205260408120805461100f90615075565b905011156110b557600082815260ff60205260409020805461103090615075565b80601f016020809104026020016040519081016040528092919081815260200182805461105c90615075565b80156110a95780601f1061107e576101008083540402835291602001916110a9565b820191906000526020600020905b81548152906001019060200180831161108c57829003601f168201915b50505050509050919050565b60006110e76101035460046110ca91906153c1565b604080518281016060018252910181526000602090910190815290565b905060006110f4846137d1565b90506000610103546001600160401b03811115611113576111136147d7565b60405190808252806020026020018201604052801561113c578160200160208202803683370190505b5090506000610103546001600160401b0381111561115c5761115c6147d7565b604051908082528060200260200182016040528015611185578160200160208202803683370190505b5090506000610105546101025461119c9190615415565b905060005b6101035481101561136a5760008482815181106111c0576111c0615429565b602002602001015190508382815181106111dc576111dc615429565b6020026020010151151560001515036112605761010554600083815260fb602052604081206001015490919085611213868b61543f565b61121d919061543f565b61122791906153c1565b6112319190615415565b905061123d838261388e565b91508186848151811061125257611252615429565b602002602001018181525050505b600082815260fd602090815260408083208484529091529020541561136157600082815260fd602090815260408083208484529091529020805460019081106112ab576112ab615429565b600091825260208083209091015484835260fd825260408084208585529092529082208054919288926112e0576112e0615429565b9060005260206000200154815181106112fb576112fb615429565b602090810291909101810191909152600083815260fd82526040808220848352909252908120805460019287929161133557611335615429565b90600052602060002001548151811061135057611350615429565b911515602092830291909101909101525b506001016111a1565b5060005b835181101561148857600a84828151811061138b5761138b615429565b602002602001015110156113c257604080518082019091526002815261030360f41b60208201526113bd908790613928565b611407565b60648482815181106113d6576113d6615429565b60200260200101511015611407576040805180820190915260018152600360fc1b6020820152611407908790613928565b6103e784828151811061141c5761141c615429565b602002602001015111156114545760408051808201909152600381526239393960e81b602082015261144f908790613928565b611480565b61148061147985838151811061146c5761146c615429565b60200260200101516139ad565b8790613928565b60010161136e565b50939695505050505050565b6000610bb3826139f1565b60408051620200608101825262020040815260006020918201908152825180840190935260018352605b60f81b918301919091526060916114e1908290613928565b6000805b610103548110156116215760006115266115216115038460036153c1565b61150e8560036153c1565b61151990600361543f565b899190613a96565b613b62565b600083815260fc6020908152604080832060ff9485168085529252822060030154909350600160a01b9004909116151590036115df578215611585576040805180820190915260018152600b60fa1b6020820152611585908590613928565b600082815260fb6020908152604080832060fc835281842085855283529281902090516115d0936115b993909291016154c5565b60408051601f198184030181529190528590613928565b8215156000036115df57600192505b6001610103546115ef9190615402565b8203611618576040805180820190915260018152605d60f81b6020820152611618908590613928565b506001016114e5565b50909392505050565b6101065460ff161561164f5760405163ea8e4eb560e01b815260040160405180910390fd5b6116576133e5565b610106805460ff19166001179055565b61166f6133e5565b61010254156116915760405163ea8e4eb560e01b815260040160405180910390fd5b3a4342446116a0600184615402565b6040805160208101969096528501939093526060808501929092526080840152904060a083015233901b6001600160601b03191660c082015260d40160408051601f19818403018152919052805160209091012061010255610105547f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c9060009061172d90600190615402565b6040805192835260208301919091520160405180910390a1565b6101048054610d6c90615075565b61175d6133e5565b6101065460ff16156117825760405163ea8e4eb560e01b815260040160405180910390fd5b600061179460c0830160a0840161551b565b156117c55750600083815260fc602090815260408083208584529091529020600301546001600160a01b0316611812565b61180f6117d5606084018461502f565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613c2092505050565b90505b6040805160a0810190915280611828848061502f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050908252506020908101906118719085018561502f565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525060408085013560208301526001600160a01b038416908201526060016118d460a085016080860161551b565b15159052600085815260fc602090815260408083208784529091529020815181906118ff90826152f2565b506020820151600182019061191490826152f2565b50604082015160028201556060820151600390910180546080909301511515600160a01b026001600160a81b03199093166001600160a01b039092169190911791909117905550505050565b60006001600160a01b038216611989576040516323d3ad8160e21b815260040160405180910390fd5b6001600160401b03611999613276565b6005016000846001600160a01b03166001600160a01b0316815260200190815260200160002054169050919050565b6119d06133e5565b610ef16000613c62565b604080516202006081019091526202004081526000602090910181815260609190611a1e6040518060c0016040528060858152602001615c9a608591398290613928565b60005b600161010354611a319190615402565b811015611ae457611a67611521611a498360036153c1565b611a548460036153c1565b611a5f90600361543f565b889190613a96565b600082815260fc6020908152604080832060ff949094168084529390915290206003810154919450611adc91600190910190611ab490611aaf906001600160a01b031661339b565b613cb4565b604051602001611ac5929190615538565b60408051601f198184030181529190528390613928565b600101611a21565b50611b1e6115216003610103546003611afd91906153c1565b611b079190615402565b61010354611b169060036153c1565b879190613a96565b60ff169150611bcd60fc6000600161010354611b3a9190615402565b81526020019081526020016000206000848152602001908152602001600020600101611ba5611aaf60fc6000600161010354611b769190615402565b8152602080820192909252604090810160009081208982529092529020600301546001600160a01b031661339b565b604051602001611bb6929190615592565b60408051601f198184030181529190528290613928565b611bd681613cb4565b604051602001611be691906156f6565b60405160208183030381529060405292505050919050565b6060611c08613276565b6003018054610bd190615075565b81611c20816132d6565b610cb58383613cc2565b611c326133e5565b6101065460ff1615611c575760405163ea8e4eb560e01b815260040160405180910390fd5b60005b81811015610cb5576040518060400160405280848484818110611c7f57611c7f615429565b9050602002810190611c91919061573b565b611c9f90602081019061575b565b6000818110611cb057611cb0615429565b905060200201358152602001848484818110611cce57611cce615429565b9050602002810190611ce0919061573b565b611cee90602081019061575b565b6001818110611cff57611cff615429565b9050602002013581525060fd6000858585818110611d1f57611d1f615429565b9050602002810190611d31919061573b565b611d3b908061575b565b6000818110611d4c57611d4c615429565b9050602002013581526020019081526020016000206000858585818110611d7557611d75615429565b9050602002810190611d87919061573b565b611d91908061575b565b6001818110611da257611da2615429565b905060200201358152602001908152602001600020906002611dc5929190614777565b50600101611c5a565b611dd66133e5565b610117610cb5828483615104565b836001600160a01b0381163314611dfe57611dfe336132d6565b611e0a85858585613d3f565b5050505050565b611e19613632565b336001600160a01b03851615801590611e445750806001600160a01b0316856001600160a01b031614155b15611edd57604051638988eea960e01b81526001600160a01b038616600482015233602482015230604482015261060f60f31b60648201526c447e69651d841bd8d104bed49390638988eea990608401602060405180830381865afa158015611eb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ed591906157a4565b15611edd5750835b611ee981858585613d83565b50610115546101108054869190600090611f0490849061543f565b90915550506000818152610116602090815260408083206001600160a01b038616845290915281208054879290611f3c90849061543f565b90915550611f4c905085836140fd565b5050610d58600160c955565b606061010254600014611f7657611f7161060d83610fbe565b610bb3565b610117805461103090615075565b6060611f8f8261329a565b611fac5760405163b4fa3fb360e01b815260040160405180910390fd5b6040805162020060810190915262020040815260006020909101908152611ff2611fd4610bb9565b611fdd856139ad565b604051611bb6929190610107906020016157c1565b6101025460000361201857612013610117604051602001611bb69190615849565b61215d565b600061202384610fbe565b90506000610104805461203590615075565b90501180156120525750600084815260fe602052604090205460ff165b1561208857612083610104612066866139ad565b83612070466139ad565b604051602001611ac59493929190615881565b61213f565b60408051602081019091526000815261010154600160a01b900460ff16156121065760006120b5836119da565b90506120df816040516020016120cb9190615919565b604051602081830303815290604052613cb4565b6040516020016120ef91906156f6565b604051602081830303815290604052915050612112565b61210f826119da565b90505b61213d816040516020016121269190615a04565b60408051601f198184030181529190528490613928565b505b61215b61214b8261149f565b604051602001611ac59190615a47565b505b61216681613cb4565b6040516020016121769190615a88565b604051602081830303815290604052915050919050565b61010e805461010f546101105461011154610112546101135461011480549697959694959394929391926121c090615075565b80601f01602080910402602001604051908101604052809291908181526020018280546121ec90615075565b80156122395780601f1061220e57610100808354040283529160200191612239565b820191906000526020600020905b81548152906001019060200180831161221c57829003601f168201915b5050505050905087565b6101068054610107805460ff909216929161225d90615075565b80601f016020809104026020016040519081016040528092919081815260200182805461228990615075565b80156122d65780601f106122ab576101008083540402835291602001916122d6565b820191906000526020600020905b8154815290600101906020018083116122b957829003601f168201915b5050505050905082565b60006122ea613276565b6001600160a01b039384166000908152600791909101602090815260408083209490951682529290925250205460ff1690565b61235a6040518060a0016040528060608152602001606081526020016000815260200160006001600160a01b031681526020016000151581525090565b600083815260fc6020908152604080832085845290915290819020815160a0810190925280548290829061238d90615075565b80601f01602080910402602001604051908101604052809291908181526020018280546123b990615075565b80156124065780601f106123db57610100808354040283529160200191612406565b820191906000526020600020905b8154815290600101906020018083116123e957829003601f168201915b5050505050815260200160018201805461241f90615075565b80601f016020809104026020016040519081016040528092919081815260200182805461244b90615075565b80156124985780601f1061246d57610100808354040283529160200191612498565b820191906000526020600020905b81548152906001019060200180831161247b57829003601f168201915b5050509183525050600282015460208201526003909101546001600160a01b0381166040830152600160a01b900460ff1615156060909101529392505050565b6124e06133e5565b6001600160a01b0381166125455760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610901565b61254e81613c62565b50565b6125596133e5565b612561613632565b610115546101105482156125ab57506040516001600160601b03193360601b1660208201524360348201526000906054016040516020818303038152906040528051906020012091505b83602001358111156125f45760405162461bcd60e51b81526020600482015260126024820152711b585e081cdd5c1c1b1e4818db185a5b595960721b6044820152606401610901565b6040518060e00160405280856000013581526020018560200135815260200182815260200185606001358152602001856080013581526020018560a001358152602001858060c00190612647919061502f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050915250805161010e908155602082015161010f5560408201516101105560608201516101115560808201516101125560a08201516101135560c0820151610114906126c590826152f2565b5050506101159190915550610f8f600160c955565b6126e26133e5565b6101065460ff16156127075760405163ea8e4eb560e01b815260040160405180910390fd5b604051806060016040528087878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250938552505050602080830188905260409283018690528a825260fb9052208151819061277090826152f2565b506020820151600182015560409091015160029091015561010381905560005b82811015612a465760008484838181106127ac576127ac615429565b90506020028101906127be9190615acd565b6127cf9060c081019060a00161551b565b1561282f57600089815260fc60205260408120908686858181106127f5576127f5615429565b90506020028101906128079190615acd565b60c0013581526020810191909152604001600020600301546001600160a01b03169050612867565b61286485858481811061284457612844615429565b90506020028101906128569190615acd565b6117d590606081019061502f565b90505b6040518060a0016040528086868581811061288457612884615429565b90506020028101906128969190615acd565b6128a0908061502f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050908252506020018686858181106128ec576128ec615429565b90506020028101906128fe9190615acd565b61290c90602081019061502f565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525060200186868581811061295857612958615429565b905060200281019061296a9190615acd565b604001358152602001826001600160a01b0316815260200186868581811061299457612994615429565b90506020028101906129a69190615acd565b6129b79060a081019060800161551b565b1515905260008a815260fc602090815260408083208684529091529020815181906129e290826152f2565b50602082015160018201906129f790826152f2565b50604082015160028201556060820151600390910180546080909301511515600160a01b026001600160a81b03199093166001600160a01b039092169190911791909117905550600101612790565b5050505050505050565b612a586133e5565b6101065460ff1615612a7d5760405163ea8e4eb560e01b815260040160405180910390fd5b610103548310612ac55760405162461bcd60e51b8152602060048201526013602482015272092dcecc2d8d2c840d8c2f2cae440d2dcc8caf606b1b6044820152606401610901565b600083815260fb60205260408120905b82811015612e07576000848483818110612af157612af1615429565b9050602002810190612b039190615acd565b612b149060c081019060a00161551b565b15612bee578260020154858584818110612b3057612b30615429565b9050602002810190612b429190615acd565b60c0013510612b935760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206578697374696e67206461746120696e64657800000000006044820152606401610901565b600086815260fc6020526040812090868685818110612bb457612bb4615429565b9050602002810190612bc69190615acd565b60c0013581526020810191909152604001600020600301546001600160a01b03169050612c06565b612c0385858481811061284457612844615429565b90505b6040518060a00160405280868685818110612c2357612c23615429565b9050602002810190612c359190615acd565b612c3f908061502f565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250602001868685818110612c8b57612c8b615429565b9050602002810190612c9d9190615acd565b612cab90602081019061502f565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250602001868685818110612cf757612cf7615429565b9050602002810190612d099190615acd565b604001358152602001826001600160a01b03168152602001868685818110612d3357612d33615429565b9050602002810190612d459190615acd565b612d569060a081019060800161551b565b15159052600087815260fc602052604081206002860154909190612d7b90869061543f565b8152602081019190915260400160002081518190612d9990826152f2565b5060208201516001820190612dae90826152f2565b50604082015160028201556060820151600390910180546080909301511515600160a01b026001600160a81b03199093166001600160a01b03909216919091179190911790555080612dff81615ae3565b915050612ad5565b5082829050816002016000828254612e1f919061543f565b909155505050505050565b610108546001600160a01b03163314612e755760405162461bcd60e51b815260206004820152600d60248201526c139bdd105d5d1a1bdc9a5e9959609a1b6044820152606401610901565b6101065460ff1615612e9a5760405163ea8e4eb560e01b815260040160405180910390fd5b610109612ea785826152f2565b50604080516060810182528481526020810184905260ff909216910181905261010a9290925561010b5561010c805460ff1916909117905550565b600080516020615d1f83398151915254610100900460ff16612f165760405162461bcd60e51b815260040161090190615afc565b610f8f828261414a565b600054610100900460ff16612f475760405162461bcd60e51b815260040161090190615b50565b610ef16141bd565b6127106001600160601b0382161115612fbd5760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b6064820152608401610901565b6001600160a01b0382166130135760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c6964207265636569766572000000000000006044820152606401610901565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217609755565b600054610100900460ff166130735760405162461bcd60e51b815260040161090190615b50565b6daaeb6d7670e522a718067333cd4e3b15610f8f5760405163c3c5a54760e01b81523060048201526daaeb6d7670e522a718067333cd4e9063c3c5a547906024016020604051808303816000875af11580156130d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130f791906157a4565b610f8f57801561317357604051633e9f1edf60e11b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e90637d3e3dbe906044015b600060405180830381600087803b15801561315757600080fd5b505af115801561316b573d6000803e3d6000fd5b505050505050565b6001600160a01b038216156131c25760405163a0af290360e01b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e9063a0af29039060440161313d565b604051632210724360e11b81523060048201526daaeb6d7670e522a718067333cd4e90634420e4869060240161313d565b60006301ffc9a760e01b6001600160e01b03198316148061322457506380ac58cd60e01b6001600160e01b03198316145b80610bb35750506001600160e01b031916635b5e139f60e01b1490565b60006001600160e01b0319821663152a902d60e11b1480610bb357506301ffc9a760e01b6001600160e01b0319831614610bb3565b7f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4090565b60006132a4613276565b5482108015610bb35750600160e01b6132bb613276565b60008481526004919091016020526040902054161592915050565b6daaeb6d7670e522a718067333cd4e3b1561254e57604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015613343573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061336791906157a4565b61254e57604051633b79c77360e21b81526001600160a01b0382166004820152602401610901565b610f8f828260016141ed565b6060813b806133b2576311052bb46000526004601cfd5b600181039050604051915061ffe0603f820116820160405280825260008160208401015280600160208401853c50919050565b6033546001600160a01b03163314610ef15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610901565b600061344a826139f1565b9050836001600160a01b0316816001600160a01b03161461347d5760405162a1148160e81b815260040160405180910390fd5b600080613489846142a2565b915091506134ae81876134993390565b6001600160a01b039081169116811491141790565b6134d9576134bc86336122e0565b6134d957604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b03851661350057604051633a954ecd60e21b815260040160405180910390fd5b801561350b57600082555b613513613276565b6001600160a01b038716600090815260059190910160205260409020805460001901905561353f613276565b6001600160a01b03861660008181526005929092016020526040909120805460010190554260a01b17600160e11b17613576613276565b60008681526004919091016020526040812091909155600160e11b841690036135ec57600184016135a5613276565b6000828152600491909101602052604081205490036135ea576135c6613276565b5481146135ea57836135d6613276565b600083815260049190910160205260409020555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461316b565b600260c954036136845760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610901565b600260c955565b804710156136db5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610901565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613728576040519150601f19603f3d011682016040523d82523d6000602084013e61372d565b606091505b5050905080610cb55760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610901565b610cb583838360405180602001604052806000815250611de4565b6000806137ca613276565b5403919050565b600080610105546001600160401b038111156137ef576137ef6147d7565b604051908082528060200260200182016040528015613818578160200160208202803683370190505b50905060005b6101055481101561384f578082828151811061383c5761383c615429565b602090810291909101015260010161381e565b50604080516020810190915261010254815261386b81836142ca565b81848151811061387d5761387d615429565b602002602001015192505050919050565b600080805b600085815260fb602052604090206002015481101561390557600085815260fc602090815260408083208484529091529020600201548285108015906138e157506138de818461543f565b85105b156138f057509150610bb39050565b6138fa818461543f565b925050600101613893565b5060405162461bcd60e51b81526020600482015260006024820152604401610901565b601f1982015182518251603f19909201918290613945908361543f565b11156139a35760405162461bcd60e51b815260206004820152602760248201527f44796e616d69634275666665723a20417070656e64696e67206f7574206f66206044820152663137bab732399760c91b6064820152608401610901565b610d58848461434e565b606060a06040510180604052602081039150506000815280825b600183039250600a81066030018353600a9004806139c75750819003601f19909101908152919050565b60006139fb613276565b600083815260049190910160205260408120549150600160e01b82169003613a7d5780600003613a7857613a2d613276565b548210613a4d57604051636f96cda160e11b815260040160405180910390fd5b613a55613276565b600019909201600081815260049390930160205260409092205490508015613a4d575b919050565b604051636f96cda160e11b815260040160405180910390fd5b6060836000613aa58585615402565b6001600160401b03811115613abc57613abc6147d7565b6040519080825280601f01601f191660200182016040528015613ae6576020820181803683370190505b509050845b84811015613b5857828181518110613b0557613b05615429565b01602001516001600160f81b03191682613b1f8884615402565b81518110613b2f57613b2f615429565b60200101906001600160f81b031916908160001a90535080613b5081615ae3565b915050613aeb565b5095945050505050565b60008181805b82518160ff161015613c18576030838260ff1681518110613b8b57613b8b615429565b016020015160f81c10801590613bbe57506039838260ff1681518110613bb357613bb3615429565b016020015160f81c11155b15613c0657613bce600a83615b9b565b91506030838260ff1681518110613be757613be7615429565b0160200151613bf9919060f81c615bbe565b613c039083615bd7565b91505b80613c1081615bf0565b915050613b68565b509392505050565b60008151600181018060401b6a61000080600a3d393df300178452600a8101601585016000f092505081613c5c5763301164256000526004601cfd5b90915290565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6060610bb382600080614384565b80613ccb613276565b336000818152600792909201602090815260408084206001600160a01b03881680865290835293819020805460ff19169515159590951790945592518415158152919290917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b613d4a848484610ded565b6001600160a01b0383163b15610d5857613d6684848484614482565b610d58576040516368d2bf6b60e11b815260040160405180910390fd5b6040805160e08101825261010e8054825261010f54602083015261011054928201929092526101115460608201526101125460808201526101135460a08201526101148054600093849392909160c084019190613ddf90615075565b80601f0160208091040260200160405190810160405280929190818152602001828054613e0b90615075565b8015613e585780601f10613e2d57610100808354040283529160200191613e58565b820191906000526020600020905b815481529060010190602001808311613e3b57829003601f168201915b50505091909252505050606081015160a08201516080830151929350909160009015613f1057613f0c613e8b878061575b565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050506080860151604080516001600160601b031960608f901b166020808301919091528b01356034820152908a013560548201526074016040516020818303038152906040528051906020012061456e565b5094505b8415613f50578560200135600003613f285782613f2e565b85602001355b9250600019866040013503613f435781613f49565b85604001355b9150600090505b610115546000908152610116602090815260408083206001600160a01b038d16845290915290205434613f838a856153c1565b14613fbf5760405162461bcd60e51b815260206004820152600c60248201526b496e76616c696456616c756560a01b6044820152606401610901565b828814613ff75760405162461bcd60e51b815260206004820152600660248201526521507269636560d01b6044820152606401610901565b88158061400c57508361400a828b61543f565b115b156140425760405162461bcd60e51b8152600401610901906020808252600490820152632151747960e01b604082015260600190565b8460200151898660400151614057919061543f565b1180614074575061010554898660400151614072919061543f565b115b156140ae5760405162461bcd60e51b815260206004820152600a602482015269214d6178537570706c7960b01b6044820152606401610901565b84514210156140f05760405162461bcd60e51b815260206004820152600e60248201526d18d85b9d0818db185a5b481e595d60921b6044820152606401610901565b5050505050949350505050565b600061410a6014846153ee565b90506000614119601485615415565b905060005b828110156141395761413184601461463c565b60010161411e565b508015610d5857610d58838261463c565b600080516020615d1f83398151915254610100900460ff1661417e5760405162461bcd60e51b815260040161090190615afc565b81614187613276565b6002019061419590826152f2565b508061419f613276565b600301906141ad90826152f2565b5060006141b8613276565b555050565b600054610100900460ff166141e45760405162461bcd60e51b815260040161090190615b50565b610ef133613c62565b60006141f883611494565b9050811561423757336001600160a01b038216146142375761421a81336122e0565b614237576040516367d9dca160e11b815260040160405180910390fd5b83614240613276565b6000858152600691909101602052604080822080546001600160a01b0319166001600160a01b0394851617905551859287811692908516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259190a450505050565b60008060006142af613276565b60009485526006016020525050604090912080549092909150565b80516000196fffffffffffffffffffffffffffffffff8215611e0a576020840193505b6020852080865282840193608082901c0660051b85018461430f575050611e0a565b600585811b8701805183519091529091528385019482841606901b850184614338575050611e0a565b600585901b8601805182519091529052506142ed565b8051602082019150808201602084510184015b81841015614379578351815260209384019301614361565b505082510190915250565b606083518015613c18576003600282010460021b60405192507f4142434445464748494a4b4c4d4e4f505152535455565758595a616263646566601f526102308515027f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5f03603f52602083018181015b6003880197508751603f8160121c16518353603f81600c1c16516001840153603f8160061c16516002840153603f8116516003840153506004820191508082106143f457600384068680156144545760018214821515018503875261446c565b603d821515850353603d6001831460011b8503538487525b5050601f01601f19166040525050509392505050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a02906144b7903390899088908890600401615c0f565b6020604051808303816000875af19250505080156144f2575060408051601f3d908101601f191682019092526144ef91810190615c4c565b60015b614550573d808015614520576040519150601f19603f3d011682016040523d82523d6000602084013e614525565b606091505b508051600003614548576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b6000808281805b8751811015614630576145896002836153c1565b9150600088828151811061459f5761459f615429565b602002602001015190508084116145e157604080516020810186905290810182905260600160405160208183030381529060405280519060200120935061461d565b604080516020810183905290810185905260600160405160208183030381529060405280519060200120935060018361461a919061543f565b92505b508061462881615ae3565b915050614575565b50941495939450505050565b6000614646613276565b549050600082900361466b5760405163b562e8dd60e01b815260040160405180910390fd5b68010000000000000001820261467f613276565b6001600160a01b038516600081815260059290920160205260409091208054929092019091554260a01b6001841460e11b17176146ba613276565b600083815260049190910160205260408120919091556001600160a01b0384169083830190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b81811461474457808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a460010161470c565b508160000361476557604051622e076360e81b815260040160405180910390fd5b8061476e613276565b5550610cb59050565b8280548282559060005260206000209081019282156147b2579160200282015b828111156147b2578251825591602001919060010190614797565b506147be9291506147c2565b5090565b5b808211156147be57600081556001016147c3565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b0380841115614807576148076147d7565b604051601f8501601f19908116603f0116810190828211818310171561482f5761482f6147d7565b8160405280935085815286868601111561484857600080fd5b858560208301376000602087830101525050509392505050565b600082601f83011261487357600080fd5b610cec838335602085016147ed565b60006040828403121561489457600080fd5b50919050565b60006060828403121561489457600080fd5b60008060008060008061012087890312156148c657600080fd5b86356001600160401b03808211156148dd57600080fd5b6148e98a838b01614862565b975060208901359150808211156148ff57600080fd5b61490b8a838b01614862565b965060408901359550606089013591508082111561492857600080fd5b5061493589828a01614882565b9350506149458860808901614882565b91506149548860c0890161489a565b90509295509295509295565b6001600160e01b03198116811461254e57600080fd5b60006020828403121561498857600080fd5b8135610cec81614960565b60005b838110156149ae578181015183820152602001614996565b50506000910152565b600081518084526149cf816020860160208601614993565b601f01601f19169290920160200192915050565b602081526000610cec60208301846149b7565b600060208284031215614a0857600080fd5b5035919050565b80356001600160a01b0381168114613a7857600080fd5b60008060408385031215614a3957600080fd5b614a4283614a0f565b946020939093013593505050565b60008060408385031215614a6357600080fd5b50508035926020909101359150565b60008083601f840112614a8457600080fd5b5081356001600160401b03811115614a9b57600080fd5b602083019150836020828501011115610eb957600080fd5b600080600060408486031215614ac857600080fd5b8335925060208401356001600160401b03811115614ae557600080fd5b614af186828701614a72565b9497909650939450505050565b600080600060608486031215614b1357600080fd5b614b1c84614a0f565b9250614b2a60208501614a0f565b9150604084013590509250925092565b60008060208385031215614b4d57600080fd5b82356001600160401b03811115614b6357600080fd5b614b6f85828601614a72565b90969095509350505050565b600060208284031215614b8d57600080fd5b610cec82614a0f565b600060208284031215614ba857600080fd5b81356001600160401b03811115614bbe57600080fd5b61456684828501614862565b600060e0828403121561489457600080fd5b600080600060608486031215614bf157600080fd5b833592506020840135915060408401356001600160401b03811115614c1557600080fd5b614c2186828701614bca565b9150509250925092565b801515811461254e57600080fd5b60008060408385031215614c4c57600080fd5b614c5583614a0f565b91506020830135614c6581614c2b565b809150509250929050565b60008083601f840112614c8257600080fd5b5081356001600160401b03811115614c9957600080fd5b6020830191508360208260051b8501011115610eb957600080fd5b60008060208385031215614cc757600080fd5b82356001600160401b03811115614cdd57600080fd5b614b6f85828601614c70565b60008060008060808587031215614cff57600080fd5b614d0885614a0f565b9350614d1660208601614a0f565b92506040850135915060608501356001600160401b03811115614d3857600080fd5b8501601f81018713614d4957600080fd5b614d58878235602084016147ed565b91505092959194509250565b60008060008060808587031215614d7a57600080fd5b614d8385614a0f565b9350602085013592506040850135915060608501356001600160401b03811115614dac57600080fd5b614d588782880161489a565b8781528660208201528560408201528460608201528360808201528260a082015260e060c08201526000614def60e08301846149b7565b9998505050505050505050565b821515815260406020820152600061456660408301846149b7565b60008060408385031215614e2a57600080fd5b614e3383614a0f565b9150614e4160208401614a0f565b90509250929050565b602081526000825160a06020840152614e6660c08401826149b7565b90506020840151601f19848303016040850152614e8382826149b7565b9150506040840151606084015260018060a01b0360608501511660808401526080840151151560a08401528091505092915050565b60008060408385031215614ecb57600080fd5b82356001600160401b03811115614ee157600080fd5b614eed85828601614bca565b9250506020830135614c6581614c2b565b600080600080600080600060a0888a031215614f1957600080fd5b8735965060208801356001600160401b0380821115614f3757600080fd5b614f438b838c01614a72565b909850965060408a0135955060608a0135915080821115614f6357600080fd5b50614f708a828b01614c70565b989b979a50959894979596608090950135949350505050565b600080600060408486031215614f9e57600080fd5b8335925060208401356001600160401b03811115614fbb57600080fd5b614af186828701614c70565b60008060008060808587031215614fdd57600080fd5b84356001600160401b03811115614ff357600080fd5b614fff87828801614862565b9450506020850135925060408501359150606085013560ff8116811461502457600080fd5b939692955090935050565b6000808335601e1984360301811261504657600080fd5b8301803591506001600160401b0382111561506057600080fd5b602001915036819003821315610eb957600080fd5b600181811c9082168061508957607f821691505b60208210810361489457634e487b7160e01b600052602260045260246000fd5b601f821115610cb557600081815260208120601f850160051c810160208610156150d05750805b601f850160051c820191505b8181101561316b578281556001016150dc565b600019600383901b1c191660019190911b1790565b6001600160401b0383111561511b5761511b6147d7565b61512f836151298354615075565b836150a9565b6000601f84116001811461515d576000851561514b5750838201355b61515586826150ef565b845550611e0a565b600083815260209020601f19861690835b8281101561518e578685013582556020948501946001909201910161516e565b50868210156151ab5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81356151c881614c2b565b815490151560ff1660ff1991909116178155600180820160208481013536869003601e190181126151f857600080fd5b850180356001600160401b0381111561521057600080fd5b803603838301131561522157600080fd5b6152358161522f8654615075565b866150a9565b6000601f821160018114615265576000831561525357508382018501355b61525d84826150ef565b8755506152be565b600086815260209020601f19841690835b8281101561529557868501880135825593870193908901908701615276565b50848210156152b45760001960f88660031b161c198785880101351681555b50508683881b0186555b505050505050505050565b6000602082840312156152db57600080fd5b81356001600160601b0381168114610cec57600080fd5b81516001600160401b0381111561530b5761530b6147d7565b61531f816153198454615075565b846150a9565b602080601f83116001811461534e576000841561533c5750858301515b61534685826150ef565b86555061316b565b600085815260208120601f198616915b8281101561537d5788860151825594840194600190910190840161535e565b508582101561539b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610bb357610bb36153ab565b634e487b7160e01b600052601260045260246000fd5b6000826153fd576153fd6153d8565b500490565b81810381811115610bb357610bb36153ab565b600082615424576154246153d8565b500690565b634e487b7160e01b600052603260045260246000fd5b80820180821115610bb357610bb36153ab565b6000815461545f81615075565b60018281168015615477576001811461548c576154bb565b60ff19841687528215158302870194506154bb565b8560005260208060002060005b858110156154b25781548a820152908401908201615499565b50505082870194505b5050505092915050565b6e3d913a3930b4ba2fba3cb832911d1160891b815260006154e9600f830185615452565b6a1116113b30b63ab2911d1160a91b8152615507600b820185615452565b61227d60f01b815260020195945050505050565b60006020828403121561552d57600080fd5b8135610cec81614c2b565b643230ba309d60d91b815260006155526005830185615452565b670ed8985cd94d8d0b60c21b81528351615573816008840160208801614993565b6505258eae4d8560d31b60089290910191820152600e01949350505050565b643230ba309d60d91b815260006155ac6005830185615452565b670ed8985cd94d8d0b60c21b815283516155cd816008840160208801614993565b7f293b6261636b67726f756e642d7265706561743a6e6f2d7265706561743b6261600892909101918201527f636b67726f756e642d73697a653a636f6e7461696e3b6261636b67726f756e6460288201527f2d706f736974696f6e3a63656e7465723b696d6167652d72656e646572696e6760488201527f3a2d7765626b69742d6f7074696d697a652d636f6e74726173743b2d6d732d6960688201527f6e746572706f6c6174696f6e2d6d6f64653a6e6561726573742d6e656967686260888201527f6f723b696d6167652d72656e646572696e673a2d6d6f7a2d63726973702d656460a88201527f6765733b696d6167652d72656e646572696e673a706978656c617465643b223e60c8820152651e17b9bb339f60d11b60e882015260ee01949350505050565b7f646174613a696d6167652f7376672b786d6c3b6261736536342c00000000000081526000825161572e81601a850160208701614993565b91909101601a0192915050565b60008235603e1983360301811261575157600080fd5b9190910192915050565b6000808335601e1984360301811261577257600080fd5b8301803591506001600160401b0382111561578c57600080fd5b6020019150600581901b3603821315610eb957600080fd5b6000602082840312156157b657600080fd5b8151610cec81614c2b565b683d913730b6b2911d1160b91b815283516000906157e6816009850160208901614993565b61202360f01b600991840191820152845161580881600b840160208901614993565b701116113232b9b1b934b83a34b7b7111d1160791b600b9290910191820152615834601c820185615452565b61088b60f21b81526002019695505050505050565b701130b734b6b0ba34b7b72fbab936111d1160791b8152600061586f6011830184615452565b61227d60f01b81526002019392505050565b681134b6b0b3b2911d1160b91b8152600061589f6009830187615452565b85516158af818360208a01614993565b643f646e613d60d81b910190815284516158d0816005840160208901614993565b6a266e6574776f726b49643d60a81b6005929091019182015283516158fc816010840160208801614993565b61088b60f21b601092909101918201526012019695505050505050565b7f3c7376672077696474683d223130302522206865696768743d2231303025222081527f76696577426f783d2230203020313230302031323030222076657273696f6e3d60208201527f22312e322220786d6c6e733d22687474703a2f2f7777772e77332e6f72672f3260408201527f3030302f737667223e3c696d6167652077696474683d2231323030222068656960608201527033b43a1e91189918181110343932b31e9160791b6080820152600082516159dd816091850160208701614993565b6f111f1e17b4b6b0b3b29f1e17b9bb339f60811b609193909101928301525060a101919050565b6d1134b6b0b3b2afb230ba30911d1160911b81528151600090615a2e81600e850160208701614993565b61088b60f21b600e939091019283015250601001919050565b6c1130ba3a3934b13aba32b9911d60991b81528151600090615a7081600d850160208701614993565b607d60f81b600d939091019283015250600e01919050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000815260008251615ac081601d850160208701614993565b91909101601d0192915050565b6000823560de1983360301811261575157600080fd5b600060018201615af557615af56153ab565b5060010190565b60208082526034908201527f455243373231415f5f496e697469616c697a61626c653a20636f6e7472616374604082015273206973206e6f7420696e697469616c697a696e6760601b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60ff8181168382160290811690818114615bb757615bb76153ab565b5092915050565b60ff8281168282160390811115610bb357610bb36153ab565b60ff8181168382160190811115610bb357610bb36153ab565b600060ff821660ff8103615c0657615c066153ab565b60010192915050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090615c42908301846149b7565b9695505050505050565b600060208284031215615c5e57600080fd5b8151610cec8161496056fe68747470733a2f2f7777772e3437363261726d6164612e636f6d2f547765726b5f5046505f7072655f72657665616c5f3c7376672077696474683d223132303022206865696768743d2231323030222076696577426f783d2230203020313230302031323030222076657273696f6e3d22312e322220786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207374796c653d226261636b67726f756e642d696d6167653a75726c28ee151c8401928dc223602bb187aff91b9a56c7cae5476ef1b3287b085a16c85fa2646970667358221220839e902bab60e963e28117c547d29cc18dd74e14487544bbef333d19f55f410d64736f6c63430008110033