{
  "_format": "hh-sol-artifact-1",
  "contractName": "ERC721FullBurn",
  "sourceName": "contracts/token/ERC721/preset/ERC721FullBurn.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "tokenName",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "tokenSymbol",
          "type": "string"
        },
        {
          "internalType": "contract ITokenMetadataResolver",
          "name": "metadataResolver",
          "type": "address"
        },
        {
          "internalType": "contract IOperatorFilterRegistry",
          "name": "filterRegistry",
          "type": "address"
        },
        {
          "internalType": "contract IForwarderRegistry",
          "name": "forwarderRegistry",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "percentage",
          "type": "uint256"
        }
      ],
      "name": "ERC2981IncorrectRoyaltyPercentage",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ERC2981IncorrectRoyaltyReceiver",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ERC721BalanceOfAddressZero",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "ERC721ExistingToken",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ERC721MintToAddressZero",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "ERC721NonApprovedForApproval",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "ERC721NonApprovedForTransfer",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "ERC721NonExistingToken",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "ERC721NonOwnedToken",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "ERC721SafeTransferRejected",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "ERC721SelfApproval",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "ERC721SelfApprovalForAll",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ERC721TransferToAddressZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "FailedCall",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "IllegalInterfaceId",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InconsistentArrayLengths",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenContract",
          "type": "address"
        }
      ],
      "name": "IncorrectTokenContractType",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "balance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "needed",
          "type": "uint256"
        }
      ],
      "name": "InsufficientBalance",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "NotContractOwner",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "NotRoleHolder",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "OperatorNotAllowed",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "SafeERC20FailedOperation",
      "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": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "RoleGranted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "RoleRevoked",
      "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": [],
      "name": "MINTER_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "ROYALTY_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": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "balance",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "uint256[]",
          "name": "tokenIds",
          "type": "uint256[]"
        }
      ],
      "name": "batchBurnFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256[]",
          "name": "tokenIds",
          "type": "uint256[]"
        }
      ],
      "name": "batchMint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256[]",
          "name": "tokenIds",
          "type": "uint256[]"
        }
      ],
      "name": "batchTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "burnFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "recipients",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "tokenIds",
          "type": "uint256[]"
        }
      ],
      "name": "deliver",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "forwarderRegistry",
      "outputs": [
        {
          "internalType": "contract IForwarderRegistry",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "getApproved",
      "outputs": [
        {
          "internalType": "address",
          "name": "approved",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "grantRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasRole",
      "outputs": [
        {
          "internalType": "bool",
          "name": "hasRole_",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "isApprovedForAll",
      "outputs": [
        {
          "internalType": "bool",
          "name": "approvedForAll",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "forwarder",
          "type": "address"
        }
      ],
      "name": "isTrustedForwarder",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "metadataResolver",
      "outputs": [
        {
          "internalType": "contract ITokenMetadataResolver",
          "name": "tokenMetadataResolver",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "mint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "tokenName",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "operatorFilterRegistry",
      "outputs": [
        {
          "internalType": "contract IOperatorFilterRegistry",
          "name": "",
          "type": "address"
        }
      ],
      "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": "tokenOwner",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "accounts",
          "type": "address[]"
        },
        {
          "internalType": "contract IERC20[]",
          "name": "tokens",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        }
      ],
      "name": "recoverERC20s",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "accounts",
          "type": "address[]"
        },
        {
          "internalType": "contract IERC721[]",
          "name": "contracts",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "tokenIds",
          "type": "uint256[]"
        }
      ],
      "name": "recoverERC721s",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address payable[]",
          "name": "accounts",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        }
      ],
      "name": "recoverETH",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "renounceRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "revokeRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "salePrice",
          "type": "uint256"
        }
      ],
      "name": "royaltyInfo",
      "outputs": [
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "royaltyAmount",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "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": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "setApprovalForAll",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "percentage",
          "type": "uint256"
        }
      ],
      "name": "setRoyaltyPercentage",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        }
      ],
      "name": "setRoyaltyReceiver",
      "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": "tokenSymbol",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "tokenURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "uri",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IOperatorFilterRegistry",
          "name": "registry",
          "type": "address"
        }
      ],
      "name": "updateOperatorFilterRegistry",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60a0604052346106195761445a803803806100198161061e565b928339810160a0828203126106195781516001600160401b0381116106195781610044918401610643565b602083015190916001600160401b03821161061957610064918401610643565b60408301519092906001600160a01b038116908190036106195760608201516001600160a01b03811692908390036106195760800151926001600160a01b038416840361061957336105ba575b7fca9d3e17f264b0f3984e2634e94adb37fa3e6a8103f06aeae6fa59e21c769f5d60208190527fa53d5a615b1d5279f1a6647c5c0f31bf064b1e70af135676a4a96aeaeb691a2f805460ff1990811660019081179092557f8ed2355fc3f859d445b81332ba1875c675be71b9fe1bab0a25be6436696b0ec780548216831790557f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd3080546001600160a01b03191690961790955563f3993d1160e01b6000527f98ea984a1dd4b0fbb2764a2a70a93d7e6137ea3c70db196cc96460f50c0d1a1f8054909516179093558051906001600160401b0382116104905760008051602061441a8339815191525490600182811c921680156105b0575b60208310146104705781601f849311610533575b50602090601f83116001146104b1576000926104a6575b50508160011b916000199060031b1c19161760008051602061441a833981519152555b83516001600160401b0381116104905760008051602061443a83398151915254600181811c91168015610486575b602082101461047057601f81116103fe575b50602094601f821160011461037d57948192939495600092610372575b50508160011b916000199060031b1c19161760008051602061443a833981519152555b7f7ea68fd2dcf1c056b94db6a0a537aa80d26fa9ab1eacd85da1ba0b61b7e7a8a680546001600160a01b031916919091179055635b5e139f60e01b60009081526020919091526040808220805460ff199081166001908117909255638e773e1360e01b84528284208054821683179055634ed2f41960e11b84528284208054821683179055638b8b4ef560e01b8452828420805482168317905563152a902d60e11b84529282902080549093161790915560809190915251613d6b90816106af82396080518181816127a1015281816131e30152613a670152f35b015190503880610274565b601f1982169560008051602061443a833981519152600052806000209160005b8881106103e6575083600195969798106103cd575b505050811b0160008051602061443a83398151915255610297565b015160001960f88460031b161c191690553880806103b2565b9192602060018192868501518155019401920161039d565b60008051602061443a8339815191526000527fc39bad3db5d56dccf839bc8a79759b3192b97757d993f7663c9998f4fbefc8a1601f830160051c81019160208410610466575b601f0160051c01905b81811061045a5750610257565b6000815560010161044d565b9091508190610444565b634e487b7160e01b600052602260045260246000fd5b90607f1690610245565b634e487b7160e01b600052604160045260246000fd5b0151905038806101f4565b60008051602061441a83398151915260009081528281209350601f198516905b81811061051b5750908460019594939210610502575b505050811b0160008051602061441a83398151915255610217565b015160001960f88460031b161c191690553880806104e7565b929360206001819287860151815501950193016104d1565b60008051602061441a8339815191526000529091507f565de0cfbb8a3f70c938db1afc5562690ff7c55773c7234a649300f58e3b30bc601f840160051c810191602085106105a6575b90601f859493920160051c01905b81811061059757506101dd565b6000815584935060010161058a565b909150819061057c565b91607f16916101c9565b7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc80546001600160a01b0319163390811790915560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a36100b1565b600080fd5b6040519190601f01601f191682016001600160401b0381118382101761049057604052565b81601f82011215610619578051906001600160401b03821161049057610672601f8301601f191660200161061e565b92828452602083830101116106195760005b82811061069957505060206000918301015290565b8060208092840101518282870101520161068456fe6080604052600436101561001257600080fd5b60003560e01c806301ffc9a714612dab57806306fdde0314612d50578063081812fc14612cf3578063095ea7b314612a5f578063114ba8ee1461296057806323b872dd146128b85780632a55205a146127c55780632b4c9f16146127565780632f2ff15d146125ca57806340c10f191461253a57806342842e0e1461246a5780634684d7e9146122d1578063572b6c051461228657806361ba27da1461216a5780636352211e146120ef57806370a082311461202557806373c8a95814611e7557806379cc679014611bd75780638832e6e3146119895780638bb9c5bf1461181a5780638da5cb5b146117a95780638dc251e31461167c57806391d14854146115e457806395d89b41146115755780639da5e8321461144b578063a0c76f62146113da578063a22cb4651461127a578063b0ccc31e14611209578063b88d4fde146110e7578063c3666c3614610eaa578063c87b56dd14610cf7578063d539139314610c9e578063d547741f14610b15578063e1a8bf2c14610ad9578063e985e9c514610a25578063f247296514610800578063f2fde38b1461070c578063f3993d11146103865763f7ba94bd146101c957600080fd5b3461032a576101d73661308c565b90917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff80610218613a50565b9254169116908103610359575081810361032f5760005b81811061023857005b610243818387613815565b3573ffffffffffffffffffffffffffffffffffffffff811680910361032a5761026d828587613815565b35908147106102f857600080809381935af13d156102f0573d906102908261322b565b9161029e60405193846130f8565b82523d6000602084013e5b156102b7575060010161022f565b8051156102c657602081519101fd5b7fd6bda2750000000000000000000000000000000000000000000000000000000060005260046000fd5b6060906102a9565b50477fcf4791810000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b600080fd5b7f658253360000000000000000000000000000000000000000000000000000000060005260046000fd5b7f2ef4875e0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b3461032a5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a576103bd612e77565b6103c5612e9a565b9060443567ffffffffffffffff811161032a576103e6903690600401612f2f565b926103ef613a50565b907f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd308273ffffffffffffffffffffffffffffffffffffffff861673ffffffffffffffffffffffffffffffffffffffff8216036106fc575b505073ffffffffffffffffffffffffffffffffffffffff7fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c091169384156106d2576104948382849694613b64565b9373ffffffffffffffffffffffffffffffffffffffff600095159216945b87811061051757878787818114158061050e575b6104cc57005b60009081527fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c16020526040808220805485900390559181522080549091019055005b508215156104c6565b610522818986613815565b35806000528260205260406000205473ffffffffffffffffffffffffffffffffffffffff811680156106a4578803610672578461059b575b509081600192600052836020528860406000205588887fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4016104b2565b740100000000000000000000000000000000000000001615801561060f575b6105c4578961055a565b8673ffffffffffffffffffffffffffffffffffffffff877fa4a3018b000000000000000000000000000000000000000000000000000000006000521660045260245260445260646000fd5b50806000527fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c260205273ffffffffffffffffffffffffffffffffffffffff6040600020541673ffffffffffffffffffffffffffffffffffffffff871614156105ba565b50867f14dbb5360000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b827fdd5604750000000000000000000000000000000000000000000000000000000060005260045260246000fd5b7f86c870670000000000000000000000000000000000000000000000000000000060005260046000fd5b61070591613965565b8582610446565b3461032a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a57610743612e77565b7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc9061076d613a50565b9073ffffffffffffffffffffffffffffffffffffffff808454169216828103610359575073ffffffffffffffffffffffffffffffffffffffff16918282036107b157005b827fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790557f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b3461032a5761080e36612f60565b917fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c091610839613a50565b92610845848483613b64565b9373ffffffffffffffffffffffffffffffffffffffff600095159416945b8681106108aa5786868161087357005b6000527fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c16020526040600020908154039055600080f35b6108b5818886613815565b35806000528360205260406000205473ffffffffffffffffffffffffffffffffffffffff811680156106a4578803610672578661094e575b509081600192600052846020527fdead0000000000000000000000000000000000000000000000000000000000006040600020556000887fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8280a401610863565b74010000000000000000000000000000000000000000161580156109c2575b61097757886108ed565b8673ffffffffffffffffffffffffffffffffffffffff847fa4a3018b000000000000000000000000000000000000000000000000000000006000521660045260245260445260646000fd5b50806000527fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c260205273ffffffffffffffffffffffffffffffffffffffff6040600020541673ffffffffffffffffffffffffffffffffffffffff8416141561096d565b3461032a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a57610a5c612e77565b73ffffffffffffffffffffffffffffffffffffffff610a79612e9a565b91166000527fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c360205273ffffffffffffffffffffffffffffffffffffffff60406000209116600052602052602060ff604060002054166040519015158152f35b3461032a5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a576020604051620186a08152f35b3461032a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a57600435610b4f612e9a565b610b57613a50565b9173ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc541673ffffffffffffffffffffffffffffffffffffffff841690810361035957507fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b228160005280602052604060002073ffffffffffffffffffffffffffffffffffffffff841660005260205260ff60406000205416610c0957005b60008281526020918252604080822073ffffffffffffffffffffffffffffffffffffffff9586168084529084529181902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905580519384529183015291909216908201527ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080606081015b0390a1005b3461032a5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a5760206040517f6d696e74657200000000000000000000000000000000000000000000000000008152f35b3461032a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a57610de96000600435610d58817fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c06137ba565b5073ffffffffffffffffffffffffffffffffffffffff7f7ea68fd2dcf1c056b94db6a0a537aa80d26fa9ab1eacd85da1ba0b61b7e7a8a6541660405180809581947ff724dad700000000000000000000000000000000000000000000000000000000835230600484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03915afa908115610e9e57600091610e16575b60405160208082528190610e1290820185612e34565b0390f35b3d8083833e610e2581836130f8565b810190602081830312610e965780519067ffffffffffffffff8211610e9a570181601f82011215610e9657805192610e5c8461322b565b92610e6a60405194856130f8565b84845260208584010111610e935750610e1292610e8d9160208085019101612e11565b90610dfc565b80fd5b8280fd5b8380fd5b6040513d6000823e3d90fd5b3461032a57610eb836612fcf565b9094929390917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff80610efd613a50565b925416911690810361035957508082148015906110dd575b61032f5760005b828110610f2557005b73ffffffffffffffffffffffffffffffffffffffff610f4d610f4883858a613815565b613825565b166040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f80ac58cd000000000000000000000000000000000000000000000000000000006004820152602081602481855afa908115610e9e576000916110af575b5015611082575073ffffffffffffffffffffffffffffffffffffffff610fdc610f4883858a613815565b1690610fec610f48828689613815565b91610ff882878b613815565b3592813b1561032a57606473ffffffffffffffffffffffffffffffffffffffff916000809460405197889586947f42842e0e00000000000000000000000000000000000000000000000000000000865230600487015216602485015260448401525af1918215610e9e57600192611071575b5001610f1c565b600061107c916130f8565b8861106a565b7f986b9f1f0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b6110d0915060203d81116110d6575b6110c881836130f8565b810190613846565b89610fb2565b503d6110be565b5082821415610f15565b3461032a5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a5761111e612e77565b611126612e9a565b60443560643567ffffffffffffffff811161032a5761114990369060040161305e565b929093611154613a50565b937f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd308573ffffffffffffffffffffffffffffffffffffffff841673ffffffffffffffffffffffffffffffffffffffff8216036111f9575b50506111da848484887fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c06133ba565b823b6111e257005b6111f7956111f1913691613265565b93613be4565b005b61120291613965565b86856111ab565b3461032a5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a57602073ffffffffffffffffffffffffffffffffffffffff7f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd305416604051908152f35b3461032a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a576112b1612e77565b602435908115159182810361032a576113ab575b73ffffffffffffffffffffffffffffffffffffffff806112e3613a50565b1691169181831461137d5760207f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3191836000527fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c38252604060002085600052825260406000207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541660ff8316179055604051908152a3005b507fe4215c6a0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b6113d5817f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd30613965565b6112c5565b3461032a5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a57602073ffffffffffffffffffffffffffffffffffffffff7f7ea68fd2dcf1c056b94db6a0a537aa80d26fa9ab1eacd85da1ba0b61b7e7a8a65416604051908152f35b3461032a576114593661308c565b61148b7fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b22611485613a50565b906135f3565b7fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c0926114b681613168565b946114c460405196876130f8565b818652602086019160051b81019036821161032a57915b81831061154857505050906114f1913691613180565b918051918351830361032f5760005b83811061150957005b8061154273ffffffffffffffffffffffffffffffffffffffff61152e60019487613777565b511661153a8389613777565b5190856136b5565b01611500565b823573ffffffffffffffffffffffffffffffffffffffff8116810361032a578152602092830192016114db565b3461032a5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a57610e126115d07f7ea68fd2dcf1c056b94db6a0a537aa80d26fa9ab1eacd85da1ba0b61b7e7a8a561385e565b604051918291602083526020830190612e34565b3461032a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a5761161b612e9a565b7fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b2260043560005260205273ffffffffffffffffffffffffffffffffffffffff60406000209116600052602052602060ff604060002054166040519015158152f35b3461032a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a576116b3612e77565b7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff806116f2613a50565b925416911690810361035957507f2c0cf10337caabbd02dcf226f05f5fd19a0919a41a8df8958c39b800078268579073ffffffffffffffffffffffffffffffffffffffff81161561177f5773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055600080f35b7f16de0c800000000000000000000000000000000000000000000000000000000060005260046000fd5b3461032a5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a57602073ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc5416604051908152f35b3461032a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a577fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b22600435611875613a50565b908060005282602052604060002073ffffffffffffffffffffffffffffffffffffffff831660005260205260ff60406000205416156119415760008181526020938452604080822073ffffffffffffffffffffffffffffffffffffffff949094168083529385529081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690558051918252928101829052918201527ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b908060608101610c99565b73ffffffffffffffffffffffffffffffffffffffff92507f7aa72882000000000000000000000000000000000000000000000000000000006000526004521660245260446000fd5b3461032a5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a576119c0612e77565b6024359060443567ffffffffffffffff811161032a576119e490369060040161305e565b91611a117fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b22611485613a50565b611a518482611a4b7fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c095611a43613a50565b973691613265565b946136b5565b803b611a5957005b73ffffffffffffffffffffffffffffffffffffffff806020921693611ac660405194859384937f150b7a0200000000000000000000000000000000000000000000000000000000855216600484015260006024840152876044840152608060648401526084830190612e34565b03816000865af1908115610e9e57600091611b58575b507fffffffff000000000000000000000000000000000000000000000000000000007f150b7a0200000000000000000000000000000000000000000000000000000000911603611b2857005b7fc215a7a10000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b6020813d602011611bcf575b81611b71602093836130f8565b81010312611bcb5751907fffffffff0000000000000000000000000000000000000000000000000000000082168203610e9357507fffffffff00000000000000000000000000000000000000000000000000000000611adc565b5080fd5b3d9150611b64565b3461032a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a57611c0e612e77565b602435907fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c0611c3b613a50565b836000528160205260406000205473ffffffffffffffffffffffffffffffffffffffff8116938415611e475773ffffffffffffffffffffffffffffffffffffffff8116809503611e155782611c909185613b64565b15611d3e575b84600085858383526020527fdead00000000000000000000000000000000000000000000000000000000000060408320558082527fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c1602052604082207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81540190557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8280a4005b7401000000000000000000000000000000000000000016158015611db2575b611d675780611c96565b73ffffffffffffffffffffffffffffffffffffffff91507fa4a3018b000000000000000000000000000000000000000000000000000000006000521660045260245260445260646000fd5b50836000527fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c260205273ffffffffffffffffffffffffffffffffffffffff6040600020541673ffffffffffffffffffffffffffffffffffffffff82161415611d5d565b85857f14dbb5360000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b857fdd5604750000000000000000000000000000000000000000000000000000000060005260045260246000fd5b3461032a57611e8336612fcf565b929392917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff80611ec6613a50565b9254169116908103610359575080841480159061201b575b61032f5760005b848110611eee57005b611ef9818388613815565b3573ffffffffffffffffffffffffffffffffffffffff81169081810361032a576000602091611f2c610f48868b8e613815565b82611f96611fc2611f3e898d8d613815565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000089820190815273ffffffffffffffffffffffffffffffffffffffff9096166024820152903560448201529182906064820190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826130f8565b51925af115610e9e576000513d6120125750803b155b611fe55750600101611ee5565b7f5274afe70000000000000000000000000000000000000000000000000000000060005260045260246000fd5b60011415611fd8565b5082841415611ede565b3461032a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a5761205c612e77565b73ffffffffffffffffffffffffffffffffffffffff8116156120c55773ffffffffffffffffffffffffffffffffffffffff166000527fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c16020526020604060002054604051908152f35b7faefbce4e0000000000000000000000000000000000000000000000000000000060005260046000fd5b3461032a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a57602061214c6004357fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c06137ba565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b3461032a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a576004357fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff806121db613a50565b925416911690810361035957507f2c0cf10337caabbd02dcf226f05f5fd19a0919a41a8df8958c39b8000782685790620186a0811161225957815473ffffffffffffffffffffffffffffffffffffffff1660a09190911b7fffffffffffffffffffffffff000000000000000000000000000000000000000016179055005b7fac0404080000000000000000000000000000000000000000000000000000000060005260045260246000fd5b3461032a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a5760206122c76122c2612e77565b6131cc565b6040519015158152f35b3461032a5761235073ffffffffffffffffffffffffffffffffffffffff6122f736612f60565b929193906123277fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b22611485613a50565b7fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c0933691613180565b92169081156124405782519260005b8481106123a0575050506000527fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c16020526040600020908154019055600080f35b6123aa8183613777565b51806000528360205273ffffffffffffffffffffffffffffffffffffffff6040600020541661241357908160019260005284602052856040600020558560007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a40161235f565b7f753eceac0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b7f7851b9cd0000000000000000000000000000000000000000000000000000000060005260046000fd5b3461032a5761247836612ebd565b612480613a50565b917f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd308373ffffffffffffffffffffffffffffffffffffffff861673ffffffffffffffffffffffffffffffffffffffff82160361252a575b5050612506828286867fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c06133ba565b803b61250e57005b6111f793604051936125216020866130f8565b60008552613be4565b61253391613965565b84836124d7565b3461032a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a576111f7612574612e77565b6125a07fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b22611485613a50565b602435907fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c06136b5565b3461032a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a57600435612604612e9a565b61260c613a50565b9173ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc541673ffffffffffffffffffffffffffffffffffffffff841690810361035957507fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b228160005280602052604060002073ffffffffffffffffffffffffffffffffffffffff841660005260205260ff60406000205416156126bf57005b60008281526020918252604080822073ffffffffffffffffffffffffffffffffffffffff9586168084529084529181902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580519384529183015291909216908201527f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d908060608101610c99565b3461032a5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461032a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a5773ffffffffffffffffffffffffffffffffffffffff6024357f2c0cf10337caabbd02dcf226f05f5fd19a0919a41a8df8958c39b8000782685754908160a01c90801580156128b0575b1561287a575050610e1260005b60405193849316836020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b610e1291620186a082101561289d5761289790620186a0926135b1565b0461284a565b620186a06128ab92046135b1565b61284a565b50811561283d565b3461032a576111f76128c936612ebd565b916128d2613a50565b7f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd308173ffffffffffffffffffffffffffffffffffffffff841673ffffffffffffffffffffffffffffffffffffffff821603612950575b50507fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c06133ba565b61295991613965565b8581612928565b3461032a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a5760043573ffffffffffffffffffffffffffffffffffffffff8116810361032a577fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff806129ee613a50565b9254169116908103610359575073ffffffffffffffffffffffffffffffffffffffff7f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd3091167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055600080f35b3461032a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a57612a96612e77565b6024359073ffffffffffffffffffffffffffffffffffffffff8116908115908115612cc3575b507fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c0612ae6613a50565b9184600052816020526040600020549073ffffffffffffffffffffffffffffffffffffffff8216938415612c9557848614612c6757612b26818686613b64565b15612c1b575015612b8a577401000000000000000000000000000000000000000016612b76575b505b7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600080a4005b836000526020528060406000205583612b4d565b90740100000000000000000000000000000000000000008217809203612c07575b5050826000527fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c26020526040600020827fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055612b4f565b846000526020526040600020558380612bab565b8473ffffffffffffffffffffffffffffffffffffffff88927fc7563a18000000000000000000000000000000000000000000000000000000006000521660045260245260445260646000fd5b847fb7fdc0100000000000000000000000000000000000000000000000000000000060005260045260246000fd5b867fdd5604750000000000000000000000000000000000000000000000000000000060005260045260246000fd5b612ced907f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd30613965565b83612abc565b3461032a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a57602061214c6004357fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c061334b565b3461032a5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a57610e126115d07f7ea68fd2dcf1c056b94db6a0a537aa80d26fa9ab1eacd85da1ba0b61b7e7a8a461385e565b3461032a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a576004357fffffffff000000000000000000000000000000000000000000000000000000008116810361032a576122c760209161329c565b60005b838110612e245750506000910152565b8181015183820152602001612e14565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093612e7081518092818752878088019101612e11565b0116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361032a57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361032a57565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc606091011261032a5760043573ffffffffffffffffffffffffffffffffffffffff8116810361032a579060243573ffffffffffffffffffffffffffffffffffffffff8116810361032a579060443590565b9181601f8401121561032a5782359167ffffffffffffffff831161032a576020808501948460051b01011161032a57565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83011261032a5760043573ffffffffffffffffffffffffffffffffffffffff8116810361032a57916024359067ffffffffffffffff821161032a57612fcb91600401612f2f565b9091565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82011261032a5760043567ffffffffffffffff811161032a578161301891600401612f2f565b9290929160243567ffffffffffffffff811161032a578161303b91600401612f2f565b929092916044359067ffffffffffffffff821161032a57612fcb91600401612f2f565b9181601f8401121561032a5782359167ffffffffffffffff831161032a576020838186019501011161032a57565b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82011261032a5760043567ffffffffffffffff811161032a57816130d591600401612f2f565b929092916024359067ffffffffffffffff821161032a57612fcb91600401612f2f565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761313957604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b67ffffffffffffffff81116131395760051b60200190565b92919061318c81613168565b9361319a60405195866130f8565b602085838152019160051b810192831161032a57905b8282106131bc57505050565b81358152602091820191016131b0565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169081156132245773ffffffffffffffffffffffffffffffffffffffff161490565b5050600090565b67ffffffffffffffff811161313957601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926132718261322b565b9161327f60405193846130f8565b82948184528183011161032a578281602093846000960137010152565b7fffffffff00000000000000000000000000000000000000000000000000000000167fffffffff000000000000000000000000000000000000000000000000000000008114613345577f01ffc9a700000000000000000000000000000000000000000000000000000000811461333f576000527fca9d3e17f264b0f3984e2634e94adb37fa3e6a8103f06aeae6fa59e21c769f5d60205260ff6040600020541690565b50600190565b50600090565b816000528060205260406000205473ffffffffffffffffffffffffffffffffffffffff8116156106a457740100000000000000000000000000000000000000001615613224576002916000520160205273ffffffffffffffffffffffffffffffffffffffff6040600020541690565b909273ffffffffffffffffffffffffffffffffffffffff169283156106d257846000528160205260406000205473ffffffffffffffffffffffffffffffffffffffff8116938415612c955773ffffffffffffffffffffffffffffffffffffffff811680950361357f578261342e9185613b64565b156134c4575b5050836000528060205282604060002055828203613475575b507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4565b600101816000528060205260406000207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8154019055826000526020526040600020600181540190553861344d565b7401000000000000000000000000000000000000000016158015613539575b6134ed5780613434565b8273ffffffffffffffffffffffffffffffffffffffff86927fa4a3018b000000000000000000000000000000000000000000000000000000006000521660045260245260445260646000fd5b50846000526002820160205273ffffffffffffffffffffffffffffffffffffffff6040600020541673ffffffffffffffffffffffffffffffffffffffff821614156134e3565b86857f14dbb5360000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b818102929181159184041417156135c457565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f6d696e7465720000000000000000000000000000000000000000000000000000600052602052604060002073ffffffffffffffffffffffffffffffffffffffff821660005260205260ff604060002054161561364d5750565b73ffffffffffffffffffffffffffffffffffffffff907f7aa72882000000000000000000000000000000000000000000000000000000006000527f6d696e74657200000000000000000000000000000000000000000000000000006004521660245260446000fd5b9073ffffffffffffffffffffffffffffffffffffffff1690811561244057826000528060205273ffffffffffffffffffffffffffffffffffffffff6040600020541661374957600190836000528060205282604060002055826000520160205260406000206001815401905560007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4565b827f753eceac0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b805182101561378b5760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b8160005260205273ffffffffffffffffffffffffffffffffffffffff604060002054169081156137e8575090565b7fdd5604750000000000000000000000000000000000000000000000000000000060005260045260246000fd5b919081101561378b5760051b0190565b3573ffffffffffffffffffffffffffffffffffffffff8116810361032a5790565b9081602091031261032a5751801515810361032a5790565b906040519160008154918260011c9260018116801561395b575b60208510811461392e578487528693929181156138ee57506001146138a7575b506138a5925003836130f8565b565b90506000929192526020600020906000915b8183106138d25750509060206138a59282010138613898565b60209193508060019154838589010152019101909184926138b9565b602093506138a59592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b82010138613898565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f1693613878565b5473ffffffffffffffffffffffffffffffffffffffff169081151580613a46575b61398e575050565b602073ffffffffffffffffffffffffffffffffffffffff916044604051809481937fc617113400000000000000000000000000000000000000000000000000000000835230600484015216958660248301525afa908115610e9e57600091613a27575b50156139fa5750565b7fede71dcc0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b613a40915060203d6020116110d6576110c881836130f8565b386139f1565b50813b1515613986565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168015613b55573233148015613b5a575b613b55577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c90803314908115613adb575b50613ad857503390565b90565b60649150602090604051928380927f019a20280000000000000000000000000000000000000000000000000000000082528660048301523360248301523060448301525afa908115610e9e57600091613b36575b5038613ace565b613b4f915060203d6020116110d6576110c881836130f8565b38613b2f565b503390565b5060183610613a97565b73ffffffffffffffffffffffffffffffffffffffff8083169084161492918315613b8f575b50505090565b600392935073ffffffffffffffffffffffffffffffffffffffff166000520160205273ffffffffffffffffffffffffffffffffffffffff6040600020911660005260205260ff60406000205416388080613b89565b73ffffffffffffffffffffffffffffffffffffffff90613c56826020949597969716958360405196879586957f150b7a02000000000000000000000000000000000000000000000000000000008752166004860152166024840152876044840152608060648401526084830190612e34565b03816000865af1908115610e9e57600091613cba575b507fffffffff000000000000000000000000000000000000000000000000000000007f150b7a0200000000000000000000000000000000000000000000000000000000911603611b28575050565b6020813d602011613d2d575b81613cd3602093836130f8565b81010312611bcb5751907fffffffff0000000000000000000000000000000000000000000000000000000082168203610e9357507fffffffff00000000000000000000000000000000000000000000000000000000613c6c565b3d9150613cc656fea26469706673582212205cfff9ced06c1ce897aefcf3c71c5f1a96e4be17b88fb198b9294090c90e04b764736f6c634300081e00337ea68fd2dcf1c056b94db6a0a537aa80d26fa9ab1eacd85da1ba0b61b7e7a8a47ea68fd2dcf1c056b94db6a0a537aa80d26fa9ab1eacd85da1ba0b61b7e7a8a5",
  "deployedBytecode": "0x6080604052600436101561001257600080fd5b60003560e01c806301ffc9a714612dab57806306fdde0314612d50578063081812fc14612cf3578063095ea7b314612a5f578063114ba8ee1461296057806323b872dd146128b85780632a55205a146127c55780632b4c9f16146127565780632f2ff15d146125ca57806340c10f191461253a57806342842e0e1461246a5780634684d7e9146122d1578063572b6c051461228657806361ba27da1461216a5780636352211e146120ef57806370a082311461202557806373c8a95814611e7557806379cc679014611bd75780638832e6e3146119895780638bb9c5bf1461181a5780638da5cb5b146117a95780638dc251e31461167c57806391d14854146115e457806395d89b41146115755780639da5e8321461144b578063a0c76f62146113da578063a22cb4651461127a578063b0ccc31e14611209578063b88d4fde146110e7578063c3666c3614610eaa578063c87b56dd14610cf7578063d539139314610c9e578063d547741f14610b15578063e1a8bf2c14610ad9578063e985e9c514610a25578063f247296514610800578063f2fde38b1461070c578063f3993d11146103865763f7ba94bd146101c957600080fd5b3461032a576101d73661308c565b90917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff80610218613a50565b9254169116908103610359575081810361032f5760005b81811061023857005b610243818387613815565b3573ffffffffffffffffffffffffffffffffffffffff811680910361032a5761026d828587613815565b35908147106102f857600080809381935af13d156102f0573d906102908261322b565b9161029e60405193846130f8565b82523d6000602084013e5b156102b7575060010161022f565b8051156102c657602081519101fd5b7fd6bda2750000000000000000000000000000000000000000000000000000000060005260046000fd5b6060906102a9565b50477fcf4791810000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b600080fd5b7f658253360000000000000000000000000000000000000000000000000000000060005260046000fd5b7f2ef4875e0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b3461032a5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a576103bd612e77565b6103c5612e9a565b9060443567ffffffffffffffff811161032a576103e6903690600401612f2f565b926103ef613a50565b907f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd308273ffffffffffffffffffffffffffffffffffffffff861673ffffffffffffffffffffffffffffffffffffffff8216036106fc575b505073ffffffffffffffffffffffffffffffffffffffff7fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c091169384156106d2576104948382849694613b64565b9373ffffffffffffffffffffffffffffffffffffffff600095159216945b87811061051757878787818114158061050e575b6104cc57005b60009081527fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c16020526040808220805485900390559181522080549091019055005b508215156104c6565b610522818986613815565b35806000528260205260406000205473ffffffffffffffffffffffffffffffffffffffff811680156106a4578803610672578461059b575b509081600192600052836020528860406000205588887fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4016104b2565b740100000000000000000000000000000000000000001615801561060f575b6105c4578961055a565b8673ffffffffffffffffffffffffffffffffffffffff877fa4a3018b000000000000000000000000000000000000000000000000000000006000521660045260245260445260646000fd5b50806000527fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c260205273ffffffffffffffffffffffffffffffffffffffff6040600020541673ffffffffffffffffffffffffffffffffffffffff871614156105ba565b50867f14dbb5360000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b827fdd5604750000000000000000000000000000000000000000000000000000000060005260045260246000fd5b7f86c870670000000000000000000000000000000000000000000000000000000060005260046000fd5b61070591613965565b8582610446565b3461032a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a57610743612e77565b7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc9061076d613a50565b9073ffffffffffffffffffffffffffffffffffffffff808454169216828103610359575073ffffffffffffffffffffffffffffffffffffffff16918282036107b157005b827fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790557f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b3461032a5761080e36612f60565b917fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c091610839613a50565b92610845848483613b64565b9373ffffffffffffffffffffffffffffffffffffffff600095159416945b8681106108aa5786868161087357005b6000527fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c16020526040600020908154039055600080f35b6108b5818886613815565b35806000528360205260406000205473ffffffffffffffffffffffffffffffffffffffff811680156106a4578803610672578661094e575b509081600192600052846020527fdead0000000000000000000000000000000000000000000000000000000000006040600020556000887fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8280a401610863565b74010000000000000000000000000000000000000000161580156109c2575b61097757886108ed565b8673ffffffffffffffffffffffffffffffffffffffff847fa4a3018b000000000000000000000000000000000000000000000000000000006000521660045260245260445260646000fd5b50806000527fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c260205273ffffffffffffffffffffffffffffffffffffffff6040600020541673ffffffffffffffffffffffffffffffffffffffff8416141561096d565b3461032a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a57610a5c612e77565b73ffffffffffffffffffffffffffffffffffffffff610a79612e9a565b91166000527fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c360205273ffffffffffffffffffffffffffffffffffffffff60406000209116600052602052602060ff604060002054166040519015158152f35b3461032a5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a576020604051620186a08152f35b3461032a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a57600435610b4f612e9a565b610b57613a50565b9173ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc541673ffffffffffffffffffffffffffffffffffffffff841690810361035957507fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b228160005280602052604060002073ffffffffffffffffffffffffffffffffffffffff841660005260205260ff60406000205416610c0957005b60008281526020918252604080822073ffffffffffffffffffffffffffffffffffffffff9586168084529084529181902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905580519384529183015291909216908201527ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080606081015b0390a1005b3461032a5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a5760206040517f6d696e74657200000000000000000000000000000000000000000000000000008152f35b3461032a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a57610de96000600435610d58817fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c06137ba565b5073ffffffffffffffffffffffffffffffffffffffff7f7ea68fd2dcf1c056b94db6a0a537aa80d26fa9ab1eacd85da1ba0b61b7e7a8a6541660405180809581947ff724dad700000000000000000000000000000000000000000000000000000000835230600484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03915afa908115610e9e57600091610e16575b60405160208082528190610e1290820185612e34565b0390f35b3d8083833e610e2581836130f8565b810190602081830312610e965780519067ffffffffffffffff8211610e9a570181601f82011215610e9657805192610e5c8461322b565b92610e6a60405194856130f8565b84845260208584010111610e935750610e1292610e8d9160208085019101612e11565b90610dfc565b80fd5b8280fd5b8380fd5b6040513d6000823e3d90fd5b3461032a57610eb836612fcf565b9094929390917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff80610efd613a50565b925416911690810361035957508082148015906110dd575b61032f5760005b828110610f2557005b73ffffffffffffffffffffffffffffffffffffffff610f4d610f4883858a613815565b613825565b166040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f80ac58cd000000000000000000000000000000000000000000000000000000006004820152602081602481855afa908115610e9e576000916110af575b5015611082575073ffffffffffffffffffffffffffffffffffffffff610fdc610f4883858a613815565b1690610fec610f48828689613815565b91610ff882878b613815565b3592813b1561032a57606473ffffffffffffffffffffffffffffffffffffffff916000809460405197889586947f42842e0e00000000000000000000000000000000000000000000000000000000865230600487015216602485015260448401525af1918215610e9e57600192611071575b5001610f1c565b600061107c916130f8565b8861106a565b7f986b9f1f0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b6110d0915060203d81116110d6575b6110c881836130f8565b810190613846565b89610fb2565b503d6110be565b5082821415610f15565b3461032a5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a5761111e612e77565b611126612e9a565b60443560643567ffffffffffffffff811161032a5761114990369060040161305e565b929093611154613a50565b937f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd308573ffffffffffffffffffffffffffffffffffffffff841673ffffffffffffffffffffffffffffffffffffffff8216036111f9575b50506111da848484887fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c06133ba565b823b6111e257005b6111f7956111f1913691613265565b93613be4565b005b61120291613965565b86856111ab565b3461032a5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a57602073ffffffffffffffffffffffffffffffffffffffff7f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd305416604051908152f35b3461032a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a576112b1612e77565b602435908115159182810361032a576113ab575b73ffffffffffffffffffffffffffffffffffffffff806112e3613a50565b1691169181831461137d5760207f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3191836000527fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c38252604060002085600052825260406000207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541660ff8316179055604051908152a3005b507fe4215c6a0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b6113d5817f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd30613965565b6112c5565b3461032a5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a57602073ffffffffffffffffffffffffffffffffffffffff7f7ea68fd2dcf1c056b94db6a0a537aa80d26fa9ab1eacd85da1ba0b61b7e7a8a65416604051908152f35b3461032a576114593661308c565b61148b7fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b22611485613a50565b906135f3565b7fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c0926114b681613168565b946114c460405196876130f8565b818652602086019160051b81019036821161032a57915b81831061154857505050906114f1913691613180565b918051918351830361032f5760005b83811061150957005b8061154273ffffffffffffffffffffffffffffffffffffffff61152e60019487613777565b511661153a8389613777565b5190856136b5565b01611500565b823573ffffffffffffffffffffffffffffffffffffffff8116810361032a578152602092830192016114db565b3461032a5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a57610e126115d07f7ea68fd2dcf1c056b94db6a0a537aa80d26fa9ab1eacd85da1ba0b61b7e7a8a561385e565b604051918291602083526020830190612e34565b3461032a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a5761161b612e9a565b7fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b2260043560005260205273ffffffffffffffffffffffffffffffffffffffff60406000209116600052602052602060ff604060002054166040519015158152f35b3461032a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a576116b3612e77565b7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff806116f2613a50565b925416911690810361035957507f2c0cf10337caabbd02dcf226f05f5fd19a0919a41a8df8958c39b800078268579073ffffffffffffffffffffffffffffffffffffffff81161561177f5773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055600080f35b7f16de0c800000000000000000000000000000000000000000000000000000000060005260046000fd5b3461032a5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a57602073ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc5416604051908152f35b3461032a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a577fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b22600435611875613a50565b908060005282602052604060002073ffffffffffffffffffffffffffffffffffffffff831660005260205260ff60406000205416156119415760008181526020938452604080822073ffffffffffffffffffffffffffffffffffffffff949094168083529385529081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690558051918252928101829052918201527ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b908060608101610c99565b73ffffffffffffffffffffffffffffffffffffffff92507f7aa72882000000000000000000000000000000000000000000000000000000006000526004521660245260446000fd5b3461032a5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a576119c0612e77565b6024359060443567ffffffffffffffff811161032a576119e490369060040161305e565b91611a117fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b22611485613a50565b611a518482611a4b7fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c095611a43613a50565b973691613265565b946136b5565b803b611a5957005b73ffffffffffffffffffffffffffffffffffffffff806020921693611ac660405194859384937f150b7a0200000000000000000000000000000000000000000000000000000000855216600484015260006024840152876044840152608060648401526084830190612e34565b03816000865af1908115610e9e57600091611b58575b507fffffffff000000000000000000000000000000000000000000000000000000007f150b7a0200000000000000000000000000000000000000000000000000000000911603611b2857005b7fc215a7a10000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b6020813d602011611bcf575b81611b71602093836130f8565b81010312611bcb5751907fffffffff0000000000000000000000000000000000000000000000000000000082168203610e9357507fffffffff00000000000000000000000000000000000000000000000000000000611adc565b5080fd5b3d9150611b64565b3461032a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a57611c0e612e77565b602435907fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c0611c3b613a50565b836000528160205260406000205473ffffffffffffffffffffffffffffffffffffffff8116938415611e475773ffffffffffffffffffffffffffffffffffffffff8116809503611e155782611c909185613b64565b15611d3e575b84600085858383526020527fdead00000000000000000000000000000000000000000000000000000000000060408320558082527fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c1602052604082207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81540190557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8280a4005b7401000000000000000000000000000000000000000016158015611db2575b611d675780611c96565b73ffffffffffffffffffffffffffffffffffffffff91507fa4a3018b000000000000000000000000000000000000000000000000000000006000521660045260245260445260646000fd5b50836000527fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c260205273ffffffffffffffffffffffffffffffffffffffff6040600020541673ffffffffffffffffffffffffffffffffffffffff82161415611d5d565b85857f14dbb5360000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b857fdd5604750000000000000000000000000000000000000000000000000000000060005260045260246000fd5b3461032a57611e8336612fcf565b929392917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff80611ec6613a50565b9254169116908103610359575080841480159061201b575b61032f5760005b848110611eee57005b611ef9818388613815565b3573ffffffffffffffffffffffffffffffffffffffff81169081810361032a576000602091611f2c610f48868b8e613815565b82611f96611fc2611f3e898d8d613815565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000089820190815273ffffffffffffffffffffffffffffffffffffffff9096166024820152903560448201529182906064820190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826130f8565b51925af115610e9e576000513d6120125750803b155b611fe55750600101611ee5565b7f5274afe70000000000000000000000000000000000000000000000000000000060005260045260246000fd5b60011415611fd8565b5082841415611ede565b3461032a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a5761205c612e77565b73ffffffffffffffffffffffffffffffffffffffff8116156120c55773ffffffffffffffffffffffffffffffffffffffff166000527fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c16020526020604060002054604051908152f35b7faefbce4e0000000000000000000000000000000000000000000000000000000060005260046000fd5b3461032a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a57602061214c6004357fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c06137ba565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b3461032a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a576004357fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff806121db613a50565b925416911690810361035957507f2c0cf10337caabbd02dcf226f05f5fd19a0919a41a8df8958c39b8000782685790620186a0811161225957815473ffffffffffffffffffffffffffffffffffffffff1660a09190911b7fffffffffffffffffffffffff000000000000000000000000000000000000000016179055005b7fac0404080000000000000000000000000000000000000000000000000000000060005260045260246000fd5b3461032a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a5760206122c76122c2612e77565b6131cc565b6040519015158152f35b3461032a5761235073ffffffffffffffffffffffffffffffffffffffff6122f736612f60565b929193906123277fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b22611485613a50565b7fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c0933691613180565b92169081156124405782519260005b8481106123a0575050506000527fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c16020526040600020908154019055600080f35b6123aa8183613777565b51806000528360205273ffffffffffffffffffffffffffffffffffffffff6040600020541661241357908160019260005284602052856040600020558560007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a40161235f565b7f753eceac0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b7f7851b9cd0000000000000000000000000000000000000000000000000000000060005260046000fd5b3461032a5761247836612ebd565b612480613a50565b917f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd308373ffffffffffffffffffffffffffffffffffffffff861673ffffffffffffffffffffffffffffffffffffffff82160361252a575b5050612506828286867fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c06133ba565b803b61250e57005b6111f793604051936125216020866130f8565b60008552613be4565b61253391613965565b84836124d7565b3461032a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a576111f7612574612e77565b6125a07fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b22611485613a50565b602435907fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c06136b5565b3461032a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a57600435612604612e9a565b61260c613a50565b9173ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc541673ffffffffffffffffffffffffffffffffffffffff841690810361035957507fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b228160005280602052604060002073ffffffffffffffffffffffffffffffffffffffff841660005260205260ff60406000205416156126bf57005b60008281526020918252604080822073ffffffffffffffffffffffffffffffffffffffff9586168084529084529181902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580519384529183015291909216908201527f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d908060608101610c99565b3461032a5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461032a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a5773ffffffffffffffffffffffffffffffffffffffff6024357f2c0cf10337caabbd02dcf226f05f5fd19a0919a41a8df8958c39b8000782685754908160a01c90801580156128b0575b1561287a575050610e1260005b60405193849316836020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b610e1291620186a082101561289d5761289790620186a0926135b1565b0461284a565b620186a06128ab92046135b1565b61284a565b50811561283d565b3461032a576111f76128c936612ebd565b916128d2613a50565b7f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd308173ffffffffffffffffffffffffffffffffffffffff841673ffffffffffffffffffffffffffffffffffffffff821603612950575b50507fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c06133ba565b61295991613965565b8581612928565b3461032a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a5760043573ffffffffffffffffffffffffffffffffffffffff8116810361032a577fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff806129ee613a50565b9254169116908103610359575073ffffffffffffffffffffffffffffffffffffffff7f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd3091167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055600080f35b3461032a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a57612a96612e77565b6024359073ffffffffffffffffffffffffffffffffffffffff8116908115908115612cc3575b507fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c0612ae6613a50565b9184600052816020526040600020549073ffffffffffffffffffffffffffffffffffffffff8216938415612c9557848614612c6757612b26818686613b64565b15612c1b575015612b8a577401000000000000000000000000000000000000000016612b76575b505b7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600080a4005b836000526020528060406000205583612b4d565b90740100000000000000000000000000000000000000008217809203612c07575b5050826000527fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c26020526040600020827fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055612b4f565b846000526020526040600020558380612bab565b8473ffffffffffffffffffffffffffffffffffffffff88927fc7563a18000000000000000000000000000000000000000000000000000000006000521660045260245260445260646000fd5b847fb7fdc0100000000000000000000000000000000000000000000000000000000060005260045260246000fd5b867fdd5604750000000000000000000000000000000000000000000000000000000060005260045260246000fd5b612ced907f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd30613965565b83612abc565b3461032a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a57602061214c6004357fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c061334b565b3461032a5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a57610e126115d07f7ea68fd2dcf1c056b94db6a0a537aa80d26fa9ab1eacd85da1ba0b61b7e7a8a461385e565b3461032a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a576004357fffffffff000000000000000000000000000000000000000000000000000000008116810361032a576122c760209161329c565b60005b838110612e245750506000910152565b8181015183820152602001612e14565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093612e7081518092818752878088019101612e11565b0116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361032a57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361032a57565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc606091011261032a5760043573ffffffffffffffffffffffffffffffffffffffff8116810361032a579060243573ffffffffffffffffffffffffffffffffffffffff8116810361032a579060443590565b9181601f8401121561032a5782359167ffffffffffffffff831161032a576020808501948460051b01011161032a57565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83011261032a5760043573ffffffffffffffffffffffffffffffffffffffff8116810361032a57916024359067ffffffffffffffff821161032a57612fcb91600401612f2f565b9091565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82011261032a5760043567ffffffffffffffff811161032a578161301891600401612f2f565b9290929160243567ffffffffffffffff811161032a578161303b91600401612f2f565b929092916044359067ffffffffffffffff821161032a57612fcb91600401612f2f565b9181601f8401121561032a5782359167ffffffffffffffff831161032a576020838186019501011161032a57565b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82011261032a5760043567ffffffffffffffff811161032a57816130d591600401612f2f565b929092916024359067ffffffffffffffff821161032a57612fcb91600401612f2f565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761313957604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b67ffffffffffffffff81116131395760051b60200190565b92919061318c81613168565b9361319a60405195866130f8565b602085838152019160051b810192831161032a57905b8282106131bc57505050565b81358152602091820191016131b0565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169081156132245773ffffffffffffffffffffffffffffffffffffffff161490565b5050600090565b67ffffffffffffffff811161313957601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926132718261322b565b9161327f60405193846130f8565b82948184528183011161032a578281602093846000960137010152565b7fffffffff00000000000000000000000000000000000000000000000000000000167fffffffff000000000000000000000000000000000000000000000000000000008114613345577f01ffc9a700000000000000000000000000000000000000000000000000000000811461333f576000527fca9d3e17f264b0f3984e2634e94adb37fa3e6a8103f06aeae6fa59e21c769f5d60205260ff6040600020541690565b50600190565b50600090565b816000528060205260406000205473ffffffffffffffffffffffffffffffffffffffff8116156106a457740100000000000000000000000000000000000000001615613224576002916000520160205273ffffffffffffffffffffffffffffffffffffffff6040600020541690565b909273ffffffffffffffffffffffffffffffffffffffff169283156106d257846000528160205260406000205473ffffffffffffffffffffffffffffffffffffffff8116938415612c955773ffffffffffffffffffffffffffffffffffffffff811680950361357f578261342e9185613b64565b156134c4575b5050836000528060205282604060002055828203613475575b507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4565b600101816000528060205260406000207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8154019055826000526020526040600020600181540190553861344d565b7401000000000000000000000000000000000000000016158015613539575b6134ed5780613434565b8273ffffffffffffffffffffffffffffffffffffffff86927fa4a3018b000000000000000000000000000000000000000000000000000000006000521660045260245260445260646000fd5b50846000526002820160205273ffffffffffffffffffffffffffffffffffffffff6040600020541673ffffffffffffffffffffffffffffffffffffffff821614156134e3565b86857f14dbb5360000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b818102929181159184041417156135c457565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f6d696e7465720000000000000000000000000000000000000000000000000000600052602052604060002073ffffffffffffffffffffffffffffffffffffffff821660005260205260ff604060002054161561364d5750565b73ffffffffffffffffffffffffffffffffffffffff907f7aa72882000000000000000000000000000000000000000000000000000000006000527f6d696e74657200000000000000000000000000000000000000000000000000006004521660245260446000fd5b9073ffffffffffffffffffffffffffffffffffffffff1690811561244057826000528060205273ffffffffffffffffffffffffffffffffffffffff6040600020541661374957600190836000528060205282604060002055826000520160205260406000206001815401905560007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4565b827f753eceac0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b805182101561378b5760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b8160005260205273ffffffffffffffffffffffffffffffffffffffff604060002054169081156137e8575090565b7fdd5604750000000000000000000000000000000000000000000000000000000060005260045260246000fd5b919081101561378b5760051b0190565b3573ffffffffffffffffffffffffffffffffffffffff8116810361032a5790565b9081602091031261032a5751801515810361032a5790565b906040519160008154918260011c9260018116801561395b575b60208510811461392e578487528693929181156138ee57506001146138a7575b506138a5925003836130f8565b565b90506000929192526020600020906000915b8183106138d25750509060206138a59282010138613898565b60209193508060019154838589010152019101909184926138b9565b602093506138a59592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b82010138613898565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f1693613878565b5473ffffffffffffffffffffffffffffffffffffffff169081151580613a46575b61398e575050565b602073ffffffffffffffffffffffffffffffffffffffff916044604051809481937fc617113400000000000000000000000000000000000000000000000000000000835230600484015216958660248301525afa908115610e9e57600091613a27575b50156139fa5750565b7fede71dcc0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b613a40915060203d6020116110d6576110c881836130f8565b386139f1565b50813b1515613986565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168015613b55573233148015613b5a575b613b55577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c90803314908115613adb575b50613ad857503390565b90565b60649150602090604051928380927f019a20280000000000000000000000000000000000000000000000000000000082528660048301523360248301523060448301525afa908115610e9e57600091613b36575b5038613ace565b613b4f915060203d6020116110d6576110c881836130f8565b38613b2f565b503390565b5060183610613a97565b73ffffffffffffffffffffffffffffffffffffffff8083169084161492918315613b8f575b50505090565b600392935073ffffffffffffffffffffffffffffffffffffffff166000520160205273ffffffffffffffffffffffffffffffffffffffff6040600020911660005260205260ff60406000205416388080613b89565b73ffffffffffffffffffffffffffffffffffffffff90613c56826020949597969716958360405196879586957f150b7a02000000000000000000000000000000000000000000000000000000008752166004860152166024840152876044840152608060648401526084830190612e34565b03816000865af1908115610e9e57600091613cba575b507fffffffff000000000000000000000000000000000000000000000000000000007f150b7a0200000000000000000000000000000000000000000000000000000000911603611b28575050565b6020813d602011613d2d575b81613cd3602093836130f8565b81010312611bcb5751907fffffffff0000000000000000000000000000000000000000000000000000000082168203610e9357507fffffffff00000000000000000000000000000000000000000000000000000000613c6c565b3d9150613cc656fea26469706673582212205cfff9ced06c1ce897aefcf3c71c5f1a96e4be17b88fb198b9294090c90e04b764736f6c634300081e0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
