/* See comments below */

const unsigned char data[] = {
/* 000000 */  0x2f,  0x2a,  0x20,  0x54,  0x68,  0x69,  0x73,  0x20,
/* 0x0008 */  0x69,  0x73,  0x20,  0x61,  0x20,  0x73,  0x65,  0x6c,
/* 0x0010 */  0x66,  0x72,  0x65,  0x70,  0x20,  0x28,  0x71,  0x75,
/* 0x0018 */  0x69,  0x6e,  0x65,  0x29,  0x20,  0x70,  0x72,  0x6f,
/* 0x0020 */  0x67,  0x72,  0x61,  0x6d,  0x2e,  0x20,  0x20,  0x49,
/* 0x0028 */  0x74,  0x20,  0x75,  0x73,  0x65,  0x73,  0x20,  0x74,
/* 0x0030 */  0x68,  0x65,  0x20,  0x61,  0x62,  0x6f,  0x76,  0x65,
/* 0x0038 */  0x20,  0x64,  0x61,  0x74,  0x61,  0x20,  0x28,  0x77,
/* 0x0040 */  0x68,  0x69,  0x63,  0x68,  0x0a,  0x20,  0x2a,  0x20,
/* 0x0048 */  0x69,  0x73,  0x20,  0x6e,  0x6f,  0x20,  0x6f,  0x74,
/* 0x0050 */  0x68,  0x65,  0x72,  0x20,  0x74,  0x68,  0x61,  0x6e,
/* 0x0058 */  0x20,  0x74,  0x68,  0x65,  0x20,  0x41,  0x53,  0x43,
/* 0x0060 */  0x49,  0x49,  0x20,  0x72,  0x65,  0x70,  0x72,  0x65,
/* 0x0068 */  0x73,  0x65,  0x6e,  0x74,  0x61,  0x74,  0x69,  0x6f,
/* 0x0070 */  0x6e,  0x20,  0x6f,  0x66,  0x20,  0x65,  0x76,  0x65,
/* 0x0078 */  0x72,  0x79,  0x74,  0x68,  0x69,  0x6e,  0x67,  0x20,
/* 0x0080 */  0x73,  0x74,  0x61,  0x72,  0x74,  0x69,  0x6e,  0x67,
/* 0x0088 */  0x0a,  0x20,  0x2a,  0x20,  0x66,  0x72,  0x6f,  0x6d,
/* 0x0090 */  0x20,  0x74,  0x68,  0x69,  0x73,  0x20,  0x63,  0x6f,
/* 0x0098 */  0x6d,  0x6d,  0x65,  0x6e,  0x74,  0x29,  0x20,  0x74,
/* 0x00a0 */  0x6f,  0x20,  0x70,  0x72,  0x69,  0x6e,  0x74,  0x20,
/* 0x00a8 */  0x69,  0x74,  0x73,  0x20,  0x6f,  0x77,  0x6e,  0x20,
/* 0x00b0 */  0x6c,  0x69,  0x73,  0x74,  0x69,  0x6e,  0x67,  0x2e,
/* 0x00b8 */  0x20,  0x2a,  0x2f,  0x0a,  0x0a,  0x23,  0x69,  0x6e,
/* 0x00c0 */  0x63,  0x6c,  0x75,  0x64,  0x65,  0x20,  0x3c,  0x73,
/* 0x00c8 */  0x74,  0x64,  0x69,  0x6f,  0x2e,  0x68,  0x3e,  0x0a,
/* 0x00d0 */  0x0a,  0x69,  0x6e,  0x74,  0x0a,  0x6d,  0x61,  0x69,
/* 0x00d8 */  0x6e,  0x20,  0x28,  0x76,  0x6f,  0x69,  0x64,  0x29,
/* 0x00e0 */  0x0a,  0x20,  0x20,  0x20,  0x20,  0x20,  0x2f,  0x2a,
/* 0x00e8 */  0x20,  0x54,  0x68,  0x65,  0x20,  0x6d,  0x61,  0x69,
/* 0x00f0 */  0x6e,  0x20,  0x70,  0x72,  0x6f,  0x67,  0x72,  0x61,
/* 0x00f8 */  0x6d,  0x2e,  0x20,  0x20,  0x57,  0x65,  0x20,  0x6f,
/* 0x0100 */  0x75,  0x74,  0x70,  0x75,  0x74,  0x20,  0x74,  0x68,
/* 0x0108 */  0x65,  0x20,  0x64,  0x61,  0x74,  0x61,  0x20,  0x69,
/* 0x0110 */  0x6e,  0x20,  0x74,  0x68,  0x65,  0x20,  0x66,  0x6f,
/* 0x0118 */  0x72,  0x6d,  0x61,  0x74,  0x20,  0x75,  0x73,  0x65,
/* 0x0120 */  0x64,  0x20,  0x61,  0x74,  0x0a,  0x20,  0x20,  0x20,
/* 0x0128 */  0x20,  0x20,  0x20,  0x2a,  0x20,  0x74,  0x68,  0x65,
/* 0x0130 */  0x20,  0x74,  0x6f,  0x70,  0x20,  0x6f,  0x66,  0x20,
/* 0x0138 */  0x74,  0x68,  0x69,  0x73,  0x20,  0x66,  0x69,  0x6c,
/* 0x0140 */  0x65,  0x2c,  0x20,  0x61,  0x6e,  0x64,  0x20,  0x74,
/* 0x0148 */  0x68,  0x65,  0x6e,  0x20,  0x77,  0x65,  0x20,  0x75,
/* 0x0150 */  0x73,  0x65,  0x20,  0x69,  0x74,  0x20,  0x74,  0x6f,
/* 0x0158 */  0x20,  0x67,  0x65,  0x6e,  0x65,  0x72,  0x61,  0x74,
/* 0x0160 */  0x65,  0x20,  0x74,  0x68,  0x65,  0x20,  0x72,  0x65,
/* 0x0168 */  0x73,  0x74,  0x0a,  0x20,  0x20,  0x20,  0x20,  0x20,
/* 0x0170 */  0x20,  0x2a,  0x20,  0x6f,  0x66,  0x20,  0x74,  0x68,
/* 0x0178 */  0x69,  0x73,  0x20,  0x66,  0x69,  0x6c,  0x65,  0x2e,
/* 0x0180 */  0x20,  0x2a,  0x2f,  0x0a,  0x7b,  0x0a,  0x20,  0x20,
/* 0x0188 */  0x75,  0x6e,  0x73,  0x69,  0x67,  0x6e,  0x65,  0x64,
/* 0x0190 */  0x20,  0x69,  0x6e,  0x74,  0x20,  0x69,  0x3b,  0x0a,
/* 0x0198 */  0x0a,  0x20,  0x20,  0x70,  0x72,  0x69,  0x6e,  0x74,
/* 0x01a0 */  0x66,  0x20,  0x28,  0x22,  0x2f,  0x2a,  0x20,  0x53,
/* 0x01a8 */  0x65,  0x65,  0x20,  0x63,  0x6f,  0x6d,  0x6d,  0x65,
/* 0x01b0 */  0x6e,  0x74,  0x73,  0x20,  0x62,  0x65,  0x6c,  0x6f,
/* 0x01b8 */  0x77,  0x20,  0x2a,  0x2f,  0x5c,  0x6e,  0x5c,  0x6e,
/* 0x01c0 */  0x22,  0x29,  0x3b,  0x0a,  0x20,  0x20,  0x70,  0x72,
/* 0x01c8 */  0x69,  0x6e,  0x74,  0x66,  0x20,  0x28,  0x22,  0x63,
/* 0x01d0 */  0x6f,  0x6e,  0x73,  0x74,  0x20,  0x75,  0x6e,  0x73,
/* 0x01d8 */  0x69,  0x67,  0x6e,  0x65,  0x64,  0x20,  0x63,  0x68,
/* 0x01e0 */  0x61,  0x72,  0x20,  0x64,  0x61,  0x74,  0x61,  0x5b,
/* 0x01e8 */  0x5d,  0x20,  0x3d,  0x20,  0x7b,  0x22,  0x29,  0x3b,
/* 0x01f0 */  0x0a,  0x20,  0x20,  0x66,  0x6f,  0x72,  0x20,  0x28,
/* 0x01f8 */  0x20,  0x69,  0x3d,  0x30,  0x20,  0x3b,  0x20,  0x69,
/* 0x0200 */  0x3c,  0x73,  0x69,  0x7a,  0x65,  0x6f,  0x66,  0x28,
/* 0x0208 */  0x64,  0x61,  0x74,  0x61,  0x29,  0x20,  0x3b,  0x20,
/* 0x0210 */  0x69,  0x2b,  0x2b,  0x20,  0x29,  0x0a,  0x20,  0x20,
/* 0x0218 */  0x20,  0x20,  0x7b,  0x0a,  0x20,  0x20,  0x20,  0x20,
/* 0x0220 */  0x20,  0x20,  0x69,  0x66,  0x20,  0x28,  0x20,  0x69,
/* 0x0228 */  0x25,  0x38,  0x20,  0x3d,  0x3d,  0x20,  0x30,  0x20,
/* 0x0230 */  0x29,  0x0a,  0x09,  0x70,  0x72,  0x69,  0x6e,  0x74,
/* 0x0238 */  0x66,  0x20,  0x28,  0x22,  0x5c,  0x6e,  0x2f,  0x2a,
/* 0x0240 */  0x20,  0x25,  0x30,  0x23,  0x36,  0x78,  0x20,  0x2a,
/* 0x0248 */  0x2f,  0x22,  0x2c,  0x69,  0x29,  0x3b,  0x0a,  0x20,
/* 0x0250 */  0x20,  0x20,  0x20,  0x20,  0x20,  0x70,  0x72,  0x69,
/* 0x0258 */  0x6e,  0x74,  0x66,  0x20,  0x28,  0x22,  0x20,  0x20,
/* 0x0260 */  0x25,  0x30,  0x23,  0x34,  0x78,  0x2c,  0x22,  0x2c,
/* 0x0268 */  0x20,  0x64,  0x61,  0x74,  0x61,  0x5b,  0x69,  0x5d,
/* 0x0270 */  0x29,  0x3b,  0x0a,  0x20,  0x20,  0x20,  0x20,  0x7d,
/* 0x0278 */  0x0a,  0x20,  0x20,  0x70,  0x72,  0x69,  0x6e,  0x74,
/* 0x0280 */  0x66,  0x20,  0x28,  0x22,  0x5c,  0x6e,  0x7d,  0x3b,
/* 0x0288 */  0x5c,  0x6e,  0x5c,  0x6e,  0x22,  0x29,  0x3b,  0x0a,
/* 0x0290 */  0x20,  0x20,  0x66,  0x6f,  0x72,  0x20,  0x28,  0x20,
/* 0x0298 */  0x69,  0x3d,  0x30,  0x20,  0x3b,  0x20,  0x69,  0x3c,
/* 0x02a0 */  0x73,  0x69,  0x7a,  0x65,  0x6f,  0x66,  0x28,  0x64,
/* 0x02a8 */  0x61,  0x74,  0x61,  0x29,  0x20,  0x3b,  0x20,  0x69,
/* 0x02b0 */  0x2b,  0x2b,  0x20,  0x29,  0x0a,  0x20,  0x20,  0x20,
/* 0x02b8 */  0x20,  0x70,  0x75,  0x74,  0x63,  0x68,  0x61,  0x72,
/* 0x02c0 */  0x20,  0x28,  0x64,  0x61,  0x74,  0x61,  0x5b,  0x69,
/* 0x02c8 */  0x5d,  0x29,  0x3b,  0x0a,  0x20,  0x20,  0x72,  0x65,
/* 0x02d0 */  0x74,  0x75,  0x72,  0x6e,  0x20,  0x30,  0x3b,  0x0a,
/* 0x02d8 */  0x7d,  0x0a,
};

/* This is a selfrep (quine) program.  It uses the above data (which
 * is no other than the ASCII representation of everything starting
 * from this comment) to print its own listing. */

#include <stdio.h>

int
main (void)
     /* The main program.  We output the data in the format used at
      * the top of this file, and then we use it to generate the rest
      * of this file. */
{
  unsigned int i;

  printf ("/* See comments below */\n\n");
  printf ("const unsigned char data[] = {");
  for ( i=0 ; i<sizeof(data) ; i++ )
    {
      if ( i%8 == 0 )
	printf ("\n/* %0#6x */",i);
      printf ("  %0#4x,", data[i]);
    }
  printf ("\n};\n\n");
  for ( i=0 ; i<sizeof(data) ; i++ )
    putchar (data[i]);
  return 0;
}
