<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_para_route_dst(self, code, cbit, clen, *, desc, length, version):
 """Read HIP ROUTE_DST parameter. Structure of HIP ROUTE_DST parameter [RFC 6028]: 0 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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type | Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Flags | Reserved | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | HIT #1 | | | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ . . . . . . +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | HIT #n | | | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Octets Bits Name Description 0 0 route_dst.type Parameter Type 1 15 route_dst.critical Critical Bit 2 16 route_dst.length Length of Contents 4 32 route_dst.flags Flags 4 32 route_dst.flags.symmetric SYMMETRIC [RFC 6028] 4 33 route_dst.flags.must_follow MUST_FOLLOW [RFC 6028] 6 48 - Reserved 8 64 route_dst.ip HIT """

        if (clen - 4) % 16 != 0:
            raise ProtocolError(f'HIPv{version}: [Parano {code}] invalid format')

        _flag = self._read_binary(2)
        _resv = self._read_fileng(2)
        _addr = list()
        for _ in range((clen - 4) // 16):
            _addr.append(ipaddress.ip_address(self._read_fileng(16)))

        route_dst = dict(
            type=desc,
            critical=cbit,
            length=clen,
            flags=dict(
                symmetric=True if int(_flag[0], base=2) else False,
                must_follow=True if int(_flag[1], base=2) else False,
            ),
            ip=tuple(_addr),
        )

        return route_dst