<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _read_mptcp_capable(self, bits, size, kind):
 """Read Multipath Capable option. Positional arguments: * bits - str, 4-bit data * size - int, length of option * kind - int, 30 (Multipath TCP) Returns: * dict -- extracted Multipath Capable (MP_CAPABLE) option Structure of MP_CAPABLE [RFC 6824]: 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | Kind | Length |Subtype|Version|A|B|C|D|E|F|G|H| | Option Sender's Key (64 bits) | | | | | | Option Receiver's Key (64 bits) | | (if option Length == 20) | | | Octets Bits Name Description 0 0 tcp.mp.kind Kind (30) 1 8 tcp.mp.length Length (12/20) 2 16 tcp.mp.subtype Subtype (0) 2 20 tcp.mp.capable.version Version 3 24 tcp.mp.capable.flags.req Checksum Require Flag (A) 3 25 tcp.mp.capable.flags.ext Extensibility Flag (B) 3 26 tcp.mp.capable.flags.res Unassigned (C-G) 3 31 tcp.mp.capable.flags.hsa HMAC-SHA1 Flag (H) 4 32 tcp.mp.capable.skey Option Sender's Key 12 96 tcp.mp.capable.rkey Option Receiver's Key (if option Length == 20) """

        vers = int(bits, base=2)
        bins = self._read_binary(1)
        skey = self._read_fileng(8)
        rkey = self._read_fileng(8) if size == 17 else None

        data = dict(
            kind=kind,
            length=size + 1,
            subtype='MP_CAPABLE',
            capable=dict(
                version=vers,
                flags=dict(
                    req=True if int(bins[0]) else False,
                    ext=True if int(bins[1]) else False,
                    res=bytes(chr(int(bits[2:7], base=2)), encoding='utf-8'),
                    hsa=True if int(bins[7]) else False,
                ),
                skey=skey,
                rkey=rkey,
            ),
        )

        return data