diff --git a/contrib/license.txt.h b/contrib/license.txt.h deleted file mode 100644 index 3f56482..0000000 --- a/contrib/license.txt.h +++ /dev/null @@ -1,3313 +0,0 @@ -unsigned char licenses_txt[] = { - 0x3d, 0x3d, 0x3d, 0x20, 0x46, 0x72, 0x65, 0x65, 0x4c, 0x53, 0x53, 0x2c, - 0x20, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x68, 0x74, 0x74, 0x70, 0x64, 0x2c, - 0x20, 0x77, 0x69, 0x72, 0x69, 0x6e, 0x67, 0x50, 0x69, 0x20, 0x3d, 0x3d, - 0x3d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x47, 0x4e, 0x55, 0x20, 0x47, 0x45, 0x4e, 0x45, 0x52, - 0x41, 0x4c, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x20, 0x4c, 0x49, - 0x43, 0x45, 0x4e, 0x53, 0x45, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x20, 0x33, 0x2c, 0x20, 0x32, 0x39, 0x20, 0x4a, 0x75, 0x6e, 0x65, 0x20, - 0x32, 0x30, 0x30, 0x37, 0x0a, 0x0a, 0x20, 0x43, 0x6f, 0x70, 0x79, 0x72, - 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, 0x43, 0x29, 0x20, 0x32, 0x30, 0x30, - 0x37, 0x20, 0x46, 0x72, 0x65, 0x65, 0x20, 0x53, 0x6f, 0x66, 0x74, 0x77, - 0x61, 0x72, 0x65, 0x20, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x20, 0x3c, 0x68, 0x74, - 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x66, 0x73, 0x66, 0x2e, 0x6f, 0x72, 0x67, - 0x2f, 0x3e, 0x0a, 0x20, 0x45, 0x76, 0x65, 0x72, 0x79, 0x6f, 0x6e, 0x65, - 0x20, 0x69, 0x73, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, - 0x64, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x20, 0x61, 0x6e, - 0x64, 0x20, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, - 0x20, 0x76, 0x65, 0x72, 0x62, 0x61, 0x74, 0x69, 0x6d, 0x20, 0x63, 0x6f, - 0x70, 0x69, 0x65, 0x73, 0x0a, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, - 0x73, 0x20, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x64, 0x6f, - 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2c, 0x20, 0x62, 0x75, 0x74, 0x20, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x74, 0x20, - 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, - 0x65, 0x64, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x72, 0x65, - 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x0a, 0x0a, 0x20, 0x20, 0x54, 0x68, 0x65, - 0x20, 0x47, 0x4e, 0x55, 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, - 0x20, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x4c, 0x69, 0x63, 0x65, - 0x6e, 0x73, 0x65, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x66, 0x72, 0x65, - 0x65, 0x2c, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x6c, 0x65, 0x66, 0x74, 0x20, - 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x0a, - 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x61, 0x6e, 0x64, - 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x6b, 0x69, 0x6e, 0x64, 0x73, - 0x20, 0x6f, 0x66, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x2e, 0x0a, 0x0a, - 0x20, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, - 0x65, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6d, 0x6f, 0x73, 0x74, 0x20, - 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x61, 0x6e, 0x64, - 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x70, 0x72, 0x61, 0x63, 0x74, - 0x69, 0x63, 0x61, 0x6c, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x20, 0x61, - 0x72, 0x65, 0x20, 0x64, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x0a, - 0x74, 0x6f, 0x20, 0x74, 0x61, 0x6b, 0x65, 0x20, 0x61, 0x77, 0x61, 0x79, - 0x20, 0x79, 0x6f, 0x75, 0x72, 0x20, 0x66, 0x72, 0x65, 0x65, 0x64, 0x6f, - 0x6d, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x68, 0x61, 0x72, 0x65, 0x20, 0x61, - 0x6e, 0x64, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x2e, 0x20, 0x20, 0x42, 0x79, - 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x73, 0x74, 0x2c, 0x0a, 0x74, - 0x68, 0x65, 0x20, 0x47, 0x4e, 0x55, 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x6c, 0x20, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x4c, 0x69, - 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x74, - 0x65, 0x6e, 0x64, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x67, 0x75, 0x61, - 0x72, 0x61, 0x6e, 0x74, 0x65, 0x65, 0x20, 0x79, 0x6f, 0x75, 0x72, 0x20, - 0x66, 0x72, 0x65, 0x65, 0x64, 0x6f, 0x6d, 0x20, 0x74, 0x6f, 0x0a, 0x73, - 0x68, 0x61, 0x72, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x70, 0x72, - 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x2d, 0x2d, 0x74, 0x6f, 0x20, 0x6d, 0x61, - 0x6b, 0x65, 0x20, 0x73, 0x75, 0x72, 0x65, 0x20, 0x69, 0x74, 0x20, 0x72, - 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x20, 0x66, 0x72, 0x65, 0x65, 0x0a, - 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x66, 0x6f, 0x72, - 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x69, 0x74, 0x73, 0x20, 0x75, 0x73, 0x65, - 0x72, 0x73, 0x2e, 0x20, 0x20, 0x57, 0x65, 0x2c, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x46, 0x72, 0x65, 0x65, 0x20, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, - 0x72, 0x65, 0x20, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2c, 0x20, 0x75, 0x73, 0x65, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x47, - 0x4e, 0x55, 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x50, - 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, - 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x6f, - 0x66, 0x20, 0x6f, 0x75, 0x72, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, - 0x72, 0x65, 0x3b, 0x20, 0x69, 0x74, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, - 0x65, 0x73, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x74, 0x6f, 0x0a, 0x61, - 0x6e, 0x79, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x77, 0x6f, 0x72, - 0x6b, 0x20, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x20, 0x74, - 0x68, 0x69, 0x73, 0x20, 0x77, 0x61, 0x79, 0x20, 0x62, 0x79, 0x20, 0x69, - 0x74, 0x73, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x73, 0x2e, 0x20, - 0x20, 0x59, 0x6f, 0x75, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x61, 0x70, 0x70, - 0x6c, 0x79, 0x20, 0x69, 0x74, 0x20, 0x74, 0x6f, 0x0a, 0x79, 0x6f, 0x75, - 0x72, 0x20, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x73, 0x2c, 0x20, - 0x74, 0x6f, 0x6f, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x57, 0x68, 0x65, 0x6e, - 0x20, 0x77, 0x65, 0x20, 0x73, 0x70, 0x65, 0x61, 0x6b, 0x20, 0x6f, 0x66, - 0x20, 0x66, 0x72, 0x65, 0x65, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, - 0x72, 0x65, 0x2c, 0x20, 0x77, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x72, - 0x65, 0x66, 0x65, 0x72, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, - 0x66, 0x72, 0x65, 0x65, 0x64, 0x6f, 0x6d, 0x2c, 0x20, 0x6e, 0x6f, 0x74, - 0x0a, 0x70, 0x72, 0x69, 0x63, 0x65, 0x2e, 0x20, 0x20, 0x4f, 0x75, 0x72, - 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x50, 0x75, 0x62, - 0x6c, 0x69, 0x63, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x73, - 0x20, 0x61, 0x72, 0x65, 0x20, 0x64, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x65, - 0x64, 0x20, 0x74, 0x6f, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x20, 0x73, 0x75, - 0x72, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x79, 0x6f, 0x75, 0x0a, - 0x68, 0x61, 0x76, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x72, 0x65, - 0x65, 0x64, 0x6f, 0x6d, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x69, 0x73, 0x74, - 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x63, 0x6f, 0x70, 0x69, 0x65, - 0x73, 0x20, 0x6f, 0x66, 0x20, 0x66, 0x72, 0x65, 0x65, 0x20, 0x73, 0x6f, - 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x28, 0x61, 0x6e, 0x64, 0x20, - 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x0a, 0x74, - 0x68, 0x65, 0x6d, 0x20, 0x69, 0x66, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x77, - 0x69, 0x73, 0x68, 0x29, 0x2c, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x79, - 0x6f, 0x75, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x20, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x6f, - 0x72, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x67, 0x65, 0x74, 0x20, 0x69, 0x74, - 0x20, 0x69, 0x66, 0x20, 0x79, 0x6f, 0x75, 0x0a, 0x77, 0x61, 0x6e, 0x74, - 0x20, 0x69, 0x74, 0x2c, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x79, 0x6f, - 0x75, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, - 0x65, 0x20, 0x6f, 0x72, 0x20, 0x75, 0x73, 0x65, 0x20, 0x70, 0x69, 0x65, - 0x63, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x69, 0x74, 0x20, 0x69, 0x6e, - 0x20, 0x6e, 0x65, 0x77, 0x0a, 0x66, 0x72, 0x65, 0x65, 0x20, 0x70, 0x72, - 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x73, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, - 0x74, 0x68, 0x61, 0x74, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x6b, 0x6e, 0x6f, - 0x77, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x64, 0x6f, - 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x20, 0x74, 0x68, 0x69, 0x6e, 0x67, - 0x73, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x54, 0x6f, 0x20, 0x70, 0x72, 0x6f, - 0x74, 0x65, 0x63, 0x74, 0x20, 0x79, 0x6f, 0x75, 0x72, 0x20, 0x72, 0x69, - 0x67, 0x68, 0x74, 0x73, 0x2c, 0x20, 0x77, 0x65, 0x20, 0x6e, 0x65, 0x65, - 0x64, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x72, 0x65, 0x76, 0x65, 0x6e, 0x74, - 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x73, 0x20, 0x66, 0x72, 0x6f, 0x6d, - 0x20, 0x64, 0x65, 0x6e, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x79, 0x6f, 0x75, - 0x0a, 0x74, 0x68, 0x65, 0x73, 0x65, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, - 0x73, 0x20, 0x6f, 0x72, 0x20, 0x61, 0x73, 0x6b, 0x69, 0x6e, 0x67, 0x20, - 0x79, 0x6f, 0x75, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x75, 0x72, 0x72, 0x65, - 0x6e, 0x64, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x69, 0x67, - 0x68, 0x74, 0x73, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65, 0x66, - 0x6f, 0x72, 0x65, 0x2c, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x68, 0x61, 0x76, - 0x65, 0x0a, 0x63, 0x65, 0x72, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x72, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, - 0x65, 0x73, 0x20, 0x69, 0x66, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x64, 0x69, - 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x63, 0x6f, 0x70, - 0x69, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, - 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x2c, 0x20, 0x6f, 0x72, 0x20, - 0x69, 0x66, 0x0a, 0x79, 0x6f, 0x75, 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66, - 0x79, 0x20, 0x69, 0x74, 0x3a, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x20, 0x74, - 0x6f, 0x20, 0x72, 0x65, 0x73, 0x70, 0x65, 0x63, 0x74, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x66, 0x72, 0x65, 0x65, 0x64, 0x6f, 0x6d, 0x20, 0x6f, 0x66, - 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x73, 0x2e, 0x0a, 0x0a, 0x20, 0x20, - 0x46, 0x6f, 0x72, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2c, - 0x20, 0x69, 0x66, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x64, 0x69, 0x73, 0x74, - 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x63, 0x6f, 0x70, 0x69, 0x65, - 0x73, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x75, 0x63, 0x68, 0x20, 0x61, 0x20, - 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x2c, 0x20, 0x77, 0x68, 0x65, - 0x74, 0x68, 0x65, 0x72, 0x0a, 0x67, 0x72, 0x61, 0x74, 0x69, 0x73, 0x20, - 0x6f, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x66, 0x65, 0x65, - 0x2c, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x70, - 0x61, 0x73, 0x73, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x73, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x0a, 0x66, 0x72, - 0x65, 0x65, 0x64, 0x6f, 0x6d, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, - 0x79, 0x6f, 0x75, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, - 0x2e, 0x20, 0x20, 0x59, 0x6f, 0x75, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, - 0x6d, 0x61, 0x6b, 0x65, 0x20, 0x73, 0x75, 0x72, 0x65, 0x20, 0x74, 0x68, - 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x79, 0x2c, 0x20, 0x74, 0x6f, 0x6f, - 0x2c, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x0a, 0x6f, 0x72, - 0x20, 0x63, 0x61, 0x6e, 0x20, 0x67, 0x65, 0x74, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x20, 0x20, 0x41, 0x6e, 0x64, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x6d, - 0x75, 0x73, 0x74, 0x20, 0x73, 0x68, 0x6f, 0x77, 0x20, 0x74, 0x68, 0x65, - 0x6d, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x20, 0x74, 0x65, 0x72, 0x6d, - 0x73, 0x20, 0x73, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x79, 0x0a, 0x6b, 0x6e, - 0x6f, 0x77, 0x20, 0x74, 0x68, 0x65, 0x69, 0x72, 0x20, 0x72, 0x69, 0x67, - 0x68, 0x74, 0x73, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x44, 0x65, 0x76, 0x65, - 0x6c, 0x6f, 0x70, 0x65, 0x72, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, - 0x75, 0x73, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x47, 0x4e, 0x55, 0x20, - 0x47, 0x50, 0x4c, 0x20, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x20, - 0x79, 0x6f, 0x75, 0x72, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, 0x20, - 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x77, 0x6f, 0x20, 0x73, 0x74, 0x65, - 0x70, 0x73, 0x3a, 0x0a, 0x28, 0x31, 0x29, 0x20, 0x61, 0x73, 0x73, 0x65, - 0x72, 0x74, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, - 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x6f, 0x66, 0x74, - 0x77, 0x61, 0x72, 0x65, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x28, 0x32, - 0x29, 0x20, 0x6f, 0x66, 0x66, 0x65, 0x72, 0x20, 0x79, 0x6f, 0x75, 0x20, - 0x74, 0x68, 0x69, 0x73, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, - 0x0a, 0x67, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x20, 0x79, 0x6f, 0x75, 0x20, - 0x6c, 0x65, 0x67, 0x61, 0x6c, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x70, 0x79, - 0x2c, 0x20, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, - 0x20, 0x61, 0x6e, 0x64, 0x2f, 0x6f, 0x72, 0x20, 0x6d, 0x6f, 0x64, 0x69, - 0x66, 0x79, 0x20, 0x69, 0x74, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x46, 0x6f, - 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, - 0x70, 0x65, 0x72, 0x73, 0x27, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x73, 0x27, 0x20, 0x70, 0x72, 0x6f, 0x74, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x47, - 0x50, 0x4c, 0x20, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x6c, 0x79, 0x20, 0x65, - 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x73, 0x0a, 0x74, 0x68, 0x61, 0x74, - 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, - 0x20, 0x77, 0x61, 0x72, 0x72, 0x61, 0x6e, 0x74, 0x79, 0x20, 0x66, 0x6f, - 0x72, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x66, 0x72, 0x65, 0x65, 0x20, - 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x2e, 0x20, 0x20, 0x46, - 0x6f, 0x72, 0x20, 0x62, 0x6f, 0x74, 0x68, 0x20, 0x75, 0x73, 0x65, 0x72, - 0x73, 0x27, 0x20, 0x61, 0x6e, 0x64, 0x0a, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x73, 0x27, 0x20, 0x73, 0x61, 0x6b, 0x65, 0x2c, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x47, 0x50, 0x4c, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, - 0x65, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x6d, 0x6f, 0x64, 0x69, - 0x66, 0x69, 0x65, 0x64, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x20, 0x62, 0x65, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x64, 0x20, - 0x61, 0x73, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x2c, 0x20, - 0x73, 0x6f, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x69, - 0x72, 0x20, 0x70, 0x72, 0x6f, 0x62, 0x6c, 0x65, 0x6d, 0x73, 0x20, 0x77, - 0x69, 0x6c, 0x6c, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, - 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x64, 0x20, 0x65, 0x72, - 0x72, 0x6f, 0x6e, 0x65, 0x6f, 0x75, 0x73, 0x6c, 0x79, 0x20, 0x74, 0x6f, - 0x0a, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x73, 0x20, 0x6f, 0x66, 0x20, - 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x20, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x53, 0x6f, - 0x6d, 0x65, 0x20, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x20, 0x61, - 0x72, 0x65, 0x20, 0x64, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, - 0x74, 0x6f, 0x20, 0x64, 0x65, 0x6e, 0x79, 0x20, 0x75, 0x73, 0x65, 0x72, - 0x73, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, 0x20, - 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x20, 0x6f, 0x72, 0x20, 0x72, - 0x75, 0x6e, 0x0a, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, - 0x20, 0x69, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x20, 0x74, 0x68, 0x65, 0x6d, - 0x2c, 0x20, 0x61, 0x6c, 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x6d, 0x61, 0x6e, 0x75, 0x66, 0x61, 0x63, 0x74, 0x75, - 0x72, 0x65, 0x72, 0x0a, 0x63, 0x61, 0x6e, 0x20, 0x64, 0x6f, 0x20, 0x73, - 0x6f, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, - 0x66, 0x75, 0x6e, 0x64, 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x6c, - 0x79, 0x20, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, - 0x6c, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x61, 0x69, 0x6d, 0x20, 0x6f, 0x66, 0x0a, 0x70, 0x72, 0x6f, 0x74, 0x65, - 0x63, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x75, 0x73, 0x65, 0x72, 0x73, 0x27, - 0x20, 0x66, 0x72, 0x65, 0x65, 0x64, 0x6f, 0x6d, 0x20, 0x74, 0x6f, 0x20, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, - 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x2e, 0x20, 0x20, 0x54, 0x68, - 0x65, 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x61, 0x74, 0x69, 0x63, - 0x0a, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x20, 0x6f, 0x66, 0x20, - 0x73, 0x75, 0x63, 0x68, 0x20, 0x61, 0x62, 0x75, 0x73, 0x65, 0x20, 0x6f, - 0x63, 0x63, 0x75, 0x72, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x61, 0x72, 0x65, 0x61, 0x20, 0x6f, 0x66, 0x20, 0x70, 0x72, 0x6f, - 0x64, 0x75, 0x63, 0x74, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x69, 0x6e, - 0x64, 0x69, 0x76, 0x69, 0x64, 0x75, 0x61, 0x6c, 0x73, 0x20, 0x74, 0x6f, - 0x0a, 0x75, 0x73, 0x65, 0x2c, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, - 0x69, 0x73, 0x20, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x65, 0x6c, 0x79, - 0x20, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x69, 0x74, 0x20, 0x69, 0x73, - 0x20, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x75, 0x6e, 0x61, 0x63, 0x63, 0x65, - 0x70, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x65, - 0x72, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x2c, 0x20, 0x77, 0x65, 0x0a, 0x68, - 0x61, 0x76, 0x65, 0x20, 0x64, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x47, 0x50, 0x4c, - 0x20, 0x74, 0x6f, 0x20, 0x70, 0x72, 0x6f, 0x68, 0x69, 0x62, 0x69, 0x74, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x61, 0x63, 0x74, 0x69, 0x63, - 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x6f, 0x73, 0x65, 0x0a, - 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x2e, 0x20, 0x20, 0x49, - 0x66, 0x20, 0x73, 0x75, 0x63, 0x68, 0x20, 0x70, 0x72, 0x6f, 0x62, 0x6c, - 0x65, 0x6d, 0x73, 0x20, 0x61, 0x72, 0x69, 0x73, 0x65, 0x20, 0x73, 0x75, - 0x62, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x6c, 0x79, 0x20, - 0x69, 0x6e, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x64, 0x6f, 0x6d, - 0x61, 0x69, 0x6e, 0x73, 0x2c, 0x20, 0x77, 0x65, 0x0a, 0x73, 0x74, 0x61, - 0x6e, 0x64, 0x20, 0x72, 0x65, 0x61, 0x64, 0x79, 0x20, 0x74, 0x6f, 0x20, - 0x65, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, - 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, - 0x20, 0x74, 0x68, 0x6f, 0x73, 0x65, 0x20, 0x64, 0x6f, 0x6d, 0x61, 0x69, - 0x6e, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x66, 0x75, 0x74, 0x75, 0x72, 0x65, - 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x0a, 0x6f, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x47, 0x50, 0x4c, 0x2c, 0x20, 0x61, 0x73, - 0x20, 0x6e, 0x65, 0x65, 0x64, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x70, - 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, - 0x72, 0x65, 0x65, 0x64, 0x6f, 0x6d, 0x20, 0x6f, 0x66, 0x20, 0x75, 0x73, - 0x65, 0x72, 0x73, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x46, 0x69, 0x6e, 0x61, - 0x6c, 0x6c, 0x79, 0x2c, 0x20, 0x65, 0x76, 0x65, 0x72, 0x79, 0x20, 0x70, - 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x6e, 0x65, 0x64, 0x20, 0x63, 0x6f, 0x6e, - 0x73, 0x74, 0x61, 0x6e, 0x74, 0x6c, 0x79, 0x20, 0x62, 0x79, 0x20, 0x73, - 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x70, 0x61, 0x74, 0x65, - 0x6e, 0x74, 0x73, 0x2e, 0x0a, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x20, - 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, - 0x6c, 0x6c, 0x6f, 0x77, 0x20, 0x70, 0x61, 0x74, 0x65, 0x6e, 0x74, 0x73, - 0x20, 0x74, 0x6f, 0x20, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, - 0x20, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, - 0x20, 0x61, 0x6e, 0x64, 0x20, 0x75, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x0a, - 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x6f, 0x6e, 0x20, - 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x2d, 0x70, 0x75, 0x72, 0x70, - 0x6f, 0x73, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, - 0x73, 0x2c, 0x20, 0x62, 0x75, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, - 0x6f, 0x73, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x64, 0x6f, 0x2c, - 0x20, 0x77, 0x65, 0x20, 0x77, 0x69, 0x73, 0x68, 0x20, 0x74, 0x6f, 0x0a, - 0x61, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x70, - 0x65, 0x63, 0x69, 0x61, 0x6c, 0x20, 0x64, 0x61, 0x6e, 0x67, 0x65, 0x72, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x70, 0x61, 0x74, 0x65, 0x6e, 0x74, - 0x73, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x20, 0x74, 0x6f, - 0x20, 0x61, 0x20, 0x66, 0x72, 0x65, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x67, - 0x72, 0x61, 0x6d, 0x20, 0x63, 0x6f, 0x75, 0x6c, 0x64, 0x0a, 0x6d, 0x61, - 0x6b, 0x65, 0x20, 0x69, 0x74, 0x20, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, - 0x69, 0x76, 0x65, 0x6c, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x72, 0x69, - 0x65, 0x74, 0x61, 0x72, 0x79, 0x2e, 0x20, 0x20, 0x54, 0x6f, 0x20, 0x70, - 0x72, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2c, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x47, 0x50, 0x4c, 0x20, 0x61, 0x73, 0x73, - 0x75, 0x72, 0x65, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x0a, 0x70, 0x61, - 0x74, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x63, 0x61, 0x6e, 0x6e, 0x6f, 0x74, - 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, - 0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, - 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x20, 0x6e, 0x6f, 0x6e, 0x2d, 0x66, - 0x72, 0x65, 0x65, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20, - 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x65, 0x20, 0x74, 0x65, 0x72, 0x6d, - 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x70, - 0x79, 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x0a, 0x6d, - 0x6f, 0x64, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x54, 0x45, 0x52, 0x4d, - 0x53, 0x20, 0x41, 0x4e, 0x44, 0x20, 0x43, 0x4f, 0x4e, 0x44, 0x49, 0x54, - 0x49, 0x4f, 0x4e, 0x53, 0x0a, 0x0a, 0x20, 0x20, 0x30, 0x2e, 0x20, 0x44, - 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x0a, - 0x0a, 0x20, 0x20, 0x22, 0x54, 0x68, 0x69, 0x73, 0x20, 0x4c, 0x69, 0x63, - 0x65, 0x6e, 0x73, 0x65, 0x22, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x73, - 0x20, 0x74, 0x6f, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, - 0x33, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x47, 0x4e, 0x55, - 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x50, 0x75, 0x62, - 0x6c, 0x69, 0x63, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2e, - 0x0a, 0x0a, 0x20, 0x20, 0x22, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, - 0x68, 0x74, 0x22, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x6d, 0x65, 0x61, - 0x6e, 0x73, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, - 0x2d, 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x6c, 0x61, 0x77, 0x73, 0x20, 0x74, - 0x68, 0x61, 0x74, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x20, 0x74, 0x6f, - 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x6b, 0x69, 0x6e, 0x64, 0x73, - 0x20, 0x6f, 0x66, 0x0a, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x2c, 0x20, 0x73, - 0x75, 0x63, 0x68, 0x20, 0x61, 0x73, 0x20, 0x73, 0x65, 0x6d, 0x69, 0x63, - 0x6f, 0x6e, 0x64, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x6d, 0x61, 0x73, - 0x6b, 0x73, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x22, 0x54, 0x68, 0x65, 0x20, - 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x22, 0x20, 0x72, 0x65, 0x66, - 0x65, 0x72, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x63, - 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, - 0x65, 0x64, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x74, 0x68, 0x69, - 0x73, 0x0a, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2e, 0x20, 0x20, - 0x45, 0x61, 0x63, 0x68, 0x20, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, - 0x65, 0x20, 0x69, 0x73, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x22, 0x79, 0x6f, 0x75, 0x22, 0x2e, - 0x20, 0x20, 0x22, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x65, 0x73, - 0x22, 0x20, 0x61, 0x6e, 0x64, 0x0a, 0x22, 0x72, 0x65, 0x63, 0x69, 0x70, - 0x69, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x62, - 0x65, 0x20, 0x69, 0x6e, 0x64, 0x69, 0x76, 0x69, 0x64, 0x75, 0x61, 0x6c, - 0x73, 0x20, 0x6f, 0x72, 0x20, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x54, - 0x6f, 0x20, 0x22, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x22, 0x20, 0x61, - 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x6d, 0x65, 0x61, 0x6e, 0x73, 0x20, - 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x20, 0x66, 0x72, 0x6f, 0x6d, - 0x20, 0x6f, 0x72, 0x20, 0x61, 0x64, 0x61, 0x70, 0x74, 0x20, 0x61, 0x6c, - 0x6c, 0x20, 0x6f, 0x72, 0x20, 0x70, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x0a, 0x69, 0x6e, - 0x20, 0x61, 0x20, 0x66, 0x61, 0x73, 0x68, 0x69, 0x6f, 0x6e, 0x20, 0x72, - 0x65, 0x71, 0x75, 0x69, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x63, 0x6f, 0x70, - 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, - 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x61, - 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x0a, 0x65, - 0x78, 0x61, 0x63, 0x74, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x2e, 0x20, 0x20, - 0x54, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x69, 0x6e, - 0x67, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x69, 0x73, 0x20, 0x63, 0x61, - 0x6c, 0x6c, 0x65, 0x64, 0x20, 0x61, 0x20, 0x22, 0x6d, 0x6f, 0x64, 0x69, - 0x66, 0x69, 0x65, 0x64, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x22, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x65, 0x61, 0x72, - 0x6c, 0x69, 0x65, 0x72, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x6f, 0x72, - 0x20, 0x61, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x22, 0x62, 0x61, 0x73, - 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x22, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, - 0x61, 0x72, 0x6c, 0x69, 0x65, 0x72, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x2e, - 0x0a, 0x0a, 0x20, 0x20, 0x41, 0x20, 0x22, 0x63, 0x6f, 0x76, 0x65, 0x72, - 0x65, 0x64, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x22, 0x20, 0x6d, 0x65, 0x61, - 0x6e, 0x73, 0x20, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x75, 0x6e, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, - 0x20, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x20, 0x6f, 0x72, 0x20, - 0x61, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x62, 0x61, 0x73, 0x65, 0x64, - 0x0a, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x50, 0x72, 0x6f, 0x67, - 0x72, 0x61, 0x6d, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x54, 0x6f, 0x20, 0x22, - 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x65, 0x22, 0x20, 0x61, - 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x6d, 0x65, 0x61, 0x6e, 0x73, 0x20, - 0x74, 0x6f, 0x20, 0x64, 0x6f, 0x20, 0x61, 0x6e, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x69, 0x74, 0x20, 0x74, - 0x68, 0x61, 0x74, 0x2c, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, - 0x0a, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2c, - 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x20, - 0x79, 0x6f, 0x75, 0x20, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6c, 0x79, - 0x20, 0x6f, 0x72, 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, - 0x69, 0x6c, 0x79, 0x20, 0x6c, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x66, - 0x6f, 0x72, 0x0a, 0x69, 0x6e, 0x66, 0x72, 0x69, 0x6e, 0x67, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x61, 0x70, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x63, 0x6f, 0x70, - 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x6c, 0x61, 0x77, 0x2c, 0x20, - 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, - 0x74, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x74, 0x20, 0x6f, 0x6e, 0x20, 0x61, - 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x20, 0x6f, 0x72, - 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x61, - 0x20, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x20, 0x63, 0x6f, 0x70, - 0x79, 0x2e, 0x20, 0x20, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, - 0x20, 0x63, 0x6f, 0x70, 0x79, 0x69, 0x6e, 0x67, 0x2c, 0x0a, 0x64, 0x69, - 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, - 0x77, 0x69, 0x74, 0x68, 0x20, 0x6f, 0x72, 0x20, 0x77, 0x69, 0x74, 0x68, - 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x2c, 0x20, 0x6d, 0x61, 0x6b, 0x69, 0x6e, - 0x67, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x20, - 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x73, 0x6f, - 0x6d, 0x65, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, - 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x69, 0x65, 0x73, 0x20, 0x61, 0x73, 0x20, 0x77, 0x65, 0x6c, - 0x6c, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x54, 0x6f, 0x20, 0x22, 0x63, 0x6f, - 0x6e, 0x76, 0x65, 0x79, 0x22, 0x20, 0x61, 0x20, 0x77, 0x6f, 0x72, 0x6b, - 0x20, 0x6d, 0x65, 0x61, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x6b, - 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x66, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x61, - 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, - 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x20, 0x6f, 0x74, 0x68, 0x65, - 0x72, 0x0a, 0x70, 0x61, 0x72, 0x74, 0x69, 0x65, 0x73, 0x20, 0x74, 0x6f, - 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x63, - 0x65, 0x69, 0x76, 0x65, 0x20, 0x63, 0x6f, 0x70, 0x69, 0x65, 0x73, 0x2e, - 0x20, 0x20, 0x4d, 0x65, 0x72, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, - 0x61, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x75, - 0x67, 0x68, 0x0a, 0x61, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, - 0x72, 0x20, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2c, 0x20, 0x77, - 0x69, 0x74, 0x68, 0x20, 0x6e, 0x6f, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x66, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x70, - 0x79, 0x2c, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x6f, - 0x6e, 0x76, 0x65, 0x79, 0x69, 0x6e, 0x67, 0x2e, 0x0a, 0x0a, 0x20, 0x20, - 0x41, 0x6e, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, - 0x79, 0x73, 0x20, 0x22, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x70, 0x72, 0x69, - 0x61, 0x74, 0x65, 0x20, 0x4c, 0x65, 0x67, 0x61, 0x6c, 0x20, 0x4e, 0x6f, - 0x74, 0x69, 0x63, 0x65, 0x73, 0x22, 0x0a, 0x74, 0x6f, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x68, 0x61, - 0x74, 0x20, 0x69, 0x74, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, - 0x73, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x69, 0x65, - 0x6e, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x70, 0x72, 0x6f, 0x6d, 0x69, - 0x6e, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x20, 0x76, 0x69, 0x73, 0x69, 0x62, - 0x6c, 0x65, 0x0a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x20, 0x74, - 0x68, 0x61, 0x74, 0x20, 0x28, 0x31, 0x29, 0x20, 0x64, 0x69, 0x73, 0x70, - 0x6c, 0x61, 0x79, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x70, 0x70, 0x72, - 0x6f, 0x70, 0x72, 0x69, 0x61, 0x74, 0x65, 0x20, 0x63, 0x6f, 0x70, 0x79, - 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65, - 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x28, 0x32, 0x29, 0x0a, 0x74, 0x65, - 0x6c, 0x6c, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, - 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x20, 0x77, 0x61, 0x72, 0x72, 0x61, 0x6e, - 0x74, 0x79, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x77, - 0x6f, 0x72, 0x6b, 0x20, 0x28, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x20, - 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, - 0x74, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x77, 0x61, 0x72, 0x72, 0x61, - 0x6e, 0x74, 0x69, 0x65, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x29, 0x2c, 0x20, 0x74, 0x68, 0x61, - 0x74, 0x20, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x65, 0x73, 0x20, - 0x6d, 0x61, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x79, 0x20, 0x74, - 0x68, 0x65, 0x0a, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x75, 0x6e, 0x64, 0x65, - 0x72, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, - 0x73, 0x65, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x68, 0x6f, 0x77, 0x20, - 0x74, 0x6f, 0x20, 0x76, 0x69, 0x65, 0x77, 0x20, 0x61, 0x20, 0x63, 0x6f, - 0x70, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x4c, - 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2e, 0x20, 0x20, 0x49, 0x66, 0x0a, - 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, - 0x65, 0x20, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x61, - 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x75, 0x73, 0x65, - 0x72, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x20, 0x6f, - 0x72, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2c, 0x20, 0x73, - 0x75, 0x63, 0x68, 0x20, 0x61, 0x73, 0x20, 0x61, 0x0a, 0x6d, 0x65, 0x6e, - 0x75, 0x2c, 0x20, 0x61, 0x20, 0x70, 0x72, 0x6f, 0x6d, 0x69, 0x6e, 0x65, - 0x6e, 0x74, 0x20, 0x69, 0x74, 0x65, 0x6d, 0x20, 0x69, 0x6e, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x65, 0x74, - 0x73, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x63, 0x72, 0x69, 0x74, 0x65, - 0x72, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x31, 0x2e, 0x20, - 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x43, 0x6f, 0x64, 0x65, 0x2e, - 0x0a, 0x0a, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20, 0x22, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x20, 0x66, 0x6f, - 0x72, 0x20, 0x61, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x6d, 0x65, 0x61, - 0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x65, 0x66, 0x65, - 0x72, 0x72, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x6f, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x0a, 0x66, 0x6f, - 0x72, 0x20, 0x6d, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x6d, 0x6f, 0x64, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x74, - 0x6f, 0x20, 0x69, 0x74, 0x2e, 0x20, 0x20, 0x22, 0x4f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x20, 0x6d, 0x65, 0x61, - 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x6e, 0x6f, 0x6e, 0x2d, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x0a, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x6f, - 0x66, 0x20, 0x61, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x0a, 0x0a, 0x20, - 0x20, 0x41, 0x20, 0x22, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, - 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x20, - 0x6d, 0x65, 0x61, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, - 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x69, 0x73, 0x20, 0x61, 0x6e, - 0x20, 0x6f, 0x66, 0x66, 0x69, 0x63, 0x69, 0x61, 0x6c, 0x0a, 0x73, 0x74, - 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, - 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x61, 0x20, 0x72, 0x65, 0x63, 0x6f, - 0x67, 0x6e, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x73, 0x74, 0x61, 0x6e, 0x64, - 0x61, 0x72, 0x64, 0x73, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x2c, 0x20, 0x6f, - 0x72, 0x2c, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x61, - 0x73, 0x65, 0x20, 0x6f, 0x66, 0x0a, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, - 0x61, 0x63, 0x65, 0x73, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, - 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x70, 0x61, 0x72, - 0x74, 0x69, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x20, 0x70, 0x72, 0x6f, 0x67, - 0x72, 0x61, 0x6d, 0x6d, 0x69, 0x6e, 0x67, 0x20, 0x6c, 0x61, 0x6e, 0x67, - 0x75, 0x61, 0x67, 0x65, 0x2c, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x74, 0x68, - 0x61, 0x74, 0x0a, 0x69, 0x73, 0x20, 0x77, 0x69, 0x64, 0x65, 0x6c, 0x79, - 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x61, 0x6d, 0x6f, 0x6e, 0x67, 0x20, - 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x72, 0x73, 0x20, 0x77, - 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, - 0x61, 0x74, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x2e, - 0x0a, 0x0a, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20, 0x22, 0x53, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x20, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, - 0x73, 0x22, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x77, 0x6f, 0x72, 0x6b, - 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x61, 0x6e, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, - 0x0a, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x77, 0x6f, - 0x72, 0x6b, 0x20, 0x61, 0x73, 0x20, 0x61, 0x20, 0x77, 0x68, 0x6f, 0x6c, - 0x65, 0x2c, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x28, 0x61, 0x29, 0x20, - 0x69, 0x73, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x20, - 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, - 0x6c, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x6f, 0x66, 0x0a, 0x70, 0x61, - 0x63, 0x6b, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x4d, 0x61, - 0x6a, 0x6f, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2c, 0x20, 0x62, 0x75, 0x74, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, - 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x70, 0x61, 0x72, 0x74, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x4d, 0x61, 0x6a, - 0x6f, 0x72, 0x0a, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x28, 0x62, 0x29, 0x20, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x73, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x74, 0x6f, - 0x20, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x75, 0x73, 0x65, 0x20, - 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, - 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x61, 0x74, 0x0a, 0x4d, 0x61, - 0x6a, 0x6f, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x6d, 0x70, - 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x61, 0x20, 0x53, 0x74, 0x61, - 0x6e, 0x64, 0x61, 0x72, 0x64, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, - 0x61, 0x63, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x77, 0x68, 0x69, 0x63, - 0x68, 0x20, 0x61, 0x6e, 0x0a, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x61, - 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x69, - 0x6e, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x63, 0x6f, 0x64, - 0x65, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x20, 0x20, 0x41, 0x0a, 0x22, - 0x4d, 0x61, 0x6a, 0x6f, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x22, 0x2c, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x69, - 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x6d, - 0x65, 0x61, 0x6e, 0x73, 0x20, 0x61, 0x20, 0x6d, 0x61, 0x6a, 0x6f, 0x72, - 0x20, 0x65, 0x73, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x20, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x0a, 0x28, 0x6b, 0x65, - 0x72, 0x6e, 0x65, 0x6c, 0x2c, 0x20, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, - 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2c, 0x20, 0x61, 0x6e, 0x64, - 0x20, 0x73, 0x6f, 0x20, 0x6f, 0x6e, 0x29, 0x20, 0x6f, 0x66, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, - 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x0a, 0x28, 0x69, 0x66, 0x20, 0x61, 0x6e, 0x79, - 0x29, 0x20, 0x6f, 0x6e, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x72, 0x75, 0x6e, 0x73, 0x2c, - 0x20, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, - 0x65, 0x72, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x0a, 0x70, - 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x77, - 0x6f, 0x72, 0x6b, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x61, 0x6e, 0x20, 0x6f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x20, 0x75, - 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x75, 0x6e, 0x20, 0x69, - 0x74, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20, 0x22, 0x43, - 0x6f, 0x72, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, - 0x20, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x20, 0x66, 0x6f, 0x72, - 0x20, 0x61, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x69, 0x6e, 0x20, 0x6f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x66, - 0x6f, 0x72, 0x6d, 0x20, 0x6d, 0x65, 0x61, 0x6e, 0x73, 0x20, 0x61, 0x6c, - 0x6c, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x65, 0x64, - 0x20, 0x74, 0x6f, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x2c, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x2c, 0x20, 0x61, - 0x6e, 0x64, 0x20, 0x28, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x6e, 0x20, 0x65, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x0a, 0x77, 0x6f, - 0x72, 0x6b, 0x29, 0x20, 0x72, 0x75, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, - 0x61, 0x6e, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66, - 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x2c, 0x20, - 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x73, 0x20, 0x74, 0x6f, 0x0a, 0x63, 0x6f, 0x6e, - 0x74, 0x72, 0x6f, 0x6c, 0x20, 0x74, 0x68, 0x6f, 0x73, 0x65, 0x20, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x20, 0x20, - 0x48, 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, 0x20, 0x69, 0x74, 0x20, - 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x69, 0x6e, 0x63, - 0x6c, 0x75, 0x64, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x77, 0x6f, 0x72, - 0x6b, 0x27, 0x73, 0x0a, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x20, 0x4c, - 0x69, 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x2c, 0x20, 0x6f, 0x72, - 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x2d, 0x70, 0x75, 0x72, - 0x70, 0x6f, 0x73, 0x65, 0x20, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x20, 0x6f, - 0x72, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x6c, 0x79, 0x20, - 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x66, 0x72, - 0x65, 0x65, 0x0a, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x73, 0x20, - 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x61, 0x72, 0x65, 0x20, 0x75, 0x73, - 0x65, 0x64, 0x20, 0x75, 0x6e, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, - 0x64, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, - 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x6f, 0x73, 0x65, 0x20, 0x61, 0x63, - 0x74, 0x69, 0x76, 0x69, 0x74, 0x69, 0x65, 0x73, 0x20, 0x62, 0x75, 0x74, - 0x0a, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e, - 0x6f, 0x74, 0x20, 0x70, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x20, 0x20, 0x46, 0x6f, - 0x72, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2c, 0x20, 0x43, - 0x6f, 0x72, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, - 0x20, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x0a, 0x69, 0x6e, 0x63, 0x6c, - 0x75, 0x64, 0x65, 0x73, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x20, 0x61, 0x73, 0x73, 0x6f, - 0x63, 0x69, 0x61, 0x74, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x73, - 0x20, 0x66, 0x6f, 0x72, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x77, 0x6f, 0x72, - 0x6b, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x66, - 0x6f, 0x72, 0x20, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x20, 0x6c, 0x69, - 0x62, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, - 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x0a, - 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x20, 0x73, 0x75, 0x62, 0x70, 0x72, - 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x69, 0x73, 0x20, - 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, - 0x20, 0x64, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x74, 0x6f, - 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x2c, 0x0a, 0x73, 0x75, - 0x63, 0x68, 0x20, 0x61, 0x73, 0x20, 0x62, 0x79, 0x20, 0x69, 0x6e, 0x74, - 0x69, 0x6d, 0x61, 0x74, 0x65, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x63, - 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x20, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x20, - 0x66, 0x6c, 0x6f, 0x77, 0x20, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, - 0x20, 0x74, 0x68, 0x6f, 0x73, 0x65, 0x0a, 0x73, 0x75, 0x62, 0x70, 0x72, - 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6f, - 0x74, 0x68, 0x65, 0x72, 0x20, 0x70, 0x61, 0x72, 0x74, 0x73, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x0a, - 0x0a, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20, 0x43, 0x6f, 0x72, 0x72, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x53, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x20, 0x6e, 0x6f, 0x74, - 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x61, 0x6e, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x75, - 0x73, 0x65, 0x72, 0x73, 0x0a, 0x63, 0x61, 0x6e, 0x20, 0x72, 0x65, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x20, 0x61, 0x75, 0x74, 0x6f, - 0x6d, 0x61, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x66, 0x72, - 0x6f, 0x6d, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x70, 0x61, 0x72, - 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x43, 0x6f, - 0x72, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x0a, - 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x54, - 0x68, 0x65, 0x20, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x64, 0x69, 0x6e, 0x67, 0x20, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, - 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x69, - 0x6e, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x63, 0x6f, 0x64, - 0x65, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, - 0x61, 0x74, 0x0a, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x77, 0x6f, 0x72, 0x6b, - 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x32, 0x2e, 0x20, 0x42, 0x61, 0x73, 0x69, - 0x63, 0x20, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x41, 0x6c, 0x6c, 0x20, 0x72, 0x69, - 0x67, 0x68, 0x74, 0x73, 0x20, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, - 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, - 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, - 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x20, 0x6f, 0x66, 0x0a, - 0x63, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x6f, 0x6e, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, - 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x72, 0x65, 0x20, 0x69, 0x72, - 0x72, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x64, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6d, 0x65, 0x74, - 0x2e, 0x20, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x4c, 0x69, 0x63, 0x65, - 0x6e, 0x73, 0x65, 0x20, 0x65, 0x78, 0x70, 0x6c, 0x69, 0x63, 0x69, 0x74, - 0x6c, 0x79, 0x20, 0x61, 0x66, 0x66, 0x69, 0x72, 0x6d, 0x73, 0x20, 0x79, - 0x6f, 0x75, 0x72, 0x20, 0x75, 0x6e, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, - 0x64, 0x0a, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x20, 0x74, 0x6f, 0x20, 0x72, 0x75, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x75, 0x6e, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x50, - 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x65, - 0x20, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x66, 0x72, 0x6f, 0x6d, - 0x20, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x0a, 0x63, - 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, - 0x69, 0x73, 0x20, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x20, 0x62, - 0x79, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, - 0x73, 0x65, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x69, 0x66, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2c, 0x20, 0x67, - 0x69, 0x76, 0x65, 0x6e, 0x20, 0x69, 0x74, 0x73, 0x0a, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x69, - 0x74, 0x75, 0x74, 0x65, 0x73, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x76, 0x65, - 0x72, 0x65, 0x64, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x20, 0x20, 0x54, - 0x68, 0x69, 0x73, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, - 0x61, 0x63, 0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x73, - 0x20, 0x79, 0x6f, 0x75, 0x72, 0x0a, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, - 0x20, 0x6f, 0x66, 0x20, 0x66, 0x61, 0x69, 0x72, 0x20, 0x75, 0x73, 0x65, - 0x20, 0x6f, 0x72, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x65, 0x71, - 0x75, 0x69, 0x76, 0x61, 0x6c, 0x65, 0x6e, 0x74, 0x2c, 0x20, 0x61, 0x73, - 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x62, 0x79, - 0x20, 0x63, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x6c, - 0x61, 0x77, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x59, 0x6f, 0x75, 0x20, 0x6d, - 0x61, 0x79, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x2c, 0x20, 0x72, 0x75, 0x6e, - 0x20, 0x61, 0x6e, 0x64, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, - 0x74, 0x65, 0x20, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x20, 0x77, - 0x6f, 0x72, 0x6b, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x79, 0x6f, - 0x75, 0x20, 0x64, 0x6f, 0x20, 0x6e, 0x6f, 0x74, 0x0a, 0x63, 0x6f, 0x6e, - 0x76, 0x65, 0x79, 0x2c, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, - 0x20, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, - 0x73, 0x6f, 0x20, 0x6c, 0x6f, 0x6e, 0x67, 0x20, 0x61, 0x73, 0x20, 0x79, - 0x6f, 0x75, 0x72, 0x20, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, - 0x6f, 0x74, 0x68, 0x65, 0x72, 0x77, 0x69, 0x73, 0x65, 0x20, 0x72, 0x65, - 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x0a, 0x69, 0x6e, 0x20, 0x66, 0x6f, 0x72, - 0x63, 0x65, 0x2e, 0x20, 0x20, 0x59, 0x6f, 0x75, 0x20, 0x6d, 0x61, 0x79, - 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x79, 0x20, 0x63, 0x6f, 0x76, 0x65, - 0x72, 0x65, 0x64, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x20, 0x74, 0x6f, - 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x73, 0x6f, 0x6c, 0x65, 0x20, 0x70, 0x75, 0x72, - 0x70, 0x6f, 0x73, 0x65, 0x0a, 0x6f, 0x66, 0x20, 0x68, 0x61, 0x76, 0x69, - 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x6d, 0x20, 0x6d, 0x61, 0x6b, 0x65, - 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x20, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, - 0x6c, 0x79, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x79, 0x6f, 0x75, 0x2c, 0x20, - 0x6f, 0x72, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x20, 0x79, - 0x6f, 0x75, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x20, 0x66, 0x61, 0x63, 0x69, - 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x72, - 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x6f, 0x73, 0x65, - 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x2c, 0x20, 0x70, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x79, 0x6f, - 0x75, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x79, 0x20, 0x77, 0x69, 0x74, - 0x68, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x20, - 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x4c, 0x69, 0x63, 0x65, - 0x6e, 0x73, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, - 0x79, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x6d, 0x61, 0x74, - 0x65, 0x72, 0x69, 0x61, 0x6c, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x77, 0x68, - 0x69, 0x63, 0x68, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x64, 0x6f, 0x0a, 0x6e, - 0x6f, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x20, 0x63, - 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x20, 0x20, 0x54, - 0x68, 0x6f, 0x73, 0x65, 0x20, 0x74, 0x68, 0x75, 0x73, 0x20, 0x6d, 0x61, - 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x72, 0x20, 0x72, 0x75, 0x6e, 0x6e, - 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x76, 0x65, - 0x72, 0x65, 0x64, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x0a, 0x66, 0x6f, - 0x72, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x64, - 0x6f, 0x20, 0x73, 0x6f, 0x20, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, - 0x76, 0x65, 0x6c, 0x79, 0x20, 0x6f, 0x6e, 0x20, 0x79, 0x6f, 0x75, 0x72, - 0x20, 0x62, 0x65, 0x68, 0x61, 0x6c, 0x66, 0x2c, 0x20, 0x75, 0x6e, 0x64, - 0x65, 0x72, 0x20, 0x79, 0x6f, 0x75, 0x72, 0x20, 0x64, 0x69, 0x72, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x61, 0x6e, 0x64, 0x20, 0x63, 0x6f, - 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2c, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x65, - 0x72, 0x6d, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x70, 0x72, 0x6f, - 0x68, 0x69, 0x62, 0x69, 0x74, 0x20, 0x74, 0x68, 0x65, 0x6d, 0x20, 0x66, - 0x72, 0x6f, 0x6d, 0x20, 0x6d, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x61, - 0x6e, 0x79, 0x20, 0x63, 0x6f, 0x70, 0x69, 0x65, 0x73, 0x20, 0x6f, 0x66, - 0x0a, 0x79, 0x6f, 0x75, 0x72, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x72, 0x69, - 0x67, 0x68, 0x74, 0x65, 0x64, 0x20, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, - 0x61, 0x6c, 0x20, 0x6f, 0x75, 0x74, 0x73, 0x69, 0x64, 0x65, 0x20, 0x74, - 0x68, 0x65, 0x69, 0x72, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x68, 0x69, 0x70, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x79, - 0x6f, 0x75, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x43, 0x6f, 0x6e, 0x76, 0x65, - 0x79, 0x69, 0x6e, 0x67, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x61, - 0x6e, 0x79, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x63, 0x69, 0x72, - 0x63, 0x75, 0x6d, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x20, 0x69, - 0x73, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x20, - 0x73, 0x6f, 0x6c, 0x65, 0x6c, 0x79, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, - 0x0a, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x64, 0x20, 0x62, - 0x65, 0x6c, 0x6f, 0x77, 0x2e, 0x20, 0x20, 0x53, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x65, 0x6e, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x73, 0x20, 0x6e, - 0x6f, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x3b, 0x20, - 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x31, 0x30, 0x0a, 0x6d, - 0x61, 0x6b, 0x65, 0x73, 0x20, 0x69, 0x74, 0x20, 0x75, 0x6e, 0x6e, 0x65, - 0x63, 0x65, 0x73, 0x73, 0x61, 0x72, 0x79, 0x2e, 0x0a, 0x0a, 0x20, 0x20, - 0x33, 0x2e, 0x20, 0x50, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6e, - 0x67, 0x20, 0x55, 0x73, 0x65, 0x72, 0x73, 0x27, 0x20, 0x4c, 0x65, 0x67, - 0x61, 0x6c, 0x20, 0x52, 0x69, 0x67, 0x68, 0x74, 0x73, 0x20, 0x46, 0x72, - 0x6f, 0x6d, 0x20, 0x41, 0x6e, 0x74, 0x69, 0x2d, 0x43, 0x69, 0x72, 0x63, - 0x75, 0x6d, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x4c, 0x61, - 0x77, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x4e, 0x6f, 0x20, 0x63, 0x6f, 0x76, - 0x65, 0x72, 0x65, 0x64, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x73, 0x68, - 0x61, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x64, 0x65, 0x65, 0x6d, 0x65, - 0x64, 0x20, 0x70, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, - 0x20, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x20, 0x74, - 0x65, 0x63, 0x68, 0x6e, 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, - 0x0a, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x20, 0x75, 0x6e, 0x64, - 0x65, 0x72, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x6c, 0x61, 0x77, 0x20, 0x66, 0x75, - 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x62, 0x6c, - 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x75, 0x6e, 0x64, - 0x65, 0x72, 0x20, 0x61, 0x72, 0x74, 0x69, 0x63, 0x6c, 0x65, 0x0a, 0x31, - 0x31, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x57, 0x49, 0x50, - 0x4f, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, - 0x74, 0x72, 0x65, 0x61, 0x74, 0x79, 0x20, 0x61, 0x64, 0x6f, 0x70, 0x74, - 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x32, 0x30, 0x20, 0x44, 0x65, 0x63, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x31, 0x39, 0x39, 0x36, 0x2c, 0x20, - 0x6f, 0x72, 0x0a, 0x73, 0x69, 0x6d, 0x69, 0x6c, 0x61, 0x72, 0x20, 0x6c, - 0x61, 0x77, 0x73, 0x20, 0x70, 0x72, 0x6f, 0x68, 0x69, 0x62, 0x69, 0x74, - 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x73, 0x74, 0x72, - 0x69, 0x63, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x63, 0x69, 0x72, 0x63, 0x75, - 0x6d, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, - 0x73, 0x75, 0x63, 0x68, 0x0a, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, - 0x73, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x57, 0x68, 0x65, 0x6e, 0x20, 0x79, - 0x6f, 0x75, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x79, 0x20, 0x61, 0x20, - 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x20, 0x77, 0x6f, 0x72, 0x6b, - 0x2c, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x77, 0x61, 0x69, 0x76, 0x65, 0x20, - 0x61, 0x6e, 0x79, 0x20, 0x6c, 0x65, 0x67, 0x61, 0x6c, 0x20, 0x70, 0x6f, - 0x77, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x6f, 0x72, 0x62, 0x69, - 0x64, 0x0a, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x76, 0x65, 0x6e, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x65, 0x63, 0x68, 0x6e, - 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x6d, 0x65, 0x61, - 0x73, 0x75, 0x72, 0x65, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x73, 0x75, 0x63, 0x68, - 0x20, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x76, 0x65, 0x6e, 0x74, 0x69, - 0x6f, 0x6e, 0x0a, 0x69, 0x73, 0x20, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, - 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x65, 0x78, 0x65, 0x72, 0x63, 0x69, - 0x73, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, 0x20, - 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x4c, - 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, - 0x72, 0x65, 0x73, 0x70, 0x65, 0x63, 0x74, 0x20, 0x74, 0x6f, 0x0a, 0x74, - 0x68, 0x65, 0x20, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x20, 0x77, - 0x6f, 0x72, 0x6b, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x79, 0x6f, 0x75, - 0x20, 0x64, 0x69, 0x73, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x20, 0x61, 0x6e, - 0x79, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x74, 0x6f, 0x20, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x20, 0x6f, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x72, 0x0a, 0x6d, 0x6f, - 0x64, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x61, - 0x73, 0x20, 0x61, 0x20, 0x6d, 0x65, 0x61, 0x6e, 0x73, 0x20, 0x6f, 0x66, - 0x20, 0x65, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x69, 0x6e, 0x67, 0x2c, 0x20, - 0x61, 0x67, 0x61, 0x69, 0x6e, 0x73, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x77, 0x6f, 0x72, 0x6b, 0x27, 0x73, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x73, - 0x2c, 0x20, 0x79, 0x6f, 0x75, 0x72, 0x20, 0x6f, 0x72, 0x20, 0x74, 0x68, - 0x69, 0x72, 0x64, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x65, 0x73, 0x27, - 0x20, 0x6c, 0x65, 0x67, 0x61, 0x6c, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, - 0x73, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x6f, 0x72, 0x62, 0x69, 0x64, 0x20, - 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x6f, 0x66, 0x0a, 0x74, 0x65, 0x63, 0x68, 0x6e, 0x6f, 0x6c, - 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x6d, 0x65, 0x61, 0x73, 0x75, - 0x72, 0x65, 0x73, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x34, 0x2e, 0x20, 0x43, - 0x6f, 0x6e, 0x76, 0x65, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x56, 0x65, 0x72, - 0x62, 0x61, 0x74, 0x69, 0x6d, 0x20, 0x43, 0x6f, 0x70, 0x69, 0x65, 0x73, - 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x59, 0x6f, 0x75, 0x20, 0x6d, 0x61, 0x79, - 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x79, 0x20, 0x76, 0x65, 0x72, 0x62, - 0x61, 0x74, 0x69, 0x6d, 0x20, 0x63, 0x6f, 0x70, 0x69, 0x65, 0x73, 0x20, - 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x50, 0x72, 0x6f, 0x67, 0x72, - 0x61, 0x6d, 0x27, 0x73, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, - 0x63, 0x6f, 0x64, 0x65, 0x20, 0x61, 0x73, 0x20, 0x79, 0x6f, 0x75, 0x0a, - 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x20, 0x69, 0x74, 0x2c, 0x20, - 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x6d, 0x65, 0x64, 0x69, 0x75, - 0x6d, 0x2c, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, - 0x74, 0x68, 0x61, 0x74, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x63, 0x6f, 0x6e, - 0x73, 0x70, 0x69, 0x63, 0x75, 0x6f, 0x75, 0x73, 0x6c, 0x79, 0x20, 0x61, - 0x6e, 0x64, 0x0a, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x70, 0x72, 0x69, 0x61, - 0x74, 0x65, 0x6c, 0x79, 0x20, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, - 0x20, 0x6f, 0x6e, 0x20, 0x65, 0x61, 0x63, 0x68, 0x20, 0x63, 0x6f, 0x70, - 0x79, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x70, 0x72, - 0x69, 0x61, 0x74, 0x65, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, - 0x68, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x3b, 0x0a, 0x6b, - 0x65, 0x65, 0x70, 0x20, 0x69, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x20, 0x61, - 0x6c, 0x6c, 0x20, 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x73, 0x20, 0x73, - 0x74, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, - 0x74, 0x68, 0x69, 0x73, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, - 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x6e, 0x79, 0x0a, 0x6e, 0x6f, 0x6e, - 0x2d, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x76, 0x65, 0x20, - 0x74, 0x65, 0x72, 0x6d, 0x73, 0x20, 0x61, 0x64, 0x64, 0x65, 0x64, 0x20, - 0x69, 0x6e, 0x20, 0x61, 0x63, 0x63, 0x6f, 0x72, 0x64, 0x20, 0x77, 0x69, - 0x74, 0x68, 0x20, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x37, - 0x20, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x3b, 0x0a, 0x6b, 0x65, 0x65, 0x70, - 0x20, 0x69, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, - 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x61, 0x62, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x6f, - 0x66, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x77, 0x61, 0x72, 0x72, 0x61, 0x6e, - 0x74, 0x79, 0x3b, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x67, 0x69, 0x76, 0x65, - 0x20, 0x61, 0x6c, 0x6c, 0x0a, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, - 0x6e, 0x74, 0x73, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, - 0x73, 0x65, 0x20, 0x61, 0x6c, 0x6f, 0x6e, 0x67, 0x20, 0x77, 0x69, 0x74, - 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, - 0x6d, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x59, 0x6f, 0x75, 0x20, 0x6d, 0x61, - 0x79, 0x20, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x20, 0x61, 0x6e, 0x79, - 0x20, 0x70, 0x72, 0x69, 0x63, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x6e, 0x6f, - 0x20, 0x70, 0x72, 0x69, 0x63, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x65, - 0x61, 0x63, 0x68, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x20, 0x74, 0x68, 0x61, - 0x74, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x79, - 0x2c, 0x0a, 0x61, 0x6e, 0x64, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x6d, 0x61, - 0x79, 0x20, 0x6f, 0x66, 0x66, 0x65, 0x72, 0x20, 0x73, 0x75, 0x70, 0x70, - 0x6f, 0x72, 0x74, 0x20, 0x6f, 0x72, 0x20, 0x77, 0x61, 0x72, 0x72, 0x61, - 0x6e, 0x74, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x66, 0x65, 0x65, - 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x35, 0x2e, 0x20, 0x43, 0x6f, 0x6e, 0x76, - 0x65, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, - 0x65, 0x64, 0x20, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x59, - 0x6f, 0x75, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, - 0x79, 0x20, 0x61, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x62, 0x61, 0x73, - 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x50, 0x72, - 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x20, 0x74, 0x6f, 0x0a, 0x70, 0x72, 0x6f, 0x64, 0x75, - 0x63, 0x65, 0x20, 0x69, 0x74, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x2c, 0x20, - 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x20, - 0x6f, 0x66, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x63, 0x6f, - 0x64, 0x65, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, - 0x0a, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x34, 0x2c, 0x20, 0x70, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x79, - 0x6f, 0x75, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x6d, 0x65, 0x65, 0x74, - 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x73, - 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x3a, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x61, 0x29, 0x20, 0x54, 0x68, - 0x65, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, - 0x63, 0x61, 0x72, 0x72, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x6d, 0x69, 0x6e, - 0x65, 0x6e, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x73, 0x20, - 0x73, 0x74, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x61, 0x74, - 0x20, 0x79, 0x6f, 0x75, 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, - 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x74, 0x2c, 0x20, 0x61, 0x6e, - 0x64, 0x20, 0x67, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x72, - 0x65, 0x6c, 0x65, 0x76, 0x61, 0x6e, 0x74, 0x20, 0x64, 0x61, 0x74, 0x65, - 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x29, 0x20, 0x54, 0x68, - 0x65, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, - 0x63, 0x61, 0x72, 0x72, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x6d, 0x69, 0x6e, - 0x65, 0x6e, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x73, 0x20, - 0x73, 0x74, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x61, 0x74, - 0x20, 0x69, 0x74, 0x20, 0x69, 0x73, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, - 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x20, 0x75, 0x6e, 0x64, 0x65, - 0x72, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, - 0x73, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x63, - 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x64, - 0x64, 0x65, 0x64, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x73, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x37, 0x2e, - 0x20, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, - 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66, - 0x69, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, - 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x73, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x34, 0x20, 0x74, 0x6f, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x6b, 0x65, 0x65, 0x70, 0x20, 0x69, 0x6e, - 0x74, 0x61, 0x63, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x6e, 0x6f, 0x74, - 0x69, 0x63, 0x65, 0x73, 0x22, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x63, 0x29, 0x20, 0x59, 0x6f, 0x75, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, - 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x65, 0x6e, 0x74, 0x69, 0x72, 0x65, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x2c, - 0x20, 0x61, 0x73, 0x20, 0x61, 0x20, 0x77, 0x68, 0x6f, 0x6c, 0x65, 0x2c, - 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x74, 0x68, 0x69, 0x73, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, - 0x74, 0x6f, 0x20, 0x61, 0x6e, 0x79, 0x6f, 0x6e, 0x65, 0x20, 0x77, 0x68, - 0x6f, 0x20, 0x63, 0x6f, 0x6d, 0x65, 0x73, 0x20, 0x69, 0x6e, 0x74, 0x6f, - 0x20, 0x70, 0x6f, 0x73, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, - 0x6f, 0x66, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x2e, 0x20, 0x20, - 0x54, 0x68, 0x69, 0x73, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x69, 0x63, - 0x65, 0x6e, 0x73, 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x74, 0x68, - 0x65, 0x72, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x70, 0x70, 0x6c, - 0x79, 0x2c, 0x20, 0x61, 0x6c, 0x6f, 0x6e, 0x67, 0x20, 0x77, 0x69, 0x74, - 0x68, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x62, 0x6c, 0x65, 0x20, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x20, 0x37, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x61, 0x64, 0x64, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x2c, - 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x77, 0x68, 0x6f, 0x6c, - 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x77, 0x6f, 0x72, - 0x6b, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x69, - 0x74, 0x73, 0x20, 0x70, 0x61, 0x72, 0x74, 0x73, 0x2c, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x72, 0x65, 0x67, 0x61, 0x72, 0x64, 0x6c, 0x65, 0x73, 0x73, - 0x20, 0x6f, 0x66, 0x20, 0x68, 0x6f, 0x77, 0x20, 0x74, 0x68, 0x65, 0x79, - 0x20, 0x61, 0x72, 0x65, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, - 0x64, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x4c, 0x69, 0x63, - 0x65, 0x6e, 0x73, 0x65, 0x20, 0x67, 0x69, 0x76, 0x65, 0x73, 0x20, 0x6e, - 0x6f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x6c, 0x69, 0x63, 0x65, - 0x6e, 0x73, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x77, 0x6f, 0x72, 0x6b, - 0x20, 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x6f, 0x74, 0x68, 0x65, - 0x72, 0x20, 0x77, 0x61, 0x79, 0x2c, 0x20, 0x62, 0x75, 0x74, 0x20, 0x69, - 0x74, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x65, 0x20, 0x73, 0x75, 0x63, 0x68, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x66, 0x20, 0x79, 0x6f, 0x75, - 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, - 0x74, 0x65, 0x6c, 0x79, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, - 0x64, 0x20, 0x69, 0x74, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x64, - 0x29, 0x20, 0x49, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x77, 0x6f, 0x72, - 0x6b, 0x20, 0x68, 0x61, 0x73, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2c, 0x20, 0x65, - 0x61, 0x63, 0x68, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x64, 0x69, 0x73, - 0x70, 0x6c, 0x61, 0x79, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x41, 0x70, 0x70, - 0x72, 0x6f, 0x70, 0x72, 0x69, 0x61, 0x74, 0x65, 0x20, 0x4c, 0x65, 0x67, - 0x61, 0x6c, 0x20, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x73, 0x3b, 0x20, - 0x68, 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, 0x20, 0x69, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x20, - 0x68, 0x61, 0x73, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, - 0x64, 0x6f, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x64, 0x69, 0x73, 0x70, 0x6c, - 0x61, 0x79, 0x20, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x70, 0x72, 0x69, 0x61, - 0x74, 0x65, 0x20, 0x4c, 0x65, 0x67, 0x61, 0x6c, 0x20, 0x4e, 0x6f, 0x74, - 0x69, 0x63, 0x65, 0x73, 0x2c, 0x20, 0x79, 0x6f, 0x75, 0x72, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x6e, 0x65, 0x65, 0x64, - 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x20, 0x74, 0x68, - 0x65, 0x6d, 0x20, 0x64, 0x6f, 0x20, 0x73, 0x6f, 0x2e, 0x0a, 0x0a, 0x20, - 0x20, 0x41, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x76, 0x65, - 0x72, 0x65, 0x64, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x77, 0x69, 0x74, - 0x68, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x73, 0x65, 0x70, 0x61, - 0x72, 0x61, 0x74, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x6e, 0x64, - 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x74, 0x0a, 0x77, 0x6f, 0x72, - 0x6b, 0x73, 0x2c, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x61, 0x72, - 0x65, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, - 0x69, 0x72, 0x20, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x20, 0x65, 0x78, - 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x20, - 0x77, 0x6f, 0x72, 0x6b, 0x2c, 0x0a, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x68, - 0x69, 0x63, 0x68, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e, 0x6f, 0x74, 0x20, - 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, - 0x68, 0x20, 0x69, 0x74, 0x20, 0x73, 0x75, 0x63, 0x68, 0x20, 0x61, 0x73, - 0x20, 0x74, 0x6f, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x61, 0x20, 0x6c, - 0x61, 0x72, 0x67, 0x65, 0x72, 0x20, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, - 0x6d, 0x2c, 0x0a, 0x69, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x6f, 0x6e, 0x20, - 0x61, 0x20, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, - 0x61, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x20, 0x6f, 0x72, - 0x20, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x6d, 0x65, 0x64, 0x69, 0x75, 0x6d, 0x2c, 0x20, 0x69, 0x73, - 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x20, 0x61, 0x6e, 0x0a, 0x22, - 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x22, 0x20, 0x69, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x74, - 0x73, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x69, 0x6e, 0x67, 0x20, - 0x63, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x61, 0x72, - 0x65, 0x20, 0x6e, 0x6f, 0x74, 0x0a, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, - 0x6f, 0x20, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x65, - 0x67, 0x61, 0x6c, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x27, 0x73, 0x20, 0x75, 0x73, 0x65, 0x72, - 0x73, 0x0a, 0x62, 0x65, 0x79, 0x6f, 0x6e, 0x64, 0x20, 0x77, 0x68, 0x61, - 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x64, 0x69, 0x76, 0x69, - 0x64, 0x75, 0x61, 0x6c, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x20, 0x70, - 0x65, 0x72, 0x6d, 0x69, 0x74, 0x2e, 0x20, 0x20, 0x49, 0x6e, 0x63, 0x6c, - 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x63, - 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x0a, - 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, - 0x61, 0x74, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, - 0x20, 0x63, 0x61, 0x75, 0x73, 0x65, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, - 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x61, - 0x70, 0x70, 0x6c, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x6f, 0x74, 0x68, 0x65, 0x72, 0x0a, 0x70, 0x61, 0x72, 0x74, 0x73, 0x20, - 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x67, 0x67, 0x72, 0x65, - 0x67, 0x61, 0x74, 0x65, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x36, 0x2e, 0x20, - 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x4e, 0x6f, - 0x6e, 0x2d, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x46, 0x6f, 0x72, - 0x6d, 0x73, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x59, 0x6f, 0x75, 0x20, 0x6d, - 0x61, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x79, 0x20, 0x61, 0x20, - 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x20, 0x77, 0x6f, 0x72, 0x6b, - 0x20, 0x69, 0x6e, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63, - 0x6f, 0x64, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x75, 0x6e, 0x64, - 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x73, - 0x0a, 0x6f, 0x66, 0x20, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x20, 0x34, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x35, 0x2c, 0x20, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, - 0x79, 0x6f, 0x75, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x63, 0x6f, 0x6e, - 0x76, 0x65, 0x79, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x6d, 0x61, 0x63, 0x68, - 0x69, 0x6e, 0x65, 0x2d, 0x72, 0x65, 0x61, 0x64, 0x61, 0x62, 0x6c, 0x65, - 0x20, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x20, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x75, 0x6e, - 0x64, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x65, 0x72, 0x6d, - 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x4c, 0x69, - 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2c, 0x0a, 0x69, 0x6e, 0x20, 0x6f, 0x6e, - 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x20, 0x77, - 0x61, 0x79, 0x73, 0x3a, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x61, 0x29, - 0x20, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, - 0x69, 0x6e, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x6d, 0x62, 0x6f, 0x64, - 0x69, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x2c, 0x20, 0x61, 0x20, 0x70, 0x68, - 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, - 0x63, 0x74, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x28, 0x69, 0x6e, 0x63, 0x6c, - 0x75, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x70, 0x68, 0x79, 0x73, - 0x69, 0x63, 0x61, 0x6c, 0x20, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, - 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x65, 0x64, 0x69, 0x75, 0x6d, - 0x29, 0x2c, 0x20, 0x61, 0x63, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x69, - 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x20, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x66, - 0x69, 0x78, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x20, 0x64, 0x75, - 0x72, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x70, 0x68, 0x79, 0x73, 0x69, 0x63, - 0x61, 0x6c, 0x20, 0x6d, 0x65, 0x64, 0x69, 0x75, 0x6d, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x61, 0x72, 0x69, 0x6c, - 0x79, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, - 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x0a, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x62, 0x29, 0x20, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x79, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63, - 0x6f, 0x64, 0x65, 0x20, 0x69, 0x6e, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x65, - 0x6d, 0x62, 0x6f, 0x64, 0x69, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x2c, 0x20, - 0x61, 0x20, 0x70, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x70, - 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x28, - 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, - 0x70, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x64, 0x69, 0x73, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x65, - 0x64, 0x69, 0x75, 0x6d, 0x29, 0x2c, 0x20, 0x61, 0x63, 0x63, 0x6f, 0x6d, - 0x70, 0x61, 0x6e, 0x69, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x61, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x20, - 0x6f, 0x66, 0x66, 0x65, 0x72, 0x2c, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, - 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x74, 0x20, 0x6c, 0x65, 0x61, 0x73, - 0x74, 0x20, 0x74, 0x68, 0x72, 0x65, 0x65, 0x20, 0x79, 0x65, 0x61, 0x72, - 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, - 0x66, 0x6f, 0x72, 0x20, 0x61, 0x73, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, - 0x6f, 0x6e, 0x67, 0x20, 0x61, 0x73, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x6f, - 0x66, 0x66, 0x65, 0x72, 0x20, 0x73, 0x70, 0x61, 0x72, 0x65, 0x20, 0x70, - 0x61, 0x72, 0x74, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x63, 0x75, 0x73, 0x74, - 0x6f, 0x6d, 0x65, 0x72, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, - 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x70, 0x72, - 0x6f, 0x64, 0x75, 0x63, 0x74, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x6f, - 0x64, 0x65, 0x6c, 0x2c, 0x20, 0x74, 0x6f, 0x20, 0x67, 0x69, 0x76, 0x65, - 0x20, 0x61, 0x6e, 0x79, 0x6f, 0x6e, 0x65, 0x20, 0x77, 0x68, 0x6f, 0x20, - 0x70, 0x6f, 0x73, 0x73, 0x65, 0x73, 0x73, 0x65, 0x73, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63, 0x6f, 0x64, - 0x65, 0x20, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x28, 0x31, 0x29, - 0x20, 0x61, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x20, - 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x43, 0x6f, 0x72, 0x72, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x53, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x6c, 0x6c, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, - 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x20, 0x74, 0x68, 0x61, 0x74, - 0x20, 0x69, 0x73, 0x20, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x20, - 0x62, 0x79, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x4c, 0x69, 0x63, 0x65, - 0x6e, 0x73, 0x65, 0x2c, 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x20, 0x64, 0x75, - 0x72, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x70, 0x68, 0x79, 0x73, 0x69, 0x63, - 0x61, 0x6c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x65, 0x64, 0x69, 0x75, - 0x6d, 0x20, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x61, 0x72, 0x69, 0x6c, - 0x79, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, - 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2c, 0x20, 0x66, 0x6f, 0x72, - 0x20, 0x61, 0x20, 0x70, 0x72, 0x69, 0x63, 0x65, 0x20, 0x6e, 0x6f, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x74, 0x68, 0x61, - 0x6e, 0x20, 0x79, 0x6f, 0x75, 0x72, 0x20, 0x72, 0x65, 0x61, 0x73, 0x6f, - 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x63, 0x6f, 0x73, 0x74, 0x20, 0x6f, - 0x66, 0x20, 0x70, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, - 0x20, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x20, - 0x74, 0x68, 0x69, 0x73, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, - 0x76, 0x65, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x28, 0x32, 0x29, - 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x63, - 0x6f, 0x70, 0x79, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x43, 0x6f, 0x72, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69, 0x6e, - 0x67, 0x20, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x66, 0x72, 0x6f, - 0x6d, 0x20, 0x61, 0x20, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x20, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x61, 0x74, 0x20, 0x6e, 0x6f, - 0x20, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x2e, 0x0a, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x63, 0x29, 0x20, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x79, 0x20, - 0x69, 0x6e, 0x64, 0x69, 0x76, 0x69, 0x64, 0x75, 0x61, 0x6c, 0x20, 0x63, - 0x6f, 0x70, 0x69, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63, 0x6f, 0x64, 0x65, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x70, 0x79, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x20, 0x6f, 0x66, 0x66, 0x65, - 0x72, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x53, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x69, 0x73, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, - 0x20, 0x69, 0x73, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x20, - 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x6f, 0x63, 0x63, 0x61, 0x73, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6e, 0x6f, - 0x6e, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x72, 0x63, 0x69, 0x61, 0x6c, 0x6c, - 0x79, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, - 0x6e, 0x6c, 0x79, 0x20, 0x69, 0x66, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x72, - 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, - 0x77, 0x69, 0x74, 0x68, 0x20, 0x73, 0x75, 0x63, 0x68, 0x20, 0x61, 0x6e, - 0x20, 0x6f, 0x66, 0x66, 0x65, 0x72, 0x2c, 0x20, 0x69, 0x6e, 0x20, 0x61, - 0x63, 0x63, 0x6f, 0x72, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x77, 0x69, - 0x74, 0x68, 0x20, 0x73, 0x75, 0x62, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x36, 0x62, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x64, - 0x29, 0x20, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x79, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63, 0x6f, 0x64, 0x65, - 0x20, 0x62, 0x79, 0x20, 0x6f, 0x66, 0x66, 0x65, 0x72, 0x69, 0x6e, 0x67, - 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x66, 0x72, 0x6f, 0x6d, - 0x20, 0x61, 0x20, 0x64, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x65, - 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, - 0x28, 0x67, 0x72, 0x61, 0x74, 0x69, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x66, - 0x6f, 0x72, 0x20, 0x61, 0x20, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x29, - 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6f, 0x66, 0x66, 0x65, 0x72, 0x20, - 0x65, 0x71, 0x75, 0x69, 0x76, 0x61, 0x6c, 0x65, 0x6e, 0x74, 0x20, 0x61, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x53, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, - 0x65, 0x20, 0x77, 0x61, 0x79, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, - 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x70, - 0x6c, 0x61, 0x63, 0x65, 0x20, 0x61, 0x74, 0x20, 0x6e, 0x6f, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x66, 0x75, 0x72, 0x74, 0x68, 0x65, 0x72, 0x20, 0x63, - 0x68, 0x61, 0x72, 0x67, 0x65, 0x2e, 0x20, 0x20, 0x59, 0x6f, 0x75, 0x20, - 0x6e, 0x65, 0x65, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x72, 0x65, 0x71, - 0x75, 0x69, 0x72, 0x65, 0x20, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, - 0x6e, 0x74, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x20, - 0x74, 0x68, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x43, 0x6f, 0x72, 0x72, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x53, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x20, 0x61, 0x6c, 0x6f, 0x6e, 0x67, 0x20, 0x77, - 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x20, 0x20, 0x49, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x74, - 0x6f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63, 0x6f, - 0x64, 0x65, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x6e, 0x65, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2c, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x62, 0x65, 0x20, - 0x6f, 0x6e, 0x20, 0x61, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x74, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x28, 0x6f, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x79, - 0x6f, 0x75, 0x20, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x74, 0x68, 0x69, 0x72, - 0x64, 0x20, 0x70, 0x61, 0x72, 0x74, 0x79, 0x29, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, - 0x74, 0x73, 0x20, 0x65, 0x71, 0x75, 0x69, 0x76, 0x61, 0x6c, 0x65, 0x6e, - 0x74, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x66, 0x61, - 0x63, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2c, 0x20, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x6d, - 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x63, 0x6c, 0x65, 0x61, 0x72, 0x20, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x74, 0x6f, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, - 0x63, 0x6f, 0x64, 0x65, 0x20, 0x73, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x20, - 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x69, 0x6e, - 0x64, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x43, 0x6f, - 0x72, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, - 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x20, 0x20, 0x52, 0x65, 0x67, - 0x61, 0x72, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x77, - 0x68, 0x61, 0x74, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x68, - 0x6f, 0x73, 0x74, 0x73, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x20, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2c, 0x20, 0x79, - 0x6f, 0x75, 0x20, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x20, 0x6f, 0x62, - 0x6c, 0x69, 0x67, 0x61, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x65, - 0x6e, 0x73, 0x75, 0x72, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x69, - 0x74, 0x20, 0x69, 0x73, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x61, 0x76, 0x61, - 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, - 0x73, 0x20, 0x6c, 0x6f, 0x6e, 0x67, 0x20, 0x61, 0x73, 0x20, 0x6e, 0x65, - 0x65, 0x64, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x61, 0x74, 0x69, - 0x73, 0x66, 0x79, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x20, 0x72, 0x65, - 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x0a, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x29, 0x20, 0x43, 0x6f, 0x6e, 0x76, - 0x65, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x75, 0x73, 0x69, 0x6e, 0x67, - 0x20, 0x70, 0x65, 0x65, 0x72, 0x2d, 0x74, 0x6f, 0x2d, 0x70, 0x65, 0x65, - 0x72, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x2c, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x69, 0x6e, 0x66, - 0x6f, 0x72, 0x6d, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x70, 0x65, - 0x65, 0x72, 0x73, 0x20, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63, 0x6f, 0x64, - 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x61, 0x72, 0x65, 0x20, 0x62, - 0x65, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x66, 0x65, 0x72, 0x65, 0x64, - 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x67, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x6c, 0x20, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x61, - 0x74, 0x20, 0x6e, 0x6f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x68, 0x61, - 0x72, 0x67, 0x65, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x73, 0x75, - 0x62, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x36, 0x64, 0x2e, - 0x0a, 0x0a, 0x20, 0x20, 0x41, 0x20, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, - 0x62, 0x6c, 0x65, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x77, 0x68, 0x6f, 0x73, - 0x65, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x63, 0x6f, 0x64, - 0x65, 0x20, 0x69, 0x73, 0x20, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, - 0x64, 0x0a, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x43, - 0x6f, 0x72, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, - 0x20, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x61, 0x73, 0x20, 0x61, - 0x20, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x20, 0x4c, 0x69, 0x62, 0x72, - 0x61, 0x72, 0x79, 0x2c, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x20, 0x6e, 0x6f, - 0x74, 0x20, 0x62, 0x65, 0x0a, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, - 0x64, 0x20, 0x69, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x79, 0x69, - 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x2e, - 0x0a, 0x0a, 0x20, 0x20, 0x41, 0x20, 0x22, 0x55, 0x73, 0x65, 0x72, 0x20, - 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x22, 0x20, 0x69, 0x73, 0x20, - 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x28, 0x31, 0x29, 0x20, 0x61, - 0x20, 0x22, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x20, 0x70, - 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x22, 0x2c, 0x20, 0x77, 0x68, 0x69, - 0x63, 0x68, 0x20, 0x6d, 0x65, 0x61, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x79, - 0x0a, 0x74, 0x61, 0x6e, 0x67, 0x69, 0x62, 0x6c, 0x65, 0x20, 0x70, 0x65, - 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x65, - 0x72, 0x74, 0x79, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x69, 0x73, - 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x75, 0x73, - 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x70, 0x65, 0x72, 0x73, 0x6f, - 0x6e, 0x61, 0x6c, 0x2c, 0x20, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x2c, - 0x0a, 0x6f, 0x72, 0x20, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x68, 0x6f, 0x6c, - 0x64, 0x20, 0x70, 0x75, 0x72, 0x70, 0x6f, 0x73, 0x65, 0x73, 0x2c, 0x20, - 0x6f, 0x72, 0x20, 0x28, 0x32, 0x29, 0x20, 0x61, 0x6e, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, - 0x20, 0x6f, 0x72, 0x20, 0x73, 0x6f, 0x6c, 0x64, 0x20, 0x66, 0x6f, 0x72, - 0x20, 0x69, 0x6e, 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x0a, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x61, 0x20, 0x64, 0x77, - 0x65, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x2e, 0x20, 0x20, 0x49, 0x6e, 0x20, - 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x20, - 0x77, 0x68, 0x65, 0x74, 0x68, 0x65, 0x72, 0x20, 0x61, 0x20, 0x70, 0x72, - 0x6f, 0x64, 0x75, 0x63, 0x74, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x63, - 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x20, 0x70, 0x72, 0x6f, 0x64, - 0x75, 0x63, 0x74, 0x2c, 0x0a, 0x64, 0x6f, 0x75, 0x62, 0x74, 0x66, 0x75, - 0x6c, 0x20, 0x63, 0x61, 0x73, 0x65, 0x73, 0x20, 0x73, 0x68, 0x61, 0x6c, - 0x6c, 0x20, 0x62, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, - 0x64, 0x20, 0x69, 0x6e, 0x20, 0x66, 0x61, 0x76, 0x6f, 0x72, 0x20, 0x6f, - 0x66, 0x20, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x20, - 0x20, 0x46, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, - 0x63, 0x75, 0x6c, 0x61, 0x72, 0x0a, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, - 0x74, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x20, 0x62, - 0x79, 0x20, 0x61, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, 0x6c, - 0x61, 0x72, 0x20, 0x75, 0x73, 0x65, 0x72, 0x2c, 0x20, 0x22, 0x6e, 0x6f, - 0x72, 0x6d, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x75, 0x73, 0x65, 0x64, 0x22, - 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, - 0x0a, 0x74, 0x79, 0x70, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x6f, 0x72, 0x20, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x20, 0x75, 0x73, 0x65, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, - 0x20, 0x6f, 0x66, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2c, - 0x20, 0x72, 0x65, 0x67, 0x61, 0x72, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x20, - 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x0a, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x61, 0x72, - 0x74, 0x69, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x20, 0x75, 0x73, 0x65, 0x72, - 0x20, 0x6f, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x77, - 0x61, 0x79, 0x20, 0x69, 0x6e, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, 0x6c, - 0x61, 0x72, 0x20, 0x75, 0x73, 0x65, 0x72, 0x0a, 0x61, 0x63, 0x74, 0x75, - 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x75, 0x73, 0x65, 0x73, 0x2c, 0x20, 0x6f, - 0x72, 0x20, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x73, 0x20, 0x6f, 0x72, - 0x20, 0x69, 0x73, 0x20, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, - 0x20, 0x74, 0x6f, 0x20, 0x75, 0x73, 0x65, 0x2c, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x20, 0x20, 0x41, - 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x0a, 0x69, 0x73, 0x20, - 0x61, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x20, 0x70, - 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x20, 0x72, 0x65, 0x67, 0x61, 0x72, - 0x64, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x77, 0x68, 0x65, - 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, - 0x64, 0x75, 0x63, 0x74, 0x20, 0x68, 0x61, 0x73, 0x20, 0x73, 0x75, 0x62, - 0x73, 0x74, 0x61, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x0a, 0x63, 0x6f, 0x6d, - 0x6d, 0x65, 0x72, 0x63, 0x69, 0x61, 0x6c, 0x2c, 0x20, 0x69, 0x6e, 0x64, - 0x75, 0x73, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x20, 0x6f, 0x72, 0x20, 0x6e, - 0x6f, 0x6e, 0x2d, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x20, - 0x75, 0x73, 0x65, 0x73, 0x2c, 0x20, 0x75, 0x6e, 0x6c, 0x65, 0x73, 0x73, - 0x20, 0x73, 0x75, 0x63, 0x68, 0x20, 0x75, 0x73, 0x65, 0x73, 0x20, 0x72, - 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x0a, 0x74, 0x68, 0x65, - 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x6e, 0x74, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x6f, - 0x66, 0x20, 0x75, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x0a, 0x0a, 0x20, - 0x20, 0x22, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x22, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x55, 0x73, - 0x65, 0x72, 0x20, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x20, 0x6d, - 0x65, 0x61, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x6d, 0x65, 0x74, - 0x68, 0x6f, 0x64, 0x73, 0x2c, 0x0a, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x64, - 0x75, 0x72, 0x65, 0x73, 0x2c, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6b, 0x65, 0x79, 0x73, - 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x69, - 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, - 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x69, - 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x0a, 0x61, 0x6e, 0x64, 0x20, 0x65, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66, - 0x69, 0x65, 0x64, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, - 0x64, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, - 0x61, 0x74, 0x20, 0x55, 0x73, 0x65, 0x72, 0x20, 0x50, 0x72, 0x6f, 0x64, - 0x75, 0x63, 0x74, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x0a, 0x61, 0x20, 0x6d, - 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x69, 0x74, 0x73, 0x20, 0x43, - 0x6f, 0x72, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, - 0x20, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x20, 0x20, 0x54, 0x68, - 0x65, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x0a, 0x73, 0x75, 0x66, 0x66, 0x69, - 0x63, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x65, 0x6e, 0x73, 0x75, 0x72, 0x65, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, - 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x64, 0x20, 0x66, 0x75, 0x6e, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, - 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x0a, 0x63, 0x6f, 0x64, 0x65, 0x20, - 0x69, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x6e, 0x6f, 0x20, 0x63, 0x61, 0x73, - 0x65, 0x20, 0x70, 0x72, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x20, - 0x6f, 0x72, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x65, 0x72, 0x65, - 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x73, 0x6f, 0x6c, 0x65, 0x6c, - 0x79, 0x20, 0x62, 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, 0x0a, 0x6d, 0x6f, - 0x64, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x68, - 0x61, 0x73, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x20, 0x6d, 0x61, 0x64, 0x65, - 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x49, 0x66, 0x20, 0x79, 0x6f, 0x75, 0x20, - 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x79, 0x20, 0x61, 0x6e, 0x20, 0x6f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x77, 0x6f, - 0x72, 0x6b, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x74, 0x68, 0x69, - 0x73, 0x20, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, - 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x77, 0x69, 0x74, 0x68, 0x2c, 0x20, 0x6f, - 0x72, 0x0a, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x6c, - 0x6c, 0x79, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x75, 0x73, 0x65, 0x20, 0x69, - 0x6e, 0x2c, 0x20, 0x61, 0x20, 0x55, 0x73, 0x65, 0x72, 0x20, 0x50, 0x72, - 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x79, 0x69, 0x6e, 0x67, - 0x20, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x73, 0x20, 0x61, 0x73, 0x0a, 0x70, - 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x20, - 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x69, - 0x67, 0x68, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x70, 0x6f, 0x73, 0x73, 0x65, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x75, 0x73, - 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x55, 0x73, 0x65, - 0x72, 0x20, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x20, 0x69, 0x73, - 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, - 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x63, 0x69, - 0x70, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x65, 0x72, - 0x70, 0x65, 0x74, 0x75, 0x69, 0x74, 0x79, 0x20, 0x6f, 0x72, 0x20, 0x66, - 0x6f, 0x72, 0x20, 0x61, 0x0a, 0x66, 0x69, 0x78, 0x65, 0x64, 0x20, 0x74, - 0x65, 0x72, 0x6d, 0x20, 0x28, 0x72, 0x65, 0x67, 0x61, 0x72, 0x64, 0x6c, - 0x65, 0x73, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x68, 0x6f, 0x77, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, - 0x74, 0x65, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x29, 0x2c, 0x20, 0x74, 0x68, - 0x65, 0x0a, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x20, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x63, - 0x6f, 0x6e, 0x76, 0x65, 0x79, 0x65, 0x64, 0x20, 0x75, 0x6e, 0x64, 0x65, - 0x72, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, - 0x63, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x69, 0x65, 0x64, 0x0a, 0x62, - 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, - 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x49, 0x6e, 0x66, 0x6f, 0x72, - 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x20, 0x20, 0x42, 0x75, 0x74, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, - 0x6f, 0x74, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x0a, 0x69, 0x66, 0x20, - 0x6e, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x79, 0x6f, 0x75, 0x20, - 0x6e, 0x6f, 0x72, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x74, 0x68, 0x69, 0x72, - 0x64, 0x20, 0x70, 0x61, 0x72, 0x74, 0x79, 0x20, 0x72, 0x65, 0x74, 0x61, - 0x69, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x62, 0x69, 0x6c, - 0x69, 0x74, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, - 0x6c, 0x6c, 0x0a, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, - 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, - 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x55, 0x73, 0x65, 0x72, 0x20, - 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x20, 0x28, 0x66, 0x6f, 0x72, - 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2c, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x68, 0x61, 0x73, 0x0a, 0x62, - 0x65, 0x65, 0x6e, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, - 0x64, 0x20, 0x69, 0x6e, 0x20, 0x52, 0x4f, 0x4d, 0x29, 0x2e, 0x0a, 0x0a, - 0x20, 0x20, 0x54, 0x68, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, - 0x6f, 0x74, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x61, - 0x0a, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, - 0x20, 0x74, 0x6f, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x20, - 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2c, 0x20, 0x77, 0x61, 0x72, 0x72, 0x61, 0x6e, 0x74, - 0x79, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x73, 0x0a, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x77, 0x6f, 0x72, 0x6b, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x68, 0x61, 0x73, 0x20, 0x62, 0x65, - 0x65, 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, - 0x6f, 0x72, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, - 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x63, 0x69, - 0x70, 0x69, 0x65, 0x6e, 0x74, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x66, 0x6f, - 0x72, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x55, 0x73, 0x65, 0x72, 0x20, 0x50, - 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x77, 0x68, - 0x69, 0x63, 0x68, 0x20, 0x69, 0x74, 0x20, 0x68, 0x61, 0x73, 0x20, 0x62, - 0x65, 0x65, 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, - 0x20, 0x6f, 0x72, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, - 0x64, 0x2e, 0x20, 0x20, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, - 0x6f, 0x20, 0x61, 0x0a, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x20, - 0x6d, 0x61, 0x79, 0x20, 0x62, 0x65, 0x20, 0x64, 0x65, 0x6e, 0x69, 0x65, - 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, - 0x6f, 0x64, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x69, 0x74, 0x73, 0x65, 0x6c, 0x66, 0x20, 0x6d, 0x61, 0x74, 0x65, 0x72, - 0x69, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x61, 0x6e, 0x64, 0x0a, 0x61, 0x64, - 0x76, 0x65, 0x72, 0x73, 0x65, 0x6c, 0x79, 0x20, 0x61, 0x66, 0x66, 0x65, - 0x63, 0x74, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x6f, 0x72, 0x20, - 0x76, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x0a, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x73, 0x20, 0x66, 0x6f, 0x72, - 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x61, 0x63, 0x72, 0x6f, 0x73, 0x73, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x0a, 0x0a, - 0x20, 0x20, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x20, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x63, - 0x6f, 0x6e, 0x76, 0x65, 0x79, 0x65, 0x64, 0x2c, 0x20, 0x61, 0x6e, 0x64, - 0x20, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x2c, 0x0a, - 0x69, 0x6e, 0x20, 0x61, 0x63, 0x63, 0x6f, 0x72, 0x64, 0x20, 0x77, 0x69, - 0x74, 0x68, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, - 0x69, 0x6e, 0x20, 0x61, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x20, - 0x74, 0x68, 0x61, 0x74, 0x20, 0x69, 0x73, 0x20, 0x70, 0x75, 0x62, 0x6c, - 0x69, 0x63, 0x6c, 0x79, 0x0a, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, - 0x74, 0x65, 0x64, 0x20, 0x28, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x69, 0x74, - 0x68, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x76, 0x61, 0x69, - 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x69, 0x6e, 0x0a, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x66, - 0x6f, 0x72, 0x6d, 0x29, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6d, 0x75, - 0x73, 0x74, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x20, 0x6e, - 0x6f, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x20, 0x70, 0x61, - 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x20, 0x6f, 0x72, 0x20, 0x6b, 0x65, - 0x79, 0x20, 0x66, 0x6f, 0x72, 0x0a, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, - 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x72, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, - 0x20, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x69, 0x6e, 0x67, 0x2e, - 0x0a, 0x0a, 0x20, 0x20, 0x37, 0x2e, 0x20, 0x41, 0x64, 0x64, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x54, 0x65, 0x72, 0x6d, 0x73, 0x2e, - 0x0a, 0x0a, 0x20, 0x20, 0x22, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x22, 0x20, 0x61, 0x72, 0x65, 0x20, 0x74, 0x65, 0x72, - 0x6d, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x73, 0x75, 0x70, 0x70, - 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, - 0x65, 0x72, 0x6d, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, - 0x0a, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x62, 0x79, 0x20, - 0x6d, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x65, 0x78, 0x63, 0x65, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x6f, - 0x6e, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x6f, - 0x66, 0x20, 0x69, 0x74, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x0a, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x61, 0x72, - 0x65, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x62, 0x6c, 0x65, - 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x74, 0x69, - 0x72, 0x65, 0x20, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x20, 0x73, - 0x68, 0x61, 0x6c, 0x6c, 0x0a, 0x62, 0x65, 0x20, 0x74, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x74, 0x68, 0x6f, 0x75, 0x67, - 0x68, 0x20, 0x74, 0x68, 0x65, 0x79, 0x20, 0x77, 0x65, 0x72, 0x65, 0x20, - 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, - 0x74, 0x68, 0x69, 0x73, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, - 0x2c, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x78, 0x74, - 0x65, 0x6e, 0x74, 0x0a, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, - 0x79, 0x20, 0x61, 0x72, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, - 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x62, 0x6c, 0x65, 0x20, 0x6c, 0x61, 0x77, 0x2e, 0x20, 0x20, 0x49, - 0x66, 0x20, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, - 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x0a, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, - 0x74, 0x6f, 0x20, 0x70, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x2c, 0x20, - 0x74, 0x68, 0x61, 0x74, 0x20, 0x70, 0x61, 0x72, 0x74, 0x20, 0x6d, 0x61, - 0x79, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x73, 0x65, - 0x70, 0x61, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x79, 0x0a, 0x75, 0x6e, 0x64, - 0x65, 0x72, 0x20, 0x74, 0x68, 0x6f, 0x73, 0x65, 0x20, 0x70, 0x65, 0x72, - 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2c, 0x20, 0x62, 0x75, - 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x72, 0x65, - 0x20, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x20, 0x72, 0x65, 0x6d, - 0x61, 0x69, 0x6e, 0x73, 0x20, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x65, - 0x64, 0x20, 0x62, 0x79, 0x0a, 0x74, 0x68, 0x69, 0x73, 0x20, 0x4c, 0x69, - 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, - 0x74, 0x20, 0x72, 0x65, 0x67, 0x61, 0x72, 0x64, 0x20, 0x74, 0x6f, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x61, 0x6c, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x57, 0x68, 0x65, 0x6e, 0x20, - 0x79, 0x6f, 0x75, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x79, 0x20, 0x61, - 0x20, 0x63, 0x6f, 0x70, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x63, - 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x2c, - 0x20, 0x79, 0x6f, 0x75, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x61, 0x74, 0x20, - 0x79, 0x6f, 0x75, 0x72, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x0a, - 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x61, - 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x70, 0x65, - 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x66, 0x72, - 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x63, 0x6f, 0x70, 0x79, - 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x61, 0x6e, - 0x79, 0x20, 0x70, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x0a, 0x69, 0x74, - 0x2e, 0x20, 0x20, 0x28, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x61, 0x6c, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x62, 0x65, 0x20, 0x77, 0x72, - 0x69, 0x74, 0x74, 0x65, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x65, 0x71, - 0x75, 0x69, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x69, 0x72, 0x20, 0x6f, - 0x77, 0x6e, 0x0a, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x20, 0x69, - 0x6e, 0x20, 0x63, 0x65, 0x72, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x63, 0x61, - 0x73, 0x65, 0x73, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x79, 0x6f, 0x75, - 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x29, 0x20, 0x20, 0x59, 0x6f, 0x75, 0x20, - 0x6d, 0x61, 0x79, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x0a, 0x61, 0x64, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x70, 0x65, 0x72, - 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x6e, 0x20, - 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x2c, 0x20, 0x61, 0x64, - 0x64, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x74, - 0x6f, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x20, - 0x77, 0x6f, 0x72, 0x6b, 0x2c, 0x0a, 0x66, 0x6f, 0x72, 0x20, 0x77, 0x68, - 0x69, 0x63, 0x68, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x68, 0x61, 0x76, 0x65, - 0x20, 0x6f, 0x72, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x67, 0x69, 0x76, 0x65, - 0x20, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x70, 0x72, 0x69, 0x61, 0x74, 0x65, - 0x20, 0x63, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x70, - 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, - 0x20, 0x20, 0x4e, 0x6f, 0x74, 0x77, 0x69, 0x74, 0x68, 0x73, 0x74, 0x61, - 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x6f, 0x74, - 0x68, 0x65, 0x72, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x4c, 0x69, - 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2c, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6d, - 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x20, 0x79, 0x6f, 0x75, 0x0a, - 0x61, 0x64, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x76, - 0x65, 0x72, 0x65, 0x64, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x2c, 0x20, 0x79, - 0x6f, 0x75, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x28, 0x69, 0x66, 0x20, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x62, 0x79, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, - 0x68, 0x74, 0x20, 0x68, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x20, 0x6f, - 0x66, 0x0a, 0x74, 0x68, 0x61, 0x74, 0x20, 0x6d, 0x61, 0x74, 0x65, 0x72, - 0x69, 0x61, 0x6c, 0x29, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6c, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x65, 0x72, 0x6d, - 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x4c, 0x69, - 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, - 0x65, 0x72, 0x6d, 0x73, 0x3a, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x61, - 0x29, 0x20, 0x44, 0x69, 0x73, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x69, 0x6e, - 0x67, 0x20, 0x77, 0x61, 0x72, 0x72, 0x61, 0x6e, 0x74, 0x79, 0x20, 0x6f, - 0x72, 0x20, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x6c, - 0x69, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x20, 0x64, 0x69, 0x66, - 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x20, 0x66, 0x72, 0x6f, - 0x6d, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x65, - 0x72, 0x6d, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x20, 0x31, 0x35, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x31, - 0x36, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x4c, 0x69, - 0x63, 0x65, 0x6e, 0x73, 0x65, 0x3b, 0x20, 0x6f, 0x72, 0x0a, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x62, 0x29, 0x20, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, - 0x69, 0x6e, 0x67, 0x20, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x70, 0x65, 0x63, - 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x20, 0x6c, 0x65, 0x67, 0x61, 0x6c, 0x20, 0x6e, - 0x6f, 0x74, 0x69, 0x63, 0x65, 0x73, 0x20, 0x6f, 0x72, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x20, 0x61, 0x74, 0x74, - 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x69, 0x6e, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, - 0x61, 0x6c, 0x20, 0x6f, 0x72, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x70, 0x72, 0x69, 0x61, 0x74, 0x65, - 0x20, 0x4c, 0x65, 0x67, 0x61, 0x6c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x4e, - 0x6f, 0x74, 0x69, 0x63, 0x65, 0x73, 0x20, 0x64, 0x69, 0x73, 0x70, 0x6c, - 0x61, 0x79, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x77, 0x6f, 0x72, 0x6b, - 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, - 0x20, 0x69, 0x74, 0x3b, 0x20, 0x6f, 0x72, 0x0a, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x63, 0x29, 0x20, 0x50, 0x72, 0x6f, 0x68, 0x69, 0x62, 0x69, 0x74, - 0x69, 0x6e, 0x67, 0x20, 0x6d, 0x69, 0x73, 0x72, 0x65, 0x70, 0x72, 0x65, - 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x20, - 0x6f, 0x66, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x6d, 0x61, 0x74, 0x65, - 0x72, 0x69, 0x61, 0x6c, 0x2c, 0x20, 0x6f, 0x72, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x74, - 0x68, 0x61, 0x74, 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, - 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, - 0x20, 0x73, 0x75, 0x63, 0x68, 0x20, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, - 0x61, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x64, - 0x20, 0x69, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x61, 0x73, - 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x77, 0x61, 0x79, 0x73, 0x20, - 0x61, 0x73, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, - 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x72, - 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x3b, 0x20, 0x6f, 0x72, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x64, 0x29, 0x20, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x6e, 0x67, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, - 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x69, 0x74, 0x79, 0x20, 0x70, 0x75, - 0x72, 0x70, 0x6f, 0x73, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x69, 0x63, 0x65, 0x6e, - 0x73, 0x6f, 0x72, 0x73, 0x20, 0x6f, 0x72, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x3b, - 0x20, 0x6f, 0x72, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x29, 0x20, - 0x44, 0x65, 0x63, 0x6c, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, - 0x20, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, - 0x73, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x74, 0x72, 0x61, 0x64, - 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x20, 0x6c, 0x61, 0x77, 0x20, 0x66, 0x6f, - 0x72, 0x20, 0x75, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x6f, 0x6d, - 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x72, 0x61, 0x64, 0x65, 0x20, - 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x2c, 0x20, 0x74, 0x72, 0x61, 0x64, 0x65, - 0x6d, 0x61, 0x72, 0x6b, 0x73, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x73, 0x3b, - 0x20, 0x6f, 0x72, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x29, 0x20, - 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, - 0x64, 0x65, 0x6d, 0x6e, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x6f, - 0x72, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x61, 0x74, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x20, - 0x62, 0x79, 0x20, 0x61, 0x6e, 0x79, 0x6f, 0x6e, 0x65, 0x20, 0x77, 0x68, - 0x6f, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x79, 0x73, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x20, 0x28, - 0x6f, 0x72, 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x69, 0x74, 0x29, 0x20, 0x77, 0x69, 0x74, 0x68, - 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, - 0x20, 0x61, 0x73, 0x73, 0x75, 0x6d, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x69, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, - 0x79, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x63, - 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x2c, 0x20, 0x66, 0x6f, 0x72, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x6c, 0x69, 0x61, 0x62, - 0x69, 0x6c, 0x69, 0x74, 0x79, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, - 0x68, 0x65, 0x73, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, - 0x74, 0x75, 0x61, 0x6c, 0x20, 0x61, 0x73, 0x73, 0x75, 0x6d, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6c, - 0x79, 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x20, 0x6f, 0x6e, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x6f, 0x73, 0x65, 0x20, 0x6c, 0x69, - 0x63, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x73, 0x2e, 0x0a, 0x0a, 0x20, 0x20, - 0x41, 0x6c, 0x6c, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x6e, 0x6f, - 0x6e, 0x2d, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x76, 0x65, - 0x20, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, - 0x74, 0x65, 0x72, 0x6d, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x63, 0x6f, - 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72, 0x65, 0x64, 0x20, 0x22, 0x66, 0x75, - 0x72, 0x74, 0x68, 0x65, 0x72, 0x0a, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x20, 0x77, 0x69, 0x74, 0x68, - 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x65, 0x61, 0x6e, 0x69, - 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x31, 0x30, 0x2e, 0x20, 0x20, 0x49, 0x66, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x20, 0x61, 0x73, - 0x20, 0x79, 0x6f, 0x75, 0x0a, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, - 0x64, 0x20, 0x69, 0x74, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x61, 0x6e, 0x79, - 0x20, 0x70, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x69, 0x74, 0x2c, - 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x20, 0x61, 0x20, - 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x20, 0x73, 0x74, 0x61, 0x74, 0x69, - 0x6e, 0x67, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x69, 0x74, 0x20, 0x69, - 0x73, 0x0a, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x62, - 0x79, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, - 0x73, 0x65, 0x20, 0x61, 0x6c, 0x6f, 0x6e, 0x67, 0x20, 0x77, 0x69, 0x74, - 0x68, 0x20, 0x61, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x20, 0x74, 0x68, 0x61, - 0x74, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x66, 0x75, 0x72, 0x74, 0x68, - 0x65, 0x72, 0x0a, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x2c, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x6d, 0x61, 0x79, 0x20, - 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, - 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x20, 0x20, 0x49, 0x66, 0x20, 0x61, 0x20, - 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, - 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x73, 0x0a, 0x61, 0x20, 0x66, 0x75, 0x72, 0x74, 0x68, 0x65, 0x72, 0x20, - 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x62, 0x75, 0x74, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x73, 0x20, - 0x72, 0x65, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x69, 0x6e, 0x67, 0x20, - 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x79, 0x69, 0x6e, 0x67, - 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x74, 0x68, 0x69, 0x73, 0x0a, - 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2c, 0x20, 0x79, 0x6f, 0x75, - 0x20, 0x6d, 0x61, 0x79, 0x20, 0x61, 0x64, 0x64, 0x20, 0x74, 0x6f, 0x20, - 0x61, 0x20, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x20, 0x77, 0x6f, - 0x72, 0x6b, 0x20, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x20, - 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x0a, 0x6f, 0x66, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, - 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2c, 0x20, - 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, - 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x75, 0x72, 0x74, 0x68, 0x65, - 0x72, 0x20, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x0a, 0x6e, 0x6f, 0x74, 0x20, 0x73, - 0x75, 0x72, 0x76, 0x69, 0x76, 0x65, 0x20, 0x73, 0x75, 0x63, 0x68, 0x20, - 0x72, 0x65, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x69, 0x6e, 0x67, 0x20, - 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x79, 0x69, 0x6e, 0x67, - 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x49, 0x66, 0x20, 0x79, 0x6f, 0x75, 0x20, - 0x61, 0x64, 0x64, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x20, 0x74, 0x6f, - 0x20, 0x61, 0x20, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x20, 0x77, - 0x6f, 0x72, 0x6b, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x63, 0x63, 0x6f, 0x72, - 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, - 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x79, 0x6f, 0x75, - 0x0a, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x2c, - 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x6c, 0x65, - 0x76, 0x61, 0x6e, 0x74, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, - 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x61, 0x20, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, - 0x65, 0x0a, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, - 0x20, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, - 0x61, 0x70, 0x70, 0x6c, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x6f, - 0x73, 0x65, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x6f, 0x72, - 0x20, 0x61, 0x20, 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x20, 0x69, 0x6e, - 0x64, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x0a, 0x77, 0x68, 0x65, - 0x72, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x69, 0x6e, 0x64, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x62, 0x6c, - 0x65, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x2e, 0x0a, 0x0a, 0x20, 0x20, - 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x74, - 0x65, 0x72, 0x6d, 0x73, 0x2c, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, - 0x73, 0x69, 0x76, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x6e, 0x6f, 0x6e, 0x2d, - 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x76, 0x65, 0x2c, 0x20, - 0x6d, 0x61, 0x79, 0x20, 0x62, 0x65, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, - 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x66, 0x6f, 0x72, - 0x6d, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x73, 0x65, 0x70, 0x61, 0x72, - 0x61, 0x74, 0x65, 0x6c, 0x79, 0x20, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, - 0x6e, 0x20, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2c, 0x20, 0x6f, - 0x72, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, - 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3b, 0x0a, - 0x74, 0x68, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x20, 0x72, 0x65, - 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x61, - 0x70, 0x70, 0x6c, 0x79, 0x20, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, - 0x77, 0x61, 0x79, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x38, 0x2e, 0x20, 0x54, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, - 0x0a, 0x20, 0x20, 0x59, 0x6f, 0x75, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x6e, - 0x6f, 0x74, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x65, - 0x20, 0x6f, 0x72, 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x20, 0x61, - 0x20, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x20, 0x77, 0x6f, 0x72, - 0x6b, 0x20, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x20, 0x61, 0x73, 0x20, - 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x6c, 0x79, 0x0a, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, - 0x65, 0x2e, 0x20, 0x20, 0x41, 0x6e, 0x79, 0x20, 0x61, 0x74, 0x74, 0x65, - 0x6d, 0x70, 0x74, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x77, 0x69, 0x73, - 0x65, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, - 0x74, 0x65, 0x20, 0x6f, 0x72, 0x0a, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, - 0x20, 0x69, 0x74, 0x20, 0x69, 0x73, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x2c, - 0x20, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x61, 0x75, - 0x74, 0x6f, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x20, - 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x20, 0x79, 0x6f, - 0x75, 0x72, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, 0x20, 0x75, 0x6e, - 0x64, 0x65, 0x72, 0x0a, 0x74, 0x68, 0x69, 0x73, 0x20, 0x4c, 0x69, 0x63, - 0x65, 0x6e, 0x73, 0x65, 0x20, 0x28, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, - 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x70, 0x61, 0x74, 0x65, - 0x6e, 0x74, 0x20, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x73, 0x20, - 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x20, 0x75, 0x6e, 0x64, 0x65, - 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x68, 0x69, 0x72, 0x64, 0x0a, - 0x70, 0x61, 0x72, 0x61, 0x67, 0x72, 0x61, 0x70, 0x68, 0x20, 0x6f, 0x66, - 0x20, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x31, 0x31, 0x29, - 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x48, 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, - 0x2c, 0x20, 0x69, 0x66, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x63, 0x65, 0x61, - 0x73, 0x65, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x76, 0x69, 0x6f, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, - 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2c, 0x20, 0x74, 0x68, - 0x65, 0x6e, 0x20, 0x79, 0x6f, 0x75, 0x72, 0x0a, 0x6c, 0x69, 0x63, 0x65, - 0x6e, 0x73, 0x65, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x61, 0x20, 0x70, - 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x20, 0x63, 0x6f, - 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x68, 0x6f, 0x6c, 0x64, - 0x65, 0x72, 0x20, 0x69, 0x73, 0x20, 0x72, 0x65, 0x69, 0x6e, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x64, 0x20, 0x28, 0x61, 0x29, 0x0a, 0x70, 0x72, 0x6f, - 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x2c, 0x20, - 0x75, 0x6e, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x75, - 0x6e, 0x74, 0x69, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x70, - 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x68, 0x6f, 0x6c, 0x64, 0x65, - 0x72, 0x20, 0x65, 0x78, 0x70, 0x6c, 0x69, 0x63, 0x69, 0x74, 0x6c, 0x79, - 0x20, 0x61, 0x6e, 0x64, 0x0a, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x6c, 0x79, - 0x20, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x73, 0x20, - 0x79, 0x6f, 0x75, 0x72, 0x20, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, - 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x28, 0x62, 0x29, 0x20, 0x70, 0x65, - 0x72, 0x6d, 0x61, 0x6e, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x2c, 0x20, 0x69, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x72, 0x69, - 0x67, 0x68, 0x74, 0x0a, 0x68, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x20, 0x66, - 0x61, 0x69, 0x6c, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x6e, 0x6f, 0x74, 0x69, - 0x66, 0x79, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x76, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x62, 0x79, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x72, 0x65, 0x61, 0x73, - 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x6d, 0x65, 0x61, 0x6e, 0x73, - 0x0a, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x36, 0x30, - 0x20, 0x64, 0x61, 0x79, 0x73, 0x20, 0x61, 0x66, 0x74, 0x65, 0x72, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x63, 0x65, 0x73, 0x73, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x4d, 0x6f, 0x72, 0x65, 0x6f, 0x76, - 0x65, 0x72, 0x2c, 0x20, 0x79, 0x6f, 0x75, 0x72, 0x20, 0x6c, 0x69, 0x63, - 0x65, 0x6e, 0x73, 0x65, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x61, 0x20, - 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x20, 0x63, - 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x68, 0x6f, 0x6c, - 0x64, 0x65, 0x72, 0x20, 0x69, 0x73, 0x0a, 0x72, 0x65, 0x69, 0x6e, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x64, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x61, 0x6e, - 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x63, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x68, - 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x20, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, - 0x65, 0x73, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, - 0x65, 0x0a, 0x76, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x62, 0x79, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x72, 0x65, 0x61, 0x73, - 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x6d, 0x65, 0x61, 0x6e, 0x73, - 0x2c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x74, 0x69, 0x6d, 0x65, - 0x20, 0x79, 0x6f, 0x75, 0x20, 0x68, 0x61, 0x76, 0x65, 0x0a, 0x72, 0x65, - 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x69, 0x63, - 0x65, 0x20, 0x6f, 0x66, 0x20, 0x76, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x4c, - 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x28, 0x66, 0x6f, 0x72, 0x20, - 0x61, 0x6e, 0x79, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x29, 0x20, 0x66, 0x72, - 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x61, 0x74, 0x0a, 0x63, 0x6f, 0x70, 0x79, - 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x68, 0x6f, 0x6c, 0x64, 0x65, 0x72, - 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x63, 0x75, - 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x69, 0x6f, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x20, 0x74, - 0x6f, 0x20, 0x33, 0x30, 0x20, 0x64, 0x61, 0x79, 0x73, 0x20, 0x61, 0x66, - 0x74, 0x65, 0x72, 0x0a, 0x79, 0x6f, 0x75, 0x72, 0x20, 0x72, 0x65, 0x63, - 0x65, 0x69, 0x70, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x54, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, - 0x66, 0x20, 0x79, 0x6f, 0x75, 0x72, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, - 0x73, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x74, 0x68, 0x69, 0x73, - 0x20, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x64, 0x6f, 0x65, - 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x61, 0x74, 0x65, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x6c, 0x69, 0x63, 0x65, - 0x6e, 0x73, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x70, 0x61, 0x72, 0x74, - 0x69, 0x65, 0x73, 0x20, 0x77, 0x68, 0x6f, 0x20, 0x68, 0x61, 0x76, 0x65, - 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x20, 0x63, 0x6f, - 0x70, 0x69, 0x65, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x72, 0x69, 0x67, 0x68, - 0x74, 0x73, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x79, 0x6f, 0x75, 0x20, - 0x75, 0x6e, 0x64, 0x65, 0x72, 0x0a, 0x74, 0x68, 0x69, 0x73, 0x20, 0x4c, - 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2e, 0x20, 0x20, 0x49, 0x66, 0x20, - 0x79, 0x6f, 0x75, 0x72, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, 0x20, - 0x68, 0x61, 0x76, 0x65, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x20, 0x74, 0x65, - 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x20, 0x61, 0x6e, 0x64, - 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x65, - 0x6e, 0x74, 0x6c, 0x79, 0x0a, 0x72, 0x65, 0x69, 0x6e, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x64, 0x2c, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x64, 0x6f, 0x20, - 0x6e, 0x6f, 0x74, 0x20, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x79, 0x20, - 0x74, 0x6f, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x20, 0x6e, - 0x65, 0x77, 0x20, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x73, 0x20, - 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, - 0x0a, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x20, 0x75, 0x6e, - 0x64, 0x65, 0x72, 0x20, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x31, 0x30, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x39, 0x2e, 0x20, 0x41, 0x63, - 0x63, 0x65, 0x70, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x4e, 0x6f, 0x74, - 0x20, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x20, 0x66, 0x6f, - 0x72, 0x20, 0x48, 0x61, 0x76, 0x69, 0x6e, 0x67, 0x20, 0x43, 0x6f, 0x70, - 0x69, 0x65, 0x73, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x59, 0x6f, 0x75, 0x20, - 0x61, 0x72, 0x65, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x72, 0x65, 0x71, 0x75, - 0x69, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x63, 0x63, 0x65, - 0x70, 0x74, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x4c, 0x69, 0x63, 0x65, - 0x6e, 0x73, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x6f, 0x72, 0x64, 0x65, 0x72, - 0x20, 0x74, 0x6f, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x20, - 0x6f, 0x72, 0x0a, 0x72, 0x75, 0x6e, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x70, - 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x50, 0x72, 0x6f, - 0x67, 0x72, 0x61, 0x6d, 0x2e, 0x20, 0x20, 0x41, 0x6e, 0x63, 0x69, 0x6c, - 0x6c, 0x61, 0x72, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x63, 0x6f, - 0x76, 0x65, 0x72, 0x65, 0x64, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x0a, 0x6f, - 0x63, 0x63, 0x75, 0x72, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x6f, 0x6c, - 0x65, 0x6c, 0x79, 0x20, 0x61, 0x73, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6e, - 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, - 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x70, 0x65, 0x65, 0x72, 0x2d, 0x74, - 0x6f, 0x2d, 0x70, 0x65, 0x65, 0x72, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x0a, 0x74, 0x6f, 0x20, 0x72, - 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x70, - 0x79, 0x20, 0x6c, 0x69, 0x6b, 0x65, 0x77, 0x69, 0x73, 0x65, 0x20, 0x64, - 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x72, 0x65, 0x71, 0x75, - 0x69, 0x72, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x2e, 0x20, 0x20, 0x48, 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, - 0x2c, 0x0a, 0x6e, 0x6f, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x74, - 0x68, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x74, 0x68, 0x69, - 0x73, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x67, 0x72, - 0x61, 0x6e, 0x74, 0x73, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x70, 0x65, 0x72, - 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x70, - 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x65, 0x20, 0x6f, 0x72, 0x0a, - 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x63, - 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x2e, - 0x20, 0x20, 0x54, 0x68, 0x65, 0x73, 0x65, 0x20, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x20, 0x69, 0x6e, 0x66, 0x72, 0x69, 0x6e, 0x67, 0x65, - 0x20, 0x63, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x69, - 0x66, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x64, 0x6f, 0x0a, 0x6e, 0x6f, 0x74, - 0x20, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x20, 0x74, 0x68, 0x69, 0x73, - 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2e, 0x20, 0x20, 0x54, - 0x68, 0x65, 0x72, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x2c, 0x20, 0x62, 0x79, - 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x6f, - 0x72, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6e, - 0x67, 0x20, 0x61, 0x0a, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x20, - 0x77, 0x6f, 0x72, 0x6b, 0x2c, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x69, 0x6e, - 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x79, 0x6f, 0x75, 0x72, 0x20, - 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, - 0x73, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x6f, 0x20, 0x73, 0x6f, 0x2e, - 0x0a, 0x0a, 0x20, 0x20, 0x31, 0x30, 0x2e, 0x20, 0x41, 0x75, 0x74, 0x6f, - 0x6d, 0x61, 0x74, 0x69, 0x63, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, - 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x20, 0x44, 0x6f, 0x77, 0x6e, 0x73, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x20, 0x52, 0x65, 0x63, 0x69, 0x70, 0x69, - 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x45, 0x61, 0x63, - 0x68, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x63, - 0x6f, 0x6e, 0x76, 0x65, 0x79, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x76, 0x65, - 0x72, 0x65, 0x64, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x2c, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x20, - 0x61, 0x75, 0x74, 0x6f, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x6c, - 0x79, 0x0a, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x73, 0x20, 0x61, - 0x20, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x66, 0x72, 0x6f, - 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, - 0x61, 0x6c, 0x20, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x73, - 0x2c, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x75, 0x6e, 0x2c, 0x20, 0x6d, 0x6f, - 0x64, 0x69, 0x66, 0x79, 0x20, 0x61, 0x6e, 0x64, 0x0a, 0x70, 0x72, 0x6f, - 0x70, 0x61, 0x67, 0x61, 0x74, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, - 0x77, 0x6f, 0x72, 0x6b, 0x2c, 0x20, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x4c, 0x69, - 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2e, 0x20, 0x20, 0x59, 0x6f, 0x75, 0x20, - 0x61, 0x72, 0x65, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x72, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x0a, 0x66, 0x6f, 0x72, 0x20, - 0x65, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x69, 0x6e, 0x67, 0x20, 0x63, 0x6f, - 0x6d, 0x70, 0x6c, 0x69, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x62, 0x79, 0x20, - 0x74, 0x68, 0x69, 0x72, 0x64, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x65, - 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, - 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2e, 0x0a, 0x0a, 0x20, 0x20, - 0x41, 0x6e, 0x20, 0x22, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x20, - 0x69, 0x73, 0x20, 0x61, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, - 0x72, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, - 0x6c, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x0a, 0x6f, 0x72, 0x67, 0x61, - 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x6f, 0x72, - 0x20, 0x73, 0x75, 0x62, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x69, 0x61, 0x6c, - 0x6c, 0x79, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x61, 0x73, 0x73, 0x65, 0x74, - 0x73, 0x20, 0x6f, 0x66, 0x20, 0x6f, 0x6e, 0x65, 0x2c, 0x20, 0x6f, 0x72, - 0x20, 0x73, 0x75, 0x62, 0x64, 0x69, 0x76, 0x69, 0x64, 0x69, 0x6e, 0x67, - 0x20, 0x61, 0x6e, 0x0a, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x6d, 0x65, 0x72, - 0x67, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x20, 0x20, 0x49, 0x66, 0x20, - 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x6f, 0x66, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, - 0x0a, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x73, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x65, 0x61, 0x63, 0x68, 0x20, 0x70, - 0x61, 0x72, 0x74, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x61, 0x74, - 0x0a, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x20, 0x77, 0x68, 0x6f, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, - 0x73, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x20, 0x6f, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x61, 0x6c, 0x73, - 0x6f, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x73, 0x20, 0x77, - 0x68, 0x61, 0x74, 0x65, 0x76, 0x65, 0x72, 0x0a, 0x6c, 0x69, 0x63, 0x65, - 0x6e, 0x73, 0x65, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x61, 0x72, - 0x74, 0x79, 0x27, 0x73, 0x20, 0x70, 0x72, 0x65, 0x64, 0x65, 0x63, 0x65, - 0x73, 0x73, 0x6f, 0x72, 0x20, 0x69, 0x6e, 0x20, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x65, 0x73, 0x74, 0x20, 0x68, 0x61, 0x64, 0x20, 0x6f, 0x72, 0x20, - 0x63, 0x6f, 0x75, 0x6c, 0x64, 0x0a, 0x67, 0x69, 0x76, 0x65, 0x20, 0x75, - 0x6e, 0x64, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x65, - 0x76, 0x69, 0x6f, 0x75, 0x73, 0x20, 0x70, 0x61, 0x72, 0x61, 0x67, 0x72, - 0x61, 0x70, 0x68, 0x2c, 0x20, 0x70, 0x6c, 0x75, 0x73, 0x20, 0x61, 0x20, - 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x6f, 0x73, - 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, - 0x68, 0x65, 0x0a, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x64, 0x69, 0x6e, 0x67, 0x20, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, - 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, - 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x65, - 0x64, 0x65, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x20, 0x69, 0x6e, 0x20, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x2c, 0x20, 0x69, 0x66, - 0x0a, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x65, 0x64, 0x65, 0x63, 0x65, - 0x73, 0x73, 0x6f, 0x72, 0x20, 0x68, 0x61, 0x73, 0x20, 0x69, 0x74, 0x20, - 0x6f, 0x72, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x67, 0x65, 0x74, 0x20, 0x69, - 0x74, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x72, 0x65, 0x61, 0x73, 0x6f, - 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x65, 0x66, 0x66, 0x6f, 0x72, 0x74, - 0x73, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x59, 0x6f, 0x75, 0x20, 0x6d, 0x61, - 0x79, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x73, 0x65, - 0x20, 0x61, 0x6e, 0x79, 0x20, 0x66, 0x75, 0x72, 0x74, 0x68, 0x65, 0x72, - 0x20, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x78, 0x65, - 0x72, 0x63, 0x69, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x0a, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, 0x20, 0x67, 0x72, 0x61, 0x6e, - 0x74, 0x65, 0x64, 0x20, 0x6f, 0x72, 0x20, 0x61, 0x66, 0x66, 0x69, 0x72, - 0x6d, 0x65, 0x64, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x74, 0x68, - 0x69, 0x73, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2e, 0x20, - 0x20, 0x46, 0x6f, 0x72, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x2c, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x6d, 0x61, 0x79, 0x0a, 0x6e, 0x6f, - 0x74, 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x20, 0x61, 0x20, 0x6c, - 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x66, 0x65, 0x65, 0x2c, 0x20, - 0x72, 0x6f, 0x79, 0x61, 0x6c, 0x74, 0x79, 0x2c, 0x20, 0x6f, 0x72, 0x20, - 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, - 0x20, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x78, 0x65, 0x72, 0x63, 0x69, 0x73, - 0x65, 0x20, 0x6f, 0x66, 0x0a, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, 0x20, - 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x20, 0x75, 0x6e, 0x64, 0x65, - 0x72, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, - 0x73, 0x65, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x79, 0x6f, 0x75, 0x20, - 0x6d, 0x61, 0x79, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x69, 0x6e, 0x69, 0x74, - 0x69, 0x61, 0x74, 0x65, 0x20, 0x6c, 0x69, 0x74, 0x69, 0x67, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x0a, 0x28, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, - 0x6e, 0x67, 0x20, 0x61, 0x20, 0x63, 0x72, 0x6f, 0x73, 0x73, 0x2d, 0x63, - 0x6c, 0x61, 0x69, 0x6d, 0x20, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x65, 0x72, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x20, 0x69, 0x6e, 0x20, - 0x61, 0x20, 0x6c, 0x61, 0x77, 0x73, 0x75, 0x69, 0x74, 0x29, 0x20, 0x61, - 0x6c, 0x6c, 0x65, 0x67, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x61, 0x74, - 0x0a, 0x61, 0x6e, 0x79, 0x20, 0x70, 0x61, 0x74, 0x65, 0x6e, 0x74, 0x20, - 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x20, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x66, - 0x72, 0x69, 0x6e, 0x67, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x6d, 0x61, - 0x6b, 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x2c, - 0x20, 0x73, 0x65, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x6f, 0x66, - 0x66, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x66, 0x6f, 0x72, 0x0a, 0x73, - 0x61, 0x6c, 0x65, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x69, 0x6d, 0x70, 0x6f, - 0x72, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x50, 0x72, - 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x20, 0x6f, 0x72, 0x20, 0x61, 0x6e, 0x79, - 0x20, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, - 0x69, 0x74, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x31, 0x31, 0x2e, 0x20, 0x50, - 0x61, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x41, - 0x20, 0x22, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x6f, - 0x72, 0x22, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x70, 0x79, - 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x68, 0x6f, 0x6c, 0x64, 0x65, 0x72, - 0x20, 0x77, 0x68, 0x6f, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x65, 0x73, 0x20, 0x75, 0x73, 0x65, 0x20, 0x75, 0x6e, 0x64, 0x65, - 0x72, 0x20, 0x74, 0x68, 0x69, 0x73, 0x0a, 0x4c, 0x69, 0x63, 0x65, 0x6e, - 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x50, 0x72, - 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x20, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x77, - 0x6f, 0x72, 0x6b, 0x20, 0x6f, 0x6e, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, - 0x20, 0x69, 0x73, 0x20, 0x62, 0x61, 0x73, 0x65, 0x64, 0x2e, 0x20, 0x20, - 0x54, 0x68, 0x65, 0x0a, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x74, 0x68, 0x75, - 0x73, 0x20, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x64, 0x20, 0x69, - 0x73, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x6f, 0x72, - 0x27, 0x73, 0x20, 0x22, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x6f, 0x72, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, - 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x41, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x72, - 0x69, 0x62, 0x75, 0x74, 0x6f, 0x72, 0x27, 0x73, 0x20, 0x22, 0x65, 0x73, - 0x73, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x20, 0x70, 0x61, 0x74, 0x65, - 0x6e, 0x74, 0x20, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x22, 0x20, 0x61, - 0x72, 0x65, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x70, 0x61, 0x74, 0x65, 0x6e, - 0x74, 0x20, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x0a, 0x6f, 0x77, 0x6e, - 0x65, 0x64, 0x20, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, - 0x6c, 0x6c, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x6f, 0x72, 0x2c, - 0x20, 0x77, 0x68, 0x65, 0x74, 0x68, 0x65, 0x72, 0x20, 0x61, 0x6c, 0x72, - 0x65, 0x61, 0x64, 0x79, 0x20, 0x61, 0x63, 0x71, 0x75, 0x69, 0x72, 0x65, - 0x64, 0x20, 0x6f, 0x72, 0x0a, 0x68, 0x65, 0x72, 0x65, 0x61, 0x66, 0x74, - 0x65, 0x72, 0x20, 0x61, 0x63, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x2c, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20, - 0x62, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x72, 0x69, 0x6e, 0x67, 0x65, 0x64, - 0x20, 0x62, 0x79, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x6d, 0x61, 0x6e, - 0x6e, 0x65, 0x72, 0x2c, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, - 0x65, 0x64, 0x0a, 0x62, 0x79, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x4c, - 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2c, 0x20, 0x6f, 0x66, 0x20, 0x6d, - 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x75, 0x73, 0x69, 0x6e, 0x67, - 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x73, 0x65, 0x6c, 0x6c, 0x69, 0x6e, 0x67, - 0x20, 0x69, 0x74, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, - 0x75, 0x74, 0x6f, 0x72, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x2c, 0x0a, 0x62, 0x75, 0x74, 0x20, 0x64, 0x6f, 0x20, 0x6e, 0x6f, 0x74, - 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x63, 0x6c, 0x61, - 0x69, 0x6d, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x77, 0x6f, 0x75, - 0x6c, 0x64, 0x20, 0x62, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x72, 0x69, 0x6e, - 0x67, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x61, 0x73, 0x20, - 0x61, 0x0a, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, - 0x65, 0x20, 0x6f, 0x66, 0x20, 0x66, 0x75, 0x72, 0x74, 0x68, 0x65, 0x72, - 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x6f, 0x72, 0x20, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x20, 0x20, 0x46, 0x6f, 0x72, 0x0a, 0x70, - 0x75, 0x72, 0x70, 0x6f, 0x73, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, - 0x68, 0x69, 0x73, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x2c, 0x20, 0x22, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, - 0x22, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x74, 0x6f, 0x20, - 0x67, 0x72, 0x61, 0x6e, 0x74, 0x0a, 0x70, 0x61, 0x74, 0x65, 0x6e, 0x74, - 0x20, 0x73, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x73, - 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x6d, 0x61, 0x6e, 0x6e, 0x65, 0x72, - 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x20, - 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x71, - 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x6f, 0x66, - 0x0a, 0x74, 0x68, 0x69, 0x73, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, - 0x65, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x45, 0x61, 0x63, 0x68, 0x20, 0x63, - 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x6f, 0x72, 0x20, 0x67, - 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x61, 0x20, - 0x6e, 0x6f, 0x6e, 0x2d, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, - 0x65, 0x2c, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x77, 0x69, 0x64, 0x65, - 0x2c, 0x20, 0x72, 0x6f, 0x79, 0x61, 0x6c, 0x74, 0x79, 0x2d, 0x66, 0x72, - 0x65, 0x65, 0x0a, 0x70, 0x61, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x6c, 0x69, - 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x6f, 0x72, 0x27, 0x73, 0x20, 0x65, 0x73, 0x73, 0x65, 0x6e, 0x74, - 0x69, 0x61, 0x6c, 0x20, 0x70, 0x61, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x63, - 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x2c, 0x20, 0x74, 0x6f, 0x0a, 0x6d, 0x61, - 0x6b, 0x65, 0x2c, 0x20, 0x75, 0x73, 0x65, 0x2c, 0x20, 0x73, 0x65, 0x6c, - 0x6c, 0x2c, 0x20, 0x6f, 0x66, 0x66, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, - 0x20, 0x73, 0x61, 0x6c, 0x65, 0x2c, 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x72, - 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x77, - 0x69, 0x73, 0x65, 0x20, 0x72, 0x75, 0x6e, 0x2c, 0x20, 0x6d, 0x6f, 0x64, - 0x69, 0x66, 0x79, 0x20, 0x61, 0x6e, 0x64, 0x0a, 0x70, 0x72, 0x6f, 0x70, - 0x61, 0x67, 0x61, 0x74, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x69, 0x74, - 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x6f, - 0x72, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, - 0x20, 0x20, 0x49, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x6c, - 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x72, 0x65, 0x65, - 0x20, 0x70, 0x61, 0x72, 0x61, 0x67, 0x72, 0x61, 0x70, 0x68, 0x73, 0x2c, - 0x20, 0x61, 0x20, 0x22, 0x70, 0x61, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x6c, - 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x22, 0x20, 0x69, 0x73, 0x20, 0x61, - 0x6e, 0x79, 0x20, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x0a, 0x61, - 0x67, 0x72, 0x65, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x72, 0x20, - 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x2c, 0x20, - 0x68, 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, 0x20, 0x64, 0x65, 0x6e, 0x6f, - 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x2c, 0x20, 0x6e, 0x6f, 0x74, - 0x20, 0x74, 0x6f, 0x20, 0x65, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x20, - 0x61, 0x20, 0x70, 0x61, 0x74, 0x65, 0x6e, 0x74, 0x0a, 0x28, 0x73, 0x75, - 0x63, 0x68, 0x20, 0x61, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x78, 0x70, - 0x72, 0x65, 0x73, 0x73, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x72, 0x61, 0x63, 0x74, - 0x69, 0x63, 0x65, 0x20, 0x61, 0x20, 0x70, 0x61, 0x74, 0x65, 0x6e, 0x74, - 0x20, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x76, 0x65, 0x6e, 0x61, 0x6e, 0x74, - 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x74, 0x6f, 0x0a, 0x73, 0x75, 0x65, 0x20, - 0x66, 0x6f, 0x72, 0x20, 0x70, 0x61, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x69, - 0x6e, 0x66, 0x72, 0x69, 0x6e, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x29, - 0x2e, 0x20, 0x20, 0x54, 0x6f, 0x20, 0x22, 0x67, 0x72, 0x61, 0x6e, 0x74, - 0x22, 0x20, 0x73, 0x75, 0x63, 0x68, 0x20, 0x61, 0x20, 0x70, 0x61, 0x74, - 0x65, 0x6e, 0x74, 0x20, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, - 0x74, 0x6f, 0x20, 0x61, 0x0a, 0x70, 0x61, 0x72, 0x74, 0x79, 0x20, 0x6d, - 0x65, 0x61, 0x6e, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x6d, 0x61, 0x6b, 0x65, - 0x20, 0x73, 0x75, 0x63, 0x68, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x67, 0x72, - 0x65, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x72, 0x20, 0x63, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6e, 0x6f, 0x74, - 0x20, 0x74, 0x6f, 0x20, 0x65, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x20, - 0x61, 0x0a, 0x70, 0x61, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x61, 0x67, 0x61, - 0x69, 0x6e, 0x73, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x61, 0x72, - 0x74, 0x79, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x49, 0x66, 0x20, 0x79, 0x6f, - 0x75, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x79, 0x20, 0x61, 0x20, 0x63, - 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x2c, - 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x6c, 0x79, 0x20, 0x72, - 0x65, 0x6c, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x20, - 0x70, 0x61, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x6c, 0x69, 0x63, 0x65, 0x6e, - 0x73, 0x65, 0x2c, 0x0a, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x43, 0x6f, 0x72, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69, 0x6e, - 0x67, 0x20, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x69, 0x73, 0x20, - 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, - 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x6e, 0x79, 0x6f, 0x6e, 0x65, - 0x0a, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x2c, 0x20, 0x66, 0x72, - 0x65, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, - 0x20, 0x61, 0x6e, 0x64, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x20, 0x6f, 0x66, 0x20, - 0x74, 0x68, 0x69, 0x73, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, - 0x2c, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x61, 0x0a, - 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x6c, 0x79, 0x20, 0x61, 0x76, 0x61, - 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x6e, 0x65, 0x74, 0x77, 0x6f, - 0x72, 0x6b, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x6f, 0x72, - 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x72, 0x65, 0x61, 0x64, 0x69, - 0x6c, 0x79, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x69, 0x62, 0x6c, - 0x65, 0x20, 0x6d, 0x65, 0x61, 0x6e, 0x73, 0x2c, 0x0a, 0x74, 0x68, 0x65, - 0x6e, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x65, - 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x28, 0x31, 0x29, 0x20, 0x63, 0x61, - 0x75, 0x73, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x43, 0x6f, 0x72, 0x72, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x53, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x73, - 0x6f, 0x0a, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2c, - 0x20, 0x6f, 0x72, 0x20, 0x28, 0x32, 0x29, 0x20, 0x61, 0x72, 0x72, 0x61, - 0x6e, 0x67, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x65, 0x70, 0x72, 0x69, - 0x76, 0x65, 0x20, 0x79, 0x6f, 0x75, 0x72, 0x73, 0x65, 0x6c, 0x66, 0x20, - 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x65, 0x6e, 0x65, 0x66, - 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x70, 0x61, - 0x74, 0x65, 0x6e, 0x74, 0x20, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, - 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x70, 0x61, - 0x72, 0x74, 0x69, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x20, 0x77, 0x6f, 0x72, - 0x6b, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x28, 0x33, 0x29, 0x20, 0x61, 0x72, - 0x72, 0x61, 0x6e, 0x67, 0x65, 0x2c, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, - 0x6d, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x0a, 0x63, 0x6f, 0x6e, 0x73, 0x69, - 0x73, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, - 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2c, 0x20, 0x74, 0x6f, 0x20, - 0x65, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, - 0x61, 0x74, 0x65, 0x6e, 0x74, 0x0a, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, - 0x65, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x6f, 0x77, 0x6e, 0x73, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x20, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, - 0x74, 0x73, 0x2e, 0x20, 0x20, 0x22, 0x4b, 0x6e, 0x6f, 0x77, 0x69, 0x6e, - 0x67, 0x6c, 0x79, 0x20, 0x72, 0x65, 0x6c, 0x79, 0x69, 0x6e, 0x67, 0x22, - 0x20, 0x6d, 0x65, 0x61, 0x6e, 0x73, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x68, - 0x61, 0x76, 0x65, 0x0a, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, 0x20, 0x6b, - 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x20, 0x74, 0x68, 0x61, - 0x74, 0x2c, 0x20, 0x62, 0x75, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x70, 0x61, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x6c, 0x69, - 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2c, 0x20, 0x79, 0x6f, 0x75, 0x72, 0x20, - 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, - 0x65, 0x0a, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x20, 0x77, 0x6f, - 0x72, 0x6b, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x72, 0x79, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x79, 0x6f, 0x75, 0x72, - 0x20, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x27, 0x73, - 0x20, 0x75, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x20, 0x77, 0x6f, 0x72, 0x6b, - 0x0a, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, - 0x79, 0x2c, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x69, 0x6e, 0x66, - 0x72, 0x69, 0x6e, 0x67, 0x65, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x72, - 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x66, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x70, 0x61, 0x74, 0x65, 0x6e, - 0x74, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x61, 0x74, 0x0a, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, - 0x79, 0x6f, 0x75, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x72, 0x65, 0x61, - 0x73, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x6c, 0x69, 0x65, - 0x76, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, - 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x49, 0x66, 0x2c, 0x20, 0x70, 0x75, 0x72, - 0x73, 0x75, 0x61, 0x6e, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x6f, 0x72, 0x20, - 0x69, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, - 0x67, 0x6c, 0x65, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x72, 0x0a, 0x61, 0x72, 0x72, 0x61, 0x6e, - 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2c, 0x20, 0x79, 0x6f, 0x75, 0x20, - 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x79, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x70, - 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x65, 0x20, 0x62, 0x79, 0x20, - 0x70, 0x72, 0x6f, 0x63, 0x75, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x63, 0x6f, - 0x6e, 0x76, 0x65, 0x79, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x2c, - 0x20, 0x61, 0x0a, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x20, 0x77, - 0x6f, 0x72, 0x6b, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x67, 0x72, 0x61, - 0x6e, 0x74, 0x20, 0x61, 0x20, 0x70, 0x61, 0x74, 0x65, 0x6e, 0x74, 0x20, - 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x73, - 0x6f, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, - 0x61, 0x72, 0x74, 0x69, 0x65, 0x73, 0x0a, 0x72, 0x65, 0x63, 0x65, 0x69, - 0x76, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x76, - 0x65, 0x72, 0x65, 0x64, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, - 0x65, 0x6d, 0x20, 0x74, 0x6f, 0x20, 0x75, 0x73, 0x65, 0x2c, 0x20, 0x70, - 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x6d, 0x6f, - 0x64, 0x69, 0x66, 0x79, 0x0a, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x76, - 0x65, 0x79, 0x20, 0x61, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, - 0x63, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x20, 0x77, 0x6f, - 0x72, 0x6b, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x70, 0x61, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x6c, 0x69, 0x63, 0x65, - 0x6e, 0x73, 0x65, 0x0a, 0x79, 0x6f, 0x75, 0x20, 0x67, 0x72, 0x61, 0x6e, - 0x74, 0x20, 0x69, 0x73, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x6d, 0x61, 0x74, - 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x65, 0x78, 0x74, 0x65, 0x6e, - 0x64, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x72, - 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x6f, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, - 0x0a, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x6f, - 0x72, 0x6b, 0x73, 0x20, 0x62, 0x61, 0x73, 0x65, 0x64, 0x20, 0x6f, 0x6e, - 0x20, 0x69, 0x74, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x41, 0x20, 0x70, 0x61, - 0x74, 0x65, 0x6e, 0x74, 0x20, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, - 0x20, 0x69, 0x73, 0x20, 0x22, 0x64, 0x69, 0x73, 0x63, 0x72, 0x69, 0x6d, - 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x79, 0x22, 0x20, 0x69, 0x66, 0x20, - 0x69, 0x74, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, - 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, - 0x69, 0x6e, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x73, 0x63, 0x6f, 0x70, 0x65, - 0x20, 0x6f, 0x66, 0x20, 0x69, 0x74, 0x73, 0x20, 0x63, 0x6f, 0x76, 0x65, - 0x72, 0x61, 0x67, 0x65, 0x2c, 0x20, 0x70, 0x72, 0x6f, 0x68, 0x69, 0x62, - 0x69, 0x74, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x78, 0x65, 0x72, - 0x63, 0x69, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x2c, 0x20, 0x6f, 0x72, 0x20, - 0x69, 0x73, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x6f, - 0x6e, 0x2d, 0x65, 0x78, 0x65, 0x72, 0x63, 0x69, 0x73, 0x65, 0x20, 0x6f, - 0x66, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x6d, 0x6f, 0x72, - 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x69, 0x67, - 0x68, 0x74, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x61, 0x72, 0x65, - 0x0a, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x6c, 0x6c, - 0x79, 0x20, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x20, 0x75, 0x6e, - 0x64, 0x65, 0x72, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x4c, 0x69, 0x63, - 0x65, 0x6e, 0x73, 0x65, 0x2e, 0x20, 0x20, 0x59, 0x6f, 0x75, 0x20, 0x6d, - 0x61, 0x79, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, - 0x79, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x0a, - 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x69, 0x66, 0x20, 0x79, 0x6f, 0x75, 0x20, - 0x61, 0x72, 0x65, 0x20, 0x61, 0x20, 0x70, 0x61, 0x72, 0x74, 0x79, 0x20, - 0x74, 0x6f, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x72, 0x72, 0x61, 0x6e, 0x67, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, - 0x20, 0x74, 0x68, 0x69, 0x72, 0x64, 0x20, 0x70, 0x61, 0x72, 0x74, 0x79, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x69, 0x73, 0x0a, 0x69, 0x6e, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x62, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, - 0x20, 0x6f, 0x66, 0x20, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, - 0x65, 0x2c, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x77, 0x68, 0x69, - 0x63, 0x68, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x20, - 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x0a, 0x74, 0x6f, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x74, 0x68, 0x69, 0x72, 0x64, 0x20, 0x70, 0x61, 0x72, - 0x74, 0x79, 0x20, 0x62, 0x61, 0x73, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x6f, - 0x66, 0x20, 0x79, 0x6f, 0x75, 0x72, 0x20, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, - 0x79, 0x69, 0x6e, 0x67, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x77, 0x6f, 0x72, - 0x6b, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, - 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, - 0x68, 0x69, 0x72, 0x64, 0x20, 0x70, 0x61, 0x72, 0x74, 0x79, 0x20, 0x67, - 0x72, 0x61, 0x6e, 0x74, 0x73, 0x2c, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x6e, - 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x70, 0x61, 0x72, - 0x74, 0x69, 0x65, 0x73, 0x20, 0x77, 0x68, 0x6f, 0x20, 0x77, 0x6f, 0x75, - 0x6c, 0x64, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x20, 0x77, - 0x6f, 0x72, 0x6b, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x79, 0x6f, 0x75, - 0x2c, 0x20, 0x61, 0x20, 0x64, 0x69, 0x73, 0x63, 0x72, 0x69, 0x6d, 0x69, - 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x79, 0x0a, 0x70, 0x61, 0x74, 0x65, 0x6e, - 0x74, 0x20, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x28, 0x61, - 0x29, 0x20, 0x69, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x63, 0x6f, 0x70, - 0x69, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, - 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x0a, - 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x79, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, - 0x79, 0x6f, 0x75, 0x20, 0x28, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x70, 0x69, - 0x65, 0x73, 0x20, 0x6d, 0x61, 0x64, 0x65, 0x20, 0x66, 0x72, 0x6f, 0x6d, - 0x20, 0x74, 0x68, 0x6f, 0x73, 0x65, 0x20, 0x63, 0x6f, 0x70, 0x69, 0x65, - 0x73, 0x29, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x28, 0x62, 0x29, 0x20, 0x70, - 0x72, 0x69, 0x6d, 0x61, 0x72, 0x69, 0x6c, 0x79, 0x0a, 0x66, 0x6f, 0x72, - 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x6e, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, - 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, 0x70, 0x72, 0x6f, - 0x64, 0x75, 0x63, 0x74, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x6d, - 0x70, 0x69, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x74, 0x68, - 0x61, 0x74, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x20, 0x77, - 0x6f, 0x72, 0x6b, 0x2c, 0x20, 0x75, 0x6e, 0x6c, 0x65, 0x73, 0x73, 0x20, - 0x79, 0x6f, 0x75, 0x20, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x64, 0x20, - 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x61, 0x72, - 0x72, 0x61, 0x6e, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2c, 0x0a, 0x6f, - 0x72, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x70, 0x61, 0x74, 0x65, 0x6e, - 0x74, 0x20, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x77, 0x61, - 0x73, 0x20, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x2c, 0x20, 0x70, - 0x72, 0x69, 0x6f, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x32, 0x38, 0x20, 0x4d, - 0x61, 0x72, 0x63, 0x68, 0x20, 0x32, 0x30, 0x30, 0x37, 0x2e, 0x0a, 0x0a, - 0x20, 0x20, 0x4e, 0x6f, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, - 0x65, 0x20, 0x73, 0x68, 0x61, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x63, - 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, - 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x72, - 0x20, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x6e, 0x67, 0x0a, 0x61, 0x6e, - 0x79, 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x20, 0x6c, 0x69, - 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x6f, 0x74, 0x68, - 0x65, 0x72, 0x20, 0x64, 0x65, 0x66, 0x65, 0x6e, 0x73, 0x65, 0x73, 0x20, - 0x74, 0x6f, 0x20, 0x69, 0x6e, 0x66, 0x72, 0x69, 0x6e, 0x67, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x6d, 0x61, 0x79, - 0x0a, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x77, 0x69, 0x73, 0x65, 0x20, 0x62, - 0x65, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x20, - 0x74, 0x6f, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, - 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x62, 0x6c, 0x65, 0x20, - 0x70, 0x61, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x6c, 0x61, 0x77, 0x2e, 0x0a, - 0x0a, 0x20, 0x20, 0x31, 0x32, 0x2e, 0x20, 0x4e, 0x6f, 0x20, 0x53, 0x75, - 0x72, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x4f, - 0x74, 0x68, 0x65, 0x72, 0x73, 0x27, 0x20, 0x46, 0x72, 0x65, 0x65, 0x64, - 0x6f, 0x6d, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x49, 0x66, 0x20, 0x63, 0x6f, - 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x72, 0x65, - 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, - 0x79, 0x6f, 0x75, 0x20, 0x28, 0x77, 0x68, 0x65, 0x74, 0x68, 0x65, 0x72, - 0x20, 0x62, 0x79, 0x20, 0x63, 0x6f, 0x75, 0x72, 0x74, 0x20, 0x6f, 0x72, - 0x64, 0x65, 0x72, 0x2c, 0x20, 0x61, 0x67, 0x72, 0x65, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x20, 0x6f, 0x72, 0x0a, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x77, - 0x69, 0x73, 0x65, 0x29, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x63, 0x6f, - 0x6e, 0x74, 0x72, 0x61, 0x64, 0x69, 0x63, 0x74, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, - 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x4c, 0x69, 0x63, 0x65, - 0x6e, 0x73, 0x65, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x79, 0x20, 0x64, 0x6f, - 0x20, 0x6e, 0x6f, 0x74, 0x0a, 0x65, 0x78, 0x63, 0x75, 0x73, 0x65, 0x20, - 0x79, 0x6f, 0x75, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, - 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x4c, 0x69, 0x63, 0x65, - 0x6e, 0x73, 0x65, 0x2e, 0x20, 0x20, 0x49, 0x66, 0x20, 0x79, 0x6f, 0x75, - 0x20, 0x63, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x76, - 0x65, 0x79, 0x20, 0x61, 0x0a, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, - 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x73, 0x6f, 0x20, 0x61, 0x73, 0x20, - 0x74, 0x6f, 0x20, 0x73, 0x61, 0x74, 0x69, 0x73, 0x66, 0x79, 0x20, 0x73, - 0x69, 0x6d, 0x75, 0x6c, 0x74, 0x61, 0x6e, 0x65, 0x6f, 0x75, 0x73, 0x6c, - 0x79, 0x20, 0x79, 0x6f, 0x75, 0x72, 0x20, 0x6f, 0x62, 0x6c, 0x69, 0x67, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x0a, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, - 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x6f, 0x74, - 0x68, 0x65, 0x72, 0x20, 0x70, 0x65, 0x72, 0x74, 0x69, 0x6e, 0x65, 0x6e, - 0x74, 0x20, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x61, 0x73, 0x20, 0x61, - 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, - 0x20, 0x79, 0x6f, 0x75, 0x20, 0x6d, 0x61, 0x79, 0x0a, 0x6e, 0x6f, 0x74, - 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x79, 0x20, 0x69, 0x74, 0x20, 0x61, - 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x2e, 0x20, 0x20, 0x46, 0x6f, 0x72, 0x20, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2c, 0x20, 0x69, 0x66, 0x20, - 0x79, 0x6f, 0x75, 0x20, 0x61, 0x67, 0x72, 0x65, 0x65, 0x20, 0x74, 0x6f, - 0x20, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, - 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x65, 0x20, 0x79, 0x6f, 0x75, - 0x0a, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x20, - 0x61, 0x20, 0x72, 0x6f, 0x79, 0x61, 0x6c, 0x74, 0x79, 0x20, 0x66, 0x6f, - 0x72, 0x20, 0x66, 0x75, 0x72, 0x74, 0x68, 0x65, 0x72, 0x20, 0x63, 0x6f, - 0x6e, 0x76, 0x65, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x66, 0x72, 0x6f, 0x6d, - 0x20, 0x74, 0x68, 0x6f, 0x73, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x77, 0x68, - 0x6f, 0x6d, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, - 0x79, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, - 0x6d, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, - 0x77, 0x61, 0x79, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x63, 0x6f, 0x75, 0x6c, - 0x64, 0x20, 0x73, 0x61, 0x74, 0x69, 0x73, 0x66, 0x79, 0x20, 0x62, 0x6f, - 0x74, 0x68, 0x20, 0x74, 0x68, 0x6f, 0x73, 0x65, 0x20, 0x74, 0x65, 0x72, - 0x6d, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x69, 0x73, 0x0a, - 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x77, 0x6f, 0x75, 0x6c, - 0x64, 0x20, 0x62, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x65, 0x66, 0x72, - 0x61, 0x69, 0x6e, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x72, 0x65, 0x6c, 0x79, - 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x79, - 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x50, 0x72, 0x6f, 0x67, - 0x72, 0x61, 0x6d, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x31, 0x33, 0x2e, 0x20, - 0x55, 0x73, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x47, 0x4e, 0x55, 0x20, 0x41, 0x66, 0x66, 0x65, 0x72, 0x6f, 0x20, - 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x50, 0x75, 0x62, 0x6c, - 0x69, 0x63, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2e, 0x0a, - 0x0a, 0x20, 0x20, 0x4e, 0x6f, 0x74, 0x77, 0x69, 0x74, 0x68, 0x73, 0x74, - 0x61, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x6f, - 0x74, 0x68, 0x65, 0x72, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x4c, - 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2c, 0x20, 0x79, 0x6f, 0x75, 0x20, - 0x68, 0x61, 0x76, 0x65, 0x0a, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x6c, 0x69, 0x6e, 0x6b, 0x20, - 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x20, 0x61, - 0x6e, 0x79, 0x20, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x20, 0x77, - 0x6f, 0x72, 0x6b, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x77, - 0x6f, 0x72, 0x6b, 0x20, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x64, - 0x0a, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x20, 0x33, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x47, 0x4e, 0x55, 0x20, 0x41, 0x66, 0x66, 0x65, 0x72, 0x6f, 0x20, 0x47, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x50, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x69, 0x6e, - 0x74, 0x6f, 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x0a, - 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x6f, 0x72, - 0x6b, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, - 0x6e, 0x76, 0x65, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x2e, - 0x20, 0x20, 0x54, 0x68, 0x65, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x20, - 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x0a, 0x4c, 0x69, 0x63, 0x65, - 0x6e, 0x73, 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x63, 0x6f, 0x6e, - 0x74, 0x69, 0x6e, 0x75, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x70, 0x70, - 0x6c, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x61, - 0x72, 0x74, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x69, 0x73, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x20, - 0x77, 0x6f, 0x72, 0x6b, 0x2c, 0x0a, 0x62, 0x75, 0x74, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x20, 0x72, 0x65, - 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x47, 0x4e, 0x55, 0x20, 0x41, 0x66, - 0x66, 0x65, 0x72, 0x6f, 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, - 0x20, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x4c, 0x69, 0x63, 0x65, - 0x6e, 0x73, 0x65, 0x2c, 0x0a, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x20, 0x31, 0x33, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x63, 0x65, 0x72, 0x6e, - 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x20, - 0x61, 0x20, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x77, 0x69, - 0x6c, 0x6c, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x20, 0x74, 0x6f, 0x20, - 0x74, 0x68, 0x65, 0x0a, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x73, 0x20, 0x73, 0x75, 0x63, 0x68, 0x2e, - 0x0a, 0x0a, 0x20, 0x20, 0x31, 0x34, 0x2e, 0x20, 0x52, 0x65, 0x76, 0x69, - 0x73, 0x65, 0x64, 0x20, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x4c, 0x69, 0x63, - 0x65, 0x6e, 0x73, 0x65, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x54, 0x68, 0x65, - 0x20, 0x46, 0x72, 0x65, 0x65, 0x20, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, - 0x72, 0x65, 0x20, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, - 0x68, 0x20, 0x72, 0x65, 0x76, 0x69, 0x73, 0x65, 0x64, 0x20, 0x61, 0x6e, - 0x64, 0x2f, 0x6f, 0x72, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x0a, 0x74, 0x68, 0x65, - 0x20, 0x47, 0x4e, 0x55, 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, - 0x20, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x4c, 0x69, 0x63, 0x65, - 0x6e, 0x73, 0x65, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x69, 0x6d, - 0x65, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x20, 0x20, - 0x53, 0x75, 0x63, 0x68, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x0a, 0x62, - 0x65, 0x20, 0x73, 0x69, 0x6d, 0x69, 0x6c, 0x61, 0x72, 0x20, 0x69, 0x6e, - 0x20, 0x73, 0x70, 0x69, 0x72, 0x69, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x20, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x62, 0x75, 0x74, 0x20, - 0x6d, 0x61, 0x79, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x20, 0x69, - 0x6e, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x20, 0x74, 0x6f, 0x0a, - 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x6e, 0x65, 0x77, 0x20, - 0x70, 0x72, 0x6f, 0x62, 0x6c, 0x65, 0x6d, 0x73, 0x20, 0x6f, 0x72, 0x20, - 0x63, 0x6f, 0x6e, 0x63, 0x65, 0x72, 0x6e, 0x73, 0x2e, 0x0a, 0x0a, 0x20, - 0x20, 0x45, 0x61, 0x63, 0x68, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x20, 0x69, 0x73, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x61, - 0x20, 0x64, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x75, 0x69, 0x73, 0x68, - 0x69, 0x6e, 0x67, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, - 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x2e, 0x20, 0x20, 0x49, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x0a, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x20, - 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x73, 0x20, 0x74, 0x68, - 0x61, 0x74, 0x20, 0x61, 0x20, 0x63, 0x65, 0x72, 0x74, 0x61, 0x69, 0x6e, - 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x65, 0x64, 0x20, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x47, 0x4e, 0x55, 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, - 0x0a, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x4c, 0x69, 0x63, 0x65, - 0x6e, 0x73, 0x65, 0x20, 0x22, 0x6f, 0x72, 0x20, 0x61, 0x6e, 0x79, 0x20, - 0x6c, 0x61, 0x74, 0x65, 0x72, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x22, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x73, 0x20, 0x74, - 0x6f, 0x20, 0x69, 0x74, 0x2c, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x68, 0x61, - 0x76, 0x65, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x6f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, - 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x73, - 0x20, 0x61, 0x6e, 0x64, 0x20, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x20, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, - 0x72, 0x65, 0x64, 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, - 0x6f, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x6c, 0x61, - 0x74, 0x65, 0x72, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, - 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x20, 0x62, 0x79, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x46, 0x72, 0x65, 0x65, 0x20, 0x53, 0x6f, - 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x0a, 0x46, 0x6f, 0x75, 0x6e, 0x64, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x20, 0x20, 0x49, 0x66, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x20, 0x64, - 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x70, 0x65, 0x63, - 0x69, 0x66, 0x79, 0x20, 0x61, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x0a, 0x47, 0x4e, 0x55, 0x20, 0x47, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x6c, 0x20, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x4c, - 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2c, 0x20, 0x79, 0x6f, 0x75, 0x20, - 0x6d, 0x61, 0x79, 0x20, 0x63, 0x68, 0x6f, 0x6f, 0x73, 0x65, 0x20, 0x61, - 0x6e, 0x79, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x65, - 0x76, 0x65, 0x72, 0x20, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, - 0x64, 0x0a, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x46, 0x72, 0x65, - 0x65, 0x20, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x46, - 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, - 0x20, 0x20, 0x49, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x50, 0x72, 0x6f, - 0x67, 0x72, 0x61, 0x6d, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, - 0x65, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x61, 0x20, 0x70, 0x72, - 0x6f, 0x78, 0x79, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x64, 0x65, 0x63, 0x69, - 0x64, 0x65, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x66, 0x75, 0x74, - 0x75, 0x72, 0x65, 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x47, 0x4e, 0x55, 0x20, - 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x50, 0x75, 0x62, 0x6c, - 0x69, 0x63, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x63, - 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x2c, 0x20, - 0x74, 0x68, 0x61, 0x74, 0x20, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x27, 0x73, - 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x63, 0x63, - 0x65, 0x70, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, - 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x70, 0x65, 0x72, - 0x6d, 0x61, 0x6e, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x20, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x73, 0x20, 0x79, 0x6f, 0x75, 0x0a, - 0x74, 0x6f, 0x20, 0x63, 0x68, 0x6f, 0x6f, 0x73, 0x65, 0x20, 0x74, 0x68, - 0x61, 0x74, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x66, - 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x50, 0x72, 0x6f, 0x67, 0x72, - 0x61, 0x6d, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x4c, 0x61, 0x74, 0x65, 0x72, - 0x20, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x67, 0x69, - 0x76, 0x65, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x61, 0x64, 0x64, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x6f, 0x72, 0x20, 0x64, 0x69, 0x66, - 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x0a, 0x70, 0x65, 0x72, 0x6d, 0x69, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x20, 0x20, 0x48, 0x6f, 0x77, - 0x65, 0x76, 0x65, 0x72, 0x2c, 0x20, 0x6e, 0x6f, 0x20, 0x61, 0x64, 0x64, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x6f, 0x62, 0x6c, 0x69, - 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, - 0x69, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x61, - 0x6e, 0x79, 0x0a, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x20, 0x6f, 0x72, - 0x20, 0x63, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x68, - 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x20, 0x61, 0x73, 0x20, 0x61, 0x20, 0x72, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x79, 0x6f, 0x75, - 0x72, 0x20, 0x63, 0x68, 0x6f, 0x6f, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x74, - 0x6f, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x20, 0x61, 0x0a, 0x6c, - 0x61, 0x74, 0x65, 0x72, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x31, 0x35, 0x2e, 0x20, 0x44, 0x69, 0x73, - 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x57, - 0x61, 0x72, 0x72, 0x61, 0x6e, 0x74, 0x79, 0x2e, 0x0a, 0x0a, 0x20, 0x20, - 0x54, 0x48, 0x45, 0x52, 0x45, 0x20, 0x49, 0x53, 0x20, 0x4e, 0x4f, 0x20, - 0x57, 0x41, 0x52, 0x52, 0x41, 0x4e, 0x54, 0x59, 0x20, 0x46, 0x4f, 0x52, - 0x20, 0x54, 0x48, 0x45, 0x20, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x41, 0x4d, - 0x2c, 0x20, 0x54, 0x4f, 0x20, 0x54, 0x48, 0x45, 0x20, 0x45, 0x58, 0x54, - 0x45, 0x4e, 0x54, 0x20, 0x50, 0x45, 0x52, 0x4d, 0x49, 0x54, 0x54, 0x45, - 0x44, 0x20, 0x42, 0x59, 0x0a, 0x41, 0x50, 0x50, 0x4c, 0x49, 0x43, 0x41, - 0x42, 0x4c, 0x45, 0x20, 0x4c, 0x41, 0x57, 0x2e, 0x20, 0x20, 0x45, 0x58, - 0x43, 0x45, 0x50, 0x54, 0x20, 0x57, 0x48, 0x45, 0x4e, 0x20, 0x4f, 0x54, - 0x48, 0x45, 0x52, 0x57, 0x49, 0x53, 0x45, 0x20, 0x53, 0x54, 0x41, 0x54, - 0x45, 0x44, 0x20, 0x49, 0x4e, 0x20, 0x57, 0x52, 0x49, 0x54, 0x49, 0x4e, - 0x47, 0x20, 0x54, 0x48, 0x45, 0x20, 0x43, 0x4f, 0x50, 0x59, 0x52, 0x49, - 0x47, 0x48, 0x54, 0x0a, 0x48, 0x4f, 0x4c, 0x44, 0x45, 0x52, 0x53, 0x20, - 0x41, 0x4e, 0x44, 0x2f, 0x4f, 0x52, 0x20, 0x4f, 0x54, 0x48, 0x45, 0x52, - 0x20, 0x50, 0x41, 0x52, 0x54, 0x49, 0x45, 0x53, 0x20, 0x50, 0x52, 0x4f, - 0x56, 0x49, 0x44, 0x45, 0x20, 0x54, 0x48, 0x45, 0x20, 0x50, 0x52, 0x4f, - 0x47, 0x52, 0x41, 0x4d, 0x20, 0x22, 0x41, 0x53, 0x20, 0x49, 0x53, 0x22, - 0x20, 0x57, 0x49, 0x54, 0x48, 0x4f, 0x55, 0x54, 0x20, 0x57, 0x41, 0x52, - 0x52, 0x41, 0x4e, 0x54, 0x59, 0x0a, 0x4f, 0x46, 0x20, 0x41, 0x4e, 0x59, - 0x20, 0x4b, 0x49, 0x4e, 0x44, 0x2c, 0x20, 0x45, 0x49, 0x54, 0x48, 0x45, - 0x52, 0x20, 0x45, 0x58, 0x50, 0x52, 0x45, 0x53, 0x53, 0x45, 0x44, 0x20, - 0x4f, 0x52, 0x20, 0x49, 0x4d, 0x50, 0x4c, 0x49, 0x45, 0x44, 0x2c, 0x20, - 0x49, 0x4e, 0x43, 0x4c, 0x55, 0x44, 0x49, 0x4e, 0x47, 0x2c, 0x20, 0x42, - 0x55, 0x54, 0x20, 0x4e, 0x4f, 0x54, 0x20, 0x4c, 0x49, 0x4d, 0x49, 0x54, - 0x45, 0x44, 0x20, 0x54, 0x4f, 0x2c, 0x0a, 0x54, 0x48, 0x45, 0x20, 0x49, - 0x4d, 0x50, 0x4c, 0x49, 0x45, 0x44, 0x20, 0x57, 0x41, 0x52, 0x52, 0x41, - 0x4e, 0x54, 0x49, 0x45, 0x53, 0x20, 0x4f, 0x46, 0x20, 0x4d, 0x45, 0x52, - 0x43, 0x48, 0x41, 0x4e, 0x54, 0x41, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, - 0x20, 0x41, 0x4e, 0x44, 0x20, 0x46, 0x49, 0x54, 0x4e, 0x45, 0x53, 0x53, - 0x20, 0x46, 0x4f, 0x52, 0x20, 0x41, 0x20, 0x50, 0x41, 0x52, 0x54, 0x49, - 0x43, 0x55, 0x4c, 0x41, 0x52, 0x0a, 0x50, 0x55, 0x52, 0x50, 0x4f, 0x53, - 0x45, 0x2e, 0x20, 0x20, 0x54, 0x48, 0x45, 0x20, 0x45, 0x4e, 0x54, 0x49, - 0x52, 0x45, 0x20, 0x52, 0x49, 0x53, 0x4b, 0x20, 0x41, 0x53, 0x20, 0x54, - 0x4f, 0x20, 0x54, 0x48, 0x45, 0x20, 0x51, 0x55, 0x41, 0x4c, 0x49, 0x54, - 0x59, 0x20, 0x41, 0x4e, 0x44, 0x20, 0x50, 0x45, 0x52, 0x46, 0x4f, 0x52, - 0x4d, 0x41, 0x4e, 0x43, 0x45, 0x20, 0x4f, 0x46, 0x20, 0x54, 0x48, 0x45, - 0x20, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x41, 0x4d, 0x0a, 0x49, 0x53, 0x20, - 0x57, 0x49, 0x54, 0x48, 0x20, 0x59, 0x4f, 0x55, 0x2e, 0x20, 0x20, 0x53, - 0x48, 0x4f, 0x55, 0x4c, 0x44, 0x20, 0x54, 0x48, 0x45, 0x20, 0x50, 0x52, - 0x4f, 0x47, 0x52, 0x41, 0x4d, 0x20, 0x50, 0x52, 0x4f, 0x56, 0x45, 0x20, - 0x44, 0x45, 0x46, 0x45, 0x43, 0x54, 0x49, 0x56, 0x45, 0x2c, 0x20, 0x59, - 0x4f, 0x55, 0x20, 0x41, 0x53, 0x53, 0x55, 0x4d, 0x45, 0x20, 0x54, 0x48, - 0x45, 0x20, 0x43, 0x4f, 0x53, 0x54, 0x20, 0x4f, 0x46, 0x0a, 0x41, 0x4c, - 0x4c, 0x20, 0x4e, 0x45, 0x43, 0x45, 0x53, 0x53, 0x41, 0x52, 0x59, 0x20, - 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x49, 0x4e, 0x47, 0x2c, 0x20, 0x52, - 0x45, 0x50, 0x41, 0x49, 0x52, 0x20, 0x4f, 0x52, 0x20, 0x43, 0x4f, 0x52, - 0x52, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x2e, 0x0a, 0x0a, 0x20, 0x20, - 0x31, 0x36, 0x2e, 0x20, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x4c, 0x69, 0x61, 0x62, 0x69, 0x6c, - 0x69, 0x74, 0x79, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x49, 0x4e, 0x20, 0x4e, - 0x4f, 0x20, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x20, 0x55, 0x4e, 0x4c, 0x45, - 0x53, 0x53, 0x20, 0x52, 0x45, 0x51, 0x55, 0x49, 0x52, 0x45, 0x44, 0x20, - 0x42, 0x59, 0x20, 0x41, 0x50, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x42, 0x4c, - 0x45, 0x20, 0x4c, 0x41, 0x57, 0x20, 0x4f, 0x52, 0x20, 0x41, 0x47, 0x52, - 0x45, 0x45, 0x44, 0x20, 0x54, 0x4f, 0x20, 0x49, 0x4e, 0x20, 0x57, 0x52, - 0x49, 0x54, 0x49, 0x4e, 0x47, 0x0a, 0x57, 0x49, 0x4c, 0x4c, 0x20, 0x41, - 0x4e, 0x59, 0x20, 0x43, 0x4f, 0x50, 0x59, 0x52, 0x49, 0x47, 0x48, 0x54, - 0x20, 0x48, 0x4f, 0x4c, 0x44, 0x45, 0x52, 0x2c, 0x20, 0x4f, 0x52, 0x20, - 0x41, 0x4e, 0x59, 0x20, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x20, 0x50, 0x41, - 0x52, 0x54, 0x59, 0x20, 0x57, 0x48, 0x4f, 0x20, 0x4d, 0x4f, 0x44, 0x49, - 0x46, 0x49, 0x45, 0x53, 0x20, 0x41, 0x4e, 0x44, 0x2f, 0x4f, 0x52, 0x20, - 0x43, 0x4f, 0x4e, 0x56, 0x45, 0x59, 0x53, 0x0a, 0x54, 0x48, 0x45, 0x20, - 0x50, 0x52, 0x4f, 0x47, 0x52, 0x41, 0x4d, 0x20, 0x41, 0x53, 0x20, 0x50, - 0x45, 0x52, 0x4d, 0x49, 0x54, 0x54, 0x45, 0x44, 0x20, 0x41, 0x42, 0x4f, - 0x56, 0x45, 0x2c, 0x20, 0x42, 0x45, 0x20, 0x4c, 0x49, 0x41, 0x42, 0x4c, - 0x45, 0x20, 0x54, 0x4f, 0x20, 0x59, 0x4f, 0x55, 0x20, 0x46, 0x4f, 0x52, - 0x20, 0x44, 0x41, 0x4d, 0x41, 0x47, 0x45, 0x53, 0x2c, 0x20, 0x49, 0x4e, - 0x43, 0x4c, 0x55, 0x44, 0x49, 0x4e, 0x47, 0x20, 0x41, 0x4e, 0x59, 0x0a, - 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x4c, 0x2c, 0x20, 0x53, 0x50, 0x45, - 0x43, 0x49, 0x41, 0x4c, 0x2c, 0x20, 0x49, 0x4e, 0x43, 0x49, 0x44, 0x45, - 0x4e, 0x54, 0x41, 0x4c, 0x20, 0x4f, 0x52, 0x20, 0x43, 0x4f, 0x4e, 0x53, - 0x45, 0x51, 0x55, 0x45, 0x4e, 0x54, 0x49, 0x41, 0x4c, 0x20, 0x44, 0x41, - 0x4d, 0x41, 0x47, 0x45, 0x53, 0x20, 0x41, 0x52, 0x49, 0x53, 0x49, 0x4e, - 0x47, 0x20, 0x4f, 0x55, 0x54, 0x20, 0x4f, 0x46, 0x20, 0x54, 0x48, 0x45, - 0x0a, 0x55, 0x53, 0x45, 0x20, 0x4f, 0x52, 0x20, 0x49, 0x4e, 0x41, 0x42, - 0x49, 0x4c, 0x49, 0x54, 0x59, 0x20, 0x54, 0x4f, 0x20, 0x55, 0x53, 0x45, - 0x20, 0x54, 0x48, 0x45, 0x20, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x41, 0x4d, - 0x20, 0x28, 0x49, 0x4e, 0x43, 0x4c, 0x55, 0x44, 0x49, 0x4e, 0x47, 0x20, - 0x42, 0x55, 0x54, 0x20, 0x4e, 0x4f, 0x54, 0x20, 0x4c, 0x49, 0x4d, 0x49, - 0x54, 0x45, 0x44, 0x20, 0x54, 0x4f, 0x20, 0x4c, 0x4f, 0x53, 0x53, 0x20, - 0x4f, 0x46, 0x0a, 0x44, 0x41, 0x54, 0x41, 0x20, 0x4f, 0x52, 0x20, 0x44, - 0x41, 0x54, 0x41, 0x20, 0x42, 0x45, 0x49, 0x4e, 0x47, 0x20, 0x52, 0x45, - 0x4e, 0x44, 0x45, 0x52, 0x45, 0x44, 0x20, 0x49, 0x4e, 0x41, 0x43, 0x43, - 0x55, 0x52, 0x41, 0x54, 0x45, 0x20, 0x4f, 0x52, 0x20, 0x4c, 0x4f, 0x53, - 0x53, 0x45, 0x53, 0x20, 0x53, 0x55, 0x53, 0x54, 0x41, 0x49, 0x4e, 0x45, - 0x44, 0x20, 0x42, 0x59, 0x20, 0x59, 0x4f, 0x55, 0x20, 0x4f, 0x52, 0x20, - 0x54, 0x48, 0x49, 0x52, 0x44, 0x0a, 0x50, 0x41, 0x52, 0x54, 0x49, 0x45, - 0x53, 0x20, 0x4f, 0x52, 0x20, 0x41, 0x20, 0x46, 0x41, 0x49, 0x4c, 0x55, - 0x52, 0x45, 0x20, 0x4f, 0x46, 0x20, 0x54, 0x48, 0x45, 0x20, 0x50, 0x52, - 0x4f, 0x47, 0x52, 0x41, 0x4d, 0x20, 0x54, 0x4f, 0x20, 0x4f, 0x50, 0x45, - 0x52, 0x41, 0x54, 0x45, 0x20, 0x57, 0x49, 0x54, 0x48, 0x20, 0x41, 0x4e, - 0x59, 0x20, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x20, 0x50, 0x52, 0x4f, 0x47, - 0x52, 0x41, 0x4d, 0x53, 0x29, 0x2c, 0x0a, 0x45, 0x56, 0x45, 0x4e, 0x20, - 0x49, 0x46, 0x20, 0x53, 0x55, 0x43, 0x48, 0x20, 0x48, 0x4f, 0x4c, 0x44, - 0x45, 0x52, 0x20, 0x4f, 0x52, 0x20, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x20, - 0x50, 0x41, 0x52, 0x54, 0x59, 0x20, 0x48, 0x41, 0x53, 0x20, 0x42, 0x45, - 0x45, 0x4e, 0x20, 0x41, 0x44, 0x56, 0x49, 0x53, 0x45, 0x44, 0x20, 0x4f, - 0x46, 0x20, 0x54, 0x48, 0x45, 0x20, 0x50, 0x4f, 0x53, 0x53, 0x49, 0x42, - 0x49, 0x4c, 0x49, 0x54, 0x59, 0x20, 0x4f, 0x46, 0x0a, 0x53, 0x55, 0x43, - 0x48, 0x20, 0x44, 0x41, 0x4d, 0x41, 0x47, 0x45, 0x53, 0x2e, 0x0a, 0x0a, - 0x20, 0x20, 0x31, 0x37, 0x2e, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, - 0x72, 0x65, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, - 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x31, 0x35, 0x20, - 0x61, 0x6e, 0x64, 0x20, 0x31, 0x36, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x49, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x69, 0x73, 0x63, 0x6c, 0x61, - 0x69, 0x6d, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x77, 0x61, 0x72, 0x72, - 0x61, 0x6e, 0x74, 0x79, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x69, 0x6d, - 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x6c, - 0x69, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x20, 0x70, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x64, 0x0a, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x20, - 0x63, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x69, - 0x76, 0x65, 0x6e, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6c, 0x65, - 0x67, 0x61, 0x6c, 0x20, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x20, 0x61, - 0x63, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, - 0x74, 0x68, 0x65, 0x69, 0x72, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x2c, - 0x0a, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x63, - 0x6f, 0x75, 0x72, 0x74, 0x73, 0x20, 0x73, 0x68, 0x61, 0x6c, 0x6c, 0x20, - 0x61, 0x70, 0x70, 0x6c, 0x79, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, - 0x6c, 0x61, 0x77, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x6d, 0x6f, 0x73, - 0x74, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x6c, 0x79, 0x20, 0x61, 0x70, - 0x70, 0x72, 0x6f, 0x78, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x73, 0x0a, 0x61, - 0x6e, 0x20, 0x61, 0x62, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x65, 0x20, 0x77, - 0x61, 0x69, 0x76, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6c, 0x6c, - 0x20, 0x63, 0x69, 0x76, 0x69, 0x6c, 0x20, 0x6c, 0x69, 0x61, 0x62, 0x69, - 0x6c, 0x69, 0x74, 0x79, 0x20, 0x69, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x6e, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, - 0x74, 0x68, 0x65, 0x0a, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x2c, - 0x20, 0x75, 0x6e, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x61, 0x20, 0x77, 0x61, - 0x72, 0x72, 0x61, 0x6e, 0x74, 0x79, 0x20, 0x6f, 0x72, 0x20, 0x61, 0x73, - 0x73, 0x75, 0x6d, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, - 0x6c, 0x69, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x20, 0x61, 0x63, - 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x69, 0x65, 0x73, 0x20, 0x61, 0x0a, - 0x63, 0x6f, 0x70, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x20, 0x69, 0x6e, 0x20, 0x72, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, - 0x66, 0x65, 0x65, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x45, 0x4e, 0x44, 0x20, 0x4f, 0x46, 0x20, 0x54, 0x45, - 0x52, 0x4d, 0x53, 0x20, 0x41, 0x4e, 0x44, 0x20, 0x43, 0x4f, 0x4e, 0x44, - 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x48, 0x6f, 0x77, 0x20, - 0x74, 0x6f, 0x20, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x20, 0x54, 0x68, 0x65, - 0x73, 0x65, 0x20, 0x54, 0x65, 0x72, 0x6d, 0x73, 0x20, 0x74, 0x6f, 0x20, - 0x59, 0x6f, 0x75, 0x72, 0x20, 0x4e, 0x65, 0x77, 0x20, 0x50, 0x72, 0x6f, - 0x67, 0x72, 0x61, 0x6d, 0x73, 0x0a, 0x0a, 0x20, 0x20, 0x49, 0x66, 0x20, - 0x79, 0x6f, 0x75, 0x20, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x20, - 0x61, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, - 0x6d, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x77, - 0x61, 0x6e, 0x74, 0x20, 0x69, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x73, 0x74, 0x0a, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x6c, - 0x65, 0x20, 0x75, 0x73, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2c, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x62, 0x65, 0x73, 0x74, 0x20, 0x77, 0x61, 0x79, 0x20, 0x74, 0x6f, - 0x20, 0x61, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x20, 0x74, 0x68, 0x69, - 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x6d, 0x61, 0x6b, 0x65, - 0x20, 0x69, 0x74, 0x0a, 0x66, 0x72, 0x65, 0x65, 0x20, 0x73, 0x6f, 0x66, - 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, - 0x65, 0x76, 0x65, 0x72, 0x79, 0x6f, 0x6e, 0x65, 0x20, 0x63, 0x61, 0x6e, - 0x20, 0x72, 0x65, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, - 0x20, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x54, - 0x6f, 0x20, 0x64, 0x6f, 0x20, 0x73, 0x6f, 0x2c, 0x20, 0x61, 0x74, 0x74, - 0x61, 0x63, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x6c, 0x6c, - 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65, - 0x73, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, - 0x67, 0x72, 0x61, 0x6d, 0x2e, 0x20, 0x20, 0x49, 0x74, 0x20, 0x69, 0x73, - 0x20, 0x73, 0x61, 0x66, 0x65, 0x73, 0x74, 0x0a, 0x74, 0x6f, 0x20, 0x61, - 0x74, 0x74, 0x61, 0x63, 0x68, 0x20, 0x74, 0x68, 0x65, 0x6d, 0x20, 0x74, - 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, - 0x6f, 0x66, 0x20, 0x65, 0x61, 0x63, 0x68, 0x20, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x6d, - 0x6f, 0x73, 0x74, 0x20, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x6c, 0x79, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x65, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x20, - 0x6f, 0x66, 0x20, 0x77, 0x61, 0x72, 0x72, 0x61, 0x6e, 0x74, 0x79, 0x3b, - 0x20, 0x61, 0x6e, 0x64, 0x20, 0x65, 0x61, 0x63, 0x68, 0x20, 0x66, 0x69, - 0x6c, 0x65, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x68, 0x61, - 0x76, 0x65, 0x20, 0x61, 0x74, 0x20, 0x6c, 0x65, 0x61, 0x73, 0x74, 0x0a, - 0x74, 0x68, 0x65, 0x20, 0x22, 0x63, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, - 0x68, 0x74, 0x22, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x61, 0x6e, 0x64, - 0x20, 0x61, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x20, 0x74, - 0x6f, 0x20, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x66, 0x75, 0x6c, 0x6c, 0x20, 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x20, - 0x69, 0x73, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x0a, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x3c, 0x6f, 0x6e, 0x65, 0x20, 0x6c, 0x69, 0x6e, 0x65, - 0x20, 0x74, 0x6f, 0x20, 0x67, 0x69, 0x76, 0x65, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x27, 0x73, 0x20, 0x6e, - 0x61, 0x6d, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x20, 0x62, 0x72, - 0x69, 0x65, 0x66, 0x20, 0x69, 0x64, 0x65, 0x61, 0x20, 0x6f, 0x66, 0x20, - 0x77, 0x68, 0x61, 0x74, 0x20, 0x69, 0x74, 0x20, 0x64, 0x6f, 0x65, 0x73, - 0x2e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x43, 0x6f, 0x70, 0x79, 0x72, - 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, 0x43, 0x29, 0x20, 0x3c, 0x79, 0x65, - 0x61, 0x72, 0x3e, 0x20, 0x20, 0x3c, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, - 0x66, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x3e, 0x0a, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x70, 0x72, 0x6f, 0x67, - 0x72, 0x61, 0x6d, 0x20, 0x69, 0x73, 0x20, 0x66, 0x72, 0x65, 0x65, 0x20, - 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x3a, 0x20, 0x79, 0x6f, - 0x75, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x72, 0x65, 0x64, 0x69, 0x73, 0x74, - 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x69, 0x74, 0x20, 0x61, 0x6e, - 0x64, 0x2f, 0x6f, 0x72, 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x69, 0x74, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x47, 0x4e, 0x55, 0x20, 0x47, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x61, 0x73, 0x20, - 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x20, 0x62, 0x79, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x65, 0x20, 0x46, 0x72, 0x65, - 0x65, 0x20, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x46, - 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x65, - 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x20, 0x33, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, - 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2c, 0x20, 0x6f, 0x72, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x28, 0x61, 0x74, 0x20, 0x79, 0x6f, 0x75, 0x72, 0x20, - 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x20, 0x61, 0x6e, 0x79, 0x20, - 0x6c, 0x61, 0x74, 0x65, 0x72, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x54, 0x68, 0x69, 0x73, - 0x20, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x20, 0x69, 0x73, 0x20, - 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x64, 0x20, - 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x68, 0x6f, 0x70, 0x65, 0x20, - 0x74, 0x68, 0x61, 0x74, 0x20, 0x69, 0x74, 0x20, 0x77, 0x69, 0x6c, 0x6c, - 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x66, 0x75, 0x6c, 0x2c, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x62, 0x75, 0x74, 0x20, 0x57, 0x49, 0x54, 0x48, - 0x4f, 0x55, 0x54, 0x20, 0x41, 0x4e, 0x59, 0x20, 0x57, 0x41, 0x52, 0x52, - 0x41, 0x4e, 0x54, 0x59, 0x3b, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, - 0x74, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, - 0x6d, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x20, 0x77, 0x61, 0x72, 0x72, 0x61, - 0x6e, 0x74, 0x79, 0x20, 0x6f, 0x66, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x4d, - 0x45, 0x52, 0x43, 0x48, 0x41, 0x4e, 0x54, 0x41, 0x42, 0x49, 0x4c, 0x49, - 0x54, 0x59, 0x20, 0x6f, 0x72, 0x20, 0x46, 0x49, 0x54, 0x4e, 0x45, 0x53, - 0x53, 0x20, 0x46, 0x4f, 0x52, 0x20, 0x41, 0x20, 0x50, 0x41, 0x52, 0x54, - 0x49, 0x43, 0x55, 0x4c, 0x41, 0x52, 0x20, 0x50, 0x55, 0x52, 0x50, 0x4f, - 0x53, 0x45, 0x2e, 0x20, 0x20, 0x53, 0x65, 0x65, 0x20, 0x74, 0x68, 0x65, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x47, 0x4e, 0x55, 0x20, 0x47, 0x65, 0x6e, - 0x65, 0x72, 0x61, 0x6c, 0x20, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, - 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, - 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, - 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x59, 0x6f, 0x75, 0x20, 0x73, - 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x72, - 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x20, 0x61, 0x20, 0x63, 0x6f, - 0x70, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x47, 0x4e, - 0x55, 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x50, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x61, 0x6c, 0x6f, 0x6e, 0x67, 0x20, 0x77, - 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x70, 0x72, 0x6f, - 0x67, 0x72, 0x61, 0x6d, 0x2e, 0x20, 0x20, 0x49, 0x66, 0x20, 0x6e, 0x6f, - 0x74, 0x2c, 0x20, 0x73, 0x65, 0x65, 0x20, 0x3c, 0x68, 0x74, 0x74, 0x70, - 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x67, 0x6e, 0x75, 0x2e, 0x6f, - 0x72, 0x67, 0x2f, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x73, 0x2f, - 0x3e, 0x2e, 0x0a, 0x0a, 0x41, 0x6c, 0x73, 0x6f, 0x20, 0x61, 0x64, 0x64, - 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x20, 0x6f, 0x6e, 0x20, 0x68, 0x6f, 0x77, 0x20, 0x74, 0x6f, 0x20, 0x63, - 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x62, - 0x79, 0x20, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63, - 0x20, 0x61, 0x6e, 0x64, 0x20, 0x70, 0x61, 0x70, 0x65, 0x72, 0x20, 0x6d, - 0x61, 0x69, 0x6c, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x49, 0x66, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x20, 0x64, - 0x6f, 0x65, 0x73, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, - 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x2c, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x20, 0x69, 0x74, 0x20, 0x6f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x20, 0x61, 0x20, 0x73, 0x68, 0x6f, 0x72, 0x74, - 0x0a, 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x20, 0x6c, 0x69, 0x6b, 0x65, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x69, - 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x73, 0x20, 0x69, 0x6e, 0x20, - 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x3a, 0x0a, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x3c, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x3e, 0x20, - 0x20, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, - 0x43, 0x29, 0x20, 0x3c, 0x79, 0x65, 0x61, 0x72, 0x3e, 0x20, 0x20, 0x3c, - 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x54, 0x68, 0x69, 0x73, - 0x20, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x20, 0x63, 0x6f, 0x6d, - 0x65, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x41, 0x42, 0x53, 0x4f, - 0x4c, 0x55, 0x54, 0x45, 0x4c, 0x59, 0x20, 0x4e, 0x4f, 0x20, 0x57, 0x41, - 0x52, 0x52, 0x41, 0x4e, 0x54, 0x59, 0x3b, 0x20, 0x66, 0x6f, 0x72, 0x20, - 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x20, 0x74, 0x79, 0x70, 0x65, - 0x20, 0x60, 0x73, 0x68, 0x6f, 0x77, 0x20, 0x77, 0x27, 0x2e, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x66, - 0x72, 0x65, 0x65, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, - 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x61, 0x72, - 0x65, 0x20, 0x77, 0x65, 0x6c, 0x63, 0x6f, 0x6d, 0x65, 0x20, 0x74, 0x6f, - 0x20, 0x72, 0x65, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x65, 0x20, 0x69, 0x74, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x75, 0x6e, 0x64, - 0x65, 0x72, 0x20, 0x63, 0x65, 0x72, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x63, - 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3b, 0x20, 0x74, - 0x79, 0x70, 0x65, 0x20, 0x60, 0x73, 0x68, 0x6f, 0x77, 0x20, 0x63, 0x27, - 0x20, 0x66, 0x6f, 0x72, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, - 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x68, 0x79, 0x70, 0x6f, 0x74, - 0x68, 0x65, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x63, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x73, 0x20, 0x60, 0x73, 0x68, 0x6f, 0x77, 0x20, 0x77, - 0x27, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x60, 0x73, 0x68, 0x6f, 0x77, 0x20, - 0x63, 0x27, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x73, 0x68, - 0x6f, 0x77, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x70, 0x70, 0x72, 0x6f, - 0x70, 0x72, 0x69, 0x61, 0x74, 0x65, 0x0a, 0x70, 0x61, 0x72, 0x74, 0x73, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x47, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x6c, 0x20, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x4c, - 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2e, 0x20, 0x20, 0x4f, 0x66, 0x20, - 0x63, 0x6f, 0x75, 0x72, 0x73, 0x65, 0x2c, 0x20, 0x79, 0x6f, 0x75, 0x72, - 0x20, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x27, 0x73, 0x20, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x0a, 0x6d, 0x69, 0x67, 0x68, - 0x74, 0x20, 0x62, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x74, 0x3b, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x47, 0x55, - 0x49, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2c, - 0x20, 0x79, 0x6f, 0x75, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x75, - 0x73, 0x65, 0x20, 0x61, 0x6e, 0x20, 0x22, 0x61, 0x62, 0x6f, 0x75, 0x74, - 0x20, 0x62, 0x6f, 0x78, 0x22, 0x2e, 0x0a, 0x0a, 0x20, 0x20, 0x59, 0x6f, - 0x75, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x61, 0x6c, 0x73, - 0x6f, 0x20, 0x67, 0x65, 0x74, 0x20, 0x79, 0x6f, 0x75, 0x72, 0x20, 0x65, - 0x6d, 0x70, 0x6c, 0x6f, 0x79, 0x65, 0x72, 0x20, 0x28, 0x69, 0x66, 0x20, - 0x79, 0x6f, 0x75, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x61, 0x73, 0x20, - 0x61, 0x20, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, - 0x29, 0x20, 0x6f, 0x72, 0x20, 0x73, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x2c, - 0x0a, 0x69, 0x66, 0x20, 0x61, 0x6e, 0x79, 0x2c, 0x20, 0x74, 0x6f, 0x20, - 0x73, 0x69, 0x67, 0x6e, 0x20, 0x61, 0x20, 0x22, 0x63, 0x6f, 0x70, 0x79, - 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x64, 0x69, 0x73, 0x63, 0x6c, 0x61, - 0x69, 0x6d, 0x65, 0x72, 0x22, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x2c, 0x20, 0x69, - 0x66, 0x20, 0x6e, 0x65, 0x63, 0x65, 0x73, 0x73, 0x61, 0x72, 0x79, 0x2e, - 0x0a, 0x46, 0x6f, 0x72, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x69, 0x6e, - 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x6e, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x68, - 0x6f, 0x77, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x20, - 0x61, 0x6e, 0x64, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x47, 0x4e, 0x55, 0x20, 0x47, 0x50, 0x4c, 0x2c, 0x20, - 0x73, 0x65, 0x65, 0x0a, 0x3c, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, - 0x77, 0x77, 0x77, 0x2e, 0x67, 0x6e, 0x75, 0x2e, 0x6f, 0x72, 0x67, 0x2f, - 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x73, 0x2f, 0x3e, 0x2e, 0x0a, - 0x0a, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20, 0x47, 0x4e, 0x55, 0x20, 0x47, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x50, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x64, 0x6f, - 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, - 0x74, 0x20, 0x69, 0x6e, 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, - 0x69, 0x6e, 0x67, 0x20, 0x79, 0x6f, 0x75, 0x72, 0x20, 0x70, 0x72, 0x6f, - 0x67, 0x72, 0x61, 0x6d, 0x0a, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x70, 0x72, - 0x6f, 0x70, 0x72, 0x69, 0x65, 0x74, 0x61, 0x72, 0x79, 0x20, 0x70, 0x72, - 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x20, 0x20, 0x49, 0x66, 0x20, - 0x79, 0x6f, 0x75, 0x72, 0x20, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, - 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x73, 0x75, 0x62, 0x72, 0x6f, 0x75, - 0x74, 0x69, 0x6e, 0x65, 0x20, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, - 0x2c, 0x20, 0x79, 0x6f, 0x75, 0x0a, 0x6d, 0x61, 0x79, 0x20, 0x63, 0x6f, - 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72, 0x20, 0x69, 0x74, 0x20, 0x6d, 0x6f, - 0x72, 0x65, 0x20, 0x75, 0x73, 0x65, 0x66, 0x75, 0x6c, 0x20, 0x74, 0x6f, - 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x20, 0x6c, 0x69, 0x6e, 0x6b, - 0x69, 0x6e, 0x67, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x72, 0x69, 0x65, 0x74, - 0x61, 0x72, 0x79, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x0a, 0x74, 0x68, - 0x65, 0x20, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x2e, 0x20, 0x20, - 0x49, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x77, - 0x68, 0x61, 0x74, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x77, 0x61, 0x6e, 0x74, - 0x20, 0x74, 0x6f, 0x20, 0x64, 0x6f, 0x2c, 0x20, 0x75, 0x73, 0x65, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x47, 0x4e, 0x55, 0x20, 0x4c, 0x65, 0x73, 0x73, - 0x65, 0x72, 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x0a, 0x50, - 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, - 0x65, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x65, 0x61, 0x64, 0x20, 0x6f, 0x66, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, - 0x65, 0x2e, 0x20, 0x20, 0x42, 0x75, 0x74, 0x20, 0x66, 0x69, 0x72, 0x73, - 0x74, 0x2c, 0x20, 0x70, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x20, 0x72, 0x65, - 0x61, 0x64, 0x0a, 0x3c, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, - 0x77, 0x77, 0x2e, 0x67, 0x6e, 0x75, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x70, - 0x68, 0x69, 0x6c, 0x6f, 0x73, 0x6f, 0x70, 0x68, 0x79, 0x2f, 0x77, 0x68, - 0x79, 0x2d, 0x6e, 0x6f, 0x74, 0x2d, 0x6c, 0x67, 0x70, 0x6c, 0x2e, 0x68, - 0x74, 0x6d, 0x6c, 0x3e, 0x2e, 0x0a, 0x0a, 0x3d, 0x3d, 0x3d, 0x20, 0x52, - 0x61, 0x73, 0x70, 0x69, 0x63, 0x61, 0x6d, 0x20, 0x3d, 0x3d, 0x3d, 0x0a, - 0x20, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x64, 0x65, - 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x41, - 0x56, 0x41, 0x20, 0x28, 0x20, 0x41, 0x76, 0x61, 0x20, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x55, 0x6e, - 0x69, 0x76, 0x65, 0x72, 0x73, 0x69, 0x74, 0x79, 0x20, 0x6f, 0x66, 0x20, - 0x43, 0x6f, 0x72, 0x64, 0x6f, 0x62, 0x61, 0x2c, 0x20, 0x61, 0x76, 0x61, - 0x20, 0x20, 0x61, 0x74, 0x20, 0x75, 0x63, 0x6f, 0x20, 0x64, 0x6f, 0x74, - 0x20, 0x65, 0x73, 0x29, 0x0a, 0x20, 0x4d, 0x61, 0x69, 0x6e, 0x20, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x20, 0x52, 0x61, 0x66, 0x61, 0x65, 0x6c, - 0x20, 0x4d, 0x75, 0x6e, 0x6f, 0x7a, 0x20, 0x53, 0x61, 0x6c, 0x69, 0x6e, - 0x61, 0x73, 0x20, 0x28, 0x72, 0x6d, 0x73, 0x61, 0x6c, 0x69, 0x6e, 0x61, - 0x73, 0x20, 0x61, 0x74, 0x20, 0x75, 0x63, 0x6f, 0x20, 0x64, 0x6f, 0x74, - 0x20, 0x65, 0x73, 0x29, 0x0a, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x73, - 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x69, 0x73, 0x20, 0x72, - 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x20, 0x75, 0x6e, 0x64, 0x65, - 0x72, 0x20, 0x42, 0x53, 0x44, 0x20, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, - 0x65, 0x20, 0x61, 0x73, 0x20, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, - 0x65, 0x64, 0x20, 0x62, 0x65, 0x6c, 0x6f, 0x77, 0x0a, 0x2d, 0x2d, 0x2d, - 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, - 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, - 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, - 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, - 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, - 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, - 0x68, 0x74, 0x20, 0x28, 0x63, 0x29, 0x20, 0x32, 0x30, 0x31, 0x33, 0x2c, - 0x20, 0x41, 0x56, 0x41, 0x20, 0x28, 0x20, 0x41, 0x76, 0x61, 0x20, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x20, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x74, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x43, 0x6f, 0x72, 0x64, 0x6f, - 0x62, 0x61, 0x2c, 0x20, 0x61, 0x76, 0x61, 0x20, 0x20, 0x61, 0x74, 0x20, - 0x75, 0x63, 0x6f, 0x20, 0x64, 0x6f, 0x74, 0x20, 0x65, 0x73, 0x29, 0x0a, - 0x41, 0x6c, 0x6c, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, 0x20, 0x72, - 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x2e, 0x0a, 0x0a, 0x52, 0x65, - 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, - 0x20, 0x61, 0x6e, 0x64, 0x20, 0x75, 0x73, 0x65, 0x20, 0x69, 0x6e, 0x20, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x62, - 0x69, 0x6e, 0x61, 0x72, 0x79, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x2c, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x6f, 0x72, 0x20, 0x77, 0x69, 0x74, - 0x68, 0x6f, 0x75, 0x74, 0x0a, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x61, 0x72, 0x65, 0x20, 0x70, - 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x20, 0x70, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, - 0x20, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x0a, - 0x61, 0x72, 0x65, 0x20, 0x6d, 0x65, 0x74, 0x3a, 0x0a, 0x31, 0x2e, 0x20, - 0x52, 0x65, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, - 0x72, 0x65, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, - 0x62, 0x6f, 0x76, 0x65, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, - 0x68, 0x74, 0x0a, 0x20, 0x20, 0x20, 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65, - 0x2c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, - 0x6f, 0x66, 0x20, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, - 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x69, 0x73, 0x63, - 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x72, 0x2e, 0x0a, 0x32, 0x2e, 0x20, 0x52, - 0x65, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, - 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x72, - 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x72, - 0x69, 0x67, 0x68, 0x74, 0x0a, 0x20, 0x20, 0x20, 0x6e, 0x6f, 0x74, 0x69, - 0x63, 0x65, 0x2c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x6c, 0x69, 0x73, - 0x74, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x69, - 0x73, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x72, 0x20, 0x69, 0x6e, 0x20, - 0x74, 0x68, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, - 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x6e, 0x64, - 0x2f, 0x6f, 0x72, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x6d, 0x61, - 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x20, 0x70, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x0a, 0x33, 0x2e, 0x20, 0x41, 0x6c, 0x6c, 0x20, 0x61, - 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6d, - 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x20, 0x6d, 0x65, 0x6e, - 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x66, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x75, 0x73, 0x65, 0x20, - 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x6f, 0x66, 0x74, - 0x77, 0x61, 0x72, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x6d, 0x75, 0x73, 0x74, - 0x20, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x61, - 0x63, 0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x3a, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x54, 0x68, 0x69, 0x73, - 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x20, 0x69, 0x6e, 0x63, - 0x6c, 0x75, 0x64, 0x65, 0x73, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, - 0x72, 0x65, 0x20, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x64, - 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x41, 0x76, 0x61, 0x20, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x69, 0x74, 0x79, 0x20, - 0x6f, 0x66, 0x20, 0x43, 0x6f, 0x72, 0x64, 0x6f, 0x62, 0x61, 0x2e, 0x0a, - 0x0a, 0x34, 0x2e, 0x20, 0x4e, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x74, 0x79, 0x20, 0x6e, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, - 0x61, 0x6d, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x69, 0x74, 0x73, 0x20, - 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x6f, 0x72, 0x73, - 0x0a, 0x20, 0x20, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x62, 0x65, 0x20, 0x75, - 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x65, 0x6e, 0x64, 0x6f, 0x72, - 0x73, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x70, 0x72, 0x6f, 0x6d, 0x6f, 0x74, - 0x65, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x20, 0x64, - 0x65, 0x72, 0x69, 0x76, 0x65, 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, - 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, - 0x65, 0x0a, 0x20, 0x20, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, - 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, 0x70, 0x72, - 0x69, 0x6f, 0x72, 0x20, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x20, - 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, - 0x0a, 0x54, 0x48, 0x49, 0x53, 0x20, 0x53, 0x4f, 0x46, 0x54, 0x57, 0x41, - 0x52, 0x45, 0x20, 0x49, 0x53, 0x20, 0x50, 0x52, 0x4f, 0x56, 0x49, 0x44, - 0x45, 0x44, 0x20, 0x42, 0x59, 0x20, 0x41, 0x56, 0x41, 0x20, 0x27, 0x27, - 0x41, 0x53, 0x20, 0x49, 0x53, 0x27, 0x27, 0x20, 0x41, 0x4e, 0x44, 0x20, - 0x41, 0x4e, 0x59, 0x0a, 0x45, 0x58, 0x50, 0x52, 0x45, 0x53, 0x53, 0x20, - 0x4f, 0x52, 0x20, 0x49, 0x4d, 0x50, 0x4c, 0x49, 0x45, 0x44, 0x20, 0x57, - 0x41, 0x52, 0x52, 0x41, 0x4e, 0x54, 0x49, 0x45, 0x53, 0x2c, 0x20, 0x49, - 0x4e, 0x43, 0x4c, 0x55, 0x44, 0x49, 0x4e, 0x47, 0x2c, 0x20, 0x42, 0x55, - 0x54, 0x20, 0x4e, 0x4f, 0x54, 0x20, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x45, - 0x44, 0x20, 0x54, 0x4f, 0x2c, 0x20, 0x54, 0x48, 0x45, 0x20, 0x49, 0x4d, - 0x50, 0x4c, 0x49, 0x45, 0x44, 0x0a, 0x57, 0x41, 0x52, 0x52, 0x41, 0x4e, - 0x54, 0x49, 0x45, 0x53, 0x20, 0x4f, 0x46, 0x20, 0x4d, 0x45, 0x52, 0x43, - 0x48, 0x41, 0x4e, 0x54, 0x41, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x20, - 0x41, 0x4e, 0x44, 0x20, 0x46, 0x49, 0x54, 0x4e, 0x45, 0x53, 0x53, 0x20, - 0x46, 0x4f, 0x52, 0x20, 0x41, 0x20, 0x50, 0x41, 0x52, 0x54, 0x49, 0x43, - 0x55, 0x4c, 0x41, 0x52, 0x20, 0x50, 0x55, 0x52, 0x50, 0x4f, 0x53, 0x45, - 0x20, 0x41, 0x52, 0x45, 0x0a, 0x44, 0x49, 0x53, 0x43, 0x4c, 0x41, 0x49, - 0x4d, 0x45, 0x44, 0x2e, 0x20, 0x49, 0x4e, 0x20, 0x4e, 0x4f, 0x20, 0x45, - 0x56, 0x45, 0x4e, 0x54, 0x20, 0x53, 0x48, 0x41, 0x4c, 0x4c, 0x20, 0x41, - 0x56, 0x41, 0x20, 0x42, 0x45, 0x20, 0x4c, 0x49, 0x41, 0x42, 0x4c, 0x45, - 0x20, 0x46, 0x4f, 0x52, 0x20, 0x41, 0x4e, 0x59, 0x0a, 0x44, 0x49, 0x52, - 0x45, 0x43, 0x54, 0x2c, 0x20, 0x49, 0x4e, 0x44, 0x49, 0x52, 0x45, 0x43, - 0x54, 0x2c, 0x20, 0x49, 0x4e, 0x43, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x41, - 0x4c, 0x2c, 0x20, 0x53, 0x50, 0x45, 0x43, 0x49, 0x41, 0x4c, 0x2c, 0x20, - 0x45, 0x58, 0x45, 0x4d, 0x50, 0x4c, 0x41, 0x52, 0x59, 0x2c, 0x20, 0x4f, - 0x52, 0x20, 0x43, 0x4f, 0x4e, 0x53, 0x45, 0x51, 0x55, 0x45, 0x4e, 0x54, - 0x49, 0x41, 0x4c, 0x20, 0x44, 0x41, 0x4d, 0x41, 0x47, 0x45, 0x53, 0x0a, - 0x28, 0x49, 0x4e, 0x43, 0x4c, 0x55, 0x44, 0x49, 0x4e, 0x47, 0x2c, 0x20, - 0x42, 0x55, 0x54, 0x20, 0x4e, 0x4f, 0x54, 0x20, 0x4c, 0x49, 0x4d, 0x49, - 0x54, 0x45, 0x44, 0x20, 0x54, 0x4f, 0x2c, 0x20, 0x50, 0x52, 0x4f, 0x43, - 0x55, 0x52, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x20, 0x4f, 0x46, 0x20, 0x53, - 0x55, 0x42, 0x53, 0x54, 0x49, 0x54, 0x55, 0x54, 0x45, 0x20, 0x47, 0x4f, - 0x4f, 0x44, 0x53, 0x20, 0x4f, 0x52, 0x20, 0x53, 0x45, 0x52, 0x56, 0x49, - 0x43, 0x45, 0x53, 0x3b, 0x0a, 0x4c, 0x4f, 0x53, 0x53, 0x20, 0x4f, 0x46, - 0x20, 0x55, 0x53, 0x45, 0x2c, 0x20, 0x44, 0x41, 0x54, 0x41, 0x2c, 0x20, - 0x4f, 0x52, 0x20, 0x50, 0x52, 0x4f, 0x46, 0x49, 0x54, 0x53, 0x3b, 0x20, - 0x4f, 0x52, 0x20, 0x42, 0x55, 0x53, 0x49, 0x4e, 0x45, 0x53, 0x53, 0x20, - 0x49, 0x4e, 0x54, 0x45, 0x52, 0x52, 0x55, 0x50, 0x54, 0x49, 0x4f, 0x4e, - 0x29, 0x20, 0x48, 0x4f, 0x57, 0x45, 0x56, 0x45, 0x52, 0x20, 0x43, 0x41, - 0x55, 0x53, 0x45, 0x44, 0x20, 0x41, 0x4e, 0x44, 0x0a, 0x4f, 0x4e, 0x20, - 0x41, 0x4e, 0x59, 0x20, 0x54, 0x48, 0x45, 0x4f, 0x52, 0x59, 0x20, 0x4f, - 0x46, 0x20, 0x4c, 0x49, 0x41, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x2c, - 0x20, 0x57, 0x48, 0x45, 0x54, 0x48, 0x45, 0x52, 0x20, 0x49, 0x4e, 0x20, - 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x41, 0x43, 0x54, 0x2c, 0x20, 0x53, 0x54, - 0x52, 0x49, 0x43, 0x54, 0x20, 0x4c, 0x49, 0x41, 0x42, 0x49, 0x4c, 0x49, - 0x54, 0x59, 0x2c, 0x20, 0x4f, 0x52, 0x20, 0x54, 0x4f, 0x52, 0x54, 0x0a, - 0x28, 0x49, 0x4e, 0x43, 0x4c, 0x55, 0x44, 0x49, 0x4e, 0x47, 0x20, 0x4e, - 0x45, 0x47, 0x4c, 0x49, 0x47, 0x45, 0x4e, 0x43, 0x45, 0x20, 0x4f, 0x52, - 0x20, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x57, 0x49, 0x53, 0x45, 0x29, 0x20, - 0x41, 0x52, 0x49, 0x53, 0x49, 0x4e, 0x47, 0x20, 0x49, 0x4e, 0x20, 0x41, - 0x4e, 0x59, 0x20, 0x57, 0x41, 0x59, 0x20, 0x4f, 0x55, 0x54, 0x20, 0x4f, - 0x46, 0x20, 0x54, 0x48, 0x45, 0x20, 0x55, 0x53, 0x45, 0x20, 0x4f, 0x46, - 0x20, 0x54, 0x48, 0x49, 0x53, 0x0a, 0x53, 0x4f, 0x46, 0x54, 0x57, 0x41, - 0x52, 0x45, 0x2c, 0x20, 0x45, 0x56, 0x45, 0x4e, 0x20, 0x49, 0x46, 0x20, - 0x41, 0x44, 0x56, 0x49, 0x53, 0x45, 0x44, 0x20, 0x4f, 0x46, 0x20, 0x54, - 0x48, 0x45, 0x20, 0x50, 0x4f, 0x53, 0x53, 0x49, 0x42, 0x49, 0x4c, 0x49, - 0x54, 0x59, 0x20, 0x4f, 0x46, 0x20, 0x53, 0x55, 0x43, 0x48, 0x20, 0x44, - 0x41, 0x4d, 0x41, 0x47, 0x45, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x0a, 0x3d, 0x3d, 0x3d, 0x20, - 0x52, 0x61, 0x70, 0x69, 0x64, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x3d, 0x3d, - 0x3d, 0x0a, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, - 0x28, 0x63, 0x29, 0x20, 0x32, 0x30, 0x30, 0x36, 0x2c, 0x20, 0x32, 0x30, - 0x30, 0x37, 0x20, 0x4d, 0x61, 0x72, 0x63, 0x69, 0x6e, 0x20, 0x4b, 0x61, - 0x6c, 0x69, 0x63, 0x69, 0x6e, 0x73, 0x6b, 0x69, 0x0a, 0x0a, 0x50, 0x65, - 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, - 0x68, 0x65, 0x72, 0x65, 0x62, 0x79, 0x20, 0x67, 0x72, 0x61, 0x6e, 0x74, - 0x65, 0x64, 0x2c, 0x20, 0x66, 0x72, 0x65, 0x65, 0x20, 0x6f, 0x66, 0x20, - 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x2c, 0x20, 0x74, 0x6f, 0x20, 0x61, - 0x6e, 0x79, 0x20, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x20, 0x6f, 0x62, - 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x63, 0x6f, - 0x70, 0x79, 0x0a, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, - 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, - 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x64, 0x20, 0x64, - 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x20, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x20, 0x28, 0x74, 0x68, 0x65, 0x20, - 0x22, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x22, 0x29, 0x2c, - 0x20, 0x74, 0x6f, 0x20, 0x64, 0x65, 0x61, 0x6c, 0x0a, 0x69, 0x6e, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x72, 0x65, 0x73, - 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x69, 0x6e, - 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x77, 0x69, 0x74, 0x68, - 0x6f, 0x75, 0x74, 0x20, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, - 0x73, 0x0a, 0x74, 0x6f, 0x20, 0x75, 0x73, 0x65, 0x2c, 0x20, 0x63, 0x6f, - 0x70, 0x79, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x2c, 0x20, - 0x6d, 0x65, 0x72, 0x67, 0x65, 0x2c, 0x20, 0x70, 0x75, 0x62, 0x6c, 0x69, - 0x73, 0x68, 0x2c, 0x20, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x65, 0x2c, 0x20, 0x73, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x65, 0x6e, - 0x73, 0x65, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x2f, 0x6f, 0x72, 0x20, 0x73, - 0x65, 0x6c, 0x6c, 0x20, 0x63, 0x6f, 0x70, 0x69, 0x65, 0x73, 0x0a, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, - 0x72, 0x65, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x70, - 0x65, 0x72, 0x6d, 0x69, 0x74, 0x20, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, - 0x73, 0x20, 0x74, 0x6f, 0x20, 0x77, 0x68, 0x6f, 0x6d, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x69, - 0x73, 0x20, 0x66, 0x75, 0x72, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x20, - 0x74, 0x6f, 0x20, 0x64, 0x6f, 0x20, 0x73, 0x6f, 0x2c, 0x0a, 0x73, 0x75, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x63, - 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0x0a, 0x0a, - 0x54, 0x68, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x20, 0x63, 0x6f, - 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x69, - 0x63, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, - 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6e, - 0x6f, 0x74, 0x69, 0x63, 0x65, 0x20, 0x73, 0x68, 0x61, 0x6c, 0x6c, 0x20, - 0x62, 0x65, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x20, - 0x69, 0x6e, 0x20, 0x61, 0x6c, 0x6c, 0x0a, 0x63, 0x6f, 0x70, 0x69, 0x65, - 0x73, 0x20, 0x6f, 0x72, 0x20, 0x73, 0x75, 0x62, 0x73, 0x74, 0x61, 0x6e, - 0x74, 0x69, 0x61, 0x6c, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, 0x6f, 0x66, - 0x74, 0x77, 0x61, 0x72, 0x65, 0x2e, 0x0a, 0x0a, 0x54, 0x48, 0x45, 0x20, - 0x53, 0x4f, 0x46, 0x54, 0x57, 0x41, 0x52, 0x45, 0x20, 0x49, 0x53, 0x20, - 0x50, 0x52, 0x4f, 0x56, 0x49, 0x44, 0x45, 0x44, 0x20, 0x22, 0x41, 0x53, - 0x20, 0x49, 0x53, 0x22, 0x2c, 0x20, 0x57, 0x49, 0x54, 0x48, 0x4f, 0x55, - 0x54, 0x20, 0x57, 0x41, 0x52, 0x52, 0x41, 0x4e, 0x54, 0x59, 0x20, 0x4f, - 0x46, 0x20, 0x41, 0x4e, 0x59, 0x20, 0x4b, 0x49, 0x4e, 0x44, 0x2c, 0x20, - 0x45, 0x58, 0x50, 0x52, 0x45, 0x53, 0x53, 0x20, 0x4f, 0x52, 0x0a, 0x49, - 0x4d, 0x50, 0x4c, 0x49, 0x45, 0x44, 0x2c, 0x20, 0x49, 0x4e, 0x43, 0x4c, - 0x55, 0x44, 0x49, 0x4e, 0x47, 0x20, 0x42, 0x55, 0x54, 0x20, 0x4e, 0x4f, - 0x54, 0x20, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x45, 0x44, 0x20, 0x54, 0x4f, - 0x20, 0x54, 0x48, 0x45, 0x20, 0x57, 0x41, 0x52, 0x52, 0x41, 0x4e, 0x54, - 0x49, 0x45, 0x53, 0x20, 0x4f, 0x46, 0x20, 0x4d, 0x45, 0x52, 0x43, 0x48, - 0x41, 0x4e, 0x54, 0x41, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x2c, 0x0a, - 0x46, 0x49, 0x54, 0x4e, 0x45, 0x53, 0x53, 0x20, 0x46, 0x4f, 0x52, 0x20, - 0x41, 0x20, 0x50, 0x41, 0x52, 0x54, 0x49, 0x43, 0x55, 0x4c, 0x41, 0x52, - 0x20, 0x50, 0x55, 0x52, 0x50, 0x4f, 0x53, 0x45, 0x20, 0x41, 0x4e, 0x44, - 0x20, 0x4e, 0x4f, 0x4e, 0x49, 0x4e, 0x46, 0x52, 0x49, 0x4e, 0x47, 0x45, - 0x4d, 0x45, 0x4e, 0x54, 0x2e, 0x20, 0x49, 0x4e, 0x20, 0x4e, 0x4f, 0x20, - 0x45, 0x56, 0x45, 0x4e, 0x54, 0x20, 0x53, 0x48, 0x41, 0x4c, 0x4c, 0x0a, - 0x54, 0x48, 0x45, 0x20, 0x41, 0x55, 0x54, 0x48, 0x4f, 0x52, 0x53, 0x20, - 0x4f, 0x52, 0x20, 0x43, 0x4f, 0x50, 0x59, 0x52, 0x49, 0x47, 0x48, 0x54, - 0x20, 0x48, 0x4f, 0x4c, 0x44, 0x45, 0x52, 0x53, 0x20, 0x42, 0x45, 0x20, - 0x4c, 0x49, 0x41, 0x42, 0x4c, 0x45, 0x20, 0x46, 0x4f, 0x52, 0x20, 0x41, - 0x4e, 0x59, 0x20, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x2c, 0x20, 0x44, 0x41, - 0x4d, 0x41, 0x47, 0x45, 0x53, 0x20, 0x4f, 0x52, 0x20, 0x4f, 0x54, 0x48, - 0x45, 0x52, 0x0a, 0x4c, 0x49, 0x41, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, - 0x2c, 0x20, 0x57, 0x48, 0x45, 0x54, 0x48, 0x45, 0x52, 0x20, 0x49, 0x4e, - 0x20, 0x41, 0x4e, 0x20, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x20, 0x4f, - 0x46, 0x20, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x41, 0x43, 0x54, 0x2c, 0x20, - 0x54, 0x4f, 0x52, 0x54, 0x20, 0x4f, 0x52, 0x20, 0x4f, 0x54, 0x48, 0x45, - 0x52, 0x57, 0x49, 0x53, 0x45, 0x2c, 0x20, 0x41, 0x52, 0x49, 0x53, 0x49, - 0x4e, 0x47, 0x20, 0x46, 0x52, 0x4f, 0x4d, 0x2c, 0x0a, 0x4f, 0x55, 0x54, - 0x20, 0x4f, 0x46, 0x20, 0x4f, 0x52, 0x20, 0x49, 0x4e, 0x20, 0x43, 0x4f, - 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x20, 0x57, 0x49, 0x54, - 0x48, 0x20, 0x54, 0x48, 0x45, 0x20, 0x53, 0x4f, 0x46, 0x54, 0x57, 0x41, - 0x52, 0x45, 0x20, 0x4f, 0x52, 0x20, 0x54, 0x48, 0x45, 0x20, 0x55, 0x53, - 0x45, 0x20, 0x4f, 0x52, 0x20, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x20, 0x44, - 0x45, 0x41, 0x4c, 0x49, 0x4e, 0x47, 0x53, 0x0a, 0x49, 0x4e, 0x20, 0x54, - 0x48, 0x45, 0x20, 0x53, 0x4f, 0x46, 0x54, 0x57, 0x41, 0x52, 0x45, 0x2e, - 0x0a, 0x0a, 0x0a, 0x3d, 0x3d, 0x3d, 0x20, 0x6a, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x20, 0x3d, 0x3d, 0x3d, 0x0a, 0x6a, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x20, 0x4a, 0x61, 0x76, 0x61, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, - 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x20, 0x76, 0x31, 0x2e, 0x36, - 0x2e, 0x32, 0x0a, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6a, 0x71, - 0x75, 0x65, 0x72, 0x79, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x0a, 0x0a, 0x43, - 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x32, 0x30, 0x31, - 0x31, 0x2c, 0x20, 0x4a, 0x6f, 0x68, 0x6e, 0x20, 0x52, 0x65, 0x73, 0x69, - 0x67, 0x0a, 0x44, 0x75, 0x61, 0x6c, 0x20, 0x6c, 0x69, 0x63, 0x65, 0x6e, - 0x73, 0x65, 0x64, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x4d, 0x49, 0x54, 0x20, 0x6f, 0x72, 0x20, 0x47, 0x50, 0x4c, - 0x20, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x32, 0x20, 0x6c, - 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x73, 0x2e, 0x0a, 0x68, 0x74, 0x74, - 0x70, 0x3a, 0x2f, 0x2f, 0x6a, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x6f, - 0x72, 0x67, 0x2f, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x0a, 0x0a, - 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x20, 0x53, 0x69, 0x7a, - 0x7a, 0x6c, 0x65, 0x2e, 0x6a, 0x73, 0x0a, 0x68, 0x74, 0x74, 0x70, 0x3a, - 0x2f, 0x2f, 0x73, 0x69, 0x7a, 0x7a, 0x6c, 0x65, 0x6a, 0x73, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x0a, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, - 0x74, 0x20, 0x32, 0x30, 0x31, 0x31, 0x2c, 0x20, 0x54, 0x68, 0x65, 0x20, - 0x44, 0x6f, 0x6a, 0x6f, 0x20, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x0a, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, - 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4d, - 0x49, 0x54, 0x2c, 0x20, 0x42, 0x53, 0x44, 0x2c, 0x20, 0x61, 0x6e, 0x64, - 0x20, 0x47, 0x50, 0x4c, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, - 0x73, 0x2e, 0x0a, 0x0a, 0x3d, 0x3d, 0x3d, 0x20, 0x54, 0x68, 0x72, 0x65, - 0x65, 0x2e, 0x6a, 0x73, 0x20, 0x3d, 0x3d, 0x3d, 0x0a, 0x54, 0x68, 0x65, - 0x20, 0x4d, 0x49, 0x54, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, - 0x0a, 0x0a, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, - 0xc2, 0xa9, 0x20, 0x32, 0x30, 0x31, 0x30, 0x2d, 0x32, 0x30, 0x31, 0x35, - 0x20, 0x74, 0x68, 0x72, 0x65, 0x65, 0x2e, 0x6a, 0x73, 0x20, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x73, 0x0a, 0x0a, 0x50, 0x65, 0x72, 0x6d, 0x69, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x68, 0x65, 0x72, - 0x65, 0x62, 0x79, 0x20, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x2c, - 0x20, 0x66, 0x72, 0x65, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x68, 0x61, - 0x72, 0x67, 0x65, 0x2c, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x6e, 0x79, 0x20, - 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x20, 0x6f, 0x62, 0x74, 0x61, 0x69, - 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x0a, - 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x6f, 0x66, 0x74, - 0x77, 0x61, 0x72, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x73, 0x73, - 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x64, 0x20, 0x64, 0x6f, 0x63, 0x75, - 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x69, - 0x6c, 0x65, 0x73, 0x20, 0x28, 0x74, 0x68, 0x65, 0x20, 0x22, 0x53, 0x6f, - 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x22, 0x29, 0x2c, 0x20, 0x74, 0x6f, - 0x20, 0x64, 0x65, 0x61, 0x6c, 0x0a, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x77, 0x69, - 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, - 0x64, 0x69, 0x6e, 0x67, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, - 0x20, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, 0x0a, 0x74, - 0x6f, 0x20, 0x75, 0x73, 0x65, 0x2c, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x2c, - 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x2c, 0x20, 0x6d, 0x65, 0x72, - 0x67, 0x65, 0x2c, 0x20, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x2c, - 0x20, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2c, - 0x20, 0x73, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2c, - 0x20, 0x61, 0x6e, 0x64, 0x2f, 0x6f, 0x72, 0x20, 0x73, 0x65, 0x6c, 0x6c, - 0x0a, 0x63, 0x6f, 0x70, 0x69, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x2c, - 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x65, 0x72, 0x6d, - 0x69, 0x74, 0x20, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x73, 0x20, 0x74, - 0x6f, 0x20, 0x77, 0x68, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, - 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x69, 0x73, 0x0a, 0x66, - 0x75, 0x72, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, - 0x64, 0x6f, 0x20, 0x73, 0x6f, 0x2c, 0x20, 0x73, 0x75, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, - 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x63, 0x6f, 0x6e, 0x64, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0x0a, 0x0a, 0x54, 0x68, 0x65, - 0x20, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x72, - 0x69, 0x67, 0x68, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x20, - 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x70, 0x65, 0x72, - 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6e, 0x6f, 0x74, 0x69, - 0x63, 0x65, 0x20, 0x73, 0x68, 0x61, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, - 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x0a, - 0x61, 0x6c, 0x6c, 0x20, 0x63, 0x6f, 0x70, 0x69, 0x65, 0x73, 0x20, 0x6f, - 0x72, 0x20, 0x73, 0x75, 0x62, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x69, 0x61, - 0x6c, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, - 0x72, 0x65, 0x2e, 0x0a, 0x0a, 0x54, 0x48, 0x45, 0x20, 0x53, 0x4f, 0x46, - 0x54, 0x57, 0x41, 0x52, 0x45, 0x20, 0x49, 0x53, 0x20, 0x50, 0x52, 0x4f, - 0x56, 0x49, 0x44, 0x45, 0x44, 0x20, 0x22, 0x41, 0x53, 0x20, 0x49, 0x53, - 0x22, 0x2c, 0x20, 0x57, 0x49, 0x54, 0x48, 0x4f, 0x55, 0x54, 0x20, 0x57, - 0x41, 0x52, 0x52, 0x41, 0x4e, 0x54, 0x59, 0x20, 0x4f, 0x46, 0x20, 0x41, - 0x4e, 0x59, 0x20, 0x4b, 0x49, 0x4e, 0x44, 0x2c, 0x20, 0x45, 0x58, 0x50, - 0x52, 0x45, 0x53, 0x53, 0x20, 0x4f, 0x52, 0x0a, 0x49, 0x4d, 0x50, 0x4c, - 0x49, 0x45, 0x44, 0x2c, 0x20, 0x49, 0x4e, 0x43, 0x4c, 0x55, 0x44, 0x49, - 0x4e, 0x47, 0x20, 0x42, 0x55, 0x54, 0x20, 0x4e, 0x4f, 0x54, 0x20, 0x4c, - 0x49, 0x4d, 0x49, 0x54, 0x45, 0x44, 0x20, 0x54, 0x4f, 0x20, 0x54, 0x48, - 0x45, 0x20, 0x57, 0x41, 0x52, 0x52, 0x41, 0x4e, 0x54, 0x49, 0x45, 0x53, - 0x20, 0x4f, 0x46, 0x20, 0x4d, 0x45, 0x52, 0x43, 0x48, 0x41, 0x4e, 0x54, - 0x41, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x2c, 0x0a, 0x46, 0x49, 0x54, - 0x4e, 0x45, 0x53, 0x53, 0x20, 0x46, 0x4f, 0x52, 0x20, 0x41, 0x20, 0x50, - 0x41, 0x52, 0x54, 0x49, 0x43, 0x55, 0x4c, 0x41, 0x52, 0x20, 0x50, 0x55, - 0x52, 0x50, 0x4f, 0x53, 0x45, 0x20, 0x41, 0x4e, 0x44, 0x20, 0x4e, 0x4f, - 0x4e, 0x49, 0x4e, 0x46, 0x52, 0x49, 0x4e, 0x47, 0x45, 0x4d, 0x45, 0x4e, - 0x54, 0x2e, 0x20, 0x49, 0x4e, 0x20, 0x4e, 0x4f, 0x20, 0x45, 0x56, 0x45, - 0x4e, 0x54, 0x20, 0x53, 0x48, 0x41, 0x4c, 0x4c, 0x20, 0x54, 0x48, 0x45, - 0x0a, 0x41, 0x55, 0x54, 0x48, 0x4f, 0x52, 0x53, 0x20, 0x4f, 0x52, 0x20, - 0x43, 0x4f, 0x50, 0x59, 0x52, 0x49, 0x47, 0x48, 0x54, 0x20, 0x48, 0x4f, - 0x4c, 0x44, 0x45, 0x52, 0x53, 0x20, 0x42, 0x45, 0x20, 0x4c, 0x49, 0x41, - 0x42, 0x4c, 0x45, 0x20, 0x46, 0x4f, 0x52, 0x20, 0x41, 0x4e, 0x59, 0x20, - 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x2c, 0x20, 0x44, 0x41, 0x4d, 0x41, 0x47, - 0x45, 0x53, 0x20, 0x4f, 0x52, 0x20, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x0a, - 0x4c, 0x49, 0x41, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x2c, 0x20, 0x57, - 0x48, 0x45, 0x54, 0x48, 0x45, 0x52, 0x20, 0x49, 0x4e, 0x20, 0x41, 0x4e, - 0x20, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x20, 0x4f, 0x46, 0x20, 0x43, - 0x4f, 0x4e, 0x54, 0x52, 0x41, 0x43, 0x54, 0x2c, 0x20, 0x54, 0x4f, 0x52, - 0x54, 0x20, 0x4f, 0x52, 0x20, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x57, 0x49, - 0x53, 0x45, 0x2c, 0x20, 0x41, 0x52, 0x49, 0x53, 0x49, 0x4e, 0x47, 0x20, - 0x46, 0x52, 0x4f, 0x4d, 0x2c, 0x0a, 0x4f, 0x55, 0x54, 0x20, 0x4f, 0x46, - 0x20, 0x4f, 0x52, 0x20, 0x49, 0x4e, 0x20, 0x43, 0x4f, 0x4e, 0x4e, 0x45, - 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x20, 0x57, 0x49, 0x54, 0x48, 0x20, 0x54, - 0x48, 0x45, 0x20, 0x53, 0x4f, 0x46, 0x54, 0x57, 0x41, 0x52, 0x45, 0x20, - 0x4f, 0x52, 0x20, 0x54, 0x48, 0x45, 0x20, 0x55, 0x53, 0x45, 0x20, 0x4f, - 0x52, 0x20, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x20, 0x44, 0x45, 0x41, 0x4c, - 0x49, 0x4e, 0x47, 0x53, 0x20, 0x49, 0x4e, 0x0a, 0x54, 0x48, 0x45, 0x20, - 0x53, 0x4f, 0x46, 0x54, 0x57, 0x41, 0x52, 0x45, 0x2e, 0x0a, 0x0a, 0x20, - 0x0a, 0x0a -}; -unsigned int licenses_txt_len = 39710; diff --git a/src/Calibrator.cpp b/src/Calibrator.cpp index d9b4227..9c8d991 100644 --- a/src/Calibrator.cpp +++ b/src/Calibrator.cpp @@ -85,7 +85,7 @@ bool Calibrator::detectLaserX(real * laserX, PixelLocation& topLocation, PixelLo bool detected = false; ImageProcessor imageProcessor; int firstRowLaserCol = 0; - real percentPixelsOverThreshold = 0; + int numBad1, numBad2; int numLocations = 0; int maxNumLocations = camera->getImageHeight(); PixelLocation * laserLocations = new PixelLocation[maxNumLocations]; @@ -98,7 +98,8 @@ bool Calibrator::detectLaserX(real * laserX, PixelLocation& topLocation, PixelLo laserLocations, maxNumLocations, firstRowLaserCol, - percentPixelsOverThreshold, + numBad1, + numBad2, NULL); // diff --git a/src/Camera.cpp b/src/Camera.cpp index fcc616b..1b76d5f 100644 --- a/src/Camera.cpp +++ b/src/Camera.cpp @@ -29,11 +29,15 @@ namespace freelss { +#define VIDEO_CAMERA_TYPE Camera::CT_MMALVIDEO +//#define VIDEO_CAMERA_TYPE Camera::CT_RASPICAM + CriticalSection Camera::m_cs = CriticalSection(); Camera * Camera::m_instance = NULL; -Camera::CameraType Camera::m_cameraType = Camera::CT_RASPICAM; +Camera::CameraType Camera::m_cameraType = VIDEO_CAMERA_TYPE; int Camera::m_reqImageWidth = 0; int Camera::m_reqImageHeight = 0; +int Camera::m_reqFrameRate = 0; Camera::Camera() { @@ -58,7 +62,7 @@ Camera * Camera::getInstance() } else if (m_cameraType == Camera::CT_RASPICAM) { - std::cout << "Creating video mode camera resolution=" << m_reqImageWidth << "x" << m_reqImageHeight << std::endl; + std::cout << "Creating Raspicam video mode camera resolution=" << m_reqImageWidth << "x" << m_reqImageHeight << std::endl; m_instance = new RaspicamCamera(m_reqImageWidth, m_reqImageHeight); } else if (m_cameraType == Camera::CT_MMALSTILL) @@ -68,7 +72,8 @@ Camera * Camera::getInstance() } else if (m_cameraType == Camera::CT_MMALVIDEO) { - m_instance = new MmalVideoCamera(); + std::cout << "Creating MMAL video mode camera resolution=" << m_reqImageWidth << "x" << m_reqImageHeight << std::endl; + m_instance = new MmalVideoCamera(m_reqImageWidth, m_reqImageHeight, m_reqFrameRate); } else { @@ -109,6 +114,7 @@ void Camera::reinitialize() Camera::CameraType type; int reqImageWidth; int reqImageHeight; + int reqFrameRate; switch (cameraMode) { @@ -116,30 +122,46 @@ void Camera::reinitialize() type = CT_MMALSTILL; reqImageWidth = 2592; reqImageHeight = 1944; + reqFrameRate = 15; break; case CM_VIDEO_5MP: - type = CT_RASPICAM; - reqImageWidth = 2560; - reqImageHeight = 1920; + type = VIDEO_CAMERA_TYPE; + reqImageWidth = 2592; + reqImageHeight = 1944; + reqFrameRate = 15; + //reqImageHeight = 1944; + //reqImageWidth = 2560; + //reqImageHeight = 1920; break; case CM_VIDEO_HD: - type = CT_RASPICAM; + type = VIDEO_CAMERA_TYPE; reqImageWidth = 1600; reqImageHeight = 1200; + reqFrameRate = 30; break; case CM_VIDEO_1P2MP: - type = CT_RASPICAM; + type = VIDEO_CAMERA_TYPE; + //reqImageWidth = 1296; + //reqImageHeight = 972; reqImageWidth = 1280; reqImageHeight = 960; + //reqImageWidth = 1312; + //reqImageHeight = 984; + //reqImageWidth = 1324; + //reqImageHeight = 993; + //reqImageWidth = 1288; + //reqImageHeight = 966; + reqFrameRate = 42; break; case CM_VIDEO_VGA: + type = VIDEO_CAMERA_TYPE; reqImageWidth = 640; reqImageHeight = 480; - type = CT_RASPICAM; + reqFrameRate = 60; break; default: @@ -159,6 +181,7 @@ void Camera::reinitialize() m_cameraType = type; m_reqImageWidth = reqImageWidth; m_reqImageHeight = reqImageHeight; + m_reqFrameRate = reqFrameRate; } } catch (...) diff --git a/src/Camera.h b/src/Camera.h index d4826bc..fbb8da0 100644 --- a/src/Camera.h +++ b/src/Camera.h @@ -96,6 +96,9 @@ class Camera /** The requested image height */ static int m_reqImageHeight; + + /** The requested frame rate */ + static int m_reqFrameRate; }; } diff --git a/src/Facetizer.cpp b/src/Facetizer.cpp new file mode 100644 index 0000000..ccf568b --- /dev/null +++ b/src/Facetizer.cpp @@ -0,0 +1,273 @@ +/* + **************************************************************************** + * Copyright (c) 2014 Uriah Liggett * + * This file is part of FreeLSS. * + * * + * FreeLSS is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 3 of the License, or * + * (at your option) any later version. * + * * + * FreeLSS is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with FreeLSS. If not, see . * + **************************************************************************** +*/ + +#include "Main.h" +#include "Facetizer.h" +#include "Camera.h" + +namespace freelss +{ + +static real32 DistanceSquared(const ColoredPoint& a, const ColoredPoint&b) +{ + real32 dx = a.x - b.x; + real32 dy = a.y - b.y; + real32 dz = a.z - b.z; + + return dx * dx + dy * dy + dz * dz; +} + +Facetizer::Facetizer() : + m_maxEdgeDistMmSq(12.4 * 12.2), // TODO: Make this a setting or autodetect it based off the distance to table and the detail level + m_imageWidth(0) +{ + +} + +void Facetizer::facetize(FaceMap & faces, std::vector& results, bool connectLastFrameToFirst, Progress& progress, bool updateVertexNormals) +{ + progress.setPercent(0); + + m_imageWidth = Camera::getInstance()->getImageWidth(); + + + uint32 numTriangles = 0; + + int iStep = 0; + + std::vector firstFrame; + std::vector frameA; + std::vector frameB; + std::vector frameC; + + std::vector * currentFrame = &frameA; + std::vector * lastFrame = &frameB; + + size_t resultIndex = 0; + size_t totNumPoints = 0; + + // Set the index of the data points + for (size_t iPt = 0; iPt < results.size(); iPt++) + { + results[iPt].index = (uint32) iPt; + } + + real percent = 0; + while (DataPoint::readNextFrame(frameC, results, resultIndex)) + { + real newPct = 100.0f * resultIndex / results.size(); + if (newPct - percent > 0.1) + { + progress.setPercent(newPct); + percent = newPct; + } + + * currentFrame = frameC; + totNumPoints += currentFrame->size(); + + // Sort the results in decreasing Y + //std::sort(currentFrame->begin(), currentFrame->end(), SortRecordByYValue); + + if (iStep > 0) + { + addFacesForColumn(* currentFrame, * lastFrame, faces, numTriangles); + } + else if (connectLastFrameToFirst) + { + // Store the first frame for usage later on + firstFrame = frameC; + } + + // Swap to the other buffer to populate it + std::vector * tmpFrame = lastFrame; + lastFrame = currentFrame; + currentFrame = tmpFrame; + + iStep++; + } + + // If this was a full scan close the loop + if (connectLastFrameToFirst && iStep > 0) + { + totNumPoints += firstFrame.size(); + addFacesForColumn(firstFrame, * lastFrame, faces, numTriangles); + } + + std::cout << "Meshed " << (iStep + 1) << " scans with a total of " << totNumPoints << " points." << std::endl; + + std::cout << "Computing vertex normals..." << std::endl; + + const std::vector& triangles = faces.triangles; + + Vector3 normal; + for (size_t idx = 0; idx < triangles.size(); idx += 3) + { + ColoredPoint& pt1 = results[triangles[idx]].point; + ColoredPoint& pt2 = results[triangles[idx + 1]].point; + ColoredPoint& pt3 = results[triangles[idx + 2]].point; + + Vector3 v1 (pt2.x - pt1.x, pt2.y - pt1.y, pt2.z - pt1.z); + Vector3 v2 (pt3.x - pt2.x, pt3.y - pt2.y, pt3.z - pt2.z); + + v1.cross(normal, v2); + normal.normalize(); + + pt1.normal = normal; + pt2.normal = normal; + pt3.normal = normal; + } + + std::cout << "Vertex normals computed." << std::endl; +} + +bool Facetizer::isInwardFacingFace(const DataPoint& p1, const DataPoint& p2, const DataPoint& p3) +{ + int laserSide = p1.laserSide; + bool inwardFacing = false; + float halfImageWidth = m_imageWidth * 0.5f; // If it's past the centerline then it will result in an inward facing triangle + + if (laserSide == (int)Laser::LEFT_LASER) + { + inwardFacing = p1.pixel.x > halfImageWidth || p2.pixel.x > halfImageWidth || p3.pixel.x > halfImageWidth; + } + else if (laserSide == (int)Laser::RIGHT_LASER) + { + inwardFacing = p1.pixel.x < halfImageWidth || p2.pixel.x < halfImageWidth || p3.pixel.x < halfImageWidth; + } + else + { + throw Exception("Unsupported LaserSide in StlWriter::isInwardFacingFace"); + } + + return inwardFacing; +} + + +/* +foreach column + set row to 0 + foreach pt in prev_column + // Fan connect to the row + while cell[row] is within range and cell[row + 1] is within range and closer to this point than the one below + createTriangle(pt, cell[row], cell[row + 1]) + row++ + + // Extend mesh down to start processing the next point + if nextPt is within range + createTriangle(pt, nextPt, cell[row]) + + + */ +void Facetizer::addFacesForColumn(const std::vector& currentFrame, const std::vector& lastFrame, FaceMap& faces, uint32& numTriangles) +{ + size_t iCur = 0; + + for (size_t iLst = 0; iLst + 1 < lastFrame.size(); iLst++) + { + const DataPoint & l1 = lastFrame[iLst]; + const DataPoint & l2 = lastFrame[iLst + 1]; + + // If the current point is in range + while (iCur + 1 < currentFrame.size()) + { + const DataPoint & c1 = currentFrame[iCur]; + const DataPoint & c2 = currentFrame[iCur + 1]; + + // If there is a hole in the model, skip along until there isn't one + if (isValidTriangle(l1.point, c1.point, c2.point)) + { + real32 distSq1 = DistanceSquared(l1.point, c2.point); + real32 distSq2 = DistanceSquared(l2.point, c2.point); + + // While this C point is closer to this L point than the next L point, create a triangle fan with it + // Don't generate triangles bigger than our maximum allowable edge distance + // if (distSq1 < distSq2 && distSq1 <= m_maxEdgeDistMmSq) + if (distSq1 < distSq2) + { + // Determine if we need to flip the normal or not + bool flipNormal = isInwardFacingFace(l1, c1, c2); + addTriangle(l1, c1, c2, flipNormal, faces); + numTriangles++; + } + else + { + // Connect to this triangle + if (isValidTriangle(l2.point, l1.point, c1.point)) + { + bool flipNormal = isInwardFacingFace(l2, l1, c1); + addTriangle(l2, l1, c1, flipNormal, faces); + numTriangles++; + } + else + { + iCur++; + } + + // It's closer to the next L point, so advance to it + break; + } + } + else + { + iCur++; + break; + } + + // Advance to the next row + iCur++; + } + } +} + +bool Facetizer::isValidTriangle(const ColoredPoint& pt1, const ColoredPoint& pt2, const ColoredPoint& pt3) +{ + if (DistanceSquared(pt1, pt2) > m_maxEdgeDistMmSq) + { + return false; + } + else if (DistanceSquared(pt1, pt3) > m_maxEdgeDistMmSq) + { + return false; + } + else if (DistanceSquared(pt2, pt3) > m_maxEdgeDistMmSq) + { + return false; + } + + return true; +} + +void Facetizer::addTriangle(const DataPoint& pt1, const DataPoint& pt2, const DataPoint& pt3, bool flipNormal, FaceMap& faces) +{ + if (!flipNormal) + { + faces.triangles.push_back(pt1.index); + faces.triangles.push_back(pt2.index); + faces.triangles.push_back(pt3.index); + } + else + { + faces.triangles.push_back(pt3.index); + faces.triangles.push_back(pt2.index); + faces.triangles.push_back(pt1.index); + } +} + +} diff --git a/src/NeutralFileWriter.h b/src/Facetizer.h similarity index 56% rename from src/NeutralFileWriter.h rename to src/Facetizer.h index 7321682..1ebade7 100644 --- a/src/NeutralFileWriter.h +++ b/src/Facetizer.h @@ -20,32 +20,35 @@ #pragma once +#include "Laser.h" +#include "Progress.h" + namespace freelss { -class NeutralFileWriter +class Facetizer { public: - NeutralFileWriter(); - ~NeutralFileWriter(); - - void beginBatch(); - void commit(); - void open(const std::string& filename); - void close(); - void write(const NeutralFileRecord& record); -private: - - void prepareStatement(); + Facetizer(); - /** The SQL for creating the database */ - static const char * CREATE_DATABASE_SQL; + void facetize(FaceMap & outFaces, std::vector& results, bool connectLastFrameToFirst, Progress& progress, bool updateVertexNormals); - /** The Sqlite database */ - sqlite3 * m_db; - - /** The prepared statement */ - sqlite3_stmt * m_stmt; +private: + /** + * Indicates if the face is oriented point into the model and the normal needs to get flipped. + * This method assumes that the camera is looking straight down -z and x = 0. The y doesn't matter. + * This method assumes that all points were taken from the same laser. + */ + bool isInwardFacingFace(const DataPoint& p1, const DataPoint& p2, const DataPoint& p3); + bool isValidTriangle(const ColoredPoint& pt1, const ColoredPoint& pt2, const ColoredPoint& pt3); + void addFacesForColumn(const std::vector& currentFrame, const std::vector& lastFrame, FaceMap& fout, uint32& numTriangles); + void addTriangle(const DataPoint& pt1, const DataPoint& pt2, const DataPoint& pt3, bool flipNormal, FaceMap& fout); + + /** The max triangle edge distance in mm sq */ + real32 m_maxEdgeDistMmSq; + + /** The image width of the current camera */ + int m_imageWidth; }; } diff --git a/src/HttpServer.cpp b/src/HttpServer.cpp index 5659607..075e6b8 100644 --- a/src/HttpServer.cpp +++ b/src/HttpServer.cpp @@ -917,14 +917,8 @@ static int ProcessPageRequest(RequestInfo * reqInfo) scanner->setTask(Scanner::GENERATE_DEBUG); Preset& preset = PresetManager::get()->getActivePreset(); - Laser::LaserSide laserSide = preset.laserSide; - if (laserSide != Laser::LEFT_LASER && laserSide != Laser::RIGHT_LASER) - { - laserSide = Laser::RIGHT_LASER; - std::cout <<"Defaulting laser side to right laser." << std::endl; - } - scanner->generateDebugInfo(laserSide); + scanner->generateDebugInfo(preset.laserSide); ret = RetrieveFile(reqInfo, "/dbg/5.png"); responded = true; diff --git a/src/ImageProcessor.cpp b/src/ImageProcessor.cpp index d4857a3..7954288 100644 --- a/src/ImageProcessor.cpp +++ b/src/ImageProcessor.cpp @@ -29,6 +29,8 @@ #define PEAK_FILTER 0 #define INV_SQRT_2PI 0.3989422804014327 +#define MAX_NUM_LASER_RANGES 3 // TODO: Place this in the settings + #if GUASS_FILTER #include #endif @@ -115,7 +117,7 @@ ImageProcessor::~ImageProcessor() } int ImageProcessor::process(const Image& before, const Image& after, Image * debuggingImage, PixelLocation * laserLocations, - int maxNumLocations, int& firstRowLaserCol, real & percentPixelsOverThreshold, const char * debuggingCsvFile) + int maxNumLocations, int& firstRowLaserCol, int& numRowsBadFromColor, int& numRowsBadFromNumRanges, const char * debuggingCsvFile) { const real MAX_MAGNITUDE_SQ = 255 * 255 * 3; // The maximum pixel magnitude sq we can see const real INV_MAX_MAGNITUDE_SQ = 1.0f / MAX_MAGNITUDE_SQ; @@ -143,9 +145,7 @@ int ImageProcessor::process(const Image& before, const Image& after, Image * deb unsigned rowStep = width * components; int numLocations = 0; - int numMerged = 0; - int numPixelsOverThreshold = 0; // The location that we last detected a laser line int prevLaserCol = firstRowLaserCol; @@ -165,17 +165,14 @@ int ImageProcessor::process(const Image& before, const Image& after, Image * deb for (unsigned iCol = 0; iCol < rowStep; iCol += components) { // Perform image subtraction -#if 0 // Only consider the red channel - const int r = (int)br[iCol + 0] - (int)ar[iCol + 0]; - const int magSq = r * r; - real mag = 255.0f * (magSq * 0.000015379f); -#else // Use general magnitude + + // Use general magnitude const int r = (int)br[iCol + 0] - (int)ar[iCol + 0]; const int g = (int)br[iCol + 1] - (int)ar[iCol + 1]; const int b = (int)br[iCol + 2] - (int)ar[iCol + 2]; const int magSq = r * r + g * g + b * b; real mag = 255.0f * (magSq * INV_MAX_MAGNITUDE_SQ); -#endif + if (writeDebugImage) { if (mag > m_laserMagnitudeThreshold) @@ -195,9 +192,6 @@ int ImageProcessor::process(const Image& before, const Image& after, Image * deb // Compare it against the threshold if (mag > m_laserMagnitudeThreshold) { - // Flag that this pixel was over the threshold value - numPixelsOverThreshold++; - // The start of pixels with laser in them if (m_laserRanges[numLaserRanges].startCol == -1) { @@ -261,25 +255,41 @@ int ImageProcessor::process(const Image& before, const Image& after, Image * deb rowOut << std::endl; } - // If we have a valid laser region - if (numLaserRanges > 0) + // Removes the ranges that on closer inspection don't appear to be caused by the laser + if (numLaserRanges < MAX_NUM_LASER_RANGES) { - int rangeChoice = detectBestLaserRange(m_laserRanges, numLaserRanges, prevLaserCol); - prevLaserCol = m_laserRanges[rangeChoice].centerCol; + if (numLaserRanges > 0) + { + //numLaserRanges = removeInvalidLaserRanges(m_laserRanges, width, numLaserRanges, br); - real centerCol = detectLaserRangeCenter(m_laserRanges[rangeChoice], ar, br); + // If we have a valid laser region + if (numLaserRanges > 0) + { + int rangeChoice = detectBestLaserRange(m_laserRanges, numLaserRanges, prevLaserCol); + prevLaserCol = m_laserRanges[rangeChoice].centerCol; - laserLocations[numLocations].x = centerCol; - laserLocations[numLocations].y = iRow; + real centerCol = detectLaserRangeCenter(m_laserRanges[rangeChoice], ar, br); - // If this is the first row that a laser is detected in, set the firstRowLaserCol member - if (numLocations == 0) - { - firstRowLaserCol = m_laserRanges[rangeChoice].startCol; - } + laserLocations[numLocations].x = centerCol; + laserLocations[numLocations].y = iRow; - numLocations++; + // If this is the first row that a laser is detected in, set the firstRowLaserCol member + if (numLocations == 0) + { + firstRowLaserCol = m_laserRanges[rangeChoice].startCol; + } + numLocations++; + } + else + { + numRowsBadFromColor++; + } + } + } + else + { + numRowsBadFromNumRanges++; } // Increment to the next row @@ -297,17 +307,114 @@ int ImageProcessor::process(const Image& before, const Image& after, Image * deb std::cout << "Merged " << numMerged << " laser ranges." << std::endl; } + if (numRowsBadFromColor > 0) + { + std::cout << "Dropped " << numRowsBadFromColor << " laser rows because the color wasn't red enough. " << std::endl; + } + + if (numRowsBadFromNumRanges > 0) + { + std::cout << numRowsBadFromNumRanges << " laser rows contained too many ranges. " << std::endl; + } + if (debuggingCsvFile != NULL) { rowOut.close(); } - // Compute the number of pixels over the threshold - percentPixelsOverThreshold = 100.0f * numPixelsOverThreshold / (width * height); - return numLocations; } +int ImageProcessor::removeInvalidLaserRanges(ImageProcessor::LaserRange * ranges, int imageWidth, int numLaserRanges, unsigned char * br) +{ + // Look for a ramp up and ramp down of the red component centered around the laser range to differentiate + // a laser from things moving in the background + const real MIN_RED_VALUE = 255.0f * 0.85f; + + int components = 3; + std::vector goodRanges; // TODO: Check if this is a bottleneck + + for (int iRng = 0; iRng < numLaserRanges; iRng++) + { + const ImageProcessor::LaserRange& range = ranges[iRng]; + int startCol = range.startCol; + int endCol = range.endCol; + int rangeWidth = endCol - startCol + 1; + + /* + int rampWidth = rangeWidth; + + // Determine where to start computing the median of the "pre" portion of the laser line + int preStart = MAX(0, startCol - rampWidth); + int preWidth = MAX(0, startCol - preStart); + + // Determine where to start computing the median of the "post" portion of the laser line + int postStart = MIN(imageWidth, endCol + rampWidth); + int postWidth = rampWidth; + + if (postStart + postWidth >= imageWidth) + { + postWidth = imageWidth - postStart; + } + + real preAvg = computeMeanAverage(br + preStart * components, preWidth, components); + real postAvg = computeMeanAverage(br + postStart * components, postWidth, components); + */ + + real rangeAvg = computeMeanAverage(br + components * startCol, rangeWidth, components); + + + //std::cout << (int)preAvg << " " << (int)rangeAvg << " " << (int)postAvg << std::endl; + + // If there is a ramp up and ramp down then include this range + if (rangeAvg > MIN_RED_VALUE) + { + goodRanges.push_back(range); + } + } + + // Update the ranges + if ((int)goodRanges.size() != numLaserRanges) + { + for (size_t iRng = 0; iRng < goodRanges.size(); iRng++) + { + ranges[iRng] = goodRanges[iRng]; + } + } + + return (int) goodRanges.size(); +} + +real ImageProcessor::computeMeanAverage(unsigned char * br, int numSteps, int stepSize) +{ + real avg = 0; + real invStep = 255.0f / numSteps; + + Hsv hsv; + + // Red is the first component of an RGB triplet so we can use br directly + for (int iStep = 0; iStep < numSteps; iStep++) + { + float r = br[iStep * stepSize]; + float g = br[iStep * stepSize + 1]; + float b = br[iStep * stepSize + 2]; + + toHsv(r, g, b, &hsv); + + // Red wraps HSV colorspace so check both sides + real red = hsv.h <= 180 ? hsv.h : 360 - hsv.h; + + //std::cout << r << "," << g << "," << b << " " << h << " " << red << std::endl; + + // The smaller the value "red" then the closer to the color red it is + + // normalize 0-1 and scale to 0-255 + avg += ((180 - red) / 180) * invStep; + } + + return avg; +} + real ImageProcessor::detectLaserRangeCenter(const ImageProcessor::LaserRange& range, unsigned char * ar, unsigned char * br) { int startCol = range.startCol; @@ -454,43 +561,58 @@ int ImageProcessor::detectBestLaserRange(ImageProcessor::LaserRange * ranges, in return bestRange; } -void ImageProcessor::toHsv(unsigned char r, unsigned char g, unsigned char b, Hsv * hsv) +void ImageProcessor::toHsv(real r, real g, real b, Hsv * hsv) { - // Compute the Value - unsigned char max = MAX3(r, g, b); - hsv->v = static_cast(max); - if (max == 0) + r /= 255; + g /= 255; + b /= 255; + real h; + + real M = MAX3(r,g,b); + real m = MIN3(r,g,b); + real C = M - m; + + if (C == 0) { - hsv->h = 0; - hsv->s = 0; - return; + h = 0; + } + else if (M == r) + { + h = fmodf ((g - b) / C, 6); + } + else if(M == g) + { + h = (b - r) / C + 2; + } + else + { + h = (r - g) / C + 4; } - // Compute saturation - unsigned char min = MIN3(r, g, b); - hsv->s = (max - min) / (real)max; - - float delta = max - min; + h *= 60; - // Compute Hue - if(r == max) + if (h < 0) { - hsv->h = (g - b) / delta; + h += 360; } - else if(g == max) + + real s; + real v = M; + if(v == 0) { - hsv->h = 2 + (b - r) / delta; + s = 0; } else { - hsv->h = 4 + (r - g) / delta; - hsv->h *= 60; - - if(hsv->h < 0 ) - { - hsv->h += 360; - } + s = C / v; } + + s *= 100; + v *= 100; + hsv->h = h; + hsv->s = s; + hsv->v = v; + } } // ns scanner diff --git a/src/ImageProcessor.h b/src/ImageProcessor.h index a667b23..2f5f137 100644 --- a/src/ImageProcessor.h +++ b/src/ImageProcessor.h @@ -42,7 +42,7 @@ class ImageProcessor * @return Returns the number of locations written to @p laserLocations. */ int process(const Image& before, const Image& after, Image * debuggingImage, PixelLocation * laserLocations, int maxNumLocations, - int& firstRowLaserCol, real & percentPixelsOverThreshold, const char * debuggingCsvFile); + int& firstRowLaserCol, int& numRowsBadFromColor, int& numRowsBadFromNumRanges, const char * debuggingCsvFile); private: @@ -54,12 +54,17 @@ class ImageProcessor int centerCol; }; + /** Removes the ranges that on closer inspection don't appear to be caused by the laser */ + int removeInvalidLaserRanges(ImageProcessor::LaserRange * ranges, int imageWidth, int numRanges, unsigned char * laserOnPixels); + int detectBestLaserRange(ImageProcessor::LaserRange * ranges, int numRanges, int prevLaserCol); real detectLaserRangeCenter(const ImageProcessor::LaserRange& range, unsigned char * ar, unsigned char * br); + real computeMeanAverage(unsigned char * br, int numSteps, int stepSize); + /** Converts the RGB color to HSV */ - static void toHsv(unsigned char r, unsigned char g, unsigned char b, Hsv * hsv); + static void toHsv(real r, real g, real b, Hsv * hsv); static const real RED_HUE_LOWER_THRESHOLD; static const real RED_HUE_UPPER_THRESHOLD; static const unsigned RANGE_DISTANCE_THRESHOLD; diff --git a/src/LaserResultsMerger.cpp b/src/LaserResultsMerger.cpp index ac9a0bc..1cda68f 100644 --- a/src/LaserResultsMerger.cpp +++ b/src/LaserResultsMerger.cpp @@ -35,7 +35,7 @@ LaserResultsMerger::LaserResultsMerger() : // Do nothing } -int LaserResultsMerger::getIndex(const NeutralFileRecord& record) +int LaserResultsMerger::getIndex(const DataPoint& record) { real pct1 = record.pseudoFrame / m_numFramesPerRevolution; real pct2 = record.point.y / m_maxPointY; @@ -46,9 +46,9 @@ int LaserResultsMerger::getIndex(const NeutralFileRecord& record) return dim1 * MASK_DIM_2 + dim2; } -void LaserResultsMerger::merge(std::vector & out, - std::vector & leftLaserResults, - std::vector & rightLaserResults, +void LaserResultsMerger::merge(std::vector & out, + std::vector & leftLaserResults, + std::vector & rightLaserResults, int numFramesPerRevolution, int numFramesBetweenLaserPlanes, int maxPointY, @@ -101,7 +101,7 @@ void LaserResultsMerger::merge(std::vector & out, for (size_t iRight = 0; iRight < rightLaserResults.size(); iRight++) { - NeutralFileRecord& right = rightLaserResults[iRight]; + DataPoint& right = rightLaserResults[iRight]; right.pseudoFrame = right.frame; // Make the Right laser black @@ -116,7 +116,7 @@ void LaserResultsMerger::merge(std::vector & out, progress.setPercent(10); for (size_t iLeft = 0; iLeft < leftLaserResults.size(); iLeft++) { - NeutralFileRecord& left = leftLaserResults[iLeft]; + DataPoint& left = leftLaserResults[iLeft]; // Align the frames of the left and right lasers left.pseudoFrame = left.frame + m_numFramesBetweenLaserPlanes; @@ -145,7 +145,7 @@ void LaserResultsMerger::merge(std::vector & out, out = rightLaserResults; for (size_t iRight = 0; iRight < rightLaserResults.size(); iRight++) { - NeutralFileRecord& right = rightLaserResults[iRight]; + DataPoint& right = rightLaserResults[iRight]; mask[getIndex(right)] = 1; } @@ -157,7 +157,7 @@ void LaserResultsMerger::merge(std::vector & out, // for (size_t iLeft = 0; iLeft < leftLaserResults.size(); iLeft++) { - NeutralFileRecord& left = leftLaserResults[iLeft]; + DataPoint& left = leftLaserResults[iLeft]; if (mask[getIndex(left)] == 0) { diff --git a/src/LaserResultsMerger.h b/src/LaserResultsMerger.h index 4211b68..4323036 100644 --- a/src/LaserResultsMerger.h +++ b/src/LaserResultsMerger.h @@ -37,9 +37,9 @@ class LaserResultsMerger public: LaserResultsMerger(); - void merge(std::vector & out, - std::vector & leftLaserResults, - std::vector & rightLaserResults, + void merge(std::vector & out, + std::vector & leftLaserResults, + std::vector & rightLaserResults, int numFramesPerRevolution, int numFramesBetweenLaserPlanes, int maxPointY, @@ -48,7 +48,7 @@ class LaserResultsMerger private: - int getIndex(const NeutralFileRecord& record); + int getIndex(const DataPoint& record); int m_numFramesBetweenLaserPlanes; real m_numFramesPerRevolution; diff --git a/src/Main.cpp b/src/Main.cpp index 0d10e96..a83d0e5 100644 --- a/src/Main.cpp +++ b/src/Main.cpp @@ -32,7 +32,7 @@ #include #include -static bool SortRecordByRow(const freelss::NeutralFileRecord& a, const freelss::NeutralFileRecord& b) +static bool SortRecordByRow(const freelss::DataPoint& a, const freelss::DataPoint& b) { return a.pixel.y < b.pixel.y; } @@ -182,7 +182,7 @@ time_t ScanResult::getScanDate() const return files.front().creationTime; } -bool NeutralFileRecord::readNextFrame(std::vector& out, const std::vector& results, size_t & resultIndex) +bool DataPoint::readNextFrame(std::vector& out, const std::vector& results, size_t & resultIndex) { out.clear(); @@ -201,7 +201,7 @@ bool NeutralFileRecord::readNextFrame(std::vector& out, const return true; } -void NeutralFileRecord::computeAverage(const std::vector& bin, NeutralFileRecord& out) +void DataPoint::computeAverage(const std::vector& bin, DataPoint& out) { out = bin.front(); @@ -219,7 +219,7 @@ void NeutralFileRecord::computeAverage(const std::vector& bin for (size_t iBin = 0; iBin < bin.size(); iBin++) { - const NeutralFileRecord& br = bin[iBin]; + const DataPoint& br = bin[iBin]; rotation += invSize * br.rotation; pixelLocationX += invSize * br.pixel.x; @@ -243,29 +243,34 @@ void NeutralFileRecord::computeAverage(const std::vector& bin out.point.b = ptB; } -void NeutralFileRecord::lowpassFilter(std::vector& output, std::vector& frame, unsigned maxNumRows, unsigned numRowBins) +void DataPoint::lowpassFilter(std::vector& output, std::vector& frame, unsigned maxNumRows, unsigned numRowBins) { - output.clear(); - // Sanity check if (frame.empty()) { return; } + // No binning can occur, so copy + if (numRowBins >= maxNumRows) + { + output.insert(output.end(), frame.begin(), frame.end()); + return; + } + // Sort by image row std::sort(frame.begin(), frame.end(), SortRecordByRow); unsigned binSize = maxNumRows / numRowBins; // Holds the current contents of the bin - std::vector bin; + std::vector bin; unsigned nextBinY = frame.front().pixel.y + binSize; // unsigned bin = frame.front().pixel.y / numRowBins; for (size_t iFr = 0; iFr < frame.size(); iFr++) { - NeutralFileRecord& record = frame[iFr]; + DataPoint& record = frame[iFr]; if (record.pixel.y < nextBinY) { @@ -276,7 +281,7 @@ void NeutralFileRecord::lowpassFilter(std::vector& output, st // Average the bin results and add it to the output if (!bin.empty()) { - NeutralFileRecord out; + DataPoint out; computeAverage(bin, out); output.push_back(out); @@ -291,7 +296,7 @@ void NeutralFileRecord::lowpassFilter(std::vector& output, st // Process any results still left in the bin if (!bin.empty()) { - NeutralFileRecord out; + DataPoint out; computeAverage(bin, out); output.push_back(out); diff --git a/src/Main.h b/src/Main.h index da776f3..1e52faf 100644 --- a/src/Main.h +++ b/src/Main.h @@ -83,8 +83,8 @@ The origin is the center of the turn table. // Non-configurable settings #define FREELSS_VERSION_MAJOR 1 -#define FREELSS_VERSION_MINOR 4 -#define FREELSS_VERSION_NAME "FreeLSS 1.4" +#define FREELSS_VERSION_MINOR 5 +#define FREELSS_VERSION_NAME "FreeLSS 1.5" #define PI 3.14159265359 @@ -107,7 +107,7 @@ The origin is the center of the turn table. #endif #ifndef MAX3 -#define MAX3(a, b, c) (MAX(MIN(a, b), c)) +#define MAX3(a, b, c) (MAX(MAX(a, b), c)) #endif namespace freelss @@ -117,6 +117,7 @@ typedef std::string Exception; typedef unsigned char byte; typedef unsigned int uint32; typedef unsigned short uint16; +typedef unsigned char uint8; typedef float real32; typedef double real64; typedef float real; @@ -156,6 +157,9 @@ struct PixelLocation /** 3D Real Location */ struct Vector3 { + Vector3() : x(0), y(0), z(0){ } + Vector3(real x, real y, real z) : x(x), y(y), z(z) { } + void normalize() { real len = sqrt(x * x + y * y + z * z); @@ -169,6 +173,13 @@ struct Vector3 return x * a.x + y * a.y + z * a.z; } + void cross (Vector3& out, const Vector3& v) const + { + out.x = y * v.z - z * v.y; + out.y = z * v.x - x * v.z; + out.z = x * v.y - y * v.x; + } + real x; real y; real z; @@ -176,9 +187,9 @@ struct Vector3 struct ColoredPoint { - real x; - real y; - real z; + real32 x; + real32 y; + real32 z; Vector3 normal; @@ -204,35 +215,42 @@ struct Plane Vector3 point; }; +struct FaceMap +{ + /** The triangles */ + std::vector triangles; +}; + struct Ray { Vector3 origin; Vector3 direction; }; -struct NeutralFileRecord +struct DataPoint { /** Populates frameC with the next frame from the results vector starting at index resultIndex */ - static bool readNextFrame(std::vector& out, const std::vector& results, size_t & resultIndex); + static bool readNextFrame(std::vector& out, const std::vector& results, size_t & resultIndex); /** * Reduce the number of result rows and filter out some of the noise * @param maxNumRows - The number of rows in the image the produced the frame. * @param numRowBins - The total number of row bins in the entire image, not necessarily what is returned by this function. */ - static void lowpassFilter(std::vector& output, std::vector& frame, unsigned maxNumRows, unsigned numRowBins); + static void lowpassFilter(std::vector& output, std::vector& frame, unsigned maxNumRows, unsigned numRowBins); /** * Computes the average of all the records in the bin. */ - static void computeAverage(const std::vector& bin, NeutralFileRecord& out); + static void computeAverage(const std::vector& bin, DataPoint& out); PixelLocation pixel; ColoredPoint point; real rotation; - int frame; - int laserSide; - int pseudoFrame; + uint16 frame; + uint8 laserSide; + uint16 pseudoFrame; + uint32 index; }; struct ScanResultFile diff --git a/src/Makefile b/src/Makefile index 53c61e2..c34ff28 100644 --- a/src/Makefile +++ b/src/Makefile @@ -11,11 +11,12 @@ OBJECTS=WebContent.o PropertyReaderWriter.o Main.o \ HttpServer.o CriticalSection.o Scanner.o Image.o ImageProcessor.o \ Thread.o A4988TurnTable.o RelayLaser.o LocationMapper.o \ PlyWriter.o Calibrator.o RaspistillCamera.o \ - NeutralFileWriter.o NeutralFileReader.o RaspicamCamera.o \ + RaspicamCamera.o \ Camera.o MmalStillCamera.o \ MmalVideoCamera.o PixelLocationWriter.o StlWriter.o TurnTable.o \ Laser.o Preset.o PresetManager.o Setup.o LaserResultsMerger.o\ - XyzWriter.o UpdateManager.o Progress.o FileWriter.o MemWriter.o + XyzWriter.o UpdateManager.o Progress.o FileWriter.o MemWriter.o \ + Facetizer.o all: freelss @@ -82,12 +83,6 @@ WebContent.o: WebContent.cpp WebContent.h Main.h Calibrator.o: Calibrator.cpp Calibrator.h Main.h $(CC) -c $(CFLAGS) Calibrator.cpp -NeutralFileWriter.o: NeutralFileWriter.cpp NeutralFileWriter.h Main.h - $(CC) -c $(CFLAGS) NeutralFileWriter.cpp - -NeutralFileReader.o: NeutralFileReader.cpp NeutralFileReader.h Main.h - $(CC) -c $(CFLAGS) NeutralFileReader.cpp - Camera.o: Camera.cpp Camera.h Main.h $(CC) -c $(CFLAGS) Camera.cpp @@ -127,6 +122,9 @@ FileWriter.o: FileWriter.cpp FileWriter.h Main.h MemWriter.o: MemWriter.cpp MemWriter.h Main.h $(CC) -c $(CFLAGS) MemWriter.cpp +Facetizer.o: Facetizer.cpp Facetizer.h Main.h + $(CC) -c $(CFLAGS) Facetizer.cpp + github: mkdir -p ../../github mkdir -p ../../github/src diff --git a/src/MmalStillCamera.cpp b/src/MmalStillCamera.cpp index 1c0611d..f3f22ad 100644 --- a/src/MmalStillCamera.cpp +++ b/src/MmalStillCamera.cpp @@ -37,8 +37,6 @@ #define FULL_FOV_PREVIEW_4x3_X 1296 #define FULL_FOV_PREVIEW_4x3_Y 972 -#define SCREEN_WIDTH 1920 -#define SCREEN_HEIGHT 1080 namespace freelss diff --git a/src/MmalVideoCamera.cpp b/src/MmalVideoCamera.cpp index 1d9f332..78fab32 100644 --- a/src/MmalVideoCamera.cpp +++ b/src/MmalVideoCamera.cpp @@ -22,33 +22,27 @@ #include "Main.h" #include "MmalVideoCamera.h" +#include "Thread.h" #define MMAL_CAMERA_PREVIEW_PORT 0 #define MMAL_CAMERA_VIDEO_PORT 1 #define MMAL_CAMERA_CAPTURE_PORT 2 #define VIDEO_OUTPUT_BUFFERS_NUM 3 -#define FULL_RES_VIDEO_FRAME_RATE_NUM 30 #define FULL_RES_VIDEO_FRAME_RATE_DEN 1 -#define FULL_FOV_PREVIEW_4x3_X 1296 -#define FULL_FOV_PREVIEW_4x3_Y 972 - -#define MMAL_SPLITTER_VIDEO_PORT 0 -#define MMAL_SPLITTER_CAPTURE_PORT 1 - -//#define CAMERA_IMAGE_WIDTH 2592 -//#define CAMERA_IMAGE_HEIGHT 1944 - -#define CAMERA_IMAGE_WIDTH 1280 -#define CAMERA_IMAGE_HEIGHT 960 - namespace freelss { struct Mmal_CallbackData { - Mmal_CallbackData() + Mmal_CallbackData() : + acquire(false), + buffer(NULL), + bufferSize(0), + bytesWritten(0), + pool(NULL), + outputQueue(NULL) { vcos_assert(vcos_semaphore_create(&complete_semaphore, "Scanner-Video-sem", 0) == VCOS_SUCCESS); } @@ -58,6 +52,7 @@ struct Mmal_CallbackData vcos_semaphore_delete(&complete_semaphore); } + bool acquire; byte * buffer; size_t bufferSize; size_t bytesWritten; @@ -67,128 +62,54 @@ struct Mmal_CallbackData MMAL_QUEUE_T * outputQueue; }; -static MMAL_STATUS_T connect_ports(MMAL_PORT_T *output_port, MMAL_PORT_T *input_port, MMAL_CONNECTION_T **connection) -{ - MMAL_STATUS_T status; - - status = mmal_connection_create(connection, output_port, input_port, MMAL_CONNECTION_FLAG_TUNNELLING | MMAL_CONNECTION_FLAG_ALLOCATION_ON_INPUT); - - if (status == MMAL_SUCCESS) - { - status = mmal_connection_enable(*connection); - if (status != MMAL_SUCCESS) - { - mmal_connection_destroy(*connection); - } - } - - return status; -} - -static void CameraControlCallback(MMAL_PORT_T *port, MMAL_BUFFER_HEADER_T *buffer) -{ - if (buffer->cmd != MMAL_EVENT_PARAMETER_CHANGED) - { - std::cerr << "Received unexpected camera control callback event" << std::endl; - } - - mmal_buffer_header_release(buffer); -} -#if 1 static void EncoderBufferCallback(MMAL_PORT_T *port, MMAL_BUFFER_HEADER_T *buffer) { - std::cout << "In EncoderBufferCallback" << std::endl; - - Mmal_CallbackData *pData = (Mmal_CallbackData *)port->userdata; - - //to handle the user not reading frames, remove and return any pre-existing ones - if(mmal_queue_length(pData->outputQueue) >= 2) - { - if(MMAL_BUFFER_HEADER_T* existing_buffer = mmal_queue_get(pData->outputQueue)) - { - mmal_buffer_header_release(existing_buffer); - if (port->is_enabled) - { - MMAL_STATUS_T status = MMAL_SUCCESS; - MMAL_BUFFER_HEADER_T *new_buffer; - new_buffer = mmal_queue_get(pData->pool->queue); - if (new_buffer) - { - status = mmal_port_send_buffer(port, new_buffer); - } - - if (!new_buffer || status != MMAL_SUCCESS) - { - std::cerr << "Unable to return a buffer to the video port" << std::endl; - } - } - } - } - - //add the buffer to the output queue - mmal_queue_put(pData->outputQueue, buffer); -} -#else -static void EncoderBufferCallback(MMAL_PORT_T *port, MMAL_BUFFER_HEADER_T *buffer) -{ - int complete = 0; - // We pass our file handle and other stuff in via the userdata field. Mmal_CallbackData *pData = (Mmal_CallbackData *)port->userdata; bool imageTaken = false; - std::cout << "EncoderBufferCallback" << std::endl; + //std::cout << "EncoderBufferCallback" << std::endl; if (pData) { - int bytes_written = buffer->length; - if (buffer->length) { // Copy the image data pData->cs.enter(); - std::cout << "EncoderBufferCallback - Locking buffer" << std::endl; - mmal_buffer_header_mem_lock(buffer); - if (pData->buffer != NULL) + if (pData->acquire) { - int writeSize = buffer->length; - if (pData->bytesWritten + writeSize > pData->bufferSize) - { - writeSize = pData->bufferSize - pData->bytesWritten; - } + //std::cout << "EncoderBufferCallback - Locking buffer" << std::endl; + mmal_buffer_header_mem_lock(buffer); - // Copy to our image buffer and move the pointer forward - if (writeSize > 0) + if (pData->buffer != NULL && pData->bytesWritten == 0) { - // memcpy(pData->buffer, buffer->data, writeSize); + int writeSize = buffer->length; - // The data is RGBA so we must copy just the RGB bytes - int step = 1; - byte * dst = pData->buffer; - for (int i = 0; i < buffer->length; i++) + // Copy to our image buffer and move the pointer forward + if (writeSize > 0) { - * dst = buffer->data[i]; - dst++; - - if (step == 3) - { - i++; - step = 1; - } + memcpy(pData->buffer, buffer->data, MIN(writeSize, pData->bufferSize)); + + pData->bytesWritten += writeSize; + imageTaken = true; + + //std::cerr << "SRC Buffer Length: " << buffer->length << std::endl; + //std::cerr << "SRC Buffer Offset: " << buffer->offset << std::endl; + //std::cerr << "DST Buffer Size: " << pData->bufferSize << std::endl; + //std::cerr << "TOT Bytes Written: " << pData->bytesWritten << std::endl; + //std::cerr << "Write Size: " << writeSize << std::endl; } } - // Unset our buffer now that we have copied to it - pData->buffer = NULL; - imageTaken = true; - } + //std::cout << "EncoderBufferCallback - Unlocking buffer" << std::endl; + mmal_buffer_header_mem_unlock(buffer); - std::cout << "EncoderBufferCallback - Unlocking buffer" << std::endl; - mmal_buffer_header_mem_unlock(buffer); + pData->acquire = false; + } pData->cs.leave(); } } @@ -200,7 +121,7 @@ static void EncoderBufferCallback(MMAL_PORT_T *port, MMAL_BUFFER_HEADER_T *buffe // Notify the user that the image is ready if (imageTaken) { - std::cout << "EncoderBufferCallback - Posting semaphore" << std::endl; + //std::cout << "EncoderBufferCallback - Posting semaphore" << std::endl << std::endl; vcos_semaphore_post(&(pData->complete_semaphore)); } @@ -208,41 +129,37 @@ static void EncoderBufferCallback(MMAL_PORT_T *port, MMAL_BUFFER_HEADER_T *buffe mmal_buffer_header_release(buffer); // and send one back to the port (if still open) - if (port->is_enabled) + if (port->is_enabled && pData->pool && pData->pool->queue) { - std::cout << "EncoderBufferCallback - Requeing buffer" << std::endl; - MMAL_STATUS_T status = MMAL_SUCCESS; - MMAL_BUFFER_HEADER_T *new_buffer; - - new_buffer = mmal_queue_get(pData->pool->queue); + //std::cout << "EncoderBufferCallback - Requeing buffer" << std::endl; + MMAL_BUFFER_HEADER_T *new_buffer = NULL; - if (new_buffer) + if (pData->pool && pData->pool->queue) { - status = mmal_port_send_buffer(port, new_buffer); + new_buffer = mmal_queue_get(pData->pool->queue); } - if (!new_buffer || status != MMAL_SUCCESS) + if (new_buffer) { - std::cerr << "Unable to return a buffer to the encoder port" << std::endl; + mmal_port_send_buffer(port, new_buffer); } + + //std::cout << "EncoderBufferCallback - Buffer Returned" << std::endl; } } -#endif -MmalVideoCamera::MmalVideoCamera() : +MmalVideoCamera::MmalVideoCamera(int imageWidth, int imageHeight, int frameRate) : + m_imageWidth(imageWidth), + m_imageHeight(imageHeight), + m_frameRate(frameRate), + m_imagePreviewWidth(VCOS_ALIGN_UP(imageWidth, 32)), + m_imagePreviewHeight(VCOS_ALIGN_UP(imageHeight, 16)), m_callbackData(NULL), m_camera(NULL), - m_preview(NULL), - m_resizer(NULL), - m_splitter(NULL), m_pool(NULL), - m_previewPort(NULL), m_videoPort(NULL), m_stillPort(NULL), - m_resizerPort(NULL), m_targetPort(NULL), - m_splitterPort(NULL), - m_outputQueue(NULL), m_targetPortEnabled(false) { m_callbackData = new Mmal_CallbackData(); @@ -250,50 +167,22 @@ MmalVideoCamera::MmalVideoCamera() : createCameraComponent(); std::cout << "Created camera" << std::endl; - createPreview(); - std::cout << "Created preview" << std::endl; + //std::cout << "Target Image Width: " << VCOS_ALIGN_UP(m_imageWidth, 32) << std::endl; + //std::cout << "Target Image Height: " << VCOS_ALIGN_UP(m_imageHeight, 16) << std::endl; - createSplitter(); - std::cout << "Created splitter" << std::endl; + std::cout << "Target Image Width: " << m_imageWidth << std::endl; + std::cout << "Target Image Height: " << m_imageHeight << std::endl; - createResizer(); - std::cout << "Created resizer" << std::endl; - - std::cout << "Target Image Width: " << VCOS_ALIGN_UP(CAMERA_IMAGE_WIDTH, 32) << std::endl; - std::cout << "Target Image Height: " << VCOS_ALIGN_UP(CAMERA_IMAGE_HEIGHT, 16) << std::endl; - - - MMAL_STATUS_T status; - - // We will read from the resizer - m_targetPort = m_resizerPort; + m_targetPort = m_videoPort; createBufferPool(); - std::cout << "Created buffer pool" << std::endl; - - // Hook-up the preview port because the camera requires it - MMAL_CONNECTION_T *preview_connection = NULL; - status = connect_ports(m_previewPort, m_preview->input[0], &preview_connection); - if (status != MMAL_SUCCESS) - { - throw Exception("Error connecting preview port"); - } - - // Connect the video to the splitter - MMAL_CONNECTION_T *splitter_connection = NULL; - status = connect_ports(m_videoPort, m_splitter->input[0], &splitter_connection); - if (status != MMAL_SUCCESS) - { - throw Exception("Error connecting preview port"); - } - // Connect the splitter to our resizer - MMAL_CONNECTION_T *resizer_connection = NULL; - status = connect_ports(m_splitterPort, m_resizer->input[0], &resizer_connection); - if (status != MMAL_SUCCESS) + double startTime = GetTimeInSeconds(); + do { - throw Exception("Failed to connect camera video out port to resizer input port"); - } + sendBuffers(); + Thread::usleep(10000); + } while ((GetTimeInSeconds() - startTime) < 1); std::cout << "Initialized camera" << std::endl; } @@ -309,19 +198,9 @@ MmalVideoCamera::~MmalVideoCamera() } } - if (m_outputQueue != NULL) - { - mmal_queue_destroy(m_outputQueue); - } - if (m_camera != NULL) { - mmal_component_destroy(m_camera); - } - - if (m_preview != NULL) - { - mmal_component_destroy(m_preview); + mmal_component_disable(m_camera); } if (m_pool != NULL) @@ -329,74 +208,14 @@ MmalVideoCamera::~MmalVideoCamera() mmal_port_pool_destroy(m_targetPort, m_pool); } - if (m_splitter != NULL) - { - mmal_component_destroy(m_splitter); - } - - if (m_resizer != NULL) + if (m_camera != NULL) { - mmal_component_destroy(m_resizer); + mmal_component_destroy(m_camera); } delete m_callbackData; } -void MmalVideoCamera::createSplitter() -{ - if (m_videoPort == NULL) - { - throw Exception("Video port is not configured"); - } - - if (m_splitter != NULL) - { - throw Exception("The splitter is already configured"); - } - - MMAL_PORT_T *input_port = NULL, *output_port = NULL; - MMAL_STATUS_T status; - - //create the camera component - status = mmal_component_create(MMAL_COMPONENT_DEFAULT_VIDEO_SPLITTER, &m_splitter); - if (status != MMAL_SUCCESS) - { - throw Exception("Failed to create splitter component"); - } - - //check we have output ports - if (m_splitter->output_num != 4 || m_splitter->input_num != 1) - { - throw Exception("Splitter doesn't have correct ports"); - } - - //get the ports - input_port = m_splitter->input[0]; - mmal_format_copy(input_port->format, m_videoPort->format); - - input_port->buffer_num = 3; - - status = mmal_port_format_commit(input_port); - if (status != MMAL_SUCCESS) - { - throw Exception("Couldn't set resizer input port format"); - } - - for(unsigned i = 0; i < m_splitter->output_num; i++) - { - output_port = m_splitter->output[i]; - output_port->buffer_num = 3; - - mmal_format_copy(output_port->format, input_port->format); - status = mmal_port_format_commit(output_port); - if (status != MMAL_SUCCESS) - { - throw Exception("Couldn't set resizer output port format"); - } - } - - m_splitterPort = m_splitter->output[MMAL_SPLITTER_CAPTURE_PORT]; -} void MmalVideoCamera::createBufferPool() { @@ -428,22 +247,7 @@ void MmalVideoCamera::createBufferPool() } // Send all the buffers to the encoder output port - int num = mmal_queue_length(m_pool->queue); - - for (int q = 0; q < num; q++) - { - MMAL_BUFFER_HEADER_T *buffer = mmal_queue_get(m_pool->queue); - - if (buffer == NULL) - { - std::cerr << "Unable to get buffer " << q << " from the pool" << std::endl; - } - - if (mmal_port_send_buffer(m_targetPort, buffer)!= MMAL_SUCCESS) - { - std::cerr << "Unable to send a buffer " << q << " to encoder output port " << std::endl; - } - } + sendBuffers(); // Start the capture if (mmal_port_parameter_set_boolean(m_videoPort, MMAL_PARAMETER_CAPTURE, 1) != MMAL_SUCCESS) @@ -452,139 +256,6 @@ void MmalVideoCamera::createBufferPool() } } -void MmalVideoCamera::createResizer() -{ - MMAL_COMPONENT_T *resizer = NULL; - MMAL_PORT_T *resizer_input = NULL, *resizer_output = NULL; - MMAL_STATUS_T status; - MMAL_QUEUE_T* output_queue = NULL; - - if (m_videoPort == NULL) - { - throw Exception("Video port is NULL"); - } - - try - { - status = mmal_component_create("vc.ril.resize", &resizer); - if (status != MMAL_SUCCESS) - { - throw Exception("Unable to create image resizer component"); - } - - if (resizer->input_num != 1 || resizer->output_num != 1) - { - throw Exception("Resizer doesn't have input/output ports"); - } - - resizer_output = resizer->output[0]; - resizer_input = resizer->input[0]; - - // Specify the input format - mmal_format_copy(resizer_input->format, m_videoPort->format); - resizer_input->buffer_num = 3; - status = mmal_port_format_commit(resizer_input); - if (status != MMAL_SUCCESS) - { - throw Exception("Unable to set format on image resizer input port"); - } - - // Specify out output format - mmal_format_copy(resizer_output->format, resizer_input->format); - resizer_output->format->encoding = MMAL_ENCODING_RGBA; //MMAL_ENCODING_BGR24; // MMAL_ENCODING_RGBA - resizer_output->format->encoding_variant = MMAL_ENCODING_RGBA; //MMAL_ENCODING_BGR24; // MMAL_ENCODING_RGBA - resizer_output->format->es->video.width = VCOS_ALIGN_UP(CAMERA_IMAGE_WIDTH, 32); - resizer_output->format->es->video.height = VCOS_ALIGN_UP(CAMERA_IMAGE_HEIGHT, 16); - resizer_output->format->es->video.crop.x = 0; - resizer_output->format->es->video.crop.y = 0; - resizer_output->format->es->video.crop.width = VCOS_ALIGN_UP(CAMERA_IMAGE_WIDTH, 32); - resizer_output->format->es->video.crop.height = VCOS_ALIGN_UP(CAMERA_IMAGE_HEIGHT, 16); - resizer_output->format->es->video.frame_rate.num = FULL_RES_VIDEO_FRAME_RATE_NUM; - resizer_output->format->es->video.frame_rate.den = FULL_RES_VIDEO_FRAME_RATE_DEN; - - // Commit the port changes to the output port - status = mmal_port_format_commit(resizer_output); - if (status != MMAL_SUCCESS) - { - throw Exception("Unable to set format on image resizer output port"); - } - - // Enable the resizer component - status = mmal_component_enable(resizer); - if (status != MMAL_SUCCESS) - { - throw Exception("Error enabling resizer"); - } - - /* UML - //create the output queue - output_queue = mmal_queue_create(); - if(!output_queue) - { - throw Exception("Error creating output queue"); - } - */ - } - catch (Exception& ex) - { - std::cerr << ex << std::endl; - if (resizer != NULL) - { - mmal_component_destroy(resizer); - resizer = NULL; - } - - throw; - } - catch (...) - { - std::cerr << "Unknown error occurred" << std::endl; - if (resizer != NULL) - { - mmal_component_destroy(resizer); - resizer = NULL; - } - - throw; - } - - m_resizer = resizer; - m_resizerPort = resizer_output; - m_outputQueue = output_queue; - m_callbackData->outputQueue = m_outputQueue; -} - -void MmalVideoCamera::createPreview() -{ - MMAL_COMPONENT_T * preview = NULL; - MMAL_STATUS_T status; - - try - { - status = mmal_component_create("vc.null_sink", &preview); - if (status != MMAL_SUCCESS) - { - throw Exception("Error creating preview sink"); - } - - status = mmal_component_enable(preview); - if (status != MMAL_SUCCESS) - { - throw Exception("Error enabling preview"); - } - } - catch (...) - { - if (preview != NULL) - { - mmal_component_destroy(preview); - } - - throw; - } - - m_preview = preview; -} void MmalVideoCamera::createCameraComponent() { @@ -611,23 +282,18 @@ void MmalVideoCamera::createCameraComponent() video_port = camera->output[MMAL_CAMERA_VIDEO_PORT]; still_port = camera->output[MMAL_CAMERA_CAPTURE_PORT]; - // Enable the camera, and tell it its control callback function - status = mmal_port_enable(camera->control, CameraControlCallback); - if (status != MMAL_SUCCESS) - { - throw Exception("Unable to enable control port"); - } - // Populate the camera configuration struct MMAL_PARAMETER_CAMERA_CONFIG_T cameraConfig; cameraConfig.hdr.id = MMAL_PARAMETER_CAMERA_CONFIG; cameraConfig.hdr.size = sizeof(cameraConfig); - cameraConfig.max_stills_w = CAMERA_IMAGE_WIDTH; - cameraConfig.max_stills_h = CAMERA_IMAGE_HEIGHT; + cameraConfig.max_stills_w = m_imageWidth; + cameraConfig.max_stills_h = m_imageHeight; cameraConfig.stills_yuv422 = 0; - cameraConfig.one_shot_stills = 1; - cameraConfig.max_preview_video_w = VCOS_ALIGN_UP(FULL_FOV_PREVIEW_4x3_X, 32); - cameraConfig.max_preview_video_h = VCOS_ALIGN_UP(FULL_FOV_PREVIEW_4x3_Y, 16); + cameraConfig.one_shot_stills = 0; + //cameraConfig.max_preview_video_w = VCOS_ALIGN_UP(m_imagePreviewWidth, 32); + //cameraConfig.max_preview_video_h = VCOS_ALIGN_UP(m_imagePreviewHeight, 16); + cameraConfig.max_preview_video_w = m_imagePreviewWidth; + cameraConfig.max_preview_video_h = m_imagePreviewHeight; cameraConfig.num_preview_video_frames = 3; cameraConfig.stills_capture_circular_buffer_height = 0; cameraConfig.fast_preview_resume = 0; @@ -639,42 +305,22 @@ void MmalVideoCamera::createCameraComponent() throw Exception("Error calling mmal_port_parameter_set()"); } - // - // Setup the preview port - // - format = preview_port->format; - format->encoding = MMAL_ENCODING_OPAQUE; - format->encoding_variant = MMAL_ENCODING_I420; - - format->es->video.width = VCOS_ALIGN_UP(FULL_FOV_PREVIEW_4x3_X, 32); - format->es->video.height = VCOS_ALIGN_UP(FULL_FOV_PREVIEW_4x3_Y, 16); - format->es->video.crop.x = 0; - format->es->video.crop.y = 0; - format->es->video.crop.width = FULL_FOV_PREVIEW_4x3_X; - format->es->video.crop.height = FULL_FOV_PREVIEW_4x3_Y; - format->es->video.frame_rate.num = FULL_RES_VIDEO_FRAME_RATE_NUM; - format->es->video.frame_rate.den = FULL_RES_VIDEO_FRAME_RATE_DEN; - - status = mmal_port_format_commit(preview_port); - if (status != MMAL_SUCCESS) - { - throw Exception("Failure to setup camera preview port"); - } - // // Setup the video port // format = video_port->format; - format->encoding = MMAL_ENCODING_I420; - format->encoding_variant = MMAL_ENCODING_I420; + format->encoding = MMAL_ENCODING_BGR24; + format->encoding_variant = MMAL_ENCODING_BGR24; - format->es->video.width = VCOS_ALIGN_UP(CAMERA_IMAGE_WIDTH, 32); - format->es->video.height = VCOS_ALIGN_UP(CAMERA_IMAGE_HEIGHT, 16); + format->es->video.width = VCOS_ALIGN_UP(m_imageWidth, 32); + format->es->video.height = VCOS_ALIGN_UP(m_imageHeight, 16); + //format->es->video.width = m_imageWidth; + //format->es->video.height = m_imageHeight; format->es->video.crop.x = 0; format->es->video.crop.y = 0; - format->es->video.crop.width = CAMERA_IMAGE_WIDTH; - format->es->video.crop.height = CAMERA_IMAGE_HEIGHT; - format->es->video.frame_rate.num = FULL_RES_VIDEO_FRAME_RATE_NUM; + format->es->video.crop.width = m_imageWidth; + format->es->video.crop.height = m_imageHeight; + format->es->video.frame_rate.num = m_frameRate; format->es->video.frame_rate.den = FULL_RES_VIDEO_FRAME_RATE_DEN; status = mmal_port_format_commit(video_port); @@ -689,35 +335,12 @@ void MmalVideoCamera::createCameraComponent() video_port->buffer_num = VIDEO_OUTPUT_BUFFERS_NUM; } - // Use the video format for images as well - format = still_port->format; - - // Set our stills format on the stills (for encoder) port - - - format->encoding = MMAL_ENCODING_I420; - format->encoding_variant = MMAL_ENCODING_I420; - - format->es->video.width = VCOS_ALIGN_UP(CAMERA_IMAGE_WIDTH, 32); - format->es->video.height = VCOS_ALIGN_UP(CAMERA_IMAGE_HEIGHT, 16); - format->es->video.crop.x = 0; - format->es->video.crop.y = 0; - format->es->video.crop.width = CAMERA_IMAGE_WIDTH; - format->es->video.crop.height = CAMERA_IMAGE_HEIGHT; - format->es->video.frame_rate.num = FULL_RES_VIDEO_FRAME_RATE_NUM; - format->es->video.frame_rate.den = FULL_RES_VIDEO_FRAME_RATE_DEN; - - status = mmal_port_format_commit(still_port); - if (status != MMAL_SUCCESS) - { - throw Exception("Failure to setup camera image port"); - } - - // Verify number of buffers - if (still_port->buffer_num < VIDEO_OUTPUT_BUFFERS_NUM) - { - still_port->buffer_num = VIDEO_OUTPUT_BUFFERS_NUM; - } + // Flip the image + MMAL_PARAMETER_MIRROR_T mirror = {{MMAL_PARAMETER_MIRROR, sizeof(MMAL_PARAMETER_MIRROR_T)}, MMAL_PARAM_MIRROR_NONE}; + mirror.value = MMAL_PARAM_MIRROR_BOTH; + mmal_port_parameter_set(preview_port, &mirror.hdr); + mmal_port_parameter_set(video_port, &mirror.hdr); + mmal_port_parameter_set(still_port, &mirror.hdr); // Enable component status = mmal_component_enable(camera); @@ -725,6 +348,8 @@ void MmalVideoCamera::createCameraComponent() { throw Exception("camera component couldn't be enabled"); } + + std::cout << "Camera Enabled..." << std::endl; } catch (...) { @@ -737,41 +362,34 @@ void MmalVideoCamera::createCameraComponent() } m_camera = camera; - m_previewPort = preview_port; + //m_previewPort = preview_port; m_videoPort = video_port; m_stillPort = still_port; } - -void MmalVideoCamera::acquireImage(Image * image) +void MmalVideoCamera::sendBuffers() { - // Enable the encoder output port - std::cout << "Acquiring image..." << std::endl; - // Send all the buffers to the encoder output port - int num = mmal_queue_length(m_pool->queue); - - for (int q = 0; q < num; q++) - { - MMAL_BUFFER_HEADER_T *buffer = mmal_queue_get(m_pool->queue); + int num = mmal_queue_length(m_pool->queue); - if (buffer == NULL) - { - std::cerr << "Unable to get buffer " << q << " from the pool" << std::endl; - } + for (int q = 0; q < num; q++) + { + MMAL_BUFFER_HEADER_T *new_buffer = mmal_queue_get(m_pool->queue); - if (mmal_port_send_buffer(m_targetPort, buffer)!= MMAL_SUCCESS) - { - std::cerr << "Unable to send a buffer " << q << " to encoder output port " << std::endl; - } + if (new_buffer == NULL) + { + std::cerr << "Unable to get buffer " << q << " from the pool" << std::endl; } - // Start the capture - if (mmal_port_parameter_set_boolean(m_videoPort, MMAL_PARAMETER_CAPTURE, 1) == MMAL_SUCCESS) + if (mmal_port_send_buffer(m_videoPort, new_buffer)!= MMAL_SUCCESS) { - + std::cerr << "Unable to send a buffer " << q << " to encoder output port " << std::endl; } + } +} - /* +void MmalVideoCamera::acquireImage(Image * image) +{ + // Enable the encoder output port m_targetPort->userdata = (struct MMAL_PORT_USERDATA_T *) m_callbackData; m_callbackData->cs.enter(); @@ -779,60 +397,26 @@ void MmalVideoCamera::acquireImage(Image * image) m_callbackData->pool = m_pool; m_callbackData->bufferSize = image->getPixelBufferSize(); m_callbackData->bytesWritten = 0; + m_callbackData->acquire = true; m_callbackData->cs.leave(); - */ - /* UML - unsigned char * dst = image->getPixels(); + sendBuffers(); - if(MMAL_BUFFER_HEADER_T *buffer = mmal_queue_get(m_outputQueue)) + bool waiting = true; + while (waiting) { - //lock it - mmal_buffer_header_mem_lock(buffer); - - // memcpy(pData->buffer, buffer->data, writeSize); - - // The data is RGBA so we must copy just the RGB bytes - int step = 1; - for (unsigned i = 0; i < buffer->length; i++) + m_callbackData->cs.enter(); + if (!m_callbackData->acquire) { - * dst = buffer->data[i]; - dst++; - - if (step == 3) - { - i++; - step = 1; - } + waiting = false; } - - mmal_buffer_header_mem_unlock(buffer); - mmal_buffer_header_release(buffer); - - // and send it back to the port (if still open) - if (m_targetPort->is_enabled) + else { - MMAL_STATUS_T status = MMAL_SUCCESS; - MMAL_BUFFER_HEADER_T *new_buffer; - new_buffer = mmal_queue_get(m_pool->queue); - if (new_buffer) - { - status = mmal_port_send_buffer(m_targetPort, new_buffer); - } - - if (!new_buffer || status != MMAL_SUCCESS) - { - std::cerr << "Unable to return a buffer to the video port\n"; - } + //Thread::usleep(10000); + Thread::usleep(10000); } + m_callbackData->cs.leave(); } - else - { - std::cerr << "!! No buffer available" << std::endl; - } - */ - - std::cout << "Acquisition done..." << std::endl; } bool MmalVideoCamera::acquireJpeg(byte* buffer, unsigned * size) @@ -848,8 +432,6 @@ bool MmalVideoCamera::acquireJpeg(byte* buffer, unsigned * size) // Acquire an image acquireImage(&image); - //memcpy(buffer, image.getPixels(), image.getPixelBufferSize()); - // Convert the image to a JPEG Image::convertToJpeg(image, buffer, size); @@ -858,12 +440,12 @@ bool MmalVideoCamera::acquireJpeg(byte* buffer, unsigned * size) int MmalVideoCamera::getImageHeight() const { - return CAMERA_IMAGE_HEIGHT; + return m_imageHeight; } int MmalVideoCamera::getImageWidth() const { - return CAMERA_IMAGE_WIDTH; + return m_imageWidth; } int MmalVideoCamera::getImageComponents() const diff --git a/src/MmalVideoCamera.h b/src/MmalVideoCamera.h index 6bbc401..26d3677 100644 --- a/src/MmalVideoCamera.h +++ b/src/MmalVideoCamera.h @@ -38,7 +38,7 @@ struct Mmal_CallbackData; class MmalVideoCamera : public Camera { public: - MmalVideoCamera(); + MmalVideoCamera(int imageWidth, int imageHeight, int frameRate); ~MmalVideoCamera(); void acquireImage(Image * image); @@ -63,27 +63,23 @@ class MmalVideoCamera : public Camera real getFocalLength() const; private: - void createPreview(); - void createResizer(); void createCameraComponent(); void createBufferPool(); - void createSplitter(); + void sendBuffers(); private: + int m_imageWidth; + int m_imageHeight; + int m_frameRate; + int m_imagePreviewWidth; + int m_imagePreviewHeight; Mmal_CallbackData * m_callbackData; - CriticalSection m_cs; MMAL_COMPONENT_T * m_camera; - MMAL_COMPONENT_T * m_preview; - MMAL_COMPONENT_T * m_resizer; - MMAL_COMPONENT_T * m_splitter; MMAL_POOL_T * m_pool; - MMAL_PORT_T * m_previewPort; MMAL_PORT_T * m_videoPort; MMAL_PORT_T * m_stillPort; - MMAL_PORT_T * m_resizerPort; MMAL_PORT_T * m_targetPort; - MMAL_PORT_T * m_splitterPort; MMAL_QUEUE_T * m_outputQueue; bool m_targetPortEnabled; diff --git a/src/NeutralFileReader.cpp b/src/NeutralFileReader.cpp deleted file mode 100644 index 2ddd049..0000000 --- a/src/NeutralFileReader.cpp +++ /dev/null @@ -1,160 +0,0 @@ -/* - **************************************************************************** - * Copyright (c) 2014 Uriah Liggett * - * This file is part of FreeLSS. * - * * - * FreeLSS is free software: you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation, either version 3 of the License, or * - * (at your option) any later version. * - * * - * FreeLSS is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with FreeLSS. If not, see . * - **************************************************************************** -*/ - -#include "Main.h" -#include "NeutralFileReader.h" - - -namespace freelss -{ - -const char * NeutralFileReader::SELECT_SQL = "SELECT RED, GREEN, BLUE, X, Y, Z, COLUMN, ROW, ROTATION, STEP FROM RESULTS ORDER BY STEP ASC"; - -NeutralFileReader::NeutralFileReader() : - m_db(NULL), - m_stmt(NULL), - m_recordReady(false), - m_moreResults(false) -{ - // Do nothing -} - - -NeutralFileReader::~NeutralFileReader() -{ - close(); -} - -void NeutralFileReader::open(const std::string& filename) -{ - if (m_db != NULL) - { - return; - } - - if (sqlite3_open(filename.c_str(), &m_db) != 0) - { - throw Exception(std::string("Could not open sqlite database: ") + filename); - } -} - -void NeutralFileReader::close() -{ - if (m_stmt != NULL) - { - sqlite3_finalize(m_stmt); - m_stmt = NULL; - } - - if (m_db != NULL) - { - sqlite3_close(m_db); - m_db = NULL; - } -} - -void NeutralFileReader::start() -{ - if (m_stmt != NULL) - { - sqlite3_finalize(m_stmt); - m_stmt = NULL; - } - - // Create the prepared statement - char * errMsg = 0; - int rc = sqlite3_prepare_v2(m_db, NeutralFileReader::SELECT_SQL, -1, &m_stmt, NULL); - if (rc != SQLITE_OK) - { - std::string error = errMsg; - sqlite3_free(errMsg); - throw Exception("Error calling sqlite3_prepare_v2: " + error); - } - - m_recordReady = false; - m_moreResults = true; -} - -bool NeutralFileReader::readNextStep(std::vector& records) -{ - if (m_stmt == NULL) - { - throw Exception("Prepared statement is NULL"); - } - - if (!m_moreResults) - { - return false; - } - - // Clear any previous results - records.clear(); - - int lastStep = -1; - - // Copy the previously read record - if (m_recordReady) - { - records.push_back(m_record); - lastStep = m_record.frame; - m_recordReady = false; - } - - bool firstRow = true; - while (true) - { - if (sqlite3_step(m_stmt) == SQLITE_ROW) - { - NeutralFileRecord record; - - record.point.r = sqlite3_column_int(m_stmt, 0); - record.point.g = sqlite3_column_int(m_stmt, 1); - record.point.b = sqlite3_column_int(m_stmt, 2); - record.point.x = sqlite3_column_double(m_stmt, 3); - record.point.y = sqlite3_column_double(m_stmt, 4); - record.point.z = sqlite3_column_double(m_stmt, 5); - record.pixel.x = sqlite3_column_double(m_stmt, 6); - record.pixel.y = sqlite3_column_double(m_stmt, 7); - record.rotation = sqlite3_column_double(m_stmt, 8); - record.frame = sqlite3_column_int(m_stmt, 9); - - // Check if we are moving to the next scan frame - if (!firstRow && record.frame != lastStep) - { - m_record = record; - m_recordReady = true; - lastStep = record.frame; - break; - } - - firstRow = false; - lastStep = record.frame; - records.push_back(record); - } - else - { - m_moreResults = false; - } - } - - return m_moreResults; -} - -} // ns sdl diff --git a/src/NeutralFileReader.h b/src/NeutralFileReader.h deleted file mode 100644 index aaa481a..0000000 --- a/src/NeutralFileReader.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - **************************************************************************** - * Copyright (c) 2014 Uriah Liggett * - * This file is part of FreeLSS. * - * * - * FreeLSS is free software: you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation, either version 3 of the License, or * - * (at your option) any later version. * - * * - * FreeLSS is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with FreeLSS. If not, see . * - **************************************************************************** -*/ - -#pragma once - -namespace freelss -{ - -class NeutralFileReader -{ -public: - NeutralFileReader(); - ~NeutralFileReader(); - - void open(const std::string& filename); - void close(); - void start(); - bool readNextStep(std::vector& records); - -private: - - void prepareStatement(); - - /** The SQL for creating the database */ - static const char * SELECT_SQL; - - /** The Sqlite database */ - sqlite3 * m_db; - - /** The prepared statement */ - sqlite3_stmt * m_stmt; - - /** Temp record */ - NeutralFileRecord m_record; - - /** Indicates if we should use the tmp record or not */ - bool m_recordReady; - - /** Indicates if there are more rows to be read */ - bool m_moreResults; -}; - -} diff --git a/src/NeutralFileWriter.cpp b/src/NeutralFileWriter.cpp deleted file mode 100644 index 26c7284..0000000 --- a/src/NeutralFileWriter.cpp +++ /dev/null @@ -1,185 +0,0 @@ -/* - **************************************************************************** - * Copyright (c) 2014 Uriah Liggett * - * This file is part of FreeLSS. * - * * - * FreeLSS is free software: you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation, either version 3 of the License, or * - * (at your option) any later version. * - * * - * FreeLSS is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with FreeLSS. If not, see . * - **************************************************************************** -*/ -#include "Main.h" -#include "NeutralFileWriter.h" - -namespace freelss -{ - -const char * NeutralFileWriter::CREATE_DATABASE_SQL = "\ -CREATE TABLE RESULTS (RED INTEGER, GREEN INTEGER, BLUE INTEGER, X REAL, Y REAL, Z REAL, COLUMN REAL, ROW REAL, ROTATION REAL, STEP INTEGER);\n"; - -NeutralFileWriter::NeutralFileWriter() : - m_db(NULL), - m_stmt(NULL) -{ - // Do nothing -} - -NeutralFileWriter::~NeutralFileWriter() -{ - close(); -} - -void NeutralFileWriter::open(const std::string& filename) -{ - if (m_db != NULL) - { - return; - } - - // If the file exists, delete it - if (access(filename.c_str(), F_OK) == 0) - { - if (remove(filename.c_str()) == -1) - { - throw Exception("Error removing file: " + filename); - } - } - - if (sqlite3_open(filename.c_str(), &m_db) != 0) - { - throw Exception(std::string("Could not open sqlite database: ") + filename); - } - - char * errMsg = 0; - int rc = sqlite3_exec(m_db, NeutralFileWriter::CREATE_DATABASE_SQL, NULL, NULL, &errMsg); - if (rc != SQLITE_OK) - { - std::string error = errMsg; - sqlite3_free(errMsg); - throw Exception("SQL Error: " + error); - } - - // Disable wait on write - errMsg = 0; - rc = sqlite3_exec(m_db, "PRAGMA synchronous = OFF", NULL, NULL, &errMsg); - if (rc != SQLITE_OK) - { - std::string error = errMsg; - sqlite3_free(errMsg); - throw Exception("Error setting synchronous mode: " + error); - } - - // In-memory journal only - errMsg = 0; - rc = sqlite3_exec(m_db, "PRAGMA journal_mode = MEMORY", NULL, NULL, &errMsg); - if (rc != SQLITE_OK) - { - std::string error = errMsg; - sqlite3_free(errMsg); - throw Exception("Error setting journal_mode: " + error); - } -} - -void NeutralFileWriter::close() -{ - if (m_stmt != NULL) - { - sqlite3_finalize(m_stmt); - m_stmt = NULL; - } - - if (m_db != NULL) - { - sqlite3_close(m_db); - m_db = NULL; - } -} - -void NeutralFileWriter::write(const NeutralFileRecord& record) -{ - if (m_db == NULL) - { - throw Exception("The database is not open"); - } - - sqlite3_bind_int(m_stmt, 1, (int)record.point.r); - sqlite3_bind_int(m_stmt, 2, (int)record.point.g); - sqlite3_bind_int(m_stmt, 3, (int)record.point.b); - sqlite3_bind_double(m_stmt, 4, record.point.x); - sqlite3_bind_double(m_stmt, 5, record.point.y); - sqlite3_bind_double(m_stmt, 6, record.point.z); - sqlite3_bind_double(m_stmt, 7, record.pixel.x); - sqlite3_bind_double(m_stmt, 8, record.pixel.y); - sqlite3_bind_double(m_stmt, 9, record.rotation); - sqlite3_bind_int(m_stmt, 10, record.frame); - - sqlite3_step(m_stmt); - sqlite3_clear_bindings(m_stmt); - sqlite3_reset(m_stmt); -} - -void NeutralFileWriter::beginBatch() -{ - // Create the prepared statement - prepareStatement(); - - char * errMsg = 0; - int rc = sqlite3_exec(m_db, "BEGIN TRANSACTION", NULL, NULL, &errMsg); - if(rc != SQLITE_OK) - { - std::string error = errMsg; - sqlite3_free(errMsg); - throw Exception(std::string("Error beginning transaction: ") + error); - } -} - -void NeutralFileWriter::prepareStatement() -{ - if (m_stmt != NULL) - { - sqlite3_finalize(m_stmt); - m_stmt = NULL; - } - - // Create the prepared statement - char * errMsg = 0; - const char * sql = "INSERT INTO RESULTS (RED, GREEN, BLUE, X, Y, Z, COLUMN, ROW, ROTATION, STEP) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?);"; - int rc = sqlite3_prepare_v2(m_db, sql, -1, &m_stmt, NULL); - if (rc != SQLITE_OK) - { - std::string error = errMsg; - sqlite3_free(errMsg); - throw Exception(std::string("Error calling sqlite3_prepare_v2: ") + error); - } -} - -void NeutralFileWriter::commit() -{ - if (m_stmt == NULL) - { - return; - } - - char * errMsg = 0; - int rc = sqlite3_exec(m_db, "END TRANSACTION", NULL, NULL, &errMsg); - if(rc != SQLITE_OK) - { - std::string error = errMsg; - sqlite3_free(errMsg); - throw Exception(std::string("Error committing transaction: ") + error); - } - - sqlite3_finalize(m_stmt); - m_stmt = NULL; -} - -} diff --git a/src/PlyWriter.cpp b/src/PlyWriter.cpp index 5037a50..8a9d4e2 100644 --- a/src/PlyWriter.cpp +++ b/src/PlyWriter.cpp @@ -29,6 +29,7 @@ namespace freelss PlyWriter::PlyWriter() : m_writer(NULL), m_totalNumPoints(0), + m_totalNumFaces(0), m_numPointsWritten(0), m_dataFormat(PLY_BINARY) { @@ -40,6 +41,11 @@ void PlyWriter::setTotalNumPoints(int totalNumPoints) m_totalNumPoints = totalNumPoints; } +void PlyWriter::setTotalNumFacesFromFaceMap(const FaceMap& faces) +{ + m_totalNumFaces = faces.triangles.size() / 3; +} + void PlyWriter::setDataFormat(PlyDataFormat dataRepresentation) { m_dataFormat = dataRepresentation; @@ -80,7 +86,7 @@ void PlyWriter::begin(IWriter * writer) sstr << "property uchar red" << std::endl; sstr << "property uchar green" << std::endl; sstr << "property uchar blue" << std::endl; - sstr << "element face 0" << std::endl; + sstr << "element face " << m_totalNumFaces << std::endl; sstr << "property list uchar int vertex_indices" << std::endl; sstr << "end_header" << std::endl; @@ -88,6 +94,54 @@ void PlyWriter::begin(IWriter * writer) m_writer->write(header.c_str(), header.size()); } +void PlyWriter::writeFaces(const FaceMap& faces) +{ + if (m_dataFormat == PLY_ASCII) + { + writeAsciiFaces(faces); + } + else if (m_dataFormat == PLY_BINARY) + { + writeBinaryFaces(faces); + } + else + { + throw Exception("Unsupported PLY data format"); + } +} + +void PlyWriter::writeAsciiFaces(const FaceMap& faces) +{ + const std::vector& triangles = faces.triangles; + + for (size_t idx = 0; idx < triangles.size(); idx += 3) + { + std::stringstream sstr; + sstr << "3 " << triangles[idx] << " " << triangles[idx + 1] << " " << triangles[idx + 2] << std::endl; + + std::string data = sstr.str(); + m_writer->write(data.c_str(), data.size()); + } +} + +void PlyWriter::writeBinaryFaces(const FaceMap& faces) +{ + const std::vector& triangles = faces.triangles; + + for (size_t idx = 0; idx < triangles.size(); idx += 3) + { + uint8 numVert = 3; + uint32 v1 = triangles[idx]; + uint32 v2 = triangles[idx + 1]; + uint32 v3 = triangles[idx + 2]; + + m_writer->write((const char *)&numVert, sizeof(numVert)); + m_writer->write((const char *)&v1, sizeof(v1)); + m_writer->write((const char *)&v2, sizeof(v2)); + m_writer->write((const char *)&v3, sizeof(v3)); + } +} + void PlyWriter::writePoints(ColoredPoint * points, int numPoints) { // Check the number of points diff --git a/src/PlyWriter.h b/src/PlyWriter.h index 2a1d489..ebb6d46 100644 --- a/src/PlyWriter.h +++ b/src/PlyWriter.h @@ -34,15 +34,21 @@ class PlyWriter void setDataFormat(PlyDataFormat dataRepresentation); void setTotalNumPoints(int totalNumPoints); + void setTotalNumFacesFromFaceMap(const FaceMap& faces); void begin(IWriter * writer); void writePoints(ColoredPoint * points, int numPoints); + void writeFaces(const FaceMap& faces); void end(); private: void writeAsciiPoints(ColoredPoint * points, int numPoints); void writeBinaryPoints(ColoredPoint * points, int numPoints); + void writeAsciiFaces(const FaceMap& faces); + void writeBinaryFaces(const FaceMap& faces); + IWriter * m_writer; int m_totalNumPoints; + int m_totalNumFaces; int m_numPointsWritten; PlyDataFormat m_dataFormat; }; diff --git a/src/Preset.cpp b/src/Preset.cpp index ede346c..e59703d 100644 --- a/src/Preset.cpp +++ b/src/Preset.cpp @@ -81,85 +81,88 @@ void Preset::decodeProperties(const std::vector& properties, const std isActivePreset = false; this->name = name; + if (name.empty()) + { + return; + } + + const std::string prefix = "presets."; for (size_t iProp = 0; iProp < properties.size(); iProp++) { const Property& prop = properties[iProp]; - if (!name.empty()) + if (prop.name == prefix + name + ".laserSide") { - if (EndsWith(prop.name, name + ".laserSide")) - { - laserSide = (Laser::LaserSide) ToInt(prop.value); - } - else if (EndsWith(prop.name, name + ".cameraMode")) - { - cameraMode = (Camera::CameraMode) ToInt(prop.value); - } - else if (EndsWith(prop.name, name + ".laserThreshold")) - { - laserThreshold = ToReal(prop.value); - } - else if (EndsWith(prop.name, name + ".minLaserWidth")) - { - minLaserWidth = ToInt(prop.value); - } - else if (EndsWith(prop.name, name + ".maxLaserWidth")) - { - maxLaserWidth = ToInt(prop.value); - } - else if (EndsWith(prop.name, name + ".maxObjectSize")) - { - maxObjectSize = ToReal(prop.value); - } - else if (EndsWith(prop.name, name + ".maxTriangleEdgeLength")) - { - maxTriangleEdgeLength = ToReal(prop.value); - } - else if (EndsWith(prop.name, name + ".numLaserRowBins")) - { - numLaserRowBins = ToInt(prop.value); - } - else if (EndsWith(prop.name, name + ".laserDelay")) - { - laserDelay = ToInt(prop.value); - } - else if (EndsWith(prop.name, name + ".stabilityDelay")) - { - stabilityDelay = ToInt(prop.value); - } - else if (EndsWith(prop.name, name + ".active")) - { - isActivePreset = ToInt(prop.value) == 1; - } - else if (EndsWith(prop.name, name + ".framesPerRevolution")) - { - framesPerRevolution = ToInt(prop.value); - } - else if (EndsWith(prop.name, name + ".generateXyz")) - { - generateXyz = ToBool(prop.value); - } - else if (EndsWith(prop.name, name + ".generateStl")) - { - generateStl = ToBool(prop.value); - } - else if (EndsWith(prop.name, name + ".generatePly")) - { - generatePly = ToBool(prop.value); - } - else if (EndsWith(prop.name, name + ".groundPlaneHeight")) - { - groundPlaneHeight = ToReal(prop.value); - } - else if (EndsWith(prop.name, name + ".laserMergeAction")) - { - laserMergeAction = (LaserMergeAction) ToInt(prop.value); - } - else if (EndsWith(prop.name, name + ".plyDataFormat")) - { - plyDataFormat = (PlyDataFormat) ToInt(prop.value); - } + laserSide = (Laser::LaserSide) ToInt(prop.value); + } + else if (prop.name == prefix + name + ".cameraMode") + { + cameraMode = (Camera::CameraMode) ToInt(prop.value); + } + else if (prop.name == prefix + name + ".laserThreshold") + { + laserThreshold = ToReal(prop.value); + } + else if (prop.name == prefix + name + ".minLaserWidth") + { + minLaserWidth = ToInt(prop.value); + } + else if (prop.name == prefix + name + ".maxLaserWidth") + { + maxLaserWidth = ToInt(prop.value); + } + else if (prop.name == prefix + name + ".maxObjectSize") + { + maxObjectSize = ToReal(prop.value); + } + else if (prop.name == prefix + name + ".maxTriangleEdgeLength") + { + maxTriangleEdgeLength = ToReal(prop.value); + } + else if (prop.name == prefix + name + ".numLaserRowBins") + { + numLaserRowBins = ToInt(prop.value); + } + else if (prop.name == prefix + name + ".laserDelay") + { + laserDelay = ToInt(prop.value); + } + else if (prop.name == prefix + name + ".stabilityDelay") + { + stabilityDelay = ToInt(prop.value); + } + else if (prop.name == prefix + name + ".active") + { + isActivePreset = ToInt(prop.value) == 1; + } + else if (prop.name == prefix + name + ".framesPerRevolution") + { + framesPerRevolution = ToInt(prop.value); + } + else if (prop.name == prefix + name + ".generateXyz") + { + generateXyz = ToBool(prop.value); + } + else if (prop.name == prefix + name + ".generateStl") + { + generateStl = ToBool(prop.value); + } + else if (prop.name == prefix + name + ".generatePly") + { + generatePly = ToBool(prop.value); + } + else if (prop.name == prefix + name + ".groundPlaneHeight") + { + groundPlaneHeight = ToReal(prop.value); + } + else if (prop.name == prefix + name + ".laserMergeAction") + { + laserMergeAction = (LaserMergeAction) ToInt(prop.value); + } + else if (prop.name == prefix + name + ".plyDataFormat") + { + plyDataFormat = (PlyDataFormat) ToInt(prop.value); } } } diff --git a/src/Progress.cpp b/src/Progress.cpp index d6b4e84..0d7203a 100644 --- a/src/Progress.cpp +++ b/src/Progress.cpp @@ -66,6 +66,7 @@ void Progress::setPercent(real percent) void Progress::setLabel(const std::string& label) { m_cs.enter(); + std::cout << label << "..." << std::endl; m_label = label; m_cs.leave(); } diff --git a/src/Scanner.cpp b/src/Scanner.cpp index 20bafb5..1896137 100644 --- a/src/Scanner.cpp +++ b/src/Scanner.cpp @@ -27,11 +27,11 @@ #include "Laser.h" #include "Camera.h" #include "PixelLocationWriter.h" -#include "NeutralFileReader.h" #include "StlWriter.h" #include "XyzWriter.h" #include "LaserResultsMerger.h" #include "FileWriter.h" +#include "Facetizer.h" namespace freelss { @@ -45,7 +45,7 @@ static bool CompareScanResultFiles(const ScanResultFile& a, const ScanResultFile return a.extension > b.extension; } -static bool ComparePseudoSteps(const NeutralFileRecord& a, const NeutralFileRecord& b) +static bool ComparePseudoSteps(const DataPoint& a, const DataPoint& b) { if (a.pseudoFrame != b.pseudoFrame) { @@ -66,13 +66,14 @@ Scanner::Scanner() : m_progress(), m_status(), m_maxNumFrameRetries(5), // TODO: Place this in Database - m_maxPercentPixelsOverThreshold(3), // TODO: Place this in Database + m_maxNumFailedRows(10), // TODO: Place this in Database m_columnPoints(NULL), m_startTimeSec(0), m_remainingTime(0), m_firstRowRightLaserCol(0), m_firstRowLeftLaserCol(0), m_maxNumLocations(0), + m_maxFramesPerRevolution(0), m_radiansBetweenLaserPlanes(0), m_radiansPerFrame(0), m_rightLaserLoc(), @@ -279,22 +280,26 @@ void Scanner::run() int numFrames = 0; - int maxFramesPerRevolution = preset.framesPerRevolution; - if (maxFramesPerRevolution < 1) + m_maxFramesPerRevolution = preset.framesPerRevolution; + if (m_maxFramesPerRevolution < 1) { - maxFramesPerRevolution = 1; + m_maxFramesPerRevolution = 1; } int stepsPerRevolution = Setup::get()->stepsPerRevolution; - if (maxFramesPerRevolution > stepsPerRevolution) + if (m_maxFramesPerRevolution > stepsPerRevolution) { - maxFramesPerRevolution = stepsPerRevolution; + m_maxFramesPerRevolution = stepsPerRevolution; } try { // Enable the turn table motor m_turnTable->setMotorEnabled(true); + + // Wait a second in case the object shakes + Thread::usleep(1000000); + std::cout << "Enabled motor" << std::endl; if (m_laser == NULL) @@ -315,7 +320,7 @@ void Scanner::run() float rangeRadians = (m_range / 360) * (2 * PI); // The number of steps for a single frame - int stepsPerFrame = ceil(stepsPerRevolution / (float)maxFramesPerRevolution); + int stepsPerFrame = ceil(stepsPerRevolution / (float)m_maxFramesPerRevolution); if (stepsPerFrame < 1) { stepsPerFrame = 1; @@ -393,11 +398,11 @@ void Scanner::run() time1 = GetTimeInSeconds(); // Merge the left and right lasers and sort the results - std::vector results; + std::vector results; LaserResultsMerger merger; m_results.enter(); - merger.merge(results, m_leftLaserResults, m_rightLaserResults, maxFramesPerRevolution, + merger.merge(results, m_leftLaserResults, m_rightLaserResults, m_maxFramesPerRevolution, m_numFramesBetweenLaserPlanes, Camera::getInstance()->getImageHeight(), preset.laserMergeAction, m_progress); m_results.leave(); @@ -419,6 +424,18 @@ void Scanner::run() timingStats.laserMergeTime += GetTimeInSeconds() - time1; + // Mesh the point cloud + FaceMap faces; + if (preset.generatePly || preset.generateStl) + { + Facetizer facetizer; + + time1 = GetTimeInSeconds(); + m_progress.setLabel("Facetizing Point Cloud"); + facetizer.facetize(faces, results, m_range > 359, m_progress, true); + timingStats.facetizationTime += GetTimeInSeconds() - time1; + } + // Write the PLY file std::cout << "Starting output thread..." << std::endl; if (preset.generatePly) @@ -441,6 +458,7 @@ void Scanner::run() PlyWriter plyWriter; plyWriter.setDataFormat(preset.plyDataFormat); plyWriter.setTotalNumPoints((int)results.size()); + plyWriter.setTotalNumFacesFromFaceMap(faces); plyWriter.begin(&plyOut); real percent = 0; @@ -456,9 +474,10 @@ void Scanner::run() plyWriter.writePoints(&results[iRec].point, 1); } + plyWriter.writeFaces(faces); plyWriter.end(); plyOut.close(); - timingStats.pointCloudWritingTime += GetTimeInSeconds() - time1; + timingStats.plyWritingTime += GetTimeInSeconds() - time1; } // Generate the XYZ file @@ -468,7 +487,7 @@ void Scanner::run() time1 = GetTimeInSeconds(); XyzWriter xyzWriter; xyzWriter.write(m_filename, results, m_progress); - timingStats.pointCloudWritingTime += GetTimeInSeconds() - time1; + timingStats.xyzWritingTime += GetTimeInSeconds() - time1; } // Generate the STL file @@ -477,8 +496,8 @@ void Scanner::run() std::cout << "Generating STL mesh..." << std::endl; time1 = GetTimeInSeconds(); StlWriter stlWriter; - stlWriter.write(m_filename, results, m_range > 359, m_progress); - timingStats.meshWritingTime = GetTimeInSeconds() - time1; + stlWriter.write(m_filename, results, faces, m_progress); + timingStats.stlWritingTime = GetTimeInSeconds() - time1; } logTimingStats(timingStats); @@ -494,37 +513,100 @@ void Scanner::run() void Scanner::generateDebugInfo(Laser::LaserSide laserSide) { + Setup * setup = Setup::get(); + // Prepare for scanning prepareScan(); + std::string debuggingCsv = std::string(DEBUG_OUTPUT_DIR) + "/0.csv"; + m_laser->turnOff(Laser::ALL_LASERS); acquireImage(&m_image1); - m_laser->turnOn(laserSide); - acquireImage(&m_image2); + Image leftDebuggingImage; + std::vector leftLocations (m_maxNumLocations); + int numLeftLocations = 0; - m_laser->turnOff(laserSide); - - Image debuggingImage; + if (laserSide == Laser::LEFT_LASER || laserSide == Laser::ALL_LASERS) + { + m_laser->turnOn(Laser::LEFT_LASER); + acquireImage(&m_image2); + + m_laser->turnOff(Laser::LEFT_LASER); + + int firstRowLaserCol = m_camera->getImageWidth() * 0.5; + int numRowsBadFromColor = 0; + int numRowsBadFromNumRanges = 0; + + numLeftLocations = m_imageProcessor.process(m_image1, + m_image2, + &leftDebuggingImage, + &leftLocations.front(), + m_maxNumLocations, + firstRowLaserCol, + numRowsBadFromColor, + numRowsBadFromNumRanges, + debuggingCsv.c_str()); + + // If we had major problems with this frame, try it again + std::cout << "numRowsBadFromColor: " << numRowsBadFromColor << std::endl; + std::cout << "numRowsBadFromNumRanges: " << numRowsBadFromNumRanges << std::endl; + + // Map the points so that points below the ground plane and outside the max object size are omitted + int numLocationsMapped = 0; + LocationMapper locMapper(setup->leftLaserLocation, setup->cameraLocation); + locMapper.mapPoints(&leftLocations.front(), &m_image1, m_columnPoints, numLeftLocations, numLocationsMapped); + numLeftLocations = numLocationsMapped; + } - std::string debuggingCsv = std::string(DEBUG_OUTPUT_DIR) + "/0.csv"; + Image rightDebuggingImage; + std::vector rightLocations(m_maxNumLocations); + int numRightLocations = 0; + if (laserSide == Laser::RIGHT_LASER || laserSide == Laser::ALL_LASERS) + { + m_laser->turnOn(Laser::RIGHT_LASER); + acquireImage(&m_image2); + + m_laser->turnOff(Laser::RIGHT_LASER); + + int firstRowLaserCol = m_camera->getImageWidth() * 0.5; + int numRowsBadFromColor = 0; + int numRowsBadFromNumRanges = 0; + + numRightLocations = m_imageProcessor.process(m_image1, + m_image2, + &rightDebuggingImage, + &rightLocations.front(), + m_maxNumLocations, + firstRowLaserCol, + numRowsBadFromColor, + numRowsBadFromNumRanges, + debuggingCsv.c_str()); + + // If we had major problems with this frame, try it again + std::cout << "numRowsBadFromColor: " << numRowsBadFromColor << std::endl; + std::cout << "numRowsBadFromNumRanges: " << numRowsBadFromNumRanges << std::endl; + + + // Map the points so that points below the ground plane and outside the max object size are omitted + int numLocationsMapped = 0; + LocationMapper locMapper(setup->rightLaserLocation, setup->cameraLocation); + locMapper.mapPoints(&rightLocations.front(), &m_image1, m_columnPoints, numRightLocations, numLocationsMapped); + numRightLocations = numLocationsMapped; + } - int firstRowLaserCol = m_camera->getImageWidth() * 0.5; - real percentPixelsOverThreshold = 0; - int numLocations = m_imageProcessor.process(m_image1, - m_image2, - &debuggingImage, - m_laserLocations, - m_maxNumLocations, - firstRowLaserCol, - percentPixelsOverThreshold, - debuggingCsv.c_str()); + // + // Merge the two debugging images + // + Image debuggingImage; + mergeDebuggingImages(debuggingImage, leftDebuggingImage, rightDebuggingImage, laserSide); std::string baseFilename = std::string(DEBUG_OUTPUT_DIR) + "/"; // Overlay the pixels onto the debug image and write that as a new image PixelLocationWriter locWriter; - Image::overlayPixels(debuggingImage, m_laserLocations, numLocations); + Image::overlayPixels(debuggingImage, &rightLocations.front(), numRightLocations); + Image::overlayPixels(debuggingImage, &leftLocations.front(), numLeftLocations); locWriter.writeImage(debuggingImage, debuggingImage.getWidth(), debuggingImage.getHeight(), baseFilename + "5.png"); m_progress.setPercent(100); @@ -535,6 +617,61 @@ void Scanner::generateDebugInfo(Laser::LaserSide laserSide) std::cout << "Done." << std::endl; } +void Scanner::mergeDebuggingImages(Image& outImage, const Image& leftDebuggingImage, const Image& rightDebuggingImage, Laser::LaserSide laserSide) +{ + + if (laserSide == Laser::RIGHT_LASER) + { + memcpy(outImage.getPixels(), rightDebuggingImage.getPixels(), outImage.getPixelBufferSize()); + } + else if (laserSide == Laser::LEFT_LASER) + { + memcpy(outImage.getPixels(), leftDebuggingImage.getPixels(), outImage.getPixelBufferSize()); + } + else if (laserSide == Laser::ALL_LASERS) + { + // + // Merge the two images with a MAX operator + // + unsigned char * left = leftDebuggingImage.getPixels(); + unsigned char * right = rightDebuggingImage.getPixels(); + unsigned numPixels = leftDebuggingImage.getWidth() * leftDebuggingImage.getHeight(); + unsigned char * out = outImage.getPixels(); + for (unsigned iPx = 0; iPx < numPixels; iPx++) + { + int lr = (int) left[0]; + int lg = (int) left[1]; + int lb = (int) left[2]; + int leftMagSq = lr * lr + lg * lg + lb * lb; + + int rr = (int) right[0]; + int rg = (int) right[1]; + int rb = (int) right[2]; + int rightMagSq = rr * rr + rg * rg + rb * rb; + + if (leftMagSq > rightMagSq) + { + out[0] = (unsigned char) lr; + out[1] = (unsigned char) lg; + out[2] = (unsigned char) lb; + } + else + { + out[0] = (unsigned char) rr; + out[1] = (unsigned char) rg; + out[2] = (unsigned char) rb; + } + + left += 3; + right += 3; + out += 3; + } + } + else + { + throw Exception("Unsupported LaserSide"); + } +} void Scanner::singleScan(int frame, float rotation, float frameRotation, LocationMapper& leftLocMapper, LocationMapper& rightLocMapper, TimingStats * timingStats) { @@ -587,6 +724,9 @@ void Scanner::singleScan(int frame, float rotation, float frameRotation, // If it didn't succeed, take the first image again if (!goodResult) { + // Wait some period of time for the cause of the disruption to go away + Thread::usleep(1000000); + // Take a picture with the laser off time1 = GetTimeInSeconds(); acquireImage(&m_image1); @@ -632,10 +772,11 @@ void Scanner::singleScan(int frame, float rotation, float frameRotation, } } -bool Scanner::processScan(std::vector & results, int frame, float rotation, LocationMapper& locMapper, Laser::LaserSide laserSide, int & firstRowLaserCol, TimingStats * timingStats) +bool Scanner::processScan(std::vector & results, int frame, float rotation, LocationMapper& locMapper, Laser::LaserSide laserSide, int & firstRowLaserCol, TimingStats * timingStats) { int numLocationsMapped = 0; - real percentPixelsOverThreshold = 0; + int numRowsBadFromColor = 0; + int numRowsBadFromNumRanges = 0; // Send the pictures off for processing double time1 = GetTimeInSeconds(); @@ -645,17 +786,22 @@ bool Scanner::processScan(std::vector & results, int frame, f m_laserLocations, m_maxNumLocations, firstRowLaserCol, - percentPixelsOverThreshold, + numRowsBadFromColor, + numRowsBadFromNumRanges, NULL); timingStats->imageProcessingTime += GetTimeInSeconds() - time1; // If we had major problems with this frame, try it again - std::cout << "percentPixelsOverThreshold: " << percentPixelsOverThreshold << std::endl; - if (percentPixelsOverThreshold > m_maxPercentPixelsOverThreshold) + std::cout << "numRowsBadFromColor: " << numRowsBadFromColor << std::endl; + std::cout << "numRowsBadFromNumRanges: " << numRowsBadFromNumRanges << std::endl; + + if (numRowsBadFromNumRanges > m_maxNumFailedRows) { - std::cout << "!! Many bad laser locations suspected, pctOverThreshold=" << percentPixelsOverThreshold - << ", maxPct=" << m_maxPercentPixelsOverThreshold << ", rescanning..." << std::endl; + std::cout << "!! Too many bad laser locations suspected" + << ", numRowsBadFromColor=" << numRowsBadFromColor + << ", numRowsBadFromNumRanges=" << numRowsBadFromNumRanges + << ", rescanning..." << std::endl; timingStats->numFrameRetries++; @@ -698,20 +844,28 @@ bool Scanner::processScan(std::vector & results, int frame, f // Rotate the points rotatePoints(m_columnPoints, rotation, numLocationsMapped); - // Write to the neutral file - time1 = GetTimeInSeconds(); - m_results.enter(); + std::vector rawResults; for (int iLoc = 0; iLoc < numLocationsMapped; iLoc++) { - NeutralFileRecord record; + DataPoint record; record.pixel = m_laserLocations[iLoc]; record.point = m_columnPoints[iLoc]; record.rotation = laserSide == Laser::RIGHT_LASER ? rotation : rotation + m_radiansBetweenLaserPlanes; record.frame = frame; record.laserSide = (int) laserSide; - results.push_back(record); + rawResults.push_back(record); } + + uint32 maxNumRows = Camera::getInstance()->getImageHeight(); + uint32 numRowBins = MAX(400, m_maxFramesPerRevolution / 4); + + time1 = GetTimeInSeconds(); + + // Reduce the number of result rows and filter out some of the noise + m_results.enter(); + DataPoint::lowpassFilter(results, rawResults, maxNumRows, numRowBins); m_results.leave(); + timingStats->pointProcessingTime += GetTimeInSeconds() - time1; } @@ -800,8 +954,8 @@ void Scanner::logTimingStats(const Scanner::TimingStats& stats) double now = GetTimeInSeconds(); double totalTime = now - stats.startTime; - double accountedTime = stats.meshWritingTime + stats.imageAcquisitionTime + stats.imageProcessingTime + stats.pointMappingTime - + stats.pointProcessingTime + stats.rotationTime + stats.pointCloudWritingTime + stats.laserTime + stats.laserMergeTime; + double accountedTime = stats.xyzWritingTime + stats.facetizationTime + stats.stlWritingTime + stats.imageAcquisitionTime + stats.imageProcessingTime + stats.pointMappingTime + + stats.pointProcessingTime + stats.rotationTime + stats.plyWritingTime + stats.laserTime + stats.laserMergeTime; double unaccountedTime = totalTime - accountedTime; double rate = totalTime / stats.numFrames; @@ -815,8 +969,10 @@ void Scanner::logTimingStats(const Scanner::TimingStats& stats) std::cout << "Point Rotating:\t" << (100.0 * stats.pointProcessingTime / totalTime) << "%" << std::endl; std::cout << "Table Rotation:\t" << (100.0 * stats.rotationTime / totalTime) << "%" << std::endl; std::cout << "Laser Merging:\t" << (100.0 * stats.laserMergeTime / totalTime) << "%" << std::endl; - std::cout << "Point Cloud Writing:\t" << (100.0 * stats.pointCloudWritingTime / totalTime) << "%" << std::endl; - std::cout << "Mesh Writing:\t" << (100.0 * stats.meshWritingTime / totalTime) << "%" << std::endl; + std::cout << "PLY Writing:\t" << (100.0 * stats.plyWritingTime / totalTime) << "%" << std::endl; + std::cout << "STL Writing:\t" << (100.0 * stats.stlWritingTime / totalTime) << "%" << std::endl; + std::cout << "XYZ Writing:\t" << (100.0 * stats.xyzWritingTime / totalTime) << "%" << std::endl; + std::cout << "Facetization:\t" << (100.0 * stats.facetizationTime / totalTime) << "%" << std::endl; std::cout << "Num Frame Retries:\t" << stats.numFrameRetries << std::endl; std::cout << "Num Frames:\t" << stats.numFrames << std::endl; std::cout << "Total Time (min):\t" << (totalTime / 60.0) << std::endl << std::endl; diff --git a/src/Scanner.h b/src/Scanner.h index 02e3d89..e7b37c6 100644 --- a/src/Scanner.h +++ b/src/Scanner.h @@ -82,8 +82,8 @@ class Scanner : public Thread /** The live data from the scanner */ struct LiveData { - std::vector * leftLaserResults; - std::vector * rightLaserResults; + std::vector * leftLaserResults; + std::vector * rightLaserResults; }; /** Returns the data being scanned and locks all other access to it */ @@ -101,8 +101,10 @@ class Scanner : public Thread double rotationTime; double startTime; double pointProcessingTime; - double pointCloudWritingTime; - double meshWritingTime; + double plyWritingTime; + double stlWritingTime; + double xyzWritingTime; + double facetizationTime; double laserTime; double laserMergeTime; int numFrameRetries; @@ -123,16 +125,11 @@ class Scanner : public Thread /** * Returns true if the scan was processed successfully and false if there was a problem and the frame needs to be again. */ - bool processScan(std::vector & results, int frame, float rotation, LocationMapper& locMapper, Laser::LaserSide laserSide, int & firstRowLaserCol, TimingStats * timingStats); + bool processScan(std::vector & results, int frame, float rotation, LocationMapper& locMapper, Laser::LaserSide laserSide, int & firstRowLaserCol, TimingStats * timingStats); void writeRangePoints(ColoredPoint * points, int numLocationsMapped,Laser::LaserSide laserSide); -private: - /** Unowned objects */ - Laser * m_laser; - Camera * m_camera; - TurnTable * m_turnTable; -private: + void mergeDebuggingImages(Image& outImage, const Image& leftDebuggingImage, const Image& rightDebuggingImage, Laser::LaserSide laserSide); /** * Prepares the object for scanning. @@ -143,6 +140,13 @@ class Scanner : public Thread * Acquires an image from the camera. */ void acquireImage(Image * image); +private: + /** Unowned objects */ + Laser * m_laser; + Camera * m_camera; + TurnTable * m_turnTable; + +private: /** Array of laser locations */ PixelLocation * m_laserLocations; @@ -173,8 +177,8 @@ class Scanner : public Thread /** The maximum number of times to try a frame (at a particular rotation) before giving up */ const int m_maxNumFrameRetries; - /** The threshold for percentage of pixels over the threshold */ - const real m_maxPercentPixelsOverThreshold; + /** The maximum number of failed laser detection rows before */ + const real m_maxNumFailedRows; /** The image points for every column */ ColoredPoint * m_columnPoints; @@ -194,6 +198,9 @@ class Scanner : public Thread /** Max number of pixel locations */ unsigned m_maxNumLocations; + /** The max number of frames per revolution */ + int m_maxFramesPerRevolution; + /** The angle between the left and right laser planes */ real m_radiansBetweenLaserPlanes; @@ -225,10 +232,10 @@ class Scanner : public Thread Scanner::Task m_task; /** Left laser results */ - std::vector m_leftLaserResults; + std::vector m_leftLaserResults; /** Right laser results */ - std::vector m_rightLaserResults; + std::vector m_rightLaserResults; /** Protection for the the 3D result data */ CriticalSection m_results; diff --git a/src/StlWriter.cpp b/src/StlWriter.cpp index 853a3fc..d87ba44 100644 --- a/src/StlWriter.cpp +++ b/src/StlWriter.cpp @@ -19,7 +19,6 @@ */ #include "Main.h" -#include "NeutralFileReader.h" #include "StlWriter.h" #include "Camera.h" #include "Laser.h" @@ -28,20 +27,10 @@ namespace freelss { -static real32 DistanceSquared(const ColoredPoint& a, const ColoredPoint&b) -{ - real32 dx = a.x - b.x; - real32 dy = a.y - b.y; - real32 dz = a.z - b.z; - - return dx * dx + dy * dy + dz * dz; -} StlWriter::StlWriter() : - m_maxEdgeDistMmSq(12.4 * 12.2), // TODO: Make this a setting or autodetect it based off the distance to table and the detail level - m_attribute(0), - m_imageWidth(0) + m_attribute(0) { m_normal[0] = 0; m_normal[1] = 0; @@ -49,7 +38,7 @@ StlWriter::StlWriter() : } -void StlWriter::write(const std::string& baseFilename, const std::vector& results, bool connectLastFrameToFirst, Progress& progress) +void StlWriter::write(const std::string& baseFilename, const std::vector& results, const FaceMap& faces, Progress& progress) { progress.setLabel("Generating STL file"); progress.setPercent(0); @@ -61,98 +50,24 @@ void StlWriter::write(const std::string& baseFilename, const std::vectorgetImageHeight(); // TODO: Make this use the image height that generated the result and not the current Camera - m_imageWidth = Camera::getInstance()->getImageWidth(); - uint32 numRowBins = 400; // TODO: Autodetect this or have it in Database - // Write the STL header - writeHeader(fout); + writeHeader(fout, faces); - uint32 numTriangles = 0; + const std::vector& triangles = faces.triangles; - try + for (size_t idx = 0; idx < triangles.size(); idx += 3) { - int iStep = 0; - - std::vector firstFrame; - std::vector frameA; - std::vector frameB; - std::vector frameC; - - std::vector * currentFrame = &frameA; - std::vector * lastFrame = &frameB; - - size_t resultIndex = 0; - size_t totNumPoints = 0; - - real percent = 0; - while (NeutralFileRecord::readNextFrame(frameC, results, resultIndex)) - { - real newPct = 100.0f * resultIndex / results.size(); - if (newPct - percent > 0.1) - { - progress.setPercent(newPct); - percent = newPct; - } - - // Reduce the number of result rows and filter out some of the noise - NeutralFileRecord::lowpassFilter(* currentFrame, frameC, maxNumRows, numRowBins); - - totNumPoints += currentFrame->size(); - - // Sort the results in decreasing Y - //std::sort(currentFrame->begin(), currentFrame->end(), SortRecordByYValue); - - if (iStep > 0) - { - writeTrianglesForColumn(* currentFrame, * lastFrame, fout, numTriangles); - } - else if (connectLastFrameToFirst) - { - // Store the first frame for usage later on - firstFrame = frameC; - } - - // Swap to the other buffer to populate it - std::vector * tmpFrame = lastFrame; - lastFrame = currentFrame; - currentFrame = tmpFrame; - - iStep++; - } - - // If this was a full scan close the loop - if (connectLastFrameToFirst && iStep > 0) - { - totNumPoints += firstFrame.size(); - writeTrianglesForColumn(firstFrame, * lastFrame, fout, numTriangles); - } - - fout.close(); - - std::cout << "Meshed " << (iStep + 1) << " scans with a total of " << totNumPoints << " points." << std::endl; - - int filePos = 80; // The file position where we should write the triangle count - std::fstream fp (stlFilename.c_str()); - if (!fp.is_open()) - { - throw Exception(std::string("Error updating triangle count in STL file: ") + stlFilename); - } + const ColoredPoint& pt1 = results[triangles[idx]].point; + const ColoredPoint& pt2 = results[triangles[idx + 1]].point; + const ColoredPoint& pt3 = results[triangles[idx + 2]].point; - fp.seekp(filePos, std::ios_base::beg); - fp.write((const char *)&numTriangles, sizeof(uint32)); - fp.close(); - } - catch (...) - { - fout.close(); - throw; + writeTriangle(pt1, pt2, pt3, fout); } fout.close(); } -void StlWriter::writeHeader(std::ofstream& fout) +void StlWriter::writeHeader(std::ofstream& fout, const FaceMap& faces) { unsigned char header[80]; memset(header, 0, sizeof(header)); @@ -162,189 +77,23 @@ void StlWriter::writeHeader(std::ofstream& fout) fout.write((const char *)header, sizeof(unsigned char) * 80); // Write number of triangles - uint32 numTriangles = 0; + uint32 numTriangles = (uint32) (faces.triangles.size() / 3); fout.write((const char *)&numTriangles, sizeof(uint32)); } -bool StlWriter::isInwardFacingFace(const NeutralFileRecord& p1, const NeutralFileRecord& p2, const NeutralFileRecord& p3) -{ - int laserSide = p1.laserSide; - bool inwardFacing = false; - float halfImageWidth = m_imageWidth * 0.5f; // If it's past the centerline then it will result in an inward facing triangle - - if (laserSide == (int)Laser::LEFT_LASER) - { - inwardFacing = p1.pixel.x > halfImageWidth || p2.pixel.x > halfImageWidth || p3.pixel.x > halfImageWidth; - } - else if (laserSide == (int)Laser::RIGHT_LASER) - { - inwardFacing = p1.pixel.x < halfImageWidth || p2.pixel.x < halfImageWidth || p3.pixel.x < halfImageWidth; - } - else - { - throw Exception("Unsupported LaserSide in StlWriter::isInwardFacingFace"); - } - - return inwardFacing; -} - -/* -foreach column - set row to 0 - foreach pt in prev_column - // Fan connect to the row - while cell[row] is within range and cell[row + 1] is within range and closer to this point than the one below - createTriangle(pt, cell[row], cell[row + 1]) - row++ - - // Extend mesh down to start processing the next point - if nextPt is within range - createTriangle(pt, nextPt, cell[row]) - - - */ -void StlWriter::writeTrianglesForColumn(const std::vector& currentFrame, const std::vector& lastFrame, std::ofstream& fout, uint32& numTriangles) +void StlWriter::writeTriangle(const ColoredPoint& pt1, const ColoredPoint& pt2, const ColoredPoint& pt3, std::ofstream& fout) { - size_t iCur = 0; - - for (size_t iLst = 0; iLst + 1 < lastFrame.size(); iLst++) - { - const NeutralFileRecord & l1 = lastFrame[iLst]; - const NeutralFileRecord & l2 = lastFrame[iLst + 1]; - - // If the current point is in range - while (iCur + 1 < currentFrame.size()) - { - const NeutralFileRecord & c1 = currentFrame[iCur]; - const NeutralFileRecord & c2 = currentFrame[iCur + 1]; - - // If there is a hole in the model, skip along until there isn't one - if (isValidTriangle(l1.point, c1.point, c2.point)) - { - real32 distSq1 = DistanceSquared(l1.point, c2.point); - real32 distSq2 = DistanceSquared(l2.point, c2.point); - - // While this C point is closer to this L point than the next L point, create a triangle fan with it - // Don't generate triangles bigger than our maximum allowable edge distance - // if (distSq1 < distSq2 && distSq1 <= m_maxEdgeDistMmSq) - if (distSq1 < distSq2) - { - // Determine if we need to flip the normal or not - bool flipNormal = isInwardFacingFace(l1, c1, c2); - writeTriangle(l1.point, c1.point, c2.point, flipNormal, fout); - numTriangles++; - } - else - { - // Connect to this triangle - if (isValidTriangle(l2.point, l1.point, c1.point)) - { - bool flipNormal = isInwardFacingFace(l2, l1, c1); - writeTriangle(l2.point, l1.point, c1.point, flipNormal, fout); - numTriangles++; - } - else - { - iCur++; - } - - // It's closer to the next L point, so advance to it - break; - } - } - else - { - iCur++; - break; - } - - // Advance to the next row - iCur++; - } - } -} - -bool StlWriter::isValidTriangle(const ColoredPoint& pt1, const ColoredPoint& pt2, const ColoredPoint& pt3) -{ - if (DistanceSquared(pt1, pt2) > m_maxEdgeDistMmSq) - { - return false; - } - else if (DistanceSquared(pt1, pt3) > m_maxEdgeDistMmSq) - { - return false; - } - else if (DistanceSquared(pt2, pt3) > m_maxEdgeDistMmSq) - { - return false; - } - - return true; -} - -void StlWriter::writeTriangle(const ColoredPoint& pt1, const ColoredPoint& pt2, const ColoredPoint& pt3, bool flipNormal, std::ofstream& fout) -{ - real32 pt1x, pt1y, pt1z; - real32 pt2x, pt2y, pt2z; - real32 pt3x, pt3y, pt3z; - - - if (!flipNormal) - { - pt1x = pt1.x; - pt1y = pt1.y; - pt1z = pt1.z; - pt2x = pt2.x; - pt2y = pt2.y; - pt2z = pt2.z; - pt3x = pt3.x; - pt3y = pt3.y; - pt3z = pt3.z; - } - else - { - pt1x = pt3.x; - pt1y = pt3.y; - pt1z = pt3.z; - pt2x = pt2.x; - pt2y = pt2.y; - pt2z = pt2.z; - pt3x = pt1.x; - pt3y = pt1.y; - pt3z = pt1.z; - } - - fout.write((const char *)&m_normal, sizeof(real32) * 3); - fout.write((const char *)&pt1x, sizeof(real32)); - fout.write((const char *)&pt1y, sizeof(real32)); - fout.write((const char *)&pt1z, sizeof(real32)); - fout.write((const char *)&pt2x, sizeof(real32)); - fout.write((const char *)&pt2y, sizeof(real32)); - fout.write((const char *)&pt2z, sizeof(real32)); - fout.write((const char *)&pt3x, sizeof(real32)); - fout.write((const char *)&pt3y, sizeof(real32)); - fout.write((const char *)&pt3z, sizeof(real32)); + fout.write((const char *)&pt1.x, sizeof(real32)); + fout.write((const char *)&pt1.y, sizeof(real32)); + fout.write((const char *)&pt1.z, sizeof(real32)); + fout.write((const char *)&pt2.x, sizeof(real32)); + fout.write((const char *)&pt2.y, sizeof(real32)); + fout.write((const char *)&pt2.z, sizeof(real32)); + fout.write((const char *)&pt3.x, sizeof(real32)); + fout.write((const char *)&pt3.y, sizeof(real32)); + fout.write((const char *)&pt3.z, sizeof(real32)); fout.write((const char *)&m_attribute, sizeof(uint16)); } -void StlWriter::populateBuffer(NeutralFileRecord * records, int numRecords, NeutralFileRecord ** buffer, int maxNumRecords) -{ - // Set all the pointers in buffer to NULL - memset(buffer, 0, sizeof(NeutralFileRecord *) * maxNumRecords); - - // Expand the records so that they sit at the same index as their pixel row - for (int i = 0; i < numRecords; i++) - { - int row = ROUND(records[i].pixel.y); - if (row >= maxNumRecords) - { - throw Exception("Pixel value is outside the maximum number of records"); - } - - // Point to the record - buffer[row] = &records[i]; - } -} - } diff --git a/src/StlWriter.h b/src/StlWriter.h index 307a4dd..ea19562 100644 --- a/src/StlWriter.h +++ b/src/StlWriter.h @@ -30,32 +30,14 @@ class StlWriter public: StlWriter(); - void write(const std::string& filename, const std::vector& results, bool connectLastFrameToFirst, Progress& progress); + void write(const std::string& filename, const std::vector& results, const FaceMap& faces, Progress& progress); private: - void writeHeader(std::ofstream& fout); - void populateBuffer(NeutralFileRecord * records, int numRecords, NeutralFileRecord ** buffer, int maxNumRecords); - void writeTrianglesForColumn(const std::vector& currentFrame, const std::vector& lastFrame, std::ofstream& fout, uint32& numTriangles); - void writeTriangle(const ColoredPoint& pt1, const ColoredPoint& pt2, const ColoredPoint& pt3, bool flipNormal, std::ofstream& fout); - - bool isValidTriangle(const ColoredPoint& pt1, const ColoredPoint& pt2, const ColoredPoint& pt3); - - /** - * Indicates if the face is oriented point into the model and the normal needs to get flipped. - * This method assumes that the camera is looking straight down -z and x = 0. The y doesn't matter. - * This method assumes that all points were taken from the same laser. - */ - bool isInwardFacingFace(const NeutralFileRecord& p1, const NeutralFileRecord& p2, const NeutralFileRecord& p3); - - - /** The max triangle edge distance in mm sq */ - real32 m_maxEdgeDistMmSq; + void writeHeader(std::ofstream& fout, const FaceMap& faces); + void writeTriangle(const ColoredPoint& pt1, const ColoredPoint& pt2, const ColoredPoint& pt3, std::ofstream& fout); real32 m_normal[3]; uint16 m_attribute; - - /** The image width of the current camera */ - int m_imageWidth; }; } diff --git a/src/WebContent.cpp b/src/WebContent.cpp index e815e84..3747644 100644 --- a/src/WebContent.cpp +++ b/src/WebContent.cpp @@ -293,6 +293,9 @@ const std::string WebContent::PLY_DATA_FORMAT_DESCR = "Whether to generate binar std::string WebContent::scan(const std::vector& pastScans) { + const Preset& preset = PresetManager::get()->getActivePreset(); + std::string presetName = preset.name; + std::stringstream sstr; sstr << "" << CSS @@ -309,6 +312,7 @@ std::string WebContent::scan(const std::vector& pastScans) \

Click the button to start the scan

\
\ +
Preset
\
Degrees
degrees
\ \ \ @@ -421,7 +425,7 @@ std::string WebContent::scanRunning(Progress& progress, real remainingTime) << JAVASCRIPT << std::endl << "" - << "

" + << "

" << progress.getLabel() << " is " << progress.getPercent() @@ -434,7 +438,9 @@ std::string WebContent::scanRunning(Progress& progress, real remainingTime) << " minutes remaining"; } - sstr << ". Preview

" + sstr << ". 
" + << "" + << "


" << "
" << "" << "" diff --git a/src/XyzWriter.cpp b/src/XyzWriter.cpp index 59ed038..b08f28c 100644 --- a/src/XyzWriter.cpp +++ b/src/XyzWriter.cpp @@ -26,7 +26,7 @@ namespace freelss { -void XyzWriter::write(const std::string& baseFilename, const std::vector& results, Progress& progress) +void XyzWriter::write(const std::string& baseFilename, const std::vector& results, Progress& progress) { // Sanity check if (results.empty()) @@ -49,12 +49,12 @@ void XyzWriter::write(const std::string& baseFilename, const std::vector frameA; - std::vector currentFrame; + std::vector frameA; + std::vector currentFrame; size_t resultIndex = 0; real percent = 0; - while (NeutralFileRecord::readNextFrame(frameA, results, resultIndex)) + while (DataPoint::readNextFrame(frameA, results, resultIndex)) { real newPct = 100.0f * resultIndex / results.size(); if (newPct - percent > 0.1) @@ -64,12 +64,12 @@ void XyzWriter::write(const std::string& baseFilename, const std::vector& results, Progress& progress); + void write(const std::string& filename, const std::vector& results, Progress& progress); }; }