File vendor.patch of Package failed_parsec

Index: parsec-1.4.1/vendor/tss-esapi-sys/.cargo-checksum.json
===================================================================
--- parsec-1.4.1.orig/vendor/tss-esapi-sys/.cargo-checksum.json
+++ parsec-1.4.1/vendor/tss-esapi-sys/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"Cargo.toml":"e282177bfa9bb891b3d98f8568d6a51fa1533830aacdd4af6f502ac7c77aa04c","LICENSE":"cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30","README.md":"2cb476d1db06c323503dc6d15e0f5ed5d6f31b940ee19fb6a1267d26ca2ea109","build.rs":"ea4cb4d9341e424361f284a29495d4af64d2fb50c13947fdad7995fc2ad7e6a0","regenerate-bindings.sh":"0b1d98122871c9bff9eb4884d5c191c16acc5d7f6c8f71eb5c9624b1001df925","src/bindings/aarch64-unknown-linux-gnu.rs":"cf4fb0bd61f2278ac6b85e5fc66911cc5d8ab5c927bca289e54d3eaf4cafef43","src/bindings/arm-unknown-linux-gnueabi.rs":"6d7c0442b2576f66549488d38aee0b6c6ea88e5b77bebb1ea548e3279a8535e3","src/bindings/x86_64-unknown-darwin.rs":"d35c0a4470b0bd463abd243445b69fa8a5806f7373fb5294fe321f015f1ba31b","src/bindings/x86_64-unknown-linux-gnu.rs":"fdc3be41f8d00faec067f7f751d6217c56319d5261abfbf3012206c2ea4f9f75","src/lib.rs":"d03e402ccd471f25acca136550af86caa33af7714290424b24b236f1ac9e450f"},"package":"535cd192581c2ec4d5f82e670b1d3fbba6a23ccce8c85de387642051d7cad5b5"}
\ No newline at end of file
+{"files":{"Cargo.toml":"e282177bfa9bb891b3d98f8568d6a51fa1533830aacdd4af6f502ac7c77aa04c","LICENSE":"cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30","README.md":"2cb476d1db06c323503dc6d15e0f5ed5d6f31b940ee19fb6a1267d26ca2ea109","build.rs":"ea4cb4d9341e424361f284a29495d4af64d2fb50c13947fdad7995fc2ad7e6a0","regenerate-bindings.sh":"0b1d98122871c9bff9eb4884d5c191c16acc5d7f6c8f71eb5c9624b1001df925","src/bindings/aarch64-unknown-linux-gnu.rs":"cf4fb0bd61f2278ac6b85e5fc66911cc5d8ab5c927bca289e54d3eaf4cafef43","src/bindings/arm-unknown-linux-gnueabi.rs":"6d7c0442b2576f66549488d38aee0b6c6ea88e5b77bebb1ea548e3279a8535e3","src/bindings/x86_64-unknown-darwin.rs":"d35c0a4470b0bd463abd243445b69fa8a5806f7373fb5294fe321f015f1ba31b","src/bindings/x86_64-unknown-linux-gnu.rs":"fdc3be41f8d00faec067f7f751d6217c56319d5261abfbf3012206c2ea4f9f75"},"package":"535cd192581c2ec4d5f82e670b1d3fbba6a23ccce8c85de387642051d7cad5b5"}
Index: parsec-1.4.1/vendor/tss-esapi-sys/src/bindings/riscv64-unknown-linux-gnu.rs
===================================================================
--- /dev/null
+++ parsec-1.4.1/vendor/tss-esapi-sys/src/bindings/riscv64-unknown-linux-gnu.rs
@@ -0,0 +1,17142 @@
+/* automatically generated by rust-bindgen 0.70.1 */
+
+pub const _STDINT_H: u32 = 1;
+pub const _FEATURES_H: u32 = 1;
+pub const _DEFAULT_SOURCE: u32 = 1;
+pub const __GLIBC_USE_ISOC2Y: u32 = 0;
+pub const __GLIBC_USE_ISOC23: u32 = 0;
+pub const __USE_ISOC11: u32 = 1;
+pub const __USE_ISOC99: u32 = 1;
+pub const __USE_ISOC95: u32 = 1;
+pub const __USE_POSIX_IMPLICITLY: u32 = 1;
+pub const _POSIX_SOURCE: u32 = 1;
+pub const _POSIX_C_SOURCE: u32 = 200809;
+pub const __USE_POSIX: u32 = 1;
+pub const __USE_POSIX2: u32 = 1;
+pub const __USE_POSIX199309: u32 = 1;
+pub const __USE_POSIX199506: u32 = 1;
+pub const __USE_XOPEN2K: u32 = 1;
+pub const __USE_XOPEN2K8: u32 = 1;
+pub const _ATFILE_SOURCE: u32 = 1;
+pub const __WORDSIZE_TIME64_COMPAT32: u32 = 1;
+pub const __TIMESIZE: u32 = 64;
+pub const __USE_TIME_BITS64: u32 = 1;
+pub const __USE_MISC: u32 = 1;
+pub const __USE_ATFILE: u32 = 1;
+pub const __USE_FORTIFY_LEVEL: u32 = 0;
+pub const __GLIBC_USE_DEPRECATED_GETS: u32 = 0;
+pub const __GLIBC_USE_DEPRECATED_SCANF: u32 = 0;
+pub const __GLIBC_USE_C23_STRTOL: u32 = 0;
+pub const _STDC_PREDEF_H: u32 = 1;
+pub const __STDC_IEC_559__: u32 = 1;
+pub const __STDC_IEC_60559_BFP__: u32 = 201404;
+pub const __STDC_IEC_559_COMPLEX__: u32 = 1;
+pub const __STDC_IEC_60559_COMPLEX__: u32 = 201404;
+pub const __STDC_ISO_10646__: u32 = 201706;
+pub const __GNU_LIBRARY__: u32 = 6;
+pub const __GLIBC__: u32 = 2;
+pub const __GLIBC_MINOR__: u32 = 41;
+pub const _SYS_CDEFS_H: u32 = 1;
+pub const __glibc_c99_flexarr_available: u32 = 1;
+pub const __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI: u32 = 0;
+pub const __HAVE_GENERIC_SELECTION: u32 = 1;
+pub const __GLIBC_USE_LIB_EXT2: u32 = 0;
+pub const __GLIBC_USE_IEC_60559_BFP_EXT: u32 = 0;
+pub const __GLIBC_USE_IEC_60559_BFP_EXT_C23: u32 = 0;
+pub const __GLIBC_USE_IEC_60559_EXT: u32 = 0;
+pub const __GLIBC_USE_IEC_60559_FUNCS_EXT: u32 = 0;
+pub const __GLIBC_USE_IEC_60559_FUNCS_EXT_C23: u32 = 0;
+pub const __GLIBC_USE_IEC_60559_TYPES_EXT: u32 = 0;
+pub const _BITS_TYPES_H: u32 = 1;
+pub const _BITS_TYPESIZES_H: u32 = 1;
+pub const __OFF_T_MATCHES_OFF64_T: u32 = 1;
+pub const __INO_T_MATCHES_INO64_T: u32 = 1;
+pub const __RLIM_T_MATCHES_RLIM64_T: u32 = 1;
+pub const __STATFS_MATCHES_STATFS64: u32 = 1;
+pub const __FD_SETSIZE: u32 = 1024;
+pub const _BITS_TIME64_H: u32 = 1;
+pub const _BITS_WCHAR_H: u32 = 1;
+pub const _BITS_STDINT_INTN_H: u32 = 1;
+pub const _BITS_STDINT_UINTN_H: u32 = 1;
+pub const _BITS_STDINT_LEAST_H: u32 = 1;
+pub const INT8_MIN: i32 = -128;
+pub const INT16_MIN: i32 = -32768;
+pub const INT32_MIN: i32 = -2147483648;
+pub const INT8_MAX: u32 = 127;
+pub const INT16_MAX: u32 = 32767;
+pub const INT32_MAX: u32 = 2147483647;
+pub const UINT8_MAX: u32 = 255;
+pub const UINT16_MAX: u32 = 65535;
+pub const UINT32_MAX: u32 = 4294967295;
+pub const INT_LEAST8_MIN: i32 = -128;
+pub const INT_LEAST16_MIN: i32 = -32768;
+pub const INT_LEAST32_MIN: i32 = -2147483648;
+pub const INT_LEAST8_MAX: u32 = 127;
+pub const INT_LEAST16_MAX: u32 = 32767;
+pub const INT_LEAST32_MAX: u32 = 2147483647;
+pub const UINT_LEAST8_MAX: u32 = 255;
+pub const UINT_LEAST16_MAX: u32 = 65535;
+pub const UINT_LEAST32_MAX: u32 = 4294967295;
+pub const INT_FAST8_MIN: i32 = -128;
+pub const INT_FAST16_MIN: i64 = -9223372036854775808;
+pub const INT_FAST32_MIN: i64 = -9223372036854775808;
+pub const INT_FAST8_MAX: u32 = 127;
+pub const INT_FAST16_MAX: u64 = 9223372036854775807;
+pub const INT_FAST32_MAX: u64 = 9223372036854775807;
+pub const UINT_FAST8_MAX: u32 = 255;
+pub const UINT_FAST16_MAX: i32 = -1;
+pub const UINT_FAST32_MAX: i32 = -1;
+pub const INTPTR_MIN: i64 = -9223372036854775808;
+pub const INTPTR_MAX: u64 = 9223372036854775807;
+pub const UINTPTR_MAX: i32 = -1;
+pub const PTRDIFF_MIN: i64 = -9223372036854775808;
+pub const PTRDIFF_MAX: u64 = 9223372036854775807;
+pub const SIG_ATOMIC_MIN: i32 = -2147483648;
+pub const SIG_ATOMIC_MAX: u32 = 2147483647;
+pub const SIZE_MAX: i32 = -1;
+pub const WINT_MIN: u32 = 0;
+pub const WINT_MAX: u32 = 4294967295;
+pub const TSS2_RC_LAYER_SHIFT: u32 = 16;
+pub const TSS2_BASE_RC_GENERAL_FAILURE: u32 = 1;
+pub const TSS2_BASE_RC_NOT_IMPLEMENTED: u32 = 2;
+pub const TSS2_BASE_RC_BAD_CONTEXT: u32 = 3;
+pub const TSS2_BASE_RC_ABI_MISMATCH: u32 = 4;
+pub const TSS2_BASE_RC_BAD_REFERENCE: u32 = 5;
+pub const TSS2_BASE_RC_INSUFFICIENT_BUFFER: u32 = 6;
+pub const TSS2_BASE_RC_BAD_SEQUENCE: u32 = 7;
+pub const TSS2_BASE_RC_NO_CONNECTION: u32 = 8;
+pub const TSS2_BASE_RC_TRY_AGAIN: u32 = 9;
+pub const TSS2_BASE_RC_IO_ERROR: u32 = 10;
+pub const TSS2_BASE_RC_BAD_VALUE: u32 = 11;
+pub const TSS2_BASE_RC_NOT_PERMITTED: u32 = 12;
+pub const TSS2_BASE_RC_INVALID_SESSIONS: u32 = 13;
+pub const TSS2_BASE_RC_NO_DECRYPT_PARAM: u32 = 14;
+pub const TSS2_BASE_RC_NO_ENCRYPT_PARAM: u32 = 15;
+pub const TSS2_BASE_RC_BAD_SIZE: u32 = 16;
+pub const TSS2_BASE_RC_MALFORMED_RESPONSE: u32 = 17;
+pub const TSS2_BASE_RC_INSUFFICIENT_CONTEXT: u32 = 18;
+pub const TSS2_BASE_RC_INSUFFICIENT_RESPONSE: u32 = 19;
+pub const TSS2_BASE_RC_INCOMPATIBLE_TCTI: u32 = 20;
+pub const TSS2_BASE_RC_NOT_SUPPORTED: u32 = 21;
+pub const TSS2_BASE_RC_BAD_TCTI_STRUCTURE: u32 = 22;
+pub const TSS2_BASE_RC_MEMORY: u32 = 23;
+pub const TSS2_BASE_RC_BAD_TR: u32 = 24;
+pub const TSS2_BASE_RC_MULTIPLE_DECRYPT_SESSIONS: u32 = 25;
+pub const TSS2_BASE_RC_MULTIPLE_ENCRYPT_SESSIONS: u32 = 26;
+pub const TSS2_BASE_RC_RSP_AUTH_FAILED: u32 = 27;
+pub const TSS2_BASE_RC_NO_CONFIG: u32 = 28;
+pub const TSS2_BASE_RC_BAD_PATH: u32 = 29;
+pub const TSS2_BASE_RC_NOT_DELETABLE: u32 = 30;
+pub const TSS2_BASE_RC_PATH_ALREADY_EXISTS: u32 = 31;
+pub const TSS2_BASE_RC_KEY_NOT_FOUND: u32 = 32;
+pub const TSS2_BASE_RC_SIGNATURE_VERIFICATION_FAILED: u32 = 33;
+pub const TSS2_BASE_RC_HASH_MISMATCH: u32 = 34;
+pub const TSS2_BASE_RC_KEY_NOT_DUPLICABLE: u32 = 35;
+pub const TSS2_BASE_RC_PATH_NOT_FOUND: u32 = 36;
+pub const TSS2_BASE_RC_NO_CERT: u32 = 37;
+pub const TSS2_BASE_RC_NO_PCR: u32 = 38;
+pub const TSS2_BASE_RC_PCR_NOT_RESETTABLE: u32 = 39;
+pub const TSS2_BASE_RC_BAD_TEMPLATE: u32 = 40;
+pub const TSS2_BASE_RC_AUTHORIZATION_FAILED: u32 = 41;
+pub const TSS2_BASE_RC_AUTHORIZATION_UNKNOWN: u32 = 42;
+pub const TSS2_BASE_RC_NV_NOT_READABLE: u32 = 43;
+pub const TSS2_BASE_RC_NV_TOO_SMALL: u32 = 44;
+pub const TSS2_BASE_RC_NV_NOT_WRITEABLE: u32 = 45;
+pub const TSS2_BASE_RC_POLICY_UNKNOWN: u32 = 46;
+pub const TSS2_BASE_RC_NV_WRONG_TYPE: u32 = 47;
+pub const TSS2_BASE_RC_NAME_ALREADY_EXISTS: u32 = 48;
+pub const TSS2_BASE_RC_NO_TPM: u32 = 49;
+pub const TSS2_BASE_RC_BAD_KEY: u32 = 50;
+pub const TSS2_BASE_RC_NO_HANDLE: u32 = 51;
+pub const TSS2_BASE_RC_NOT_PROVISIONED: u32 = 52;
+pub const TSS2_BASE_RC_ALREADY_PROVISIONED: u32 = 53;
+pub const TSS2_BASE_RC_CALLBACK_NULL: u32 = 54;
+pub const TSS2_LAYER_IMPLEMENTATION_SPECIFIC_OFFSET: u32 = 63488;
+pub const TSS2_LEVEL_IMPLEMENTATION_SPECIFIC_SHIFT: u32 = 11;
+pub const TPM2_MAX_COMMAND_SIZE: u32 = 4096;
+pub const TPM2_MAX_RESPONSE_SIZE: u32 = 4096;
+pub const TPM2_NUM_PCR_BANKS: u32 = 16;
+pub const TPM2_MAX_DIGEST_BUFFER: u32 = 1024;
+pub const TPM2_MAX_NV_BUFFER_SIZE: u32 = 2048;
+pub const TPM2_MAX_PCRS: u32 = 32;
+pub const TPM2_MAX_ALG_LIST_SIZE: u32 = 128;
+pub const TPM2_MAX_CAP_CC: u32 = 256;
+pub const TPM2_MAX_CAP_BUFFER: u32 = 1024;
+pub const TPM2_MAX_CONTEXT_SIZE: u32 = 5120;
+pub const TPM2_SHA_DIGEST_SIZE: u32 = 20;
+pub const TPM2_SHA1_DIGEST_SIZE: u32 = 20;
+pub const TPM2_SHA256_DIGEST_SIZE: u32 = 32;
+pub const TPM2_SHA384_DIGEST_SIZE: u32 = 48;
+pub const TPM2_SHA512_DIGEST_SIZE: u32 = 64;
+pub const TPM2_SM3_256_DIGEST_SIZE: u32 = 32;
+pub const TPM2_MAX_SYM_BLOCK_SIZE: u32 = 16;
+pub const TPM2_MAX_SYM_DATA: u32 = 256;
+pub const TPM2_MAX_ECC_KEY_BYTES: u32 = 128;
+pub const TPM2_MAX_SYM_KEY_BYTES: u32 = 32;
+pub const TPM2_MAX_RSA_KEY_BYTES: u32 = 512;
+pub const TPM2_LABEL_MAX_BUFFER: u32 = 32;
+pub const TPM2_PCR_SELECT_MAX: u32 = 4;
+pub const TPM2_PRIVATE_VENDOR_SPECIFIC_BYTES: u32 = 1280;
+pub const TPMA_LOCALITY_EXTENDED_SHIFT: u32 = 5;
+pub const TPMA_CC_COMMANDINDEX_SHIFT: u32 = 0;
+pub const TPMA_CC_CHANDLES_SHIFT: u32 = 25;
+pub const TPMA_CC_RES_SHIFT: u32 = 30;
+pub const TPM2_NO: u32 = 0;
+pub const TPM2_YES: u32 = 1;
+pub const TPM2_NV_INDEX_INDEX_SHIFT: u32 = 0;
+pub const TPM2_NV_INDEX_RH_NV_SHIFT: u32 = 24;
+pub const TPMA_NV_TPM2_NT_SHIFT: u32 = 4;
+pub const _SYS_POLL_H: u32 = 1;
+pub const POLLIN: u32 = 1;
+pub const POLLPRI: u32 = 2;
+pub const POLLOUT: u32 = 4;
+pub const POLLRDNORM: u32 = 64;
+pub const POLLRDBAND: u32 = 128;
+pub const POLLWRNORM: u32 = 256;
+pub const POLLWRBAND: u32 = 512;
+pub const POLLERR: u32 = 8;
+pub const POLLHUP: u32 = 16;
+pub const POLLNVAL: u32 = 32;
+pub const TSS2_TCTI_TIMEOUT_BLOCK: i32 = -1;
+pub const TSS2_TCTI_TIMEOUT_NONE: u32 = 0;
+pub const TSS2_TCTI_INFO_SYMBOL: &[u8; 15] = b"Tss2_Tcti_Info\0";
+pub const TSS2_SYS_MAX_SESSIONS: u32 = 3;
+pub const ESYS_TR_NONE: u32 = 4095;
+pub const ESYS_TR_PASSWORD: u32 = 255;
+pub const ESYS_TR_PCR0: u32 = 0;
+pub const ESYS_TR_PCR1: u32 = 1;
+pub const ESYS_TR_PCR2: u32 = 2;
+pub const ESYS_TR_PCR3: u32 = 3;
+pub const ESYS_TR_PCR4: u32 = 4;
+pub const ESYS_TR_PCR5: u32 = 5;
+pub const ESYS_TR_PCR6: u32 = 6;
+pub const ESYS_TR_PCR7: u32 = 7;
+pub const ESYS_TR_PCR8: u32 = 8;
+pub const ESYS_TR_PCR9: u32 = 9;
+pub const ESYS_TR_PCR10: u32 = 10;
+pub const ESYS_TR_PCR11: u32 = 11;
+pub const ESYS_TR_PCR12: u32 = 12;
+pub const ESYS_TR_PCR13: u32 = 13;
+pub const ESYS_TR_PCR14: u32 = 14;
+pub const ESYS_TR_PCR15: u32 = 15;
+pub const ESYS_TR_PCR16: u32 = 16;
+pub const ESYS_TR_PCR17: u32 = 17;
+pub const ESYS_TR_PCR18: u32 = 18;
+pub const ESYS_TR_PCR19: u32 = 19;
+pub const ESYS_TR_PCR20: u32 = 20;
+pub const ESYS_TR_PCR21: u32 = 21;
+pub const ESYS_TR_PCR22: u32 = 22;
+pub const ESYS_TR_PCR23: u32 = 23;
+pub const ESYS_TR_PCR24: u32 = 24;
+pub const ESYS_TR_PCR25: u32 = 25;
+pub const ESYS_TR_PCR26: u32 = 26;
+pub const ESYS_TR_PCR27: u32 = 27;
+pub const ESYS_TR_PCR28: u32 = 28;
+pub const ESYS_TR_PCR29: u32 = 29;
+pub const ESYS_TR_PCR30: u32 = 30;
+pub const ESYS_TR_PCR31: u32 = 31;
+pub const ESYS_TR_RH_OWNER: u32 = 257;
+pub const ESYS_TR_RH_NULL: u32 = 263;
+pub const ESYS_TR_RH_LOCKOUT: u32 = 266;
+pub const ESYS_TR_RH_ENDORSEMENT: u32 = 267;
+pub const ESYS_TR_RH_PLATFORM: u32 = 268;
+pub const ESYS_TR_RH_PLATFORM_NV: u32 = 269;
+pub const ESYS_TR_RH_FW_OWNER: u32 = 270;
+pub const ESYS_TR_RH_FW_ENDORSEMENT: u32 = 271;
+pub const ESYS_TR_RH_FW_PLATFORM: u32 = 272;
+pub const ESYS_TR_RH_FW_NULL: u32 = 273;
+pub const ESYS_TR_RH_SVN_OWNER_BASE: u32 = 16842752;
+pub const ESYS_TR_RH_SVN_ENDORSEMENT_BASE: u32 = 16908288;
+pub const ESYS_TR_RH_SVN_PLATFORM_BASE: u32 = 16973824;
+pub const ESYS_TR_RH_SVN_NULL_BASE: u32 = 17039360;
+pub const ESYS_TR_RH_AUTH_FIRST: u32 = 272;
+pub const ESYS_TR_RH_ACT_FIRST: u32 = 288;
+pub const ESYS_TR_RH_ACT_0: u32 = 288;
+pub const ESYS_TR_RH_ACT_1: u32 = 289;
+pub const ESYS_TR_RH_ACT_2: u32 = 290;
+pub const ESYS_TR_RH_ACT_3: u32 = 291;
+pub const ESYS_TR_RH_ACT_4: u32 = 292;
+pub const ESYS_TR_RH_ACT_5: u32 = 293;
+pub const ESYS_TR_RH_ACT_6: u32 = 294;
+pub const ESYS_TR_RH_ACT_7: u32 = 295;
+pub const ESYS_TR_RH_ACT_8: u32 = 296;
+pub const ESYS_TR_RH_ACT_9: u32 = 297;
+pub const ESYS_TR_RH_ACT_A: u32 = 298;
+pub const ESYS_TR_RH_ACT_B: u32 = 299;
+pub const ESYS_TR_RH_ACT_C: u32 = 300;
+pub const ESYS_TR_RH_ACT_D: u32 = 301;
+pub const ESYS_TR_RH_ACT_E: u32 = 302;
+pub const ESYS_TR_RH_ACT_F: u32 = 303;
+pub const ESYS_TR_RH_ACT_LAST: u32 = 303;
+pub const ESYS_TR_RH_AC_FIRST: u32 = 320;
+pub const ESYS_TR_RH_AC_LAST: u32 = 65855;
+pub const _INTTYPES_H: u32 = 1;
+pub const ____gwchar_t_defined: u32 = 1;
+pub const __PRI64_PREFIX: &[u8; 2] = b"l\0";
+pub const __PRIPTR_PREFIX: &[u8; 2] = b"l\0";
+pub const PRId8: &[u8; 2] = b"d\0";
+pub const PRId16: &[u8; 2] = b"d\0";
+pub const PRId32: &[u8; 2] = b"d\0";
+pub const PRId64: &[u8; 3] = b"ld\0";
+pub const PRIdLEAST8: &[u8; 2] = b"d\0";
+pub const PRIdLEAST16: &[u8; 2] = b"d\0";
+pub const PRIdLEAST32: &[u8; 2] = b"d\0";
+pub const PRIdLEAST64: &[u8; 3] = b"ld\0";
+pub const PRIdFAST8: &[u8; 2] = b"d\0";
+pub const PRIdFAST16: &[u8; 3] = b"ld\0";
+pub const PRIdFAST32: &[u8; 3] = b"ld\0";
+pub const PRIdFAST64: &[u8; 3] = b"ld\0";
+pub const PRIi8: &[u8; 2] = b"i\0";
+pub const PRIi16: &[u8; 2] = b"i\0";
+pub const PRIi32: &[u8; 2] = b"i\0";
+pub const PRIi64: &[u8; 3] = b"li\0";
+pub const PRIiLEAST8: &[u8; 2] = b"i\0";
+pub const PRIiLEAST16: &[u8; 2] = b"i\0";
+pub const PRIiLEAST32: &[u8; 2] = b"i\0";
+pub const PRIiLEAST64: &[u8; 3] = b"li\0";
+pub const PRIiFAST8: &[u8; 2] = b"i\0";
+pub const PRIiFAST16: &[u8; 3] = b"li\0";
+pub const PRIiFAST32: &[u8; 3] = b"li\0";
+pub const PRIiFAST64: &[u8; 3] = b"li\0";
+pub const PRIo8: &[u8; 2] = b"o\0";
+pub const PRIo16: &[u8; 2] = b"o\0";
+pub const PRIo32: &[u8; 2] = b"o\0";
+pub const PRIo64: &[u8; 3] = b"lo\0";
+pub const PRIoLEAST8: &[u8; 2] = b"o\0";
+pub const PRIoLEAST16: &[u8; 2] = b"o\0";
+pub const PRIoLEAST32: &[u8; 2] = b"o\0";
+pub const PRIoLEAST64: &[u8; 3] = b"lo\0";
+pub const PRIoFAST8: &[u8; 2] = b"o\0";
+pub const PRIoFAST16: &[u8; 3] = b"lo\0";
+pub const PRIoFAST32: &[u8; 3] = b"lo\0";
+pub const PRIoFAST64: &[u8; 3] = b"lo\0";
+pub const PRIu8: &[u8; 2] = b"u\0";
+pub const PRIu16: &[u8; 2] = b"u\0";
+pub const PRIu32: &[u8; 2] = b"u\0";
+pub const PRIu64: &[u8; 3] = b"lu\0";
+pub const PRIuLEAST8: &[u8; 2] = b"u\0";
+pub const PRIuLEAST16: &[u8; 2] = b"u\0";
+pub const PRIuLEAST32: &[u8; 2] = b"u\0";
+pub const PRIuLEAST64: &[u8; 3] = b"lu\0";
+pub const PRIuFAST8: &[u8; 2] = b"u\0";
+pub const PRIuFAST16: &[u8; 3] = b"lu\0";
+pub const PRIuFAST32: &[u8; 3] = b"lu\0";
+pub const PRIuFAST64: &[u8; 3] = b"lu\0";
+pub const PRIx8: &[u8; 2] = b"x\0";
+pub const PRIx16: &[u8; 2] = b"x\0";
+pub const PRIx32: &[u8; 2] = b"x\0";
+pub const PRIx64: &[u8; 3] = b"lx\0";
+pub const PRIxLEAST8: &[u8; 2] = b"x\0";
+pub const PRIxLEAST16: &[u8; 2] = b"x\0";
+pub const PRIxLEAST32: &[u8; 2] = b"x\0";
+pub const PRIxLEAST64: &[u8; 3] = b"lx\0";
+pub const PRIxFAST8: &[u8; 2] = b"x\0";
+pub const PRIxFAST16: &[u8; 3] = b"lx\0";
+pub const PRIxFAST32: &[u8; 3] = b"lx\0";
+pub const PRIxFAST64: &[u8; 3] = b"lx\0";
+pub const PRIX8: &[u8; 2] = b"X\0";
+pub const PRIX16: &[u8; 2] = b"X\0";
+pub const PRIX32: &[u8; 2] = b"X\0";
+pub const PRIX64: &[u8; 3] = b"lX\0";
+pub const PRIXLEAST8: &[u8; 2] = b"X\0";
+pub const PRIXLEAST16: &[u8; 2] = b"X\0";
+pub const PRIXLEAST32: &[u8; 2] = b"X\0";
+pub const PRIXLEAST64: &[u8; 3] = b"lX\0";
+pub const PRIXFAST8: &[u8; 2] = b"X\0";
+pub const PRIXFAST16: &[u8; 3] = b"lX\0";
+pub const PRIXFAST32: &[u8; 3] = b"lX\0";
+pub const PRIXFAST64: &[u8; 3] = b"lX\0";
+pub const PRIdMAX: &[u8; 3] = b"ld\0";
+pub const PRIiMAX: &[u8; 3] = b"li\0";
+pub const PRIoMAX: &[u8; 3] = b"lo\0";
+pub const PRIuMAX: &[u8; 3] = b"lu\0";
+pub const PRIxMAX: &[u8; 3] = b"lx\0";
+pub const PRIXMAX: &[u8; 3] = b"lX\0";
+pub const PRIdPTR: &[u8; 3] = b"ld\0";
+pub const PRIiPTR: &[u8; 3] = b"li\0";
+pub const PRIoPTR: &[u8; 3] = b"lo\0";
+pub const PRIuPTR: &[u8; 3] = b"lu\0";
+pub const PRIxPTR: &[u8; 3] = b"lx\0";
+pub const PRIXPTR: &[u8; 3] = b"lX\0";
+pub const SCNd8: &[u8; 4] = b"hhd\0";
+pub const SCNd16: &[u8; 3] = b"hd\0";
+pub const SCNd32: &[u8; 2] = b"d\0";
+pub const SCNd64: &[u8; 3] = b"ld\0";
+pub const SCNdLEAST8: &[u8; 4] = b"hhd\0";
+pub const SCNdLEAST16: &[u8; 3] = b"hd\0";
+pub const SCNdLEAST32: &[u8; 2] = b"d\0";
+pub const SCNdLEAST64: &[u8; 3] = b"ld\0";
+pub const SCNdFAST8: &[u8; 4] = b"hhd\0";
+pub const SCNdFAST16: &[u8; 3] = b"ld\0";
+pub const SCNdFAST32: &[u8; 3] = b"ld\0";
+pub const SCNdFAST64: &[u8; 3] = b"ld\0";
+pub const SCNi8: &[u8; 4] = b"hhi\0";
+pub const SCNi16: &[u8; 3] = b"hi\0";
+pub const SCNi32: &[u8; 2] = b"i\0";
+pub const SCNi64: &[u8; 3] = b"li\0";
+pub const SCNiLEAST8: &[u8; 4] = b"hhi\0";
+pub const SCNiLEAST16: &[u8; 3] = b"hi\0";
+pub const SCNiLEAST32: &[u8; 2] = b"i\0";
+pub const SCNiLEAST64: &[u8; 3] = b"li\0";
+pub const SCNiFAST8: &[u8; 4] = b"hhi\0";
+pub const SCNiFAST16: &[u8; 3] = b"li\0";
+pub const SCNiFAST32: &[u8; 3] = b"li\0";
+pub const SCNiFAST64: &[u8; 3] = b"li\0";
+pub const SCNu8: &[u8; 4] = b"hhu\0";
+pub const SCNu16: &[u8; 3] = b"hu\0";
+pub const SCNu32: &[u8; 2] = b"u\0";
+pub const SCNu64: &[u8; 3] = b"lu\0";
+pub const SCNuLEAST8: &[u8; 4] = b"hhu\0";
+pub const SCNuLEAST16: &[u8; 3] = b"hu\0";
+pub const SCNuLEAST32: &[u8; 2] = b"u\0";
+pub const SCNuLEAST64: &[u8; 3] = b"lu\0";
+pub const SCNuFAST8: &[u8; 4] = b"hhu\0";
+pub const SCNuFAST16: &[u8; 3] = b"lu\0";
+pub const SCNuFAST32: &[u8; 3] = b"lu\0";
+pub const SCNuFAST64: &[u8; 3] = b"lu\0";
+pub const SCNo8: &[u8; 4] = b"hho\0";
+pub const SCNo16: &[u8; 3] = b"ho\0";
+pub const SCNo32: &[u8; 2] = b"o\0";
+pub const SCNo64: &[u8; 3] = b"lo\0";
+pub const SCNoLEAST8: &[u8; 4] = b"hho\0";
+pub const SCNoLEAST16: &[u8; 3] = b"ho\0";
+pub const SCNoLEAST32: &[u8; 2] = b"o\0";
+pub const SCNoLEAST64: &[u8; 3] = b"lo\0";
+pub const SCNoFAST8: &[u8; 4] = b"hho\0";
+pub const SCNoFAST16: &[u8; 3] = b"lo\0";
+pub const SCNoFAST32: &[u8; 3] = b"lo\0";
+pub const SCNoFAST64: &[u8; 3] = b"lo\0";
+pub const SCNx8: &[u8; 4] = b"hhx\0";
+pub const SCNx16: &[u8; 3] = b"hx\0";
+pub const SCNx32: &[u8; 2] = b"x\0";
+pub const SCNx64: &[u8; 3] = b"lx\0";
+pub const SCNxLEAST8: &[u8; 4] = b"hhx\0";
+pub const SCNxLEAST16: &[u8; 3] = b"hx\0";
+pub const SCNxLEAST32: &[u8; 2] = b"x\0";
+pub const SCNxLEAST64: &[u8; 3] = b"lx\0";
+pub const SCNxFAST8: &[u8; 4] = b"hhx\0";
+pub const SCNxFAST16: &[u8; 3] = b"lx\0";
+pub const SCNxFAST32: &[u8; 3] = b"lx\0";
+pub const SCNxFAST64: &[u8; 3] = b"lx\0";
+pub const SCNdMAX: &[u8; 3] = b"ld\0";
+pub const SCNiMAX: &[u8; 3] = b"li\0";
+pub const SCNoMAX: &[u8; 3] = b"lo\0";
+pub const SCNuMAX: &[u8; 3] = b"lu\0";
+pub const SCNxMAX: &[u8; 3] = b"lx\0";
+pub const SCNdPTR: &[u8; 3] = b"ld\0";
+pub const SCNiPTR: &[u8; 3] = b"li\0";
+pub const SCNoPTR: &[u8; 3] = b"lo\0";
+pub const SCNuPTR: &[u8; 3] = b"lu\0";
+pub const SCNxPTR: &[u8; 3] = b"lx\0";
+pub const _STDLIB_H: u32 = 1;
+pub const WNOHANG: u32 = 1;
+pub const WUNTRACED: u32 = 2;
+pub const WSTOPPED: u32 = 2;
+pub const WEXITED: u32 = 4;
+pub const WCONTINUED: u32 = 8;
+pub const WNOWAIT: u32 = 16777216;
+pub const __WNOTHREAD: u32 = 536870912;
+pub const __WALL: u32 = 1073741824;
+pub const __WCLONE: u32 = 2147483648;
+pub const __W_CONTINUED: u32 = 65535;
+pub const __WCOREFLAG: u32 = 128;
+pub const __HAVE_FLOAT128: u32 = 1;
+pub const __HAVE_DISTINCT_FLOAT128: u32 = 0;
+pub const __HAVE_FLOAT64X: u32 = 1;
+pub const __HAVE_FLOAT64X_LONG_DOUBLE: u32 = 1;
+pub const __HAVE_FLOAT16: u32 = 0;
+pub const __HAVE_FLOAT32: u32 = 1;
+pub const __HAVE_FLOAT64: u32 = 1;
+pub const __HAVE_FLOAT32X: u32 = 1;
+pub const __HAVE_FLOAT128X: u32 = 0;
+pub const __HAVE_DISTINCT_FLOAT16: u32 = 0;
+pub const __HAVE_DISTINCT_FLOAT32: u32 = 0;
+pub const __HAVE_DISTINCT_FLOAT64: u32 = 0;
+pub const __HAVE_DISTINCT_FLOAT32X: u32 = 0;
+pub const __HAVE_DISTINCT_FLOAT64X: u32 = 0;
+pub const __HAVE_DISTINCT_FLOAT128X: u32 = 0;
+pub const __HAVE_FLOATN_NOT_TYPEDEF: u32 = 0;
+pub const __ldiv_t_defined: u32 = 1;
+pub const __lldiv_t_defined: u32 = 1;
+pub const RAND_MAX: u32 = 2147483647;
+pub const EXIT_FAILURE: u32 = 1;
+pub const EXIT_SUCCESS: u32 = 0;
+pub const _SYS_TYPES_H: u32 = 1;
+pub const __clock_t_defined: u32 = 1;
+pub const __clockid_t_defined: u32 = 1;
+pub const __time_t_defined: u32 = 1;
+pub const __timer_t_defined: u32 = 1;
+pub const __BIT_TYPES_DEFINED__: u32 = 1;
+pub const _ENDIAN_H: u32 = 1;
+pub const _BITS_ENDIAN_H: u32 = 1;
+pub const __LITTLE_ENDIAN: u32 = 1234;
+pub const __BIG_ENDIAN: u32 = 4321;
+pub const __PDP_ENDIAN: u32 = 3412;
+pub const _BITS_ENDIANNESS_H: u32 = 1;
+pub const __BYTE_ORDER: u32 = 1234;
+pub const __FLOAT_WORD_ORDER: u32 = 1234;
+pub const LITTLE_ENDIAN: u32 = 1234;
+pub const BIG_ENDIAN: u32 = 4321;
+pub const PDP_ENDIAN: u32 = 3412;
+pub const BYTE_ORDER: u32 = 1234;
+pub const _BITS_BYTESWAP_H: u32 = 1;
+pub const _BITS_UINTN_IDENTITY_H: u32 = 1;
+pub const _SYS_SELECT_H: u32 = 1;
+pub const __sigset_t_defined: u32 = 1;
+pub const __timeval_defined: u32 = 1;
+pub const _STRUCT_TIMESPEC: u32 = 1;
+pub const FD_SETSIZE: u32 = 1024;
+pub const _BITS_PTHREADTYPES_COMMON_H: u32 = 1;
+pub const _THREAD_SHARED_TYPES_H: u32 = 1;
+pub const _BITS_PTHREADTYPES_ARCH_H: u32 = 1;
+pub const __SIZEOF_PTHREAD_MUTEXATTR_T: u32 = 4;
+pub const __SIZEOF_PTHREAD_COND_T: u32 = 48;
+pub const __SIZEOF_PTHREAD_CONDATTR_T: u32 = 4;
+pub const __SIZEOF_PTHREAD_RWLOCKATTR_T: u32 = 8;
+pub const __SIZEOF_PTHREAD_BARRIERATTR_T: u32 = 4;
+pub const __SIZEOF_PTHREAD_ATTR_T: u32 = 56;
+pub const __SIZEOF_PTHREAD_MUTEX_T: u32 = 40;
+pub const __SIZEOF_PTHREAD_RWLOCK_T: u32 = 56;
+pub const __SIZEOF_PTHREAD_BARRIER_T: u32 = 32;
+pub const _THREAD_MUTEX_INTERNAL_H: u32 = 1;
+pub const __PTHREAD_MUTEX_HAVE_PREV: u32 = 1;
+pub const __have_pthread_attr_t: u32 = 1;
+pub const _ALLOCA_H: u32 = 1;
+pub type __u_char = ::std::os::raw::c_uchar;
+pub type __u_short = ::std::os::raw::c_ushort;
+pub type __u_int = ::std::os::raw::c_uint;
+pub type __u_long = ::std::os::raw::c_ulong;
+pub type __int8_t = ::std::os::raw::c_schar;
+pub type __uint8_t = ::std::os::raw::c_uchar;
+pub type __int16_t = ::std::os::raw::c_short;
+pub type __uint16_t = ::std::os::raw::c_ushort;
+pub type __int32_t = ::std::os::raw::c_int;
+pub type __uint32_t = ::std::os::raw::c_uint;
+pub type __int64_t = ::std::os::raw::c_long;
+pub type __uint64_t = ::std::os::raw::c_ulong;
+pub type __int_least8_t = __int8_t;
+pub type __uint_least8_t = __uint8_t;
+pub type __int_least16_t = __int16_t;
+pub type __uint_least16_t = __uint16_t;
+pub type __int_least32_t = __int32_t;
+pub type __uint_least32_t = __uint32_t;
+pub type __int_least64_t = __int64_t;
+pub type __uint_least64_t = __uint64_t;
+pub type __quad_t = ::std::os::raw::c_long;
+pub type __u_quad_t = ::std::os::raw::c_ulong;
+pub type __intmax_t = ::std::os::raw::c_long;
+pub type __uintmax_t = ::std::os::raw::c_ulong;
+pub type __dev_t = ::std::os::raw::c_ulong;
+pub type __uid_t = ::std::os::raw::c_uint;
+pub type __gid_t = ::std::os::raw::c_uint;
+pub type __ino_t = ::std::os::raw::c_ulong;
+pub type __ino64_t = ::std::os::raw::c_ulong;
+pub type __mode_t = ::std::os::raw::c_uint;
+pub type __nlink_t = ::std::os::raw::c_uint;
+pub type __off_t = ::std::os::raw::c_long;
+pub type __off64_t = ::std::os::raw::c_long;
+pub type __pid_t = ::std::os::raw::c_int;
+#[repr(C)]
+#[derive(Debug, Default, Copy, Clone)]
+pub struct __fsid_t {
+    pub __val: [::std::os::raw::c_int; 2usize],
+}
+#[test]
+fn bindgen_test_layout___fsid_t() {
+    const UNINIT: ::std::mem::MaybeUninit<__fsid_t> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<__fsid_t>(),
+        8usize,
+        "Size of __fsid_t"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<__fsid_t>(),
+        4usize,
+        "Alignment of __fsid_t"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__val) as usize - ptr as usize },
+        0usize,
+        "Offset of field: __fsid_t::__val"
+    );
+}
+pub type __clock_t = ::std::os::raw::c_long;
+pub type __rlim_t = ::std::os::raw::c_ulong;
+pub type __rlim64_t = ::std::os::raw::c_ulong;
+pub type __id_t = ::std::os::raw::c_uint;
+pub type __time_t = ::std::os::raw::c_long;
+pub type __useconds_t = ::std::os::raw::c_uint;
+pub type __suseconds_t = ::std::os::raw::c_long;
+pub type __suseconds64_t = ::std::os::raw::c_long;
+pub type __daddr_t = ::std::os::raw::c_int;
+pub type __key_t = ::std::os::raw::c_int;
+pub type __clockid_t = ::std::os::raw::c_int;
+pub type __timer_t = *mut ::std::os::raw::c_void;
+pub type __blksize_t = ::std::os::raw::c_int;
+pub type __blkcnt_t = ::std::os::raw::c_long;
+pub type __blkcnt64_t = ::std::os::raw::c_long;
+pub type __fsblkcnt_t = ::std::os::raw::c_ulong;
+pub type __fsblkcnt64_t = ::std::os::raw::c_ulong;
+pub type __fsfilcnt_t = ::std::os::raw::c_ulong;
+pub type __fsfilcnt64_t = ::std::os::raw::c_ulong;
+pub type __fsword_t = ::std::os::raw::c_long;
+pub type __ssize_t = ::std::os::raw::c_long;
+pub type __syscall_slong_t = ::std::os::raw::c_long;
+pub type __syscall_ulong_t = ::std::os::raw::c_ulong;
+pub type __loff_t = __off64_t;
+pub type __caddr_t = *mut ::std::os::raw::c_char;
+pub type __intptr_t = ::std::os::raw::c_long;
+pub type __socklen_t = ::std::os::raw::c_uint;
+pub type __sig_atomic_t = ::std::os::raw::c_int;
+pub type int_least8_t = __int_least8_t;
+pub type int_least16_t = __int_least16_t;
+pub type int_least32_t = __int_least32_t;
+pub type int_least64_t = __int_least64_t;
+pub type uint_least8_t = __uint_least8_t;
+pub type uint_least16_t = __uint_least16_t;
+pub type uint_least32_t = __uint_least32_t;
+pub type uint_least64_t = __uint_least64_t;
+pub type int_fast8_t = ::std::os::raw::c_schar;
+pub type int_fast16_t = ::std::os::raw::c_long;
+pub type int_fast32_t = ::std::os::raw::c_long;
+pub type int_fast64_t = ::std::os::raw::c_long;
+pub type uint_fast8_t = ::std::os::raw::c_uchar;
+pub type uint_fast16_t = ::std::os::raw::c_ulong;
+pub type uint_fast32_t = ::std::os::raw::c_ulong;
+pub type uint_fast64_t = ::std::os::raw::c_ulong;
+pub type intmax_t = __intmax_t;
+pub type uintmax_t = __uintmax_t;
+pub type size_t = ::std::os::raw::c_ulong;
+pub type wchar_t = ::std::os::raw::c_int;
+pub type UINT8 = u8;
+pub type BYTE = u8;
+pub type INT8 = i8;
+pub type BOOL = ::std::os::raw::c_int;
+pub type UINT16 = u16;
+pub type INT16 = i16;
+pub type UINT32 = u32;
+pub type INT32 = i32;
+pub type UINT64 = u64;
+pub type INT64 = i64;
+#[repr(C)]
+#[derive(Debug, Default, Copy, Clone)]
+pub struct TSS2_ABI_VERSION {
+    pub tssCreator: u32,
+    pub tssFamily: u32,
+    pub tssLevel: u32,
+    pub tssVersion: u32,
+}
+#[test]
+fn bindgen_test_layout_TSS2_ABI_VERSION() {
+    const UNINIT: ::std::mem::MaybeUninit<TSS2_ABI_VERSION> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TSS2_ABI_VERSION>(),
+        16usize,
+        "Size of TSS2_ABI_VERSION"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TSS2_ABI_VERSION>(),
+        4usize,
+        "Alignment of TSS2_ABI_VERSION"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).tssCreator) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TSS2_ABI_VERSION::tssCreator"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).tssFamily) as usize - ptr as usize },
+        4usize,
+        "Offset of field: TSS2_ABI_VERSION::tssFamily"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).tssLevel) as usize - ptr as usize },
+        8usize,
+        "Offset of field: TSS2_ABI_VERSION::tssLevel"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).tssVersion) as usize - ptr as usize },
+        12usize,
+        "Offset of field: TSS2_ABI_VERSION::tssVersion"
+    );
+}
+pub type TSS2_RC = u32;
+pub type TPM2_ALG_ID = UINT16;
+pub type TPM2_ECC_CURVE = UINT16;
+pub type TPM2_CC = UINT32;
+pub type TPM2_ALGORITHM_ID = UINT32;
+pub type TPM2_MODIFIER_INDICATOR = UINT32;
+pub type TPM2_AUTHORIZATION_SIZE = UINT32;
+pub type TPM2_PARAMETER_SIZE = UINT32;
+pub type TPM2_KEY_SIZE = UINT16;
+pub type TPM2_KEY_BITS = UINT16;
+pub type TPM2_SPEC = UINT32;
+pub type TPM2_GENERATED = UINT32;
+pub type TPM2_RC = UINT32;
+pub type TPM2_CLOCK_ADJUST = INT8;
+pub type TPM2_EO = UINT16;
+pub type TPM2_ST = UINT16;
+pub type TPM2_SU = UINT16;
+pub type TPM2_SE = UINT8;
+pub type TPM2_CAP = UINT32;
+pub type TPM2_PT = UINT32;
+pub type TPM2_PT_PCR = UINT32;
+pub type TPM2_PS = UINT32;
+pub type TPM2_HANDLE = UINT32;
+pub type TPM2_HT = UINT8;
+pub type TPM2_RH = TPM2_HANDLE;
+pub type TPM2_HC = TPM2_HANDLE;
+pub type TPMA_ALGORITHM = u32;
+pub type TPMA_OBJECT = u32;
+pub type TPMA_SESSION = UINT8;
+pub type TPMA_LOCALITY = UINT8;
+pub type TPMA_PERMANENT = u32;
+pub type TPMA_STARTUP_CLEAR = u32;
+pub type TPMA_MEMORY = u32;
+pub type TPMA_CC = u32;
+pub type TPMA_MODES = u32;
+pub type TPMA_X509_KEY_USAGE = u32;
+pub type TPMA_ACT = u32;
+pub type TPMI_YES_NO = BYTE;
+pub type TPMI_DH_OBJECT = TPM2_HANDLE;
+pub type TPMI_DH_PARENT = TPM2_HANDLE;
+pub type TPMI_DH_PERSISTENT = TPM2_HANDLE;
+pub type TPMI_DH_ENTITY = TPM2_HANDLE;
+pub type TPMI_DH_PCR = TPM2_HANDLE;
+pub type TPMI_SH_AUTH_SESSION = TPM2_HANDLE;
+pub type TPMI_SH_HMAC = TPM2_HANDLE;
+pub type TPMI_SH_POLICY = TPM2_HANDLE;
+pub type TPMI_DH_CONTEXT = TPM2_HANDLE;
+pub type TPMI_DH_SAVED = TPM2_HANDLE;
+pub type TPMI_RH_HIERARCHY = TPM2_HANDLE;
+pub type TPMI_RH_ENABLES = TPM2_HANDLE;
+pub type TPMI_RH_HIERARCHY_AUTH = TPM2_HANDLE;
+pub type TPMI_RH_HIERARCHY_POLICY = TPM2_HANDLE;
+pub type TPMI_RH_PLATFORM = TPM2_HANDLE;
+pub type TPMI_RH_OWNER = TPM2_HANDLE;
+pub type TPMI_RH_ENDORSEMENT = TPM2_HANDLE;
+pub type TPMI_RH_PROVISION = TPM2_HANDLE;
+pub type TPMI_RH_CLEAR = TPM2_HANDLE;
+pub type TPMI_RH_NV_AUTH = TPM2_HANDLE;
+pub type TPMI_RH_LOCKOUT = TPM2_HANDLE;
+pub type TPMI_RH_NV_INDEX = TPM2_HANDLE;
+pub type TPMI_RH_AC = TPM2_HANDLE;
+pub type TPMI_RH_ACT = TPM2_HANDLE;
+pub type TPMI_ALG_HASH = TPM2_ALG_ID;
+pub type TPMI_ALG_ASYM = TPM2_ALG_ID;
+pub type TPMI_ALG_SYM = TPM2_ALG_ID;
+pub type TPMI_ALG_SYM_OBJECT = TPM2_ALG_ID;
+pub type TPMI_ALG_SYM_MODE = TPM2_ALG_ID;
+pub type TPMI_ALG_KDF = TPM2_ALG_ID;
+pub type TPMI_ALG_SIG_SCHEME = TPM2_ALG_ID;
+pub type TPMI_ECC_KEY_EXCHANGE = TPM2_ALG_ID;
+pub type TPMI_ST_COMMAND_TAG = TPM2_ST;
+pub type TPMI_ALG_MAC_SCHEME = TPM2_ALG_ID;
+pub type TPMI_ALG_CIPHER_MODE = TPM2_ALG_ID;
+#[repr(C)]
+#[derive(Debug, Default, Copy, Clone)]
+pub struct TPMS_EMPTY {
+    pub empty: [UINT8; 1usize],
+}
+#[test]
+fn bindgen_test_layout_TPMS_EMPTY() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMS_EMPTY> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMS_EMPTY>(),
+        1usize,
+        "Size of TPMS_EMPTY"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMS_EMPTY>(),
+        1usize,
+        "Alignment of TPMS_EMPTY"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).empty) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMS_EMPTY::empty"
+    );
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union TPMU_HA {
+    pub sha: [BYTE; 20usize],
+    pub sha1: [BYTE; 20usize],
+    pub sha256: [BYTE; 32usize],
+    pub sha384: [BYTE; 48usize],
+    pub sha512: [BYTE; 64usize],
+    pub sm3_256: [BYTE; 32usize],
+}
+#[test]
+fn bindgen_test_layout_TPMU_HA() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMU_HA> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(::std::mem::size_of::<TPMU_HA>(), 64usize, "Size of TPMU_HA");
+    assert_eq!(
+        ::std::mem::align_of::<TPMU_HA>(),
+        1usize,
+        "Alignment of TPMU_HA"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).sha) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_HA::sha"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).sha1) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_HA::sha1"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).sha256) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_HA::sha256"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).sha384) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_HA::sha384"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).sha512) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_HA::sha512"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).sm3_256) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_HA::sm3_256"
+    );
+}
+impl Default for TPMU_HA {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct TPMT_HA {
+    pub hashAlg: TPMI_ALG_HASH,
+    pub digest: TPMU_HA,
+}
+#[test]
+fn bindgen_test_layout_TPMT_HA() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMT_HA> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(::std::mem::size_of::<TPMT_HA>(), 66usize, "Size of TPMT_HA");
+    assert_eq!(
+        ::std::mem::align_of::<TPMT_HA>(),
+        2usize,
+        "Alignment of TPMT_HA"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).hashAlg) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMT_HA::hashAlg"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).digest) as usize - ptr as usize },
+        2usize,
+        "Offset of field: TPMT_HA::digest"
+    );
+}
+impl Default for TPMT_HA {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPM2B_DIGEST {
+    pub size: UINT16,
+    pub buffer: [BYTE; 64usize],
+}
+#[test]
+fn bindgen_test_layout_TPM2B_DIGEST() {
+    const UNINIT: ::std::mem::MaybeUninit<TPM2B_DIGEST> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPM2B_DIGEST>(),
+        66usize,
+        "Size of TPM2B_DIGEST"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPM2B_DIGEST>(),
+        2usize,
+        "Alignment of TPM2B_DIGEST"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).size) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPM2B_DIGEST::size"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).buffer) as usize - ptr as usize },
+        2usize,
+        "Offset of field: TPM2B_DIGEST::buffer"
+    );
+}
+impl Default for TPM2B_DIGEST {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPM2B_DATA {
+    pub size: UINT16,
+    pub buffer: [BYTE; 64usize],
+}
+#[test]
+fn bindgen_test_layout_TPM2B_DATA() {
+    const UNINIT: ::std::mem::MaybeUninit<TPM2B_DATA> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPM2B_DATA>(),
+        66usize,
+        "Size of TPM2B_DATA"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPM2B_DATA>(),
+        2usize,
+        "Alignment of TPM2B_DATA"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).size) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPM2B_DATA::size"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).buffer) as usize - ptr as usize },
+        2usize,
+        "Offset of field: TPM2B_DATA::buffer"
+    );
+}
+impl Default for TPM2B_DATA {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+pub type TPM2B_NONCE = TPM2B_DIGEST;
+pub type TPM2B_AUTH = TPM2B_DIGEST;
+pub type TPM2B_OPERAND = TPM2B_DIGEST;
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPM2B_EVENT {
+    pub size: UINT16,
+    pub buffer: [BYTE; 1024usize],
+}
+#[test]
+fn bindgen_test_layout_TPM2B_EVENT() {
+    const UNINIT: ::std::mem::MaybeUninit<TPM2B_EVENT> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPM2B_EVENT>(),
+        1026usize,
+        "Size of TPM2B_EVENT"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPM2B_EVENT>(),
+        2usize,
+        "Alignment of TPM2B_EVENT"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).size) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPM2B_EVENT::size"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).buffer) as usize - ptr as usize },
+        2usize,
+        "Offset of field: TPM2B_EVENT::buffer"
+    );
+}
+impl Default for TPM2B_EVENT {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPM2B_MAX_BUFFER {
+    pub size: UINT16,
+    pub buffer: [BYTE; 1024usize],
+}
+#[test]
+fn bindgen_test_layout_TPM2B_MAX_BUFFER() {
+    const UNINIT: ::std::mem::MaybeUninit<TPM2B_MAX_BUFFER> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPM2B_MAX_BUFFER>(),
+        1026usize,
+        "Size of TPM2B_MAX_BUFFER"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPM2B_MAX_BUFFER>(),
+        2usize,
+        "Alignment of TPM2B_MAX_BUFFER"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).size) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPM2B_MAX_BUFFER::size"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).buffer) as usize - ptr as usize },
+        2usize,
+        "Offset of field: TPM2B_MAX_BUFFER::buffer"
+    );
+}
+impl Default for TPM2B_MAX_BUFFER {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPM2B_MAX_NV_BUFFER {
+    pub size: UINT16,
+    pub buffer: [BYTE; 2048usize],
+}
+#[test]
+fn bindgen_test_layout_TPM2B_MAX_NV_BUFFER() {
+    const UNINIT: ::std::mem::MaybeUninit<TPM2B_MAX_NV_BUFFER> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPM2B_MAX_NV_BUFFER>(),
+        2050usize,
+        "Size of TPM2B_MAX_NV_BUFFER"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPM2B_MAX_NV_BUFFER>(),
+        2usize,
+        "Alignment of TPM2B_MAX_NV_BUFFER"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).size) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPM2B_MAX_NV_BUFFER::size"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).buffer) as usize - ptr as usize },
+        2usize,
+        "Offset of field: TPM2B_MAX_NV_BUFFER::buffer"
+    );
+}
+impl Default for TPM2B_MAX_NV_BUFFER {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+pub type TPM2B_TIMEOUT = TPM2B_DIGEST;
+#[repr(C)]
+#[derive(Debug, Default, Copy, Clone)]
+pub struct TPM2B_IV {
+    pub size: UINT16,
+    pub buffer: [BYTE; 16usize],
+}
+#[test]
+fn bindgen_test_layout_TPM2B_IV() {
+    const UNINIT: ::std::mem::MaybeUninit<TPM2B_IV> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPM2B_IV>(),
+        18usize,
+        "Size of TPM2B_IV"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPM2B_IV>(),
+        2usize,
+        "Alignment of TPM2B_IV"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).size) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPM2B_IV::size"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).buffer) as usize - ptr as usize },
+        2usize,
+        "Offset of field: TPM2B_IV::buffer"
+    );
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union TPMU_NAME {
+    pub digest: TPMT_HA,
+    pub handle: TPM2_HANDLE,
+}
+#[test]
+fn bindgen_test_layout_TPMU_NAME() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMU_NAME> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMU_NAME>(),
+        68usize,
+        "Size of TPMU_NAME"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMU_NAME>(),
+        4usize,
+        "Alignment of TPMU_NAME"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).digest) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_NAME::digest"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).handle) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_NAME::handle"
+    );
+}
+impl Default for TPMU_NAME {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPM2B_NAME {
+    pub size: UINT16,
+    pub name: [BYTE; 68usize],
+}
+#[test]
+fn bindgen_test_layout_TPM2B_NAME() {
+    const UNINIT: ::std::mem::MaybeUninit<TPM2B_NAME> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPM2B_NAME>(),
+        70usize,
+        "Size of TPM2B_NAME"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPM2B_NAME>(),
+        2usize,
+        "Alignment of TPM2B_NAME"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).size) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPM2B_NAME::size"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).name) as usize - ptr as usize },
+        2usize,
+        "Offset of field: TPM2B_NAME::name"
+    );
+}
+impl Default for TPM2B_NAME {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy, Clone)]
+pub struct TPMS_PCR_SELECT {
+    pub sizeofSelect: UINT8,
+    pub pcrSelect: [BYTE; 4usize],
+}
+#[test]
+fn bindgen_test_layout_TPMS_PCR_SELECT() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMS_PCR_SELECT> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMS_PCR_SELECT>(),
+        5usize,
+        "Size of TPMS_PCR_SELECT"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMS_PCR_SELECT>(),
+        1usize,
+        "Alignment of TPMS_PCR_SELECT"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).sizeofSelect) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMS_PCR_SELECT::sizeofSelect"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).pcrSelect) as usize - ptr as usize },
+        1usize,
+        "Offset of field: TPMS_PCR_SELECT::pcrSelect"
+    );
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy, Clone)]
+pub struct TPMS_PCR_SELECTION {
+    pub hash: TPMI_ALG_HASH,
+    pub sizeofSelect: UINT8,
+    pub pcrSelect: [BYTE; 4usize],
+}
+#[test]
+fn bindgen_test_layout_TPMS_PCR_SELECTION() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMS_PCR_SELECTION> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMS_PCR_SELECTION>(),
+        8usize,
+        "Size of TPMS_PCR_SELECTION"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMS_PCR_SELECTION>(),
+        2usize,
+        "Alignment of TPMS_PCR_SELECTION"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).hash) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMS_PCR_SELECTION::hash"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).sizeofSelect) as usize - ptr as usize },
+        2usize,
+        "Offset of field: TPMS_PCR_SELECTION::sizeofSelect"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).pcrSelect) as usize - ptr as usize },
+        3usize,
+        "Offset of field: TPMS_PCR_SELECTION::pcrSelect"
+    );
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPMT_TK_CREATION {
+    pub tag: TPM2_ST,
+    pub hierarchy: TPMI_RH_HIERARCHY,
+    pub digest: TPM2B_DIGEST,
+}
+#[test]
+fn bindgen_test_layout_TPMT_TK_CREATION() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMT_TK_CREATION> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMT_TK_CREATION>(),
+        76usize,
+        "Size of TPMT_TK_CREATION"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMT_TK_CREATION>(),
+        4usize,
+        "Alignment of TPMT_TK_CREATION"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).tag) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMT_TK_CREATION::tag"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).hierarchy) as usize - ptr as usize },
+        4usize,
+        "Offset of field: TPMT_TK_CREATION::hierarchy"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).digest) as usize - ptr as usize },
+        8usize,
+        "Offset of field: TPMT_TK_CREATION::digest"
+    );
+}
+impl Default for TPMT_TK_CREATION {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPMT_TK_VERIFIED {
+    pub tag: TPM2_ST,
+    pub hierarchy: TPMI_RH_HIERARCHY,
+    pub digest: TPM2B_DIGEST,
+}
+#[test]
+fn bindgen_test_layout_TPMT_TK_VERIFIED() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMT_TK_VERIFIED> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMT_TK_VERIFIED>(),
+        76usize,
+        "Size of TPMT_TK_VERIFIED"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMT_TK_VERIFIED>(),
+        4usize,
+        "Alignment of TPMT_TK_VERIFIED"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).tag) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMT_TK_VERIFIED::tag"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).hierarchy) as usize - ptr as usize },
+        4usize,
+        "Offset of field: TPMT_TK_VERIFIED::hierarchy"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).digest) as usize - ptr as usize },
+        8usize,
+        "Offset of field: TPMT_TK_VERIFIED::digest"
+    );
+}
+impl Default for TPMT_TK_VERIFIED {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPMT_TK_AUTH {
+    pub tag: TPM2_ST,
+    pub hierarchy: TPMI_RH_HIERARCHY,
+    pub digest: TPM2B_DIGEST,
+}
+#[test]
+fn bindgen_test_layout_TPMT_TK_AUTH() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMT_TK_AUTH> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMT_TK_AUTH>(),
+        76usize,
+        "Size of TPMT_TK_AUTH"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMT_TK_AUTH>(),
+        4usize,
+        "Alignment of TPMT_TK_AUTH"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).tag) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMT_TK_AUTH::tag"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).hierarchy) as usize - ptr as usize },
+        4usize,
+        "Offset of field: TPMT_TK_AUTH::hierarchy"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).digest) as usize - ptr as usize },
+        8usize,
+        "Offset of field: TPMT_TK_AUTH::digest"
+    );
+}
+impl Default for TPMT_TK_AUTH {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPMT_TK_HASHCHECK {
+    pub tag: TPM2_ST,
+    pub hierarchy: TPMI_RH_HIERARCHY,
+    pub digest: TPM2B_DIGEST,
+}
+#[test]
+fn bindgen_test_layout_TPMT_TK_HASHCHECK() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMT_TK_HASHCHECK> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMT_TK_HASHCHECK>(),
+        76usize,
+        "Size of TPMT_TK_HASHCHECK"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMT_TK_HASHCHECK>(),
+        4usize,
+        "Alignment of TPMT_TK_HASHCHECK"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).tag) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMT_TK_HASHCHECK::tag"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).hierarchy) as usize - ptr as usize },
+        4usize,
+        "Offset of field: TPMT_TK_HASHCHECK::hierarchy"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).digest) as usize - ptr as usize },
+        8usize,
+        "Offset of field: TPMT_TK_HASHCHECK::digest"
+    );
+}
+impl Default for TPMT_TK_HASHCHECK {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy, Clone)]
+pub struct TPMS_ALG_PROPERTY {
+    pub alg: TPM2_ALG_ID,
+    pub algProperties: TPMA_ALGORITHM,
+}
+#[test]
+fn bindgen_test_layout_TPMS_ALG_PROPERTY() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMS_ALG_PROPERTY> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMS_ALG_PROPERTY>(),
+        8usize,
+        "Size of TPMS_ALG_PROPERTY"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMS_ALG_PROPERTY>(),
+        4usize,
+        "Alignment of TPMS_ALG_PROPERTY"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).alg) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMS_ALG_PROPERTY::alg"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).algProperties) as usize - ptr as usize },
+        4usize,
+        "Offset of field: TPMS_ALG_PROPERTY::algProperties"
+    );
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy, Clone)]
+pub struct TPMS_TAGGED_PROPERTY {
+    pub property: TPM2_PT,
+    pub value: UINT32,
+}
+#[test]
+fn bindgen_test_layout_TPMS_TAGGED_PROPERTY() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMS_TAGGED_PROPERTY> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMS_TAGGED_PROPERTY>(),
+        8usize,
+        "Size of TPMS_TAGGED_PROPERTY"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMS_TAGGED_PROPERTY>(),
+        4usize,
+        "Alignment of TPMS_TAGGED_PROPERTY"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).property) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMS_TAGGED_PROPERTY::property"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).value) as usize - ptr as usize },
+        4usize,
+        "Offset of field: TPMS_TAGGED_PROPERTY::value"
+    );
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy, Clone)]
+pub struct TPMS_TAGGED_PCR_SELECT {
+    pub tag: TPM2_PT_PCR,
+    pub sizeofSelect: UINT8,
+    pub pcrSelect: [BYTE; 4usize],
+}
+#[test]
+fn bindgen_test_layout_TPMS_TAGGED_PCR_SELECT() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMS_TAGGED_PCR_SELECT> =
+        ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMS_TAGGED_PCR_SELECT>(),
+        12usize,
+        "Size of TPMS_TAGGED_PCR_SELECT"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMS_TAGGED_PCR_SELECT>(),
+        4usize,
+        "Alignment of TPMS_TAGGED_PCR_SELECT"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).tag) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMS_TAGGED_PCR_SELECT::tag"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).sizeofSelect) as usize - ptr as usize },
+        4usize,
+        "Offset of field: TPMS_TAGGED_PCR_SELECT::sizeofSelect"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).pcrSelect) as usize - ptr as usize },
+        5usize,
+        "Offset of field: TPMS_TAGGED_PCR_SELECT::pcrSelect"
+    );
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct TPMS_TAGGED_POLICY {
+    pub handle: TPM2_HANDLE,
+    pub policyHash: TPMT_HA,
+}
+#[test]
+fn bindgen_test_layout_TPMS_TAGGED_POLICY() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMS_TAGGED_POLICY> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMS_TAGGED_POLICY>(),
+        72usize,
+        "Size of TPMS_TAGGED_POLICY"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMS_TAGGED_POLICY>(),
+        4usize,
+        "Alignment of TPMS_TAGGED_POLICY"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).handle) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMS_TAGGED_POLICY::handle"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).policyHash) as usize - ptr as usize },
+        4usize,
+        "Offset of field: TPMS_TAGGED_POLICY::policyHash"
+    );
+}
+impl Default for TPMS_TAGGED_POLICY {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy, Clone)]
+pub struct TPMS_ACT_DATA {
+    pub handle: TPM2_HANDLE,
+    pub timeout: UINT32,
+    pub attributes: TPMA_ACT,
+}
+#[test]
+fn bindgen_test_layout_TPMS_ACT_DATA() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMS_ACT_DATA> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMS_ACT_DATA>(),
+        12usize,
+        "Size of TPMS_ACT_DATA"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMS_ACT_DATA>(),
+        4usize,
+        "Alignment of TPMS_ACT_DATA"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).handle) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMS_ACT_DATA::handle"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).timeout) as usize - ptr as usize },
+        4usize,
+        "Offset of field: TPMS_ACT_DATA::timeout"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).attributes) as usize - ptr as usize },
+        8usize,
+        "Offset of field: TPMS_ACT_DATA::attributes"
+    );
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPML_CC {
+    pub count: UINT32,
+    pub commandCodes: [TPM2_CC; 256usize],
+}
+#[test]
+fn bindgen_test_layout_TPML_CC() {
+    const UNINIT: ::std::mem::MaybeUninit<TPML_CC> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPML_CC>(),
+        1028usize,
+        "Size of TPML_CC"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPML_CC>(),
+        4usize,
+        "Alignment of TPML_CC"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).count) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPML_CC::count"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).commandCodes) as usize - ptr as usize },
+        4usize,
+        "Offset of field: TPML_CC::commandCodes"
+    );
+}
+impl Default for TPML_CC {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPML_CCA {
+    pub count: UINT32,
+    pub commandAttributes: [TPMA_CC; 256usize],
+}
+#[test]
+fn bindgen_test_layout_TPML_CCA() {
+    const UNINIT: ::std::mem::MaybeUninit<TPML_CCA> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPML_CCA>(),
+        1028usize,
+        "Size of TPML_CCA"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPML_CCA>(),
+        4usize,
+        "Alignment of TPML_CCA"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).count) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPML_CCA::count"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).commandAttributes) as usize - ptr as usize },
+        4usize,
+        "Offset of field: TPML_CCA::commandAttributes"
+    );
+}
+impl Default for TPML_CCA {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPML_ALG {
+    pub count: UINT32,
+    pub algorithms: [TPM2_ALG_ID; 128usize],
+}
+#[test]
+fn bindgen_test_layout_TPML_ALG() {
+    const UNINIT: ::std::mem::MaybeUninit<TPML_ALG> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPML_ALG>(),
+        260usize,
+        "Size of TPML_ALG"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPML_ALG>(),
+        4usize,
+        "Alignment of TPML_ALG"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).count) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPML_ALG::count"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).algorithms) as usize - ptr as usize },
+        4usize,
+        "Offset of field: TPML_ALG::algorithms"
+    );
+}
+impl Default for TPML_ALG {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPML_HANDLE {
+    pub count: UINT32,
+    pub handle: [TPM2_HANDLE; 254usize],
+}
+#[test]
+fn bindgen_test_layout_TPML_HANDLE() {
+    const UNINIT: ::std::mem::MaybeUninit<TPML_HANDLE> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPML_HANDLE>(),
+        1020usize,
+        "Size of TPML_HANDLE"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPML_HANDLE>(),
+        4usize,
+        "Alignment of TPML_HANDLE"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).count) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPML_HANDLE::count"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).handle) as usize - ptr as usize },
+        4usize,
+        "Offset of field: TPML_HANDLE::handle"
+    );
+}
+impl Default for TPML_HANDLE {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPML_DIGEST {
+    pub count: UINT32,
+    pub digests: [TPM2B_DIGEST; 8usize],
+}
+#[test]
+fn bindgen_test_layout_TPML_DIGEST() {
+    const UNINIT: ::std::mem::MaybeUninit<TPML_DIGEST> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPML_DIGEST>(),
+        532usize,
+        "Size of TPML_DIGEST"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPML_DIGEST>(),
+        4usize,
+        "Alignment of TPML_DIGEST"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).count) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPML_DIGEST::count"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).digests) as usize - ptr as usize },
+        4usize,
+        "Offset of field: TPML_DIGEST::digests"
+    );
+}
+impl Default for TPML_DIGEST {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct TPML_DIGEST_VALUES {
+    pub count: UINT32,
+    pub digests: [TPMT_HA; 16usize],
+}
+#[test]
+fn bindgen_test_layout_TPML_DIGEST_VALUES() {
+    const UNINIT: ::std::mem::MaybeUninit<TPML_DIGEST_VALUES> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPML_DIGEST_VALUES>(),
+        1060usize,
+        "Size of TPML_DIGEST_VALUES"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPML_DIGEST_VALUES>(),
+        4usize,
+        "Alignment of TPML_DIGEST_VALUES"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).count) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPML_DIGEST_VALUES::count"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).digests) as usize - ptr as usize },
+        4usize,
+        "Offset of field: TPML_DIGEST_VALUES::digests"
+    );
+}
+impl Default for TPML_DIGEST_VALUES {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy, Clone)]
+pub struct TPML_PCR_SELECTION {
+    pub count: UINT32,
+    pub pcrSelections: [TPMS_PCR_SELECTION; 16usize],
+}
+#[test]
+fn bindgen_test_layout_TPML_PCR_SELECTION() {
+    const UNINIT: ::std::mem::MaybeUninit<TPML_PCR_SELECTION> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPML_PCR_SELECTION>(),
+        132usize,
+        "Size of TPML_PCR_SELECTION"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPML_PCR_SELECTION>(),
+        4usize,
+        "Alignment of TPML_PCR_SELECTION"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).count) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPML_PCR_SELECTION::count"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).pcrSelections) as usize - ptr as usize },
+        4usize,
+        "Offset of field: TPML_PCR_SELECTION::pcrSelections"
+    );
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPML_ALG_PROPERTY {
+    pub count: UINT32,
+    pub algProperties: [TPMS_ALG_PROPERTY; 127usize],
+}
+#[test]
+fn bindgen_test_layout_TPML_ALG_PROPERTY() {
+    const UNINIT: ::std::mem::MaybeUninit<TPML_ALG_PROPERTY> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPML_ALG_PROPERTY>(),
+        1020usize,
+        "Size of TPML_ALG_PROPERTY"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPML_ALG_PROPERTY>(),
+        4usize,
+        "Alignment of TPML_ALG_PROPERTY"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).count) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPML_ALG_PROPERTY::count"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).algProperties) as usize - ptr as usize },
+        4usize,
+        "Offset of field: TPML_ALG_PROPERTY::algProperties"
+    );
+}
+impl Default for TPML_ALG_PROPERTY {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPML_TAGGED_TPM_PROPERTY {
+    pub count: UINT32,
+    pub tpmProperty: [TPMS_TAGGED_PROPERTY; 127usize],
+}
+#[test]
+fn bindgen_test_layout_TPML_TAGGED_TPM_PROPERTY() {
+    const UNINIT: ::std::mem::MaybeUninit<TPML_TAGGED_TPM_PROPERTY> =
+        ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPML_TAGGED_TPM_PROPERTY>(),
+        1020usize,
+        "Size of TPML_TAGGED_TPM_PROPERTY"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPML_TAGGED_TPM_PROPERTY>(),
+        4usize,
+        "Alignment of TPML_TAGGED_TPM_PROPERTY"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).count) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPML_TAGGED_TPM_PROPERTY::count"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).tpmProperty) as usize - ptr as usize },
+        4usize,
+        "Offset of field: TPML_TAGGED_TPM_PROPERTY::tpmProperty"
+    );
+}
+impl Default for TPML_TAGGED_TPM_PROPERTY {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPML_TAGGED_PCR_PROPERTY {
+    pub count: UINT32,
+    pub pcrProperty: [TPMS_TAGGED_PCR_SELECT; 84usize],
+}
+#[test]
+fn bindgen_test_layout_TPML_TAGGED_PCR_PROPERTY() {
+    const UNINIT: ::std::mem::MaybeUninit<TPML_TAGGED_PCR_PROPERTY> =
+        ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPML_TAGGED_PCR_PROPERTY>(),
+        1012usize,
+        "Size of TPML_TAGGED_PCR_PROPERTY"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPML_TAGGED_PCR_PROPERTY>(),
+        4usize,
+        "Alignment of TPML_TAGGED_PCR_PROPERTY"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).count) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPML_TAGGED_PCR_PROPERTY::count"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).pcrProperty) as usize - ptr as usize },
+        4usize,
+        "Offset of field: TPML_TAGGED_PCR_PROPERTY::pcrProperty"
+    );
+}
+impl Default for TPML_TAGGED_PCR_PROPERTY {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPML_ECC_CURVE {
+    pub count: UINT32,
+    pub eccCurves: [TPM2_ECC_CURVE; 508usize],
+}
+#[test]
+fn bindgen_test_layout_TPML_ECC_CURVE() {
+    const UNINIT: ::std::mem::MaybeUninit<TPML_ECC_CURVE> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPML_ECC_CURVE>(),
+        1020usize,
+        "Size of TPML_ECC_CURVE"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPML_ECC_CURVE>(),
+        4usize,
+        "Alignment of TPML_ECC_CURVE"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).count) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPML_ECC_CURVE::count"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).eccCurves) as usize - ptr as usize },
+        4usize,
+        "Offset of field: TPML_ECC_CURVE::eccCurves"
+    );
+}
+impl Default for TPML_ECC_CURVE {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct TPML_TAGGED_POLICY {
+    pub count: UINT32,
+    pub policies: [TPMS_TAGGED_POLICY; 14usize],
+}
+#[test]
+fn bindgen_test_layout_TPML_TAGGED_POLICY() {
+    const UNINIT: ::std::mem::MaybeUninit<TPML_TAGGED_POLICY> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPML_TAGGED_POLICY>(),
+        1012usize,
+        "Size of TPML_TAGGED_POLICY"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPML_TAGGED_POLICY>(),
+        4usize,
+        "Alignment of TPML_TAGGED_POLICY"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).count) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPML_TAGGED_POLICY::count"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).policies) as usize - ptr as usize },
+        4usize,
+        "Offset of field: TPML_TAGGED_POLICY::policies"
+    );
+}
+impl Default for TPML_TAGGED_POLICY {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPML_ACT_DATA {
+    pub count: UINT32,
+    pub actData: [TPMS_ACT_DATA; 84usize],
+}
+#[test]
+fn bindgen_test_layout_TPML_ACT_DATA() {
+    const UNINIT: ::std::mem::MaybeUninit<TPML_ACT_DATA> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPML_ACT_DATA>(),
+        1012usize,
+        "Size of TPML_ACT_DATA"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPML_ACT_DATA>(),
+        4usize,
+        "Alignment of TPML_ACT_DATA"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).count) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPML_ACT_DATA::count"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).actData) as usize - ptr as usize },
+        4usize,
+        "Offset of field: TPML_ACT_DATA::actData"
+    );
+}
+impl Default for TPML_ACT_DATA {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPM2B_MAX_CAP_BUFFER {
+    pub size: UINT16,
+    pub buffer: [BYTE; 1024usize],
+}
+#[test]
+fn bindgen_test_layout_TPM2B_MAX_CAP_BUFFER() {
+    const UNINIT: ::std::mem::MaybeUninit<TPM2B_MAX_CAP_BUFFER> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPM2B_MAX_CAP_BUFFER>(),
+        1026usize,
+        "Size of TPM2B_MAX_CAP_BUFFER"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPM2B_MAX_CAP_BUFFER>(),
+        2usize,
+        "Alignment of TPM2B_MAX_CAP_BUFFER"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).size) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPM2B_MAX_CAP_BUFFER::size"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).buffer) as usize - ptr as usize },
+        2usize,
+        "Offset of field: TPM2B_MAX_CAP_BUFFER::buffer"
+    );
+}
+impl Default for TPM2B_MAX_CAP_BUFFER {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union TPMU_CAPABILITIES {
+    pub algorithms: TPML_ALG_PROPERTY,
+    pub handles: TPML_HANDLE,
+    pub command: TPML_CCA,
+    pub ppCommands: TPML_CC,
+    pub auditCommands: TPML_CC,
+    pub assignedPCR: TPML_PCR_SELECTION,
+    pub tpmProperties: TPML_TAGGED_TPM_PROPERTY,
+    pub pcrProperties: TPML_TAGGED_PCR_PROPERTY,
+    pub eccCurves: TPML_ECC_CURVE,
+    pub authPolicies: TPML_TAGGED_POLICY,
+    pub actData: TPML_ACT_DATA,
+    pub vendor: TPM2B_MAX_CAP_BUFFER,
+}
+#[test]
+fn bindgen_test_layout_TPMU_CAPABILITIES() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMU_CAPABILITIES> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMU_CAPABILITIES>(),
+        1028usize,
+        "Size of TPMU_CAPABILITIES"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMU_CAPABILITIES>(),
+        4usize,
+        "Alignment of TPMU_CAPABILITIES"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).algorithms) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_CAPABILITIES::algorithms"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).handles) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_CAPABILITIES::handles"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).command) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_CAPABILITIES::command"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).ppCommands) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_CAPABILITIES::ppCommands"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).auditCommands) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_CAPABILITIES::auditCommands"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).assignedPCR) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_CAPABILITIES::assignedPCR"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).tpmProperties) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_CAPABILITIES::tpmProperties"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).pcrProperties) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_CAPABILITIES::pcrProperties"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).eccCurves) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_CAPABILITIES::eccCurves"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).authPolicies) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_CAPABILITIES::authPolicies"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).actData) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_CAPABILITIES::actData"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).vendor) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_CAPABILITIES::vendor"
+    );
+}
+impl Default for TPMU_CAPABILITIES {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct TPMS_CAPABILITY_DATA {
+    pub capability: TPM2_CAP,
+    pub data: TPMU_CAPABILITIES,
+}
+#[test]
+fn bindgen_test_layout_TPMS_CAPABILITY_DATA() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMS_CAPABILITY_DATA> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMS_CAPABILITY_DATA>(),
+        1032usize,
+        "Size of TPMS_CAPABILITY_DATA"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMS_CAPABILITY_DATA>(),
+        4usize,
+        "Alignment of TPMS_CAPABILITY_DATA"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).capability) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMS_CAPABILITY_DATA::capability"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).data) as usize - ptr as usize },
+        4usize,
+        "Offset of field: TPMS_CAPABILITY_DATA::data"
+    );
+}
+impl Default for TPMS_CAPABILITY_DATA {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy, Clone)]
+pub struct TPMS_CLOCK_INFO {
+    pub clock: UINT64,
+    pub resetCount: UINT32,
+    pub restartCount: UINT32,
+    pub safe: TPMI_YES_NO,
+}
+#[test]
+fn bindgen_test_layout_TPMS_CLOCK_INFO() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMS_CLOCK_INFO> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMS_CLOCK_INFO>(),
+        24usize,
+        "Size of TPMS_CLOCK_INFO"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMS_CLOCK_INFO>(),
+        8usize,
+        "Alignment of TPMS_CLOCK_INFO"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).clock) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMS_CLOCK_INFO::clock"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).resetCount) as usize - ptr as usize },
+        8usize,
+        "Offset of field: TPMS_CLOCK_INFO::resetCount"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).restartCount) as usize - ptr as usize },
+        12usize,
+        "Offset of field: TPMS_CLOCK_INFO::restartCount"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).safe) as usize - ptr as usize },
+        16usize,
+        "Offset of field: TPMS_CLOCK_INFO::safe"
+    );
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy, Clone)]
+pub struct TPMS_TIME_INFO {
+    pub time: UINT64,
+    pub clockInfo: TPMS_CLOCK_INFO,
+}
+#[test]
+fn bindgen_test_layout_TPMS_TIME_INFO() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMS_TIME_INFO> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMS_TIME_INFO>(),
+        32usize,
+        "Size of TPMS_TIME_INFO"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMS_TIME_INFO>(),
+        8usize,
+        "Alignment of TPMS_TIME_INFO"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).time) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMS_TIME_INFO::time"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).clockInfo) as usize - ptr as usize },
+        8usize,
+        "Offset of field: TPMS_TIME_INFO::clockInfo"
+    );
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy, Clone)]
+pub struct TPMS_TIME_ATTEST_INFO {
+    pub time: TPMS_TIME_INFO,
+    pub firmwareVersion: UINT64,
+}
+#[test]
+fn bindgen_test_layout_TPMS_TIME_ATTEST_INFO() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMS_TIME_ATTEST_INFO> =
+        ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMS_TIME_ATTEST_INFO>(),
+        40usize,
+        "Size of TPMS_TIME_ATTEST_INFO"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMS_TIME_ATTEST_INFO>(),
+        8usize,
+        "Alignment of TPMS_TIME_ATTEST_INFO"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).time) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMS_TIME_ATTEST_INFO::time"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).firmwareVersion) as usize - ptr as usize },
+        32usize,
+        "Offset of field: TPMS_TIME_ATTEST_INFO::firmwareVersion"
+    );
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPMS_CERTIFY_INFO {
+    pub name: TPM2B_NAME,
+    pub qualifiedName: TPM2B_NAME,
+}
+#[test]
+fn bindgen_test_layout_TPMS_CERTIFY_INFO() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMS_CERTIFY_INFO> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMS_CERTIFY_INFO>(),
+        140usize,
+        "Size of TPMS_CERTIFY_INFO"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMS_CERTIFY_INFO>(),
+        2usize,
+        "Alignment of TPMS_CERTIFY_INFO"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).name) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMS_CERTIFY_INFO::name"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).qualifiedName) as usize - ptr as usize },
+        70usize,
+        "Offset of field: TPMS_CERTIFY_INFO::qualifiedName"
+    );
+}
+impl Default for TPMS_CERTIFY_INFO {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPMS_QUOTE_INFO {
+    pub pcrSelect: TPML_PCR_SELECTION,
+    pub pcrDigest: TPM2B_DIGEST,
+}
+#[test]
+fn bindgen_test_layout_TPMS_QUOTE_INFO() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMS_QUOTE_INFO> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMS_QUOTE_INFO>(),
+        200usize,
+        "Size of TPMS_QUOTE_INFO"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMS_QUOTE_INFO>(),
+        4usize,
+        "Alignment of TPMS_QUOTE_INFO"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).pcrSelect) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMS_QUOTE_INFO::pcrSelect"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).pcrDigest) as usize - ptr as usize },
+        132usize,
+        "Offset of field: TPMS_QUOTE_INFO::pcrDigest"
+    );
+}
+impl Default for TPMS_QUOTE_INFO {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPMS_COMMAND_AUDIT_INFO {
+    pub auditCounter: UINT64,
+    pub digestAlg: TPM2_ALG_ID,
+    pub auditDigest: TPM2B_DIGEST,
+    pub commandDigest: TPM2B_DIGEST,
+}
+#[test]
+fn bindgen_test_layout_TPMS_COMMAND_AUDIT_INFO() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMS_COMMAND_AUDIT_INFO> =
+        ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMS_COMMAND_AUDIT_INFO>(),
+        144usize,
+        "Size of TPMS_COMMAND_AUDIT_INFO"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMS_COMMAND_AUDIT_INFO>(),
+        8usize,
+        "Alignment of TPMS_COMMAND_AUDIT_INFO"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).auditCounter) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMS_COMMAND_AUDIT_INFO::auditCounter"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).digestAlg) as usize - ptr as usize },
+        8usize,
+        "Offset of field: TPMS_COMMAND_AUDIT_INFO::digestAlg"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).auditDigest) as usize - ptr as usize },
+        10usize,
+        "Offset of field: TPMS_COMMAND_AUDIT_INFO::auditDigest"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).commandDigest) as usize - ptr as usize },
+        76usize,
+        "Offset of field: TPMS_COMMAND_AUDIT_INFO::commandDigest"
+    );
+}
+impl Default for TPMS_COMMAND_AUDIT_INFO {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPMS_SESSION_AUDIT_INFO {
+    pub exclusiveSession: TPMI_YES_NO,
+    pub sessionDigest: TPM2B_DIGEST,
+}
+#[test]
+fn bindgen_test_layout_TPMS_SESSION_AUDIT_INFO() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMS_SESSION_AUDIT_INFO> =
+        ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMS_SESSION_AUDIT_INFO>(),
+        68usize,
+        "Size of TPMS_SESSION_AUDIT_INFO"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMS_SESSION_AUDIT_INFO>(),
+        2usize,
+        "Alignment of TPMS_SESSION_AUDIT_INFO"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).exclusiveSession) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMS_SESSION_AUDIT_INFO::exclusiveSession"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).sessionDigest) as usize - ptr as usize },
+        2usize,
+        "Offset of field: TPMS_SESSION_AUDIT_INFO::sessionDigest"
+    );
+}
+impl Default for TPMS_SESSION_AUDIT_INFO {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPMS_CREATION_INFO {
+    pub objectName: TPM2B_NAME,
+    pub creationHash: TPM2B_DIGEST,
+}
+#[test]
+fn bindgen_test_layout_TPMS_CREATION_INFO() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMS_CREATION_INFO> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMS_CREATION_INFO>(),
+        136usize,
+        "Size of TPMS_CREATION_INFO"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMS_CREATION_INFO>(),
+        2usize,
+        "Alignment of TPMS_CREATION_INFO"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).objectName) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMS_CREATION_INFO::objectName"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).creationHash) as usize - ptr as usize },
+        70usize,
+        "Offset of field: TPMS_CREATION_INFO::creationHash"
+    );
+}
+impl Default for TPMS_CREATION_INFO {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPMS_NV_CERTIFY_INFO {
+    pub indexName: TPM2B_NAME,
+    pub offset: UINT16,
+    pub nvContents: TPM2B_MAX_NV_BUFFER,
+}
+#[test]
+fn bindgen_test_layout_TPMS_NV_CERTIFY_INFO() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMS_NV_CERTIFY_INFO> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMS_NV_CERTIFY_INFO>(),
+        2122usize,
+        "Size of TPMS_NV_CERTIFY_INFO"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMS_NV_CERTIFY_INFO>(),
+        2usize,
+        "Alignment of TPMS_NV_CERTIFY_INFO"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).indexName) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMS_NV_CERTIFY_INFO::indexName"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).offset) as usize - ptr as usize },
+        70usize,
+        "Offset of field: TPMS_NV_CERTIFY_INFO::offset"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).nvContents) as usize - ptr as usize },
+        72usize,
+        "Offset of field: TPMS_NV_CERTIFY_INFO::nvContents"
+    );
+}
+impl Default for TPMS_NV_CERTIFY_INFO {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPMS_NV_DIGEST_CERTIFY_INFO {
+    pub indexName: TPM2B_NAME,
+    pub nvDigest: TPM2B_DIGEST,
+}
+#[test]
+fn bindgen_test_layout_TPMS_NV_DIGEST_CERTIFY_INFO() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMS_NV_DIGEST_CERTIFY_INFO> =
+        ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMS_NV_DIGEST_CERTIFY_INFO>(),
+        136usize,
+        "Size of TPMS_NV_DIGEST_CERTIFY_INFO"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMS_NV_DIGEST_CERTIFY_INFO>(),
+        2usize,
+        "Alignment of TPMS_NV_DIGEST_CERTIFY_INFO"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).indexName) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMS_NV_DIGEST_CERTIFY_INFO::indexName"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).nvDigest) as usize - ptr as usize },
+        70usize,
+        "Offset of field: TPMS_NV_DIGEST_CERTIFY_INFO::nvDigest"
+    );
+}
+impl Default for TPMS_NV_DIGEST_CERTIFY_INFO {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+pub type TPMI_ST_ATTEST = TPM2_ST;
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union TPMU_ATTEST {
+    pub certify: TPMS_CERTIFY_INFO,
+    pub creation: TPMS_CREATION_INFO,
+    pub quote: TPMS_QUOTE_INFO,
+    pub commandAudit: TPMS_COMMAND_AUDIT_INFO,
+    pub sessionAudit: TPMS_SESSION_AUDIT_INFO,
+    pub time: TPMS_TIME_ATTEST_INFO,
+    pub nv: TPMS_NV_CERTIFY_INFO,
+}
+#[test]
+fn bindgen_test_layout_TPMU_ATTEST() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMU_ATTEST> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMU_ATTEST>(),
+        2128usize,
+        "Size of TPMU_ATTEST"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMU_ATTEST>(),
+        8usize,
+        "Alignment of TPMU_ATTEST"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).certify) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_ATTEST::certify"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).creation) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_ATTEST::creation"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).quote) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_ATTEST::quote"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).commandAudit) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_ATTEST::commandAudit"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).sessionAudit) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_ATTEST::sessionAudit"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).time) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_ATTEST::time"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).nv) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_ATTEST::nv"
+    );
+}
+impl Default for TPMU_ATTEST {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct TPMS_ATTEST {
+    pub magic: TPM2_GENERATED,
+    pub type_: TPMI_ST_ATTEST,
+    pub qualifiedSigner: TPM2B_NAME,
+    pub extraData: TPM2B_DATA,
+    pub clockInfo: TPMS_CLOCK_INFO,
+    pub firmwareVersion: UINT64,
+    pub attested: TPMU_ATTEST,
+}
+#[test]
+fn bindgen_test_layout_TPMS_ATTEST() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMS_ATTEST> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMS_ATTEST>(),
+        2304usize,
+        "Size of TPMS_ATTEST"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMS_ATTEST>(),
+        8usize,
+        "Alignment of TPMS_ATTEST"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).magic) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMS_ATTEST::magic"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).type_) as usize - ptr as usize },
+        4usize,
+        "Offset of field: TPMS_ATTEST::type_"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).qualifiedSigner) as usize - ptr as usize },
+        6usize,
+        "Offset of field: TPMS_ATTEST::qualifiedSigner"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).extraData) as usize - ptr as usize },
+        76usize,
+        "Offset of field: TPMS_ATTEST::extraData"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).clockInfo) as usize - ptr as usize },
+        144usize,
+        "Offset of field: TPMS_ATTEST::clockInfo"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).firmwareVersion) as usize - ptr as usize },
+        168usize,
+        "Offset of field: TPMS_ATTEST::firmwareVersion"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).attested) as usize - ptr as usize },
+        176usize,
+        "Offset of field: TPMS_ATTEST::attested"
+    );
+}
+impl Default for TPMS_ATTEST {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPM2B_ATTEST {
+    pub size: UINT16,
+    pub attestationData: [BYTE; 2304usize],
+}
+#[test]
+fn bindgen_test_layout_TPM2B_ATTEST() {
+    const UNINIT: ::std::mem::MaybeUninit<TPM2B_ATTEST> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPM2B_ATTEST>(),
+        2306usize,
+        "Size of TPM2B_ATTEST"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPM2B_ATTEST>(),
+        2usize,
+        "Alignment of TPM2B_ATTEST"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).size) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPM2B_ATTEST::size"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).attestationData) as usize - ptr as usize },
+        2usize,
+        "Offset of field: TPM2B_ATTEST::attestationData"
+    );
+}
+impl Default for TPM2B_ATTEST {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPMS_AUTH_COMMAND {
+    pub sessionHandle: TPMI_SH_AUTH_SESSION,
+    pub nonce: TPM2B_NONCE,
+    pub sessionAttributes: TPMA_SESSION,
+    pub hmac: TPM2B_AUTH,
+}
+#[test]
+fn bindgen_test_layout_TPMS_AUTH_COMMAND() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMS_AUTH_COMMAND> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMS_AUTH_COMMAND>(),
+        140usize,
+        "Size of TPMS_AUTH_COMMAND"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMS_AUTH_COMMAND>(),
+        4usize,
+        "Alignment of TPMS_AUTH_COMMAND"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).sessionHandle) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMS_AUTH_COMMAND::sessionHandle"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).nonce) as usize - ptr as usize },
+        4usize,
+        "Offset of field: TPMS_AUTH_COMMAND::nonce"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).sessionAttributes) as usize - ptr as usize },
+        70usize,
+        "Offset of field: TPMS_AUTH_COMMAND::sessionAttributes"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).hmac) as usize - ptr as usize },
+        72usize,
+        "Offset of field: TPMS_AUTH_COMMAND::hmac"
+    );
+}
+impl Default for TPMS_AUTH_COMMAND {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPMS_AUTH_RESPONSE {
+    pub nonce: TPM2B_NONCE,
+    pub sessionAttributes: TPMA_SESSION,
+    pub hmac: TPM2B_AUTH,
+}
+#[test]
+fn bindgen_test_layout_TPMS_AUTH_RESPONSE() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMS_AUTH_RESPONSE> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMS_AUTH_RESPONSE>(),
+        134usize,
+        "Size of TPMS_AUTH_RESPONSE"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMS_AUTH_RESPONSE>(),
+        2usize,
+        "Alignment of TPMS_AUTH_RESPONSE"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).nonce) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMS_AUTH_RESPONSE::nonce"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).sessionAttributes) as usize - ptr as usize },
+        66usize,
+        "Offset of field: TPMS_AUTH_RESPONSE::sessionAttributes"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).hmac) as usize - ptr as usize },
+        68usize,
+        "Offset of field: TPMS_AUTH_RESPONSE::hmac"
+    );
+}
+impl Default for TPMS_AUTH_RESPONSE {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+pub type TPMI_AES_KEY_BITS = TPM2_KEY_BITS;
+pub type TPMI_SM4_KEY_BITS = TPM2_KEY_BITS;
+pub type TPMI_CAMELLIA_KEY_BITS = TPM2_KEY_BITS;
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union TPMU_SYM_KEY_BITS {
+    pub aes: TPMI_AES_KEY_BITS,
+    pub sm4: TPMI_SM4_KEY_BITS,
+    pub camellia: TPMI_CAMELLIA_KEY_BITS,
+    pub sym: TPM2_KEY_BITS,
+    pub exclusiveOr: TPMI_ALG_HASH,
+    pub null: TPMS_EMPTY,
+}
+#[test]
+fn bindgen_test_layout_TPMU_SYM_KEY_BITS() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMU_SYM_KEY_BITS> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMU_SYM_KEY_BITS>(),
+        2usize,
+        "Size of TPMU_SYM_KEY_BITS"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMU_SYM_KEY_BITS>(),
+        2usize,
+        "Alignment of TPMU_SYM_KEY_BITS"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).aes) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_SYM_KEY_BITS::aes"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).sm4) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_SYM_KEY_BITS::sm4"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).camellia) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_SYM_KEY_BITS::camellia"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).sym) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_SYM_KEY_BITS::sym"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).exclusiveOr) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_SYM_KEY_BITS::exclusiveOr"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).null) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_SYM_KEY_BITS::null"
+    );
+}
+impl Default for TPMU_SYM_KEY_BITS {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union TPMU_SYM_MODE {
+    pub aes: TPMI_ALG_SYM_MODE,
+    pub sm4: TPMI_ALG_SYM_MODE,
+    pub camellia: TPMI_ALG_SYM_MODE,
+    pub sym: TPMI_ALG_SYM_MODE,
+    pub exclusiveOr: TPMS_EMPTY,
+    pub null: TPMS_EMPTY,
+}
+#[test]
+fn bindgen_test_layout_TPMU_SYM_MODE() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMU_SYM_MODE> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMU_SYM_MODE>(),
+        2usize,
+        "Size of TPMU_SYM_MODE"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMU_SYM_MODE>(),
+        2usize,
+        "Alignment of TPMU_SYM_MODE"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).aes) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_SYM_MODE::aes"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).sm4) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_SYM_MODE::sm4"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).camellia) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_SYM_MODE::camellia"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).sym) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_SYM_MODE::sym"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).exclusiveOr) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_SYM_MODE::exclusiveOr"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).null) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_SYM_MODE::null"
+    );
+}
+impl Default for TPMU_SYM_MODE {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct TPMT_SYM_DEF {
+    pub algorithm: TPMI_ALG_SYM,
+    pub keyBits: TPMU_SYM_KEY_BITS,
+    pub mode: TPMU_SYM_MODE,
+}
+#[test]
+fn bindgen_test_layout_TPMT_SYM_DEF() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMT_SYM_DEF> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMT_SYM_DEF>(),
+        6usize,
+        "Size of TPMT_SYM_DEF"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMT_SYM_DEF>(),
+        2usize,
+        "Alignment of TPMT_SYM_DEF"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).algorithm) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMT_SYM_DEF::algorithm"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).keyBits) as usize - ptr as usize },
+        2usize,
+        "Offset of field: TPMT_SYM_DEF::keyBits"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).mode) as usize - ptr as usize },
+        4usize,
+        "Offset of field: TPMT_SYM_DEF::mode"
+    );
+}
+impl Default for TPMT_SYM_DEF {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct TPMT_SYM_DEF_OBJECT {
+    pub algorithm: TPMI_ALG_SYM_OBJECT,
+    pub keyBits: TPMU_SYM_KEY_BITS,
+    pub mode: TPMU_SYM_MODE,
+}
+#[test]
+fn bindgen_test_layout_TPMT_SYM_DEF_OBJECT() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMT_SYM_DEF_OBJECT> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMT_SYM_DEF_OBJECT>(),
+        6usize,
+        "Size of TPMT_SYM_DEF_OBJECT"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMT_SYM_DEF_OBJECT>(),
+        2usize,
+        "Alignment of TPMT_SYM_DEF_OBJECT"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).algorithm) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMT_SYM_DEF_OBJECT::algorithm"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).keyBits) as usize - ptr as usize },
+        2usize,
+        "Offset of field: TPMT_SYM_DEF_OBJECT::keyBits"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).mode) as usize - ptr as usize },
+        4usize,
+        "Offset of field: TPMT_SYM_DEF_OBJECT::mode"
+    );
+}
+impl Default for TPMT_SYM_DEF_OBJECT {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy, Clone)]
+pub struct TPM2B_SYM_KEY {
+    pub size: UINT16,
+    pub buffer: [BYTE; 32usize],
+}
+#[test]
+fn bindgen_test_layout_TPM2B_SYM_KEY() {
+    const UNINIT: ::std::mem::MaybeUninit<TPM2B_SYM_KEY> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPM2B_SYM_KEY>(),
+        34usize,
+        "Size of TPM2B_SYM_KEY"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPM2B_SYM_KEY>(),
+        2usize,
+        "Alignment of TPM2B_SYM_KEY"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).size) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPM2B_SYM_KEY::size"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).buffer) as usize - ptr as usize },
+        2usize,
+        "Offset of field: TPM2B_SYM_KEY::buffer"
+    );
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct TPMS_SYMCIPHER_PARMS {
+    pub sym: TPMT_SYM_DEF_OBJECT,
+}
+#[test]
+fn bindgen_test_layout_TPMS_SYMCIPHER_PARMS() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMS_SYMCIPHER_PARMS> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMS_SYMCIPHER_PARMS>(),
+        6usize,
+        "Size of TPMS_SYMCIPHER_PARMS"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMS_SYMCIPHER_PARMS>(),
+        2usize,
+        "Alignment of TPMS_SYMCIPHER_PARMS"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).sym) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMS_SYMCIPHER_PARMS::sym"
+    );
+}
+impl Default for TPMS_SYMCIPHER_PARMS {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy, Clone)]
+pub struct TPM2B_LABEL {
+    pub size: UINT16,
+    pub buffer: [BYTE; 32usize],
+}
+#[test]
+fn bindgen_test_layout_TPM2B_LABEL() {
+    const UNINIT: ::std::mem::MaybeUninit<TPM2B_LABEL> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPM2B_LABEL>(),
+        34usize,
+        "Size of TPM2B_LABEL"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPM2B_LABEL>(),
+        2usize,
+        "Alignment of TPM2B_LABEL"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).size) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPM2B_LABEL::size"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).buffer) as usize - ptr as usize },
+        2usize,
+        "Offset of field: TPM2B_LABEL::buffer"
+    );
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy, Clone)]
+pub struct TPMS_DERIVE {
+    pub label: TPM2B_LABEL,
+    pub context: TPM2B_LABEL,
+}
+#[test]
+fn bindgen_test_layout_TPMS_DERIVE() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMS_DERIVE> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMS_DERIVE>(),
+        68usize,
+        "Size of TPMS_DERIVE"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMS_DERIVE>(),
+        2usize,
+        "Alignment of TPMS_DERIVE"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).label) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMS_DERIVE::label"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).context) as usize - ptr as usize },
+        34usize,
+        "Offset of field: TPMS_DERIVE::context"
+    );
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPM2B_DERIVE {
+    pub size: UINT16,
+    pub buffer: [BYTE; 68usize],
+}
+#[test]
+fn bindgen_test_layout_TPM2B_DERIVE() {
+    const UNINIT: ::std::mem::MaybeUninit<TPM2B_DERIVE> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPM2B_DERIVE>(),
+        70usize,
+        "Size of TPM2B_DERIVE"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPM2B_DERIVE>(),
+        2usize,
+        "Alignment of TPM2B_DERIVE"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).size) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPM2B_DERIVE::size"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).buffer) as usize - ptr as usize },
+        2usize,
+        "Offset of field: TPM2B_DERIVE::buffer"
+    );
+}
+impl Default for TPM2B_DERIVE {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union TPMU_SENSITIVE_CREATE {
+    pub create: [BYTE; 256usize],
+    pub derive: TPMS_DERIVE,
+}
+#[test]
+fn bindgen_test_layout_TPMU_SENSITIVE_CREATE() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMU_SENSITIVE_CREATE> =
+        ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMU_SENSITIVE_CREATE>(),
+        256usize,
+        "Size of TPMU_SENSITIVE_CREATE"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMU_SENSITIVE_CREATE>(),
+        2usize,
+        "Alignment of TPMU_SENSITIVE_CREATE"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).create) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_SENSITIVE_CREATE::create"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).derive) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_SENSITIVE_CREATE::derive"
+    );
+}
+impl Default for TPMU_SENSITIVE_CREATE {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPM2B_SENSITIVE_DATA {
+    pub size: UINT16,
+    pub buffer: [BYTE; 256usize],
+}
+#[test]
+fn bindgen_test_layout_TPM2B_SENSITIVE_DATA() {
+    const UNINIT: ::std::mem::MaybeUninit<TPM2B_SENSITIVE_DATA> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPM2B_SENSITIVE_DATA>(),
+        258usize,
+        "Size of TPM2B_SENSITIVE_DATA"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPM2B_SENSITIVE_DATA>(),
+        2usize,
+        "Alignment of TPM2B_SENSITIVE_DATA"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).size) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPM2B_SENSITIVE_DATA::size"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).buffer) as usize - ptr as usize },
+        2usize,
+        "Offset of field: TPM2B_SENSITIVE_DATA::buffer"
+    );
+}
+impl Default for TPM2B_SENSITIVE_DATA {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPMS_SENSITIVE_CREATE {
+    pub userAuth: TPM2B_AUTH,
+    pub data: TPM2B_SENSITIVE_DATA,
+}
+#[test]
+fn bindgen_test_layout_TPMS_SENSITIVE_CREATE() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMS_SENSITIVE_CREATE> =
+        ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMS_SENSITIVE_CREATE>(),
+        324usize,
+        "Size of TPMS_SENSITIVE_CREATE"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMS_SENSITIVE_CREATE>(),
+        2usize,
+        "Alignment of TPMS_SENSITIVE_CREATE"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).userAuth) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMS_SENSITIVE_CREATE::userAuth"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).data) as usize - ptr as usize },
+        66usize,
+        "Offset of field: TPMS_SENSITIVE_CREATE::data"
+    );
+}
+impl Default for TPMS_SENSITIVE_CREATE {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPM2B_SENSITIVE_CREATE {
+    pub size: UINT16,
+    pub sensitive: TPMS_SENSITIVE_CREATE,
+}
+#[test]
+fn bindgen_test_layout_TPM2B_SENSITIVE_CREATE() {
+    const UNINIT: ::std::mem::MaybeUninit<TPM2B_SENSITIVE_CREATE> =
+        ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPM2B_SENSITIVE_CREATE>(),
+        326usize,
+        "Size of TPM2B_SENSITIVE_CREATE"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPM2B_SENSITIVE_CREATE>(),
+        2usize,
+        "Alignment of TPM2B_SENSITIVE_CREATE"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).size) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPM2B_SENSITIVE_CREATE::size"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).sensitive) as usize - ptr as usize },
+        2usize,
+        "Offset of field: TPM2B_SENSITIVE_CREATE::sensitive"
+    );
+}
+impl Default for TPM2B_SENSITIVE_CREATE {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy, Clone)]
+pub struct TPMS_SCHEME_HASH {
+    pub hashAlg: TPMI_ALG_HASH,
+}
+#[test]
+fn bindgen_test_layout_TPMS_SCHEME_HASH() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMS_SCHEME_HASH> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMS_SCHEME_HASH>(),
+        2usize,
+        "Size of TPMS_SCHEME_HASH"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMS_SCHEME_HASH>(),
+        2usize,
+        "Alignment of TPMS_SCHEME_HASH"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).hashAlg) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMS_SCHEME_HASH::hashAlg"
+    );
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy, Clone)]
+pub struct TPMS_SCHEME_ECDAA {
+    pub hashAlg: TPMI_ALG_HASH,
+    pub count: UINT16,
+}
+#[test]
+fn bindgen_test_layout_TPMS_SCHEME_ECDAA() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMS_SCHEME_ECDAA> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMS_SCHEME_ECDAA>(),
+        4usize,
+        "Size of TPMS_SCHEME_ECDAA"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMS_SCHEME_ECDAA>(),
+        2usize,
+        "Alignment of TPMS_SCHEME_ECDAA"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).hashAlg) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMS_SCHEME_ECDAA::hashAlg"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).count) as usize - ptr as usize },
+        2usize,
+        "Offset of field: TPMS_SCHEME_ECDAA::count"
+    );
+}
+pub type TPMI_ALG_KEYEDHASH_SCHEME = TPM2_ALG_ID;
+pub type TPMS_SCHEME_HMAC = TPMS_SCHEME_HASH;
+#[repr(C)]
+#[derive(Debug, Default, Copy, Clone)]
+pub struct TPMS_SCHEME_XOR {
+    pub hashAlg: TPMI_ALG_HASH,
+    pub kdf: TPMI_ALG_KDF,
+}
+#[test]
+fn bindgen_test_layout_TPMS_SCHEME_XOR() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMS_SCHEME_XOR> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMS_SCHEME_XOR>(),
+        4usize,
+        "Size of TPMS_SCHEME_XOR"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMS_SCHEME_XOR>(),
+        2usize,
+        "Alignment of TPMS_SCHEME_XOR"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).hashAlg) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMS_SCHEME_XOR::hashAlg"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).kdf) as usize - ptr as usize },
+        2usize,
+        "Offset of field: TPMS_SCHEME_XOR::kdf"
+    );
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union TPMU_SCHEME_KEYEDHASH {
+    pub hmac: TPMS_SCHEME_HMAC,
+    pub exclusiveOr: TPMS_SCHEME_XOR,
+    pub null: TPMS_EMPTY,
+}
+#[test]
+fn bindgen_test_layout_TPMU_SCHEME_KEYEDHASH() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMU_SCHEME_KEYEDHASH> =
+        ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMU_SCHEME_KEYEDHASH>(),
+        4usize,
+        "Size of TPMU_SCHEME_KEYEDHASH"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMU_SCHEME_KEYEDHASH>(),
+        2usize,
+        "Alignment of TPMU_SCHEME_KEYEDHASH"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).hmac) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_SCHEME_KEYEDHASH::hmac"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).exclusiveOr) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_SCHEME_KEYEDHASH::exclusiveOr"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).null) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_SCHEME_KEYEDHASH::null"
+    );
+}
+impl Default for TPMU_SCHEME_KEYEDHASH {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct TPMT_KEYEDHASH_SCHEME {
+    pub scheme: TPMI_ALG_KEYEDHASH_SCHEME,
+    pub details: TPMU_SCHEME_KEYEDHASH,
+}
+#[test]
+fn bindgen_test_layout_TPMT_KEYEDHASH_SCHEME() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMT_KEYEDHASH_SCHEME> =
+        ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMT_KEYEDHASH_SCHEME>(),
+        6usize,
+        "Size of TPMT_KEYEDHASH_SCHEME"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMT_KEYEDHASH_SCHEME>(),
+        2usize,
+        "Alignment of TPMT_KEYEDHASH_SCHEME"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).scheme) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMT_KEYEDHASH_SCHEME::scheme"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).details) as usize - ptr as usize },
+        2usize,
+        "Offset of field: TPMT_KEYEDHASH_SCHEME::details"
+    );
+}
+impl Default for TPMT_KEYEDHASH_SCHEME {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+pub type TPMS_SIG_SCHEME_RSASSA = TPMS_SCHEME_HASH;
+pub type TPMS_SIG_SCHEME_RSAPSS = TPMS_SCHEME_HASH;
+pub type TPMS_SIG_SCHEME_ECDSA = TPMS_SCHEME_HASH;
+pub type TPMS_SIG_SCHEME_SM2 = TPMS_SCHEME_HASH;
+pub type TPMS_SIG_SCHEME_ECSCHNORR = TPMS_SCHEME_HASH;
+pub type TPMS_SIG_SCHEME_ECDAA = TPMS_SCHEME_ECDAA;
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union TPMU_SIG_SCHEME {
+    pub rsassa: TPMS_SIG_SCHEME_RSASSA,
+    pub rsapss: TPMS_SIG_SCHEME_RSAPSS,
+    pub ecdsa: TPMS_SIG_SCHEME_ECDSA,
+    pub ecdaa: TPMS_SIG_SCHEME_ECDAA,
+    pub sm2: TPMS_SIG_SCHEME_SM2,
+    pub ecschnorr: TPMS_SIG_SCHEME_ECSCHNORR,
+    pub hmac: TPMS_SCHEME_HMAC,
+    pub any: TPMS_SCHEME_HASH,
+    pub null: TPMS_EMPTY,
+}
+#[test]
+fn bindgen_test_layout_TPMU_SIG_SCHEME() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMU_SIG_SCHEME> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMU_SIG_SCHEME>(),
+        4usize,
+        "Size of TPMU_SIG_SCHEME"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMU_SIG_SCHEME>(),
+        2usize,
+        "Alignment of TPMU_SIG_SCHEME"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).rsassa) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_SIG_SCHEME::rsassa"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).rsapss) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_SIG_SCHEME::rsapss"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).ecdsa) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_SIG_SCHEME::ecdsa"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).ecdaa) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_SIG_SCHEME::ecdaa"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).sm2) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_SIG_SCHEME::sm2"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).ecschnorr) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_SIG_SCHEME::ecschnorr"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).hmac) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_SIG_SCHEME::hmac"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).any) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_SIG_SCHEME::any"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).null) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_SIG_SCHEME::null"
+    );
+}
+impl Default for TPMU_SIG_SCHEME {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct TPMT_SIG_SCHEME {
+    pub scheme: TPMI_ALG_SIG_SCHEME,
+    pub details: TPMU_SIG_SCHEME,
+}
+#[test]
+fn bindgen_test_layout_TPMT_SIG_SCHEME() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMT_SIG_SCHEME> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMT_SIG_SCHEME>(),
+        6usize,
+        "Size of TPMT_SIG_SCHEME"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMT_SIG_SCHEME>(),
+        2usize,
+        "Alignment of TPMT_SIG_SCHEME"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).scheme) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMT_SIG_SCHEME::scheme"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).details) as usize - ptr as usize },
+        2usize,
+        "Offset of field: TPMT_SIG_SCHEME::details"
+    );
+}
+impl Default for TPMT_SIG_SCHEME {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+pub type TPMS_ENC_SCHEME_OAEP = TPMS_SCHEME_HASH;
+pub type TPMS_ENC_SCHEME_RSAES = TPMS_EMPTY;
+pub type TPMS_KEY_SCHEME_ECDH = TPMS_SCHEME_HASH;
+pub type TPMS_KEY_SCHEME_ECMQV = TPMS_SCHEME_HASH;
+pub type TPMS_SCHEME_MGF1 = TPMS_SCHEME_HASH;
+pub type TPMS_SCHEME_KDF1_SP800_56A = TPMS_SCHEME_HASH;
+pub type TPMS_SCHEME_KDF2 = TPMS_SCHEME_HASH;
+pub type TPMS_SCHEME_KDF1_SP800_108 = TPMS_SCHEME_HASH;
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union TPMU_KDF_SCHEME {
+    pub mgf1: TPMS_SCHEME_MGF1,
+    pub kdf1_sp800_56a: TPMS_SCHEME_KDF1_SP800_56A,
+    pub kdf2: TPMS_SCHEME_KDF2,
+    pub kdf1_sp800_108: TPMS_SCHEME_KDF1_SP800_108,
+    pub null: TPMS_EMPTY,
+}
+#[test]
+fn bindgen_test_layout_TPMU_KDF_SCHEME() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMU_KDF_SCHEME> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMU_KDF_SCHEME>(),
+        2usize,
+        "Size of TPMU_KDF_SCHEME"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMU_KDF_SCHEME>(),
+        2usize,
+        "Alignment of TPMU_KDF_SCHEME"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).mgf1) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_KDF_SCHEME::mgf1"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).kdf1_sp800_56a) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_KDF_SCHEME::kdf1_sp800_56a"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).kdf2) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_KDF_SCHEME::kdf2"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).kdf1_sp800_108) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_KDF_SCHEME::kdf1_sp800_108"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).null) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_KDF_SCHEME::null"
+    );
+}
+impl Default for TPMU_KDF_SCHEME {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct TPMT_KDF_SCHEME {
+    pub scheme: TPMI_ALG_KDF,
+    pub details: TPMU_KDF_SCHEME,
+}
+#[test]
+fn bindgen_test_layout_TPMT_KDF_SCHEME() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMT_KDF_SCHEME> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMT_KDF_SCHEME>(),
+        4usize,
+        "Size of TPMT_KDF_SCHEME"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMT_KDF_SCHEME>(),
+        2usize,
+        "Alignment of TPMT_KDF_SCHEME"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).scheme) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMT_KDF_SCHEME::scheme"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).details) as usize - ptr as usize },
+        2usize,
+        "Offset of field: TPMT_KDF_SCHEME::details"
+    );
+}
+impl Default for TPMT_KDF_SCHEME {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+pub type TPMI_ALG_ASYM_SCHEME = TPM2_ALG_ID;
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union TPMU_ASYM_SCHEME {
+    pub ecdh: TPMS_KEY_SCHEME_ECDH,
+    pub ecmqv: TPMS_KEY_SCHEME_ECMQV,
+    pub rsassa: TPMS_SIG_SCHEME_RSASSA,
+    pub rsapss: TPMS_SIG_SCHEME_RSAPSS,
+    pub ecdsa: TPMS_SIG_SCHEME_ECDSA,
+    pub ecdaa: TPMS_SIG_SCHEME_ECDAA,
+    pub sm2: TPMS_SIG_SCHEME_SM2,
+    pub ecschnorr: TPMS_SIG_SCHEME_ECSCHNORR,
+    pub rsaes: TPMS_ENC_SCHEME_RSAES,
+    pub oaep: TPMS_ENC_SCHEME_OAEP,
+    pub anySig: TPMS_SCHEME_HASH,
+    pub null: TPMS_EMPTY,
+}
+#[test]
+fn bindgen_test_layout_TPMU_ASYM_SCHEME() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMU_ASYM_SCHEME> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMU_ASYM_SCHEME>(),
+        4usize,
+        "Size of TPMU_ASYM_SCHEME"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMU_ASYM_SCHEME>(),
+        2usize,
+        "Alignment of TPMU_ASYM_SCHEME"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).ecdh) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_ASYM_SCHEME::ecdh"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).ecmqv) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_ASYM_SCHEME::ecmqv"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).rsassa) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_ASYM_SCHEME::rsassa"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).rsapss) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_ASYM_SCHEME::rsapss"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).ecdsa) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_ASYM_SCHEME::ecdsa"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).ecdaa) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_ASYM_SCHEME::ecdaa"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).sm2) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_ASYM_SCHEME::sm2"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).ecschnorr) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_ASYM_SCHEME::ecschnorr"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).rsaes) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_ASYM_SCHEME::rsaes"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).oaep) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_ASYM_SCHEME::oaep"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).anySig) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_ASYM_SCHEME::anySig"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).null) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_ASYM_SCHEME::null"
+    );
+}
+impl Default for TPMU_ASYM_SCHEME {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct TPMT_ASYM_SCHEME {
+    pub scheme: TPMI_ALG_ASYM_SCHEME,
+    pub details: TPMU_ASYM_SCHEME,
+}
+#[test]
+fn bindgen_test_layout_TPMT_ASYM_SCHEME() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMT_ASYM_SCHEME> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMT_ASYM_SCHEME>(),
+        6usize,
+        "Size of TPMT_ASYM_SCHEME"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMT_ASYM_SCHEME>(),
+        2usize,
+        "Alignment of TPMT_ASYM_SCHEME"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).scheme) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMT_ASYM_SCHEME::scheme"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).details) as usize - ptr as usize },
+        2usize,
+        "Offset of field: TPMT_ASYM_SCHEME::details"
+    );
+}
+impl Default for TPMT_ASYM_SCHEME {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+pub type TPMI_ALG_RSA_SCHEME = TPM2_ALG_ID;
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct TPMT_RSA_SCHEME {
+    pub scheme: TPMI_ALG_RSA_SCHEME,
+    pub details: TPMU_ASYM_SCHEME,
+}
+#[test]
+fn bindgen_test_layout_TPMT_RSA_SCHEME() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMT_RSA_SCHEME> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMT_RSA_SCHEME>(),
+        6usize,
+        "Size of TPMT_RSA_SCHEME"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMT_RSA_SCHEME>(),
+        2usize,
+        "Alignment of TPMT_RSA_SCHEME"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).scheme) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMT_RSA_SCHEME::scheme"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).details) as usize - ptr as usize },
+        2usize,
+        "Offset of field: TPMT_RSA_SCHEME::details"
+    );
+}
+impl Default for TPMT_RSA_SCHEME {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+pub type TPMI_ALG_RSA_DECRYPT = TPM2_ALG_ID;
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct TPMT_RSA_DECRYPT {
+    pub scheme: TPMI_ALG_RSA_DECRYPT,
+    pub details: TPMU_ASYM_SCHEME,
+}
+#[test]
+fn bindgen_test_layout_TPMT_RSA_DECRYPT() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMT_RSA_DECRYPT> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMT_RSA_DECRYPT>(),
+        6usize,
+        "Size of TPMT_RSA_DECRYPT"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMT_RSA_DECRYPT>(),
+        2usize,
+        "Alignment of TPMT_RSA_DECRYPT"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).scheme) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMT_RSA_DECRYPT::scheme"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).details) as usize - ptr as usize },
+        2usize,
+        "Offset of field: TPMT_RSA_DECRYPT::details"
+    );
+}
+impl Default for TPMT_RSA_DECRYPT {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPM2B_PUBLIC_KEY_RSA {
+    pub size: UINT16,
+    pub buffer: [BYTE; 512usize],
+}
+#[test]
+fn bindgen_test_layout_TPM2B_PUBLIC_KEY_RSA() {
+    const UNINIT: ::std::mem::MaybeUninit<TPM2B_PUBLIC_KEY_RSA> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPM2B_PUBLIC_KEY_RSA>(),
+        514usize,
+        "Size of TPM2B_PUBLIC_KEY_RSA"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPM2B_PUBLIC_KEY_RSA>(),
+        2usize,
+        "Alignment of TPM2B_PUBLIC_KEY_RSA"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).size) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPM2B_PUBLIC_KEY_RSA::size"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).buffer) as usize - ptr as usize },
+        2usize,
+        "Offset of field: TPM2B_PUBLIC_KEY_RSA::buffer"
+    );
+}
+impl Default for TPM2B_PUBLIC_KEY_RSA {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+pub type TPMI_RSA_KEY_BITS = TPM2_KEY_BITS;
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPM2B_PRIVATE_KEY_RSA {
+    pub size: UINT16,
+    pub buffer: [BYTE; 1280usize],
+}
+#[test]
+fn bindgen_test_layout_TPM2B_PRIVATE_KEY_RSA() {
+    const UNINIT: ::std::mem::MaybeUninit<TPM2B_PRIVATE_KEY_RSA> =
+        ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPM2B_PRIVATE_KEY_RSA>(),
+        1282usize,
+        "Size of TPM2B_PRIVATE_KEY_RSA"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPM2B_PRIVATE_KEY_RSA>(),
+        2usize,
+        "Alignment of TPM2B_PRIVATE_KEY_RSA"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).size) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPM2B_PRIVATE_KEY_RSA::size"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).buffer) as usize - ptr as usize },
+        2usize,
+        "Offset of field: TPM2B_PRIVATE_KEY_RSA::buffer"
+    );
+}
+impl Default for TPM2B_PRIVATE_KEY_RSA {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPM2B_ECC_PARAMETER {
+    pub size: UINT16,
+    pub buffer: [BYTE; 128usize],
+}
+#[test]
+fn bindgen_test_layout_TPM2B_ECC_PARAMETER() {
+    const UNINIT: ::std::mem::MaybeUninit<TPM2B_ECC_PARAMETER> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPM2B_ECC_PARAMETER>(),
+        130usize,
+        "Size of TPM2B_ECC_PARAMETER"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPM2B_ECC_PARAMETER>(),
+        2usize,
+        "Alignment of TPM2B_ECC_PARAMETER"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).size) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPM2B_ECC_PARAMETER::size"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).buffer) as usize - ptr as usize },
+        2usize,
+        "Offset of field: TPM2B_ECC_PARAMETER::buffer"
+    );
+}
+impl Default for TPM2B_ECC_PARAMETER {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPMS_ECC_POINT {
+    pub x: TPM2B_ECC_PARAMETER,
+    pub y: TPM2B_ECC_PARAMETER,
+}
+#[test]
+fn bindgen_test_layout_TPMS_ECC_POINT() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMS_ECC_POINT> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMS_ECC_POINT>(),
+        260usize,
+        "Size of TPMS_ECC_POINT"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMS_ECC_POINT>(),
+        2usize,
+        "Alignment of TPMS_ECC_POINT"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).x) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMS_ECC_POINT::x"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).y) as usize - ptr as usize },
+        130usize,
+        "Offset of field: TPMS_ECC_POINT::y"
+    );
+}
+impl Default for TPMS_ECC_POINT {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPM2B_ECC_POINT {
+    pub size: UINT16,
+    pub point: TPMS_ECC_POINT,
+}
+#[test]
+fn bindgen_test_layout_TPM2B_ECC_POINT() {
+    const UNINIT: ::std::mem::MaybeUninit<TPM2B_ECC_POINT> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPM2B_ECC_POINT>(),
+        262usize,
+        "Size of TPM2B_ECC_POINT"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPM2B_ECC_POINT>(),
+        2usize,
+        "Alignment of TPM2B_ECC_POINT"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).size) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPM2B_ECC_POINT::size"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).point) as usize - ptr as usize },
+        2usize,
+        "Offset of field: TPM2B_ECC_POINT::point"
+    );
+}
+impl Default for TPM2B_ECC_POINT {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+pub type TPMI_ALG_ECC_SCHEME = TPM2_ALG_ID;
+pub type TPMI_ECC_CURVE = TPM2_ECC_CURVE;
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct TPMT_ECC_SCHEME {
+    pub scheme: TPMI_ALG_ECC_SCHEME,
+    pub details: TPMU_ASYM_SCHEME,
+}
+#[test]
+fn bindgen_test_layout_TPMT_ECC_SCHEME() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMT_ECC_SCHEME> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMT_ECC_SCHEME>(),
+        6usize,
+        "Size of TPMT_ECC_SCHEME"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMT_ECC_SCHEME>(),
+        2usize,
+        "Alignment of TPMT_ECC_SCHEME"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).scheme) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMT_ECC_SCHEME::scheme"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).details) as usize - ptr as usize },
+        2usize,
+        "Offset of field: TPMT_ECC_SCHEME::details"
+    );
+}
+impl Default for TPMT_ECC_SCHEME {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct TPMS_ALGORITHM_DETAIL_ECC {
+    pub curveID: TPM2_ECC_CURVE,
+    pub keySize: UINT16,
+    pub kdf: TPMT_KDF_SCHEME,
+    pub sign: TPMT_ECC_SCHEME,
+    pub p: TPM2B_ECC_PARAMETER,
+    pub a: TPM2B_ECC_PARAMETER,
+    pub b: TPM2B_ECC_PARAMETER,
+    pub gX: TPM2B_ECC_PARAMETER,
+    pub gY: TPM2B_ECC_PARAMETER,
+    pub n: TPM2B_ECC_PARAMETER,
+    pub h: TPM2B_ECC_PARAMETER,
+}
+#[test]
+fn bindgen_test_layout_TPMS_ALGORITHM_DETAIL_ECC() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMS_ALGORITHM_DETAIL_ECC> =
+        ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMS_ALGORITHM_DETAIL_ECC>(),
+        924usize,
+        "Size of TPMS_ALGORITHM_DETAIL_ECC"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMS_ALGORITHM_DETAIL_ECC>(),
+        2usize,
+        "Alignment of TPMS_ALGORITHM_DETAIL_ECC"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).curveID) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMS_ALGORITHM_DETAIL_ECC::curveID"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).keySize) as usize - ptr as usize },
+        2usize,
+        "Offset of field: TPMS_ALGORITHM_DETAIL_ECC::keySize"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).kdf) as usize - ptr as usize },
+        4usize,
+        "Offset of field: TPMS_ALGORITHM_DETAIL_ECC::kdf"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).sign) as usize - ptr as usize },
+        8usize,
+        "Offset of field: TPMS_ALGORITHM_DETAIL_ECC::sign"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).p) as usize - ptr as usize },
+        14usize,
+        "Offset of field: TPMS_ALGORITHM_DETAIL_ECC::p"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).a) as usize - ptr as usize },
+        144usize,
+        "Offset of field: TPMS_ALGORITHM_DETAIL_ECC::a"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).b) as usize - ptr as usize },
+        274usize,
+        "Offset of field: TPMS_ALGORITHM_DETAIL_ECC::b"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).gX) as usize - ptr as usize },
+        404usize,
+        "Offset of field: TPMS_ALGORITHM_DETAIL_ECC::gX"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).gY) as usize - ptr as usize },
+        534usize,
+        "Offset of field: TPMS_ALGORITHM_DETAIL_ECC::gY"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).n) as usize - ptr as usize },
+        664usize,
+        "Offset of field: TPMS_ALGORITHM_DETAIL_ECC::n"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).h) as usize - ptr as usize },
+        794usize,
+        "Offset of field: TPMS_ALGORITHM_DETAIL_ECC::h"
+    );
+}
+impl Default for TPMS_ALGORITHM_DETAIL_ECC {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPMS_SIGNATURE_RSA {
+    pub hash: TPMI_ALG_HASH,
+    pub sig: TPM2B_PUBLIC_KEY_RSA,
+}
+#[test]
+fn bindgen_test_layout_TPMS_SIGNATURE_RSA() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMS_SIGNATURE_RSA> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMS_SIGNATURE_RSA>(),
+        516usize,
+        "Size of TPMS_SIGNATURE_RSA"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMS_SIGNATURE_RSA>(),
+        2usize,
+        "Alignment of TPMS_SIGNATURE_RSA"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).hash) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMS_SIGNATURE_RSA::hash"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).sig) as usize - ptr as usize },
+        2usize,
+        "Offset of field: TPMS_SIGNATURE_RSA::sig"
+    );
+}
+impl Default for TPMS_SIGNATURE_RSA {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+pub type TPMS_SIGNATURE_RSASSA = TPMS_SIGNATURE_RSA;
+pub type TPMS_SIGNATURE_RSAPSS = TPMS_SIGNATURE_RSA;
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPMS_SIGNATURE_ECC {
+    pub hash: TPMI_ALG_HASH,
+    pub signatureR: TPM2B_ECC_PARAMETER,
+    pub signatureS: TPM2B_ECC_PARAMETER,
+}
+#[test]
+fn bindgen_test_layout_TPMS_SIGNATURE_ECC() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMS_SIGNATURE_ECC> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMS_SIGNATURE_ECC>(),
+        262usize,
+        "Size of TPMS_SIGNATURE_ECC"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMS_SIGNATURE_ECC>(),
+        2usize,
+        "Alignment of TPMS_SIGNATURE_ECC"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).hash) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMS_SIGNATURE_ECC::hash"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).signatureR) as usize - ptr as usize },
+        2usize,
+        "Offset of field: TPMS_SIGNATURE_ECC::signatureR"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).signatureS) as usize - ptr as usize },
+        132usize,
+        "Offset of field: TPMS_SIGNATURE_ECC::signatureS"
+    );
+}
+impl Default for TPMS_SIGNATURE_ECC {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+pub type TPMS_SIGNATURE_ECDSA = TPMS_SIGNATURE_ECC;
+pub type TPMS_SIGNATURE_ECDAA = TPMS_SIGNATURE_ECC;
+pub type TPMS_SIGNATURE_SM2 = TPMS_SIGNATURE_ECC;
+pub type TPMS_SIGNATURE_ECSCHNORR = TPMS_SIGNATURE_ECC;
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union TPMU_SIGNATURE {
+    pub rsassa: TPMS_SIGNATURE_RSASSA,
+    pub rsapss: TPMS_SIGNATURE_RSAPSS,
+    pub ecdsa: TPMS_SIGNATURE_ECDSA,
+    pub ecdaa: TPMS_SIGNATURE_ECDAA,
+    pub sm2: TPMS_SIGNATURE_SM2,
+    pub ecschnorr: TPMS_SIGNATURE_ECSCHNORR,
+    pub hmac: TPMT_HA,
+    pub any: TPMS_SCHEME_HASH,
+    pub null: TPMS_EMPTY,
+}
+#[test]
+fn bindgen_test_layout_TPMU_SIGNATURE() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMU_SIGNATURE> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMU_SIGNATURE>(),
+        516usize,
+        "Size of TPMU_SIGNATURE"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMU_SIGNATURE>(),
+        2usize,
+        "Alignment of TPMU_SIGNATURE"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).rsassa) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_SIGNATURE::rsassa"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).rsapss) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_SIGNATURE::rsapss"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).ecdsa) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_SIGNATURE::ecdsa"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).ecdaa) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_SIGNATURE::ecdaa"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).sm2) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_SIGNATURE::sm2"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).ecschnorr) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_SIGNATURE::ecschnorr"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).hmac) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_SIGNATURE::hmac"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).any) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_SIGNATURE::any"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).null) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_SIGNATURE::null"
+    );
+}
+impl Default for TPMU_SIGNATURE {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct TPMT_SIGNATURE {
+    pub sigAlg: TPMI_ALG_SIG_SCHEME,
+    pub signature: TPMU_SIGNATURE,
+}
+#[test]
+fn bindgen_test_layout_TPMT_SIGNATURE() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMT_SIGNATURE> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMT_SIGNATURE>(),
+        518usize,
+        "Size of TPMT_SIGNATURE"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMT_SIGNATURE>(),
+        2usize,
+        "Alignment of TPMT_SIGNATURE"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).sigAlg) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMT_SIGNATURE::sigAlg"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).signature) as usize - ptr as usize },
+        2usize,
+        "Offset of field: TPMT_SIGNATURE::signature"
+    );
+}
+impl Default for TPMT_SIGNATURE {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union TPMU_ENCRYPTED_SECRET {
+    pub ecc: [BYTE; 260usize],
+    pub rsa: [BYTE; 512usize],
+    pub symmetric: [BYTE; 66usize],
+    pub keyedHash: [BYTE; 66usize],
+}
+#[test]
+fn bindgen_test_layout_TPMU_ENCRYPTED_SECRET() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMU_ENCRYPTED_SECRET> =
+        ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMU_ENCRYPTED_SECRET>(),
+        512usize,
+        "Size of TPMU_ENCRYPTED_SECRET"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMU_ENCRYPTED_SECRET>(),
+        1usize,
+        "Alignment of TPMU_ENCRYPTED_SECRET"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).ecc) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_ENCRYPTED_SECRET::ecc"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).rsa) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_ENCRYPTED_SECRET::rsa"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).symmetric) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_ENCRYPTED_SECRET::symmetric"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).keyedHash) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_ENCRYPTED_SECRET::keyedHash"
+    );
+}
+impl Default for TPMU_ENCRYPTED_SECRET {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPM2B_ENCRYPTED_SECRET {
+    pub size: UINT16,
+    pub secret: [BYTE; 512usize],
+}
+#[test]
+fn bindgen_test_layout_TPM2B_ENCRYPTED_SECRET() {
+    const UNINIT: ::std::mem::MaybeUninit<TPM2B_ENCRYPTED_SECRET> =
+        ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPM2B_ENCRYPTED_SECRET>(),
+        514usize,
+        "Size of TPM2B_ENCRYPTED_SECRET"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPM2B_ENCRYPTED_SECRET>(),
+        2usize,
+        "Alignment of TPM2B_ENCRYPTED_SECRET"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).size) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPM2B_ENCRYPTED_SECRET::size"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).secret) as usize - ptr as usize },
+        2usize,
+        "Offset of field: TPM2B_ENCRYPTED_SECRET::secret"
+    );
+}
+impl Default for TPM2B_ENCRYPTED_SECRET {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+pub type TPMI_ALG_PUBLIC = TPM2_ALG_ID;
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union TPMU_PUBLIC_ID {
+    pub keyedHash: TPM2B_DIGEST,
+    pub sym: TPM2B_DIGEST,
+    pub rsa: TPM2B_PUBLIC_KEY_RSA,
+    pub ecc: TPMS_ECC_POINT,
+    pub derive: TPMS_DERIVE,
+}
+#[test]
+fn bindgen_test_layout_TPMU_PUBLIC_ID() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMU_PUBLIC_ID> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMU_PUBLIC_ID>(),
+        514usize,
+        "Size of TPMU_PUBLIC_ID"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMU_PUBLIC_ID>(),
+        2usize,
+        "Alignment of TPMU_PUBLIC_ID"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).keyedHash) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_PUBLIC_ID::keyedHash"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).sym) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_PUBLIC_ID::sym"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).rsa) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_PUBLIC_ID::rsa"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).ecc) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_PUBLIC_ID::ecc"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).derive) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_PUBLIC_ID::derive"
+    );
+}
+impl Default for TPMU_PUBLIC_ID {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct TPMS_KEYEDHASH_PARMS {
+    pub scheme: TPMT_KEYEDHASH_SCHEME,
+}
+#[test]
+fn bindgen_test_layout_TPMS_KEYEDHASH_PARMS() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMS_KEYEDHASH_PARMS> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMS_KEYEDHASH_PARMS>(),
+        6usize,
+        "Size of TPMS_KEYEDHASH_PARMS"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMS_KEYEDHASH_PARMS>(),
+        2usize,
+        "Alignment of TPMS_KEYEDHASH_PARMS"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).scheme) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMS_KEYEDHASH_PARMS::scheme"
+    );
+}
+impl Default for TPMS_KEYEDHASH_PARMS {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct TPMS_ASYM_PARMS {
+    pub symmetric: TPMT_SYM_DEF_OBJECT,
+    pub scheme: TPMT_ASYM_SCHEME,
+}
+#[test]
+fn bindgen_test_layout_TPMS_ASYM_PARMS() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMS_ASYM_PARMS> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMS_ASYM_PARMS>(),
+        12usize,
+        "Size of TPMS_ASYM_PARMS"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMS_ASYM_PARMS>(),
+        2usize,
+        "Alignment of TPMS_ASYM_PARMS"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).symmetric) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMS_ASYM_PARMS::symmetric"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).scheme) as usize - ptr as usize },
+        6usize,
+        "Offset of field: TPMS_ASYM_PARMS::scheme"
+    );
+}
+impl Default for TPMS_ASYM_PARMS {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct TPMS_RSA_PARMS {
+    pub symmetric: TPMT_SYM_DEF_OBJECT,
+    pub scheme: TPMT_RSA_SCHEME,
+    pub keyBits: TPMI_RSA_KEY_BITS,
+    pub exponent: UINT32,
+}
+#[test]
+fn bindgen_test_layout_TPMS_RSA_PARMS() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMS_RSA_PARMS> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMS_RSA_PARMS>(),
+        20usize,
+        "Size of TPMS_RSA_PARMS"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMS_RSA_PARMS>(),
+        4usize,
+        "Alignment of TPMS_RSA_PARMS"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).symmetric) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMS_RSA_PARMS::symmetric"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).scheme) as usize - ptr as usize },
+        6usize,
+        "Offset of field: TPMS_RSA_PARMS::scheme"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).keyBits) as usize - ptr as usize },
+        12usize,
+        "Offset of field: TPMS_RSA_PARMS::keyBits"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).exponent) as usize - ptr as usize },
+        16usize,
+        "Offset of field: TPMS_RSA_PARMS::exponent"
+    );
+}
+impl Default for TPMS_RSA_PARMS {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct TPMS_ECC_PARMS {
+    pub symmetric: TPMT_SYM_DEF_OBJECT,
+    pub scheme: TPMT_ECC_SCHEME,
+    pub curveID: TPMI_ECC_CURVE,
+    pub kdf: TPMT_KDF_SCHEME,
+}
+#[test]
+fn bindgen_test_layout_TPMS_ECC_PARMS() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMS_ECC_PARMS> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMS_ECC_PARMS>(),
+        18usize,
+        "Size of TPMS_ECC_PARMS"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMS_ECC_PARMS>(),
+        2usize,
+        "Alignment of TPMS_ECC_PARMS"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).symmetric) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMS_ECC_PARMS::symmetric"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).scheme) as usize - ptr as usize },
+        6usize,
+        "Offset of field: TPMS_ECC_PARMS::scheme"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).curveID) as usize - ptr as usize },
+        12usize,
+        "Offset of field: TPMS_ECC_PARMS::curveID"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).kdf) as usize - ptr as usize },
+        14usize,
+        "Offset of field: TPMS_ECC_PARMS::kdf"
+    );
+}
+impl Default for TPMS_ECC_PARMS {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union TPMU_PUBLIC_PARMS {
+    pub keyedHashDetail: TPMS_KEYEDHASH_PARMS,
+    pub symDetail: TPMS_SYMCIPHER_PARMS,
+    pub rsaDetail: TPMS_RSA_PARMS,
+    pub eccDetail: TPMS_ECC_PARMS,
+    pub asymDetail: TPMS_ASYM_PARMS,
+}
+#[test]
+fn bindgen_test_layout_TPMU_PUBLIC_PARMS() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMU_PUBLIC_PARMS> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMU_PUBLIC_PARMS>(),
+        20usize,
+        "Size of TPMU_PUBLIC_PARMS"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMU_PUBLIC_PARMS>(),
+        4usize,
+        "Alignment of TPMU_PUBLIC_PARMS"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).keyedHashDetail) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_PUBLIC_PARMS::keyedHashDetail"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).symDetail) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_PUBLIC_PARMS::symDetail"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).rsaDetail) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_PUBLIC_PARMS::rsaDetail"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).eccDetail) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_PUBLIC_PARMS::eccDetail"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).asymDetail) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_PUBLIC_PARMS::asymDetail"
+    );
+}
+impl Default for TPMU_PUBLIC_PARMS {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct TPMT_PUBLIC_PARMS {
+    pub type_: TPMI_ALG_PUBLIC,
+    pub parameters: TPMU_PUBLIC_PARMS,
+}
+#[test]
+fn bindgen_test_layout_TPMT_PUBLIC_PARMS() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMT_PUBLIC_PARMS> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMT_PUBLIC_PARMS>(),
+        24usize,
+        "Size of TPMT_PUBLIC_PARMS"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMT_PUBLIC_PARMS>(),
+        4usize,
+        "Alignment of TPMT_PUBLIC_PARMS"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).type_) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMT_PUBLIC_PARMS::type_"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).parameters) as usize - ptr as usize },
+        4usize,
+        "Offset of field: TPMT_PUBLIC_PARMS::parameters"
+    );
+}
+impl Default for TPMT_PUBLIC_PARMS {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct TPMT_PUBLIC {
+    pub type_: TPMI_ALG_PUBLIC,
+    pub nameAlg: TPMI_ALG_HASH,
+    pub objectAttributes: TPMA_OBJECT,
+    pub authPolicy: TPM2B_DIGEST,
+    pub parameters: TPMU_PUBLIC_PARMS,
+    pub unique: TPMU_PUBLIC_ID,
+}
+#[test]
+fn bindgen_test_layout_TPMT_PUBLIC() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMT_PUBLIC> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMT_PUBLIC>(),
+        612usize,
+        "Size of TPMT_PUBLIC"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMT_PUBLIC>(),
+        4usize,
+        "Alignment of TPMT_PUBLIC"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).type_) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMT_PUBLIC::type_"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).nameAlg) as usize - ptr as usize },
+        2usize,
+        "Offset of field: TPMT_PUBLIC::nameAlg"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).objectAttributes) as usize - ptr as usize },
+        4usize,
+        "Offset of field: TPMT_PUBLIC::objectAttributes"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).authPolicy) as usize - ptr as usize },
+        8usize,
+        "Offset of field: TPMT_PUBLIC::authPolicy"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).parameters) as usize - ptr as usize },
+        76usize,
+        "Offset of field: TPMT_PUBLIC::parameters"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).unique) as usize - ptr as usize },
+        96usize,
+        "Offset of field: TPMT_PUBLIC::unique"
+    );
+}
+impl Default for TPMT_PUBLIC {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct TPM2B_PUBLIC {
+    pub size: UINT16,
+    pub publicArea: TPMT_PUBLIC,
+}
+#[test]
+fn bindgen_test_layout_TPM2B_PUBLIC() {
+    const UNINIT: ::std::mem::MaybeUninit<TPM2B_PUBLIC> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPM2B_PUBLIC>(),
+        616usize,
+        "Size of TPM2B_PUBLIC"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPM2B_PUBLIC>(),
+        4usize,
+        "Alignment of TPM2B_PUBLIC"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).size) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPM2B_PUBLIC::size"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).publicArea) as usize - ptr as usize },
+        4usize,
+        "Offset of field: TPM2B_PUBLIC::publicArea"
+    );
+}
+impl Default for TPM2B_PUBLIC {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPM2B_TEMPLATE {
+    pub size: UINT16,
+    pub buffer: [BYTE; 612usize],
+}
+#[test]
+fn bindgen_test_layout_TPM2B_TEMPLATE() {
+    const UNINIT: ::std::mem::MaybeUninit<TPM2B_TEMPLATE> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPM2B_TEMPLATE>(),
+        614usize,
+        "Size of TPM2B_TEMPLATE"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPM2B_TEMPLATE>(),
+        2usize,
+        "Alignment of TPM2B_TEMPLATE"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).size) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPM2B_TEMPLATE::size"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).buffer) as usize - ptr as usize },
+        2usize,
+        "Offset of field: TPM2B_TEMPLATE::buffer"
+    );
+}
+impl Default for TPM2B_TEMPLATE {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPM2B_PRIVATE_VENDOR_SPECIFIC {
+    pub size: UINT16,
+    pub buffer: [BYTE; 1280usize],
+}
+#[test]
+fn bindgen_test_layout_TPM2B_PRIVATE_VENDOR_SPECIFIC() {
+    const UNINIT: ::std::mem::MaybeUninit<TPM2B_PRIVATE_VENDOR_SPECIFIC> =
+        ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPM2B_PRIVATE_VENDOR_SPECIFIC>(),
+        1282usize,
+        "Size of TPM2B_PRIVATE_VENDOR_SPECIFIC"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPM2B_PRIVATE_VENDOR_SPECIFIC>(),
+        2usize,
+        "Alignment of TPM2B_PRIVATE_VENDOR_SPECIFIC"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).size) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPM2B_PRIVATE_VENDOR_SPECIFIC::size"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).buffer) as usize - ptr as usize },
+        2usize,
+        "Offset of field: TPM2B_PRIVATE_VENDOR_SPECIFIC::buffer"
+    );
+}
+impl Default for TPM2B_PRIVATE_VENDOR_SPECIFIC {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union TPMU_SENSITIVE_COMPOSITE {
+    pub rsa: TPM2B_PRIVATE_KEY_RSA,
+    pub ecc: TPM2B_ECC_PARAMETER,
+    pub bits: TPM2B_SENSITIVE_DATA,
+    pub sym: TPM2B_SYM_KEY,
+    pub any: TPM2B_PRIVATE_VENDOR_SPECIFIC,
+}
+#[test]
+fn bindgen_test_layout_TPMU_SENSITIVE_COMPOSITE() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMU_SENSITIVE_COMPOSITE> =
+        ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMU_SENSITIVE_COMPOSITE>(),
+        1282usize,
+        "Size of TPMU_SENSITIVE_COMPOSITE"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMU_SENSITIVE_COMPOSITE>(),
+        2usize,
+        "Alignment of TPMU_SENSITIVE_COMPOSITE"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).rsa) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_SENSITIVE_COMPOSITE::rsa"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).ecc) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_SENSITIVE_COMPOSITE::ecc"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).bits) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_SENSITIVE_COMPOSITE::bits"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).sym) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_SENSITIVE_COMPOSITE::sym"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).any) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMU_SENSITIVE_COMPOSITE::any"
+    );
+}
+impl Default for TPMU_SENSITIVE_COMPOSITE {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct TPMT_SENSITIVE {
+    pub sensitiveType: TPMI_ALG_PUBLIC,
+    pub authValue: TPM2B_AUTH,
+    pub seedValue: TPM2B_DIGEST,
+    pub sensitive: TPMU_SENSITIVE_COMPOSITE,
+}
+#[test]
+fn bindgen_test_layout_TPMT_SENSITIVE() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMT_SENSITIVE> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMT_SENSITIVE>(),
+        1416usize,
+        "Size of TPMT_SENSITIVE"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMT_SENSITIVE>(),
+        2usize,
+        "Alignment of TPMT_SENSITIVE"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).sensitiveType) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMT_SENSITIVE::sensitiveType"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).authValue) as usize - ptr as usize },
+        2usize,
+        "Offset of field: TPMT_SENSITIVE::authValue"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).seedValue) as usize - ptr as usize },
+        68usize,
+        "Offset of field: TPMT_SENSITIVE::seedValue"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).sensitive) as usize - ptr as usize },
+        134usize,
+        "Offset of field: TPMT_SENSITIVE::sensitive"
+    );
+}
+impl Default for TPMT_SENSITIVE {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct TPM2B_SENSITIVE {
+    pub size: UINT16,
+    pub sensitiveArea: TPMT_SENSITIVE,
+}
+#[test]
+fn bindgen_test_layout_TPM2B_SENSITIVE() {
+    const UNINIT: ::std::mem::MaybeUninit<TPM2B_SENSITIVE> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPM2B_SENSITIVE>(),
+        1418usize,
+        "Size of TPM2B_SENSITIVE"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPM2B_SENSITIVE>(),
+        2usize,
+        "Alignment of TPM2B_SENSITIVE"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).size) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPM2B_SENSITIVE::size"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).sensitiveArea) as usize - ptr as usize },
+        2usize,
+        "Offset of field: TPM2B_SENSITIVE::sensitiveArea"
+    );
+}
+impl Default for TPM2B_SENSITIVE {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct _PRIVATE {
+    pub integrityOuter: TPM2B_DIGEST,
+    pub integrityInner: TPM2B_DIGEST,
+    pub sensitive: TPM2B_SENSITIVE,
+}
+#[test]
+fn bindgen_test_layout__PRIVATE() {
+    const UNINIT: ::std::mem::MaybeUninit<_PRIVATE> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<_PRIVATE>(),
+        1550usize,
+        "Size of _PRIVATE"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<_PRIVATE>(),
+        2usize,
+        "Alignment of _PRIVATE"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).integrityOuter) as usize - ptr as usize },
+        0usize,
+        "Offset of field: _PRIVATE::integrityOuter"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).integrityInner) as usize - ptr as usize },
+        66usize,
+        "Offset of field: _PRIVATE::integrityInner"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).sensitive) as usize - ptr as usize },
+        132usize,
+        "Offset of field: _PRIVATE::sensitive"
+    );
+}
+impl Default for _PRIVATE {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPM2B_PRIVATE {
+    pub size: UINT16,
+    pub buffer: [BYTE; 1550usize],
+}
+#[test]
+fn bindgen_test_layout_TPM2B_PRIVATE() {
+    const UNINIT: ::std::mem::MaybeUninit<TPM2B_PRIVATE> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPM2B_PRIVATE>(),
+        1552usize,
+        "Size of TPM2B_PRIVATE"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPM2B_PRIVATE>(),
+        2usize,
+        "Alignment of TPM2B_PRIVATE"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).size) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPM2B_PRIVATE::size"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).buffer) as usize - ptr as usize },
+        2usize,
+        "Offset of field: TPM2B_PRIVATE::buffer"
+    );
+}
+impl Default for TPM2B_PRIVATE {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPMS_ID_OBJECT {
+    pub integrityHMAC: TPM2B_DIGEST,
+    pub encIdentity: TPM2B_DIGEST,
+}
+#[test]
+fn bindgen_test_layout_TPMS_ID_OBJECT() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMS_ID_OBJECT> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMS_ID_OBJECT>(),
+        132usize,
+        "Size of TPMS_ID_OBJECT"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMS_ID_OBJECT>(),
+        2usize,
+        "Alignment of TPMS_ID_OBJECT"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).integrityHMAC) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMS_ID_OBJECT::integrityHMAC"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).encIdentity) as usize - ptr as usize },
+        66usize,
+        "Offset of field: TPMS_ID_OBJECT::encIdentity"
+    );
+}
+impl Default for TPMS_ID_OBJECT {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPM2B_ID_OBJECT {
+    pub size: UINT16,
+    pub credential: [BYTE; 132usize],
+}
+#[test]
+fn bindgen_test_layout_TPM2B_ID_OBJECT() {
+    const UNINIT: ::std::mem::MaybeUninit<TPM2B_ID_OBJECT> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPM2B_ID_OBJECT>(),
+        134usize,
+        "Size of TPM2B_ID_OBJECT"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPM2B_ID_OBJECT>(),
+        2usize,
+        "Alignment of TPM2B_ID_OBJECT"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).size) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPM2B_ID_OBJECT::size"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).credential) as usize - ptr as usize },
+        2usize,
+        "Offset of field: TPM2B_ID_OBJECT::credential"
+    );
+}
+impl Default for TPM2B_ID_OBJECT {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+pub type TPM2_NV_INDEX = u32;
+pub type TPM2_NT = UINT8;
+#[repr(C)]
+#[derive(Debug, Default, Copy, Clone)]
+pub struct TPMS_NV_PIN_COUNTER_PARAMETERS {
+    pub pinCount: UINT32,
+    pub pinLimit: UINT32,
+}
+#[test]
+fn bindgen_test_layout_TPMS_NV_PIN_COUNTER_PARAMETERS() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMS_NV_PIN_COUNTER_PARAMETERS> =
+        ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMS_NV_PIN_COUNTER_PARAMETERS>(),
+        8usize,
+        "Size of TPMS_NV_PIN_COUNTER_PARAMETERS"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMS_NV_PIN_COUNTER_PARAMETERS>(),
+        4usize,
+        "Alignment of TPMS_NV_PIN_COUNTER_PARAMETERS"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).pinCount) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMS_NV_PIN_COUNTER_PARAMETERS::pinCount"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).pinLimit) as usize - ptr as usize },
+        4usize,
+        "Offset of field: TPMS_NV_PIN_COUNTER_PARAMETERS::pinLimit"
+    );
+}
+pub type TPMA_NV = u32;
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPMS_NV_PUBLIC {
+    pub nvIndex: TPMI_RH_NV_INDEX,
+    pub nameAlg: TPMI_ALG_HASH,
+    pub attributes: TPMA_NV,
+    pub authPolicy: TPM2B_DIGEST,
+    pub dataSize: UINT16,
+}
+#[test]
+fn bindgen_test_layout_TPMS_NV_PUBLIC() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMS_NV_PUBLIC> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMS_NV_PUBLIC>(),
+        80usize,
+        "Size of TPMS_NV_PUBLIC"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMS_NV_PUBLIC>(),
+        4usize,
+        "Alignment of TPMS_NV_PUBLIC"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).nvIndex) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMS_NV_PUBLIC::nvIndex"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).nameAlg) as usize - ptr as usize },
+        4usize,
+        "Offset of field: TPMS_NV_PUBLIC::nameAlg"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).attributes) as usize - ptr as usize },
+        8usize,
+        "Offset of field: TPMS_NV_PUBLIC::attributes"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).authPolicy) as usize - ptr as usize },
+        12usize,
+        "Offset of field: TPMS_NV_PUBLIC::authPolicy"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).dataSize) as usize - ptr as usize },
+        78usize,
+        "Offset of field: TPMS_NV_PUBLIC::dataSize"
+    );
+}
+impl Default for TPMS_NV_PUBLIC {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPM2B_NV_PUBLIC {
+    pub size: UINT16,
+    pub nvPublic: TPMS_NV_PUBLIC,
+}
+#[test]
+fn bindgen_test_layout_TPM2B_NV_PUBLIC() {
+    const UNINIT: ::std::mem::MaybeUninit<TPM2B_NV_PUBLIC> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPM2B_NV_PUBLIC>(),
+        84usize,
+        "Size of TPM2B_NV_PUBLIC"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPM2B_NV_PUBLIC>(),
+        4usize,
+        "Alignment of TPM2B_NV_PUBLIC"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).size) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPM2B_NV_PUBLIC::size"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).nvPublic) as usize - ptr as usize },
+        4usize,
+        "Offset of field: TPM2B_NV_PUBLIC::nvPublic"
+    );
+}
+impl Default for TPM2B_NV_PUBLIC {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPM2B_CONTEXT_SENSITIVE {
+    pub size: UINT16,
+    pub buffer: [BYTE; 5120usize],
+}
+#[test]
+fn bindgen_test_layout_TPM2B_CONTEXT_SENSITIVE() {
+    const UNINIT: ::std::mem::MaybeUninit<TPM2B_CONTEXT_SENSITIVE> =
+        ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPM2B_CONTEXT_SENSITIVE>(),
+        5122usize,
+        "Size of TPM2B_CONTEXT_SENSITIVE"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPM2B_CONTEXT_SENSITIVE>(),
+        2usize,
+        "Alignment of TPM2B_CONTEXT_SENSITIVE"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).size) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPM2B_CONTEXT_SENSITIVE::size"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).buffer) as usize - ptr as usize },
+        2usize,
+        "Offset of field: TPM2B_CONTEXT_SENSITIVE::buffer"
+    );
+}
+impl Default for TPM2B_CONTEXT_SENSITIVE {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPMS_CONTEXT_DATA {
+    pub integrity: TPM2B_DIGEST,
+    pub encrypted: TPM2B_CONTEXT_SENSITIVE,
+}
+#[test]
+fn bindgen_test_layout_TPMS_CONTEXT_DATA() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMS_CONTEXT_DATA> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMS_CONTEXT_DATA>(),
+        5188usize,
+        "Size of TPMS_CONTEXT_DATA"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMS_CONTEXT_DATA>(),
+        2usize,
+        "Alignment of TPMS_CONTEXT_DATA"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).integrity) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMS_CONTEXT_DATA::integrity"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).encrypted) as usize - ptr as usize },
+        66usize,
+        "Offset of field: TPMS_CONTEXT_DATA::encrypted"
+    );
+}
+impl Default for TPMS_CONTEXT_DATA {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPM2B_CONTEXT_DATA {
+    pub size: UINT16,
+    pub buffer: [BYTE; 5188usize],
+}
+#[test]
+fn bindgen_test_layout_TPM2B_CONTEXT_DATA() {
+    const UNINIT: ::std::mem::MaybeUninit<TPM2B_CONTEXT_DATA> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPM2B_CONTEXT_DATA>(),
+        5190usize,
+        "Size of TPM2B_CONTEXT_DATA"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPM2B_CONTEXT_DATA>(),
+        2usize,
+        "Alignment of TPM2B_CONTEXT_DATA"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).size) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPM2B_CONTEXT_DATA::size"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).buffer) as usize - ptr as usize },
+        2usize,
+        "Offset of field: TPM2B_CONTEXT_DATA::buffer"
+    );
+}
+impl Default for TPM2B_CONTEXT_DATA {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPMS_CONTEXT {
+    pub sequence: UINT64,
+    pub savedHandle: TPMI_DH_CONTEXT,
+    pub hierarchy: TPMI_RH_HIERARCHY,
+    pub contextBlob: TPM2B_CONTEXT_DATA,
+}
+#[test]
+fn bindgen_test_layout_TPMS_CONTEXT() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMS_CONTEXT> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMS_CONTEXT>(),
+        5208usize,
+        "Size of TPMS_CONTEXT"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMS_CONTEXT>(),
+        8usize,
+        "Alignment of TPMS_CONTEXT"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).sequence) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMS_CONTEXT::sequence"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).savedHandle) as usize - ptr as usize },
+        8usize,
+        "Offset of field: TPMS_CONTEXT::savedHandle"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).hierarchy) as usize - ptr as usize },
+        12usize,
+        "Offset of field: TPMS_CONTEXT::hierarchy"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).contextBlob) as usize - ptr as usize },
+        16usize,
+        "Offset of field: TPMS_CONTEXT::contextBlob"
+    );
+}
+impl Default for TPMS_CONTEXT {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPMS_CREATION_DATA {
+    pub pcrSelect: TPML_PCR_SELECTION,
+    pub pcrDigest: TPM2B_DIGEST,
+    pub locality: TPMA_LOCALITY,
+    pub parentNameAlg: TPM2_ALG_ID,
+    pub parentName: TPM2B_NAME,
+    pub parentQualifiedName: TPM2B_NAME,
+    pub outsideInfo: TPM2B_DATA,
+}
+#[test]
+fn bindgen_test_layout_TPMS_CREATION_DATA() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMS_CREATION_DATA> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMS_CREATION_DATA>(),
+        408usize,
+        "Size of TPMS_CREATION_DATA"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMS_CREATION_DATA>(),
+        4usize,
+        "Alignment of TPMS_CREATION_DATA"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).pcrSelect) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMS_CREATION_DATA::pcrSelect"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).pcrDigest) as usize - ptr as usize },
+        132usize,
+        "Offset of field: TPMS_CREATION_DATA::pcrDigest"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).locality) as usize - ptr as usize },
+        198usize,
+        "Offset of field: TPMS_CREATION_DATA::locality"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).parentNameAlg) as usize - ptr as usize },
+        200usize,
+        "Offset of field: TPMS_CREATION_DATA::parentNameAlg"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).parentName) as usize - ptr as usize },
+        202usize,
+        "Offset of field: TPMS_CREATION_DATA::parentName"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).parentQualifiedName) as usize - ptr as usize },
+        272usize,
+        "Offset of field: TPMS_CREATION_DATA::parentQualifiedName"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).outsideInfo) as usize - ptr as usize },
+        342usize,
+        "Offset of field: TPMS_CREATION_DATA::outsideInfo"
+    );
+}
+impl Default for TPMS_CREATION_DATA {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPM2B_CREATION_DATA {
+    pub size: UINT16,
+    pub creationData: TPMS_CREATION_DATA,
+}
+#[test]
+fn bindgen_test_layout_TPM2B_CREATION_DATA() {
+    const UNINIT: ::std::mem::MaybeUninit<TPM2B_CREATION_DATA> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPM2B_CREATION_DATA>(),
+        412usize,
+        "Size of TPM2B_CREATION_DATA"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPM2B_CREATION_DATA>(),
+        4usize,
+        "Alignment of TPM2B_CREATION_DATA"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).size) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPM2B_CREATION_DATA::size"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).creationData) as usize - ptr as usize },
+        4usize,
+        "Offset of field: TPM2B_CREATION_DATA::creationData"
+    );
+}
+impl Default for TPM2B_CREATION_DATA {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+pub type TPM_AT = UINT32;
+pub type TPM_EA = UINT32;
+#[repr(C)]
+#[derive(Debug, Default, Copy, Clone)]
+pub struct TPMS_AC_OUTPUT {
+    pub tag: TPM_AT,
+    pub data: UINT32,
+}
+#[test]
+fn bindgen_test_layout_TPMS_AC_OUTPUT() {
+    const UNINIT: ::std::mem::MaybeUninit<TPMS_AC_OUTPUT> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPMS_AC_OUTPUT>(),
+        8usize,
+        "Size of TPMS_AC_OUTPUT"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPMS_AC_OUTPUT>(),
+        4usize,
+        "Alignment of TPMS_AC_OUTPUT"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).tag) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPMS_AC_OUTPUT::tag"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).data) as usize - ptr as usize },
+        4usize,
+        "Offset of field: TPMS_AC_OUTPUT::data"
+    );
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPML_AC_CAPABILITIES {
+    pub count: UINT32,
+    pub acCapabilities: [TPMS_AC_OUTPUT; 128usize],
+}
+#[test]
+fn bindgen_test_layout_TPML_AC_CAPABILITIES() {
+    const UNINIT: ::std::mem::MaybeUninit<TPML_AC_CAPABILITIES> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPML_AC_CAPABILITIES>(),
+        1028usize,
+        "Size of TPML_AC_CAPABILITIES"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPML_AC_CAPABILITIES>(),
+        4usize,
+        "Alignment of TPML_AC_CAPABILITIES"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).count) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPML_AC_CAPABILITIES::count"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).acCapabilities) as usize - ptr as usize },
+        4usize,
+        "Offset of field: TPML_AC_CAPABILITIES::acCapabilities"
+    );
+}
+impl Default for TPML_AC_CAPABILITIES {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TPML_INTEL_PTT_PROPERTY {
+    pub count: UINT32,
+    pub property: [UINT32; 256usize],
+}
+#[test]
+fn bindgen_test_layout_TPML_INTEL_PTT_PROPERTY() {
+    const UNINIT: ::std::mem::MaybeUninit<TPML_INTEL_PTT_PROPERTY> =
+        ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TPML_INTEL_PTT_PROPERTY>(),
+        1028usize,
+        "Size of TPML_INTEL_PTT_PROPERTY"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TPML_INTEL_PTT_PROPERTY>(),
+        4usize,
+        "Alignment of TPML_INTEL_PTT_PROPERTY"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).count) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TPML_INTEL_PTT_PROPERTY::count"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).property) as usize - ptr as usize },
+        4usize,
+        "Offset of field: TPML_INTEL_PTT_PROPERTY::property"
+    );
+}
+impl Default for TPML_INTEL_PTT_PROPERTY {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+pub type nfds_t = ::std::os::raw::c_ulong;
+#[repr(C)]
+#[derive(Debug, Default, Copy, Clone)]
+pub struct pollfd {
+    pub fd: ::std::os::raw::c_int,
+    pub events: ::std::os::raw::c_short,
+    pub revents: ::std::os::raw::c_short,
+}
+#[test]
+fn bindgen_test_layout_pollfd() {
+    const UNINIT: ::std::mem::MaybeUninit<pollfd> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(::std::mem::size_of::<pollfd>(), 8usize, "Size of pollfd");
+    assert_eq!(
+        ::std::mem::align_of::<pollfd>(),
+        4usize,
+        "Alignment of pollfd"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).fd) as usize - ptr as usize },
+        0usize,
+        "Offset of field: pollfd::fd"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).events) as usize - ptr as usize },
+        4usize,
+        "Offset of field: pollfd::events"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).revents) as usize - ptr as usize },
+        6usize,
+        "Offset of field: pollfd::revents"
+    );
+}
+extern "C" {
+    pub fn poll(
+        __fds: *mut pollfd,
+        __nfds: nfds_t,
+        __timeout: ::std::os::raw::c_int,
+    ) -> ::std::os::raw::c_int;
+}
+pub type TSS2_TCTI_POLL_HANDLE = pollfd;
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TSS2_TCTI_OPAQUE_CONTEXT_BLOB {
+    _unused: [u8; 0],
+}
+pub type TSS2_TCTI_CONTEXT = TSS2_TCTI_OPAQUE_CONTEXT_BLOB;
+pub type TSS2_TCTI_TRANSMIT_FCN = ::std::option::Option<
+    unsafe extern "C" fn(
+        tctiContext: *mut TSS2_TCTI_CONTEXT,
+        size: size_t,
+        command: *const u8,
+    ) -> TSS2_RC,
+>;
+pub type TSS2_TCTI_RECEIVE_FCN = ::std::option::Option<
+    unsafe extern "C" fn(
+        tctiContext: *mut TSS2_TCTI_CONTEXT,
+        size: *mut size_t,
+        response: *mut u8,
+        timeout: i32,
+    ) -> TSS2_RC,
+>;
+pub type TSS2_TCTI_FINALIZE_FCN =
+    ::std::option::Option<unsafe extern "C" fn(tctiContext: *mut TSS2_TCTI_CONTEXT)>;
+pub type TSS2_TCTI_CANCEL_FCN =
+    ::std::option::Option<unsafe extern "C" fn(tctiContext: *mut TSS2_TCTI_CONTEXT) -> TSS2_RC>;
+pub type TSS2_TCTI_GET_POLL_HANDLES_FCN = ::std::option::Option<
+    unsafe extern "C" fn(
+        tctiContext: *mut TSS2_TCTI_CONTEXT,
+        handles: *mut TSS2_TCTI_POLL_HANDLE,
+        num_handles: *mut size_t,
+    ) -> TSS2_RC,
+>;
+pub type TSS2_TCTI_SET_LOCALITY_FCN = ::std::option::Option<
+    unsafe extern "C" fn(tctiContext: *mut TSS2_TCTI_CONTEXT, locality: u8) -> TSS2_RC,
+>;
+pub type TSS2_TCTI_MAKE_STICKY_FCN = ::std::option::Option<
+    unsafe extern "C" fn(
+        tctiContext: *mut TSS2_TCTI_CONTEXT,
+        handle: *mut TPM2_HANDLE,
+        sticky: u8,
+    ) -> TSS2_RC,
+>;
+pub type TSS2_TCTI_INIT_FUNC = ::std::option::Option<
+    unsafe extern "C" fn(
+        tctiContext: *mut TSS2_TCTI_CONTEXT,
+        size: *mut size_t,
+        config: *const ::std::os::raw::c_char,
+    ) -> TSS2_RC,
+>;
+#[repr(C)]
+#[derive(Debug, Default, Copy, Clone)]
+pub struct TSS2_TCTI_CONTEXT_COMMON_V1 {
+    pub magic: u64,
+    pub version: u32,
+    pub transmit: TSS2_TCTI_TRANSMIT_FCN,
+    pub receive: TSS2_TCTI_RECEIVE_FCN,
+    pub finalize: TSS2_TCTI_FINALIZE_FCN,
+    pub cancel: TSS2_TCTI_CANCEL_FCN,
+    pub getPollHandles: TSS2_TCTI_GET_POLL_HANDLES_FCN,
+    pub setLocality: TSS2_TCTI_SET_LOCALITY_FCN,
+}
+#[test]
+fn bindgen_test_layout_TSS2_TCTI_CONTEXT_COMMON_V1() {
+    const UNINIT: ::std::mem::MaybeUninit<TSS2_TCTI_CONTEXT_COMMON_V1> =
+        ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TSS2_TCTI_CONTEXT_COMMON_V1>(),
+        64usize,
+        "Size of TSS2_TCTI_CONTEXT_COMMON_V1"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TSS2_TCTI_CONTEXT_COMMON_V1>(),
+        8usize,
+        "Alignment of TSS2_TCTI_CONTEXT_COMMON_V1"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).magic) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TSS2_TCTI_CONTEXT_COMMON_V1::magic"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).version) as usize - ptr as usize },
+        8usize,
+        "Offset of field: TSS2_TCTI_CONTEXT_COMMON_V1::version"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).transmit) as usize - ptr as usize },
+        16usize,
+        "Offset of field: TSS2_TCTI_CONTEXT_COMMON_V1::transmit"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).receive) as usize - ptr as usize },
+        24usize,
+        "Offset of field: TSS2_TCTI_CONTEXT_COMMON_V1::receive"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).finalize) as usize - ptr as usize },
+        32usize,
+        "Offset of field: TSS2_TCTI_CONTEXT_COMMON_V1::finalize"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).cancel) as usize - ptr as usize },
+        40usize,
+        "Offset of field: TSS2_TCTI_CONTEXT_COMMON_V1::cancel"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).getPollHandles) as usize - ptr as usize },
+        48usize,
+        "Offset of field: TSS2_TCTI_CONTEXT_COMMON_V1::getPollHandles"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).setLocality) as usize - ptr as usize },
+        56usize,
+        "Offset of field: TSS2_TCTI_CONTEXT_COMMON_V1::setLocality"
+    );
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy, Clone)]
+pub struct TSS2_TCTI_CONTEXT_COMMON_V2 {
+    pub v1: TSS2_TCTI_CONTEXT_COMMON_V1,
+    pub makeSticky: TSS2_TCTI_MAKE_STICKY_FCN,
+}
+#[test]
+fn bindgen_test_layout_TSS2_TCTI_CONTEXT_COMMON_V2() {
+    const UNINIT: ::std::mem::MaybeUninit<TSS2_TCTI_CONTEXT_COMMON_V2> =
+        ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TSS2_TCTI_CONTEXT_COMMON_V2>(),
+        72usize,
+        "Size of TSS2_TCTI_CONTEXT_COMMON_V2"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TSS2_TCTI_CONTEXT_COMMON_V2>(),
+        8usize,
+        "Alignment of TSS2_TCTI_CONTEXT_COMMON_V2"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).v1) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TSS2_TCTI_CONTEXT_COMMON_V2::v1"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).makeSticky) as usize - ptr as usize },
+        64usize,
+        "Offset of field: TSS2_TCTI_CONTEXT_COMMON_V2::makeSticky"
+    );
+}
+pub type TSS2_TCTI_CONTEXT_COMMON_CURRENT = TSS2_TCTI_CONTEXT_COMMON_V2;
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TSS2_TCTI_INFO {
+    pub version: u32,
+    pub name: *const ::std::os::raw::c_char,
+    pub description: *const ::std::os::raw::c_char,
+    pub config_help: *const ::std::os::raw::c_char,
+    pub init: TSS2_TCTI_INIT_FUNC,
+}
+#[test]
+fn bindgen_test_layout_TSS2_TCTI_INFO() {
+    const UNINIT: ::std::mem::MaybeUninit<TSS2_TCTI_INFO> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TSS2_TCTI_INFO>(),
+        40usize,
+        "Size of TSS2_TCTI_INFO"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TSS2_TCTI_INFO>(),
+        8usize,
+        "Alignment of TSS2_TCTI_INFO"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).version) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TSS2_TCTI_INFO::version"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).name) as usize - ptr as usize },
+        8usize,
+        "Offset of field: TSS2_TCTI_INFO::name"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).description) as usize - ptr as usize },
+        16usize,
+        "Offset of field: TSS2_TCTI_INFO::description"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).config_help) as usize - ptr as usize },
+        24usize,
+        "Offset of field: TSS2_TCTI_INFO::config_help"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).init) as usize - ptr as usize },
+        32usize,
+        "Offset of field: TSS2_TCTI_INFO::init"
+    );
+}
+impl Default for TSS2_TCTI_INFO {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+pub type TSS2_TCTI_INFO_FUNC =
+    ::std::option::Option<unsafe extern "C" fn() -> *const TSS2_TCTI_INFO>;
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct _TSS2_SYS_OPAQUE_CONTEXT_BLOB {
+    _unused: [u8; 0],
+}
+pub type TSS2_SYS_CONTEXT = _TSS2_SYS_OPAQUE_CONTEXT_BLOB;
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TSS2L_SYS_AUTH_COMMAND {
+    pub count: u16,
+    pub auths: [TPMS_AUTH_COMMAND; 3usize],
+}
+#[test]
+fn bindgen_test_layout_TSS2L_SYS_AUTH_COMMAND() {
+    const UNINIT: ::std::mem::MaybeUninit<TSS2L_SYS_AUTH_COMMAND> =
+        ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TSS2L_SYS_AUTH_COMMAND>(),
+        424usize,
+        "Size of TSS2L_SYS_AUTH_COMMAND"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TSS2L_SYS_AUTH_COMMAND>(),
+        4usize,
+        "Alignment of TSS2L_SYS_AUTH_COMMAND"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).count) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TSS2L_SYS_AUTH_COMMAND::count"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).auths) as usize - ptr as usize },
+        4usize,
+        "Offset of field: TSS2L_SYS_AUTH_COMMAND::auths"
+    );
+}
+impl Default for TSS2L_SYS_AUTH_COMMAND {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct TSS2L_SYS_AUTH_RESPONSE {
+    pub count: u16,
+    pub auths: [TPMS_AUTH_RESPONSE; 3usize],
+}
+#[test]
+fn bindgen_test_layout_TSS2L_SYS_AUTH_RESPONSE() {
+    const UNINIT: ::std::mem::MaybeUninit<TSS2L_SYS_AUTH_RESPONSE> =
+        ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<TSS2L_SYS_AUTH_RESPONSE>(),
+        404usize,
+        "Size of TSS2L_SYS_AUTH_RESPONSE"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<TSS2L_SYS_AUTH_RESPONSE>(),
+        2usize,
+        "Alignment of TSS2L_SYS_AUTH_RESPONSE"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).count) as usize - ptr as usize },
+        0usize,
+        "Offset of field: TSS2L_SYS_AUTH_RESPONSE::count"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).auths) as usize - ptr as usize },
+        2usize,
+        "Offset of field: TSS2L_SYS_AUTH_RESPONSE::auths"
+    );
+}
+impl Default for TSS2L_SYS_AUTH_RESPONSE {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+extern "C" {
+    pub fn Tss2_Sys_GetContextSize(maxCommandResponseSize: size_t) -> size_t;
+}
+extern "C" {
+    pub fn Tss2_Sys_Initialize(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        contextSize: size_t,
+        tctiContext: *mut TSS2_TCTI_CONTEXT,
+        abiVersion: *mut TSS2_ABI_VERSION,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_Finalize(sysContext: *mut TSS2_SYS_CONTEXT);
+}
+extern "C" {
+    pub fn Tss2_Sys_GetTctiContext(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        tctiContext: *mut *mut TSS2_TCTI_CONTEXT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_GetDecryptParam(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        decryptParamSize: *mut size_t,
+        decryptParamBuffer: *mut *const u8,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_SetDecryptParam(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        decryptParamSize: size_t,
+        decryptParamBuffer: *const u8,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_GetCpBuffer(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        cpBufferUsedSize: *mut size_t,
+        cpBuffer: *mut *const u8,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_SetCmdAuths(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_ExecuteAsync(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_ExecuteFinish(sysContext: *mut TSS2_SYS_CONTEXT, timeout: i32) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_Execute(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_GetCommandCode(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        commandCode: *mut UINT8,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_GetRspAuths(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_GetEncryptParam(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        encryptParamSize: *mut size_t,
+        encryptParamBuffer: *mut *const u8,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_SetEncryptParam(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        encryptParamSize: size_t,
+        encryptParamBuffer: *const u8,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_GetRpBuffer(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        rpBufferUsedSize: *mut size_t,
+        rpBuffer: *mut *const u8,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_Startup_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        startupType: TPM2_SU,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_Startup_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_Startup(sysContext: *mut TSS2_SYS_CONTEXT, startupType: TPM2_SU) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_Shutdown_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        shutdownType: TPM2_SU,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_Shutdown_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_Shutdown(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        shutdownType: TPM2_SU,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_SelfTest_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        fullTest: TPMI_YES_NO,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_SelfTest_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_SelfTest(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        fullTest: TPMI_YES_NO,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_IncrementalSelfTest_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        toTest: *const TPML_ALG,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_IncrementalSelfTest_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        toDoList: *mut TPML_ALG,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_IncrementalSelfTest(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        toTest: *const TPML_ALG,
+        toDoList: *mut TPML_ALG,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_GetTestResult_Prepare(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_GetTestResult_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        outData: *mut TPM2B_MAX_BUFFER,
+        testResult: *mut TPM2_RC,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_GetTestResult(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        outData: *mut TPM2B_MAX_BUFFER,
+        testResult: *mut TPM2_RC,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_StartAuthSession_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        tpmKey: TPMI_DH_OBJECT,
+        bind: TPMI_DH_ENTITY,
+        nonceCaller: *const TPM2B_NONCE,
+        encryptedSalt: *const TPM2B_ENCRYPTED_SECRET,
+        sessionType: TPM2_SE,
+        symmetric: *const TPMT_SYM_DEF,
+        authHash: TPMI_ALG_HASH,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_StartAuthSession_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        sessionHandle: *mut TPMI_SH_AUTH_SESSION,
+        nonceTPM: *mut TPM2B_NONCE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_StartAuthSession(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        tpmKey: TPMI_DH_OBJECT,
+        bind: TPMI_DH_ENTITY,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        nonceCaller: *const TPM2B_NONCE,
+        encryptedSalt: *const TPM2B_ENCRYPTED_SECRET,
+        sessionType: TPM2_SE,
+        symmetric: *const TPMT_SYM_DEF,
+        authHash: TPMI_ALG_HASH,
+        sessionHandle: *mut TPMI_SH_AUTH_SESSION,
+        nonceTPM: *mut TPM2B_NONCE,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyRestart_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        sessionHandle: TPMI_SH_POLICY,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyRestart_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyRestart(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        sessionHandle: TPMI_SH_POLICY,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_Create_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        parentHandle: TPMI_DH_OBJECT,
+        inSensitive: *const TPM2B_SENSITIVE_CREATE,
+        inPublic: *const TPM2B_PUBLIC,
+        outsideInfo: *const TPM2B_DATA,
+        creationPCR: *const TPML_PCR_SELECTION,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_Create_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        outPrivate: *mut TPM2B_PRIVATE,
+        outPublic: *mut TPM2B_PUBLIC,
+        creationData: *mut TPM2B_CREATION_DATA,
+        creationHash: *mut TPM2B_DIGEST,
+        creationTicket: *mut TPMT_TK_CREATION,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_Create(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        parentHandle: TPMI_DH_OBJECT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        inSensitive: *const TPM2B_SENSITIVE_CREATE,
+        inPublic: *const TPM2B_PUBLIC,
+        outsideInfo: *const TPM2B_DATA,
+        creationPCR: *const TPML_PCR_SELECTION,
+        outPrivate: *mut TPM2B_PRIVATE,
+        outPublic: *mut TPM2B_PUBLIC,
+        creationData: *mut TPM2B_CREATION_DATA,
+        creationHash: *mut TPM2B_DIGEST,
+        creationTicket: *mut TPMT_TK_CREATION,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_Load_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        parentHandle: TPMI_DH_OBJECT,
+        inPrivate: *const TPM2B_PRIVATE,
+        inPublic: *const TPM2B_PUBLIC,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_Load_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        objectHandle: *mut TPM2_HANDLE,
+        name: *mut TPM2B_NAME,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_Load(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        parentHandle: TPMI_DH_OBJECT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        inPrivate: *const TPM2B_PRIVATE,
+        inPublic: *const TPM2B_PUBLIC,
+        objectHandle: *mut TPM2_HANDLE,
+        name: *mut TPM2B_NAME,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_LoadExternal_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        inPrivate: *const TPM2B_SENSITIVE,
+        inPublic: *const TPM2B_PUBLIC,
+        hierarchy: TPMI_RH_HIERARCHY,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_LoadExternal_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        objectHandle: *mut TPM2_HANDLE,
+        name: *mut TPM2B_NAME,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_LoadExternal(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        inPrivate: *const TPM2B_SENSITIVE,
+        inPublic: *const TPM2B_PUBLIC,
+        hierarchy: TPMI_RH_HIERARCHY,
+        objectHandle: *mut TPM2_HANDLE,
+        name: *mut TPM2B_NAME,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_ReadPublic_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        objectHandle: TPMI_DH_OBJECT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_ReadPublic_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        outPublic: *mut TPM2B_PUBLIC,
+        name: *mut TPM2B_NAME,
+        qualifiedName: *mut TPM2B_NAME,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_ReadPublic(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        objectHandle: TPMI_DH_OBJECT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        outPublic: *mut TPM2B_PUBLIC,
+        name: *mut TPM2B_NAME,
+        qualifiedName: *mut TPM2B_NAME,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_ActivateCredential_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        activateHandle: TPMI_DH_OBJECT,
+        keyHandle: TPMI_DH_OBJECT,
+        credentialBlob: *const TPM2B_ID_OBJECT,
+        secret: *const TPM2B_ENCRYPTED_SECRET,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_ActivateCredential_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        certInfo: *mut TPM2B_DIGEST,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_ActivateCredential(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        activateHandle: TPMI_DH_OBJECT,
+        keyHandle: TPMI_DH_OBJECT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        credentialBlob: *const TPM2B_ID_OBJECT,
+        secret: *const TPM2B_ENCRYPTED_SECRET,
+        certInfo: *mut TPM2B_DIGEST,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_MakeCredential_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        handle: TPMI_DH_OBJECT,
+        credential: *const TPM2B_DIGEST,
+        objectName: *const TPM2B_NAME,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_MakeCredential_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        credentialBlob: *mut TPM2B_ID_OBJECT,
+        secret: *mut TPM2B_ENCRYPTED_SECRET,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_MakeCredential(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        handle: TPMI_DH_OBJECT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        credential: *const TPM2B_DIGEST,
+        objectName: *const TPM2B_NAME,
+        credentialBlob: *mut TPM2B_ID_OBJECT,
+        secret: *mut TPM2B_ENCRYPTED_SECRET,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_Unseal_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        itemHandle: TPMI_DH_OBJECT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_Unseal_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        outData: *mut TPM2B_SENSITIVE_DATA,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_Unseal(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        itemHandle: TPMI_DH_OBJECT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        outData: *mut TPM2B_SENSITIVE_DATA,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_ObjectChangeAuth_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        objectHandle: TPMI_DH_OBJECT,
+        parentHandle: TPMI_DH_OBJECT,
+        newAuth: *const TPM2B_AUTH,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_ObjectChangeAuth_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        outPrivate: *mut TPM2B_PRIVATE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_ObjectChangeAuth(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        objectHandle: TPMI_DH_OBJECT,
+        parentHandle: TPMI_DH_OBJECT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        newAuth: *const TPM2B_AUTH,
+        outPrivate: *mut TPM2B_PRIVATE,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_Duplicate_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        objectHandle: TPMI_DH_OBJECT,
+        newParentHandle: TPMI_DH_OBJECT,
+        encryptionKeyIn: *const TPM2B_DATA,
+        symmetricAlg: *const TPMT_SYM_DEF_OBJECT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_Duplicate_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        encryptionKeyOut: *mut TPM2B_DATA,
+        duplicate: *mut TPM2B_PRIVATE,
+        outSymSeed: *mut TPM2B_ENCRYPTED_SECRET,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_Duplicate(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        objectHandle: TPMI_DH_OBJECT,
+        newParentHandle: TPMI_DH_OBJECT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        encryptionKeyIn: *const TPM2B_DATA,
+        symmetricAlg: *const TPMT_SYM_DEF_OBJECT,
+        encryptionKeyOut: *mut TPM2B_DATA,
+        duplicate: *mut TPM2B_PRIVATE,
+        outSymSeed: *mut TPM2B_ENCRYPTED_SECRET,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_Rewrap_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        oldParent: TPMI_DH_OBJECT,
+        newParent: TPMI_DH_OBJECT,
+        inDuplicate: *const TPM2B_PRIVATE,
+        name: *const TPM2B_NAME,
+        inSymSeed: *const TPM2B_ENCRYPTED_SECRET,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_Rewrap_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        outDuplicate: *mut TPM2B_PRIVATE,
+        outSymSeed: *mut TPM2B_ENCRYPTED_SECRET,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_Rewrap(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        oldParent: TPMI_DH_OBJECT,
+        newParent: TPMI_DH_OBJECT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        inDuplicate: *const TPM2B_PRIVATE,
+        name: *const TPM2B_NAME,
+        inSymSeed: *const TPM2B_ENCRYPTED_SECRET,
+        outDuplicate: *mut TPM2B_PRIVATE,
+        outSymSeed: *mut TPM2B_ENCRYPTED_SECRET,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_Import_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        parentHandle: TPMI_DH_OBJECT,
+        encryptionKey: *const TPM2B_DATA,
+        objectPublic: *const TPM2B_PUBLIC,
+        duplicate: *const TPM2B_PRIVATE,
+        inSymSeed: *const TPM2B_ENCRYPTED_SECRET,
+        symmetricAlg: *const TPMT_SYM_DEF_OBJECT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_Import_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        outPrivate: *mut TPM2B_PRIVATE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_Import(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        parentHandle: TPMI_DH_OBJECT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        encryptionKey: *const TPM2B_DATA,
+        objectPublic: *const TPM2B_PUBLIC,
+        duplicate: *const TPM2B_PRIVATE,
+        inSymSeed: *const TPM2B_ENCRYPTED_SECRET,
+        symmetricAlg: *const TPMT_SYM_DEF_OBJECT,
+        outPrivate: *mut TPM2B_PRIVATE,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_RSA_Encrypt_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        keyHandle: TPMI_DH_OBJECT,
+        message: *const TPM2B_PUBLIC_KEY_RSA,
+        inScheme: *const TPMT_RSA_DECRYPT,
+        label: *const TPM2B_DATA,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_RSA_Encrypt_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        outData: *mut TPM2B_PUBLIC_KEY_RSA,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_RSA_Encrypt(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        keyHandle: TPMI_DH_OBJECT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        message: *const TPM2B_PUBLIC_KEY_RSA,
+        inScheme: *const TPMT_RSA_DECRYPT,
+        label: *const TPM2B_DATA,
+        outData: *mut TPM2B_PUBLIC_KEY_RSA,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_RSA_Decrypt_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        keyHandle: TPMI_DH_OBJECT,
+        cipherText: *const TPM2B_PUBLIC_KEY_RSA,
+        inScheme: *const TPMT_RSA_DECRYPT,
+        label: *const TPM2B_DATA,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_RSA_Decrypt_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        message: *mut TPM2B_PUBLIC_KEY_RSA,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_RSA_Decrypt(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        keyHandle: TPMI_DH_OBJECT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        cipherText: *const TPM2B_PUBLIC_KEY_RSA,
+        inScheme: *const TPMT_RSA_DECRYPT,
+        label: *const TPM2B_DATA,
+        message: *mut TPM2B_PUBLIC_KEY_RSA,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_ECDH_KeyGen_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        keyHandle: TPMI_DH_OBJECT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_ECDH_KeyGen_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        zPoint: *mut TPM2B_ECC_POINT,
+        pubPoint: *mut TPM2B_ECC_POINT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_ECDH_KeyGen(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        keyHandle: TPMI_DH_OBJECT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        zPoint: *mut TPM2B_ECC_POINT,
+        pubPoint: *mut TPM2B_ECC_POINT,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_ECDH_ZGen_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        keyHandle: TPMI_DH_OBJECT,
+        inPoint: *const TPM2B_ECC_POINT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_ECDH_ZGen_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        outPoint: *mut TPM2B_ECC_POINT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_ECDH_ZGen(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        keyHandle: TPMI_DH_OBJECT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        inPoint: *const TPM2B_ECC_POINT,
+        outPoint: *mut TPM2B_ECC_POINT,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_ECC_Parameters_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        curveID: TPMI_ECC_CURVE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_ECC_Parameters_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        parameters: *mut TPMS_ALGORITHM_DETAIL_ECC,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_ECC_Parameters(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        curveID: TPMI_ECC_CURVE,
+        parameters: *mut TPMS_ALGORITHM_DETAIL_ECC,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_ZGen_2Phase_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        keyA: TPMI_DH_OBJECT,
+        inQsB: *const TPM2B_ECC_POINT,
+        inQeB: *const TPM2B_ECC_POINT,
+        inScheme: TPMI_ECC_KEY_EXCHANGE,
+        counter: UINT16,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_ZGen_2Phase_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        outZ1: *mut TPM2B_ECC_POINT,
+        outZ2: *mut TPM2B_ECC_POINT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_ZGen_2Phase(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        keyA: TPMI_DH_OBJECT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        inQsB: *const TPM2B_ECC_POINT,
+        inQeB: *const TPM2B_ECC_POINT,
+        inScheme: TPMI_ECC_KEY_EXCHANGE,
+        counter: UINT16,
+        outZ1: *mut TPM2B_ECC_POINT,
+        outZ2: *mut TPM2B_ECC_POINT,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_EncryptDecrypt_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        keyHandle: TPMI_DH_OBJECT,
+        decrypt: TPMI_YES_NO,
+        mode: TPMI_ALG_CIPHER_MODE,
+        ivIn: *const TPM2B_IV,
+        inData: *const TPM2B_MAX_BUFFER,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_EncryptDecrypt_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        outData: *mut TPM2B_MAX_BUFFER,
+        ivOut: *mut TPM2B_IV,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_EncryptDecrypt(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        keyHandle: TPMI_DH_OBJECT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        decrypt: TPMI_YES_NO,
+        mode: TPMI_ALG_CIPHER_MODE,
+        ivIn: *const TPM2B_IV,
+        inData: *const TPM2B_MAX_BUFFER,
+        outData: *mut TPM2B_MAX_BUFFER,
+        ivOut: *mut TPM2B_IV,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_EncryptDecrypt2_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        keyHandle: TPMI_DH_OBJECT,
+        inData: *const TPM2B_MAX_BUFFER,
+        decrypt: TPMI_YES_NO,
+        mode: TPMI_ALG_CIPHER_MODE,
+        ivIn: *const TPM2B_IV,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_EncryptDecrypt2_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        outData: *mut TPM2B_MAX_BUFFER,
+        ivOut: *mut TPM2B_IV,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_EncryptDecrypt2(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        keyHandle: TPMI_DH_OBJECT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        inData: *const TPM2B_MAX_BUFFER,
+        decrypt: TPMI_YES_NO,
+        mode: TPMI_ALG_CIPHER_MODE,
+        ivIn: *const TPM2B_IV,
+        outData: *mut TPM2B_MAX_BUFFER,
+        ivOut: *mut TPM2B_IV,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_Hash_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        data: *const TPM2B_MAX_BUFFER,
+        hashAlg: TPMI_ALG_HASH,
+        hierarchy: TPMI_RH_HIERARCHY,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_Hash_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        outHash: *mut TPM2B_DIGEST,
+        validation: *mut TPMT_TK_HASHCHECK,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_Hash(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        data: *const TPM2B_MAX_BUFFER,
+        hashAlg: TPMI_ALG_HASH,
+        hierarchy: TPMI_RH_HIERARCHY,
+        outHash: *mut TPM2B_DIGEST,
+        validation: *mut TPMT_TK_HASHCHECK,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_HMAC_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        handle: TPMI_DH_OBJECT,
+        buffer: *const TPM2B_MAX_BUFFER,
+        hashAlg: TPMI_ALG_HASH,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_HMAC_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        outHMAC: *mut TPM2B_DIGEST,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_HMAC(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        handle: TPMI_DH_OBJECT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        buffer: *const TPM2B_MAX_BUFFER,
+        hashAlg: TPMI_ALG_HASH,
+        outHMAC: *mut TPM2B_DIGEST,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_MAC_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        handle: TPMI_DH_OBJECT,
+        buffer: *const TPM2B_MAX_BUFFER,
+        inScheme: TPMI_ALG_MAC_SCHEME,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_MAC_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        outMAC: *mut TPM2B_DIGEST,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_MAC(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        handle: TPMI_DH_OBJECT,
+        cmdAuths: *const TSS2L_SYS_AUTH_COMMAND,
+        buffer: *const TPM2B_MAX_BUFFER,
+        inScheme: TPMI_ALG_MAC_SCHEME,
+        outMAC: *mut TPM2B_DIGEST,
+        rspAuths: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_GetRandom_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        bytesRequested: UINT16,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_GetRandom_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        randomBytes: *mut TPM2B_DIGEST,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_GetRandom(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        bytesRequested: UINT16,
+        randomBytes: *mut TPM2B_DIGEST,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_StirRandom_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        inData: *const TPM2B_SENSITIVE_DATA,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_StirRandom_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_StirRandom(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        inData: *const TPM2B_SENSITIVE_DATA,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_HMAC_Start_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        handle: TPMI_DH_OBJECT,
+        auth: *const TPM2B_AUTH,
+        hashAlg: TPMI_ALG_HASH,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_HMAC_Start_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        sequenceHandle: *mut TPMI_DH_OBJECT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_HMAC_Start(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        handle: TPMI_DH_OBJECT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        auth: *const TPM2B_AUTH,
+        hashAlg: TPMI_ALG_HASH,
+        sequenceHandle: *mut TPMI_DH_OBJECT,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_MAC_Start_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        handle: TPMI_DH_OBJECT,
+        auth: *const TPM2B_AUTH,
+        inScheme: TPMI_ALG_MAC_SCHEME,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_MAC_Start_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        sequenceHandle: *mut TPMI_DH_OBJECT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_MAC_Start(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        handle: TPMI_DH_OBJECT,
+        cmdAuths: *const TSS2L_SYS_AUTH_COMMAND,
+        auth: *const TPM2B_AUTH,
+        inScheme: TPMI_ALG_MAC_SCHEME,
+        sequenceHandle: *mut TPMI_DH_OBJECT,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_HashSequenceStart_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        auth: *const TPM2B_AUTH,
+        hashAlg: TPMI_ALG_HASH,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_HashSequenceStart_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        sequenceHandle: *mut TPMI_DH_OBJECT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_HashSequenceStart(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        auth: *const TPM2B_AUTH,
+        hashAlg: TPMI_ALG_HASH,
+        sequenceHandle: *mut TPMI_DH_OBJECT,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_SequenceUpdate_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        sequenceHandle: TPMI_DH_OBJECT,
+        buffer: *const TPM2B_MAX_BUFFER,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_SequenceUpdate_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_SequenceUpdate(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        sequenceHandle: TPMI_DH_OBJECT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        buffer: *const TPM2B_MAX_BUFFER,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_SequenceComplete_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        sequenceHandle: TPMI_DH_OBJECT,
+        buffer: *const TPM2B_MAX_BUFFER,
+        hierarchy: TPMI_RH_HIERARCHY,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_SequenceComplete_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        result: *mut TPM2B_DIGEST,
+        validation: *mut TPMT_TK_HASHCHECK,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_SequenceComplete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        sequenceHandle: TPMI_DH_OBJECT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        buffer: *const TPM2B_MAX_BUFFER,
+        hierarchy: TPMI_RH_HIERARCHY,
+        result: *mut TPM2B_DIGEST,
+        validation: *mut TPMT_TK_HASHCHECK,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_EventSequenceComplete_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        pcrHandle: TPMI_DH_PCR,
+        sequenceHandle: TPMI_DH_OBJECT,
+        buffer: *const TPM2B_MAX_BUFFER,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_EventSequenceComplete_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        results: *mut TPML_DIGEST_VALUES,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_EventSequenceComplete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        pcrHandle: TPMI_DH_PCR,
+        sequenceHandle: TPMI_DH_OBJECT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        buffer: *const TPM2B_MAX_BUFFER,
+        results: *mut TPML_DIGEST_VALUES,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_Certify_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        objectHandle: TPMI_DH_OBJECT,
+        signHandle: TPMI_DH_OBJECT,
+        qualifyingData: *const TPM2B_DATA,
+        inScheme: *const TPMT_SIG_SCHEME,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_Certify_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        certifyInfo: *mut TPM2B_ATTEST,
+        signature: *mut TPMT_SIGNATURE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_Certify(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        objectHandle: TPMI_DH_OBJECT,
+        signHandle: TPMI_DH_OBJECT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        qualifyingData: *const TPM2B_DATA,
+        inScheme: *const TPMT_SIG_SCHEME,
+        certifyInfo: *mut TPM2B_ATTEST,
+        signature: *mut TPMT_SIGNATURE,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_CertifyX509_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        objectHandle: TPMI_DH_OBJECT,
+        signHandle: TPMI_DH_OBJECT,
+        reserved: *const TPM2B_DATA,
+        inScheme: *const TPMT_SIG_SCHEME,
+        partialCertificate: *const TPM2B_MAX_BUFFER,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_CertifyX509_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        addedToCertificate: *mut TPM2B_MAX_BUFFER,
+        tbsDigest: *mut TPM2B_DIGEST,
+        signature: *mut TPMT_SIGNATURE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_CertifyX509(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        objectHandle: TPMI_DH_OBJECT,
+        signHandle: TPMI_DH_OBJECT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        reserved: *const TPM2B_DATA,
+        inScheme: *const TPMT_SIG_SCHEME,
+        partialCertificate: *const TPM2B_MAX_BUFFER,
+        addedToCertificate: *mut TPM2B_MAX_BUFFER,
+        tbsDigest: *mut TPM2B_DIGEST,
+        signature: *mut TPMT_SIGNATURE,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_CertifyCreation_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        signHandle: TPMI_DH_OBJECT,
+        objectHandle: TPMI_DH_OBJECT,
+        qualifyingData: *const TPM2B_DATA,
+        creationHash: *const TPM2B_DIGEST,
+        inScheme: *const TPMT_SIG_SCHEME,
+        creationTicket: *const TPMT_TK_CREATION,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_CertifyCreation_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        certifyInfo: *mut TPM2B_ATTEST,
+        signature: *mut TPMT_SIGNATURE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_CertifyCreation(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        signHandle: TPMI_DH_OBJECT,
+        objectHandle: TPMI_DH_OBJECT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        qualifyingData: *const TPM2B_DATA,
+        creationHash: *const TPM2B_DIGEST,
+        inScheme: *const TPMT_SIG_SCHEME,
+        creationTicket: *const TPMT_TK_CREATION,
+        certifyInfo: *mut TPM2B_ATTEST,
+        signature: *mut TPMT_SIGNATURE,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_Quote_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        signHandle: TPMI_DH_OBJECT,
+        qualifyingData: *const TPM2B_DATA,
+        inScheme: *const TPMT_SIG_SCHEME,
+        PCRselect: *const TPML_PCR_SELECTION,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_Quote_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        quoted: *mut TPM2B_ATTEST,
+        signature: *mut TPMT_SIGNATURE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_Quote(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        signHandle: TPMI_DH_OBJECT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        qualifyingData: *const TPM2B_DATA,
+        inScheme: *const TPMT_SIG_SCHEME,
+        PCRselect: *const TPML_PCR_SELECTION,
+        quoted: *mut TPM2B_ATTEST,
+        signature: *mut TPMT_SIGNATURE,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_GetSessionAuditDigest_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        privacyAdminHandle: TPMI_RH_ENDORSEMENT,
+        signHandle: TPMI_DH_OBJECT,
+        sessionHandle: TPMI_SH_HMAC,
+        qualifyingData: *const TPM2B_DATA,
+        inScheme: *const TPMT_SIG_SCHEME,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_GetSessionAuditDigest_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        auditInfo: *mut TPM2B_ATTEST,
+        signature: *mut TPMT_SIGNATURE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_GetSessionAuditDigest(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        privacyAdminHandle: TPMI_RH_ENDORSEMENT,
+        signHandle: TPMI_DH_OBJECT,
+        sessionHandle: TPMI_SH_HMAC,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        qualifyingData: *const TPM2B_DATA,
+        inScheme: *const TPMT_SIG_SCHEME,
+        auditInfo: *mut TPM2B_ATTEST,
+        signature: *mut TPMT_SIGNATURE,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_GetCommandAuditDigest_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        privacyHandle: TPMI_RH_ENDORSEMENT,
+        signHandle: TPMI_DH_OBJECT,
+        qualifyingData: *const TPM2B_DATA,
+        inScheme: *const TPMT_SIG_SCHEME,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_GetCommandAuditDigest_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        auditInfo: *mut TPM2B_ATTEST,
+        signature: *mut TPMT_SIGNATURE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_GetCommandAuditDigest(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        privacyHandle: TPMI_RH_ENDORSEMENT,
+        signHandle: TPMI_DH_OBJECT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        qualifyingData: *const TPM2B_DATA,
+        inScheme: *const TPMT_SIG_SCHEME,
+        auditInfo: *mut TPM2B_ATTEST,
+        signature: *mut TPMT_SIGNATURE,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_GetTime_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        privacyAdminHandle: TPMI_RH_ENDORSEMENT,
+        signHandle: TPMI_DH_OBJECT,
+        qualifyingData: *const TPM2B_DATA,
+        inScheme: *const TPMT_SIG_SCHEME,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_GetTime_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        timeInfo: *mut TPM2B_ATTEST,
+        signature: *mut TPMT_SIGNATURE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_GetTime(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        privacyAdminHandle: TPMI_RH_ENDORSEMENT,
+        signHandle: TPMI_DH_OBJECT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        qualifyingData: *const TPM2B_DATA,
+        inScheme: *const TPMT_SIG_SCHEME,
+        timeInfo: *mut TPM2B_ATTEST,
+        signature: *mut TPMT_SIGNATURE,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_Commit_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        signHandle: TPMI_DH_OBJECT,
+        P1: *const TPM2B_ECC_POINT,
+        s2: *const TPM2B_SENSITIVE_DATA,
+        y2: *const TPM2B_ECC_PARAMETER,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_Commit_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        K: *mut TPM2B_ECC_POINT,
+        L: *mut TPM2B_ECC_POINT,
+        E: *mut TPM2B_ECC_POINT,
+        counter: *mut UINT16,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_Commit(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        signHandle: TPMI_DH_OBJECT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        P1: *const TPM2B_ECC_POINT,
+        s2: *const TPM2B_SENSITIVE_DATA,
+        y2: *const TPM2B_ECC_PARAMETER,
+        K: *mut TPM2B_ECC_POINT,
+        L: *mut TPM2B_ECC_POINT,
+        E: *mut TPM2B_ECC_POINT,
+        counter: *mut UINT16,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_EC_Ephemeral_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        curveID: TPMI_ECC_CURVE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_EC_Ephemeral_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        Q: *mut TPM2B_ECC_POINT,
+        counter: *mut UINT16,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_EC_Ephemeral(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        curveID: TPMI_ECC_CURVE,
+        Q: *mut TPM2B_ECC_POINT,
+        counter: *mut UINT16,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_VerifySignature_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        keyHandle: TPMI_DH_OBJECT,
+        digest: *const TPM2B_DIGEST,
+        signature: *const TPMT_SIGNATURE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_VerifySignature_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        validation: *mut TPMT_TK_VERIFIED,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_VerifySignature(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        keyHandle: TPMI_DH_OBJECT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        digest: *const TPM2B_DIGEST,
+        signature: *const TPMT_SIGNATURE,
+        validation: *mut TPMT_TK_VERIFIED,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_Sign_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        keyHandle: TPMI_DH_OBJECT,
+        digest: *const TPM2B_DIGEST,
+        inScheme: *const TPMT_SIG_SCHEME,
+        validation: *const TPMT_TK_HASHCHECK,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_Sign_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        signature: *mut TPMT_SIGNATURE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_Sign(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        keyHandle: TPMI_DH_OBJECT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        digest: *const TPM2B_DIGEST,
+        inScheme: *const TPMT_SIG_SCHEME,
+        validation: *const TPMT_TK_HASHCHECK,
+        signature: *mut TPMT_SIGNATURE,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_SetCommandCodeAuditStatus_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        auth: TPMI_RH_PROVISION,
+        auditAlg: TPMI_ALG_HASH,
+        setList: *const TPML_CC,
+        clearList: *const TPML_CC,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_SetCommandCodeAuditStatus_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_SetCommandCodeAuditStatus(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        auth: TPMI_RH_PROVISION,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        auditAlg: TPMI_ALG_HASH,
+        setList: *const TPML_CC,
+        clearList: *const TPML_CC,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PCR_Extend_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        pcrHandle: TPMI_DH_PCR,
+        digests: *const TPML_DIGEST_VALUES,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PCR_Extend_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PCR_Extend(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        pcrHandle: TPMI_DH_PCR,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        digests: *const TPML_DIGEST_VALUES,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PCR_Event_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        pcrHandle: TPMI_DH_PCR,
+        eventData: *const TPM2B_EVENT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PCR_Event_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        digests: *mut TPML_DIGEST_VALUES,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PCR_Event(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        pcrHandle: TPMI_DH_PCR,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        eventData: *const TPM2B_EVENT,
+        digests: *mut TPML_DIGEST_VALUES,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PCR_Read_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        pcrSelectionIn: *const TPML_PCR_SELECTION,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PCR_Read_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        pcrUpdateCounter: *mut UINT32,
+        pcrSelectionOut: *mut TPML_PCR_SELECTION,
+        pcrValues: *mut TPML_DIGEST,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PCR_Read(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        pcrSelectionIn: *const TPML_PCR_SELECTION,
+        pcrUpdateCounter: *mut UINT32,
+        pcrSelectionOut: *mut TPML_PCR_SELECTION,
+        pcrValues: *mut TPML_DIGEST,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PCR_Allocate_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        authHandle: TPMI_RH_PLATFORM,
+        pcrAllocation: *const TPML_PCR_SELECTION,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PCR_Allocate_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        allocationSuccess: *mut TPMI_YES_NO,
+        maxPCR: *mut UINT32,
+        sizeNeeded: *mut UINT32,
+        sizeAvailable: *mut UINT32,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PCR_Allocate(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        authHandle: TPMI_RH_PLATFORM,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        pcrAllocation: *const TPML_PCR_SELECTION,
+        allocationSuccess: *mut TPMI_YES_NO,
+        maxPCR: *mut UINT32,
+        sizeNeeded: *mut UINT32,
+        sizeAvailable: *mut UINT32,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PCR_SetAuthPolicy_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        authHandle: TPMI_RH_PLATFORM,
+        authPolicy: *const TPM2B_DIGEST,
+        hashAlg: TPMI_ALG_HASH,
+        pcrNum: TPMI_DH_PCR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PCR_SetAuthPolicy_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PCR_SetAuthPolicy(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        authHandle: TPMI_RH_PLATFORM,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        authPolicy: *const TPM2B_DIGEST,
+        hashAlg: TPMI_ALG_HASH,
+        pcrNum: TPMI_DH_PCR,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PCR_SetAuthValue_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        pcrHandle: TPMI_DH_PCR,
+        auth: *const TPM2B_DIGEST,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PCR_SetAuthValue_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PCR_SetAuthValue(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        pcrHandle: TPMI_DH_PCR,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        auth: *const TPM2B_DIGEST,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PCR_Reset_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        pcrHandle: TPMI_DH_PCR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PCR_Reset_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PCR_Reset(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        pcrHandle: TPMI_DH_PCR,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicySigned_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        authObject: TPMI_DH_OBJECT,
+        policySession: TPMI_SH_POLICY,
+        nonceTPM: *const TPM2B_NONCE,
+        cpHashA: *const TPM2B_DIGEST,
+        policyRef: *const TPM2B_NONCE,
+        expiration: INT32,
+        auth: *const TPMT_SIGNATURE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicySigned_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        timeout: *mut TPM2B_TIMEOUT,
+        policyTicket: *mut TPMT_TK_AUTH,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicySigned(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        authObject: TPMI_DH_OBJECT,
+        policySession: TPMI_SH_POLICY,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        nonceTPM: *const TPM2B_NONCE,
+        cpHashA: *const TPM2B_DIGEST,
+        policyRef: *const TPM2B_NONCE,
+        expiration: INT32,
+        auth: *const TPMT_SIGNATURE,
+        timeout: *mut TPM2B_TIMEOUT,
+        policyTicket: *mut TPMT_TK_AUTH,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicySecret_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        authHandle: TPMI_DH_ENTITY,
+        policySession: TPMI_SH_POLICY,
+        nonceTPM: *const TPM2B_NONCE,
+        cpHashA: *const TPM2B_DIGEST,
+        policyRef: *const TPM2B_NONCE,
+        expiration: INT32,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicySecret_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        timeout: *mut TPM2B_TIMEOUT,
+        policyTicket: *mut TPMT_TK_AUTH,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicySecret(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        authHandle: TPMI_DH_ENTITY,
+        policySession: TPMI_SH_POLICY,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        nonceTPM: *const TPM2B_NONCE,
+        cpHashA: *const TPM2B_DIGEST,
+        policyRef: *const TPM2B_NONCE,
+        expiration: INT32,
+        timeout: *mut TPM2B_TIMEOUT,
+        policyTicket: *mut TPMT_TK_AUTH,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyTicket_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        policySession: TPMI_SH_POLICY,
+        timeout: *const TPM2B_TIMEOUT,
+        cpHashA: *const TPM2B_DIGEST,
+        policyRef: *const TPM2B_NONCE,
+        authName: *const TPM2B_NAME,
+        ticket: *const TPMT_TK_AUTH,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyTicket_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyTicket(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        policySession: TPMI_SH_POLICY,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        timeout: *const TPM2B_TIMEOUT,
+        cpHashA: *const TPM2B_DIGEST,
+        policyRef: *const TPM2B_NONCE,
+        authName: *const TPM2B_NAME,
+        ticket: *const TPMT_TK_AUTH,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyOR_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        policySession: TPMI_SH_POLICY,
+        pHashList: *const TPML_DIGEST,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyOR_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyOR(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        policySession: TPMI_SH_POLICY,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        pHashList: *const TPML_DIGEST,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyPCR_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        policySession: TPMI_SH_POLICY,
+        pcrDigest: *const TPM2B_DIGEST,
+        pcrs: *const TPML_PCR_SELECTION,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyPCR_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyPCR(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        policySession: TPMI_SH_POLICY,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        pcrDigest: *const TPM2B_DIGEST,
+        pcrs: *const TPML_PCR_SELECTION,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyLocality_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        policySession: TPMI_SH_POLICY,
+        locality: TPMA_LOCALITY,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyLocality_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyLocality(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        policySession: TPMI_SH_POLICY,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        locality: TPMA_LOCALITY,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyNV_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        authHandle: TPMI_RH_NV_AUTH,
+        nvIndex: TPMI_RH_NV_INDEX,
+        policySession: TPMI_SH_POLICY,
+        operandB: *const TPM2B_OPERAND,
+        offset: UINT16,
+        operation: TPM2_EO,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyNV_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyNV(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        authHandle: TPMI_RH_NV_AUTH,
+        nvIndex: TPMI_RH_NV_INDEX,
+        policySession: TPMI_SH_POLICY,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        operandB: *const TPM2B_OPERAND,
+        offset: UINT16,
+        operation: TPM2_EO,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyCounterTimer_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        policySession: TPMI_SH_POLICY,
+        operandB: *const TPM2B_OPERAND,
+        offset: UINT16,
+        operation: TPM2_EO,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyCounterTimer_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyCounterTimer(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        policySession: TPMI_SH_POLICY,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        operandB: *const TPM2B_OPERAND,
+        offset: UINT16,
+        operation: TPM2_EO,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyCommandCode_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        policySession: TPMI_SH_POLICY,
+        code: TPM2_CC,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyCommandCode_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyCommandCode(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        policySession: TPMI_SH_POLICY,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        code: TPM2_CC,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyPhysicalPresence_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        policySession: TPMI_SH_POLICY,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyPhysicalPresence_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyPhysicalPresence(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        policySession: TPMI_SH_POLICY,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyCpHash_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        policySession: TPMI_SH_POLICY,
+        cpHashA: *const TPM2B_DIGEST,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyCpHash_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyCpHash(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        policySession: TPMI_SH_POLICY,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        cpHashA: *const TPM2B_DIGEST,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyNameHash_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        policySession: TPMI_SH_POLICY,
+        nameHash: *const TPM2B_DIGEST,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyNameHash_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyNameHash(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        policySession: TPMI_SH_POLICY,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        nameHash: *const TPM2B_DIGEST,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyDuplicationSelect_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        policySession: TPMI_SH_POLICY,
+        objectName: *const TPM2B_NAME,
+        newParentName: *const TPM2B_NAME,
+        includeObject: TPMI_YES_NO,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyDuplicationSelect_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyDuplicationSelect(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        policySession: TPMI_SH_POLICY,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        objectName: *const TPM2B_NAME,
+        newParentName: *const TPM2B_NAME,
+        includeObject: TPMI_YES_NO,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyAuthorize_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        policySession: TPMI_SH_POLICY,
+        approvedPolicy: *const TPM2B_DIGEST,
+        policyRef: *const TPM2B_NONCE,
+        keySign: *const TPM2B_NAME,
+        checkTicket: *const TPMT_TK_VERIFIED,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyAuthorize_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyAuthorize(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        policySession: TPMI_SH_POLICY,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        approvedPolicy: *const TPM2B_DIGEST,
+        policyRef: *const TPM2B_NONCE,
+        keySign: *const TPM2B_NAME,
+        checkTicket: *const TPMT_TK_VERIFIED,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyAuthValue_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        policySession: TPMI_SH_POLICY,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyAuthValue_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyAuthValue(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        policySession: TPMI_SH_POLICY,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyPassword_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        policySession: TPMI_SH_POLICY,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyPassword_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyPassword(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        policySession: TPMI_SH_POLICY,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyGetDigest_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        policySession: TPMI_SH_POLICY,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyGetDigest_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        policyDigest: *mut TPM2B_DIGEST,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyGetDigest(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        policySession: TPMI_SH_POLICY,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        policyDigest: *mut TPM2B_DIGEST,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyNvWritten_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        policySession: TPMI_SH_POLICY,
+        writtenSet: TPMI_YES_NO,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyNvWritten_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyNvWritten(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        policySession: TPMI_SH_POLICY,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        writtenSet: TPMI_YES_NO,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_CreatePrimary_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        primaryHandle: TPMI_RH_HIERARCHY,
+        inSensitive: *const TPM2B_SENSITIVE_CREATE,
+        inPublic: *const TPM2B_PUBLIC,
+        outsideInfo: *const TPM2B_DATA,
+        creationPCR: *const TPML_PCR_SELECTION,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_CreatePrimary_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        objectHandle: *mut TPM2_HANDLE,
+        outPublic: *mut TPM2B_PUBLIC,
+        creationData: *mut TPM2B_CREATION_DATA,
+        creationHash: *mut TPM2B_DIGEST,
+        creationTicket: *mut TPMT_TK_CREATION,
+        name: *mut TPM2B_NAME,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_CreatePrimary(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        primaryHandle: TPMI_RH_HIERARCHY,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        inSensitive: *const TPM2B_SENSITIVE_CREATE,
+        inPublic: *const TPM2B_PUBLIC,
+        outsideInfo: *const TPM2B_DATA,
+        creationPCR: *const TPML_PCR_SELECTION,
+        objectHandle: *mut TPM2_HANDLE,
+        outPublic: *mut TPM2B_PUBLIC,
+        creationData: *mut TPM2B_CREATION_DATA,
+        creationHash: *mut TPM2B_DIGEST,
+        creationTicket: *mut TPMT_TK_CREATION,
+        name: *mut TPM2B_NAME,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_HierarchyControl_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        authHandle: TPMI_RH_HIERARCHY,
+        enable: TPMI_RH_ENABLES,
+        state: TPMI_YES_NO,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_HierarchyControl_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_HierarchyControl(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        authHandle: TPMI_RH_HIERARCHY,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        enable: TPMI_RH_ENABLES,
+        state: TPMI_YES_NO,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_SetPrimaryPolicy_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        authHandle: TPMI_RH_HIERARCHY_AUTH,
+        authPolicy: *const TPM2B_DIGEST,
+        hashAlg: TPMI_ALG_HASH,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_SetPrimaryPolicy_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_SetPrimaryPolicy(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        authHandle: TPMI_RH_HIERARCHY_AUTH,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        authPolicy: *const TPM2B_DIGEST,
+        hashAlg: TPMI_ALG_HASH,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_ChangePPS_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        authHandle: TPMI_RH_PLATFORM,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_ChangePPS_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_ChangePPS(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        authHandle: TPMI_RH_PLATFORM,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_ChangeEPS_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        authHandle: TPMI_RH_PLATFORM,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_ChangeEPS_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_ChangeEPS(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        authHandle: TPMI_RH_PLATFORM,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_Clear_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        authHandle: TPMI_RH_CLEAR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_Clear_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_Clear(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        authHandle: TPMI_RH_CLEAR,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_ClearControl_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        auth: TPMI_RH_CLEAR,
+        disable: TPMI_YES_NO,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_ClearControl_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_ClearControl(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        auth: TPMI_RH_CLEAR,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        disable: TPMI_YES_NO,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_HierarchyChangeAuth_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        authHandle: TPMI_RH_HIERARCHY_AUTH,
+        newAuth: *const TPM2B_AUTH,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_HierarchyChangeAuth_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_HierarchyChangeAuth(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        authHandle: TPMI_RH_HIERARCHY_AUTH,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        newAuth: *const TPM2B_AUTH,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_DictionaryAttackLockReset_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        lockHandle: TPMI_RH_LOCKOUT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_DictionaryAttackLockReset_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_DictionaryAttackLockReset(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        lockHandle: TPMI_RH_LOCKOUT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_DictionaryAttackParameters_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        lockHandle: TPMI_RH_LOCKOUT,
+        newMaxTries: UINT32,
+        newRecoveryTime: UINT32,
+        lockoutRecovery: UINT32,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_DictionaryAttackParameters_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_DictionaryAttackParameters(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        lockHandle: TPMI_RH_LOCKOUT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        newMaxTries: UINT32,
+        newRecoveryTime: UINT32,
+        lockoutRecovery: UINT32,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PP_Commands_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        auth: TPMI_RH_PLATFORM,
+        setList: *const TPML_CC,
+        clearList: *const TPML_CC,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PP_Commands_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PP_Commands(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        auth: TPMI_RH_PLATFORM,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        setList: *const TPML_CC,
+        clearList: *const TPML_CC,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_SetAlgorithmSet_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        authHandle: TPMI_RH_PLATFORM,
+        algorithmSet: UINT32,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_SetAlgorithmSet_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_SetAlgorithmSet(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        authHandle: TPMI_RH_PLATFORM,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        algorithmSet: UINT32,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_FieldUpgradeStart_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        authorization: TPMI_RH_PLATFORM,
+        keyHandle: TPMI_DH_OBJECT,
+        fuDigest: *const TPM2B_DIGEST,
+        manifestSignature: *const TPMT_SIGNATURE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_FieldUpgradeStart_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_FieldUpgradeStart(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        authorization: TPMI_RH_PLATFORM,
+        keyHandle: TPMI_DH_OBJECT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        fuDigest: *const TPM2B_DIGEST,
+        manifestSignature: *const TPMT_SIGNATURE,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_FieldUpgradeData_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        fuData: *const TPM2B_MAX_BUFFER,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_FieldUpgradeData_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        nextDigest: *mut TPMT_HA,
+        firstDigest: *mut TPMT_HA,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_FieldUpgradeData(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        fuData: *const TPM2B_MAX_BUFFER,
+        nextDigest: *mut TPMT_HA,
+        firstDigest: *mut TPMT_HA,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_FirmwareRead_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        sequenceNumber: UINT32,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_FirmwareRead_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        fuData: *mut TPM2B_MAX_BUFFER,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_FirmwareRead(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        sequenceNumber: UINT32,
+        fuData: *mut TPM2B_MAX_BUFFER,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_ContextSave_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        saveHandle: TPMI_DH_CONTEXT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_ContextSave_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        context: *mut TPMS_CONTEXT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_ContextSave(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        saveHandle: TPMI_DH_CONTEXT,
+        context: *mut TPMS_CONTEXT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_ContextLoad_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        context: *const TPMS_CONTEXT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_ContextLoad_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        loadedHandle: *mut TPMI_DH_CONTEXT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_ContextLoad(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        context: *const TPMS_CONTEXT,
+        loadedHandle: *mut TPMI_DH_CONTEXT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_FlushContext_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        flushHandle: TPMI_DH_CONTEXT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_FlushContext_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_FlushContext(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        flushHandle: TPMI_DH_CONTEXT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_EvictControl_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        auth: TPMI_RH_PROVISION,
+        objectHandle: TPMI_DH_OBJECT,
+        persistentHandle: TPMI_DH_PERSISTENT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_EvictControl_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_EvictControl(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        auth: TPMI_RH_PROVISION,
+        objectHandle: TPMI_DH_OBJECT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        persistentHandle: TPMI_DH_PERSISTENT,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_ReadClock_Prepare(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_ReadClock_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        currentTime: *mut TPMS_TIME_INFO,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_ReadClock(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        currentTime: *mut TPMS_TIME_INFO,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_ClockSet_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        auth: TPMI_RH_PROVISION,
+        newTime: UINT64,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_ClockSet_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_ClockSet(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        auth: TPMI_RH_PROVISION,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        newTime: UINT64,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_ClockRateAdjust_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        auth: TPMI_RH_PROVISION,
+        rateAdjust: TPM2_CLOCK_ADJUST,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_ClockRateAdjust_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_ClockRateAdjust(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        auth: TPMI_RH_PROVISION,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        rateAdjust: TPM2_CLOCK_ADJUST,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_GetCapability_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        capability: TPM2_CAP,
+        property: UINT32,
+        propertyCount: UINT32,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_GetCapability_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        moreData: *mut TPMI_YES_NO,
+        capabilityData: *mut TPMS_CAPABILITY_DATA,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_GetCapability(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        capability: TPM2_CAP,
+        property: UINT32,
+        propertyCount: UINT32,
+        moreData: *mut TPMI_YES_NO,
+        capabilityData: *mut TPMS_CAPABILITY_DATA,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_TestParms_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        parameters: *const TPMT_PUBLIC_PARMS,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_TestParms_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_TestParms(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        parameters: *const TPMT_PUBLIC_PARMS,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_NV_DefineSpace_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        authHandle: TPMI_RH_PROVISION,
+        auth: *const TPM2B_AUTH,
+        publicInfo: *const TPM2B_NV_PUBLIC,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_NV_DefineSpace_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_NV_DefineSpace(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        authHandle: TPMI_RH_PROVISION,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        auth: *const TPM2B_AUTH,
+        publicInfo: *const TPM2B_NV_PUBLIC,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_NV_UndefineSpace_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        authHandle: TPMI_RH_PROVISION,
+        nvIndex: TPMI_RH_NV_INDEX,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_NV_UndefineSpace_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_NV_UndefineSpace(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        authHandle: TPMI_RH_PROVISION,
+        nvIndex: TPMI_RH_NV_INDEX,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_NV_UndefineSpaceSpecial_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        nvIndex: TPMI_RH_NV_INDEX,
+        platform: TPMI_RH_PLATFORM,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_NV_UndefineSpaceSpecial_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_NV_UndefineSpaceSpecial(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        nvIndex: TPMI_RH_NV_INDEX,
+        platform: TPMI_RH_PLATFORM,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_NV_ReadPublic_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        nvIndex: TPMI_RH_NV_INDEX,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_NV_ReadPublic_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        nvPublic: *mut TPM2B_NV_PUBLIC,
+        nvName: *mut TPM2B_NAME,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_NV_ReadPublic(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        nvIndex: TPMI_RH_NV_INDEX,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        nvPublic: *mut TPM2B_NV_PUBLIC,
+        nvName: *mut TPM2B_NAME,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_NV_Write_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        authHandle: TPMI_RH_NV_AUTH,
+        nvIndex: TPMI_RH_NV_INDEX,
+        data: *const TPM2B_MAX_NV_BUFFER,
+        offset: UINT16,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_NV_Write_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_NV_Write(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        authHandle: TPMI_RH_NV_AUTH,
+        nvIndex: TPMI_RH_NV_INDEX,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        data: *const TPM2B_MAX_NV_BUFFER,
+        offset: UINT16,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_NV_Increment_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        authHandle: TPMI_RH_NV_AUTH,
+        nvIndex: TPMI_RH_NV_INDEX,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_NV_Increment_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_NV_Increment(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        authHandle: TPMI_RH_NV_AUTH,
+        nvIndex: TPMI_RH_NV_INDEX,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_NV_Extend_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        authHandle: TPMI_RH_NV_AUTH,
+        nvIndex: TPMI_RH_NV_INDEX,
+        data: *const TPM2B_MAX_NV_BUFFER,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_NV_Extend_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_NV_Extend(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        authHandle: TPMI_RH_NV_AUTH,
+        nvIndex: TPMI_RH_NV_INDEX,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        data: *const TPM2B_MAX_NV_BUFFER,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_NV_SetBits_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        authHandle: TPMI_RH_NV_AUTH,
+        nvIndex: TPMI_RH_NV_INDEX,
+        bits: UINT64,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_NV_SetBits_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_NV_SetBits(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        authHandle: TPMI_RH_NV_AUTH,
+        nvIndex: TPMI_RH_NV_INDEX,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        bits: UINT64,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_NV_WriteLock_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        authHandle: TPMI_RH_NV_AUTH,
+        nvIndex: TPMI_RH_NV_INDEX,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_NV_WriteLock_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_NV_WriteLock(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        authHandle: TPMI_RH_NV_AUTH,
+        nvIndex: TPMI_RH_NV_INDEX,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_NV_GlobalWriteLock_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        authHandle: TPMI_RH_PROVISION,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_NV_GlobalWriteLock_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_NV_GlobalWriteLock(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        authHandle: TPMI_RH_PROVISION,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_NV_Read_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        authHandle: TPMI_RH_NV_AUTH,
+        nvIndex: TPMI_RH_NV_INDEX,
+        size: UINT16,
+        offset: UINT16,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_NV_Read_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        data: *mut TPM2B_MAX_NV_BUFFER,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_NV_Read(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        authHandle: TPMI_RH_NV_AUTH,
+        nvIndex: TPMI_RH_NV_INDEX,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        size: UINT16,
+        offset: UINT16,
+        data: *mut TPM2B_MAX_NV_BUFFER,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_NV_ReadLock_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        authHandle: TPMI_RH_NV_AUTH,
+        nvIndex: TPMI_RH_NV_INDEX,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_NV_ReadLock_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_NV_ReadLock(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        authHandle: TPMI_RH_NV_AUTH,
+        nvIndex: TPMI_RH_NV_INDEX,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_NV_ChangeAuth_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        nvIndex: TPMI_RH_NV_INDEX,
+        newAuth: *const TPM2B_AUTH,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_NV_ChangeAuth_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_NV_ChangeAuth(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        nvIndex: TPMI_RH_NV_INDEX,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        newAuth: *const TPM2B_AUTH,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_NV_Certify_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        signHandle: TPMI_DH_OBJECT,
+        authHandle: TPMI_RH_NV_AUTH,
+        nvIndex: TPMI_RH_NV_INDEX,
+        qualifyingData: *const TPM2B_DATA,
+        inScheme: *const TPMT_SIG_SCHEME,
+        size: UINT16,
+        offset: UINT16,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_NV_Certify_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        certifyInfo: *mut TPM2B_ATTEST,
+        signature: *mut TPMT_SIGNATURE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_NV_Certify(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        signHandle: TPMI_DH_OBJECT,
+        authHandle: TPMI_RH_NV_AUTH,
+        nvIndex: TPMI_RH_NV_INDEX,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        qualifyingData: *const TPM2B_DATA,
+        inScheme: *const TPMT_SIG_SCHEME,
+        size: UINT16,
+        offset: UINT16,
+        certifyInfo: *mut TPM2B_ATTEST,
+        signature: *mut TPMT_SIGNATURE,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_Vendor_TCG_Test_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        inputData: *const TPM2B_DATA,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_Vendor_TCG_Test_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        outputData: *mut TPM2B_DATA,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_Vendor_TCG_Test(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        inputData: *const TPM2B_DATA,
+        outputData: *mut TPM2B_DATA,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_AC_GetCapability_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        ac: TPMI_RH_AC,
+        capability: TPM_AT,
+        count: UINT32,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_AC_GetCapability_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        moreData: *mut TPMI_YES_NO,
+        capabilityData: *mut TPML_AC_CAPABILITIES,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_AC_GetCapability(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        ac: TPMI_RH_AC,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        capability: TPM_AT,
+        count: UINT32,
+        moreData: *mut TPMI_YES_NO,
+        capabilityData: *mut TPML_AC_CAPABILITIES,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_AC_Send_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        sendObject: TPMI_DH_OBJECT,
+        authHandle: TPMI_RH_NV_AUTH,
+        ac: TPMI_RH_AC,
+        acDataIn: *mut TPM2B_MAX_BUFFER,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_AC_Send_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        acDataOut: *mut TPMS_AC_OUTPUT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_AC_Send(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        sendObject: TPMI_DH_OBJECT,
+        authHandle: TPMI_RH_NV_AUTH,
+        ac: TPMI_RH_AC,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        acDataIn: *mut TPM2B_MAX_BUFFER,
+        acDataOut: *mut TPMS_AC_OUTPUT,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_Policy_AC_SendSelect_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        policySession: TPMI_SH_POLICY,
+        objectName: *mut TPM2B_NAME,
+        authHandleName: *mut TPM2B_NAME,
+        acName: *mut TPM2B_NAME,
+        includeObject: TPMI_YES_NO,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_Policy_AC_SendSelect_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_Policy_AC_SendSelect(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        policySession: TPMI_SH_POLICY,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        objectName: *mut TPM2B_NAME,
+        authHandleName: *mut TPM2B_NAME,
+        acName: *mut TPM2B_NAME,
+        includeObject: TPMI_YES_NO,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_ACT_SetTimeout_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        actHandle: TPMI_RH_ACT,
+        startTimeout: UINT32,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_ACT_SetTimeout_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_ACT_SetTimeout(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        actHandle: TPMI_RH_ACT,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        startTimeout: UINT32,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyTemplate_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        policySession: TPMI_SH_POLICY,
+        templateHash: *const TPM2B_DIGEST,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyTemplate_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyTemplate(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        policySession: TPMI_SH_POLICY,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        templateHash: *const TPM2B_DIGEST,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_CreateLoaded_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        parentHandle: TPMI_RH_HIERARCHY,
+        inSensitive: *const TPM2B_SENSITIVE_CREATE,
+        inPublic: *const TPM2B_TEMPLATE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_CreateLoaded_Complete(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        objectHandle: *mut TPM2_HANDLE,
+        outPrivate: *mut TPM2B_PRIVATE,
+        outPublic: *mut TPM2B_PUBLIC,
+        name: *mut TPM2B_NAME,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_CreateLoaded(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        parentHandle: TPMI_RH_HIERARCHY,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        inSensitive: *const TPM2B_SENSITIVE_CREATE,
+        inPublic: *const TPM2B_TEMPLATE,
+        objectHandle: *mut TPM2_HANDLE,
+        outPrivate: *mut TPM2B_PRIVATE,
+        outPublic: *mut TPM2B_PUBLIC,
+        name: *mut TPM2B_NAME,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyAuthorizeNV_Prepare(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        authHandle: TPMI_RH_NV_AUTH,
+        nvIndex: TPMI_RH_NV_INDEX,
+        policySession: TPMI_SH_POLICY,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyAuthorizeNV_Complete(sysContext: *mut TSS2_SYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_Sys_PolicyAuthorizeNV(
+        sysContext: *mut TSS2_SYS_CONTEXT,
+        authHandle: TPMI_RH_NV_AUTH,
+        nvIndex: TPMI_RH_NV_INDEX,
+        policySession: TPMI_SH_POLICY,
+        cmdAuthsArray: *const TSS2L_SYS_AUTH_COMMAND,
+        rspAuthsArray: *mut TSS2L_SYS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+pub type ESYS_TR = u32;
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct ESYS_CONTEXT {
+    _unused: [u8; 0],
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct ESYS_CRYPTO_CONTEXT_BLOB {
+    _unused: [u8; 0],
+}
+pub type ESYS_CRYPTO_HASH_START_FNP = ::std::option::Option<
+    unsafe extern "C" fn(
+        context: *mut *mut ESYS_CRYPTO_CONTEXT_BLOB,
+        hashAlg: TPM2_ALG_ID,
+        userdata: *mut ::std::os::raw::c_void,
+    ) -> TSS2_RC,
+>;
+pub type ESYS_CRYPTO_HASH_UPDATE_FNP = ::std::option::Option<
+    unsafe extern "C" fn(
+        context: *mut ESYS_CRYPTO_CONTEXT_BLOB,
+        buffer: *const u8,
+        size: size_t,
+        userdata: *mut ::std::os::raw::c_void,
+    ) -> TSS2_RC,
+>;
+pub type ESYS_CRYPTO_HASH_FINISH_FNP = ::std::option::Option<
+    unsafe extern "C" fn(
+        context: *mut *mut ESYS_CRYPTO_CONTEXT_BLOB,
+        buffer: *mut u8,
+        size: *mut size_t,
+        userdata: *mut ::std::os::raw::c_void,
+    ) -> TSS2_RC,
+>;
+pub type ESYS_CRYPTO_HASH_ABORT_FNP = ::std::option::Option<
+    unsafe extern "C" fn(
+        context: *mut *mut ESYS_CRYPTO_CONTEXT_BLOB,
+        userdata: *mut ::std::os::raw::c_void,
+    ),
+>;
+pub type ESYS_CRYPTO_HMAC_START_FNP = ::std::option::Option<
+    unsafe extern "C" fn(
+        context: *mut *mut ESYS_CRYPTO_CONTEXT_BLOB,
+        hashAlg: TPM2_ALG_ID,
+        key: *const u8,
+        size: size_t,
+        userdata: *mut ::std::os::raw::c_void,
+    ) -> TSS2_RC,
+>;
+pub type ESYS_CRYPTO_HMAC_UPDATE_FNP = ::std::option::Option<
+    unsafe extern "C" fn(
+        context: *mut ESYS_CRYPTO_CONTEXT_BLOB,
+        buffer: *const u8,
+        size: size_t,
+        userdata: *mut ::std::os::raw::c_void,
+    ) -> TSS2_RC,
+>;
+pub type ESYS_CRYPTO_HMAC_FINISH_FNP = ::std::option::Option<
+    unsafe extern "C" fn(
+        context: *mut *mut ESYS_CRYPTO_CONTEXT_BLOB,
+        buffer: *mut u8,
+        size: *mut size_t,
+        userdata: *mut ::std::os::raw::c_void,
+    ) -> TSS2_RC,
+>;
+pub type ESYS_CRYPTO_HMAC_ABORT_FNP = ::std::option::Option<
+    unsafe extern "C" fn(
+        context: *mut *mut ESYS_CRYPTO_CONTEXT_BLOB,
+        userdata: *mut ::std::os::raw::c_void,
+    ),
+>;
+pub type ESYS_CRYPTO_GET_RANDOM2B_FNP = ::std::option::Option<
+    unsafe extern "C" fn(
+        nonce: *mut TPM2B_NONCE,
+        num_bytes: size_t,
+        userdata: *mut ::std::os::raw::c_void,
+    ) -> TSS2_RC,
+>;
+pub type ESYS_CRYPTO_GET_ECDH_POINT_FNP = ::std::option::Option<
+    unsafe extern "C" fn(
+        key: *mut TPM2B_PUBLIC,
+        max_out_size: size_t,
+        Z: *mut TPM2B_ECC_PARAMETER,
+        Q: *mut TPMS_ECC_POINT,
+        out_buffer: *mut BYTE,
+        out_size: *mut size_t,
+        userdata: *mut ::std::os::raw::c_void,
+    ) -> TSS2_RC,
+>;
+pub type ESYS_CRYPTO_AES_ENCRYPT_FNP = ::std::option::Option<
+    unsafe extern "C" fn(
+        key: *mut u8,
+        tpm_sym_alg: TPM2_ALG_ID,
+        key_bits: TPMI_AES_KEY_BITS,
+        tpm_mode: TPM2_ALG_ID,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        iv: *mut u8,
+        userdata: *mut ::std::os::raw::c_void,
+    ) -> TSS2_RC,
+>;
+pub type ESYS_CRYPTO_AES_DECRYPT_FNP = ::std::option::Option<
+    unsafe extern "C" fn(
+        key: *mut u8,
+        tpm_sym_alg: TPM2_ALG_ID,
+        key_bits: TPMI_AES_KEY_BITS,
+        tpm_mode: TPM2_ALG_ID,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        iv: *mut u8,
+        userdata: *mut ::std::os::raw::c_void,
+    ) -> TSS2_RC,
+>;
+pub type ESYS_CRYPTO_SM4_ENCRYPT_FNP = ::std::option::Option<
+    unsafe extern "C" fn(
+        key: *mut u8,
+        tpm_sym_alg: TPM2_ALG_ID,
+        key_bits: TPMI_SM4_KEY_BITS,
+        tpm_mode: TPM2_ALG_ID,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        iv: *mut u8,
+        userdata: *mut ::std::os::raw::c_void,
+    ) -> TSS2_RC,
+>;
+pub type ESYS_CRYPTO_SM4_DECRYPT_FNP = ::std::option::Option<
+    unsafe extern "C" fn(
+        key: *mut u8,
+        tpm_sym_alg: TPM2_ALG_ID,
+        key_bits: TPMI_SM4_KEY_BITS,
+        tpm_mode: TPM2_ALG_ID,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        iv: *mut u8,
+        userdata: *mut ::std::os::raw::c_void,
+    ) -> TSS2_RC,
+>;
+pub type ESYS_CRYPTO_PK_RSA_ENCRYPT_FNP = ::std::option::Option<
+    unsafe extern "C" fn(
+        pub_tpm_key: *mut TPM2B_PUBLIC,
+        in_size: size_t,
+        in_buffer: *mut BYTE,
+        max_out_size: size_t,
+        out_buffer: *mut BYTE,
+        out_size: *mut size_t,
+        label: *const ::std::os::raw::c_char,
+        userdata: *mut ::std::os::raw::c_void,
+    ) -> TSS2_RC,
+>;
+pub type ESYS_CRYPTO_INIT_FNP =
+    ::std::option::Option<unsafe extern "C" fn(userdata: *mut ::std::os::raw::c_void) -> TSS2_RC>;
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct ESYS_CRYPTO_CALLBACKS {
+    pub rsa_pk_encrypt: ESYS_CRYPTO_PK_RSA_ENCRYPT_FNP,
+    pub hash_start: ESYS_CRYPTO_HASH_START_FNP,
+    pub hash_update: ESYS_CRYPTO_HASH_UPDATE_FNP,
+    pub hash_finish: ESYS_CRYPTO_HASH_FINISH_FNP,
+    pub hash_abort: ESYS_CRYPTO_HASH_ABORT_FNP,
+    pub hmac_start: ESYS_CRYPTO_HMAC_START_FNP,
+    pub hmac_update: ESYS_CRYPTO_HMAC_UPDATE_FNP,
+    pub hmac_finish: ESYS_CRYPTO_HMAC_FINISH_FNP,
+    pub hmac_abort: ESYS_CRYPTO_HMAC_ABORT_FNP,
+    pub get_random2b: ESYS_CRYPTO_GET_RANDOM2B_FNP,
+    pub get_ecdh_point: ESYS_CRYPTO_GET_ECDH_POINT_FNP,
+    pub aes_encrypt: ESYS_CRYPTO_AES_ENCRYPT_FNP,
+    pub aes_decrypt: ESYS_CRYPTO_AES_DECRYPT_FNP,
+    pub sm4_encrypt: ESYS_CRYPTO_SM4_ENCRYPT_FNP,
+    pub sm4_decrypt: ESYS_CRYPTO_SM4_DECRYPT_FNP,
+    pub init: ESYS_CRYPTO_INIT_FNP,
+    pub userdata: *mut ::std::os::raw::c_void,
+}
+#[test]
+fn bindgen_test_layout_ESYS_CRYPTO_CALLBACKS() {
+    const UNINIT: ::std::mem::MaybeUninit<ESYS_CRYPTO_CALLBACKS> =
+        ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<ESYS_CRYPTO_CALLBACKS>(),
+        136usize,
+        "Size of ESYS_CRYPTO_CALLBACKS"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<ESYS_CRYPTO_CALLBACKS>(),
+        8usize,
+        "Alignment of ESYS_CRYPTO_CALLBACKS"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).rsa_pk_encrypt) as usize - ptr as usize },
+        0usize,
+        "Offset of field: ESYS_CRYPTO_CALLBACKS::rsa_pk_encrypt"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).hash_start) as usize - ptr as usize },
+        8usize,
+        "Offset of field: ESYS_CRYPTO_CALLBACKS::hash_start"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).hash_update) as usize - ptr as usize },
+        16usize,
+        "Offset of field: ESYS_CRYPTO_CALLBACKS::hash_update"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).hash_finish) as usize - ptr as usize },
+        24usize,
+        "Offset of field: ESYS_CRYPTO_CALLBACKS::hash_finish"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).hash_abort) as usize - ptr as usize },
+        32usize,
+        "Offset of field: ESYS_CRYPTO_CALLBACKS::hash_abort"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).hmac_start) as usize - ptr as usize },
+        40usize,
+        "Offset of field: ESYS_CRYPTO_CALLBACKS::hmac_start"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).hmac_update) as usize - ptr as usize },
+        48usize,
+        "Offset of field: ESYS_CRYPTO_CALLBACKS::hmac_update"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).hmac_finish) as usize - ptr as usize },
+        56usize,
+        "Offset of field: ESYS_CRYPTO_CALLBACKS::hmac_finish"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).hmac_abort) as usize - ptr as usize },
+        64usize,
+        "Offset of field: ESYS_CRYPTO_CALLBACKS::hmac_abort"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).get_random2b) as usize - ptr as usize },
+        72usize,
+        "Offset of field: ESYS_CRYPTO_CALLBACKS::get_random2b"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).get_ecdh_point) as usize - ptr as usize },
+        80usize,
+        "Offset of field: ESYS_CRYPTO_CALLBACKS::get_ecdh_point"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).aes_encrypt) as usize - ptr as usize },
+        88usize,
+        "Offset of field: ESYS_CRYPTO_CALLBACKS::aes_encrypt"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).aes_decrypt) as usize - ptr as usize },
+        96usize,
+        "Offset of field: ESYS_CRYPTO_CALLBACKS::aes_decrypt"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).sm4_encrypt) as usize - ptr as usize },
+        104usize,
+        "Offset of field: ESYS_CRYPTO_CALLBACKS::sm4_encrypt"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).sm4_decrypt) as usize - ptr as usize },
+        112usize,
+        "Offset of field: ESYS_CRYPTO_CALLBACKS::sm4_decrypt"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).init) as usize - ptr as usize },
+        120usize,
+        "Offset of field: ESYS_CRYPTO_CALLBACKS::init"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).userdata) as usize - ptr as usize },
+        128usize,
+        "Offset of field: ESYS_CRYPTO_CALLBACKS::userdata"
+    );
+}
+impl Default for ESYS_CRYPTO_CALLBACKS {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+extern "C" {
+    pub fn Esys_Initialize(
+        esys_context: *mut *mut ESYS_CONTEXT,
+        tcti: *mut TSS2_TCTI_CONTEXT,
+        abiVersion: *mut TSS2_ABI_VERSION,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_Finalize(context: *mut *mut ESYS_CONTEXT);
+}
+extern "C" {
+    pub fn Esys_GetTcti(
+        esys_context: *mut ESYS_CONTEXT,
+        tcti: *mut *mut TSS2_TCTI_CONTEXT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_GetPollHandles(
+        esys_context: *mut ESYS_CONTEXT,
+        handles: *mut *mut TSS2_TCTI_POLL_HANDLE,
+        count: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_SetTimeout(esys_context: *mut ESYS_CONTEXT, timeout: i32) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_TR_Serialize(
+        esys_context: *mut ESYS_CONTEXT,
+        object: ESYS_TR,
+        buffer: *mut *mut u8,
+        buffer_size: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_TR_Deserialize(
+        esys_context: *mut ESYS_CONTEXT,
+        buffer: *const u8,
+        buffer_size: size_t,
+        esys_handle: *mut ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_TR_FromTPMPublic_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        tpm_handle: TPM2_HANDLE,
+        optionalSession1: ESYS_TR,
+        optionalSession2: ESYS_TR,
+        optionalSession3: ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_TR_FromTPMPublic_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        object: *mut ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_TR_FromTPMPublic(
+        esysContext: *mut ESYS_CONTEXT,
+        tpm_handle: TPM2_HANDLE,
+        optionalSession1: ESYS_TR,
+        optionalSession2: ESYS_TR,
+        optionalSession3: ESYS_TR,
+        object: *mut ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_TR_Close(esys_context: *mut ESYS_CONTEXT, rsrc_handle: *mut ESYS_TR) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_TR_SetAuth(
+        esysContext: *mut ESYS_CONTEXT,
+        handle: ESYS_TR,
+        authValue: *const TPM2B_AUTH,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_TR_GetName(
+        esysContext: *mut ESYS_CONTEXT,
+        handle: ESYS_TR,
+        name: *mut *mut TPM2B_NAME,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_TRSess_GetAttributes(
+        esysContext: *mut ESYS_CONTEXT,
+        session: ESYS_TR,
+        flags: *mut TPMA_SESSION,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_TRSess_SetAttributes(
+        esysContext: *mut ESYS_CONTEXT,
+        session: ESYS_TR,
+        flags: TPMA_SESSION,
+        mask: TPMA_SESSION,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_TRSess_GetNonceTPM(
+        esysContext: *mut ESYS_CONTEXT,
+        session: ESYS_TR,
+        nonceTPM: *mut *mut TPM2B_NONCE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_TR_GetTpmHandle(
+        esys_context: *mut ESYS_CONTEXT,
+        esys_handle: ESYS_TR,
+        tpm_handle: *mut TPM2_HANDLE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_TRSess_GetAuthRequired(
+        esys_context: *mut ESYS_CONTEXT,
+        esys_handle: ESYS_TR,
+        auth_needed: *mut TPMI_YES_NO,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_Startup(esysContext: *mut ESYS_CONTEXT, startupType: TPM2_SU) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_Startup_Async(esysContext: *mut ESYS_CONTEXT, startupType: TPM2_SU) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_Startup_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_Shutdown(
+        esysContext: *mut ESYS_CONTEXT,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        shutdownType: TPM2_SU,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_Shutdown_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        shutdownType: TPM2_SU,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_Shutdown_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_SelfTest(
+        esysContext: *mut ESYS_CONTEXT,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        fullTest: TPMI_YES_NO,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_SelfTest_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        fullTest: TPMI_YES_NO,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_SelfTest_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_IncrementalSelfTest(
+        esysContext: *mut ESYS_CONTEXT,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        toTest: *const TPML_ALG,
+        toDoList: *mut *mut TPML_ALG,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_IncrementalSelfTest_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        toTest: *const TPML_ALG,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_IncrementalSelfTest_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        toDoList: *mut *mut TPML_ALG,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_GetTestResult(
+        esysContext: *mut ESYS_CONTEXT,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        outData: *mut *mut TPM2B_MAX_BUFFER,
+        testResult: *mut TPM2_RC,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_GetTestResult_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_GetTestResult_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        outData: *mut *mut TPM2B_MAX_BUFFER,
+        testResult: *mut TPM2_RC,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_StartAuthSession(
+        esysContext: *mut ESYS_CONTEXT,
+        tpmKey: ESYS_TR,
+        bind: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        nonceCaller: *const TPM2B_NONCE,
+        sessionType: TPM2_SE,
+        symmetric: *const TPMT_SYM_DEF,
+        authHash: TPMI_ALG_HASH,
+        sessionHandle: *mut ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_StartAuthSession_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        tpmKey: ESYS_TR,
+        bind: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        nonceCaller: *const TPM2B_NONCE,
+        sessionType: TPM2_SE,
+        symmetric: *const TPMT_SYM_DEF,
+        authHash: TPMI_ALG_HASH,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_StartAuthSession_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        sessionHandle: *mut ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyRestart(
+        esysContext: *mut ESYS_CONTEXT,
+        sessionHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyRestart_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        sessionHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyRestart_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_Create(
+        esysContext: *mut ESYS_CONTEXT,
+        parentHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        inSensitive: *const TPM2B_SENSITIVE_CREATE,
+        inPublic: *const TPM2B_PUBLIC,
+        outsideInfo: *const TPM2B_DATA,
+        creationPCR: *const TPML_PCR_SELECTION,
+        outPrivate: *mut *mut TPM2B_PRIVATE,
+        outPublic: *mut *mut TPM2B_PUBLIC,
+        creationData: *mut *mut TPM2B_CREATION_DATA,
+        creationHash: *mut *mut TPM2B_DIGEST,
+        creationTicket: *mut *mut TPMT_TK_CREATION,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_Create_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        parentHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        inSensitive: *const TPM2B_SENSITIVE_CREATE,
+        inPublic: *const TPM2B_PUBLIC,
+        outsideInfo: *const TPM2B_DATA,
+        creationPCR: *const TPML_PCR_SELECTION,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_Create_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        outPrivate: *mut *mut TPM2B_PRIVATE,
+        outPublic: *mut *mut TPM2B_PUBLIC,
+        creationData: *mut *mut TPM2B_CREATION_DATA,
+        creationHash: *mut *mut TPM2B_DIGEST,
+        creationTicket: *mut *mut TPMT_TK_CREATION,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_Load(
+        esysContext: *mut ESYS_CONTEXT,
+        parentHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        inPrivate: *const TPM2B_PRIVATE,
+        inPublic: *const TPM2B_PUBLIC,
+        objectHandle: *mut ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_Load_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        parentHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        inPrivate: *const TPM2B_PRIVATE,
+        inPublic: *const TPM2B_PUBLIC,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_Load_Finish(esysContext: *mut ESYS_CONTEXT, objectHandle: *mut ESYS_TR) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_LoadExternal(
+        esysContext: *mut ESYS_CONTEXT,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        inPrivate: *const TPM2B_SENSITIVE,
+        inPublic: *const TPM2B_PUBLIC,
+        hierarchy: ESYS_TR,
+        objectHandle: *mut ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_LoadExternal_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        inPrivate: *const TPM2B_SENSITIVE,
+        inPublic: *const TPM2B_PUBLIC,
+        hierarchy: ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_LoadExternal_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        objectHandle: *mut ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_ReadPublic(
+        esysContext: *mut ESYS_CONTEXT,
+        objectHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        outPublic: *mut *mut TPM2B_PUBLIC,
+        name: *mut *mut TPM2B_NAME,
+        qualifiedName: *mut *mut TPM2B_NAME,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_ReadPublic_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        objectHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_ReadPublic_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        outPublic: *mut *mut TPM2B_PUBLIC,
+        name: *mut *mut TPM2B_NAME,
+        qualifiedName: *mut *mut TPM2B_NAME,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_ActivateCredential(
+        esysContext: *mut ESYS_CONTEXT,
+        activateHandle: ESYS_TR,
+        keyHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        credentialBlob: *const TPM2B_ID_OBJECT,
+        secret: *const TPM2B_ENCRYPTED_SECRET,
+        certInfo: *mut *mut TPM2B_DIGEST,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_ActivateCredential_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        activateHandle: ESYS_TR,
+        keyHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        credentialBlob: *const TPM2B_ID_OBJECT,
+        secret: *const TPM2B_ENCRYPTED_SECRET,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_ActivateCredential_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        certInfo: *mut *mut TPM2B_DIGEST,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_ACT_SetTimeout(
+        esysContext: *mut ESYS_CONTEXT,
+        actHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        startTimeout: UINT32,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_ACT_SetTimeout_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        actHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        startTimeout: UINT32,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_ACT_SetTimeout_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_AC_GetCapability_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        optionalSession1: ESYS_TR,
+        optionalSession2: ESYS_TR,
+        optionalSession3: ESYS_TR,
+        ac: ESYS_TR,
+        capability: TPM_AT,
+        count: UINT32,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_AC_GetCapability_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        moreData: *mut TPMI_YES_NO,
+        capabilityData: *mut *mut TPML_AC_CAPABILITIES,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_AC_GetCapability(
+        esysContext: *mut ESYS_CONTEXT,
+        optionalSession1: ESYS_TR,
+        optionalSession2: ESYS_TR,
+        optionalSession3: ESYS_TR,
+        ac: ESYS_TR,
+        capability: TPM_AT,
+        count: UINT32,
+        moreData: *mut TPMI_YES_NO,
+        capabilityData: *mut *mut TPML_AC_CAPABILITIES,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_AC_Send_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        sendObject: ESYS_TR,
+        nvAuthHandle: ESYS_TR,
+        optionalSession1: ESYS_TR,
+        optionalSession2: ESYS_TR,
+        optionalSession3: ESYS_TR,
+        ac: ESYS_TR,
+        acDataIn: *mut TPM2B_MAX_BUFFER,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_AC_Send_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        acDataOut: *mut *mut TPMS_AC_OUTPUT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_AC_Send(
+        esysContext: *mut ESYS_CONTEXT,
+        sendObject: ESYS_TR,
+        nvAuthHandle: ESYS_TR,
+        optionalSession1: ESYS_TR,
+        optionalSession2: ESYS_TR,
+        optionalSession3: ESYS_TR,
+        ac: ESYS_TR,
+        acDataIn: *mut TPM2B_MAX_BUFFER,
+        acDataOut: *mut *mut TPMS_AC_OUTPUT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_Policy_AC_SendSelect_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        policySession1: ESYS_TR,
+        optionalSession2: ESYS_TR,
+        optionalSession3: ESYS_TR,
+        objectName: *mut TPM2B_NAME,
+        authHandleName: *mut TPM2B_NAME,
+        acName: *mut TPM2B_NAME,
+        includeObject: TPMI_YES_NO,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_Policy_AC_SendSelect_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_Policy_AC_SendSelect(
+        esysContext: *mut ESYS_CONTEXT,
+        policySession1: ESYS_TR,
+        optionalSession2: ESYS_TR,
+        optionalSession3: ESYS_TR,
+        objectName: *mut TPM2B_NAME,
+        authHandleName: *mut TPM2B_NAME,
+        acName: *mut TPM2B_NAME,
+        includeObject: TPMI_YES_NO,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_MakeCredential(
+        esysContext: *mut ESYS_CONTEXT,
+        handle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        credential: *const TPM2B_DIGEST,
+        objectName: *const TPM2B_NAME,
+        credentialBlob: *mut *mut TPM2B_ID_OBJECT,
+        secret: *mut *mut TPM2B_ENCRYPTED_SECRET,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_MakeCredential_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        handle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        credential: *const TPM2B_DIGEST,
+        objectName: *const TPM2B_NAME,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_MakeCredential_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        credentialBlob: *mut *mut TPM2B_ID_OBJECT,
+        secret: *mut *mut TPM2B_ENCRYPTED_SECRET,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_Unseal(
+        esysContext: *mut ESYS_CONTEXT,
+        itemHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        outData: *mut *mut TPM2B_SENSITIVE_DATA,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_Unseal_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        itemHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_Unseal_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        outData: *mut *mut TPM2B_SENSITIVE_DATA,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_ObjectChangeAuth(
+        esysContext: *mut ESYS_CONTEXT,
+        objectHandle: ESYS_TR,
+        parentHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        newAuth: *const TPM2B_AUTH,
+        outPrivate: *mut *mut TPM2B_PRIVATE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_ObjectChangeAuth_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        objectHandle: ESYS_TR,
+        parentHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        newAuth: *const TPM2B_AUTH,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_ObjectChangeAuth_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        outPrivate: *mut *mut TPM2B_PRIVATE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_CreateLoaded(
+        esysContext: *mut ESYS_CONTEXT,
+        parentHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        inSensitive: *const TPM2B_SENSITIVE_CREATE,
+        inPublic: *const TPM2B_TEMPLATE,
+        objectHandle: *mut ESYS_TR,
+        outPrivate: *mut *mut TPM2B_PRIVATE,
+        outPublic: *mut *mut TPM2B_PUBLIC,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_CreateLoaded_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        parentHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        inSensitive: *const TPM2B_SENSITIVE_CREATE,
+        inPublic: *const TPM2B_TEMPLATE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_CreateLoaded_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        objectHandle: *mut ESYS_TR,
+        outPrivate: *mut *mut TPM2B_PRIVATE,
+        outPublic: *mut *mut TPM2B_PUBLIC,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_Duplicate(
+        esysContext: *mut ESYS_CONTEXT,
+        objectHandle: ESYS_TR,
+        newParentHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        encryptionKeyIn: *const TPM2B_DATA,
+        symmetricAlg: *const TPMT_SYM_DEF_OBJECT,
+        encryptionKeyOut: *mut *mut TPM2B_DATA,
+        duplicate: *mut *mut TPM2B_PRIVATE,
+        outSymSeed: *mut *mut TPM2B_ENCRYPTED_SECRET,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_Duplicate_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        objectHandle: ESYS_TR,
+        newParentHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        encryptionKeyIn: *const TPM2B_DATA,
+        symmetricAlg: *const TPMT_SYM_DEF_OBJECT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_Duplicate_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        encryptionKeyOut: *mut *mut TPM2B_DATA,
+        duplicate: *mut *mut TPM2B_PRIVATE,
+        outSymSeed: *mut *mut TPM2B_ENCRYPTED_SECRET,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_Rewrap(
+        esysContext: *mut ESYS_CONTEXT,
+        oldParent: ESYS_TR,
+        newParent: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        inDuplicate: *const TPM2B_PRIVATE,
+        name: *const TPM2B_NAME,
+        inSymSeed: *const TPM2B_ENCRYPTED_SECRET,
+        outDuplicate: *mut *mut TPM2B_PRIVATE,
+        outSymSeed: *mut *mut TPM2B_ENCRYPTED_SECRET,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_Rewrap_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        oldParent: ESYS_TR,
+        newParent: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        inDuplicate: *const TPM2B_PRIVATE,
+        name: *const TPM2B_NAME,
+        inSymSeed: *const TPM2B_ENCRYPTED_SECRET,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_Rewrap_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        outDuplicate: *mut *mut TPM2B_PRIVATE,
+        outSymSeed: *mut *mut TPM2B_ENCRYPTED_SECRET,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_Import(
+        esysContext: *mut ESYS_CONTEXT,
+        parentHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        encryptionKey: *const TPM2B_DATA,
+        objectPublic: *const TPM2B_PUBLIC,
+        duplicate: *const TPM2B_PRIVATE,
+        inSymSeed: *const TPM2B_ENCRYPTED_SECRET,
+        symmetricAlg: *const TPMT_SYM_DEF_OBJECT,
+        outPrivate: *mut *mut TPM2B_PRIVATE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_Import_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        parentHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        encryptionKey: *const TPM2B_DATA,
+        objectPublic: *const TPM2B_PUBLIC,
+        duplicate: *const TPM2B_PRIVATE,
+        inSymSeed: *const TPM2B_ENCRYPTED_SECRET,
+        symmetricAlg: *const TPMT_SYM_DEF_OBJECT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_Import_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        outPrivate: *mut *mut TPM2B_PRIVATE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_RSA_Encrypt(
+        esysContext: *mut ESYS_CONTEXT,
+        keyHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        message: *const TPM2B_PUBLIC_KEY_RSA,
+        inScheme: *const TPMT_RSA_DECRYPT,
+        label: *const TPM2B_DATA,
+        outData: *mut *mut TPM2B_PUBLIC_KEY_RSA,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_RSA_Encrypt_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        keyHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        message: *const TPM2B_PUBLIC_KEY_RSA,
+        inScheme: *const TPMT_RSA_DECRYPT,
+        label: *const TPM2B_DATA,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_RSA_Encrypt_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        outData: *mut *mut TPM2B_PUBLIC_KEY_RSA,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_RSA_Decrypt(
+        esysContext: *mut ESYS_CONTEXT,
+        keyHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        cipherText: *const TPM2B_PUBLIC_KEY_RSA,
+        inScheme: *const TPMT_RSA_DECRYPT,
+        label: *const TPM2B_DATA,
+        message: *mut *mut TPM2B_PUBLIC_KEY_RSA,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_RSA_Decrypt_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        keyHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        cipherText: *const TPM2B_PUBLIC_KEY_RSA,
+        inScheme: *const TPMT_RSA_DECRYPT,
+        label: *const TPM2B_DATA,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_RSA_Decrypt_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        message: *mut *mut TPM2B_PUBLIC_KEY_RSA,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_ECDH_KeyGen(
+        esysContext: *mut ESYS_CONTEXT,
+        keyHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        zPoint: *mut *mut TPM2B_ECC_POINT,
+        pubPoint: *mut *mut TPM2B_ECC_POINT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_ECDH_KeyGen_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        keyHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_ECDH_KeyGen_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        zPoint: *mut *mut TPM2B_ECC_POINT,
+        pubPoint: *mut *mut TPM2B_ECC_POINT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_ECDH_ZGen(
+        esysContext: *mut ESYS_CONTEXT,
+        keyHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        inPoint: *const TPM2B_ECC_POINT,
+        outPoint: *mut *mut TPM2B_ECC_POINT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_ECDH_ZGen_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        keyHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        inPoint: *const TPM2B_ECC_POINT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_ECDH_ZGen_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        outPoint: *mut *mut TPM2B_ECC_POINT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_ECC_Parameters(
+        esysContext: *mut ESYS_CONTEXT,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        curveID: TPMI_ECC_CURVE,
+        parameters: *mut *mut TPMS_ALGORITHM_DETAIL_ECC,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_ECC_Parameters_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        curveID: TPMI_ECC_CURVE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_ECC_Parameters_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        parameters: *mut *mut TPMS_ALGORITHM_DETAIL_ECC,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_ZGen_2Phase(
+        esysContext: *mut ESYS_CONTEXT,
+        keyA: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        inQsB: *const TPM2B_ECC_POINT,
+        inQeB: *const TPM2B_ECC_POINT,
+        inScheme: TPMI_ECC_KEY_EXCHANGE,
+        counter: UINT16,
+        outZ1: *mut *mut TPM2B_ECC_POINT,
+        outZ2: *mut *mut TPM2B_ECC_POINT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_ZGen_2Phase_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        keyA: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        inQsB: *const TPM2B_ECC_POINT,
+        inQeB: *const TPM2B_ECC_POINT,
+        inScheme: TPMI_ECC_KEY_EXCHANGE,
+        counter: UINT16,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_ZGen_2Phase_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        outZ1: *mut *mut TPM2B_ECC_POINT,
+        outZ2: *mut *mut TPM2B_ECC_POINT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_EncryptDecrypt(
+        esysContext: *mut ESYS_CONTEXT,
+        keyHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        decrypt: TPMI_YES_NO,
+        mode: TPMI_ALG_CIPHER_MODE,
+        ivIn: *const TPM2B_IV,
+        inData: *const TPM2B_MAX_BUFFER,
+        outData: *mut *mut TPM2B_MAX_BUFFER,
+        ivOut: *mut *mut TPM2B_IV,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_EncryptDecrypt_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        keyHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        decrypt: TPMI_YES_NO,
+        mode: TPMI_ALG_CIPHER_MODE,
+        ivIn: *const TPM2B_IV,
+        inData: *const TPM2B_MAX_BUFFER,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_EncryptDecrypt_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        outData: *mut *mut TPM2B_MAX_BUFFER,
+        ivOut: *mut *mut TPM2B_IV,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_EncryptDecrypt2(
+        esysContext: *mut ESYS_CONTEXT,
+        keyHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        inData: *const TPM2B_MAX_BUFFER,
+        decrypt: TPMI_YES_NO,
+        mode: TPMI_ALG_CIPHER_MODE,
+        ivIn: *const TPM2B_IV,
+        outData: *mut *mut TPM2B_MAX_BUFFER,
+        ivOut: *mut *mut TPM2B_IV,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_EncryptDecrypt2_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        keyHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        inData: *const TPM2B_MAX_BUFFER,
+        decrypt: TPMI_YES_NO,
+        mode: TPMI_ALG_CIPHER_MODE,
+        ivIn: *const TPM2B_IV,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_EncryptDecrypt2_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        outData: *mut *mut TPM2B_MAX_BUFFER,
+        ivOut: *mut *mut TPM2B_IV,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_Hash(
+        esysContext: *mut ESYS_CONTEXT,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        data: *const TPM2B_MAX_BUFFER,
+        hashAlg: TPMI_ALG_HASH,
+        hierarchy: ESYS_TR,
+        outHash: *mut *mut TPM2B_DIGEST,
+        validation: *mut *mut TPMT_TK_HASHCHECK,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_Hash_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        data: *const TPM2B_MAX_BUFFER,
+        hashAlg: TPMI_ALG_HASH,
+        hierarchy: ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_Hash_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        outHash: *mut *mut TPM2B_DIGEST,
+        validation: *mut *mut TPMT_TK_HASHCHECK,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_HMAC(
+        esysContext: *mut ESYS_CONTEXT,
+        handle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        buffer: *const TPM2B_MAX_BUFFER,
+        hashAlg: TPMI_ALG_HASH,
+        outHMAC: *mut *mut TPM2B_DIGEST,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_HMAC_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        handle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        buffer: *const TPM2B_MAX_BUFFER,
+        hashAlg: TPMI_ALG_HASH,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_HMAC_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        outHMAC: *mut *mut TPM2B_DIGEST,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_MAC_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        handle: ESYS_TR,
+        handleSession1: ESYS_TR,
+        optionalSession2: ESYS_TR,
+        optionalSession3: ESYS_TR,
+        buffer: *const TPM2B_MAX_BUFFER,
+        inScheme: TPMI_ALG_MAC_SCHEME,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_MAC_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        outMAC: *mut *mut TPM2B_DIGEST,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_MAC(
+        esysContext: *mut ESYS_CONTEXT,
+        handle: ESYS_TR,
+        handleSession1: ESYS_TR,
+        optionalSession2: ESYS_TR,
+        optionalSession3: ESYS_TR,
+        buffer: *const TPM2B_MAX_BUFFER,
+        inScheme: TPMI_ALG_MAC_SCHEME,
+        outMAC: *mut *mut TPM2B_DIGEST,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_GetRandom(
+        esysContext: *mut ESYS_CONTEXT,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        bytesRequested: UINT16,
+        randomBytes: *mut *mut TPM2B_DIGEST,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_GetRandom_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        bytesRequested: UINT16,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_GetRandom_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        randomBytes: *mut *mut TPM2B_DIGEST,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_StirRandom(
+        esysContext: *mut ESYS_CONTEXT,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        inData: *const TPM2B_SENSITIVE_DATA,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_StirRandom_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        inData: *const TPM2B_SENSITIVE_DATA,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_StirRandom_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_HMAC_Start(
+        esysContext: *mut ESYS_CONTEXT,
+        handle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        auth: *const TPM2B_AUTH,
+        hashAlg: TPMI_ALG_HASH,
+        sequenceHandle: *mut ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_HMAC_Start_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        handle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        auth: *const TPM2B_AUTH,
+        hashAlg: TPMI_ALG_HASH,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_HMAC_Start_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        sequenceHandle: *mut ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_MAC_Start(
+        esysContext: *mut ESYS_CONTEXT,
+        handle: ESYS_TR,
+        handleSession1: ESYS_TR,
+        optionalSession2: ESYS_TR,
+        optionalSession3: ESYS_TR,
+        auth: *const TPM2B_AUTH,
+        inScheme: TPMI_ALG_MAC_SCHEME,
+        sequenceHandle: *mut ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_MAC_Start_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        handle: ESYS_TR,
+        handleSession1: ESYS_TR,
+        optionalSession2: ESYS_TR,
+        optionalSession3: ESYS_TR,
+        auth: *const TPM2B_AUTH,
+        inScheme: TPMI_ALG_MAC_SCHEME,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_MAC_Start_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        sequenceHandle: *mut ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_HashSequenceStart(
+        esysContext: *mut ESYS_CONTEXT,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        auth: *const TPM2B_AUTH,
+        hashAlg: TPMI_ALG_HASH,
+        sequenceHandle: *mut ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_HashSequenceStart_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        auth: *const TPM2B_AUTH,
+        hashAlg: TPMI_ALG_HASH,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_HashSequenceStart_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        sequenceHandle: *mut ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_SequenceUpdate(
+        esysContext: *mut ESYS_CONTEXT,
+        sequenceHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        buffer: *const TPM2B_MAX_BUFFER,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_SequenceUpdate_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        sequenceHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        buffer: *const TPM2B_MAX_BUFFER,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_SequenceUpdate_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_SequenceComplete(
+        esysContext: *mut ESYS_CONTEXT,
+        sequenceHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        buffer: *const TPM2B_MAX_BUFFER,
+        hierarchy: ESYS_TR,
+        result: *mut *mut TPM2B_DIGEST,
+        validation: *mut *mut TPMT_TK_HASHCHECK,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_SequenceComplete_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        sequenceHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        buffer: *const TPM2B_MAX_BUFFER,
+        hierarchy: ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_SequenceComplete_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        result: *mut *mut TPM2B_DIGEST,
+        validation: *mut *mut TPMT_TK_HASHCHECK,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_EventSequenceComplete(
+        esysContext: *mut ESYS_CONTEXT,
+        pcrHandle: ESYS_TR,
+        sequenceHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        buffer: *const TPM2B_MAX_BUFFER,
+        results: *mut *mut TPML_DIGEST_VALUES,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_EventSequenceComplete_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        pcrHandle: ESYS_TR,
+        sequenceHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        buffer: *const TPM2B_MAX_BUFFER,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_EventSequenceComplete_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        results: *mut *mut TPML_DIGEST_VALUES,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_Certify(
+        esysContext: *mut ESYS_CONTEXT,
+        objectHandle: ESYS_TR,
+        signHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        qualifyingData: *const TPM2B_DATA,
+        inScheme: *const TPMT_SIG_SCHEME,
+        certifyInfo: *mut *mut TPM2B_ATTEST,
+        signature: *mut *mut TPMT_SIGNATURE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_Certify_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        objectHandle: ESYS_TR,
+        signHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        qualifyingData: *const TPM2B_DATA,
+        inScheme: *const TPMT_SIG_SCHEME,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_Certify_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        certifyInfo: *mut *mut TPM2B_ATTEST,
+        signature: *mut *mut TPMT_SIGNATURE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_CertifyCreation(
+        esysContext: *mut ESYS_CONTEXT,
+        signHandle: ESYS_TR,
+        objectHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        qualifyingData: *const TPM2B_DATA,
+        creationHash: *const TPM2B_DIGEST,
+        inScheme: *const TPMT_SIG_SCHEME,
+        creationTicket: *const TPMT_TK_CREATION,
+        certifyInfo: *mut *mut TPM2B_ATTEST,
+        signature: *mut *mut TPMT_SIGNATURE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_CertifyCreation_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        signHandle: ESYS_TR,
+        objectHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        qualifyingData: *const TPM2B_DATA,
+        creationHash: *const TPM2B_DIGEST,
+        inScheme: *const TPMT_SIG_SCHEME,
+        creationTicket: *const TPMT_TK_CREATION,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_CertifyCreation_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        certifyInfo: *mut *mut TPM2B_ATTEST,
+        signature: *mut *mut TPMT_SIGNATURE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_CertifyX509(
+        esysContext: *mut ESYS_CONTEXT,
+        objectHandle: ESYS_TR,
+        signHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        reserved: *const TPM2B_DATA,
+        inScheme: *const TPMT_SIG_SCHEME,
+        partialCertificate: *const TPM2B_MAX_BUFFER,
+        addedToCertificate: *mut *mut TPM2B_MAX_BUFFER,
+        tbsDigest: *mut *mut TPM2B_DIGEST,
+        signature: *mut *mut TPMT_SIGNATURE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_CertifyX509_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        objectHandle: ESYS_TR,
+        signHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        reserved: *const TPM2B_DATA,
+        inScheme: *const TPMT_SIG_SCHEME,
+        partialCertificate: *const TPM2B_MAX_BUFFER,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_CertifyX509_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        addedToCertificate: *mut *mut TPM2B_MAX_BUFFER,
+        tbsDigest: *mut *mut TPM2B_DIGEST,
+        signature: *mut *mut TPMT_SIGNATURE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_Quote(
+        esysContext: *mut ESYS_CONTEXT,
+        signHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        qualifyingData: *const TPM2B_DATA,
+        inScheme: *const TPMT_SIG_SCHEME,
+        PCRselect: *const TPML_PCR_SELECTION,
+        quoted: *mut *mut TPM2B_ATTEST,
+        signature: *mut *mut TPMT_SIGNATURE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_Quote_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        signHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        qualifyingData: *const TPM2B_DATA,
+        inScheme: *const TPMT_SIG_SCHEME,
+        PCRselect: *const TPML_PCR_SELECTION,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_Quote_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        quoted: *mut *mut TPM2B_ATTEST,
+        signature: *mut *mut TPMT_SIGNATURE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_GetSessionAuditDigest(
+        esysContext: *mut ESYS_CONTEXT,
+        privacyAdminHandle: ESYS_TR,
+        signHandle: ESYS_TR,
+        sessionHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        qualifyingData: *const TPM2B_DATA,
+        inScheme: *const TPMT_SIG_SCHEME,
+        auditInfo: *mut *mut TPM2B_ATTEST,
+        signature: *mut *mut TPMT_SIGNATURE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_GetSessionAuditDigest_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        privacyAdminHandle: ESYS_TR,
+        signHandle: ESYS_TR,
+        sessionHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        qualifyingData: *const TPM2B_DATA,
+        inScheme: *const TPMT_SIG_SCHEME,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_GetSessionAuditDigest_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        auditInfo: *mut *mut TPM2B_ATTEST,
+        signature: *mut *mut TPMT_SIGNATURE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_GetCommandAuditDigest(
+        esysContext: *mut ESYS_CONTEXT,
+        privacyHandle: ESYS_TR,
+        signHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        qualifyingData: *const TPM2B_DATA,
+        inScheme: *const TPMT_SIG_SCHEME,
+        auditInfo: *mut *mut TPM2B_ATTEST,
+        signature: *mut *mut TPMT_SIGNATURE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_GetCommandAuditDigest_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        privacyHandle: ESYS_TR,
+        signHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        qualifyingData: *const TPM2B_DATA,
+        inScheme: *const TPMT_SIG_SCHEME,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_GetCommandAuditDigest_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        auditInfo: *mut *mut TPM2B_ATTEST,
+        signature: *mut *mut TPMT_SIGNATURE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_GetTime(
+        esysContext: *mut ESYS_CONTEXT,
+        privacyAdminHandle: ESYS_TR,
+        signHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        qualifyingData: *const TPM2B_DATA,
+        inScheme: *const TPMT_SIG_SCHEME,
+        timeInfo: *mut *mut TPM2B_ATTEST,
+        signature: *mut *mut TPMT_SIGNATURE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_GetTime_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        privacyAdminHandle: ESYS_TR,
+        signHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        qualifyingData: *const TPM2B_DATA,
+        inScheme: *const TPMT_SIG_SCHEME,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_GetTime_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        timeInfo: *mut *mut TPM2B_ATTEST,
+        signature: *mut *mut TPMT_SIGNATURE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_Commit(
+        esysContext: *mut ESYS_CONTEXT,
+        signHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        P1: *const TPM2B_ECC_POINT,
+        s2: *const TPM2B_SENSITIVE_DATA,
+        y2: *const TPM2B_ECC_PARAMETER,
+        K: *mut *mut TPM2B_ECC_POINT,
+        L: *mut *mut TPM2B_ECC_POINT,
+        E: *mut *mut TPM2B_ECC_POINT,
+        counter: *mut UINT16,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_Commit_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        signHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        P1: *const TPM2B_ECC_POINT,
+        s2: *const TPM2B_SENSITIVE_DATA,
+        y2: *const TPM2B_ECC_PARAMETER,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_Commit_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        K: *mut *mut TPM2B_ECC_POINT,
+        L: *mut *mut TPM2B_ECC_POINT,
+        E: *mut *mut TPM2B_ECC_POINT,
+        counter: *mut UINT16,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_EC_Ephemeral(
+        esysContext: *mut ESYS_CONTEXT,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        curveID: TPMI_ECC_CURVE,
+        Q: *mut *mut TPM2B_ECC_POINT,
+        counter: *mut UINT16,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_EC_Ephemeral_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        curveID: TPMI_ECC_CURVE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_EC_Ephemeral_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        Q: *mut *mut TPM2B_ECC_POINT,
+        counter: *mut UINT16,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_VerifySignature(
+        esysContext: *mut ESYS_CONTEXT,
+        keyHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        digest: *const TPM2B_DIGEST,
+        signature: *const TPMT_SIGNATURE,
+        validation: *mut *mut TPMT_TK_VERIFIED,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_VerifySignature_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        keyHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        digest: *const TPM2B_DIGEST,
+        signature: *const TPMT_SIGNATURE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_VerifySignature_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        validation: *mut *mut TPMT_TK_VERIFIED,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_Sign(
+        esysContext: *mut ESYS_CONTEXT,
+        keyHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        digest: *const TPM2B_DIGEST,
+        inScheme: *const TPMT_SIG_SCHEME,
+        validation: *const TPMT_TK_HASHCHECK,
+        signature: *mut *mut TPMT_SIGNATURE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_Sign_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        keyHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        digest: *const TPM2B_DIGEST,
+        inScheme: *const TPMT_SIG_SCHEME,
+        validation: *const TPMT_TK_HASHCHECK,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_Sign_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        signature: *mut *mut TPMT_SIGNATURE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_SetCommandCodeAuditStatus(
+        esysContext: *mut ESYS_CONTEXT,
+        auth: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        auditAlg: TPMI_ALG_HASH,
+        setList: *const TPML_CC,
+        clearList: *const TPML_CC,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_SetCommandCodeAuditStatus_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        auth: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        auditAlg: TPMI_ALG_HASH,
+        setList: *const TPML_CC,
+        clearList: *const TPML_CC,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_SetCommandCodeAuditStatus_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PCR_Extend(
+        esysContext: *mut ESYS_CONTEXT,
+        pcrHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        digests: *const TPML_DIGEST_VALUES,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PCR_Extend_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        pcrHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        digests: *const TPML_DIGEST_VALUES,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PCR_Extend_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PCR_Event(
+        esysContext: *mut ESYS_CONTEXT,
+        pcrHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        eventData: *const TPM2B_EVENT,
+        digests: *mut *mut TPML_DIGEST_VALUES,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PCR_Event_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        pcrHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        eventData: *const TPM2B_EVENT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PCR_Event_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        digests: *mut *mut TPML_DIGEST_VALUES,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PCR_Read(
+        esysContext: *mut ESYS_CONTEXT,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        pcrSelectionIn: *const TPML_PCR_SELECTION,
+        pcrUpdateCounter: *mut UINT32,
+        pcrSelectionOut: *mut *mut TPML_PCR_SELECTION,
+        pcrValues: *mut *mut TPML_DIGEST,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PCR_Read_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        pcrSelectionIn: *const TPML_PCR_SELECTION,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PCR_Read_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        pcrUpdateCounter: *mut UINT32,
+        pcrSelectionOut: *mut *mut TPML_PCR_SELECTION,
+        pcrValues: *mut *mut TPML_DIGEST,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PCR_Allocate(
+        esysContext: *mut ESYS_CONTEXT,
+        authHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        pcrAllocation: *const TPML_PCR_SELECTION,
+        allocationSuccess: *mut TPMI_YES_NO,
+        maxPCR: *mut UINT32,
+        sizeNeeded: *mut UINT32,
+        sizeAvailable: *mut UINT32,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PCR_Allocate_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        authHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        pcrAllocation: *const TPML_PCR_SELECTION,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PCR_Allocate_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        allocationSuccess: *mut TPMI_YES_NO,
+        maxPCR: *mut UINT32,
+        sizeNeeded: *mut UINT32,
+        sizeAvailable: *mut UINT32,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PCR_SetAuthPolicy(
+        esysContext: *mut ESYS_CONTEXT,
+        authHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        authPolicy: *const TPM2B_DIGEST,
+        hashAlg: TPMI_ALG_HASH,
+        pcrNum: TPMI_DH_PCR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PCR_SetAuthPolicy_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        authHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        authPolicy: *const TPM2B_DIGEST,
+        hashAlg: TPMI_ALG_HASH,
+        pcrNum: TPMI_DH_PCR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PCR_SetAuthPolicy_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PCR_SetAuthValue(
+        esysContext: *mut ESYS_CONTEXT,
+        pcrHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        auth: *const TPM2B_DIGEST,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PCR_SetAuthValue_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        pcrHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        auth: *const TPM2B_DIGEST,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PCR_SetAuthValue_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PCR_Reset(
+        esysContext: *mut ESYS_CONTEXT,
+        pcrHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PCR_Reset_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        pcrHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PCR_Reset_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicySigned(
+        esysContext: *mut ESYS_CONTEXT,
+        authObject: ESYS_TR,
+        policySession: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        nonceTPM: *const TPM2B_NONCE,
+        cpHashA: *const TPM2B_DIGEST,
+        policyRef: *const TPM2B_NONCE,
+        expiration: INT32,
+        auth: *const TPMT_SIGNATURE,
+        timeout: *mut *mut TPM2B_TIMEOUT,
+        policyTicket: *mut *mut TPMT_TK_AUTH,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicySigned_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        authObject: ESYS_TR,
+        policySession: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        nonceTPM: *const TPM2B_NONCE,
+        cpHashA: *const TPM2B_DIGEST,
+        policyRef: *const TPM2B_NONCE,
+        expiration: INT32,
+        auth: *const TPMT_SIGNATURE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicySigned_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        timeout: *mut *mut TPM2B_TIMEOUT,
+        policyTicket: *mut *mut TPMT_TK_AUTH,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicySecret(
+        esysContext: *mut ESYS_CONTEXT,
+        authHandle: ESYS_TR,
+        policySession: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        nonceTPM: *const TPM2B_NONCE,
+        cpHashA: *const TPM2B_DIGEST,
+        policyRef: *const TPM2B_NONCE,
+        expiration: INT32,
+        timeout: *mut *mut TPM2B_TIMEOUT,
+        policyTicket: *mut *mut TPMT_TK_AUTH,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicySecret_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        authHandle: ESYS_TR,
+        policySession: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        nonceTPM: *const TPM2B_NONCE,
+        cpHashA: *const TPM2B_DIGEST,
+        policyRef: *const TPM2B_NONCE,
+        expiration: INT32,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicySecret_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        timeout: *mut *mut TPM2B_TIMEOUT,
+        policyTicket: *mut *mut TPMT_TK_AUTH,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyTicket(
+        esysContext: *mut ESYS_CONTEXT,
+        policySession: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        timeout: *const TPM2B_TIMEOUT,
+        cpHashA: *const TPM2B_DIGEST,
+        policyRef: *const TPM2B_NONCE,
+        authName: *const TPM2B_NAME,
+        ticket: *const TPMT_TK_AUTH,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyTicket_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        policySession: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        timeout: *const TPM2B_TIMEOUT,
+        cpHashA: *const TPM2B_DIGEST,
+        policyRef: *const TPM2B_NONCE,
+        authName: *const TPM2B_NAME,
+        ticket: *const TPMT_TK_AUTH,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyTicket_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyOR(
+        esysContext: *mut ESYS_CONTEXT,
+        policySession: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        pHashList: *const TPML_DIGEST,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyOR_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        policySession: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        pHashList: *const TPML_DIGEST,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyOR_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyPCR(
+        esysContext: *mut ESYS_CONTEXT,
+        policySession: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        pcrDigest: *const TPM2B_DIGEST,
+        pcrs: *const TPML_PCR_SELECTION,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyPCR_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        policySession: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        pcrDigest: *const TPM2B_DIGEST,
+        pcrs: *const TPML_PCR_SELECTION,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyPCR_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyLocality(
+        esysContext: *mut ESYS_CONTEXT,
+        policySession: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        locality: TPMA_LOCALITY,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyLocality_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        policySession: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        locality: TPMA_LOCALITY,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyLocality_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyNV(
+        esysContext: *mut ESYS_CONTEXT,
+        authHandle: ESYS_TR,
+        nvIndex: ESYS_TR,
+        policySession: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        operandB: *const TPM2B_OPERAND,
+        offset: UINT16,
+        operation: TPM2_EO,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyNV_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        authHandle: ESYS_TR,
+        nvIndex: ESYS_TR,
+        policySession: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        operandB: *const TPM2B_OPERAND,
+        offset: UINT16,
+        operation: TPM2_EO,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyNV_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyCounterTimer(
+        esysContext: *mut ESYS_CONTEXT,
+        policySession: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        operandB: *const TPM2B_OPERAND,
+        offset: UINT16,
+        operation: TPM2_EO,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyCounterTimer_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        policySession: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        operandB: *const TPM2B_OPERAND,
+        offset: UINT16,
+        operation: TPM2_EO,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyCounterTimer_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyCommandCode(
+        esysContext: *mut ESYS_CONTEXT,
+        policySession: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        code: TPM2_CC,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyCommandCode_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        policySession: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        code: TPM2_CC,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyCommandCode_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyPhysicalPresence(
+        esysContext: *mut ESYS_CONTEXT,
+        policySession: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyPhysicalPresence_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        policySession: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyPhysicalPresence_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyCpHash(
+        esysContext: *mut ESYS_CONTEXT,
+        policySession: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        cpHashA: *const TPM2B_DIGEST,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyCpHash_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        policySession: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        cpHashA: *const TPM2B_DIGEST,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyCpHash_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyNameHash(
+        esysContext: *mut ESYS_CONTEXT,
+        policySession: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        nameHash: *const TPM2B_DIGEST,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyNameHash_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        policySession: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        nameHash: *const TPM2B_DIGEST,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyNameHash_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyDuplicationSelect(
+        esysContext: *mut ESYS_CONTEXT,
+        policySession: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        objectName: *const TPM2B_NAME,
+        newParentName: *const TPM2B_NAME,
+        includeObject: TPMI_YES_NO,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyDuplicationSelect_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        policySession: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        objectName: *const TPM2B_NAME,
+        newParentName: *const TPM2B_NAME,
+        includeObject: TPMI_YES_NO,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyDuplicationSelect_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyAuthorize(
+        esysContext: *mut ESYS_CONTEXT,
+        policySession: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        approvedPolicy: *const TPM2B_DIGEST,
+        policyRef: *const TPM2B_NONCE,
+        keySign: *const TPM2B_NAME,
+        checkTicket: *const TPMT_TK_VERIFIED,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyAuthorize_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        policySession: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        approvedPolicy: *const TPM2B_DIGEST,
+        policyRef: *const TPM2B_NONCE,
+        keySign: *const TPM2B_NAME,
+        checkTicket: *const TPMT_TK_VERIFIED,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyAuthorize_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyAuthValue(
+        esysContext: *mut ESYS_CONTEXT,
+        policySession: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyAuthValue_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        policySession: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyAuthValue_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyPassword(
+        esysContext: *mut ESYS_CONTEXT,
+        policySession: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyPassword_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        policySession: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyPassword_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyGetDigest(
+        esysContext: *mut ESYS_CONTEXT,
+        policySession: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        policyDigest: *mut *mut TPM2B_DIGEST,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyGetDigest_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        policySession: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyGetDigest_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        policyDigest: *mut *mut TPM2B_DIGEST,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyNvWritten(
+        esysContext: *mut ESYS_CONTEXT,
+        policySession: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        writtenSet: TPMI_YES_NO,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyNvWritten_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        policySession: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        writtenSet: TPMI_YES_NO,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyNvWritten_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyTemplate(
+        esysContext: *mut ESYS_CONTEXT,
+        policySession: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        templateHash: *const TPM2B_DIGEST,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyTemplate_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        policySession: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        templateHash: *const TPM2B_DIGEST,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyTemplate_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyAuthorizeNV(
+        esysContext: *mut ESYS_CONTEXT,
+        authHandle: ESYS_TR,
+        nvIndex: ESYS_TR,
+        policySession: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyAuthorizeNV_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        authHandle: ESYS_TR,
+        nvIndex: ESYS_TR,
+        policySession: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PolicyAuthorizeNV_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_CreatePrimary(
+        esysContext: *mut ESYS_CONTEXT,
+        primaryHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        inSensitive: *const TPM2B_SENSITIVE_CREATE,
+        inPublic: *const TPM2B_PUBLIC,
+        outsideInfo: *const TPM2B_DATA,
+        creationPCR: *const TPML_PCR_SELECTION,
+        objectHandle: *mut ESYS_TR,
+        outPublic: *mut *mut TPM2B_PUBLIC,
+        creationData: *mut *mut TPM2B_CREATION_DATA,
+        creationHash: *mut *mut TPM2B_DIGEST,
+        creationTicket: *mut *mut TPMT_TK_CREATION,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_CreatePrimary_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        primaryHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        inSensitive: *const TPM2B_SENSITIVE_CREATE,
+        inPublic: *const TPM2B_PUBLIC,
+        outsideInfo: *const TPM2B_DATA,
+        creationPCR: *const TPML_PCR_SELECTION,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_CreatePrimary_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        objectHandle: *mut ESYS_TR,
+        outPublic: *mut *mut TPM2B_PUBLIC,
+        creationData: *mut *mut TPM2B_CREATION_DATA,
+        creationHash: *mut *mut TPM2B_DIGEST,
+        creationTicket: *mut *mut TPMT_TK_CREATION,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_HierarchyControl(
+        esysContext: *mut ESYS_CONTEXT,
+        authHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        enable: ESYS_TR,
+        state: TPMI_YES_NO,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_HierarchyControl_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        authHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        enable: ESYS_TR,
+        state: TPMI_YES_NO,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_HierarchyControl_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_SetPrimaryPolicy(
+        esysContext: *mut ESYS_CONTEXT,
+        authHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        authPolicy: *const TPM2B_DIGEST,
+        hashAlg: TPMI_ALG_HASH,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_SetPrimaryPolicy_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        authHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        authPolicy: *const TPM2B_DIGEST,
+        hashAlg: TPMI_ALG_HASH,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_SetPrimaryPolicy_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_ChangePPS(
+        esysContext: *mut ESYS_CONTEXT,
+        authHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_ChangePPS_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        authHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_ChangePPS_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_ChangeEPS(
+        esysContext: *mut ESYS_CONTEXT,
+        authHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_ChangeEPS_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        authHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_ChangeEPS_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_Clear(
+        esysContext: *mut ESYS_CONTEXT,
+        authHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_Clear_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        authHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_Clear_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_ClearControl(
+        esysContext: *mut ESYS_CONTEXT,
+        auth: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        disable: TPMI_YES_NO,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_ClearControl_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        auth: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        disable: TPMI_YES_NO,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_ClearControl_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_HierarchyChangeAuth(
+        esysContext: *mut ESYS_CONTEXT,
+        authHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        newAuth: *const TPM2B_AUTH,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_HierarchyChangeAuth_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        authHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        newAuth: *const TPM2B_AUTH,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_HierarchyChangeAuth_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_DictionaryAttackLockReset(
+        esysContext: *mut ESYS_CONTEXT,
+        lockHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_DictionaryAttackLockReset_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        lockHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_DictionaryAttackLockReset_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_DictionaryAttackParameters(
+        esysContext: *mut ESYS_CONTEXT,
+        lockHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        newMaxTries: UINT32,
+        newRecoveryTime: UINT32,
+        lockoutRecovery: UINT32,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_DictionaryAttackParameters_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        lockHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        newMaxTries: UINT32,
+        newRecoveryTime: UINT32,
+        lockoutRecovery: UINT32,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_DictionaryAttackParameters_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PP_Commands(
+        esysContext: *mut ESYS_CONTEXT,
+        auth: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        setList: *const TPML_CC,
+        clearList: *const TPML_CC,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PP_Commands_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        auth: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        setList: *const TPML_CC,
+        clearList: *const TPML_CC,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_PP_Commands_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_SetAlgorithmSet(
+        esysContext: *mut ESYS_CONTEXT,
+        authHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        algorithmSet: UINT32,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_SetAlgorithmSet_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        authHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        algorithmSet: UINT32,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_SetAlgorithmSet_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_FieldUpgradeStart(
+        esysContext: *mut ESYS_CONTEXT,
+        authorization: ESYS_TR,
+        keyHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        fuDigest: *const TPM2B_DIGEST,
+        manifestSignature: *const TPMT_SIGNATURE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_FieldUpgradeStart_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        authorization: ESYS_TR,
+        keyHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        fuDigest: *const TPM2B_DIGEST,
+        manifestSignature: *const TPMT_SIGNATURE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_FieldUpgradeStart_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_FieldUpgradeData(
+        esysContext: *mut ESYS_CONTEXT,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        fuData: *const TPM2B_MAX_BUFFER,
+        nextDigest: *mut *mut TPMT_HA,
+        firstDigest: *mut *mut TPMT_HA,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_FieldUpgradeData_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        fuData: *const TPM2B_MAX_BUFFER,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_FieldUpgradeData_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        nextDigest: *mut *mut TPMT_HA,
+        firstDigest: *mut *mut TPMT_HA,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_FirmwareRead(
+        esysContext: *mut ESYS_CONTEXT,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        sequenceNumber: UINT32,
+        fuData: *mut *mut TPM2B_MAX_BUFFER,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_FirmwareRead_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        sequenceNumber: UINT32,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_FirmwareRead_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        fuData: *mut *mut TPM2B_MAX_BUFFER,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_ContextSave(
+        esysContext: *mut ESYS_CONTEXT,
+        saveHandle: ESYS_TR,
+        context: *mut *mut TPMS_CONTEXT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_ContextSave_Async(esysContext: *mut ESYS_CONTEXT, saveHandle: ESYS_TR) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_ContextSave_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        context: *mut *mut TPMS_CONTEXT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_ContextLoad(
+        esysContext: *mut ESYS_CONTEXT,
+        context: *const TPMS_CONTEXT,
+        loadedHandle: *mut ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_ContextLoad_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        context: *const TPMS_CONTEXT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_ContextLoad_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        loadedHandle: *mut ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_FlushContext(esysContext: *mut ESYS_CONTEXT, flushHandle: ESYS_TR) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_FlushContext_Async(esysContext: *mut ESYS_CONTEXT, flushHandle: ESYS_TR)
+        -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_FlushContext_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_EvictControl(
+        esysContext: *mut ESYS_CONTEXT,
+        auth: ESYS_TR,
+        objectHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        persistentHandle: TPMI_DH_PERSISTENT,
+        newObjectHandle: *mut ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_EvictControl_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        auth: ESYS_TR,
+        objectHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        persistentHandle: TPMI_DH_PERSISTENT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_EvictControl_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        newObjectHandle: *mut ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_ReadClock(
+        esysContext: *mut ESYS_CONTEXT,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        currentTime: *mut *mut TPMS_TIME_INFO,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_ReadClock_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_ReadClock_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        currentTime: *mut *mut TPMS_TIME_INFO,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_ClockSet(
+        esysContext: *mut ESYS_CONTEXT,
+        auth: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        newTime: UINT64,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_ClockSet_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        auth: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        newTime: UINT64,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_ClockSet_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_ClockRateAdjust(
+        esysContext: *mut ESYS_CONTEXT,
+        auth: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        rateAdjust: TPM2_CLOCK_ADJUST,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_ClockRateAdjust_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        auth: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        rateAdjust: TPM2_CLOCK_ADJUST,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_ClockRateAdjust_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_GetCapability(
+        esysContext: *mut ESYS_CONTEXT,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        capability: TPM2_CAP,
+        property: UINT32,
+        propertyCount: UINT32,
+        moreData: *mut TPMI_YES_NO,
+        capabilityData: *mut *mut TPMS_CAPABILITY_DATA,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_GetCapability_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        capability: TPM2_CAP,
+        property: UINT32,
+        propertyCount: UINT32,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_GetCapability_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        moreData: *mut TPMI_YES_NO,
+        capabilityData: *mut *mut TPMS_CAPABILITY_DATA,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_TestParms(
+        esysContext: *mut ESYS_CONTEXT,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        parameters: *const TPMT_PUBLIC_PARMS,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_TestParms_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        parameters: *const TPMT_PUBLIC_PARMS,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_TestParms_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_NV_DefineSpace(
+        esysContext: *mut ESYS_CONTEXT,
+        authHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        auth: *const TPM2B_AUTH,
+        publicInfo: *const TPM2B_NV_PUBLIC,
+        nvHandle: *mut ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_NV_DefineSpace_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        authHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        auth: *const TPM2B_AUTH,
+        publicInfo: *const TPM2B_NV_PUBLIC,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_NV_DefineSpace_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        nvHandle: *mut ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_NV_UndefineSpace(
+        esysContext: *mut ESYS_CONTEXT,
+        authHandle: ESYS_TR,
+        nvIndex: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_NV_UndefineSpace_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        authHandle: ESYS_TR,
+        nvIndex: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_NV_UndefineSpace_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_NV_UndefineSpaceSpecial(
+        esysContext: *mut ESYS_CONTEXT,
+        nvIndex: ESYS_TR,
+        platform: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_NV_UndefineSpaceSpecial_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        nvIndex: ESYS_TR,
+        platform: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_NV_UndefineSpaceSpecial_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_NV_ReadPublic(
+        esysContext: *mut ESYS_CONTEXT,
+        nvIndex: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        nvPublic: *mut *mut TPM2B_NV_PUBLIC,
+        nvName: *mut *mut TPM2B_NAME,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_NV_ReadPublic_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        nvIndex: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_NV_ReadPublic_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        nvPublic: *mut *mut TPM2B_NV_PUBLIC,
+        nvName: *mut *mut TPM2B_NAME,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_NV_Write(
+        esysContext: *mut ESYS_CONTEXT,
+        authHandle: ESYS_TR,
+        nvIndex: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        data: *const TPM2B_MAX_NV_BUFFER,
+        offset: UINT16,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_NV_Write_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        authHandle: ESYS_TR,
+        nvIndex: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        data: *const TPM2B_MAX_NV_BUFFER,
+        offset: UINT16,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_NV_Write_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_NV_Increment(
+        esysContext: *mut ESYS_CONTEXT,
+        authHandle: ESYS_TR,
+        nvIndex: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_NV_Increment_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        authHandle: ESYS_TR,
+        nvIndex: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_NV_Increment_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_NV_Extend(
+        esysContext: *mut ESYS_CONTEXT,
+        authHandle: ESYS_TR,
+        nvIndex: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        data: *const TPM2B_MAX_NV_BUFFER,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_NV_Extend_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        authHandle: ESYS_TR,
+        nvIndex: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        data: *const TPM2B_MAX_NV_BUFFER,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_NV_Extend_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_NV_SetBits(
+        esysContext: *mut ESYS_CONTEXT,
+        authHandle: ESYS_TR,
+        nvIndex: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        bits: UINT64,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_NV_SetBits_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        authHandle: ESYS_TR,
+        nvIndex: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        bits: UINT64,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_NV_SetBits_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_NV_WriteLock(
+        esysContext: *mut ESYS_CONTEXT,
+        authHandle: ESYS_TR,
+        nvIndex: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_NV_WriteLock_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        authHandle: ESYS_TR,
+        nvIndex: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_NV_WriteLock_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_NV_GlobalWriteLock(
+        esysContext: *mut ESYS_CONTEXT,
+        authHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_NV_GlobalWriteLock_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        authHandle: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_NV_GlobalWriteLock_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_NV_Read(
+        esysContext: *mut ESYS_CONTEXT,
+        authHandle: ESYS_TR,
+        nvIndex: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        size: UINT16,
+        offset: UINT16,
+        data: *mut *mut TPM2B_MAX_NV_BUFFER,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_NV_Read_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        authHandle: ESYS_TR,
+        nvIndex: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        size: UINT16,
+        offset: UINT16,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_NV_Read_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        data: *mut *mut TPM2B_MAX_NV_BUFFER,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_NV_ReadLock(
+        esysContext: *mut ESYS_CONTEXT,
+        authHandle: ESYS_TR,
+        nvIndex: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_NV_ReadLock_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        authHandle: ESYS_TR,
+        nvIndex: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_NV_ReadLock_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_NV_ChangeAuth(
+        esysContext: *mut ESYS_CONTEXT,
+        nvIndex: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        newAuth: *const TPM2B_AUTH,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_NV_ChangeAuth_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        nvIndex: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        newAuth: *const TPM2B_AUTH,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_NV_ChangeAuth_Finish(esysContext: *mut ESYS_CONTEXT) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_NV_Certify(
+        esysContext: *mut ESYS_CONTEXT,
+        signHandle: ESYS_TR,
+        authHandle: ESYS_TR,
+        nvIndex: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        qualifyingData: *const TPM2B_DATA,
+        inScheme: *const TPMT_SIG_SCHEME,
+        size: UINT16,
+        offset: UINT16,
+        certifyInfo: *mut *mut TPM2B_ATTEST,
+        signature: *mut *mut TPMT_SIGNATURE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_NV_Certify_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        signHandle: ESYS_TR,
+        authHandle: ESYS_TR,
+        nvIndex: ESYS_TR,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        qualifyingData: *const TPM2B_DATA,
+        inScheme: *const TPMT_SIG_SCHEME,
+        size: UINT16,
+        offset: UINT16,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_NV_Certify_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        certifyInfo: *mut *mut TPM2B_ATTEST,
+        signature: *mut *mut TPMT_SIGNATURE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_Vendor_TCG_Test(
+        esysContext: *mut ESYS_CONTEXT,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        inputData: *const TPM2B_DATA,
+        outputData: *mut *mut TPM2B_DATA,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_Vendor_TCG_Test_Async(
+        esysContext: *mut ESYS_CONTEXT,
+        shandle1: ESYS_TR,
+        shandle2: ESYS_TR,
+        shandle3: ESYS_TR,
+        inputData: *const TPM2B_DATA,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_Vendor_TCG_Test_Finish(
+        esysContext: *mut ESYS_CONTEXT,
+        outputData: *mut *mut TPM2B_DATA,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_Free(__ptr: *mut ::std::os::raw::c_void);
+}
+extern "C" {
+    pub fn Esys_GetSysContext(
+        esys_context: *mut ESYS_CONTEXT,
+        sys_context: *mut *mut TSS2_SYS_CONTEXT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Esys_SetCryptoCallbacks(
+        esysContext: *mut ESYS_CONTEXT,
+        callbacks: *mut ESYS_CRYPTO_CALLBACKS,
+    ) -> TSS2_RC;
+}
+pub type __gwchar_t = ::std::os::raw::c_int;
+#[repr(C)]
+#[derive(Debug, Default, Copy, Clone)]
+pub struct imaxdiv_t {
+    pub quot: ::std::os::raw::c_long,
+    pub rem: ::std::os::raw::c_long,
+}
+#[test]
+fn bindgen_test_layout_imaxdiv_t() {
+    const UNINIT: ::std::mem::MaybeUninit<imaxdiv_t> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<imaxdiv_t>(),
+        16usize,
+        "Size of imaxdiv_t"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<imaxdiv_t>(),
+        8usize,
+        "Alignment of imaxdiv_t"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).quot) as usize - ptr as usize },
+        0usize,
+        "Offset of field: imaxdiv_t::quot"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).rem) as usize - ptr as usize },
+        8usize,
+        "Offset of field: imaxdiv_t::rem"
+    );
+}
+extern "C" {
+    pub fn imaxabs(__n: intmax_t) -> intmax_t;
+}
+extern "C" {
+    pub fn imaxdiv(__numer: intmax_t, __denom: intmax_t) -> imaxdiv_t;
+}
+extern "C" {
+    pub fn strtoimax(
+        __nptr: *const ::std::os::raw::c_char,
+        __endptr: *mut *mut ::std::os::raw::c_char,
+        __base: ::std::os::raw::c_int,
+    ) -> intmax_t;
+}
+extern "C" {
+    pub fn strtoumax(
+        __nptr: *const ::std::os::raw::c_char,
+        __endptr: *mut *mut ::std::os::raw::c_char,
+        __base: ::std::os::raw::c_int,
+    ) -> uintmax_t;
+}
+extern "C" {
+    pub fn wcstoimax(
+        __nptr: *const __gwchar_t,
+        __endptr: *mut *mut __gwchar_t,
+        __base: ::std::os::raw::c_int,
+    ) -> intmax_t;
+}
+extern "C" {
+    pub fn wcstoumax(
+        __nptr: *const __gwchar_t,
+        __endptr: *mut *mut __gwchar_t,
+        __base: ::std::os::raw::c_int,
+    ) -> uintmax_t;
+}
+pub type _Float128 = u128;
+pub type _Float32 = f32;
+pub type _Float64 = f64;
+pub type _Float32x = f64;
+pub type _Float64x = u128;
+#[repr(C)]
+#[derive(Debug, Default, Copy, Clone)]
+pub struct div_t {
+    pub quot: ::std::os::raw::c_int,
+    pub rem: ::std::os::raw::c_int,
+}
+#[test]
+fn bindgen_test_layout_div_t() {
+    const UNINIT: ::std::mem::MaybeUninit<div_t> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(::std::mem::size_of::<div_t>(), 8usize, "Size of div_t");
+    assert_eq!(
+        ::std::mem::align_of::<div_t>(),
+        4usize,
+        "Alignment of div_t"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).quot) as usize - ptr as usize },
+        0usize,
+        "Offset of field: div_t::quot"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).rem) as usize - ptr as usize },
+        4usize,
+        "Offset of field: div_t::rem"
+    );
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy, Clone)]
+pub struct ldiv_t {
+    pub quot: ::std::os::raw::c_long,
+    pub rem: ::std::os::raw::c_long,
+}
+#[test]
+fn bindgen_test_layout_ldiv_t() {
+    const UNINIT: ::std::mem::MaybeUninit<ldiv_t> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(::std::mem::size_of::<ldiv_t>(), 16usize, "Size of ldiv_t");
+    assert_eq!(
+        ::std::mem::align_of::<ldiv_t>(),
+        8usize,
+        "Alignment of ldiv_t"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).quot) as usize - ptr as usize },
+        0usize,
+        "Offset of field: ldiv_t::quot"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).rem) as usize - ptr as usize },
+        8usize,
+        "Offset of field: ldiv_t::rem"
+    );
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy, Clone)]
+pub struct lldiv_t {
+    pub quot: ::std::os::raw::c_longlong,
+    pub rem: ::std::os::raw::c_longlong,
+}
+#[test]
+fn bindgen_test_layout_lldiv_t() {
+    const UNINIT: ::std::mem::MaybeUninit<lldiv_t> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(::std::mem::size_of::<lldiv_t>(), 16usize, "Size of lldiv_t");
+    assert_eq!(
+        ::std::mem::align_of::<lldiv_t>(),
+        8usize,
+        "Alignment of lldiv_t"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).quot) as usize - ptr as usize },
+        0usize,
+        "Offset of field: lldiv_t::quot"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).rem) as usize - ptr as usize },
+        8usize,
+        "Offset of field: lldiv_t::rem"
+    );
+}
+extern "C" {
+    pub fn __ctype_get_mb_cur_max() -> size_t;
+}
+extern "C" {
+    pub fn atof(__nptr: *const ::std::os::raw::c_char) -> f64;
+}
+extern "C" {
+    pub fn atoi(__nptr: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn atol(__nptr: *const ::std::os::raw::c_char) -> ::std::os::raw::c_long;
+}
+extern "C" {
+    pub fn atoll(__nptr: *const ::std::os::raw::c_char) -> ::std::os::raw::c_longlong;
+}
+extern "C" {
+    pub fn strtod(
+        __nptr: *const ::std::os::raw::c_char,
+        __endptr: *mut *mut ::std::os::raw::c_char,
+    ) -> f64;
+}
+extern "C" {
+    pub fn strtof(
+        __nptr: *const ::std::os::raw::c_char,
+        __endptr: *mut *mut ::std::os::raw::c_char,
+    ) -> f32;
+}
+extern "C" {
+    pub fn strtold(
+        __nptr: *const ::std::os::raw::c_char,
+        __endptr: *mut *mut ::std::os::raw::c_char,
+    ) -> u128;
+}
+extern "C" {
+    pub fn strtol(
+        __nptr: *const ::std::os::raw::c_char,
+        __endptr: *mut *mut ::std::os::raw::c_char,
+        __base: ::std::os::raw::c_int,
+    ) -> ::std::os::raw::c_long;
+}
+extern "C" {
+    pub fn strtoul(
+        __nptr: *const ::std::os::raw::c_char,
+        __endptr: *mut *mut ::std::os::raw::c_char,
+        __base: ::std::os::raw::c_int,
+    ) -> ::std::os::raw::c_ulong;
+}
+extern "C" {
+    pub fn strtoq(
+        __nptr: *const ::std::os::raw::c_char,
+        __endptr: *mut *mut ::std::os::raw::c_char,
+        __base: ::std::os::raw::c_int,
+    ) -> ::std::os::raw::c_longlong;
+}
+extern "C" {
+    pub fn strtouq(
+        __nptr: *const ::std::os::raw::c_char,
+        __endptr: *mut *mut ::std::os::raw::c_char,
+        __base: ::std::os::raw::c_int,
+    ) -> ::std::os::raw::c_ulonglong;
+}
+extern "C" {
+    pub fn strtoll(
+        __nptr: *const ::std::os::raw::c_char,
+        __endptr: *mut *mut ::std::os::raw::c_char,
+        __base: ::std::os::raw::c_int,
+    ) -> ::std::os::raw::c_longlong;
+}
+extern "C" {
+    pub fn strtoull(
+        __nptr: *const ::std::os::raw::c_char,
+        __endptr: *mut *mut ::std::os::raw::c_char,
+        __base: ::std::os::raw::c_int,
+    ) -> ::std::os::raw::c_ulonglong;
+}
+extern "C" {
+    pub fn l64a(__n: ::std::os::raw::c_long) -> *mut ::std::os::raw::c_char;
+}
+extern "C" {
+    pub fn a64l(__s: *const ::std::os::raw::c_char) -> ::std::os::raw::c_long;
+}
+pub type u_char = __u_char;
+pub type u_short = __u_short;
+pub type u_int = __u_int;
+pub type u_long = __u_long;
+pub type quad_t = __quad_t;
+pub type u_quad_t = __u_quad_t;
+pub type fsid_t = __fsid_t;
+pub type loff_t = __loff_t;
+pub type ino_t = __ino_t;
+pub type dev_t = __dev_t;
+pub type gid_t = __gid_t;
+pub type mode_t = __mode_t;
+pub type nlink_t = __nlink_t;
+pub type uid_t = __uid_t;
+pub type off_t = __off_t;
+pub type pid_t = __pid_t;
+pub type id_t = __id_t;
+pub type ssize_t = __ssize_t;
+pub type daddr_t = __daddr_t;
+pub type caddr_t = __caddr_t;
+pub type key_t = __key_t;
+pub type clock_t = __clock_t;
+pub type clockid_t = __clockid_t;
+pub type time_t = __time_t;
+pub type timer_t = __timer_t;
+pub type ulong = ::std::os::raw::c_ulong;
+pub type ushort = ::std::os::raw::c_ushort;
+pub type uint = ::std::os::raw::c_uint;
+pub type u_int8_t = __uint8_t;
+pub type u_int16_t = __uint16_t;
+pub type u_int32_t = __uint32_t;
+pub type u_int64_t = __uint64_t;
+pub type register_t = ::std::os::raw::c_long;
+#[repr(C)]
+#[derive(Debug, Default, Copy, Clone)]
+pub struct __sigset_t {
+    pub __val: [::std::os::raw::c_ulong; 16usize],
+}
+#[test]
+fn bindgen_test_layout___sigset_t() {
+    const UNINIT: ::std::mem::MaybeUninit<__sigset_t> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<__sigset_t>(),
+        128usize,
+        "Size of __sigset_t"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<__sigset_t>(),
+        8usize,
+        "Alignment of __sigset_t"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__val) as usize - ptr as usize },
+        0usize,
+        "Offset of field: __sigset_t::__val"
+    );
+}
+pub type sigset_t = __sigset_t;
+#[repr(C)]
+#[derive(Debug, Default, Copy, Clone)]
+pub struct timeval {
+    pub tv_sec: __time_t,
+    pub tv_usec: __suseconds_t,
+}
+#[test]
+fn bindgen_test_layout_timeval() {
+    const UNINIT: ::std::mem::MaybeUninit<timeval> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(::std::mem::size_of::<timeval>(), 16usize, "Size of timeval");
+    assert_eq!(
+        ::std::mem::align_of::<timeval>(),
+        8usize,
+        "Alignment of timeval"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).tv_sec) as usize - ptr as usize },
+        0usize,
+        "Offset of field: timeval::tv_sec"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).tv_usec) as usize - ptr as usize },
+        8usize,
+        "Offset of field: timeval::tv_usec"
+    );
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy, Clone)]
+pub struct timespec {
+    pub tv_sec: __time_t,
+    pub tv_nsec: __syscall_slong_t,
+}
+#[test]
+fn bindgen_test_layout_timespec() {
+    const UNINIT: ::std::mem::MaybeUninit<timespec> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<timespec>(),
+        16usize,
+        "Size of timespec"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<timespec>(),
+        8usize,
+        "Alignment of timespec"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).tv_sec) as usize - ptr as usize },
+        0usize,
+        "Offset of field: timespec::tv_sec"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).tv_nsec) as usize - ptr as usize },
+        8usize,
+        "Offset of field: timespec::tv_nsec"
+    );
+}
+pub type suseconds_t = __suseconds_t;
+pub type __fd_mask = ::std::os::raw::c_long;
+#[repr(C)]
+#[derive(Debug, Default, Copy, Clone)]
+pub struct fd_set {
+    pub __fds_bits: [__fd_mask; 16usize],
+}
+#[test]
+fn bindgen_test_layout_fd_set() {
+    const UNINIT: ::std::mem::MaybeUninit<fd_set> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(::std::mem::size_of::<fd_set>(), 128usize, "Size of fd_set");
+    assert_eq!(
+        ::std::mem::align_of::<fd_set>(),
+        8usize,
+        "Alignment of fd_set"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__fds_bits) as usize - ptr as usize },
+        0usize,
+        "Offset of field: fd_set::__fds_bits"
+    );
+}
+pub type fd_mask = __fd_mask;
+extern "C" {
+    pub fn select(
+        __nfds: ::std::os::raw::c_int,
+        __readfds: *mut fd_set,
+        __writefds: *mut fd_set,
+        __exceptfds: *mut fd_set,
+        __timeout: *mut timeval,
+    ) -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn pselect(
+        __nfds: ::std::os::raw::c_int,
+        __readfds: *mut fd_set,
+        __writefds: *mut fd_set,
+        __exceptfds: *mut fd_set,
+        __timeout: *const timespec,
+        __sigmask: *const __sigset_t,
+    ) -> ::std::os::raw::c_int;
+}
+pub type blksize_t = __blksize_t;
+pub type blkcnt_t = __blkcnt_t;
+pub type fsblkcnt_t = __fsblkcnt_t;
+pub type fsfilcnt_t = __fsfilcnt_t;
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union __atomic_wide_counter {
+    pub __value64: ::std::os::raw::c_ulonglong,
+    pub __value32: __atomic_wide_counter__bindgen_ty_1,
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy, Clone)]
+pub struct __atomic_wide_counter__bindgen_ty_1 {
+    pub __low: ::std::os::raw::c_uint,
+    pub __high: ::std::os::raw::c_uint,
+}
+#[test]
+fn bindgen_test_layout___atomic_wide_counter__bindgen_ty_1() {
+    const UNINIT: ::std::mem::MaybeUninit<__atomic_wide_counter__bindgen_ty_1> =
+        ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<__atomic_wide_counter__bindgen_ty_1>(),
+        8usize,
+        "Size of __atomic_wide_counter__bindgen_ty_1"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<__atomic_wide_counter__bindgen_ty_1>(),
+        4usize,
+        "Alignment of __atomic_wide_counter__bindgen_ty_1"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__low) as usize - ptr as usize },
+        0usize,
+        "Offset of field: __atomic_wide_counter__bindgen_ty_1::__low"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__high) as usize - ptr as usize },
+        4usize,
+        "Offset of field: __atomic_wide_counter__bindgen_ty_1::__high"
+    );
+}
+#[test]
+fn bindgen_test_layout___atomic_wide_counter() {
+    const UNINIT: ::std::mem::MaybeUninit<__atomic_wide_counter> =
+        ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<__atomic_wide_counter>(),
+        8usize,
+        "Size of __atomic_wide_counter"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<__atomic_wide_counter>(),
+        8usize,
+        "Alignment of __atomic_wide_counter"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__value64) as usize - ptr as usize },
+        0usize,
+        "Offset of field: __atomic_wide_counter::__value64"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__value32) as usize - ptr as usize },
+        0usize,
+        "Offset of field: __atomic_wide_counter::__value32"
+    );
+}
+impl Default for __atomic_wide_counter {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct __pthread_internal_list {
+    pub __prev: *mut __pthread_internal_list,
+    pub __next: *mut __pthread_internal_list,
+}
+#[test]
+fn bindgen_test_layout___pthread_internal_list() {
+    const UNINIT: ::std::mem::MaybeUninit<__pthread_internal_list> =
+        ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<__pthread_internal_list>(),
+        16usize,
+        "Size of __pthread_internal_list"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<__pthread_internal_list>(),
+        8usize,
+        "Alignment of __pthread_internal_list"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__prev) as usize - ptr as usize },
+        0usize,
+        "Offset of field: __pthread_internal_list::__prev"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__next) as usize - ptr as usize },
+        8usize,
+        "Offset of field: __pthread_internal_list::__next"
+    );
+}
+impl Default for __pthread_internal_list {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+pub type __pthread_list_t = __pthread_internal_list;
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct __pthread_internal_slist {
+    pub __next: *mut __pthread_internal_slist,
+}
+#[test]
+fn bindgen_test_layout___pthread_internal_slist() {
+    const UNINIT: ::std::mem::MaybeUninit<__pthread_internal_slist> =
+        ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<__pthread_internal_slist>(),
+        8usize,
+        "Size of __pthread_internal_slist"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<__pthread_internal_slist>(),
+        8usize,
+        "Alignment of __pthread_internal_slist"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__next) as usize - ptr as usize },
+        0usize,
+        "Offset of field: __pthread_internal_slist::__next"
+    );
+}
+impl Default for __pthread_internal_slist {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+pub type __pthread_slist_t = __pthread_internal_slist;
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct __pthread_mutex_s {
+    pub __lock: ::std::os::raw::c_int,
+    pub __count: ::std::os::raw::c_uint,
+    pub __owner: ::std::os::raw::c_int,
+    pub __nusers: ::std::os::raw::c_uint,
+    pub __kind: ::std::os::raw::c_int,
+    pub __spins: ::std::os::raw::c_int,
+    pub __list: __pthread_list_t,
+}
+#[test]
+fn bindgen_test_layout___pthread_mutex_s() {
+    const UNINIT: ::std::mem::MaybeUninit<__pthread_mutex_s> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<__pthread_mutex_s>(),
+        40usize,
+        "Size of __pthread_mutex_s"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<__pthread_mutex_s>(),
+        8usize,
+        "Alignment of __pthread_mutex_s"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__lock) as usize - ptr as usize },
+        0usize,
+        "Offset of field: __pthread_mutex_s::__lock"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__count) as usize - ptr as usize },
+        4usize,
+        "Offset of field: __pthread_mutex_s::__count"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__owner) as usize - ptr as usize },
+        8usize,
+        "Offset of field: __pthread_mutex_s::__owner"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__nusers) as usize - ptr as usize },
+        12usize,
+        "Offset of field: __pthread_mutex_s::__nusers"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__kind) as usize - ptr as usize },
+        16usize,
+        "Offset of field: __pthread_mutex_s::__kind"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__spins) as usize - ptr as usize },
+        20usize,
+        "Offset of field: __pthread_mutex_s::__spins"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__list) as usize - ptr as usize },
+        24usize,
+        "Offset of field: __pthread_mutex_s::__list"
+    );
+}
+impl Default for __pthread_mutex_s {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy, Clone)]
+pub struct __pthread_rwlock_arch_t {
+    pub __readers: ::std::os::raw::c_uint,
+    pub __writers: ::std::os::raw::c_uint,
+    pub __wrphase_futex: ::std::os::raw::c_uint,
+    pub __writers_futex: ::std::os::raw::c_uint,
+    pub __pad3: ::std::os::raw::c_uint,
+    pub __pad4: ::std::os::raw::c_uint,
+    pub __cur_writer: ::std::os::raw::c_int,
+    pub __shared: ::std::os::raw::c_int,
+    pub __pad1: ::std::os::raw::c_ulong,
+    pub __pad2: ::std::os::raw::c_ulong,
+    pub __flags: ::std::os::raw::c_uint,
+}
+#[test]
+fn bindgen_test_layout___pthread_rwlock_arch_t() {
+    const UNINIT: ::std::mem::MaybeUninit<__pthread_rwlock_arch_t> =
+        ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<__pthread_rwlock_arch_t>(),
+        56usize,
+        "Size of __pthread_rwlock_arch_t"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<__pthread_rwlock_arch_t>(),
+        8usize,
+        "Alignment of __pthread_rwlock_arch_t"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__readers) as usize - ptr as usize },
+        0usize,
+        "Offset of field: __pthread_rwlock_arch_t::__readers"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__writers) as usize - ptr as usize },
+        4usize,
+        "Offset of field: __pthread_rwlock_arch_t::__writers"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__wrphase_futex) as usize - ptr as usize },
+        8usize,
+        "Offset of field: __pthread_rwlock_arch_t::__wrphase_futex"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__writers_futex) as usize - ptr as usize },
+        12usize,
+        "Offset of field: __pthread_rwlock_arch_t::__writers_futex"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__pad3) as usize - ptr as usize },
+        16usize,
+        "Offset of field: __pthread_rwlock_arch_t::__pad3"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__pad4) as usize - ptr as usize },
+        20usize,
+        "Offset of field: __pthread_rwlock_arch_t::__pad4"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__cur_writer) as usize - ptr as usize },
+        24usize,
+        "Offset of field: __pthread_rwlock_arch_t::__cur_writer"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__shared) as usize - ptr as usize },
+        28usize,
+        "Offset of field: __pthread_rwlock_arch_t::__shared"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__pad1) as usize - ptr as usize },
+        32usize,
+        "Offset of field: __pthread_rwlock_arch_t::__pad1"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__pad2) as usize - ptr as usize },
+        40usize,
+        "Offset of field: __pthread_rwlock_arch_t::__pad2"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__flags) as usize - ptr as usize },
+        48usize,
+        "Offset of field: __pthread_rwlock_arch_t::__flags"
+    );
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct __pthread_cond_s {
+    pub __wseq: __atomic_wide_counter,
+    pub __g1_start: __atomic_wide_counter,
+    pub __g_size: [::std::os::raw::c_uint; 2usize],
+    pub __g1_orig_size: ::std::os::raw::c_uint,
+    pub __wrefs: ::std::os::raw::c_uint,
+    pub __g_signals: [::std::os::raw::c_uint; 2usize],
+}
+#[test]
+fn bindgen_test_layout___pthread_cond_s() {
+    const UNINIT: ::std::mem::MaybeUninit<__pthread_cond_s> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<__pthread_cond_s>(),
+        40usize,
+        "Size of __pthread_cond_s"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<__pthread_cond_s>(),
+        8usize,
+        "Alignment of __pthread_cond_s"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__wseq) as usize - ptr as usize },
+        0usize,
+        "Offset of field: __pthread_cond_s::__wseq"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__g1_start) as usize - ptr as usize },
+        8usize,
+        "Offset of field: __pthread_cond_s::__g1_start"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__g_size) as usize - ptr as usize },
+        16usize,
+        "Offset of field: __pthread_cond_s::__g_size"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__g1_orig_size) as usize - ptr as usize },
+        24usize,
+        "Offset of field: __pthread_cond_s::__g1_orig_size"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__wrefs) as usize - ptr as usize },
+        28usize,
+        "Offset of field: __pthread_cond_s::__wrefs"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__g_signals) as usize - ptr as usize },
+        32usize,
+        "Offset of field: __pthread_cond_s::__g_signals"
+    );
+}
+impl Default for __pthread_cond_s {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+pub type __tss_t = ::std::os::raw::c_uint;
+pub type __thrd_t = ::std::os::raw::c_ulong;
+#[repr(C)]
+#[derive(Debug, Default, Copy, Clone)]
+pub struct __once_flag {
+    pub __data: ::std::os::raw::c_int,
+}
+#[test]
+fn bindgen_test_layout___once_flag() {
+    const UNINIT: ::std::mem::MaybeUninit<__once_flag> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<__once_flag>(),
+        4usize,
+        "Size of __once_flag"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<__once_flag>(),
+        4usize,
+        "Alignment of __once_flag"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__data) as usize - ptr as usize },
+        0usize,
+        "Offset of field: __once_flag::__data"
+    );
+}
+pub type pthread_t = ::std::os::raw::c_ulong;
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union pthread_mutexattr_t {
+    pub __size: [::std::os::raw::c_char; 4usize],
+    pub __align: ::std::os::raw::c_int,
+}
+#[test]
+fn bindgen_test_layout_pthread_mutexattr_t() {
+    const UNINIT: ::std::mem::MaybeUninit<pthread_mutexattr_t> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<pthread_mutexattr_t>(),
+        4usize,
+        "Size of pthread_mutexattr_t"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<pthread_mutexattr_t>(),
+        4usize,
+        "Alignment of pthread_mutexattr_t"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__size) as usize - ptr as usize },
+        0usize,
+        "Offset of field: pthread_mutexattr_t::__size"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__align) as usize - ptr as usize },
+        0usize,
+        "Offset of field: pthread_mutexattr_t::__align"
+    );
+}
+impl Default for pthread_mutexattr_t {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union pthread_condattr_t {
+    pub __size: [::std::os::raw::c_char; 4usize],
+    pub __align: ::std::os::raw::c_int,
+}
+#[test]
+fn bindgen_test_layout_pthread_condattr_t() {
+    const UNINIT: ::std::mem::MaybeUninit<pthread_condattr_t> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<pthread_condattr_t>(),
+        4usize,
+        "Size of pthread_condattr_t"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<pthread_condattr_t>(),
+        4usize,
+        "Alignment of pthread_condattr_t"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__size) as usize - ptr as usize },
+        0usize,
+        "Offset of field: pthread_condattr_t::__size"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__align) as usize - ptr as usize },
+        0usize,
+        "Offset of field: pthread_condattr_t::__align"
+    );
+}
+impl Default for pthread_condattr_t {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+pub type pthread_key_t = ::std::os::raw::c_uint;
+pub type pthread_once_t = ::std::os::raw::c_int;
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union pthread_attr_t {
+    pub __size: [::std::os::raw::c_char; 56usize],
+    pub __align: ::std::os::raw::c_long,
+}
+#[test]
+fn bindgen_test_layout_pthread_attr_t() {
+    const UNINIT: ::std::mem::MaybeUninit<pthread_attr_t> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<pthread_attr_t>(),
+        56usize,
+        "Size of pthread_attr_t"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<pthread_attr_t>(),
+        8usize,
+        "Alignment of pthread_attr_t"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__size) as usize - ptr as usize },
+        0usize,
+        "Offset of field: pthread_attr_t::__size"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__align) as usize - ptr as usize },
+        0usize,
+        "Offset of field: pthread_attr_t::__align"
+    );
+}
+impl Default for pthread_attr_t {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union pthread_mutex_t {
+    pub __data: __pthread_mutex_s,
+    pub __size: [::std::os::raw::c_char; 40usize],
+    pub __align: ::std::os::raw::c_long,
+}
+#[test]
+fn bindgen_test_layout_pthread_mutex_t() {
+    const UNINIT: ::std::mem::MaybeUninit<pthread_mutex_t> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<pthread_mutex_t>(),
+        40usize,
+        "Size of pthread_mutex_t"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<pthread_mutex_t>(),
+        8usize,
+        "Alignment of pthread_mutex_t"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__data) as usize - ptr as usize },
+        0usize,
+        "Offset of field: pthread_mutex_t::__data"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__size) as usize - ptr as usize },
+        0usize,
+        "Offset of field: pthread_mutex_t::__size"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__align) as usize - ptr as usize },
+        0usize,
+        "Offset of field: pthread_mutex_t::__align"
+    );
+}
+impl Default for pthread_mutex_t {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union pthread_cond_t {
+    pub __data: __pthread_cond_s,
+    pub __size: [::std::os::raw::c_char; 48usize],
+    pub __align: ::std::os::raw::c_longlong,
+}
+#[test]
+fn bindgen_test_layout_pthread_cond_t() {
+    const UNINIT: ::std::mem::MaybeUninit<pthread_cond_t> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<pthread_cond_t>(),
+        48usize,
+        "Size of pthread_cond_t"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<pthread_cond_t>(),
+        8usize,
+        "Alignment of pthread_cond_t"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__data) as usize - ptr as usize },
+        0usize,
+        "Offset of field: pthread_cond_t::__data"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__size) as usize - ptr as usize },
+        0usize,
+        "Offset of field: pthread_cond_t::__size"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__align) as usize - ptr as usize },
+        0usize,
+        "Offset of field: pthread_cond_t::__align"
+    );
+}
+impl Default for pthread_cond_t {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union pthread_rwlock_t {
+    pub __data: __pthread_rwlock_arch_t,
+    pub __size: [::std::os::raw::c_char; 56usize],
+    pub __align: ::std::os::raw::c_long,
+}
+#[test]
+fn bindgen_test_layout_pthread_rwlock_t() {
+    const UNINIT: ::std::mem::MaybeUninit<pthread_rwlock_t> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<pthread_rwlock_t>(),
+        56usize,
+        "Size of pthread_rwlock_t"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<pthread_rwlock_t>(),
+        8usize,
+        "Alignment of pthread_rwlock_t"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__data) as usize - ptr as usize },
+        0usize,
+        "Offset of field: pthread_rwlock_t::__data"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__size) as usize - ptr as usize },
+        0usize,
+        "Offset of field: pthread_rwlock_t::__size"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__align) as usize - ptr as usize },
+        0usize,
+        "Offset of field: pthread_rwlock_t::__align"
+    );
+}
+impl Default for pthread_rwlock_t {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union pthread_rwlockattr_t {
+    pub __size: [::std::os::raw::c_char; 8usize],
+    pub __align: ::std::os::raw::c_long,
+}
+#[test]
+fn bindgen_test_layout_pthread_rwlockattr_t() {
+    const UNINIT: ::std::mem::MaybeUninit<pthread_rwlockattr_t> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<pthread_rwlockattr_t>(),
+        8usize,
+        "Size of pthread_rwlockattr_t"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<pthread_rwlockattr_t>(),
+        8usize,
+        "Alignment of pthread_rwlockattr_t"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__size) as usize - ptr as usize },
+        0usize,
+        "Offset of field: pthread_rwlockattr_t::__size"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__align) as usize - ptr as usize },
+        0usize,
+        "Offset of field: pthread_rwlockattr_t::__align"
+    );
+}
+impl Default for pthread_rwlockattr_t {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+pub type pthread_spinlock_t = ::std::os::raw::c_int;
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union pthread_barrier_t {
+    pub __size: [::std::os::raw::c_char; 32usize],
+    pub __align: ::std::os::raw::c_long,
+}
+#[test]
+fn bindgen_test_layout_pthread_barrier_t() {
+    const UNINIT: ::std::mem::MaybeUninit<pthread_barrier_t> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<pthread_barrier_t>(),
+        32usize,
+        "Size of pthread_barrier_t"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<pthread_barrier_t>(),
+        8usize,
+        "Alignment of pthread_barrier_t"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__size) as usize - ptr as usize },
+        0usize,
+        "Offset of field: pthread_barrier_t::__size"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__align) as usize - ptr as usize },
+        0usize,
+        "Offset of field: pthread_barrier_t::__align"
+    );
+}
+impl Default for pthread_barrier_t {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub union pthread_barrierattr_t {
+    pub __size: [::std::os::raw::c_char; 4usize],
+    pub __align: ::std::os::raw::c_int,
+}
+#[test]
+fn bindgen_test_layout_pthread_barrierattr_t() {
+    const UNINIT: ::std::mem::MaybeUninit<pthread_barrierattr_t> =
+        ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<pthread_barrierattr_t>(),
+        4usize,
+        "Size of pthread_barrierattr_t"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<pthread_barrierattr_t>(),
+        4usize,
+        "Alignment of pthread_barrierattr_t"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__size) as usize - ptr as usize },
+        0usize,
+        "Offset of field: pthread_barrierattr_t::__size"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__align) as usize - ptr as usize },
+        0usize,
+        "Offset of field: pthread_barrierattr_t::__align"
+    );
+}
+impl Default for pthread_barrierattr_t {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+extern "C" {
+    pub fn random() -> ::std::os::raw::c_long;
+}
+extern "C" {
+    pub fn srandom(__seed: ::std::os::raw::c_uint);
+}
+extern "C" {
+    pub fn initstate(
+        __seed: ::std::os::raw::c_uint,
+        __statebuf: *mut ::std::os::raw::c_char,
+        __statelen: size_t,
+    ) -> *mut ::std::os::raw::c_char;
+}
+extern "C" {
+    pub fn setstate(__statebuf: *mut ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char;
+}
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct random_data {
+    pub fptr: *mut i32,
+    pub rptr: *mut i32,
+    pub state: *mut i32,
+    pub rand_type: ::std::os::raw::c_int,
+    pub rand_deg: ::std::os::raw::c_int,
+    pub rand_sep: ::std::os::raw::c_int,
+    pub end_ptr: *mut i32,
+}
+#[test]
+fn bindgen_test_layout_random_data() {
+    const UNINIT: ::std::mem::MaybeUninit<random_data> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<random_data>(),
+        48usize,
+        "Size of random_data"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<random_data>(),
+        8usize,
+        "Alignment of random_data"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).fptr) as usize - ptr as usize },
+        0usize,
+        "Offset of field: random_data::fptr"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).rptr) as usize - ptr as usize },
+        8usize,
+        "Offset of field: random_data::rptr"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).state) as usize - ptr as usize },
+        16usize,
+        "Offset of field: random_data::state"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).rand_type) as usize - ptr as usize },
+        24usize,
+        "Offset of field: random_data::rand_type"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).rand_deg) as usize - ptr as usize },
+        28usize,
+        "Offset of field: random_data::rand_deg"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).rand_sep) as usize - ptr as usize },
+        32usize,
+        "Offset of field: random_data::rand_sep"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).end_ptr) as usize - ptr as usize },
+        40usize,
+        "Offset of field: random_data::end_ptr"
+    );
+}
+impl Default for random_data {
+    fn default() -> Self {
+        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
+        unsafe {
+            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
+            s.assume_init()
+        }
+    }
+}
+extern "C" {
+    pub fn random_r(__buf: *mut random_data, __result: *mut i32) -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn srandom_r(
+        __seed: ::std::os::raw::c_uint,
+        __buf: *mut random_data,
+    ) -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn initstate_r(
+        __seed: ::std::os::raw::c_uint,
+        __statebuf: *mut ::std::os::raw::c_char,
+        __statelen: size_t,
+        __buf: *mut random_data,
+    ) -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn setstate_r(
+        __statebuf: *mut ::std::os::raw::c_char,
+        __buf: *mut random_data,
+    ) -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn rand() -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn srand(__seed: ::std::os::raw::c_uint);
+}
+extern "C" {
+    pub fn rand_r(__seed: *mut ::std::os::raw::c_uint) -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn drand48() -> f64;
+}
+extern "C" {
+    pub fn erand48(__xsubi: *mut ::std::os::raw::c_ushort) -> f64;
+}
+extern "C" {
+    pub fn lrand48() -> ::std::os::raw::c_long;
+}
+extern "C" {
+    pub fn nrand48(__xsubi: *mut ::std::os::raw::c_ushort) -> ::std::os::raw::c_long;
+}
+extern "C" {
+    pub fn mrand48() -> ::std::os::raw::c_long;
+}
+extern "C" {
+    pub fn jrand48(__xsubi: *mut ::std::os::raw::c_ushort) -> ::std::os::raw::c_long;
+}
+extern "C" {
+    pub fn srand48(__seedval: ::std::os::raw::c_long);
+}
+extern "C" {
+    pub fn seed48(__seed16v: *mut ::std::os::raw::c_ushort) -> *mut ::std::os::raw::c_ushort;
+}
+extern "C" {
+    pub fn lcong48(__param: *mut ::std::os::raw::c_ushort);
+}
+#[repr(C)]
+#[derive(Debug, Default, Copy, Clone)]
+pub struct drand48_data {
+    pub __x: [::std::os::raw::c_ushort; 3usize],
+    pub __old_x: [::std::os::raw::c_ushort; 3usize],
+    pub __c: ::std::os::raw::c_ushort,
+    pub __init: ::std::os::raw::c_ushort,
+    pub __a: ::std::os::raw::c_ulonglong,
+}
+#[test]
+fn bindgen_test_layout_drand48_data() {
+    const UNINIT: ::std::mem::MaybeUninit<drand48_data> = ::std::mem::MaybeUninit::uninit();
+    let ptr = UNINIT.as_ptr();
+    assert_eq!(
+        ::std::mem::size_of::<drand48_data>(),
+        24usize,
+        "Size of drand48_data"
+    );
+    assert_eq!(
+        ::std::mem::align_of::<drand48_data>(),
+        8usize,
+        "Alignment of drand48_data"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__x) as usize - ptr as usize },
+        0usize,
+        "Offset of field: drand48_data::__x"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__old_x) as usize - ptr as usize },
+        6usize,
+        "Offset of field: drand48_data::__old_x"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__c) as usize - ptr as usize },
+        12usize,
+        "Offset of field: drand48_data::__c"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__init) as usize - ptr as usize },
+        14usize,
+        "Offset of field: drand48_data::__init"
+    );
+    assert_eq!(
+        unsafe { ::std::ptr::addr_of!((*ptr).__a) as usize - ptr as usize },
+        16usize,
+        "Offset of field: drand48_data::__a"
+    );
+}
+extern "C" {
+    pub fn drand48_r(__buffer: *mut drand48_data, __result: *mut f64) -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn erand48_r(
+        __xsubi: *mut ::std::os::raw::c_ushort,
+        __buffer: *mut drand48_data,
+        __result: *mut f64,
+    ) -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn lrand48_r(
+        __buffer: *mut drand48_data,
+        __result: *mut ::std::os::raw::c_long,
+    ) -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn nrand48_r(
+        __xsubi: *mut ::std::os::raw::c_ushort,
+        __buffer: *mut drand48_data,
+        __result: *mut ::std::os::raw::c_long,
+    ) -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn mrand48_r(
+        __buffer: *mut drand48_data,
+        __result: *mut ::std::os::raw::c_long,
+    ) -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn jrand48_r(
+        __xsubi: *mut ::std::os::raw::c_ushort,
+        __buffer: *mut drand48_data,
+        __result: *mut ::std::os::raw::c_long,
+    ) -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn srand48_r(
+        __seedval: ::std::os::raw::c_long,
+        __buffer: *mut drand48_data,
+    ) -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn seed48_r(
+        __seed16v: *mut ::std::os::raw::c_ushort,
+        __buffer: *mut drand48_data,
+    ) -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn lcong48_r(
+        __param: *mut ::std::os::raw::c_ushort,
+        __buffer: *mut drand48_data,
+    ) -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn arc4random() -> __uint32_t;
+}
+extern "C" {
+    pub fn arc4random_buf(__buf: *mut ::std::os::raw::c_void, __size: size_t);
+}
+extern "C" {
+    pub fn arc4random_uniform(__upper_bound: __uint32_t) -> __uint32_t;
+}
+extern "C" {
+    pub fn malloc(__size: ::std::os::raw::c_ulong) -> *mut ::std::os::raw::c_void;
+}
+extern "C" {
+    pub fn calloc(
+        __nmemb: ::std::os::raw::c_ulong,
+        __size: ::std::os::raw::c_ulong,
+    ) -> *mut ::std::os::raw::c_void;
+}
+extern "C" {
+    pub fn realloc(
+        __ptr: *mut ::std::os::raw::c_void,
+        __size: ::std::os::raw::c_ulong,
+    ) -> *mut ::std::os::raw::c_void;
+}
+extern "C" {
+    pub fn free(__ptr: *mut ::std::os::raw::c_void);
+}
+extern "C" {
+    pub fn reallocarray(
+        __ptr: *mut ::std::os::raw::c_void,
+        __nmemb: size_t,
+        __size: size_t,
+    ) -> *mut ::std::os::raw::c_void;
+}
+extern "C" {
+    pub fn alloca(__size: ::std::os::raw::c_ulong) -> *mut ::std::os::raw::c_void;
+}
+extern "C" {
+    pub fn valloc(__size: size_t) -> *mut ::std::os::raw::c_void;
+}
+extern "C" {
+    pub fn posix_memalign(
+        __memptr: *mut *mut ::std::os::raw::c_void,
+        __alignment: size_t,
+        __size: size_t,
+    ) -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn aligned_alloc(
+        __alignment: ::std::os::raw::c_ulong,
+        __size: ::std::os::raw::c_ulong,
+    ) -> *mut ::std::os::raw::c_void;
+}
+extern "C" {
+    pub fn abort() -> !;
+}
+extern "C" {
+    pub fn atexit(__func: ::std::option::Option<unsafe extern "C" fn()>) -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn at_quick_exit(
+        __func: ::std::option::Option<unsafe extern "C" fn()>,
+    ) -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn on_exit(
+        __func: ::std::option::Option<
+            unsafe extern "C" fn(
+                __status: ::std::os::raw::c_int,
+                __arg: *mut ::std::os::raw::c_void,
+            ),
+        >,
+        __arg: *mut ::std::os::raw::c_void,
+    ) -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn exit(__status: ::std::os::raw::c_int) -> !;
+}
+extern "C" {
+    pub fn quick_exit(__status: ::std::os::raw::c_int) -> !;
+}
+extern "C" {
+    pub fn _Exit(__status: ::std::os::raw::c_int) -> !;
+}
+extern "C" {
+    pub fn getenv(__name: *const ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char;
+}
+extern "C" {
+    pub fn putenv(__string: *mut ::std::os::raw::c_char) -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn setenv(
+        __name: *const ::std::os::raw::c_char,
+        __value: *const ::std::os::raw::c_char,
+        __replace: ::std::os::raw::c_int,
+    ) -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn unsetenv(__name: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn clearenv() -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn mktemp(__template: *mut ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char;
+}
+extern "C" {
+    pub fn mkstemp(__template: *mut ::std::os::raw::c_char) -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn mkstemps(
+        __template: *mut ::std::os::raw::c_char,
+        __suffixlen: ::std::os::raw::c_int,
+    ) -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn mkdtemp(__template: *mut ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char;
+}
+extern "C" {
+    pub fn system(__command: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn realpath(
+        __name: *const ::std::os::raw::c_char,
+        __resolved: *mut ::std::os::raw::c_char,
+    ) -> *mut ::std::os::raw::c_char;
+}
+pub type __compar_fn_t = ::std::option::Option<
+    unsafe extern "C" fn(
+        arg1: *const ::std::os::raw::c_void,
+        arg2: *const ::std::os::raw::c_void,
+    ) -> ::std::os::raw::c_int,
+>;
+extern "C" {
+    pub fn bsearch(
+        __key: *const ::std::os::raw::c_void,
+        __base: *const ::std::os::raw::c_void,
+        __nmemb: size_t,
+        __size: size_t,
+        __compar: __compar_fn_t,
+    ) -> *mut ::std::os::raw::c_void;
+}
+extern "C" {
+    pub fn qsort(
+        __base: *mut ::std::os::raw::c_void,
+        __nmemb: size_t,
+        __size: size_t,
+        __compar: __compar_fn_t,
+    );
+}
+extern "C" {
+    pub fn abs(__x: ::std::os::raw::c_int) -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn labs(__x: ::std::os::raw::c_long) -> ::std::os::raw::c_long;
+}
+extern "C" {
+    pub fn llabs(__x: ::std::os::raw::c_longlong) -> ::std::os::raw::c_longlong;
+}
+extern "C" {
+    pub fn div(__numer: ::std::os::raw::c_int, __denom: ::std::os::raw::c_int) -> div_t;
+}
+extern "C" {
+    pub fn ldiv(__numer: ::std::os::raw::c_long, __denom: ::std::os::raw::c_long) -> ldiv_t;
+}
+extern "C" {
+    pub fn lldiv(
+        __numer: ::std::os::raw::c_longlong,
+        __denom: ::std::os::raw::c_longlong,
+    ) -> lldiv_t;
+}
+extern "C" {
+    pub fn ecvt(
+        __value: f64,
+        __ndigit: ::std::os::raw::c_int,
+        __decpt: *mut ::std::os::raw::c_int,
+        __sign: *mut ::std::os::raw::c_int,
+    ) -> *mut ::std::os::raw::c_char;
+}
+extern "C" {
+    pub fn fcvt(
+        __value: f64,
+        __ndigit: ::std::os::raw::c_int,
+        __decpt: *mut ::std::os::raw::c_int,
+        __sign: *mut ::std::os::raw::c_int,
+    ) -> *mut ::std::os::raw::c_char;
+}
+extern "C" {
+    pub fn gcvt(
+        __value: f64,
+        __ndigit: ::std::os::raw::c_int,
+        __buf: *mut ::std::os::raw::c_char,
+    ) -> *mut ::std::os::raw::c_char;
+}
+extern "C" {
+    pub fn qecvt(
+        __value: u128,
+        __ndigit: ::std::os::raw::c_int,
+        __decpt: *mut ::std::os::raw::c_int,
+        __sign: *mut ::std::os::raw::c_int,
+    ) -> *mut ::std::os::raw::c_char;
+}
+extern "C" {
+    pub fn qfcvt(
+        __value: u128,
+        __ndigit: ::std::os::raw::c_int,
+        __decpt: *mut ::std::os::raw::c_int,
+        __sign: *mut ::std::os::raw::c_int,
+    ) -> *mut ::std::os::raw::c_char;
+}
+extern "C" {
+    pub fn qgcvt(
+        __value: u128,
+        __ndigit: ::std::os::raw::c_int,
+        __buf: *mut ::std::os::raw::c_char,
+    ) -> *mut ::std::os::raw::c_char;
+}
+extern "C" {
+    pub fn ecvt_r(
+        __value: f64,
+        __ndigit: ::std::os::raw::c_int,
+        __decpt: *mut ::std::os::raw::c_int,
+        __sign: *mut ::std::os::raw::c_int,
+        __buf: *mut ::std::os::raw::c_char,
+        __len: size_t,
+    ) -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn fcvt_r(
+        __value: f64,
+        __ndigit: ::std::os::raw::c_int,
+        __decpt: *mut ::std::os::raw::c_int,
+        __sign: *mut ::std::os::raw::c_int,
+        __buf: *mut ::std::os::raw::c_char,
+        __len: size_t,
+    ) -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn qecvt_r(
+        __value: u128,
+        __ndigit: ::std::os::raw::c_int,
+        __decpt: *mut ::std::os::raw::c_int,
+        __sign: *mut ::std::os::raw::c_int,
+        __buf: *mut ::std::os::raw::c_char,
+        __len: size_t,
+    ) -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn qfcvt_r(
+        __value: u128,
+        __ndigit: ::std::os::raw::c_int,
+        __decpt: *mut ::std::os::raw::c_int,
+        __sign: *mut ::std::os::raw::c_int,
+        __buf: *mut ::std::os::raw::c_char,
+        __len: size_t,
+    ) -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn mblen(__s: *const ::std::os::raw::c_char, __n: size_t) -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn mbtowc(
+        __pwc: *mut wchar_t,
+        __s: *const ::std::os::raw::c_char,
+        __n: size_t,
+    ) -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn wctomb(__s: *mut ::std::os::raw::c_char, __wchar: wchar_t) -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn mbstowcs(
+        __pwcs: *mut wchar_t,
+        __s: *const ::std::os::raw::c_char,
+        __n: size_t,
+    ) -> size_t;
+}
+extern "C" {
+    pub fn wcstombs(
+        __s: *mut ::std::os::raw::c_char,
+        __pwcs: *const wchar_t,
+        __n: size_t,
+    ) -> size_t;
+}
+extern "C" {
+    pub fn rpmatch(__response: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn getsubopt(
+        __optionp: *mut *mut ::std::os::raw::c_char,
+        __tokens: *const *mut ::std::os::raw::c_char,
+        __valuep: *mut *mut ::std::os::raw::c_char,
+    ) -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn getloadavg(__loadavg: *mut f64, __nelem: ::std::os::raw::c_int)
+        -> ::std::os::raw::c_int;
+}
+extern "C" {
+    pub fn Tss2_TctiLdr_Finalize(context: *mut *mut TSS2_TCTI_CONTEXT);
+}
+extern "C" {
+    pub fn Tss2_TctiLdr_Initialize_Ex(
+        name: *const ::std::os::raw::c_char,
+        conf: *const ::std::os::raw::c_char,
+        context: *mut *mut TSS2_TCTI_CONTEXT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_TctiLdr_Initialize(
+        nameConf: *const ::std::os::raw::c_char,
+        context: *mut *mut TSS2_TCTI_CONTEXT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_TctiLdr_GetInfo(
+        name: *const ::std::os::raw::c_char,
+        info: *mut *mut TSS2_TCTI_INFO,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_TctiLdr_FreeInfo(info: *mut *mut TSS2_TCTI_INFO);
+}
+extern "C" {
+    pub fn Tss2_Tcti_TctiLdr_Init(
+        tctiContext: *mut TSS2_TCTI_CONTEXT,
+        size: *mut size_t,
+        nameConf: *const ::std::os::raw::c_char,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_INT8_Marshal(
+        src: INT8,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_INT8_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut INT8,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_INT16_Marshal(
+        src: INT16,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_INT16_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut INT16,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_INT32_Marshal(
+        src: INT32,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_INT32_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut INT32,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_INT64_Marshal(
+        src: INT64,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_INT64_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut INT64,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_UINT8_Marshal(
+        src: UINT8,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_UINT8_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut UINT8,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_UINT16_Marshal(
+        src: UINT16,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_UINT16_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut UINT16,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_UINT32_Marshal(
+        src: UINT32,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_UINT32_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut UINT32,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_UINT64_Marshal(
+        src: UINT64,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_UINT64_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut UINT64,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2_CC_Marshal(
+        src: TPM2_CC,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2_CC_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPM2_CC,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2_ST_Marshal(
+        src: TPM2_ST,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2_ST_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPM2_ST,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMA_ALGORITHM_Marshal(
+        src: TPMA_ALGORITHM,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMA_ALGORITHM_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMA_ALGORITHM,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMA_CC_Marshal(
+        src: TPMA_CC,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMA_CC_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMA_CC,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMA_LOCALITY_Marshal(
+        src: TPMA_LOCALITY,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMA_LOCALITY_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMA_LOCALITY,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMA_NV_Marshal(
+        src: TPMA_NV,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMA_NV_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMA_NV,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMA_OBJECT_Marshal(
+        src: TPMA_OBJECT,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMA_OBJECT_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMA_OBJECT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMA_PERMANENT_Marshal(
+        src: TPMA_PERMANENT,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMA_PERMANENT_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMA_PERMANENT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMA_SESSION_Marshal(
+        src: TPMA_SESSION,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMA_SESSION_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMA_SESSION,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMA_STARTUP_CLEAR_Marshal(
+        src: TPMA_STARTUP_CLEAR,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMA_STARTUP_CLEAR_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMA_STARTUP_CLEAR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_DIGEST_Marshal(
+        src: *const TPM2B_DIGEST,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_DIGEST_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPM2B_DIGEST,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_ATTEST_Marshal(
+        src: *const TPM2B_ATTEST,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_ATTEST_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPM2B_ATTEST,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_NAME_Marshal(
+        src: *const TPM2B_NAME,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_NAME_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPM2B_NAME,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_MAX_NV_BUFFER_Marshal(
+        src: *const TPM2B_MAX_NV_BUFFER,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_MAX_NV_BUFFER_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPM2B_MAX_NV_BUFFER,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_SENSITIVE_DATA_Marshal(
+        src: *const TPM2B_SENSITIVE_DATA,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_SENSITIVE_DATA_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPM2B_SENSITIVE_DATA,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_ECC_PARAMETER_Marshal(
+        src: *const TPM2B_ECC_PARAMETER,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_ECC_PARAMETER_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPM2B_ECC_PARAMETER,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_PUBLIC_KEY_RSA_Marshal(
+        src: *const TPM2B_PUBLIC_KEY_RSA,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_PUBLIC_KEY_RSA_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPM2B_PUBLIC_KEY_RSA,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_PRIVATE_KEY_RSA_Marshal(
+        src: *const TPM2B_PRIVATE_KEY_RSA,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_PRIVATE_KEY_RSA_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPM2B_PRIVATE_KEY_RSA,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_PRIVATE_Marshal(
+        src: *const TPM2B_PRIVATE,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_PRIVATE_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPM2B_PRIVATE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_CONTEXT_SENSITIVE_Marshal(
+        src: *const TPM2B_CONTEXT_SENSITIVE,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_CONTEXT_SENSITIVE_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPM2B_CONTEXT_SENSITIVE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_CONTEXT_DATA_Marshal(
+        src: *const TPM2B_CONTEXT_DATA,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_CONTEXT_DATA_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPM2B_CONTEXT_DATA,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_DATA_Marshal(
+        src: *const TPM2B_DATA,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_DATA_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPM2B_DATA,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_SYM_KEY_Marshal(
+        src: *const TPM2B_SYM_KEY,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_SYM_KEY_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPM2B_SYM_KEY,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_ECC_POINT_Marshal(
+        src: *const TPM2B_ECC_POINT,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_ECC_POINT_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPM2B_ECC_POINT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_NV_PUBLIC_Marshal(
+        src: *const TPM2B_NV_PUBLIC,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_NV_PUBLIC_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPM2B_NV_PUBLIC,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_SENSITIVE_Marshal(
+        src: *const TPM2B_SENSITIVE,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_SENSITIVE_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPM2B_SENSITIVE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_SENSITIVE_CREATE_Marshal(
+        src: *const TPM2B_SENSITIVE_CREATE,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_SENSITIVE_CREATE_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPM2B_SENSITIVE_CREATE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_CREATION_DATA_Marshal(
+        src: *const TPM2B_CREATION_DATA,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_CREATION_DATA_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPM2B_CREATION_DATA,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_PUBLIC_Marshal(
+        src: *const TPM2B_PUBLIC,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_PUBLIC_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPM2B_PUBLIC,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_ENCRYPTED_SECRET_Marshal(
+        src: *const TPM2B_ENCRYPTED_SECRET,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_ENCRYPTED_SECRET_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPM2B_ENCRYPTED_SECRET,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_ID_OBJECT_Marshal(
+        src: *const TPM2B_ID_OBJECT,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_ID_OBJECT_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPM2B_ID_OBJECT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_IV_Marshal(
+        src: *const TPM2B_IV,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_IV_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPM2B_IV,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_AUTH_Marshal(
+        src: *const TPM2B_AUTH,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_AUTH_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPM2B_AUTH,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_EVENT_Marshal(
+        src: *const TPM2B_EVENT,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_EVENT_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPM2B_EVENT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_MAX_BUFFER_Marshal(
+        src: *const TPM2B_MAX_BUFFER,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_MAX_BUFFER_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPM2B_MAX_BUFFER,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_NONCE_Marshal(
+        src: *const TPM2B_NONCE,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_NONCE_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPM2B_NONCE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_OPERAND_Marshal(
+        src: *const TPM2B_OPERAND,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_OPERAND_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPM2B_OPERAND,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_TIMEOUT_Marshal(
+        src: *const TPM2B_TIMEOUT,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_TIMEOUT_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPM2B_TIMEOUT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_TEMPLATE_Marshal(
+        src: *const TPM2B_TEMPLATE,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_TEMPLATE_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPM2B_TEMPLATE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_CONTEXT_Marshal(
+        src: *const TPMS_CONTEXT,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_CONTEXT_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMS_CONTEXT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_TIME_INFO_Marshal(
+        src: *const TPMS_TIME_INFO,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_TIME_INFO_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMS_TIME_INFO,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_ECC_POINT_Marshal(
+        src: *const TPMS_ECC_POINT,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_ECC_POINT_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMS_ECC_POINT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_NV_PUBLIC_Marshal(
+        src: *const TPMS_NV_PUBLIC,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_NV_PUBLIC_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMS_NV_PUBLIC,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_ALG_PROPERTY_Marshal(
+        src: *const TPMS_ALG_PROPERTY,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_ALG_PROPERTY_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMS_ALG_PROPERTY,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_TAGGED_PROPERTY_Marshal(
+        src: *const TPMS_TAGGED_PROPERTY,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_TAGGED_PROPERTY_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMS_TAGGED_PROPERTY,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_TAGGED_POLICY_Marshal(
+        src: *const TPMS_TAGGED_POLICY,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_TAGGED_POLICY_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMS_TAGGED_POLICY,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_CLOCK_INFO_Marshal(
+        src: *const TPMS_CLOCK_INFO,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_CLOCK_INFO_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMS_CLOCK_INFO,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_TIME_ATTEST_INFO_Marshal(
+        src: *const TPMS_TIME_ATTEST_INFO,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_TIME_ATTEST_INFO_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMS_TIME_ATTEST_INFO,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_CERTIFY_INFO_Marshal(
+        src: *const TPMS_CERTIFY_INFO,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_CERTIFY_INFO_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMS_CERTIFY_INFO,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_COMMAND_AUDIT_INFO_Marshal(
+        src: *const TPMS_COMMAND_AUDIT_INFO,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_COMMAND_AUDIT_INFO_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMS_COMMAND_AUDIT_INFO,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_SESSION_AUDIT_INFO_Marshal(
+        src: *const TPMS_SESSION_AUDIT_INFO,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_SESSION_AUDIT_INFO_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMS_SESSION_AUDIT_INFO,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_CREATION_INFO_Marshal(
+        src: *const TPMS_CREATION_INFO,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_CREATION_INFO_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMS_CREATION_INFO,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_NV_CERTIFY_INFO_Marshal(
+        src: *const TPMS_NV_CERTIFY_INFO,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_NV_CERTIFY_INFO_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMS_NV_CERTIFY_INFO,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_AUTH_COMMAND_Marshal(
+        src: *const TPMS_AUTH_COMMAND,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_AUTH_COMMAND_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMS_AUTH_COMMAND,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_AUTH_RESPONSE_Marshal(
+        src: *const TPMS_AUTH_RESPONSE,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_AUTH_RESPONSE_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMS_AUTH_RESPONSE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_SENSITIVE_CREATE_Marshal(
+        src: *const TPMS_SENSITIVE_CREATE,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_SENSITIVE_CREATE_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMS_SENSITIVE_CREATE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_SCHEME_HASH_Marshal(
+        src: *const TPMS_SCHEME_HASH,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_SCHEME_HASH_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMS_SCHEME_HASH,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_SCHEME_ECDAA_Marshal(
+        src: *const TPMS_SCHEME_ECDAA,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_SCHEME_ECDAA_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMS_SCHEME_ECDAA,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_SCHEME_XOR_Marshal(
+        src: *const TPMS_SCHEME_XOR,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_SCHEME_XOR_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMS_SCHEME_XOR,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_SIGNATURE_RSA_Marshal(
+        src: *const TPMS_SIGNATURE_RSA,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_SIGNATURE_RSA_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMS_SIGNATURE_RSA,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_SIGNATURE_ECC_Marshal(
+        src: *const TPMS_SIGNATURE_ECC,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_SIGNATURE_ECC_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMS_SIGNATURE_ECC,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_NV_PIN_COUNTER_PARAMETERS_Marshal(
+        src: *const TPMS_NV_PIN_COUNTER_PARAMETERS,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_NV_PIN_COUNTER_PARAMETERS_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMS_NV_PIN_COUNTER_PARAMETERS,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_CONTEXT_DATA_Marshal(
+        src: *const TPMS_CONTEXT_DATA,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_CONTEXT_DATA_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMS_CONTEXT_DATA,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_PCR_SELECT_Marshal(
+        src: *const TPMS_PCR_SELECT,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_PCR_SELECT_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMS_PCR_SELECT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_PCR_SELECTION_Marshal(
+        src: *const TPMS_PCR_SELECTION,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_PCR_SELECTION_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMS_PCR_SELECTION,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_TAGGED_PCR_SELECT_Marshal(
+        src: *const TPMS_TAGGED_PCR_SELECT,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_TAGGED_PCR_SELECT_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMS_TAGGED_PCR_SELECT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_QUOTE_INFO_Marshal(
+        src: *const TPMS_QUOTE_INFO,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_QUOTE_INFO_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMS_QUOTE_INFO,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_CREATION_DATA_Marshal(
+        src: *const TPMS_CREATION_DATA,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_CREATION_DATA_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMS_CREATION_DATA,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_ECC_PARMS_Marshal(
+        src: *const TPMS_ECC_PARMS,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_ECC_PARMS_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMS_ECC_PARMS,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_ATTEST_Marshal(
+        src: *const TPMS_ATTEST,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_ATTEST_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMS_ATTEST,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_ALGORITHM_DETAIL_ECC_Marshal(
+        src: *const TPMS_ALGORITHM_DETAIL_ECC,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_ALGORITHM_DETAIL_ECC_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMS_ALGORITHM_DETAIL_ECC,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_CAPABILITY_DATA_Marshal(
+        src: *const TPMS_CAPABILITY_DATA,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_CAPABILITY_DATA_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMS_CAPABILITY_DATA,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_KEYEDHASH_PARMS_Marshal(
+        src: *const TPMS_KEYEDHASH_PARMS,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_KEYEDHASH_PARMS_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMS_KEYEDHASH_PARMS,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_RSA_PARMS_Marshal(
+        src: *const TPMS_RSA_PARMS,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_RSA_PARMS_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMS_RSA_PARMS,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_SYMCIPHER_PARMS_Marshal(
+        src: *const TPMS_SYMCIPHER_PARMS,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_SYMCIPHER_PARMS_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMS_SYMCIPHER_PARMS,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_AC_OUTPUT_Marshal(
+        src: *const TPMS_AC_OUTPUT,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_AC_OUTPUT_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMS_AC_OUTPUT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_ID_OBJECT_Marshal(
+        src: *const TPMS_ID_OBJECT,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_ID_OBJECT_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMS_ID_OBJECT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_ACT_DATA_Marshal(
+        src: *const TPMS_ACT_DATA,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_ACT_DATA_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMS_ACT_DATA,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_NV_DIGEST_CERTIFY_INFO_Marshal(
+        src: *const TPMS_NV_DIGEST_CERTIFY_INFO,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_NV_DIGEST_CERTIFY_INFO_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMS_NV_DIGEST_CERTIFY_INFO,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPML_CC_Marshal(
+        src: *const TPML_CC,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPML_CC_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPML_CC,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPML_CCA_Marshal(
+        src: *const TPML_CCA,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPML_CCA_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPML_CCA,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPML_ALG_Marshal(
+        src: *const TPML_ALG,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPML_ALG_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPML_ALG,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPML_HANDLE_Marshal(
+        src: *const TPML_HANDLE,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPML_HANDLE_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPML_HANDLE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPML_DIGEST_Marshal(
+        src: *const TPML_DIGEST,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPML_DIGEST_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPML_DIGEST,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPML_DIGEST_VALUES_Marshal(
+        src: *const TPML_DIGEST_VALUES,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPML_DIGEST_VALUES_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPML_DIGEST_VALUES,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPML_PCR_SELECTION_Marshal(
+        src: *const TPML_PCR_SELECTION,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPML_PCR_SELECTION_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPML_PCR_SELECTION,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPML_ALG_PROPERTY_Marshal(
+        src: *const TPML_ALG_PROPERTY,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPML_ALG_PROPERTY_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPML_ALG_PROPERTY,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPML_ECC_CURVE_Marshal(
+        src: *const TPML_ECC_CURVE,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPML_ECC_CURVE_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPML_ECC_CURVE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPML_TAGGED_PCR_PROPERTY_Marshal(
+        src: *const TPML_TAGGED_PCR_PROPERTY,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPML_TAGGED_PCR_PROPERTY_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPML_TAGGED_PCR_PROPERTY,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPML_TAGGED_TPM_PROPERTY_Marshal(
+        src: *const TPML_TAGGED_TPM_PROPERTY,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPML_TAGGED_TPM_PROPERTY_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPML_TAGGED_TPM_PROPERTY,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPML_AC_CAPABILITIES_Marshal(
+        src: *const TPML_AC_CAPABILITIES,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPML_AC_CAPABILITIES_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPML_AC_CAPABILITIES,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPML_TAGGED_POLICY_Marshal(
+        src: *const TPML_TAGGED_POLICY,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPML_TAGGED_POLICY_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPML_TAGGED_POLICY,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPML_ACT_DATA_Marshal(
+        src: *const TPML_ACT_DATA,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPML_ACT_DATA_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPML_ACT_DATA,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMU_HA_Marshal(
+        src: *const TPMU_HA,
+        selector_value: u32,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMU_HA_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        selector_value: u32,
+        dest: *mut TPMU_HA,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMU_CAPABILITIES_Marshal(
+        src: *const TPMU_CAPABILITIES,
+        selector_value: u32,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMU_CAPABILITIES_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        selector_value: u32,
+        dest: *mut TPMU_CAPABILITIES,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMU_ATTEST_Marshal(
+        src: *const TPMU_ATTEST,
+        selector_value: u32,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMU_ATTEST_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        selector_value: u32,
+        dest: *mut TPMU_ATTEST,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMU_SYM_KEY_BITS_Marshal(
+        src: *const TPMU_SYM_KEY_BITS,
+        selector_value: u32,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMU_SYM_KEY_BITS_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        selector_value: u32,
+        dest: *mut TPMU_SYM_KEY_BITS,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMU_SYM_MODE_Marshal(
+        src: *const TPMU_SYM_MODE,
+        selector_value: u32,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMU_SYM_MODE_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        selector_value: u32,
+        dest: *mut TPMU_SYM_MODE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMU_SIG_SCHEME_Marshal(
+        src: *const TPMU_SIG_SCHEME,
+        selector_value: u32,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMU_SIG_SCHEME_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        selector_value: u32,
+        dest: *mut TPMU_SIG_SCHEME,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMU_KDF_SCHEME_Marshal(
+        src: *const TPMU_KDF_SCHEME,
+        selector_value: u32,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMU_KDF_SCHEME_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        selector_value: u32,
+        dest: *mut TPMU_KDF_SCHEME,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMU_ASYM_SCHEME_Marshal(
+        src: *const TPMU_ASYM_SCHEME,
+        selector_value: u32,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMU_ASYM_SCHEME_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        selector_value: u32,
+        dest: *mut TPMU_ASYM_SCHEME,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMU_SCHEME_KEYEDHASH_Marshal(
+        src: *const TPMU_SCHEME_KEYEDHASH,
+        selector_value: u32,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMU_SCHEME_KEYEDHASH_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        selector_value: u32,
+        dest: *mut TPMU_SCHEME_KEYEDHASH,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMU_SIGNATURE_Marshal(
+        src: *const TPMU_SIGNATURE,
+        selector_value: u32,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMU_SIGNATURE_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        selector_value: u32,
+        dest: *mut TPMU_SIGNATURE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMU_SENSITIVE_COMPOSITE_Marshal(
+        src: *const TPMU_SENSITIVE_COMPOSITE,
+        selector_value: u32,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMU_SENSITIVE_COMPOSITE_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        selector_value: u32,
+        dest: *mut TPMU_SENSITIVE_COMPOSITE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMU_ENCRYPTED_SECRET_Marshal(
+        src: *const TPMU_ENCRYPTED_SECRET,
+        selector_value: u32,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMU_ENCRYPTED_SECRET_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        selector_value: u32,
+        dest: *mut TPMU_ENCRYPTED_SECRET,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMU_PUBLIC_PARMS_Marshal(
+        src: *const TPMU_PUBLIC_PARMS,
+        selector_value: u32,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMU_PUBLIC_PARMS_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        selector_value: u32,
+        dest: *mut TPMU_PUBLIC_PARMS,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMU_PUBLIC_ID_Marshal(
+        src: *const TPMU_PUBLIC_ID,
+        selector_value: u32,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMU_PUBLIC_ID_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        selector_value: u32,
+        dest: *mut TPMU_PUBLIC_ID,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMU_NAME_Marshal(
+        src: *const TPMU_NAME,
+        selector_value: u32,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMU_NAME_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        selector_value: u32,
+        dest: *mut TPMU_NAME,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMT_HA_Marshal(
+        src: *const TPMT_HA,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMT_HA_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMT_HA,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMT_SYM_DEF_Marshal(
+        src: *const TPMT_SYM_DEF,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMT_SYM_DEF_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMT_SYM_DEF,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMT_SYM_DEF_OBJECT_Marshal(
+        src: *const TPMT_SYM_DEF_OBJECT,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMT_SYM_DEF_OBJECT_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMT_SYM_DEF_OBJECT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMT_KEYEDHASH_SCHEME_Marshal(
+        src: *const TPMT_KEYEDHASH_SCHEME,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMT_KEYEDHASH_SCHEME_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMT_KEYEDHASH_SCHEME,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMT_SIG_SCHEME_Marshal(
+        src: *const TPMT_SIG_SCHEME,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMT_SIG_SCHEME_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMT_SIG_SCHEME,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMT_KDF_SCHEME_Marshal(
+        src: *const TPMT_KDF_SCHEME,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMT_KDF_SCHEME_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMT_KDF_SCHEME,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMT_ASYM_SCHEME_Marshal(
+        src: *const TPMT_ASYM_SCHEME,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMT_ASYM_SCHEME_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMT_ASYM_SCHEME,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMT_RSA_SCHEME_Marshal(
+        src: *const TPMT_RSA_SCHEME,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMT_RSA_SCHEME_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMT_RSA_SCHEME,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMT_RSA_DECRYPT_Marshal(
+        src: *const TPMT_RSA_DECRYPT,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMT_RSA_DECRYPT_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMT_RSA_DECRYPT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMT_ECC_SCHEME_Marshal(
+        src: *const TPMT_ECC_SCHEME,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMT_ECC_SCHEME_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMT_ECC_SCHEME,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMT_SIGNATURE_Marshal(
+        src: *const TPMT_SIGNATURE,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMT_SIGNATURE_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMT_SIGNATURE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMT_SENSITIVE_Marshal(
+        src: *const TPMT_SENSITIVE,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMT_SENSITIVE_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMT_SENSITIVE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMT_PUBLIC_Marshal(
+        src: *const TPMT_PUBLIC,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMT_PUBLIC_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMT_PUBLIC,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMT_PUBLIC_PARMS_Marshal(
+        src: *const TPMT_PUBLIC_PARMS,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMT_PUBLIC_PARMS_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMT_PUBLIC_PARMS,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMT_TK_CREATION_Marshal(
+        src: *const TPMT_TK_CREATION,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMT_TK_CREATION_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMT_TK_CREATION,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMT_TK_VERIFIED_Marshal(
+        src: *const TPMT_TK_VERIFIED,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMT_TK_VERIFIED_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMT_TK_VERIFIED,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMT_TK_AUTH_Marshal(
+        src: *const TPMT_TK_AUTH,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMT_TK_AUTH_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMT_TK_AUTH,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMT_TK_HASHCHECK_Marshal(
+        src: *const TPMT_TK_HASHCHECK,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMT_TK_HASHCHECK_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPMT_TK_HASHCHECK,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2_HANDLE_Marshal(
+        in_: TPM2_HANDLE,
+        buffer: *mut u8,
+        size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2_HANDLE_Unmarshal(
+        buffer: *const u8,
+        size: size_t,
+        offset: *mut size_t,
+        out: *mut TPM2_HANDLE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMI_ALG_HASH_Marshal(
+        in_: TPMI_ALG_HASH,
+        buffer: *mut u8,
+        size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMI_ALG_HASH_Unmarshal(
+        buffer: *const u8,
+        size: size_t,
+        offset: *mut size_t,
+        out: *mut TPMI_ALG_HASH,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_BYTE_Marshal(
+        in_: BYTE,
+        buffer: *mut u8,
+        size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_BYTE_Unmarshal(
+        buffer: *const u8,
+        size: size_t,
+        offset: *mut size_t,
+        out: *mut BYTE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2_SE_Marshal(
+        in_: TPM2_SE,
+        buffer: *mut u8,
+        size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2_SE_Unmarshal(
+        buffer: *const u8,
+        size: size_t,
+        offset: *mut size_t,
+        out: *mut TPM2_SE,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2_NT_Marshal(
+        in_: TPM2_NT,
+        buffer: *mut u8,
+        size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2_NT_Unmarshal(
+        buffer: *const u8,
+        size: size_t,
+        offset: *mut size_t,
+        out: *mut TPM2_NT,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_EMPTY_Marshal(
+        in_: *const TPMS_EMPTY,
+        buffer: *mut u8,
+        size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPMS_EMPTY_Unmarshal(
+        buffer: *const u8,
+        size: size_t,
+        offset: *mut size_t,
+        out: *mut TPMS_EMPTY,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_MAX_CAP_BUFFER_Marshal(
+        src: *const TPM2B_MAX_CAP_BUFFER,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPM2B_MAX_CAP_BUFFER_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPM2B_MAX_CAP_BUFFER,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPML_INTEL_PTT_PROPERTY_Marshal(
+        src: *const TPML_INTEL_PTT_PROPERTY,
+        buffer: *mut u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+    ) -> TSS2_RC;
+}
+extern "C" {
+    pub fn Tss2_MU_TPML_INTEL_PTT_PROPERTY_Unmarshal(
+        buffer: *const u8,
+        buffer_size: size_t,
+        offset: *mut size_t,
+        dest: *mut TPML_INTEL_PTT_PROPERTY,
+    ) -> TSS2_RC;
+}
Index: parsec-1.4.1/vendor/tss-esapi-sys/src/lib.rs
===================================================================
--- parsec-1.4.1.orig/vendor/tss-esapi-sys/src/lib.rs
+++ parsec-1.4.1/vendor/tss-esapi-sys/src/lib.rs
@@ -61,6 +61,16 @@ include!(concat!(
     "/src/bindings/x86_64-unknown-darwin.rs"
 ));
 
+#[cfg(all(
+    not(feature = "generate-bindings"),
+    target_arch = "riscv64",
+    target_os = "linux"
+))]
+include!(concat!(
+    env!("CARGO_MANIFEST_DIR"),
+    "/src/bindings/riscv64-unknown-linux-gnu.rs"
+));
+
 // If the "generate-bindings" feature is on, use the generated bindings.
 #[cfg(feature = "generate-bindings")]
 include!(concat!(env!("OUT_DIR"), "/tss_esapi_bindings.rs"));
openSUSE Build Service is sponsored by