{
  "_format": "hh-sol-artifact-1",
  "contractName": "ERC20MintBurnMock",
  "sourceName": "contracts/mocks/token/ERC20/preset/ERC20MintBurnMock.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "tokenName",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "tokenSymbol",
          "type": "string"
        },
        {
          "internalType": "uint8",
          "name": "tokenDecimals",
          "type": "uint8"
        },
        {
          "internalType": "contract IForwarderRegistry",
          "name": "forwarderRegistry",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "allowance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "increment",
          "type": "uint256"
        }
      ],
      "name": "ERC20AllowanceOverflow",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "ERC20ApprovalToAddressZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ERC20BatchMintValuesOverflow",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ERC20BatchTransferValuesOverflow",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "allowance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "decrement",
          "type": "uint256"
        }
      ],
      "name": "ERC20InsufficientAllowance",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "balance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "ERC20InsufficientBalance",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ERC20MintToAddressZero",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        }
      ],
      "name": "ERC20PermitExpired",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ERC20PermitFromAddressZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ERC20PermitInvalidSignature",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        }
      ],
      "name": "ERC20SafeTransferRejected",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "supply",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "ERC20TotalSupplyOverflow",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "ERC20TransferToAddressZero",
      "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": "token",
          "type": "address"
        }
      ],
      "name": "SafeERC20FailedOperation",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "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": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DOMAIN_SEPARATOR",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MINTER_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "__msgData",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "result",
          "type": "bool"
        }
      ],
      "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": "owners",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "values",
          "type": "uint256[]"
        }
      ],
      "name": "batchBurnFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "recipients",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "values",
          "type": "uint256[]"
        }
      ],
      "name": "batchMint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "recipients",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "values",
          "type": "uint256[]"
        }
      ],
      "name": "batchTransfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address[]",
          "name": "recipients",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "values",
          "type": "uint256[]"
        }
      ],
      "name": "batchTransferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "burn",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "burnFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "subtractedValue",
          "type": "uint256"
        }
      ],
      "name": "decreaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "result",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "forwarderRegistry",
      "outputs": [
        {
          "internalType": "contract IForwarderRegistry",
          "name": "",
          "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": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "addedValue",
          "type": "uint256"
        }
      ],
      "name": "increaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "result",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "forwarder",
          "type": "address"
        }
      ],
      "name": "isTrustedForwarder",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "mint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "nonces",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "permit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "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": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "safeTransfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "uri",
          "type": "string"
        }
      ],
      "name": "setTokenURI",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "tokenURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "supply",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "result",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "result",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60a0604052346105e05761422f80380380610019816105e5565b9283398101906080818303126105e05780516001600160401b0381116105e0578261004591830161060a565b602082015190926001600160401b0382116105e05761006591830161060a565b9160408201519160ff83168093036105e05760600151916001600160a01b03831683036105e0577fca9d3e17f264b0f3984e2634e94adb37fa3e6a8103f06aeae6fa59e21c769f5d60208190527f9aed5868410a44d2b2b5afc971a20f888382428fa3391cbfac5b1840d2aa352f8054600160ff199182168117909255634e83a8c360e11b6000527fc6b5f03b0da98290ffa91f37e0f0b8e2702961697d46a1f6b2d24c3136073a6680549091169091179055825190926001600160401b0382116104b6576000805160206141ef8339815191525490600182811c921680156105d6575b60208310146104965781601f849311610559575b50602090601f83116001146104d7576000926104cc575b50508160011b916000199060031b1c1916176000805160206141ef833981519152555b83516001600160401b0381116104b6576000805160206141cf83398151915254600181811c911680156104ac575b602082101461049657601f8111610424575b50602094601f82116001146103a357948192939495600092610398575b50508160011b916000199060031b1c1916176000805160206141cf833981519152555b60ff1960008051602061420f83398151915254161760008051602061420f8339815191525563a219a02560e01b600052806020526040600020600160ff1982541617905533610339575b6307f5828d60e41b600090815260209190915260408082208054600160ff1991821681179092556303c130d960e41b84528284208054821683179055634ec7fbed60e11b845282842080548216831790556353f41a9760e01b8452828420805482168317905563602993f360e11b8452828420805482168317905563144b1f0f60e11b845282842080548216831790556320c07ed160e01b84529282902080549093161790915560809190915251613b59908161067682396080518181816120e4015281816125ae0152818161374801526138730152f35b7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc80546001600160a01b0319163390811790915560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3610261565b0151905038806101f4565b601f198216956000805160206141cf833981519152600052806000209160005b88811061040c575083600195969798106103f3575b505050811b016000805160206141cf83398151915255610217565b015160001960f88460031b161c191690553880806103d8565b919260206001819286850151815501940192016103c3565b6000805160206141cf8339815191526000527f38f29baf5b4f1132a8b8d899467148f866f7b7a6d08f3c484abb8c5467292cef601f830160051c8101916020841061048c575b601f0160051c01905b81811061048057506101d7565b60008155600101610473565b909150819061046a565b634e487b7160e01b600052602260045260246000fd5b90607f16906101c5565b634e487b7160e01b600052604160045260246000fd5b015190503880610174565b6000805160206141ef83398151915260009081528281209350601f198516905b8181106105415750908460019594939210610528575b505050811b016000805160206141ef83398151915255610197565b015160001960f88460031b161c1916905538808061050d565b929360206001819287860151815501950193016104f7565b6000805160206141ef8339815191526000529091507fce6c9d9c5887233b79e8966827dc87013a092e23a7d6c4dfeb06be71659aa428601f840160051c810191602085106105cc575b90601f859493920160051c01905b8181106105bd575061015d565b600081558493506001016105b0565b90915081906105a2565b91607f1691610149565b600080fd5b6040519190601f01601f191682016001600160401b038111838210176104b657604052565b81601f820112156105e0578051906001600160401b0382116104b657610639601f8301601f19166020016105e5565b92828452602083830101116105e05760005b82811061066057505060206000918301015290565b8060208092840101518282870101520161064b56fe6080604052600436101561001257600080fd5b60003560e01c806301ffc9a71461232e57806306fdde03146122d3578063095ea7b31461226657806318160ddd1461220b5780631b9a7529146121c757806323b872dd146121085780632b4c9f16146120995780632f2ff15d14611f0d578063313ce56714611eaf57806331e66e1e14611e2c5780633644e51514611deb5780633950935114611bbb5780633c130d9014611b6057806340c10f191461199d57806342966c68146119395780634885b2541461188b578063572b6c0514611840578063685731071461172557806370a08231146116a057806373c8a9581461151d57806379cc6790146114685780637ecebe00146113e357806388d695b21461139f5780638bb9c5bf146112305780638da5cb5b146111bf57806391d148541461112757806395d89b41146110b4578063a457c2d714611047578063a9059cbb14610fda578063b88d4fde14610eca578063c3666c3614610c8d578063d505accf14610a1a578063d5391393146109c1578063d547741f14610838578063dd62ed3e14610789578063e0df5b6f1461053e578063eb79554914610479578063f2fde38b146103865763f7ba94bd146101c957600080fd5b3461032a576101d73661246a565b90917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff80610218613731565b9254169116908103610359575081810361032f5760005b81811061023857005b6102438183876128d8565b3573ffffffffffffffffffffffffffffffffffffffff811680910361032a5761026d8285876128d8565b35908147106102f857600080809381935af13d156102f0573d90610290826136a8565b9161029e60405193846125f6565b82523d6000602084013e5b156102b7575060010161022f565b8051156102c657602081519101fd5b7fd6bda2750000000000000000000000000000000000000000000000000000000060005260046000fd5b6060906102a9565b50477fcf4791810000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b600080fd5b7f658253360000000000000000000000000000000000000000000000000000000060005260046000fd5b7f2ef4875e0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b3461032a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a576103bd6123f3565b7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc6103e6613731565b9080549273ffffffffffffffffffffffffffffffffffffffff8085169316838103610359575073ffffffffffffffffffffffffffffffffffffffff169283830361042c57005b7fffffffffffffffffffffffff000000000000000000000000000000000000000016831790557f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b3461032a5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a576104b06123f3565b60243560443567ffffffffffffffff811161032a576104d3903690600401612569565b9190927f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee9261050c8383610505613731565b8097613553565b813b61051e575b602060405160018152f35b6105349461052d9136916136e2565b92806139a2565b8080808080610513565b3461032a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a5760043567ffffffffffffffff811161032a5761058d903690600401612569565b7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff806105cc613731565b925416911690810361035957507ff41bf6a5db26bffdfab174dcf66b31fbba8fdb7e3db040721ce1e62d61839cea9067ffffffffffffffff811161075a5761061482546126fe565b601f8111610712575b506000601f82116001146106775781929360009261066c575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916179055600080f35b013590508380610636565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216938382526020822091805b8681106106fa57508360019596106106c2575b505050811b019055005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88560031b161c199101351690558380806106b8565b909260206001819286860135815501940191016106a5565b826000526020600020601f830160051c81019160208410610750575b601f0160051c01905b818110610744575061061d565b60008155600101610737565b909150819061072e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b3461032a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a576107c06123f3565b73ffffffffffffffffffffffffffffffffffffffff6107dd612416565b91166000527f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbef60205273ffffffffffffffffffffffffffffffffffffffff604060002091166000526020526020604060002054604051908152f35b3461032a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a57600435610872612416565b61087a613731565b9173ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc541673ffffffffffffffffffffffffffffffffffffffff841690810361035957507fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b228160005280602052604060002073ffffffffffffffffffffffffffffffffffffffff841660005260205260ff6040600020541661092c57005b60008281526020918252604080822073ffffffffffffffffffffffffffffffffffffffff9586168084529084529181902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905580519384529183015291909216908201527ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080606081015b0390a1005b3461032a5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a5760206040517f6d696e74657200000000000000000000000000000000000000000000000000008152f35b3461032a5760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a57610a516123f3565b610a59612416565b6044359060643560843560ff811680910361032a5773ffffffffffffffffffffffffffffffffffffffff8516917f93fe0ff7226b064a4a8f0b09910762afb4bc2441835792c021ffd78cd513011d8315610c6357814211610c35576020926000926080928685528552604084209081549160018301905560405190868201927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9845288604084015273ffffffffffffffffffffffffffffffffffffffff8a1660608401528a8684015260a083015260c082015260c08152610b3b60e0826125f6565b519020610b46612a82565b9060405190868201927f190100000000000000000000000000000000000000000000000000000000000084526022830152604282015260428152610b8b6062826125f6565b519020906040519182528482015260a435604082015260c435606082015282805260015afa15610c295773ffffffffffffffffffffffffffffffffffffffff6000511603610bff57610bfd927f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee612813565b005b7f822a64c80000000000000000000000000000000000000000000000000000000060005260046000fd5b6040513d6000823e3d90fd5b507fea2b6f580000000000000000000000000000000000000000000000000000000060005260045260246000fd5b7fa97469760000000000000000000000000000000000000000000000000000000060005260046000fd5b3461032a57610c9b366124da565b9094929390917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff80610ce0613731565b92541691169081036103595750808214801590610ec0575b61032f5760005b828110610d0857005b73ffffffffffffffffffffffffffffffffffffffff610d30610d2b83858a6128d8565b612917565b166040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f80ac58cd000000000000000000000000000000000000000000000000000000006004820152602081602481855afa908115610c2957600091610e92575b5015610e65575073ffffffffffffffffffffffffffffffffffffffff610dbf610d2b83858a6128d8565b1690610dcf610d2b8286896128d8565b91610ddb82878b6128d8565b3592813b1561032a57606473ffffffffffffffffffffffffffffffffffffffff916000809460405197889586947f42842e0e00000000000000000000000000000000000000000000000000000000865230600487015216602485015260448401525af1918215610c2957600192610e54575b5001610cff565b6000610e5f916125f6565b88610e4d565b7f986b9f1f0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b610eb3915060203d8111610eb9575b610eab81836125f6565b810190613719565b89610d95565b503d610ea1565b5082821415610cf8565b3461032a5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a57610f016123f3565b610f09612416565b60443560643567ffffffffffffffff811161032a57610f2c903690600401612569565b9290937f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee93610f98848484610f5f613731565b9873ffffffffffffffffffffffffffffffffffffffff8a1673ffffffffffffffffffffffffffffffffffffffff831603610fc957613553565b823b610fa957602060405160018152f35b610fbe95610fb89136916136e2565b936139a2565b808080808080610513565b610fd5848b8484613375565b613553565b3461032a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a576105136110146123f3565b602435907f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee611041613731565b90613553565b3461032a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a576105136110816123f3565b602435907f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee6110ae613731565b90613375565b3461032a5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a5761112361110f7f335df4119bbb04f056b33eba33b826d3529129e458faf6daa9924b5a8f3b6a82612751565b604051918291602083526020830190612394565b0390f35b3461032a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a5761115e612416565b7fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b2260043560005260205273ffffffffffffffffffffffffffffffffffffffff60406000209116600052602052602060ff604060002054166040519015158152f35b3461032a5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a57602073ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc5416604051908152f35b3461032a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a577fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b2260043561128b613731565b908060005282602052604060002073ffffffffffffffffffffffffffffffffffffffff831660005260205260ff60406000205416156113575760008181526020938452604080822073ffffffffffffffffffffffffffffffffffffffff949094168083529385529081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690558051918252928101829052918201527ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080606081016109bc565b73ffffffffffffffffffffffffffffffffffffffff92507f7aa72882000000000000000000000000000000000000000000000000000000006000526004521660245260446000fd5b3461032a576105136113b03661246a565b929091907f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee6113dd613731565b9061311c565b3461032a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a5761141a6123f3565b73ffffffffffffffffffffffffffffffffffffffff7f93fe0ff7226b064a4a8f0b09910762afb4bc2441835792c021ffd78cd513011d91166000526020526020604060002054604051908152f35b3461032a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a576105136114a26123f3565b602435907f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee6114cf613731565b8373ffffffffffffffffffffffffffffffffffffffff821673ffffffffffffffffffffffffffffffffffffffff85160361150b575b5050612beb565b611516918484613375565b8483611504565b3461032a5761152b366124da565b949293917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff8061156e613731565b92541691169081036103595750808314801590611696575b61032f5760005b83811061159657005b6115a18183886128d8565b3573ffffffffffffffffffffffffffffffffffffffff81169081810361032a5760006020918a826115e2876115db610d2b828f8f906128d8565b938b6128d8565b356040519073ffffffffffffffffffffffffffffffffffffffff878301947fa9059cbb00000000000000000000000000000000000000000000000000000000865216602483015260448201526044815261163d6064826125f6565b51925af115610c29576000513d61168d5750803b155b611660575060010161158d565b7f5274afe70000000000000000000000000000000000000000000000000000000060005260045260246000fd5b60011415611653565b5085831415611586565b3461032a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a576116d76123f3565b73ffffffffffffffffffffffffffffffffffffffff7f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee91166000526020526020604060002054604051908152f35b3461032a576117333661246a565b9290916117687fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b22611762613731565b90612b29565b7f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee9061179381612637565b926117a160405194856125f6565b818452602084019160051b81019036821161032a57915b818310611813575050506117cb84612637565b926117d960405194856125f6565b848452602084019460051b81019036821161032a57945b818610611803575050610bfd9350612fcc565b85358152602095860195016117f0565b823573ffffffffffffffffffffffffffffffffffffffff8116810361032a578152602092830192016117b8565b3461032a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a57602061188161187c6123f3565b612597565b6040519015158152f35b3461032a5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a576118c26123f3565b60243567ffffffffffffffff811161032a576118e2903690600401612439565b916044359267ffffffffffffffff841161032a57611907610513943690600401612439565b9390927f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee611933613731565b90612d0c565b3461032a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a576105136004357f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee611997613731565b90612beb565b3461032a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a576119d46123f3565b602435611a037fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b22611762613731565b73ffffffffffffffffffffffffffffffffffffffff7f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee9216918215611b365781611a78575b507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6020600092604051908152a3005b7f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbf0548281019080821115611b0457507f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbf0556000838152602091909152604090208054820190557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef611a48565b83907f0366a5f60000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b7f92fd9c8f0000000000000000000000000000000000000000000000000000000060005260046000fd5b3461032a5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a5761112361110f7ff41bf6a5db26bffdfab174dcf66b31fbba8fdb7e3db040721ce1e62d61839cea612751565b3461032a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a57611bf26123f3565b602435611bfd613731565b9073ffffffffffffffffffffffffffffffffffffffff8316928315611da75773ffffffffffffffffffffffffffffffffffffffff83166000527f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbef6020526040600020846000526020526040600020549180611cc2575b84837f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925602073ffffffffffffffffffffffffffffffffffffffff886040519485521692a3602060405160018152f35b8083019280841115611d4c57505050602073ffffffffffffffffffffffffffffffffffffffff7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928185166000527f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbef83526040600020866000528352806040600020559250611c73565b6040517f93bc2ff100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015293909316602484015260448301526064820152608490fd5b73ffffffffffffffffffffffffffffffffffffffff837ff7e1ac0f000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b3461032a5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a576020611e24612a82565b604051908152f35b3461032a5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a576040611e6561385c565b91907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8484519586946020865281602087015286860137600085828601015201168101030190f35b3461032a5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a57602060ff7f335df4119bbb04f056b33eba33b826d3529129e458faf6daa9924b5a8f3b6a835416604051908152f35b3461032a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a57600435611f47612416565b611f4f613731565b9173ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc541673ffffffffffffffffffffffffffffffffffffffff841690810361035957507fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b228160005280602052604060002073ffffffffffffffffffffffffffffffffffffffff841660005260205260ff604060002054161561200257005b60008281526020918252604080822073ffffffffffffffffffffffffffffffffffffffff9586168084529084529181902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580519384529183015291909216908201527f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080606081016109bc565b3461032a5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461032a5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a576105136121426123f3565b61214a612416565b7f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee91612174613731565b92604435938473ffffffffffffffffffffffffffffffffffffffff821673ffffffffffffffffffffffffffffffffffffffff8516036121b5575b5050613553565b6121c0918484613375565b85846121ae565b3461032a576105136121d83661246a565b929091907f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee612205613731565b90612938565b3461032a5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a5760207f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbf054604051908152f35b3461032a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a576105136122a06123f3565b602435907f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee6122cd613731565b90612813565b3461032a5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a5761112361110f7f335df4119bbb04f056b33eba33b826d3529129e458faf6daa9924b5a8f3b6a81612751565b3461032a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a576004357fffffffff000000000000000000000000000000000000000000000000000000008116810361032a5761188160209161264f565b919082519283825260005b8481106123de5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b8060208092840101518282860101520161239f565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361032a57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361032a57565b9181601f8401121561032a5782359167ffffffffffffffff831161032a576020808501948460051b01011161032a57565b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82011261032a5760043567ffffffffffffffff811161032a57816124b391600401612439565b929092916024359067ffffffffffffffff821161032a576124d691600401612439565b9091565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82011261032a5760043567ffffffffffffffff811161032a578161252391600401612439565b9290929160243567ffffffffffffffff811161032a578161254691600401612439565b929092916044359067ffffffffffffffff821161032a576124d691600401612439565b9181601f8401121561032a5782359167ffffffffffffffff831161032a576020838186019501011161032a57565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169081156125ef5773ffffffffffffffffffffffffffffffffffffffff161490565b5050600090565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761075a57604052565b67ffffffffffffffff811161075a5760051b60200190565b7fffffffff00000000000000000000000000000000000000000000000000000000167fffffffff0000000000000000000000000000000000000000000000000000000081146126f8577f01ffc9a70000000000000000000000000000000000000000000000000000000081146126f2576000527fca9d3e17f264b0f3984e2634e94adb37fa3e6a8103f06aeae6fa59e21c769f5d60205260ff6040600020541690565b50600190565b50600090565b90600182811c92168015612747575b602083101461271857565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f169161270d565b9060405191826000825492612765846126fe565b80845293600181169081156127d3575060011461278c575b5061278a925003836125f6565b565b90506000929192526020600020906000915b8183106127b757505090602061278a928201013861277d565b602091935080600191548385890101520191019091849261279e565b6020935061278a9592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201013861277d565b929173ffffffffffffffffffffffffffffffffffffffff169283156128945773ffffffffffffffffffffffffffffffffffffffff7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259260016020938383166000520183526040600020866000528352846040600020556040519485521692a3565b73ffffffffffffffffffffffffffffffffffffffff827ff7e1ac0f000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b91908110156128e85760051b0190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b3573ffffffffffffffffffffffffffffffffffffffff8116810361032a5790565b93929480860361032f578515612a7a5760009560005b81811061296f5750505050505081612964575050565b600201908154039055565b61297d610d2b8284886128d8565b6129888285896128d8565b3573ffffffffffffffffffffffffffffffffffffffff821691818773ffffffffffffffffffffffffffffffffffffffff81168503612a68575b509050612a00575b600192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6020600093604051908152a30161294e565b98604060008381528a60205220548a81039080821015612a325750600083815260208b905260409020558901986129c9565b8b90847fe450d38c0000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b612a72928c613375565b3881876129c1565b505050505050565b612aab7f335df4119bbb04f056b33eba33b826d3529129e458faf6daa9924b5a8f3b6a81612751565b6020815191012060405160208101917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260408201527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260a08152612b2360c0826125f6565b51902090565b7f6d696e7465720000000000000000000000000000000000000000000000000000600052602052604060002073ffffffffffffffffffffffffffffffffffffffff821660005260205260ff6040600020541615612b835750565b73ffffffffffffffffffffffffffffffffffffffff907f7aa72882000000000000000000000000000000000000000000000000000000006000527f6d696e74657200000000000000000000000000000000000000000000000000006004521660245260446000fd5b82612c39575b50907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602073ffffffffffffffffffffffffffffffffffffffff6000946040519485521692a3565b73ffffffffffffffffffffffffffffffffffffffff8216600052806020526040600020548381039080821015612cc0575073ffffffffffffffffffffffffffffffffffffffff8316600090815260208390526040902055600201805483900390557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef612bf1565b849073ffffffffffffffffffffffffffffffffffffffff857fe450d38c000000000000000000000000000000000000000000000000000000006000521660045260245260445260646000fd5b9594909392919285810361032f578015612faf5773ffffffffffffffffffffffffffffffffffffffff8416600052866020526040600020549160009660009260005b818110612da8575050505050505073ffffffffffffffffffffffffffffffffffffffff821673ffffffffffffffffffffffffffffffffffffffff821603612d96575b50505050565b612d9f93613375565b38808080612d90565b73ffffffffffffffffffffffffffffffffffffffff612dcb610d2b83858b6128d8565b168015612f6b57612ddd8285876128d8565b3580612ea7575b906020917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef73ffffffffffffffffffffffffffffffffffffffff8c16938492604051908152a38a151580612e9d575b612e41575b50600101612d4e565b8a87039087821015612e6757600090815260208d90526040902090860190556001612e38565b878c917fe450d38c0000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b50858b1415612e33565b9a8b810190811115612f41579a8c73ffffffffffffffffffffffffffffffffffffffff8b16838114612ef35750906040602093926000908482528552208181540190555b909150612de4565b90508882989211612f0b575090866020920196612eeb565b8888917fe450d38c0000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b7fdedd83410000000000000000000000000000000000000000000000000000000060005260046000fd5b73ffffffffffffffffffffffffffffffffffffffff897f754f425b000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b50505050505050565b80518210156128e85760209160051b010190565b90918251908051820361032f578115612d905760009360005b838110613040575050505081612ff9575050565b600201805491808301928084111561301057505055565b7f0366a5f60000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b73ffffffffffffffffffffffffffffffffffffffff61305f8284612fb8565b51168015611b36576130718285612fb8565b51806130af575b9060007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602060019594604051908152a301612fe5565b969190878301928311156130f25773ffffffffffffffffffffffffffffffffffffffff811660009081526020889052604090208054890190559196909190613078565b7f5542ae7c0000000000000000000000000000000000000000000000000000000060005260046000fd5b929394909181850361032f578415612a7a5773ffffffffffffffffffffffffffffffffffffffff8316600052836020526040600020549560009260009660005b81811061320e57505050505080151580613204575b61317d575b5050505050565b80850394808610156131ba57505073ffffffffffffffffffffffffffffffffffffffff166000526020526040600020910190553880808080613176565b73ffffffffffffffffffffffffffffffffffffffff837fe450d38c000000000000000000000000000000000000000000000000000000006000521660045260245260445260646000fd5b5083811415613171565b73ffffffffffffffffffffffffffffffffffffffff613231610d2b8385896128d8565b168015613331576132438285876128d8565b3580613297575b90600192916040519081527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602073ffffffffffffffffffffffffffffffffffffffff8c1692a30161315c565b9687810190811115612f41579673ffffffffffffffffffffffffffffffffffffffff89168281146132e457509060019291604060008381528c602052208181540190555b9091925061324a565b8c829c92116132fb5750908a60019392019a6132db565b8c8c917fe450d38c0000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b73ffffffffffffffffffffffffffffffffffffffff887f754f425b000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b92909173ffffffffffffffffffffffffffffffffffffffff811693841561350f576001019073ffffffffffffffffffffffffffffffffffffffff841660005281602052604060002085600052602052604060002054927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84141580613506575b613442575b50505090602073ffffffffffffffffffffffffffffffffffffffff7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925926040519485521692a3565b80840393808510156134ab5750505073ffffffffffffffffffffffffffffffffffffffff7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925926020928286166000528352604060002086600052835280604060002055926133fa565b6040517f137ad6ab00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015293909316602484015260448301526064820152608490fd5b508015156133f5565b73ffffffffffffffffffffffffffffffffffffffff847ff7e1ac0f000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b929173ffffffffffffffffffffffffffffffffffffffff1692831561366457826135bd575b50602073ffffffffffffffffffffffffffffffffffffffff7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef926040519485521692a3565b73ffffffffffffffffffffffffffffffffffffffff8216600052806020526040600020548381039080821015612cc057508260209273ffffffffffffffffffffffffffffffffffffffff9287847fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef97160361363d575b5050925050613578565b83831660005281855260406000205586600052835260406000208581540190553880613633565b73ffffffffffffffffffffffffffffffffffffffff827f754f425b000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b67ffffffffffffffff811161075a57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926136ee826136a8565b916136fc60405193846125f6565b82948184528183011161032a578281602093846000960137010152565b9081602091031261032a5751801515810361032a5790565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016801561384d573233148015613852575b61384d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c908033149081156137bc575b506137b957503390565b90565b6040517f019a202800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201523360248201523060448201529150602090829060649082905afa908115610c295760009161382e575b50386137af565b613847915060203d602011610eb957610eab81836125f6565b38613827565b503390565b5060183610613778565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168015613990573233148015613998575b613990578033149081156138ef575b506138be576000903690565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36019036821161032a5760009190565b6040517f019a20280000000000000000000000000000000000000000000000000000000081527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c60048201523360248201523060448201529150602090829060649082905afa908115610c2957600091613971575b50386138b2565b61398a915060203d602011610eb957610eab81836125f6565b3861396a565b506000903690565b50601836106138a3565b613a1173ffffffffffffffffffffffffffffffffffffffff9294958360209516968460405197889687967f4fc358590000000000000000000000000000000000000000000000000000000088521660048701521660248501526044840152608060648401526084830190612394565b03816000865af1908115610c2957600091613aa1575b507fffffffff000000000000000000000000000000000000000000000000000000007f4fc3585900000000000000000000000000000000000000000000000000000000911603613a745750565b7f6d4497360000000000000000000000000000000000000000000000000000000060005260045260246000fd5b6020813d602011613b1b575b81613aba602093836125f6565b81010312613b175751907fffffffff0000000000000000000000000000000000000000000000000000000082168203613b1457507fffffffff00000000000000000000000000000000000000000000000000000000613a27565b80fd5b5080fd5b3d9150613aad56fea2646970667358221220c752618e56d76f4fd0fd334c30e4d96c7048f507884a39ad5c04bec19f9fe0dd64736f6c634300081e0033335df4119bbb04f056b33eba33b826d3529129e458faf6daa9924b5a8f3b6a82335df4119bbb04f056b33eba33b826d3529129e458faf6daa9924b5a8f3b6a81335df4119bbb04f056b33eba33b826d3529129e458faf6daa9924b5a8f3b6a83",
  "deployedBytecode": "0x6080604052600436101561001257600080fd5b60003560e01c806301ffc9a71461232e57806306fdde03146122d3578063095ea7b31461226657806318160ddd1461220b5780631b9a7529146121c757806323b872dd146121085780632b4c9f16146120995780632f2ff15d14611f0d578063313ce56714611eaf57806331e66e1e14611e2c5780633644e51514611deb5780633950935114611bbb5780633c130d9014611b6057806340c10f191461199d57806342966c68146119395780634885b2541461188b578063572b6c0514611840578063685731071461172557806370a08231146116a057806373c8a9581461151d57806379cc6790146114685780637ecebe00146113e357806388d695b21461139f5780638bb9c5bf146112305780638da5cb5b146111bf57806391d148541461112757806395d89b41146110b4578063a457c2d714611047578063a9059cbb14610fda578063b88d4fde14610eca578063c3666c3614610c8d578063d505accf14610a1a578063d5391393146109c1578063d547741f14610838578063dd62ed3e14610789578063e0df5b6f1461053e578063eb79554914610479578063f2fde38b146103865763f7ba94bd146101c957600080fd5b3461032a576101d73661246a565b90917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff80610218613731565b9254169116908103610359575081810361032f5760005b81811061023857005b6102438183876128d8565b3573ffffffffffffffffffffffffffffffffffffffff811680910361032a5761026d8285876128d8565b35908147106102f857600080809381935af13d156102f0573d90610290826136a8565b9161029e60405193846125f6565b82523d6000602084013e5b156102b7575060010161022f565b8051156102c657602081519101fd5b7fd6bda2750000000000000000000000000000000000000000000000000000000060005260046000fd5b6060906102a9565b50477fcf4791810000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b600080fd5b7f658253360000000000000000000000000000000000000000000000000000000060005260046000fd5b7f2ef4875e0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b3461032a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a576103bd6123f3565b7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc6103e6613731565b9080549273ffffffffffffffffffffffffffffffffffffffff8085169316838103610359575073ffffffffffffffffffffffffffffffffffffffff169283830361042c57005b7fffffffffffffffffffffffff000000000000000000000000000000000000000016831790557f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b3461032a5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a576104b06123f3565b60243560443567ffffffffffffffff811161032a576104d3903690600401612569565b9190927f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee9261050c8383610505613731565b8097613553565b813b61051e575b602060405160018152f35b6105349461052d9136916136e2565b92806139a2565b8080808080610513565b3461032a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a5760043567ffffffffffffffff811161032a5761058d903690600401612569565b7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff806105cc613731565b925416911690810361035957507ff41bf6a5db26bffdfab174dcf66b31fbba8fdb7e3db040721ce1e62d61839cea9067ffffffffffffffff811161075a5761061482546126fe565b601f8111610712575b506000601f82116001146106775781929360009261066c575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916179055600080f35b013590508380610636565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216938382526020822091805b8681106106fa57508360019596106106c2575b505050811b019055005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88560031b161c199101351690558380806106b8565b909260206001819286860135815501940191016106a5565b826000526020600020601f830160051c81019160208410610750575b601f0160051c01905b818110610744575061061d565b60008155600101610737565b909150819061072e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b3461032a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a576107c06123f3565b73ffffffffffffffffffffffffffffffffffffffff6107dd612416565b91166000527f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbef60205273ffffffffffffffffffffffffffffffffffffffff604060002091166000526020526020604060002054604051908152f35b3461032a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a57600435610872612416565b61087a613731565b9173ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc541673ffffffffffffffffffffffffffffffffffffffff841690810361035957507fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b228160005280602052604060002073ffffffffffffffffffffffffffffffffffffffff841660005260205260ff6040600020541661092c57005b60008281526020918252604080822073ffffffffffffffffffffffffffffffffffffffff9586168084529084529181902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905580519384529183015291909216908201527ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080606081015b0390a1005b3461032a5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a5760206040517f6d696e74657200000000000000000000000000000000000000000000000000008152f35b3461032a5760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a57610a516123f3565b610a59612416565b6044359060643560843560ff811680910361032a5773ffffffffffffffffffffffffffffffffffffffff8516917f93fe0ff7226b064a4a8f0b09910762afb4bc2441835792c021ffd78cd513011d8315610c6357814211610c35576020926000926080928685528552604084209081549160018301905560405190868201927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9845288604084015273ffffffffffffffffffffffffffffffffffffffff8a1660608401528a8684015260a083015260c082015260c08152610b3b60e0826125f6565b519020610b46612a82565b9060405190868201927f190100000000000000000000000000000000000000000000000000000000000084526022830152604282015260428152610b8b6062826125f6565b519020906040519182528482015260a435604082015260c435606082015282805260015afa15610c295773ffffffffffffffffffffffffffffffffffffffff6000511603610bff57610bfd927f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee612813565b005b7f822a64c80000000000000000000000000000000000000000000000000000000060005260046000fd5b6040513d6000823e3d90fd5b507fea2b6f580000000000000000000000000000000000000000000000000000000060005260045260246000fd5b7fa97469760000000000000000000000000000000000000000000000000000000060005260046000fd5b3461032a57610c9b366124da565b9094929390917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff80610ce0613731565b92541691169081036103595750808214801590610ec0575b61032f5760005b828110610d0857005b73ffffffffffffffffffffffffffffffffffffffff610d30610d2b83858a6128d8565b612917565b166040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f80ac58cd000000000000000000000000000000000000000000000000000000006004820152602081602481855afa908115610c2957600091610e92575b5015610e65575073ffffffffffffffffffffffffffffffffffffffff610dbf610d2b83858a6128d8565b1690610dcf610d2b8286896128d8565b91610ddb82878b6128d8565b3592813b1561032a57606473ffffffffffffffffffffffffffffffffffffffff916000809460405197889586947f42842e0e00000000000000000000000000000000000000000000000000000000865230600487015216602485015260448401525af1918215610c2957600192610e54575b5001610cff565b6000610e5f916125f6565b88610e4d565b7f986b9f1f0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b610eb3915060203d8111610eb9575b610eab81836125f6565b810190613719565b89610d95565b503d610ea1565b5082821415610cf8565b3461032a5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a57610f016123f3565b610f09612416565b60443560643567ffffffffffffffff811161032a57610f2c903690600401612569565b9290937f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee93610f98848484610f5f613731565b9873ffffffffffffffffffffffffffffffffffffffff8a1673ffffffffffffffffffffffffffffffffffffffff831603610fc957613553565b823b610fa957602060405160018152f35b610fbe95610fb89136916136e2565b936139a2565b808080808080610513565b610fd5848b8484613375565b613553565b3461032a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a576105136110146123f3565b602435907f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee611041613731565b90613553565b3461032a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a576105136110816123f3565b602435907f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee6110ae613731565b90613375565b3461032a5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a5761112361110f7f335df4119bbb04f056b33eba33b826d3529129e458faf6daa9924b5a8f3b6a82612751565b604051918291602083526020830190612394565b0390f35b3461032a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a5761115e612416565b7fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b2260043560005260205273ffffffffffffffffffffffffffffffffffffffff60406000209116600052602052602060ff604060002054166040519015158152f35b3461032a5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a57602073ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc5416604051908152f35b3461032a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a577fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b2260043561128b613731565b908060005282602052604060002073ffffffffffffffffffffffffffffffffffffffff831660005260205260ff60406000205416156113575760008181526020938452604080822073ffffffffffffffffffffffffffffffffffffffff949094168083529385529081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690558051918252928101829052918201527ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080606081016109bc565b73ffffffffffffffffffffffffffffffffffffffff92507f7aa72882000000000000000000000000000000000000000000000000000000006000526004521660245260446000fd5b3461032a576105136113b03661246a565b929091907f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee6113dd613731565b9061311c565b3461032a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a5761141a6123f3565b73ffffffffffffffffffffffffffffffffffffffff7f93fe0ff7226b064a4a8f0b09910762afb4bc2441835792c021ffd78cd513011d91166000526020526020604060002054604051908152f35b3461032a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a576105136114a26123f3565b602435907f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee6114cf613731565b8373ffffffffffffffffffffffffffffffffffffffff821673ffffffffffffffffffffffffffffffffffffffff85160361150b575b5050612beb565b611516918484613375565b8483611504565b3461032a5761152b366124da565b949293917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff8061156e613731565b92541691169081036103595750808314801590611696575b61032f5760005b83811061159657005b6115a18183886128d8565b3573ffffffffffffffffffffffffffffffffffffffff81169081810361032a5760006020918a826115e2876115db610d2b828f8f906128d8565b938b6128d8565b356040519073ffffffffffffffffffffffffffffffffffffffff878301947fa9059cbb00000000000000000000000000000000000000000000000000000000865216602483015260448201526044815261163d6064826125f6565b51925af115610c29576000513d61168d5750803b155b611660575060010161158d565b7f5274afe70000000000000000000000000000000000000000000000000000000060005260045260246000fd5b60011415611653565b5085831415611586565b3461032a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a576116d76123f3565b73ffffffffffffffffffffffffffffffffffffffff7f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee91166000526020526020604060002054604051908152f35b3461032a576117333661246a565b9290916117687fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b22611762613731565b90612b29565b7f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee9061179381612637565b926117a160405194856125f6565b818452602084019160051b81019036821161032a57915b818310611813575050506117cb84612637565b926117d960405194856125f6565b848452602084019460051b81019036821161032a57945b818610611803575050610bfd9350612fcc565b85358152602095860195016117f0565b823573ffffffffffffffffffffffffffffffffffffffff8116810361032a578152602092830192016117b8565b3461032a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a57602061188161187c6123f3565b612597565b6040519015158152f35b3461032a5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a576118c26123f3565b60243567ffffffffffffffff811161032a576118e2903690600401612439565b916044359267ffffffffffffffff841161032a57611907610513943690600401612439565b9390927f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee611933613731565b90612d0c565b3461032a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a576105136004357f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee611997613731565b90612beb565b3461032a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a576119d46123f3565b602435611a037fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b22611762613731565b73ffffffffffffffffffffffffffffffffffffffff7f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee9216918215611b365781611a78575b507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6020600092604051908152a3005b7f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbf0548281019080821115611b0457507f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbf0556000838152602091909152604090208054820190557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef611a48565b83907f0366a5f60000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b7f92fd9c8f0000000000000000000000000000000000000000000000000000000060005260046000fd5b3461032a5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a5761112361110f7ff41bf6a5db26bffdfab174dcf66b31fbba8fdb7e3db040721ce1e62d61839cea612751565b3461032a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a57611bf26123f3565b602435611bfd613731565b9073ffffffffffffffffffffffffffffffffffffffff8316928315611da75773ffffffffffffffffffffffffffffffffffffffff83166000527f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbef6020526040600020846000526020526040600020549180611cc2575b84837f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925602073ffffffffffffffffffffffffffffffffffffffff886040519485521692a3602060405160018152f35b8083019280841115611d4c57505050602073ffffffffffffffffffffffffffffffffffffffff7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928185166000527f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbef83526040600020866000528352806040600020559250611c73565b6040517f93bc2ff100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015293909316602484015260448301526064820152608490fd5b73ffffffffffffffffffffffffffffffffffffffff837ff7e1ac0f000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b3461032a5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a576020611e24612a82565b604051908152f35b3461032a5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a576040611e6561385c565b91907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8484519586946020865281602087015286860137600085828601015201168101030190f35b3461032a5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a57602060ff7f335df4119bbb04f056b33eba33b826d3529129e458faf6daa9924b5a8f3b6a835416604051908152f35b3461032a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a57600435611f47612416565b611f4f613731565b9173ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc541673ffffffffffffffffffffffffffffffffffffffff841690810361035957507fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b228160005280602052604060002073ffffffffffffffffffffffffffffffffffffffff841660005260205260ff604060002054161561200257005b60008281526020918252604080822073ffffffffffffffffffffffffffffffffffffffff9586168084529084529181902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580519384529183015291909216908201527f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080606081016109bc565b3461032a5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461032a5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a576105136121426123f3565b61214a612416565b7f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee91612174613731565b92604435938473ffffffffffffffffffffffffffffffffffffffff821673ffffffffffffffffffffffffffffffffffffffff8516036121b5575b5050613553565b6121c0918484613375565b85846121ae565b3461032a576105136121d83661246a565b929091907f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee612205613731565b90612938565b3461032a5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a5760207f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbf054604051908152f35b3461032a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a576105136122a06123f3565b602435907f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee6122cd613731565b90612813565b3461032a5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a5761112361110f7f335df4119bbb04f056b33eba33b826d3529129e458faf6daa9924b5a8f3b6a81612751565b3461032a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261032a576004357fffffffff000000000000000000000000000000000000000000000000000000008116810361032a5761188160209161264f565b919082519283825260005b8481106123de5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b8060208092840101518282860101520161239f565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361032a57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361032a57565b9181601f8401121561032a5782359167ffffffffffffffff831161032a576020808501948460051b01011161032a57565b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82011261032a5760043567ffffffffffffffff811161032a57816124b391600401612439565b929092916024359067ffffffffffffffff821161032a576124d691600401612439565b9091565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82011261032a5760043567ffffffffffffffff811161032a578161252391600401612439565b9290929160243567ffffffffffffffff811161032a578161254691600401612439565b929092916044359067ffffffffffffffff821161032a576124d691600401612439565b9181601f8401121561032a5782359167ffffffffffffffff831161032a576020838186019501011161032a57565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169081156125ef5773ffffffffffffffffffffffffffffffffffffffff161490565b5050600090565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761075a57604052565b67ffffffffffffffff811161075a5760051b60200190565b7fffffffff00000000000000000000000000000000000000000000000000000000167fffffffff0000000000000000000000000000000000000000000000000000000081146126f8577f01ffc9a70000000000000000000000000000000000000000000000000000000081146126f2576000527fca9d3e17f264b0f3984e2634e94adb37fa3e6a8103f06aeae6fa59e21c769f5d60205260ff6040600020541690565b50600190565b50600090565b90600182811c92168015612747575b602083101461271857565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f169161270d565b9060405191826000825492612765846126fe565b80845293600181169081156127d3575060011461278c575b5061278a925003836125f6565b565b90506000929192526020600020906000915b8183106127b757505090602061278a928201013861277d565b602091935080600191548385890101520191019091849261279e565b6020935061278a9592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201013861277d565b929173ffffffffffffffffffffffffffffffffffffffff169283156128945773ffffffffffffffffffffffffffffffffffffffff7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259260016020938383166000520183526040600020866000528352846040600020556040519485521692a3565b73ffffffffffffffffffffffffffffffffffffffff827ff7e1ac0f000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b91908110156128e85760051b0190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b3573ffffffffffffffffffffffffffffffffffffffff8116810361032a5790565b93929480860361032f578515612a7a5760009560005b81811061296f5750505050505081612964575050565b600201908154039055565b61297d610d2b8284886128d8565b6129888285896128d8565b3573ffffffffffffffffffffffffffffffffffffffff821691818773ffffffffffffffffffffffffffffffffffffffff81168503612a68575b509050612a00575b600192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6020600093604051908152a30161294e565b98604060008381528a60205220548a81039080821015612a325750600083815260208b905260409020558901986129c9565b8b90847fe450d38c0000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b612a72928c613375565b3881876129c1565b505050505050565b612aab7f335df4119bbb04f056b33eba33b826d3529129e458faf6daa9924b5a8f3b6a81612751565b6020815191012060405160208101917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260408201527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260a08152612b2360c0826125f6565b51902090565b7f6d696e7465720000000000000000000000000000000000000000000000000000600052602052604060002073ffffffffffffffffffffffffffffffffffffffff821660005260205260ff6040600020541615612b835750565b73ffffffffffffffffffffffffffffffffffffffff907f7aa72882000000000000000000000000000000000000000000000000000000006000527f6d696e74657200000000000000000000000000000000000000000000000000006004521660245260446000fd5b82612c39575b50907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602073ffffffffffffffffffffffffffffffffffffffff6000946040519485521692a3565b73ffffffffffffffffffffffffffffffffffffffff8216600052806020526040600020548381039080821015612cc0575073ffffffffffffffffffffffffffffffffffffffff8316600090815260208390526040902055600201805483900390557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef612bf1565b849073ffffffffffffffffffffffffffffffffffffffff857fe450d38c000000000000000000000000000000000000000000000000000000006000521660045260245260445260646000fd5b9594909392919285810361032f578015612faf5773ffffffffffffffffffffffffffffffffffffffff8416600052866020526040600020549160009660009260005b818110612da8575050505050505073ffffffffffffffffffffffffffffffffffffffff821673ffffffffffffffffffffffffffffffffffffffff821603612d96575b50505050565b612d9f93613375565b38808080612d90565b73ffffffffffffffffffffffffffffffffffffffff612dcb610d2b83858b6128d8565b168015612f6b57612ddd8285876128d8565b3580612ea7575b906020917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef73ffffffffffffffffffffffffffffffffffffffff8c16938492604051908152a38a151580612e9d575b612e41575b50600101612d4e565b8a87039087821015612e6757600090815260208d90526040902090860190556001612e38565b878c917fe450d38c0000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b50858b1415612e33565b9a8b810190811115612f41579a8c73ffffffffffffffffffffffffffffffffffffffff8b16838114612ef35750906040602093926000908482528552208181540190555b909150612de4565b90508882989211612f0b575090866020920196612eeb565b8888917fe450d38c0000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b7fdedd83410000000000000000000000000000000000000000000000000000000060005260046000fd5b73ffffffffffffffffffffffffffffffffffffffff897f754f425b000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b50505050505050565b80518210156128e85760209160051b010190565b90918251908051820361032f578115612d905760009360005b838110613040575050505081612ff9575050565b600201805491808301928084111561301057505055565b7f0366a5f60000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b73ffffffffffffffffffffffffffffffffffffffff61305f8284612fb8565b51168015611b36576130718285612fb8565b51806130af575b9060007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602060019594604051908152a301612fe5565b969190878301928311156130f25773ffffffffffffffffffffffffffffffffffffffff811660009081526020889052604090208054890190559196909190613078565b7f5542ae7c0000000000000000000000000000000000000000000000000000000060005260046000fd5b929394909181850361032f578415612a7a5773ffffffffffffffffffffffffffffffffffffffff8316600052836020526040600020549560009260009660005b81811061320e57505050505080151580613204575b61317d575b5050505050565b80850394808610156131ba57505073ffffffffffffffffffffffffffffffffffffffff166000526020526040600020910190553880808080613176565b73ffffffffffffffffffffffffffffffffffffffff837fe450d38c000000000000000000000000000000000000000000000000000000006000521660045260245260445260646000fd5b5083811415613171565b73ffffffffffffffffffffffffffffffffffffffff613231610d2b8385896128d8565b168015613331576132438285876128d8565b3580613297575b90600192916040519081527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602073ffffffffffffffffffffffffffffffffffffffff8c1692a30161315c565b9687810190811115612f41579673ffffffffffffffffffffffffffffffffffffffff89168281146132e457509060019291604060008381528c602052208181540190555b9091925061324a565b8c829c92116132fb5750908a60019392019a6132db565b8c8c917fe450d38c0000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b73ffffffffffffffffffffffffffffffffffffffff887f754f425b000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b92909173ffffffffffffffffffffffffffffffffffffffff811693841561350f576001019073ffffffffffffffffffffffffffffffffffffffff841660005281602052604060002085600052602052604060002054927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84141580613506575b613442575b50505090602073ffffffffffffffffffffffffffffffffffffffff7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925926040519485521692a3565b80840393808510156134ab5750505073ffffffffffffffffffffffffffffffffffffffff7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925926020928286166000528352604060002086600052835280604060002055926133fa565b6040517f137ad6ab00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015293909316602484015260448301526064820152608490fd5b508015156133f5565b73ffffffffffffffffffffffffffffffffffffffff847ff7e1ac0f000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b929173ffffffffffffffffffffffffffffffffffffffff1692831561366457826135bd575b50602073ffffffffffffffffffffffffffffffffffffffff7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef926040519485521692a3565b73ffffffffffffffffffffffffffffffffffffffff8216600052806020526040600020548381039080821015612cc057508260209273ffffffffffffffffffffffffffffffffffffffff9287847fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef97160361363d575b5050925050613578565b83831660005281855260406000205586600052835260406000208581540190553880613633565b73ffffffffffffffffffffffffffffffffffffffff827f754f425b000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b67ffffffffffffffff811161075a57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926136ee826136a8565b916136fc60405193846125f6565b82948184528183011161032a578281602093846000960137010152565b9081602091031261032a5751801515810361032a5790565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016801561384d573233148015613852575b61384d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c908033149081156137bc575b506137b957503390565b90565b6040517f019a202800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201523360248201523060448201529150602090829060649082905afa908115610c295760009161382e575b50386137af565b613847915060203d602011610eb957610eab81836125f6565b38613827565b503390565b5060183610613778565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168015613990573233148015613998575b613990578033149081156138ef575b506138be576000903690565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36019036821161032a5760009190565b6040517f019a20280000000000000000000000000000000000000000000000000000000081527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c60048201523360248201523060448201529150602090829060649082905afa908115610c2957600091613971575b50386138b2565b61398a915060203d602011610eb957610eab81836125f6565b3861396a565b506000903690565b50601836106138a3565b613a1173ffffffffffffffffffffffffffffffffffffffff9294958360209516968460405197889687967f4fc358590000000000000000000000000000000000000000000000000000000088521660048701521660248501526044840152608060648401526084830190612394565b03816000865af1908115610c2957600091613aa1575b507fffffffff000000000000000000000000000000000000000000000000000000007f4fc3585900000000000000000000000000000000000000000000000000000000911603613a745750565b7f6d4497360000000000000000000000000000000000000000000000000000000060005260045260246000fd5b6020813d602011613b1b575b81613aba602093836125f6565b81010312613b175751907fffffffff0000000000000000000000000000000000000000000000000000000082168203613b1457507fffffffff00000000000000000000000000000000000000000000000000000000613a27565b80fd5b5080fd5b3d9150613aad56fea2646970667358221220c752618e56d76f4fd0fd334c30e4d96c7048f507884a39ad5c04bec19f9fe0dd64736f6c634300081e0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
