<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_add(self, bits, size, kind):
 """Read Add Address option. Positional arguments: * bits - str, 4-bit data * size - int, length of option * kind - int, 30 (Multipath TCP) Returns: * dict -- extracted Add Address (ADD_ADDR) option Structure of ADD_ADDR [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| IPVer | Address ID | | Address (IPv4 - 4 octets / IPv6 - 16 octets) | | Port (2 octets, optional) | Octets Bits Name Description 0 0 tcp.mp.kind Kind (30) 1 8 tcp.mp.length Length 2 16 tcp.mp.subtype Subtype (3) 2 20 tcp.mp.addaddr.ipver IP Version 3 24 tcp.mp.addaddr.addrid Address ID 4 32 tcp.mp.addaddr.addr IP Address (4/16) 8-20 64-160 tcp.mp.addaddr.port Port (optional) """

        vers = int(bits, base=2)
        adid = self._read_unpack(1)
        ipad = self._read_fileng(4) if vers == 4 else self._read_fileng(16)
        ip_l = 4 if vers == 4 else 16
        pt_l = size - 1 - ip_l
        port = self._read_unpack(2) if pt_l else None

        data = dict(
            kind=kind,
            length=size + 1,
            subtype='ADD_ADDR',
            addaddr=dict(
                ipver=vers,
                addrid=adid,
                addr=ipaddress.ip_address(ipad),
                port=port,
            ),
        )

        return data