[ { "inputs": [ { "internalType": "contract IERC20", "name": "_asset", "type": "address" }, { "internalType": "address", "name": "treasuryAddress", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" } ], "name": "AddressEmptyCode", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "AddressInsufficientBalance", "type": "error" }, { "inputs": [], "name": "CheckpointUnorderedInsertion", "type": "error" }, { "inputs": [], "name": "ECDSAInvalidSignature", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "length", "type": "uint256" } ], "name": "ECDSAInvalidSignatureLength", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "ECDSAInvalidSignatureS", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "increasedSupply", "type": "uint256" }, { "internalType": "uint256", "name": "cap", "type": "uint256" } ], "name": "ERC20ExceededSafeSupply", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "allowance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientAllowance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC20InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC20InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC20InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" } ], "name": "ERC20InvalidSpender", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "name": "ERC2612ExpiredSignature", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "signer", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC2612InvalidSigner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "assets", "type": "uint256" }, { "internalType": "uint256", "name": "max", "type": "uint256" } ], "name": "ERC4626ExceededMaxDeposit", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "uint256", "name": "max", "type": "uint256" } ], "name": "ERC4626ExceededMaxMint", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "uint256", "name": "max", "type": "uint256" } ], "name": "ERC4626ExceededMaxRedeem", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "assets", "type": "uint256" }, { "internalType": "uint256", "name": "max", "type": "uint256" } ], "name": "ERC4626ExceededMaxWithdraw", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "timepoint", "type": "uint256" }, { "internalType": "uint48", "name": "clock", "type": "uint48" } ], "name": "ERC5805FutureLookup", "type": "error" }, { "inputs": [], "name": "ERC6372InconsistentClock", "type": "error" }, { "inputs": [], "name": "FailedInnerCall", "type": "error" }, { "inputs": [], "name": "FeeOutOfBounds", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "currentNonce", "type": "uint256" } ], "name": "InvalidAccountNonce", "type": "error" }, { "inputs": [], "name": "InvalidFeeRecipient", "type": "error" }, { "inputs": [], "name": "InvalidShortString", "type": "error" }, { "inputs": [], "name": "MathOverflowedMulDiv", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "type": "error" }, { "inputs": [ { "internalType": "uint8", "name": "bits", "type": "uint8" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "SafeCastOverflowedUintDowncast", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "SafeERC20FailedOperation", "type": "error" }, { "inputs": [ { "internalType": "string", "name": "str", "type": "string" } ], "name": "StringTooLong", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "expiry", "type": "uint256" } ], "name": "VotesExpiredSignature", "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": "delegator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "fromDelegate", "type": "address" }, { "indexed": true, "internalType": "address", "name": "toDelegate", "type": "address" } ], "name": "DelegateChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "delegate", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "previousVotes", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newVotes", "type": "uint256" } ], "name": "DelegateVotesChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "assets", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "Deposit", "type": "event" }, { "anonymous": false, "inputs": [], "name": "EIP712DomainChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "caller", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "newFee", "type": "uint256" } ], "name": "FeeUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "caller", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newAddress", "type": "address" } ], "name": "TreasuryUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "receiver", "type": "address" }, { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "assets", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "Withdraw", "type": "event" }, { "inputs": [], "name": "CLOCK_MODE", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "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": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "asset", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint32", "name": "pos", "type": "uint32" } ], "name": "checkpoints", "outputs": [ { "components": [ { "internalType": "uint48", "name": "_key", "type": "uint48" }, { "internalType": "uint208", "name": "_value", "type": "uint208" } ], "internalType": "struct Checkpoints.Checkpoint208", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "clock", "outputs": [ { "internalType": "uint48", "name": "", "type": "uint48" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "convertToAssets", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" } ], "name": "convertToShares", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "delegatee", "type": "address" } ], "name": "delegate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "delegatee", "type": "address" }, { "internalType": "uint256", "name": "nonce", "type": "uint256" }, { "internalType": "uint256", "name": "expiry", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "delegateBySig", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "delegates", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "deposit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "eip712Domain", "outputs": [ { "internalType": "bytes1", "name": "fields", "type": "bytes1" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "version", "type": "string" }, { "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "address", "name": "verifyingContract", "type": "address" }, { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, { "internalType": "uint256[]", "name": "extensions", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "entryFeeBasisPoints", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "entryFeeTreasury", "outputs": [ { "internalType": "address payable", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "exitFeeBasisPoints", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "exitFeeTreasury", "outputs": [ { "internalType": "address payable", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "timepoint", "type": "uint256" } ], "name": "getPastTotalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "timepoint", "type": "uint256" } ], "name": "getPastVotes", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "getVotes", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "maxDeposit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "maxMint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "maxRedeem", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "maxWithdraw", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "mint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "numCheckpoints", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "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": "uint256", "name": "assets", "type": "uint256" } ], "name": "previewDeposit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "previewMint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "previewRedeem", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" } ], "name": "previewWithdraw", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "redeem", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_newFeeBasisPoints", "type": "uint256" } ], "name": "setEntryFeeBasisPoints", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "feeRecipient", "type": "address" } ], "name": "setEntryFeeRecipient", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_newFeeBasisPoints", "type": "uint256" } ], "name": "setExitFeeBasisPoints", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "feeRecipient", "type": "address" } ], "name": "setExitFeeRecipient", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_newFeeBasisPoints", "type": "uint256" } ], "name": "setTransferFeeBasisPoints", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "feeRecipient", "type": "address" } ], "name": "setTransferFeeRecipient", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalAssets", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "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": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "transferFeeBasisPoints", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "transferFeeTreasury", "outputs": [ { "internalType": "address payable", "name": "", "type": "address" } ], "stateMutability": "view", "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": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "withdraw", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_recipient", "type": "address" } ], "name": "withdrawNative", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_tokenContract", "type": "address" }, { "internalType": "address", "name": "_recipient", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "withdrawToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ]
6101a06040526101f4600f55606460105560646011553480156200002257600080fd5b5060405162006ddb38038062006ddb833981810160405281019062000048919062000775565b33826040518060400160405280600c81526020017f4b696d626f205363686f6f6c0000000000000000000000000000000000000000815250806040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600c81526020017f4b696d626f205363686f6f6c00000000000000000000000000000000000000008152506040518060400160405280600681526020017f744b696d626f0000000000000000000000000000000000000000000000000000815250816003908162000134919062000a36565b50806004908162000146919062000a36565b5050506200015f600583620003ba60201b90919060201c565b61012081815250506200017d600682620003ba60201b90919060201c565b6101408181525050818051906020012060e08181525050808051906020012061010081815250504660a08181525050620001bc6200041260201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff16815250505050506000806200020e836200046f60201b60201c565b91509150816200022057601262000222565b805b60ff166101808160ff16815250508273ffffffffffffffffffffffffffffffffffffffff166101608173ffffffffffffffffffffffffffffffffffffffff1681525050505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620002dd5760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401620002d4919062000b2e565b60405180910390fd5b620002ee816200058960201b60201c565b5080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505062000de7565b6000602083511015620003e057620003d8836200064f60201b60201c565b90506200040c565b82620003f283620006bc60201b60201c565b600001908162000403919062000a36565b5060ff60001b90505b92915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60e0516101005146306040516020016200045495949392919062000b77565b60405160208183030381529060405280519060200120905090565b6000806000808473ffffffffffffffffffffffffffffffffffffffff1660405160240160405160208183030381529060405263313ce56760e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051620004e6919062000c4d565b600060405180830381855afa9150503d806000811462000523576040519150601f19603f3d011682016040523d82523d6000602084013e62000528565b606091505b50915091508180156200053d57506020815110155b156200057a576000818060200190518101906200055b919062000c97565b905060ff8016811162000578576001819450945050505062000584565b505b6000809350935050505b915091565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080829050601f815111156200069f57826040517f305a27a900000000000000000000000000000000000000000000000000000000815260040162000696919062000d2c565b60405180910390fd5b805181620006ad9062000d77565b60001c1760001b915050919050565b6000819050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620006f882620006cb565b9050919050565b60006200070c82620006eb565b9050919050565b6200071e81620006ff565b81146200072a57600080fd5b50565b6000815190506200073e8162000713565b92915050565b6200074f81620006eb565b81146200075b57600080fd5b50565b6000815190506200076f8162000744565b92915050565b600080604083850312156200078f576200078e620006c6565b5b60006200079f858286016200072d565b9250506020620007b2858286016200075e565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200083e57607f821691505b602082108103620008545762000853620007f6565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620008be7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200087f565b620008ca86836200087f565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000917620009116200090b84620008e2565b620008ec565b620008e2565b9050919050565b6000819050919050565b6200093383620008f6565b6200094b62000942826200091e565b8484546200088c565b825550505050565b600090565b6200096262000953565b6200096f81848462000928565b505050565b5b8181101562000997576200098b60008262000958565b60018101905062000975565b5050565b601f821115620009e657620009b0816200085a565b620009bb846200086f565b81016020851015620009cb578190505b620009e3620009da856200086f565b83018262000974565b50505b505050565b600082821c905092915050565b600062000a0b60001984600802620009eb565b1980831691505092915050565b600062000a268383620009f8565b9150826002028217905092915050565b62000a4182620007bc565b67ffffffffffffffff81111562000a5d5762000a5c620007c7565b5b62000a69825462000825565b62000a768282856200099b565b600060209050601f83116001811462000aae576000841562000a99578287015190505b62000aa5858262000a18565b86555062000b15565b601f19841662000abe866200085a565b60005b8281101562000ae85784890151825560018201915060208501945060208101905062000ac1565b8683101562000b08578489015162000b04601f891682620009f8565b8355505b6001600288020188555050505b505050505050565b62000b2881620006eb565b82525050565b600060208201905062000b45600083018462000b1d565b92915050565b6000819050919050565b62000b608162000b4b565b82525050565b62000b7181620008e2565b82525050565b600060a08201905062000b8e600083018862000b55565b62000b9d602083018762000b55565b62000bac604083018662000b55565b62000bbb606083018562000b66565b62000bca608083018462000b1d565b9695505050505050565b600081519050919050565b600081905092915050565b60005b8381101562000c0a57808201518184015260208101905062000bed565b60008484015250505050565b600062000c238262000bd4565b62000c2f818562000bdf565b935062000c4181856020860162000bea565b80840191505092915050565b600062000c5b828462000c16565b915081905092915050565b62000c7181620008e2565b811462000c7d57600080fd5b50565b60008151905062000c918162000c66565b92915050565b60006020828403121562000cb05762000caf620006c6565b5b600062000cc08482850162000c80565b91505092915050565b600082825260208201905092915050565b6000601f19601f8301169050919050565b600062000cf882620007bc565b62000d04818562000cc9565b935062000d1681856020860162000bea565b62000d218162000cda565b840191505092915050565b6000602082019050818103600083015262000d48818462000ceb565b905092915050565b6000819050602082019050919050565b600062000d6e825162000b4b565b80915050919050565b600062000d848262000bd4565b8262000d908462000d50565b905062000d9d8162000d60565b9250602082101562000de05762000ddb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026200087f565b831692505b5050919050565b60805160a05160c05160e0516101005161012051610140516101605161018051615f6e62000e6d60003960006113df015260008181610e9501528181611420015281816136c201526139b901526000612b0801526000612acd0152600061323101526000613210015260006125cc015260006126220152600061264b0152615f6e6000f3fe60806040526004361061036f5760003560e01c8063861d4281116101c6578063c3cda520116100f7578063dd62ed3e11610095578063f1127ed81161006f578063f1127ed814610dd7578063f2fde38b14610e14578063f8b4638b14610e3d578063f9f97c9814610e6857610376565b8063dd62ed3e14610d32578063e0f0bd9b14610d6f578063ef8b30f714610d9a57610376565b8063ce96cb77116100d1578063ce96cb7714610c66578063d505accf14610ca3578063d905777e14610ccc578063da40390314610d0957610376565b8063c3cda52014610bc3578063c63d75b614610bec578063c6e6f59214610c2957610376565b80639ab24eb011610164578063b3d7f6b91161013e578063b3d7f6b914610ae1578063b460af9414610b1e578063ba08765214610b5b578063ba0af7a914610b9857610376565b80639ab24eb014610a3e578063a9059cbb14610a7b578063ac4dcb7614610ab857610376565b80638e539e8c116101a05780638e539e8c1461096e57806391ddadf4146109ab57806394bf804d146109d657806395d89b4114610a1357610376565b8063861d4281146108ed57806386915573146109185780638da5cb5b1461094357610376565b806338d52e0f116102a05780635c19a95c1161023e57806370a082311161021857806370a082311461082b578063715018a6146108685780637ecebe001461087f57806384b0196e146108bc57610376565b80635c19a95c146107885780636e553f65146107b15780636fcfff45146107ee57610376565b80634bf5d7e91161027a5780634bf5d7e9146106ba5780634cdad506146106e5578063587cde1e146107225780635b63b05c1461075f57610376565b806338d52e0f146106155780633a46b1a814610640578063402d267d1461067d57610376565b8063183767da1161030d57806323b872dd116102e757806323b872dd146105595780632f622e6b14610596578063313ce567146105bf5780633644e515146105ea57610376565b8063183767da146104dc5780631fc6456b1461050757806321c111d61461053057610376565b806307a2d13a1161034957806307a2d13a146103fa578063095ea7b3146104375780630a28a4771461047457806318160ddd146104b157610376565b806301e1d1141461037b57806301e33667146103a657806306fdde03146103cf57610376565b3661037657005b600080fd5b34801561038757600080fd5b50610390610e91565b60405161039d9190614d52565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c89190614dfc565b610f32565b005b3480156103db57600080fd5b506103e4611039565b6040516103f19190614edf565b60405180910390f35b34801561040657600080fd5b50610421600480360381019061041c9190614f01565b6110cb565b60405161042e9190614d52565b60405180910390f35b34801561044357600080fd5b5061045e60048036038101906104599190614f2e565b6110df565b60405161046b9190614f89565b60405180910390f35b34801561048057600080fd5b5061049b60048036038101906104969190614f01565b611102565b6040516104a89190614d52565b60405180910390f35b3480156104bd57600080fd5b506104c6611134565b6040516104d39190614d52565b60405180910390f35b3480156104e857600080fd5b506104f161113e565b6040516104fe9190614d52565b60405180910390f35b34801561051357600080fd5b5061052e60048036038101906105299190614fa4565b611144565b005b34801561053c57600080fd5b5061055760048036038101906105529190614f01565b611243565b005b34801561056557600080fd5b50610580600480360381019061057b9190614dfc565b6112ea565b60405161058d9190614f89565b60405180910390f35b3480156105a257600080fd5b506105bd60048036038101906105b89190614fa4565b61137b565b005b3480156105cb57600080fd5b506105d46113d3565b6040516105e19190614fed565b60405180910390f35b3480156105f657600080fd5b506105ff61140d565b60405161060c9190615021565b60405180910390f35b34801561062157600080fd5b5061062a61141c565b604051610637919061504b565b60405180910390f35b34801561064c57600080fd5b5061066760048036038101906106629190614f2e565b611444565b6040516106749190614d52565b60405180910390f35b34801561068957600080fd5b506106a4600480360381019061069f9190614fa4565b61151d565b6040516106b19190614d52565b60405180910390f35b3480156106c657600080fd5b506106cf611547565b6040516106dc9190614edf565b60405180910390f35b3480156106f157600080fd5b5061070c60048036038101906107079190614f01565b6115db565b6040516107199190614d52565b60405180910390f35b34801561072e57600080fd5b5061074960048036038101906107449190614fa4565b61160d565b604051610756919061504b565b60405180910390f35b34801561076b57600080fd5b5061078660048036038101906107819190614f01565b611676565b005b34801561079457600080fd5b506107af60048036038101906107aa9190614fa4565b61171d565b005b3480156107bd57600080fd5b506107d860048036038101906107d39190615066565b611737565b6040516107e59190614d52565b60405180910390f35b3480156107fa57600080fd5b5061081560048036038101906108109190614fa4565b6117b9565b60405161082291906150c5565b60405180910390f35b34801561083757600080fd5b50610852600480360381019061084d9190614fa4565b6117cb565b60405161085f9190614d52565b60405180910390f35b34801561087457600080fd5b5061087d611813565b005b34801561088b57600080fd5b506108a660048036038101906108a19190614fa4565b611827565b6040516108b39190614d52565b60405180910390f35b3480156108c857600080fd5b506108d1611839565b6040516108e497969594939291906151d9565b60405180910390f35b3480156108f957600080fd5b506109026118e3565b60405161090f919061527e565b60405180910390f35b34801561092457600080fd5b5061092d611909565b60405161093a9190614d52565b60405180910390f35b34801561094f57600080fd5b5061095861190f565b604051610965919061504b565b60405180910390f35b34801561097a57600080fd5b5061099560048036038101906109909190614f01565b611939565b6040516109a29190614d52565b60405180910390f35b3480156109b757600080fd5b506109c06119d4565b6040516109cd91906152ba565b60405180910390f35b3480156109e257600080fd5b506109fd60048036038101906109f89190615066565b6119e3565b604051610a0a9190614d52565b60405180910390f35b348015610a1f57600080fd5b50610a28611a65565b604051610a359190614edf565b60405180910390f35b348015610a4a57600080fd5b50610a656004803603810190610a609190614fa4565b611af7565b604051610a729190614d52565b60405180910390f35b348015610a8757600080fd5b50610aa26004803603810190610a9d9190614f2e565b611b63565b604051610aaf9190614f89565b60405180910390f35b348015610ac457600080fd5b50610adf6004803603810190610ada9190614fa4565b611bf1565b005b348015610aed57600080fd5b50610b086004803603810190610b039190614f01565b611cf0565b604051610b159190614d52565b60405180910390f35b348015610b2a57600080fd5b50610b456004803603810190610b4091906152d5565b611d22565b604051610b529190614d52565b60405180910390f35b348015610b6757600080fd5b50610b826004803603810190610b7d91906152d5565b611da6565b604051610b8f9190614d52565b60405180910390f35b348015610ba457600080fd5b50610bad611e2a565b604051610bba9190614d52565b60405180910390f35b348015610bcf57600080fd5b50610bea6004803603810190610be59190615380565b611e30565b005b348015610bf857600080fd5b50610c136004803603810190610c0e9190614fa4565b611ef6565b604051610c209190614d52565b60405180910390f35b348015610c3557600080fd5b50610c506004803603810190610c4b9190614f01565b611f20565b604051610c5d9190614d52565b60405180910390f35b348015610c7257600080fd5b50610c8d6004803603810190610c889190614fa4565b611f34565b604051610c9a9190614d52565b60405180910390f35b348015610caf57600080fd5b50610cca6004803603810190610cc5919061540d565b611f50565b005b348015610cd857600080fd5b50610cf36004803603810190610cee9190614fa4565b612098565b604051610d009190614d52565b60405180910390f35b348015610d1557600080fd5b50610d306004803603810190610d2b9190614f01565b6120aa565b005b348015610d3e57600080fd5b50610d596004803603810190610d5491906154af565b612151565b604051610d669190614d52565b60405180910390f35b348015610d7b57600080fd5b50610d846121d8565b604051610d91919061527e565b60405180910390f35b348015610da657600080fd5b50610dc16004803603810190610dbc9190614f01565b6121fe565b604051610dce9190614d52565b60405180910390f35b348015610de357600080fd5b50610dfe6004803603810190610df9919061551b565b612230565b604051610e0b91906155ce565b60405180910390f35b348015610e2057600080fd5b50610e3b6004803603810190610e369190614fa4565b61224a565b005b348015610e4957600080fd5b50610e526122d0565b604051610e5f919061527e565b60405180910390f35b348015610e7457600080fd5b50610e8f6004803603810190610e8a9190614fa4565b6122f6565b005b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610eec919061504b565b602060405180830381865afa158015610f09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2d91906155fe565b905090565b610f3a6123f5565b610f4261141c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610faf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa690615677565b60405180910390fd5b60008390508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401610fef929190615697565b6020604051808303816000875af115801561100e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103291906156ec565b5050505050565b60606003805461104890615748565b80601f016020809104026020016040519081016040528092919081815260200182805461107490615748565b80156110c15780601f10611096576101008083540402835291602001916110c1565b820191906000526020600020905b8154815290600101906020018083116110a457829003601f168201915b5050505050905090565b60006110d882600061247c565b9050919050565b6000806110ea6124d5565b90506110f78185856124dd565b600191505092915050565b600080611116836111116124ef565b6124f9565b905061112c818461112791906157a8565b61251d565b915050919050565b6000600254905090565b60115481565b61114c6123f5565b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036111b1576040517f768dc59800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff167f4ab5be82436d353e61ca18726e984e561f5c1cc7c6d38b29d2553c790434705a82604051611238919061504b565b60405180910390a250565b61124b6123f5565b600081108061125b57506101f481115b15611292576040517f26363b7300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600f819055503373ffffffffffffffffffffffffffffffffffffffff167f6f0eaf2c2f89fb4cfe96a1dee5e764d60b52c7f48aaa590f0850e308aa1b953a826040516112df9190614d52565b60405180910390a250565b6000806112fe836112f9612531565b61253b565b9050600061130a61256a565b905060008211801561134857503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b1561135a57611358868284612594565b505b6113708686848761136b91906157dc565b612594565b925050509392505050565b6113836123f5565b60004790508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156113ce573d6000803e3d6000fd5b505050565b60006113dd6125c3565b7f00000000000000000000000000000000000000000000000000000000000000006114089190615810565b905090565b60006114176125c8565b905090565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b60008061144f6119d4565b90508065ffffffffffff16831061149f5782816040517fecd3f81e000000000000000000000000000000000000000000000000000000008152600401611496929190615845565b60405180910390fd5b6114f86114ab8461267f565b600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206126d990919063ffffffff16565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff1691505092915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9050919050565b60606115516127d3565b65ffffffffffff166115616119d4565b65ffffffffffff16146115a0576040517f6ff0714000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040518060400160405280601d81526020017f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000815250905090565b6000806115e7836127e3565b90506115fa816115f56124ef565b61253b565b8161160591906157dc565b915050919050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b61167e6123f5565b600081108061168e57506101f481115b156116c5576040517f26363b7300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806010819055503373ffffffffffffffffffffffffffffffffffffffff167f6f0eaf2c2f89fb4cfe96a1dee5e764d60b52c7f48aaa590f0850e308aa1b953a826040516117129190614d52565b60405180910390a250565b60006117276124d5565b905061173381836127f7565b5050565b6000806117438361151d565b90508084111561178e578284826040517f79012fb20000000000000000000000000000000000000000000000000000000081526004016117859392919061586e565b60405180910390fd5b6000611799856121fe565b90506117ae6117a66124d5565b85878461290b565b809250505092915050565b60006117c482612994565b9050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61181b6123f5565b61182560006129ec565b565b600061183282612ab2565b9050919050565b60006060806000806000606061184d612ac4565b611855612aff565b46306000801b600067ffffffffffffffff811115611876576118756158a5565b5b6040519080825280602002602001820160405280156118a45781602001602082028036833780820191505090505b507f0f00000000000000000000000000000000000000000000000000000000000000959493929190965096509650965096509650965090919293949596565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000806119446119d4565b90508065ffffffffffff1683106119945782816040517fecd3f81e00000000000000000000000000000000000000000000000000000000815260040161198b929190615845565b60405180910390fd5b6119b06119a08461267f565b600a6126d990919063ffffffff16565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915050919050565b60006119de6127d3565b905090565b6000806119ef83611ef6565b905080841115611a3a578284826040517f284ff667000000000000000000000000000000000000000000000000000000008152600401611a319392919061586e565b60405180910390fd5b6000611a4585611cf0565b9050611a5a611a526124d5565b85838861290b565b809250505092915050565b606060048054611a7490615748565b80601f0160208091040260200160405190810160405280929190818152602001828054611aa090615748565b8015611aed5780601f10611ac257610100808354040283529160200191611aed565b820191906000526020600020905b815481529060010190602001808311611ad057829003601f168201915b5050505050905090565b6000611b40600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612b3a565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff169050919050565b600080611b7783611b72612531565b61253b565b90506000611b8361256a565b9050600082118015611bc157503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15611bd257611bd08183612ba2565b505b611be7858386611be291906157dc565b612ba2565b9250505092915050565b611bf96123f5565b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c5e576040517f768dc59800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff167f4ab5be82436d353e61ca18726e984e561f5c1cc7c6d38b29d2553c790434705a82604051611ce5919061504b565b60405180910390a250565b600080611cfc83612bc5565b9050611d0f81611d0a612bd9565b6124f9565b81611d1a91906157a8565b915050919050565b600080611d2e83611f34565b905080851115611d79578285826040517ffe9cceec000000000000000000000000000000000000000000000000000000008152600401611d709392919061586e565b60405180910390fd5b6000611d8486611102565b9050611d9a611d916124d5565b86868985612be3565b80925050509392505050565b600080611db283612098565b905080851115611dfd578285826040517fb94abeec000000000000000000000000000000000000000000000000000000008152600401611df49392919061586e565b60405180910390fd5b6000611e08866115db565b9050611e1e611e156124d5565b8686848a612be3565b80925050509392505050565b600f5481565b83421115611e7557836040517f4683af0e000000000000000000000000000000000000000000000000000000008152600401611e6c9190614d52565b60405180910390fd5b6000611ed7611ecf7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf898989604051602001611eb494939291906158d4565b60405160208183030381529060405280519060200120612c6e565b858585612c88565b9050611ee38187612cb8565b611eed81886127f7565b50505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9050919050565b6000611f2d826000612d10565b9050919050565b6000611f49611f42836117cb565b600061247c565b9050919050565b83421115611f9557836040517f62791302000000000000000000000000000000000000000000000000000000008152600401611f8c9190614d52565b60405180910390fd5b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888611fc48c612d69565b89604051602001611fda96959493929190615919565b6040516020818303038152906040528051906020012090506000611ffd82612c6e565b9050600061200d82878787612c88565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461208157808a6040517f4b800e4600000000000000000000000000000000000000000000000000000000815260040161207892919061597a565b60405180910390fd5b61208c8a8a8a6124dd565b50505050505050505050565b60006120a3826117cb565b9050919050565b6120b26123f5565b60008110806120c257506101f481115b156120f9576040517f26363b7300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806011819055503373ffffffffffffffffffffffffffffffffffffffff167f6f0eaf2c2f89fb4cfe96a1dee5e764d60b52c7f48aaa590f0850e308aa1b953a826040516121469190614d52565b60405180910390a250565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806122128361220d612bd9565b61253b565b9050612228818461222391906157dc565b612dc0565b915050919050565b612238614cfb565b6122428383612dd4565b905092915050565b6122526123f5565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036122c45760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016122bb919061504b565b60405180910390fd5b6122cd816129ec565b50565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6122fe6123f5565b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612363576040517f768dc59800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff167f4ab5be82436d353e61ca18726e984e561f5c1cc7c6d38b29d2553c790434705a826040516123ea919061504b565b60405180910390a250565b6123fd6124d5565b73ffffffffffffffffffffffffffffffffffffffff1661241b61190f565b73ffffffffffffffffffffffffffffffffffffffff161461247a5761243e6124d5565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401612471919061504b565b60405180910390fd5b565b60006124cd600161248b610e91565b61249591906157a8565b61249d6125c3565b600a6124a99190615ad6565b6124b1611134565b6124bb91906157a8565b8486612e35909392919063ffffffff16565b905092915050565b600033905090565b6124ea8383836001612e8c565b505050565b6000601054905090565b600061251582612710600186612e35909392919063ffffffff16565b905092915050565b600061252a826001612d10565b9050919050565b6000601154905090565b6000612562826127108461254f91906157a8565b600186612e35909392919063ffffffff16565b905092915050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008061259f6124d5565b90506125ac858285613063565b6125b78585856130f7565b60019150509392505050565b600090565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614801561264457507f000000000000000000000000000000000000000000000000000000000000000046145b15612671577f0000000000000000000000000000000000000000000000000000000000000000905061267c565b6126796131eb565b90505b90565b600065ffffffffffff80168211156126d1576030826040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526004016126c8929190615b66565b60405180910390fd5b819050919050565b60008083600001805490509050600080829050600583111561276157600061270084613281565b8461270b91906157dc565b905061271a876000018261337a565b60000160009054906101000a900465ffffffffffff1665ffffffffffff168665ffffffffffff16101561274f5780915061275f565b60018161275c91906157a8565b92505b505b60006127728760000187858561338f565b9050600081146127c4576127958760000160018361279091906157dc565b61337a565b60000160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff166127c7565b60005b94505050505092915050565b60006127de4361267f565b905090565b60006127f082600061247c565b9050919050565b60006128028361160d565b905081600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a4612906818361290186613408565b61341a565b505050565b600061291e83612919612bd9565b61253b565b9050600061292a613693565b9050612938868686866136bd565b60008211801561297457503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b1561298c5761298b61298461141c565b8284613760565b5b505050505050565b60006129e56129e0600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206137df565b6137f0565b9050919050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612abd82613848565b9050919050565b6060612afa60057f000000000000000000000000000000000000000000000000000000000000000061389190919063ffffffff16565b905090565b6060612b3560067f000000000000000000000000000000000000000000000000000000000000000061389190919063ffffffff16565b905090565b6000808260000180549050905060008114612b9757612b6883600001600183612b6391906157dc565b61337a565b60000160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff16612b9a565b60005b915050919050565b600080612bad6124d5565b9050612bba8185856130f7565b600191505092915050565b6000612bd282600161247c565b9050919050565b6000600f54905090565b6000612bf683612bf16124ef565b6124f9565b90506000612c02613941565b9050612c11878787878761396b565b600082118015612c4d57503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15612c6557612c64612c5d61141c565b8284613760565b5b50505050505050565b6000612c81612c7b6125c8565b83613a64565b9050919050565b600080600080612c9a88888888613aa5565b925092509250612caa8282613b99565b829350505050949350505050565b6000612cc383612d69565b9050808214612d0b5782816040517f752d88c0000000000000000000000000000000000000000000000000000000008152600401612d02929190615697565b60405180910390fd5b505050565b6000612d61612d1d6125c3565b600a612d299190615ad6565b612d31611134565b612d3b91906157a8565b6001612d45610e91565b612d4f91906157a8565b8486612e35909392919063ffffffff16565b905092915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600101919050559050919050565b6000612dcd826000612d10565b9050919050565b612ddc614cfb565b612e2d82600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613cfd90919063ffffffff16565b905092915050565b600080612e43868686613dd2565b9050612e4e83613ed9565b8015612e6b575060008480612e6657612e65615b8f565b5b868809115b15612e8057600181612e7d91906157a8565b90505b80915050949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612efe5760006040517fe602df05000000000000000000000000000000000000000000000000000000008152600401612ef5919061504b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612f705760006040517f94280d62000000000000000000000000000000000000000000000000000000008152600401612f67919061504b565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550801561305d578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516130549190614d52565b60405180910390a35b50505050565b600061306f8484612151565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146130f157818110156130e1578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016130d89392919061586e565b60405180910390fd5b6130f084848484036000612e8c565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036131695760006040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401613160919061504b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036131db5760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016131d2919061504b565b60405180910390fd5b6131e6838383613f07565b505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000004630604051602001613266959493929190615bbe565b60405160208183030381529060405280519060200120905090565b60008082036132935760009050613375565b600060016132a084613f17565b901c6001901b905060018184816132ba576132b9615b8f565b5b048201901c905060018184816132d3576132d2615b8f565b5b048201901c905060018184816132ec576132eb615b8f565b5b048201901c9050600181848161330557613304615b8f565b5b048201901c9050600181848161331e5761331d615b8f565b5b048201901c9050600181848161333757613336615b8f565b5b048201901c905060018184816133505761334f615b8f565b5b048201901c90506133718182858161336b5761336a615b8f565b5b04613ff8565b9150505b919050565b60008260005281602060002001905092915050565b60005b818310156133fd5760006133a68484614011565b90508465ffffffffffff166133bb878361337a565b60000160009054906101000a900465ffffffffffff1665ffffffffffff1611156133e7578092506133f7565b6001816133f491906157a8565b93505b50613392565b819050949350505050565b6000613413826117cb565b9050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156134565750600081115b1561368e57600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613574576000806134e5600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206140376134e08661404d565b6140bb565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915079ffffffffffffffffffffffffffffffffffffffffffffffffffff1691508473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051613569929190615c11565b60405180910390a250505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461368d576000806135fe600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206140fb6135f98661404d565b6140bb565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915079ffffffffffffffffffffffffffffffffffffffffffffffffffff1691508373ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051613682929190615c11565b60405180910390a250505b5b505050565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6136e97f0000000000000000000000000000000000000000000000000000000000000000853085614111565b6136f38382614193565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d78484604051613752929190615c11565b60405180910390a350505050565b6137da838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8585604051602401613793929190615697565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050614215565b505050565b600081600001805490509050919050565b600063ffffffff8016821115613840576020826040517f6dfcc650000000000000000000000000000000000000000000000000000000008152600401613837929190615c75565b60405180910390fd5b819050919050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b606060ff60001b83146138ae576138a7836142ac565b905061393b565b8180546138ba90615748565b80601f01602080910402602001604051908101604052809291908181526020018280546138e690615748565b80156139335780601f1061390857610100808354040283529160200191613933565b820191906000526020600020905b81548152906001019060200180831161391657829003601f168201915b505050505090505b92915050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146139aa576139a9838683613063565b5b6139b48382614320565b6139df7f00000000000000000000000000000000000000000000000000000000000000008584613760565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db8585604051613a55929190615c11565b60405180910390a45050505050565b60006040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b60008060007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08460001c1115613ae5576000600385925092509250613b8f565b600060018888888860405160008152602001604052604051613b0a9493929190615c9e565b6020604051602081039080840390855afa158015613b2c573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613b8057600060016000801b93509350935050613b8f565b8060008060001b935093509350505b9450945094915050565b60006003811115613bad57613bac615ce3565b5b826003811115613bc057613bbf615ce3565b5b0315613cf95760016003811115613bda57613bd9615ce3565b5b826003811115613bed57613bec615ce3565b5b03613c24576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60026003811115613c3857613c37615ce3565b5b826003811115613c4b57613c4a615ce3565b5b03613c90578060001c6040517ffce698f7000000000000000000000000000000000000000000000000000000008152600401613c879190614d52565b60405180910390fd5b600380811115613ca357613ca2615ce3565b5b826003811115613cb657613cb5615ce3565b5b03613cf857806040517fd78bce0c000000000000000000000000000000000000000000000000000000008152600401613cef9190615021565b60405180910390fd5b5b5050565b613d05614cfb565b826000018263ffffffff1681548110613d2157613d20615d12565b5b906000526020600020016040518060400160405290816000820160009054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020016000820160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1681525050905092915050565b6000808385029050600080198587098281108382030391505060008103613e0d57838281613e0357613e02615b8f565b5b0492505050613ed2565b808411613e46576040517f227bc15300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084868809905082811182039150808303925060008560000386169050808604955080840493506001818260000304019050808302841793506000600287600302189050808702600203810290508087026002038102905080870260020381029050808702600203810290508087026002038102905080870260020381029050808502955050505050505b9392505050565b600060016002836003811115613ef257613ef1615ce3565b5b613efc9190615d41565b60ff16149050919050565b613f128383836143a2565b505050565b600080600090506000608084901c1115613f3957608083901c92506080810190505b6000604084901c1115613f5457604083901c92506040810190505b6000602084901c1115613f6f57602083901c92506020810190505b6000601084901c1115613f8a57601083901c92506010810190505b6000600884901c1115613fa557600883901c92506008810190505b6000600484901c1115613fc057600483901c92506004810190505b6000600284901c1115613fdb57600283901c92506002810190505b6000600184901c1115613fef576001810190505b80915050919050565b60008183106140075781614009565b825b905092915050565b600060028284186140229190615d72565b82841661402f91906157a8565b905092915050565b600081836140459190615da3565b905092915050565b600079ffffffffffffffffffffffffffffffffffffffffffffffffffff80168211156140b35760d0826040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526004016140aa929190615e2c565b60405180910390fd5b819050919050565b6000806140ef6140c96119d4565b6140df6140d588612b3a565b868863ffffffff16565b876144539092919063ffffffff16565b91509150935093915050565b600081836141099190615e55565b905092915050565b61418d848573ffffffffffffffffffffffffffffffffffffffff166323b872dd86868660405160240161414693929190615ea3565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050614215565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036142055760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016141fc919061504b565b60405180910390fd5b61421160008383613f07565b5050565b6000614240828473ffffffffffffffffffffffffffffffffffffffff1661447090919063ffffffff16565b9050600081511415801561426557508080602001905181019061426391906156ec565b155b156142a757826040517f5274afe700000000000000000000000000000000000000000000000000000000815260040161429e919061504b565b60405180910390fd5b505050565b606060006142b983614486565b90506000602067ffffffffffffffff8111156142d8576142d76158a5565b5b6040519080825280601f01601f19166020018201604052801561430a5781602001600182028036833780820191505090505b5090508181528360208201528092505050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036143925760006040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401614389919061504b565b60405180910390fd5b61439e82600083613f07565b5050565b6143ad8383836144d6565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036144435760006143eb611134565b905060006143f76146fb565b9050808211156144405781816040517f1cb15d26000000000000000000000000000000000000000000000000000000008152600401614437929190615c11565b60405180910390fd5b50505b61444e83838361471f565b505050565b6000806144648560000185856147d9565b91509150935093915050565b606061447e83836000614b5a565b905092915050565b60008060ff8360001c169050601f8111156144cd576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361452857806002600082825461451c91906157a8565b925050819055506145fb565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156145b4578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016145ab9392919061586e565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036146445780600260008282540392505081905550614691565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516146ee9190614d52565b60405180910390a3505050565b600079ffffffffffffffffffffffffffffffffffffffffffffffffffff8016905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361476c57614769600a6140fb6147648461404d565b6140bb565b50505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036147b9576147b6600a6140376147b18461404d565b6140bb565b50505b6147d46147c58461160d565b6147ce8461160d565b8361341a565b505050565b6000806000858054905090506000811115614a6a5760006148068760018461480191906157dc565b61337a565b6040518060400160405290816000820160009054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020016000820160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff168152505090508565ffffffffffff16816000015165ffffffffffff1611156148f5576040517f2520601d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8565ffffffffffff16816000015165ffffffffffff160361497957846149278860018561492291906157dc565b61337a565b60000160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff160217905550614a59565b8660405180604001604052808865ffffffffffff1681526020018779ffffffffffffffffffffffffffffffffffffffffffffffffffff168152509080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548165ffffffffffff021916908365ffffffffffff16021790555060208201518160000160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505b806020015185935093505050614b52565b8560405180604001604052808765ffffffffffff1681526020018679ffffffffffffffffffffffffffffffffffffffffffffffffffff168152509080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548165ffffffffffff021916908365ffffffffffff16021790555060208201518160000160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff160217905550505060008492509250505b935093915050565b606081471015614ba157306040517fcd786059000000000000000000000000000000000000000000000000000000008152600401614b98919061504b565b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051614bca9190615f21565b60006040518083038185875af1925050503d8060008114614c07576040519150601f19603f3d011682016040523d82523d6000602084013e614c0c565b606091505b5091509150614c1c868383614c27565b925050509392505050565b606082614c3c57614c3782614cb6565b614cae565b60008251148015614c64575060008473ffffffffffffffffffffffffffffffffffffffff163b145b15614ca657836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401614c9d919061504b565b60405180910390fd5b819050614caf565b5b9392505050565b600081511115614cc95780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040518060400160405280600065ffffffffffff168152602001600079ffffffffffffffffffffffffffffffffffffffffffffffffffff1681525090565b6000819050919050565b614d4c81614d39565b82525050565b6000602082019050614d676000830184614d43565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614d9d82614d72565b9050919050565b614dad81614d92565b8114614db857600080fd5b50565b600081359050614dca81614da4565b92915050565b614dd981614d39565b8114614de457600080fd5b50565b600081359050614df681614dd0565b92915050565b600080600060608486031215614e1557614e14614d6d565b5b6000614e2386828701614dbb565b9350506020614e3486828701614dbb565b9250506040614e4586828701614de7565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b60005b83811015614e89578082015181840152602081019050614e6e565b60008484015250505050565b6000601f19601f8301169050919050565b6000614eb182614e4f565b614ebb8185614e5a565b9350614ecb818560208601614e6b565b614ed481614e95565b840191505092915050565b60006020820190508181036000830152614ef98184614ea6565b905092915050565b600060208284031215614f1757614f16614d6d565b5b6000614f2584828501614de7565b91505092915050565b60008060408385031215614f4557614f44614d6d565b5b6000614f5385828601614dbb565b9250506020614f6485828601614de7565b9150509250929050565b60008115159050919050565b614f8381614f6e565b82525050565b6000602082019050614f9e6000830184614f7a565b92915050565b600060208284031215614fba57614fb9614d6d565b5b6000614fc884828501614dbb565b91505092915050565b600060ff82169050919050565b614fe781614fd1565b82525050565b60006020820190506150026000830184614fde565b92915050565b6000819050919050565b61501b81615008565b82525050565b60006020820190506150366000830184615012565b92915050565b61504581614d92565b82525050565b6000602082019050615060600083018461503c565b92915050565b6000806040838503121561507d5761507c614d6d565b5b600061508b85828601614de7565b925050602061509c85828601614dbb565b9150509250929050565b600063ffffffff82169050919050565b6150bf816150a6565b82525050565b60006020820190506150da60008301846150b6565b92915050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b615115816150e0565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61515081614d39565b82525050565b60006151628383615147565b60208301905092915050565b6000602082019050919050565b60006151868261511b565b6151908185615126565b935061519b83615137565b8060005b838110156151cc5781516151b38882615156565b97506151be8361516e565b92505060018101905061519f565b5085935050505092915050565b600060e0820190506151ee600083018a61510c565b81810360208301526152008189614ea6565b905081810360408301526152148188614ea6565b90506152236060830187614d43565b615230608083018661503c565b61523d60a0830185615012565b81810360c083015261524f818461517b565b905098975050505050505050565b600061526882614d72565b9050919050565b6152788161525d565b82525050565b6000602082019050615293600083018461526f565b92915050565b600065ffffffffffff82169050919050565b6152b481615299565b82525050565b60006020820190506152cf60008301846152ab565b92915050565b6000806000606084860312156152ee576152ed614d6d565b5b60006152fc86828701614de7565b935050602061530d86828701614dbb565b925050604061531e86828701614dbb565b9150509250925092565b61533181614fd1565b811461533c57600080fd5b50565b60008135905061534e81615328565b92915050565b61535d81615008565b811461536857600080fd5b50565b60008135905061537a81615354565b92915050565b60008060008060008060c0878903121561539d5761539c614d6d565b5b60006153ab89828a01614dbb565b96505060206153bc89828a01614de7565b95505060406153cd89828a01614de7565b94505060606153de89828a0161533f565b93505060806153ef89828a0161536b565b92505060a061540089828a0161536b565b9150509295509295509295565b600080600080600080600060e0888a03121561542c5761542b614d6d565b5b600061543a8a828b01614dbb565b975050602061544b8a828b01614dbb565b965050604061545c8a828b01614de7565b955050606061546d8a828b01614de7565b945050608061547e8a828b0161533f565b93505060a061548f8a828b0161536b565b92505060c06154a08a828b0161536b565b91505092959891949750929550565b600080604083850312156154c6576154c5614d6d565b5b60006154d485828601614dbb565b92505060206154e585828601614dbb565b9150509250929050565b6154f8816150a6565b811461550357600080fd5b50565b600081359050615515816154ef565b92915050565b6000806040838503121561553257615531614d6d565b5b600061554085828601614dbb565b925050602061555185828601615506565b9150509250929050565b61556481615299565b82525050565b600079ffffffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b6155998161556a565b82525050565b6040820160008201516155b5600085018261555b565b5060208201516155c86020850182615590565b50505050565b60006040820190506155e3600083018461559f565b92915050565b6000815190506155f881614dd0565b92915050565b60006020828403121561561457615613614d6d565b5b6000615622848285016155e9565b91505092915050565b7f556e6465726c79696e6700000000000000000000000000000000000000000000600082015250565b6000615661600a83614e5a565b915061566c8261562b565b602082019050919050565b6000602082019050818103600083015261569081615654565b9050919050565b60006040820190506156ac600083018561503c565b6156b96020830184614d43565b9392505050565b6156c981614f6e565b81146156d457600080fd5b50565b6000815190506156e6816156c0565b92915050565b60006020828403121561570257615701614d6d565b5b6000615710848285016156d7565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061576057607f821691505b60208210810361577357615772615719565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006157b382614d39565b91506157be83614d39565b92508282019050808211156157d6576157d5615779565b5b92915050565b60006157e782614d39565b91506157f283614d39565b925082820390508181111561580a57615809615779565b5b92915050565b600061581b82614fd1565b915061582683614fd1565b9250828201905060ff81111561583f5761583e615779565b5b92915050565b600060408201905061585a6000830185614d43565b61586760208301846152ab565b9392505050565b6000606082019050615883600083018661503c565b6158906020830185614d43565b61589d6040830184614d43565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006080820190506158e96000830187615012565b6158f6602083018661503c565b6159036040830185614d43565b6159106060830184614d43565b95945050505050565b600060c08201905061592e6000830189615012565b61593b602083018861503c565b615948604083018761503c565b6159556060830186614d43565b6159626080830185614d43565b61596f60a0830184614d43565b979650505050505050565b600060408201905061598f600083018561503c565b61599c602083018461503c565b9392505050565b60008160011c9050919050565b6000808291508390505b60018511156159fa578086048111156159d6576159d5615779565b5b60018516156159e55780820291505b80810290506159f3856159a3565b94506159ba565b94509492505050565b600082615a135760019050615acf565b81615a215760009050615acf565b8160018114615a375760028114615a4157615a70565b6001915050615acf565b60ff841115615a5357615a52615779565b5b8360020a915084821115615a6a57615a69615779565b5b50615acf565b5060208310610133831016604e8410600b8410161715615aa55782820a905083811115615aa057615a9f615779565b5b615acf565b615ab284848460016159b0565b92509050818404811115615ac957615ac8615779565b5b81810290505b9392505050565b6000615ae182614d39565b9150615aec83614fd1565b9250615b197fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484615a03565b905092915050565b6000819050919050565b6000819050919050565b6000615b50615b4b615b4684615b21565b615b2b565b614fd1565b9050919050565b615b6081615b35565b82525050565b6000604082019050615b7b6000830185615b57565b615b886020830184614d43565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600060a082019050615bd36000830188615012565b615be06020830187615012565b615bed6040830186615012565b615bfa6060830185614d43565b615c07608083018461503c565b9695505050505050565b6000604082019050615c266000830185614d43565b615c336020830184614d43565b9392505050565b6000819050919050565b6000615c5f615c5a615c5584615c3a565b615b2b565b614fd1565b9050919050565b615c6f81615c44565b82525050565b6000604082019050615c8a6000830185615c66565b615c976020830184614d43565b9392505050565b6000608082019050615cb36000830187615012565b615cc06020830186614fde565b615ccd6040830185615012565b615cda6060830184615012565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000615d4c82614fd1565b9150615d5783614fd1565b925082615d6757615d66615b8f565b5b828206905092915050565b6000615d7d82614d39565b9150615d8883614d39565b925082615d9857615d97615b8f565b5b828204905092915050565b6000615dae8261556a565b9150615db98361556a565b9250828203905079ffffffffffffffffffffffffffffffffffffffffffffffffffff811115615deb57615dea615779565b5b92915050565b6000819050919050565b6000615e16615e11615e0c84615df1565b615b2b565b614fd1565b9050919050565b615e2681615dfb565b82525050565b6000604082019050615e416000830185615e1d565b615e4e6020830184614d43565b9392505050565b6000615e608261556a565b9150615e6b8361556a565b9250828201905079ffffffffffffffffffffffffffffffffffffffffffffffffffff811115615e9d57615e9c615779565b5b92915050565b6000606082019050615eb8600083018661503c565b615ec5602083018561503c565b615ed26040830184614d43565b949350505050565b600081519050919050565b600081905092915050565b6000615efb82615eda565b615f058185615ee5565b9350615f15818560208601614e6b565b80840191505092915050565b6000615f2d8284615ef0565b91508190509291505056fea2646970667358221220259f32a9e16a3acb0a66c88345ffd9f3228e830efbbf1b0bd6140f41ee68949a64736f6c63430008140033000000000000000000000000a713760d0e70c0b6055dc4f13956d40081c84dfe0000000000000000000000005568938bf4188bb868dbf31614091062c4a44b1e