; Rule       : IPv6address
; Replaces   : IPv6address (RFC 3986)
; Reason     : the IPv6address rule in RFC 3986 requires more than 1 lookahead symbol
; Example    : "1::" matches ( h16 ":" ), but it should instead match ( h16 "::" )
; Rules used : h16 (RFC 3986), ls32 (RFC 3986)

IPv6address = (                6( h16 ":" ) ls32 )
            / (           "::" 5( h16 ":" ) ls32 )
            / ( [   h16 ] "::" 4( h16 ":" ) ls32 )
            / ( [ h16-2 ] "::" 3( h16 ":" ) ls32 )
            / ( [ h16-3 ] "::" 2( h16 ":" ) ls32 )
            / ( [ h16-4 ] "::"    h16 ":"   ls32 )
            / ( [ h16-5 ] "::"              ls32 )
            / ( [ h16-6 ] "::"               h16 )
            / ( [ h16-7 ] "::"                   )

h16-7       = ( *6( h16 ":" ) h16 ) / h16-6

h16-6       = ( *5( h16 ":" ) h16 ) / h16-5

h16-5       = ( *4( h16 ":" ) h16 ) / h16-4

h16-4       = ( *3( h16 ":" ) h16 ) / h16-3

h16-3       = ( *2( h16 ":" ) h16 ) / h16-2

h16-2       = (     h16 ":"   h16 ) / h16