code: public IPv6AddressPool allocate()
      {
          if (!isExhausted())
          {
              // get the first range of free subnets, and take the first subnet of that range
              final IPv6AddressRange firstFreeRange = freeRanges.first();
              final IPv6Network allocated = IPv6Network.fromAddressAndMask(firstFreeRange.getFirst(), allocationSubnetSize);
  
              return doAllocate(allocated, firstFreeRange);
          }
          else
          {
              // exhausted
              return null;
          }
      }
docs: Allocate the first available subnet from the pool.
  
  @return resulting pool