/*
 * Disclaimer of Warranty
 *
 * These software programs are available to the user without any
 * license fee or royalty on an "as is" basis. The ITU-T
 * disclaims any and all warranties, whether express, implied, or
 * statutory, including any implied warranties of merchantability
 * or of fitness for a particular purpose.  In no event shall the
 * copyright-holder be liable for any incidental, punitive, or
 * consequential damages of any kind whatsoever arising from the
 * use of these programs.
 *
 * This disclaimer of warranty extends to the user of these programs
 * and user's customers, employees, agents, transferees, successors,
 * and assigns.
 *
 * The ITU-T does not represent or warrant that the programs furnished
 * hereunder are free of infringement of any third-party patents.
 * Commercial implementations of ITU-T standards, including shareware,
 * may be subject to royalty fees to patent holders.  Information
 * regarding the ITU patent policy is available from the ITU
 * Web site at http://www.itu.int.
 *
 */

