# 0 "../harfbuzz-6.0.0/src/hb-aat-layout.cc"
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/build//"
# 0 "<built-in>"
#define __STDC__ 1
# 0 "<built-in>"
#define __cplusplus 201103L
# 0 "<built-in>"
#define __STDC_UTF_16__ 1
# 0 "<built-in>"
#define __STDC_UTF_32__ 1
# 0 "<built-in>"
#define __STDC_HOSTED__ 1
# 0 "<built-in>"
#define __GNUC__ 13
# 0 "<built-in>"
#define __GNUC_MINOR__ 0
# 0 "<built-in>"
#define __GNUC_PATCHLEVEL__ 1
# 0 "<built-in>"
#define __VERSION__ "13.0.1 20230203 (experimental)"
# 0 "<built-in>"
#define __ATOMIC_RELAXED 0
# 0 "<built-in>"
#define __ATOMIC_SEQ_CST 5
# 0 "<built-in>"
#define __ATOMIC_ACQUIRE 2
# 0 "<built-in>"
#define __ATOMIC_RELEASE 3
# 0 "<built-in>"
#define __ATOMIC_ACQ_REL 4
# 0 "<built-in>"
#define __ATOMIC_CONSUME 1
# 0 "<built-in>"
#define __pic__ 2
# 0 "<built-in>"
#define __PIC__ 2
# 0 "<built-in>"
#define __OPTIMIZE__ 1
# 0 "<built-in>"
#define __FINITE_MATH_ONLY__ 0
# 0 "<built-in>"
#define _LP64 1
# 0 "<built-in>"
#define __LP64__ 1
# 0 "<built-in>"
#define __SIZEOF_INT__ 4
# 0 "<built-in>"
#define __SIZEOF_LONG__ 8
# 0 "<built-in>"
#define __SIZEOF_LONG_LONG__ 8
# 0 "<built-in>"
#define __SIZEOF_SHORT__ 2
# 0 "<built-in>"
#define __SIZEOF_FLOAT__ 4
# 0 "<built-in>"
#define __SIZEOF_DOUBLE__ 8
# 0 "<built-in>"
#define __SIZEOF_LONG_DOUBLE__ 16
# 0 "<built-in>"
#define __SIZEOF_SIZE_T__ 8
# 0 "<built-in>"
#define __CHAR_BIT__ 8
# 0 "<built-in>"
#define __BIGGEST_ALIGNMENT__ 16
# 0 "<built-in>"
#define __ORDER_LITTLE_ENDIAN__ 1234
# 0 "<built-in>"
#define __ORDER_BIG_ENDIAN__ 4321
# 0 "<built-in>"
#define __ORDER_PDP_ENDIAN__ 3412
# 0 "<built-in>"
#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__
# 0 "<built-in>"
#define __FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__
# 0 "<built-in>"
#define __SIZEOF_POINTER__ 8
# 0 "<built-in>"
#define __GNUC_EXECUTION_CHARSET_NAME "UTF-8"
# 0 "<built-in>"
#define __GNUC_WIDE_EXECUTION_CHARSET_NAME "UTF-32LE"
# 0 "<built-in>"
#define __GNUG__ 13
# 0 "<built-in>"
#define __SIZE_TYPE__ long unsigned int
# 0 "<built-in>"
#define __PTRDIFF_TYPE__ long int
# 0 "<built-in>"
#define __WCHAR_TYPE__ unsigned int
# 0 "<built-in>"
#define __WINT_TYPE__ unsigned int
# 0 "<built-in>"
#define __INTMAX_TYPE__ long int
# 0 "<built-in>"
#define __UINTMAX_TYPE__ long unsigned int
# 0 "<built-in>"
#define __CHAR16_TYPE__ short unsigned int
# 0 "<built-in>"
#define __CHAR32_TYPE__ unsigned int
# 0 "<built-in>"
#define __SIG_ATOMIC_TYPE__ int
# 0 "<built-in>"
#define __INT8_TYPE__ signed char
# 0 "<built-in>"
#define __INT16_TYPE__ short int
# 0 "<built-in>"
#define __INT32_TYPE__ int
# 0 "<built-in>"
#define __INT64_TYPE__ long int
# 0 "<built-in>"
#define __UINT8_TYPE__ unsigned char
# 0 "<built-in>"
#define __UINT16_TYPE__ short unsigned int
# 0 "<built-in>"
#define __UINT32_TYPE__ unsigned int
# 0 "<built-in>"
#define __UINT64_TYPE__ long unsigned int
# 0 "<built-in>"
#define __INT_LEAST8_TYPE__ signed char
# 0 "<built-in>"
#define __INT_LEAST16_TYPE__ short int
# 0 "<built-in>"
#define __INT_LEAST32_TYPE__ int
# 0 "<built-in>"
#define __INT_LEAST64_TYPE__ long int
# 0 "<built-in>"
#define __UINT_LEAST8_TYPE__ unsigned char
# 0 "<built-in>"
#define __UINT_LEAST16_TYPE__ short unsigned int
# 0 "<built-in>"
#define __UINT_LEAST32_TYPE__ unsigned int
# 0 "<built-in>"
#define __UINT_LEAST64_TYPE__ long unsigned int
# 0 "<built-in>"
#define __INT_FAST8_TYPE__ signed char
# 0 "<built-in>"
#define __INT_FAST16_TYPE__ int
# 0 "<built-in>"
#define __INT_FAST32_TYPE__ int
# 0 "<built-in>"
#define __INT_FAST64_TYPE__ long int
# 0 "<built-in>"
#define __UINT_FAST8_TYPE__ unsigned char
# 0 "<built-in>"
#define __UINT_FAST16_TYPE__ unsigned int
# 0 "<built-in>"
#define __UINT_FAST32_TYPE__ unsigned int
# 0 "<built-in>"
#define __UINT_FAST64_TYPE__ long unsigned int
# 0 "<built-in>"
#define __INTPTR_TYPE__ long int
# 0 "<built-in>"
#define __UINTPTR_TYPE__ long unsigned int
# 0 "<built-in>"
#define __GXX_WEAK__ 1
# 0 "<built-in>"
#define __DEPRECATED 1
# 0 "<built-in>"
#define __GXX_EXPERIMENTAL_CXX0X__ 1
# 0 "<built-in>"
#define __cpp_binary_literals 201304L
# 0 "<built-in>"
#define __cpp_hex_float 201603L
# 0 "<built-in>"
#define __cpp_runtime_arrays 198712L
# 0 "<built-in>"
#define __cpp_unicode_characters 200704L
# 0 "<built-in>"
#define __cpp_raw_strings 200710L
# 0 "<built-in>"
#define __cpp_unicode_literals 200710L
# 0 "<built-in>"
#define __cpp_user_defined_literals 200809L
# 0 "<built-in>"
#define __cpp_lambdas 200907L
# 0 "<built-in>"
#define __cpp_constexpr 200704L
# 0 "<built-in>"
#define __cpp_range_based_for 200907L
# 0 "<built-in>"
#define __cpp_static_assert 200410L
# 0 "<built-in>"
#define __cpp_decltype 200707L
# 0 "<built-in>"
#define __cpp_attributes 200809L
# 0 "<built-in>"
#define __cpp_rvalue_reference 200610L
# 0 "<built-in>"
#define __cpp_rvalue_references 200610L
# 0 "<built-in>"
#define __cpp_variadic_templates 200704L
# 0 "<built-in>"
#define __cpp_initializer_lists 200806L
# 0 "<built-in>"
#define __cpp_delegating_constructors 200604L
# 0 "<built-in>"
#define __cpp_nsdmi 200809L
# 0 "<built-in>"
#define __cpp_inheriting_constructors 201511L
# 0 "<built-in>"
#define __cpp_ref_qualifiers 200710L
# 0 "<built-in>"
#define __cpp_alias_templates 200704L
# 0 "<built-in>"
#define __STDCPP_THREADS__ 1
# 0 "<built-in>"
#define __GXX_ABI_VERSION 1018
# 0 "<built-in>"
#define __SCHAR_MAX__ 0x7f
# 0 "<built-in>"
#define __SHRT_MAX__ 0x7fff
# 0 "<built-in>"
#define __INT_MAX__ 0x7fffffff
# 0 "<built-in>"
#define __LONG_MAX__ 0x7fffffffffffffffL
# 0 "<built-in>"
#define __LONG_LONG_MAX__ 0x7fffffffffffffffLL
# 0 "<built-in>"
#define __WCHAR_MAX__ 0xffffffffU
# 0 "<built-in>"
#define __WCHAR_MIN__ 0U
# 0 "<built-in>"
#define __WINT_MAX__ 0xffffffffU
# 0 "<built-in>"
#define __WINT_MIN__ 0U
# 0 "<built-in>"
#define __PTRDIFF_MAX__ 0x7fffffffffffffffL
# 0 "<built-in>"
#define __SIZE_MAX__ 0xffffffffffffffffUL
# 0 "<built-in>"
#define __SCHAR_WIDTH__ 8
# 0 "<built-in>"
#define __SHRT_WIDTH__ 16
# 0 "<built-in>"
#define __INT_WIDTH__ 32
# 0 "<built-in>"
#define __LONG_WIDTH__ 64
# 0 "<built-in>"
#define __LONG_LONG_WIDTH__ 64
# 0 "<built-in>"
#define __WCHAR_WIDTH__ 32
# 0 "<built-in>"
#define __WINT_WIDTH__ 32
# 0 "<built-in>"
#define __PTRDIFF_WIDTH__ 64
# 0 "<built-in>"
#define __SIZE_WIDTH__ 64
# 0 "<built-in>"
#define __INTMAX_MAX__ 0x7fffffffffffffffL
# 0 "<built-in>"
#define __INTMAX_C(c) c ## L
# 0 "<built-in>"
#define __UINTMAX_MAX__ 0xffffffffffffffffUL
# 0 "<built-in>"
#define __UINTMAX_C(c) c ## UL
# 0 "<built-in>"
#define __INTMAX_WIDTH__ 64
# 0 "<built-in>"
#define __SIG_ATOMIC_MAX__ 0x7fffffff
# 0 "<built-in>"
#define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1)
# 0 "<built-in>"
#define __SIG_ATOMIC_WIDTH__ 32
# 0 "<built-in>"
#define __INT8_MAX__ 0x7f
# 0 "<built-in>"
#define __INT16_MAX__ 0x7fff
# 0 "<built-in>"
#define __INT32_MAX__ 0x7fffffff
# 0 "<built-in>"
#define __INT64_MAX__ 0x7fffffffffffffffL
# 0 "<built-in>"
#define __UINT8_MAX__ 0xff
# 0 "<built-in>"
#define __UINT16_MAX__ 0xffff
# 0 "<built-in>"
#define __UINT32_MAX__ 0xffffffffU
# 0 "<built-in>"
#define __UINT64_MAX__ 0xffffffffffffffffUL
# 0 "<built-in>"
#define __INT_LEAST8_MAX__ 0x7f
# 0 "<built-in>"
#define __INT8_C(c) c
# 0 "<built-in>"
#define __INT_LEAST8_WIDTH__ 8
# 0 "<built-in>"
#define __INT_LEAST16_MAX__ 0x7fff
# 0 "<built-in>"
#define __INT16_C(c) c
# 0 "<built-in>"
#define __INT_LEAST16_WIDTH__ 16
# 0 "<built-in>"
#define __INT_LEAST32_MAX__ 0x7fffffff
# 0 "<built-in>"
#define __INT32_C(c) c
# 0 "<built-in>"
#define __INT_LEAST32_WIDTH__ 32
# 0 "<built-in>"
#define __INT_LEAST64_MAX__ 0x7fffffffffffffffL
# 0 "<built-in>"
#define __INT64_C(c) c ## L
# 0 "<built-in>"
#define __INT_LEAST64_WIDTH__ 64
# 0 "<built-in>"
#define __UINT_LEAST8_MAX__ 0xff
# 0 "<built-in>"
#define __UINT8_C(c) c
# 0 "<built-in>"
#define __UINT_LEAST16_MAX__ 0xffff
# 0 "<built-in>"
#define __UINT16_C(c) c
# 0 "<built-in>"
#define __UINT_LEAST32_MAX__ 0xffffffffU
# 0 "<built-in>"
#define __UINT32_C(c) c ## U
# 0 "<built-in>"
#define __UINT_LEAST64_MAX__ 0xffffffffffffffffUL
# 0 "<built-in>"
#define __UINT64_C(c) c ## UL
# 0 "<built-in>"
#define __INT_FAST8_MAX__ 0x7f
# 0 "<built-in>"
#define __INT_FAST8_WIDTH__ 8
# 0 "<built-in>"
#define __INT_FAST16_MAX__ 0x7fffffff
# 0 "<built-in>"
#define __INT_FAST16_WIDTH__ 32
# 0 "<built-in>"
#define __INT_FAST32_MAX__ 0x7fffffff
# 0 "<built-in>"
#define __INT_FAST32_WIDTH__ 32
# 0 "<built-in>"
#define __INT_FAST64_MAX__ 0x7fffffffffffffffL
# 0 "<built-in>"
#define __INT_FAST64_WIDTH__ 64
# 0 "<built-in>"
#define __UINT_FAST8_MAX__ 0xff
# 0 "<built-in>"
#define __UINT_FAST16_MAX__ 0xffffffffU
# 0 "<built-in>"
#define __UINT_FAST32_MAX__ 0xffffffffU
# 0 "<built-in>"
#define __UINT_FAST64_MAX__ 0xffffffffffffffffUL
# 0 "<built-in>"
#define __INTPTR_MAX__ 0x7fffffffffffffffL
# 0 "<built-in>"
#define __INTPTR_WIDTH__ 64
# 0 "<built-in>"
#define __UINTPTR_MAX__ 0xffffffffffffffffUL
# 0 "<built-in>"
#define __GCC_IEC_559 2
# 0 "<built-in>"
#define __GCC_IEC_559_COMPLEX 2
# 0 "<built-in>"
#define __FLT_EVAL_METHOD__ 0
# 0 "<built-in>"
#define __FLT_EVAL_METHOD_TS_18661_3__ 0
# 0 "<built-in>"
#define __DEC_EVAL_METHOD__ 2
# 0 "<built-in>"
#define __FLT_RADIX__ 2
# 0 "<built-in>"
#define __FLT_MANT_DIG__ 24
# 0 "<built-in>"
#define __FLT_DIG__ 6
# 0 "<built-in>"
#define __FLT_MIN_EXP__ (-125)
# 0 "<built-in>"
#define __FLT_MIN_10_EXP__ (-37)
# 0 "<built-in>"
#define __FLT_MAX_EXP__ 128
# 0 "<built-in>"
#define __FLT_MAX_10_EXP__ 38
# 0 "<built-in>"
#define __FLT_DECIMAL_DIG__ 9
# 0 "<built-in>"
#define __FLT_MAX__ 3.40282346638528859811704183484516925e+38F
# 0 "<built-in>"
#define __FLT_NORM_MAX__ 3.40282346638528859811704183484516925e+38F
# 0 "<built-in>"
#define __FLT_MIN__ 1.17549435082228750796873653722224568e-38F
# 0 "<built-in>"
#define __FLT_EPSILON__ 1.19209289550781250000000000000000000e-7F
# 0 "<built-in>"
#define __FLT_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F
# 0 "<built-in>"
#define __FLT_HAS_DENORM__ 1
# 0 "<built-in>"
#define __FLT_HAS_INFINITY__ 1
# 0 "<built-in>"
#define __FLT_HAS_QUIET_NAN__ 1
# 0 "<built-in>"
#define __FP_FAST_FMAF 1
# 0 "<built-in>"
#define __FLT_IS_IEC_60559__ 1
# 0 "<built-in>"
#define __DBL_MANT_DIG__ 53
# 0 "<built-in>"
#define __DBL_DIG__ 15
# 0 "<built-in>"
#define __DBL_MIN_EXP__ (-1021)
# 0 "<built-in>"
#define __DBL_MIN_10_EXP__ (-307)
# 0 "<built-in>"
#define __DBL_MAX_EXP__ 1024
# 0 "<built-in>"
#define __DBL_MAX_10_EXP__ 308
# 0 "<built-in>"
#define __DBL_DECIMAL_DIG__ 17
# 0 "<built-in>"
#define __DBL_MAX__ double(1.79769313486231570814527423731704357e+308L)
# 0 "<built-in>"
#define __DBL_NORM_MAX__ double(1.79769313486231570814527423731704357e+308L)
# 0 "<built-in>"
#define __DBL_MIN__ double(2.22507385850720138309023271733240406e-308L)
# 0 "<built-in>"
#define __DBL_EPSILON__ double(2.22044604925031308084726333618164062e-16L)
# 0 "<built-in>"
#define __DBL_DENORM_MIN__ double(4.94065645841246544176568792868221372e-324L)
# 0 "<built-in>"
#define __DBL_HAS_DENORM__ 1
# 0 "<built-in>"
#define __DBL_HAS_INFINITY__ 1
# 0 "<built-in>"
#define __DBL_HAS_QUIET_NAN__ 1
# 0 "<built-in>"
#define __FP_FAST_FMA 1
# 0 "<built-in>"
#define __DBL_IS_IEC_60559__ 1
# 0 "<built-in>"
#define __LDBL_MANT_DIG__ 113
# 0 "<built-in>"
#define __LDBL_DIG__ 33
# 0 "<built-in>"
#define __LDBL_MIN_EXP__ (-16381)
# 0 "<built-in>"
#define __LDBL_MIN_10_EXP__ (-4931)
# 0 "<built-in>"
#define __LDBL_MAX_EXP__ 16384
# 0 "<built-in>"
#define __LDBL_MAX_10_EXP__ 4932
# 0 "<built-in>"
#define __DECIMAL_DIG__ 36
# 0 "<built-in>"
#define __LDBL_DECIMAL_DIG__ 36
# 0 "<built-in>"
#define __LDBL_MAX__ 1.18973149535723176508575932662800702e+4932L
# 0 "<built-in>"
#define __LDBL_NORM_MAX__ 1.18973149535723176508575932662800702e+4932L
# 0 "<built-in>"
#define __LDBL_MIN__ 3.36210314311209350626267781732175260e-4932L
# 0 "<built-in>"
#define __LDBL_EPSILON__ 1.92592994438723585305597794258492732e-34L
# 0 "<built-in>"
#define __LDBL_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966L
# 0 "<built-in>"
#define __LDBL_HAS_DENORM__ 1
# 0 "<built-in>"
#define __LDBL_HAS_INFINITY__ 1
# 0 "<built-in>"
#define __LDBL_HAS_QUIET_NAN__ 1
# 0 "<built-in>"
#define __LDBL_IS_IEC_60559__ 1
# 0 "<built-in>"
#define __FLT16_MANT_DIG__ 11
# 0 "<built-in>"
#define __FLT16_DIG__ 3
# 0 "<built-in>"
#define __FLT16_MIN_EXP__ (-13)
# 0 "<built-in>"
#define __FLT16_MIN_10_EXP__ (-4)
# 0 "<built-in>"
#define __FLT16_MAX_EXP__ 16
# 0 "<built-in>"
#define __FLT16_MAX_10_EXP__ 4
# 0 "<built-in>"
#define __FLT16_DECIMAL_DIG__ 5
# 0 "<built-in>"
#define __FLT16_MAX__ 6.55040000000000000000000000000000000e+4F16
# 0 "<built-in>"
#define __FLT16_NORM_MAX__ 6.55040000000000000000000000000000000e+4F16
# 0 "<built-in>"
#define __FLT16_MIN__ 6.10351562500000000000000000000000000e-5F16
# 0 "<built-in>"
#define __FLT16_EPSILON__ 9.76562500000000000000000000000000000e-4F16
# 0 "<built-in>"
#define __FLT16_DENORM_MIN__ 5.96046447753906250000000000000000000e-8F16
# 0 "<built-in>"
#define __FLT16_HAS_DENORM__ 1
# 0 "<built-in>"
#define __FLT16_HAS_INFINITY__ 1
# 0 "<built-in>"
#define __FLT16_HAS_QUIET_NAN__ 1
# 0 "<built-in>"
#define __FLT16_IS_IEC_60559__ 1
# 0 "<built-in>"
#define __FLT32_MANT_DIG__ 24
# 0 "<built-in>"
#define __FLT32_DIG__ 6
# 0 "<built-in>"
#define __FLT32_MIN_EXP__ (-125)
# 0 "<built-in>"
#define __FLT32_MIN_10_EXP__ (-37)
# 0 "<built-in>"
#define __FLT32_MAX_EXP__ 128
# 0 "<built-in>"
#define __FLT32_MAX_10_EXP__ 38
# 0 "<built-in>"
#define __FLT32_DECIMAL_DIG__ 9
# 0 "<built-in>"
#define __FLT32_MAX__ 3.40282346638528859811704183484516925e+38F32
# 0 "<built-in>"
#define __FLT32_NORM_MAX__ 3.40282346638528859811704183484516925e+38F32
# 0 "<built-in>"
#define __FLT32_MIN__ 1.17549435082228750796873653722224568e-38F32
# 0 "<built-in>"
#define __FLT32_EPSILON__ 1.19209289550781250000000000000000000e-7F32
# 0 "<built-in>"
#define __FLT32_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F32
# 0 "<built-in>"
#define __FLT32_HAS_DENORM__ 1
# 0 "<built-in>"
#define __FLT32_HAS_INFINITY__ 1
# 0 "<built-in>"
#define __FLT32_HAS_QUIET_NAN__ 1
# 0 "<built-in>"
#define __FP_FAST_FMAF32 1
# 0 "<built-in>"
#define __FLT32_IS_IEC_60559__ 1
# 0 "<built-in>"
#define __FLT64_MANT_DIG__ 53
# 0 "<built-in>"
#define __FLT64_DIG__ 15
# 0 "<built-in>"
#define __FLT64_MIN_EXP__ (-1021)
# 0 "<built-in>"
#define __FLT64_MIN_10_EXP__ (-307)
# 0 "<built-in>"
#define __FLT64_MAX_EXP__ 1024
# 0 "<built-in>"
#define __FLT64_MAX_10_EXP__ 308
# 0 "<built-in>"
#define __FLT64_DECIMAL_DIG__ 17
# 0 "<built-in>"
#define __FLT64_MAX__ 1.79769313486231570814527423731704357e+308F64
# 0 "<built-in>"
#define __FLT64_NORM_MAX__ 1.79769313486231570814527423731704357e+308F64
# 0 "<built-in>"
#define __FLT64_MIN__ 2.22507385850720138309023271733240406e-308F64
# 0 "<built-in>"
#define __FLT64_EPSILON__ 2.22044604925031308084726333618164062e-16F64
# 0 "<built-in>"
#define __FLT64_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F64
# 0 "<built-in>"
#define __FLT64_HAS_DENORM__ 1
# 0 "<built-in>"
#define __FLT64_HAS_INFINITY__ 1
# 0 "<built-in>"
#define __FLT64_HAS_QUIET_NAN__ 1
# 0 "<built-in>"
#define __FP_FAST_FMAF64 1
# 0 "<built-in>"
#define __FLT64_IS_IEC_60559__ 1
# 0 "<built-in>"
#define __FLT128_MANT_DIG__ 113
# 0 "<built-in>"
#define __FLT128_DIG__ 33
# 0 "<built-in>"
#define __FLT128_MIN_EXP__ (-16381)
# 0 "<built-in>"
#define __FLT128_MIN_10_EXP__ (-4931)
# 0 "<built-in>"
#define __FLT128_MAX_EXP__ 16384
# 0 "<built-in>"
#define __FLT128_MAX_10_EXP__ 4932
# 0 "<built-in>"
#define __FLT128_DECIMAL_DIG__ 36
# 0 "<built-in>"
#define __FLT128_MAX__ 1.18973149535723176508575932662800702e+4932F128
# 0 "<built-in>"
#define __FLT128_NORM_MAX__ 1.18973149535723176508575932662800702e+4932F128
# 0 "<built-in>"
#define __FLT128_MIN__ 3.36210314311209350626267781732175260e-4932F128
# 0 "<built-in>"
#define __FLT128_EPSILON__ 1.92592994438723585305597794258492732e-34F128
# 0 "<built-in>"
#define __FLT128_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966F128
# 0 "<built-in>"
#define __FLT128_HAS_DENORM__ 1
# 0 "<built-in>"
#define __FLT128_HAS_INFINITY__ 1
# 0 "<built-in>"
#define __FLT128_HAS_QUIET_NAN__ 1
# 0 "<built-in>"
#define __FLT128_IS_IEC_60559__ 1
# 0 "<built-in>"
#define __FLT32X_MANT_DIG__ 53
# 0 "<built-in>"
#define __FLT32X_DIG__ 15
# 0 "<built-in>"
#define __FLT32X_MIN_EXP__ (-1021)
# 0 "<built-in>"
#define __FLT32X_MIN_10_EXP__ (-307)
# 0 "<built-in>"
#define __FLT32X_MAX_EXP__ 1024
# 0 "<built-in>"
#define __FLT32X_MAX_10_EXP__ 308
# 0 "<built-in>"
#define __FLT32X_DECIMAL_DIG__ 17
# 0 "<built-in>"
#define __FLT32X_MAX__ 1.79769313486231570814527423731704357e+308F32x
# 0 "<built-in>"
#define __FLT32X_NORM_MAX__ 1.79769313486231570814527423731704357e+308F32x
# 0 "<built-in>"
#define __FLT32X_MIN__ 2.22507385850720138309023271733240406e-308F32x
# 0 "<built-in>"
#define __FLT32X_EPSILON__ 2.22044604925031308084726333618164062e-16F32x
# 0 "<built-in>"
#define __FLT32X_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F32x
# 0 "<built-in>"
#define __FLT32X_HAS_DENORM__ 1
# 0 "<built-in>"
#define __FLT32X_HAS_INFINITY__ 1
# 0 "<built-in>"
#define __FLT32X_HAS_QUIET_NAN__ 1
# 0 "<built-in>"
#define __FP_FAST_FMAF32x 1
# 0 "<built-in>"
#define __FLT32X_IS_IEC_60559__ 1
# 0 "<built-in>"
#define __FLT64X_MANT_DIG__ 113
# 0 "<built-in>"
#define __FLT64X_DIG__ 33
# 0 "<built-in>"
#define __FLT64X_MIN_EXP__ (-16381)
# 0 "<built-in>"
#define __FLT64X_MIN_10_EXP__ (-4931)
# 0 "<built-in>"
#define __FLT64X_MAX_EXP__ 16384
# 0 "<built-in>"
#define __FLT64X_MAX_10_EXP__ 4932
# 0 "<built-in>"
#define __FLT64X_DECIMAL_DIG__ 36
# 0 "<built-in>"
#define __FLT64X_MAX__ 1.18973149535723176508575932662800702e+4932F64x
# 0 "<built-in>"
#define __FLT64X_NORM_MAX__ 1.18973149535723176508575932662800702e+4932F64x
# 0 "<built-in>"
#define __FLT64X_MIN__ 3.36210314311209350626267781732175260e-4932F64x
# 0 "<built-in>"
#define __FLT64X_EPSILON__ 1.92592994438723585305597794258492732e-34F64x
# 0 "<built-in>"
#define __FLT64X_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966F64x
# 0 "<built-in>"
#define __FLT64X_HAS_DENORM__ 1
# 0 "<built-in>"
#define __FLT64X_HAS_INFINITY__ 1
# 0 "<built-in>"
#define __FLT64X_HAS_QUIET_NAN__ 1
# 0 "<built-in>"
#define __FLT64X_IS_IEC_60559__ 1
# 0 "<built-in>"
#define __DEC32_MANT_DIG__ 7
# 0 "<built-in>"
#define __DEC32_MIN_EXP__ (-94)
# 0 "<built-in>"
#define __DEC32_MAX_EXP__ 97
# 0 "<built-in>"
#define __DEC32_MIN__ 1E-95DF
# 0 "<built-in>"
#define __DEC32_MAX__ 9.999999E96DF
# 0 "<built-in>"
#define __DEC32_EPSILON__ 1E-6DF
# 0 "<built-in>"
#define __DEC32_SUBNORMAL_MIN__ 0.000001E-95DF
# 0 "<built-in>"
#define __DEC64_MANT_DIG__ 16
# 0 "<built-in>"
#define __DEC64_MIN_EXP__ (-382)
# 0 "<built-in>"
#define __DEC64_MAX_EXP__ 385
# 0 "<built-in>"
#define __DEC64_MIN__ 1E-383DD
# 0 "<built-in>"
#define __DEC64_MAX__ 9.999999999999999E384DD
# 0 "<built-in>"
#define __DEC64_EPSILON__ 1E-15DD
# 0 "<built-in>"
#define __DEC64_SUBNORMAL_MIN__ 0.000000000000001E-383DD
# 0 "<built-in>"
#define __DEC128_MANT_DIG__ 34
# 0 "<built-in>"
#define __DEC128_MIN_EXP__ (-6142)
# 0 "<built-in>"
#define __DEC128_MAX_EXP__ 6145
# 0 "<built-in>"
#define __DEC128_MIN__ 1E-6143DL
# 0 "<built-in>"
#define __DEC128_MAX__ 9.999999999999999999999999999999999E6144DL
# 0 "<built-in>"
#define __DEC128_EPSILON__ 1E-33DL
# 0 "<built-in>"
#define __DEC128_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143DL
# 0 "<built-in>"
#define __REGISTER_PREFIX__ 
# 0 "<built-in>"
#define __USER_LABEL_PREFIX__ 
# 0 "<built-in>"
#define __GNUC_STDC_INLINE__ 1
# 0 "<built-in>"
#define __STRICT_ANSI__ 1
# 0 "<built-in>"
#define __CHAR_UNSIGNED__ 1
# 0 "<built-in>"
#define __WCHAR_UNSIGNED__ 1
# 0 "<built-in>"
#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1
# 0 "<built-in>"
#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1
# 0 "<built-in>"
#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1
# 0 "<built-in>"
#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1
# 0 "<built-in>"
#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_16 1
# 0 "<built-in>"
#define __GCC_ATOMIC_BOOL_LOCK_FREE 2
# 0 "<built-in>"
#define __GCC_ATOMIC_CHAR_LOCK_FREE 2
# 0 "<built-in>"
#define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2
# 0 "<built-in>"
#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2
# 0 "<built-in>"
#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2
# 0 "<built-in>"
#define __GCC_ATOMIC_SHORT_LOCK_FREE 2
# 0 "<built-in>"
#define __GCC_ATOMIC_INT_LOCK_FREE 2
# 0 "<built-in>"
#define __GCC_ATOMIC_LONG_LOCK_FREE 2
# 0 "<built-in>"
#define __GCC_ATOMIC_LLONG_LOCK_FREE 2
# 0 "<built-in>"
#define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1
# 0 "<built-in>"
#define __GCC_DESTRUCTIVE_SIZE 256
# 0 "<built-in>"
#define __GCC_CONSTRUCTIVE_SIZE 64
# 0 "<built-in>"
#define __GCC_ATOMIC_POINTER_LOCK_FREE 2
# 0 "<built-in>"
#define __HAVE_SPECULATION_SAFE_VALUE 1
# 0 "<built-in>"
#define __GCC_HAVE_DWARF2_CFI_ASM 1
# 0 "<built-in>"
#define __PRAGMA_REDEFINE_EXTNAME 1
# 0 "<built-in>"
#define __SSP_STRONG__ 3
# 0 "<built-in>"
#define __SIZEOF_INT128__ 16
# 0 "<built-in>"
#define __SIZEOF_WCHAR_T__ 4
# 0 "<built-in>"
#define __SIZEOF_WINT_T__ 4
# 0 "<built-in>"
#define __SIZEOF_PTRDIFF_T__ 8
# 0 "<built-in>"
#define __aarch64__ 1
# 0 "<built-in>"
#define __ARM_64BIT_STATE 1
# 0 "<built-in>"
#define __ARM_ARCH_ISA_A64 1
# 0 "<built-in>"
#define __ARM_ALIGN_MAX_PWR 28
# 0 "<built-in>"
#define __ARM_ALIGN_MAX_STACK_PWR 16
# 0 "<built-in>"
#define __ARM_ARCH_8A 1
# 0 "<built-in>"
#define __ARM_ARCH_PROFILE 65
# 0 "<built-in>"
#define __ARM_FEATURE_CLZ 1
# 0 "<built-in>"
#define __ARM_FEATURE_IDIV 1
# 0 "<built-in>"
#define __ARM_FEATURE_UNALIGNED 1
# 0 "<built-in>"
#define __ARM_PCS_AAPCS64 1
# 0 "<built-in>"
#define __ARM_SIZEOF_WCHAR_T 4
# 0 "<built-in>"
#define __GCC_ASM_FLAG_OUTPUTS__ 1
# 0 "<built-in>"
#undef __ARM_FP_FAST
# 0 "<built-in>"
#define __ARM_ARCH 8
# 0 "<built-in>"
#define __ARM_SIZEOF_MINIMAL_ENUM 4
# 0 "<built-in>"
#undef __AARCH64EB__
# 0 "<built-in>"
#undef __ARM_BIG_ENDIAN
# 0 "<built-in>"
#define __AARCH64EL__ 1
# 0 "<built-in>"
#define __ARM_FEATURE_FMA 1
# 0 "<built-in>"
#define __ARM_FP 14
# 0 "<built-in>"
#define __ARM_FP16_FORMAT_IEEE 1
# 0 "<built-in>"
#define __ARM_FP16_ARGS 1
# 0 "<built-in>"
#undef __ARM_FEATURE_FP16_SCALAR_ARITHMETIC
# 0 "<built-in>"
#undef __ARM_FEATURE_FP16_VECTOR_ARITHMETIC
# 0 "<built-in>"
#define __ARM_FEATURE_NUMERIC_MAXMIN 1
# 0 "<built-in>"
#define __ARM_NEON 1
# 0 "<built-in>"
#undef __ARM_FEATURE_CRC32
# 0 "<built-in>"
#undef __ARM_FEATURE_DOTPROD
# 0 "<built-in>"
#undef __ARM_FEATURE_COMPLEX
# 0 "<built-in>"
#undef __ARM_FEATURE_JCVT
# 0 "<built-in>"
#undef __AARCH64_CMODEL_TINY__
# 0 "<built-in>"
#undef __AARCH64_CMODEL_SMALL__
# 0 "<built-in>"
#undef __AARCH64_CMODEL_LARGE__
# 0 "<built-in>"
#define __AARCH64_CMODEL_SMALL__ 1
# 0 "<built-in>"
#undef _ILP32
# 0 "<built-in>"
#undef __ILP32__
# 0 "<built-in>"
#undef __ARM_FEATURE_CRYPTO
# 0 "<built-in>"
#undef __ARM_FEATURE_QRDMX
# 0 "<built-in>"
#undef __ARM_FEATURE_SVE
# 0 "<built-in>"
#undef __ARM_FEATURE_SVE_BITS
# 0 "<built-in>"
#undef __ARM_FEATURE_SVE_VECTOR_OPERATORS
# 0 "<built-in>"
#undef __ARM_FEATURE_SVE_MATMUL_INT8
# 0 "<built-in>"
#undef __ARM_FEATURE_SVE_MATMUL_FP32
# 0 "<built-in>"
#undef __ARM_FEATURE_SVE_MATMUL_FP64
# 0 "<built-in>"
#undef __ARM_FEATURE_SVE2
# 0 "<built-in>"
#undef __ARM_FEATURE_SVE2_AES
# 0 "<built-in>"
#undef __ARM_FEATURE_SVE2_BITPERM
# 0 "<built-in>"
#undef __ARM_FEATURE_SVE2_SHA3
# 0 "<built-in>"
#undef __ARM_FEATURE_SVE2_SM4
# 0 "<built-in>"
#undef __ARM_FEATURE_ATOMICS
# 0 "<built-in>"
#undef __ARM_FEATURE_AES
# 0 "<built-in>"
#undef __ARM_FEATURE_SHA2
# 0 "<built-in>"
#undef __ARM_FEATURE_SHA3
# 0 "<built-in>"
#undef __ARM_FEATURE_SHA512
# 0 "<built-in>"
#undef __ARM_FEATURE_SM3
# 0 "<built-in>"
#undef __ARM_FEATURE_SM4
# 0 "<built-in>"
#undef __ARM_FEATURE_FP16_FML
# 0 "<built-in>"
#undef __ARM_FEATURE_FRINT
# 0 "<built-in>"
#undef __ARM_FEATURE_TME
# 0 "<built-in>"
#undef __ARM_FEATURE_RNG
# 0 "<built-in>"
#undef __ARM_FEATURE_MEMORY_TAGGING
# 0 "<built-in>"
#undef __ARM_FEATURE_BTI_DEFAULT
# 0 "<built-in>"
#undef __ARM_FEATURE_PAC_DEFAULT
# 0 "<built-in>"
#undef __ARM_FEATURE_PAUTH
# 0 "<built-in>"
#undef __ARM_FEATURE_BTI
# 0 "<built-in>"
#undef __ARM_FEATURE_MATMUL_INT8
# 0 "<built-in>"
#undef __ARM_FEATURE_BF16_VECTOR_ARITHMETIC
# 0 "<built-in>"
#undef __ARM_FEATURE_BF16_SCALAR_ARITHMETIC
# 0 "<built-in>"
#undef __ARM_FEATURE_LS64
# 0 "<built-in>"
#undef __ARM_FEATURE_RCPC
# 0 "<built-in>"
#undef __FLT_EVAL_METHOD__
# 0 "<built-in>"
#define __FLT_EVAL_METHOD__ 0
# 0 "<built-in>"
#undef __FLT_EVAL_METHOD_C99__
# 0 "<built-in>"
#define __FLT_EVAL_METHOD_C99__ 0
# 0 "<built-in>"
#define __linux 1
# 0 "<built-in>"
#define __linux__ 1
# 0 "<built-in>"
#define __unix 1
# 0 "<built-in>"
#define __unix__ 1
# 0 "<built-in>"
#define __ELF__ 1
# 0 "<built-in>"
#define __DECIMAL_BID_FORMAT__ 1
# 0 "<command-line>"
#define _GNU_SOURCE 1
# 0 "<command-line>"
#define _REENTRANT 1
# 0 "<command-line>"
#define _FORTIFY_SOURCE 2
# 0 "<command-line>"
#define _FILE_OFFSET_BITS 64
# 0 "<command-line>"
#define HAVE_CONFIG_H 1
# 0 "<command-line>"
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdc-predef.h" 1 3 4
# 19 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdc-predef.h" 3 4
#define _STDC_PREDEF_H 1
# 38 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdc-predef.h" 3 4
#define __STDC_IEC_559__ 1
#define __STDC_IEC_60559_BFP__ 201404L
# 48 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdc-predef.h" 3 4
#define __STDC_IEC_559_COMPLEX__ 1
#define __STDC_IEC_60559_COMPLEX__ 201404L
# 62 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdc-predef.h" 3 4
#define __STDC_ISO_10646__ 201706L
# 0 "<command-line>" 2
# 1 "../harfbuzz-6.0.0/src/hb-aat-layout.cc"
# 28 "../harfbuzz-6.0.0/src/hb-aat-layout.cc"
# 1 "../harfbuzz-6.0.0/src/hb.hh" 1
# 30 "../harfbuzz-6.0.0/src/hb.hh"
#define HB_HH 
# 50 "../harfbuzz-6.0.0/src/hb.hh"
#pragma GCC diagnostic warning "-Wall"
#pragma GCC diagnostic warning "-Wextra"


#pragma GCC diagnostic ignored "-Wpragmas"
#pragma GCC diagnostic ignored "-Wunknown-pragmas"
#pragma GCC diagnostic ignored "-Wunknown-warning-option"







#pragma GCC diagnostic error "-Wbitwise-instead-of-logical"
#pragma GCC diagnostic error "-Wcast-align"
#pragma GCC diagnostic error "-Wcast-function-type"
#pragma GCC diagnostic error "-Wcomma"
#pragma GCC diagnostic error "-Wdelete-non-virtual-dtor"
#pragma GCC diagnostic error "-Wembedded-directive"
#pragma GCC diagnostic error "-Wextra-semi-stmt"
#pragma GCC diagnostic error "-Wformat-security"
#pragma GCC diagnostic error "-Wimplicit-function-declaration"
#pragma GCC diagnostic error "-Winit-self"
#pragma GCC diagnostic error "-Winjected-class-name"
#pragma GCC diagnostic error "-Wmissing-braces"
#pragma GCC diagnostic error "-Wmissing-declarations"
#pragma GCC diagnostic error "-Wmissing-prototypes"
#pragma GCC diagnostic error "-Wnarrowing"
#pragma GCC diagnostic error "-Wnested-externs"
#pragma GCC diagnostic error "-Wold-style-definition"
#pragma GCC diagnostic error "-Wpointer-arith"
#pragma GCC diagnostic error "-Wredundant-decls"
#pragma GCC diagnostic error "-Wreorder"
#pragma GCC diagnostic error "-Wsign-compare"
#pragma GCC diagnostic error "-Wstrict-prototypes"
#pragma GCC diagnostic error "-Wstring-conversion"
#pragma GCC diagnostic error "-Wswitch-enum"
#pragma GCC diagnostic error "-Wtautological-overlap-compare"
#pragma GCC diagnostic error "-Wunneeded-internal-declaration"
#pragma GCC diagnostic error "-Wunused"
#pragma GCC diagnostic error "-Wunused-local-typedefs"
#pragma GCC diagnostic error "-Wunused-value"
#pragma GCC diagnostic error "-Wunused-variable"
#pragma GCC diagnostic error "-Wvla"
#pragma GCC diagnostic error "-Wwrite-strings"




#pragma GCC diagnostic warning "-Wbuiltin-macro-redefined"
#pragma GCC diagnostic warning "-Wdeprecated"
#pragma GCC diagnostic warning "-Wdeprecated-declarations"
#pragma GCC diagnostic warning "-Wdisabled-optimization"
#pragma GCC diagnostic warning "-Wdouble-promotion"
#pragma GCC diagnostic warning "-Wformat=2"
#pragma GCC diagnostic warning "-Wformat-signedness"
#pragma GCC diagnostic warning "-Wignored-pragma-optimize"
#pragma GCC diagnostic warning "-Wlogical-op"
#pragma GCC diagnostic warning "-Wmaybe-uninitialized"
#pragma GCC diagnostic warning "-Wmissing-format-attribute"
#pragma GCC diagnostic warning "-Wundef"
#pragma GCC diagnostic warning "-Wunsafe-loop-optimizations"
#pragma GCC diagnostic warning "-Wunused-but-set-variable"




#pragma GCC diagnostic ignored "-Wconversion"
#pragma GCC diagnostic ignored "-Wshadow"
#pragma GCC diagnostic ignored "-Wunused-parameter"

#pragma GCC diagnostic ignored "-Wunused-result"





#pragma GCC diagnostic ignored "-Wclass-memaccess"
#pragma GCC diagnostic ignored "-Wcast-function-type-strict"
#pragma GCC diagnostic ignored "-Wdangling-reference"
#pragma GCC diagnostic ignored "-Wformat-nonliteral"
#pragma GCC diagnostic ignored "-Wformat-zero-length"
#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
#pragma GCC diagnostic ignored "-Wpacked"
#pragma GCC diagnostic ignored "-Wrange-loop-analysis"
#pragma GCC diagnostic ignored "-Wstrict-aliasing"
#pragma GCC diagnostic ignored "-Wtype-limits"
#pragma GCC diagnostic ignored "-Wc++11-compat"






# 1 "../harfbuzz-6.0.0/src/hb-config.hh" 1
# 28 "../harfbuzz-6.0.0/src/hb-config.hh"
#define HB_CONFIG_HH 






# 1 "./config.h" 1





       

#define HAVE_ATEXIT 1

#define HAVE_CAIRO 1

#define HAVE_CAIRO_FT 1

#define HAVE_FREETYPE 1

#define HAVE_FT_DONE_MM_VAR 1

#define HAVE_FT_GET_TRANSFORM 1

#define HAVE_FT_GET_VAR_BLEND_COORDINATES 1

#define HAVE_FT_SET_VAR_BLEND_COORDINATES 1

#define HAVE_GETPAGESIZE 1

#define HAVE_GLIB 1

#define HAVE_GOBJECT 1

#define HAVE_ICU 1

#define HAVE_INTROSPECTION 1

#define HAVE_ISATTY 1

#define HAVE_MMAP 1

#define HAVE_MPROTECT 1

#define HAVE_NEWLOCALE 1

#define HAVE_PTHREAD 1

#define HAVE_STDBOOL_H 1

#define HAVE_SYSCONF 1

#define HAVE_SYS_MMAN_H 1

#define HAVE_UNISTD_H 1

#define HAVE_USELOCALE 1

#define PACKAGE_NAME "HarfBuzz"

#define PACKAGE_VERSION "6.0.0"
# 36 "../harfbuzz-6.0.0/src/hb-config.hh" 2



#define HB_NO_BEYOND_64K 
#define HB_NO_VAR_COMPOSITES 
# 116 "../harfbuzz-6.0.0/src/hb-config.hh"
#define HB_IF_NOT_DEPRECATED(x) x
# 146 "../harfbuzz-6.0.0/src/hb.hh" 2
# 1 "../harfbuzz-6.0.0/src/hb-limits.hh" 1
# 26 "../harfbuzz-6.0.0/src/hb-limits.hh"
#define HB_LIMITS_HH 

# 1 "../harfbuzz-6.0.0/src/hb.hh" 1
# 29 "../harfbuzz-6.0.0/src/hb-limits.hh" 2



#define HB_BUFFER_MAX_LEN_FACTOR 64


#define HB_BUFFER_MAX_LEN_MIN 16384


#define HB_BUFFER_MAX_LEN_DEFAULT 0x3FFFFFFF



#define HB_BUFFER_MAX_OPS_FACTOR 1024


#define HB_BUFFER_MAX_OPS_MIN 16384


#define HB_BUFFER_MAX_OPS_DEFAULT 0x1FFFFFFF




#define HB_MAX_NESTING_LEVEL 64




#define HB_MAX_CONTEXT_LENGTH 64
# 68 "../harfbuzz-6.0.0/src/hb-limits.hh"
#define HB_CLOSURE_MAX_STAGES 12



#define HB_MAX_SCRIPTS 500



#define HB_MAX_LANGSYS 2000



#define HB_MAX_LANGSYS_FEATURE_COUNT 50000



#define HB_MAX_FEATURE_INDICES 1500



#define HB_MAX_LOOKUP_VISIT_COUNT 35000




#define HB_GLYF_MAX_POINTS 20000



#define HB_GLYF_MAX_EDGE_COUNT 1024



#define HB_CFF_MAX_OPS 10000



#define HB_COLRV1_MAX_EDGE_COUNT 1024
# 147 "../harfbuzz-6.0.0/src/hb.hh" 2
# 156 "../harfbuzz-6.0.0/src/hb.hh"
#define _ALL_SOURCE 1







#define _POSIX_PTHREAD_SEMANTICS 1



#define _TANDEM_SOURCE 1



#define __EXTENSIONS__ 1






# 1 "../harfbuzz-6.0.0/src/hb.h" 1
# 28 "../harfbuzz-6.0.0/src/hb.h"
#define HB_H 
#define HB_H_IN 

# 1 "../harfbuzz-6.0.0/src/hb-blob.h" 1
# 32 "../harfbuzz-6.0.0/src/hb-blob.h"
#define HB_BLOB_H 

# 1 "../harfbuzz-6.0.0/src/hb-common.h" 1
# 34 "../harfbuzz-6.0.0/src/hb-common.h"
#define HB_COMMON_H 


#define HB_EXTERN extern




#define HB_BEGIN_DECLS extern "C" {
#define HB_END_DECLS }
# 69 "../harfbuzz-6.0.0/src/hb-common.h"
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdint.h" 1 3 4
# 23 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdint.h" 3 4
#define _STDINT_H 1

#define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION 
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/libc-header-start.h" 1 3 4
# 31 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/libc-header-start.h" 3 4
#undef __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION

# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/features.h" 1 3 4
# 19 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/features.h" 3 4
#define _FEATURES_H 1
# 127 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/features.h" 3 4
#undef __USE_ISOC11
#undef __USE_ISOC99
#undef __USE_ISOC95
#undef __USE_ISOCXX11
#undef __USE_POSIX
#undef __USE_POSIX2
#undef __USE_POSIX199309
#undef __USE_POSIX199506
#undef __USE_XOPEN
#undef __USE_XOPEN_EXTENDED
#undef __USE_UNIX98
#undef __USE_XOPEN2K
#undef __USE_XOPEN2KXSI
#undef __USE_XOPEN2K8
#undef __USE_XOPEN2K8XSI
#undef __USE_LARGEFILE
#undef __USE_LARGEFILE64
#undef __USE_FILE_OFFSET64
#undef __USE_MISC
#undef __USE_ATFILE
#undef __USE_DYNAMIC_STACK_SIZE
#undef __USE_GNU
#undef __USE_FORTIFY_LEVEL
#undef __KERNEL_STRICT_NAMES
#undef __GLIBC_USE_ISOC2X
#undef __GLIBC_USE_DEPRECATED_GETS
#undef __GLIBC_USE_DEPRECATED_SCANF




#define __KERNEL_STRICT_NAMES 
# 169 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/features.h" 3 4
#define __GNUC_PREREQ(maj,min) ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
# 183 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/features.h" 3 4
#define __glibc_clang_prereq(maj,min) 0



#define __GLIBC_USE(F) __GLIBC_USE_ ## F
# 202 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/features.h" 3 4
#undef _ISOC95_SOURCE
#define _ISOC95_SOURCE 1
#undef _ISOC99_SOURCE
#define _ISOC99_SOURCE 1
#undef _ISOC11_SOURCE
#define _ISOC11_SOURCE 1
#undef _ISOC2X_SOURCE
#define _ISOC2X_SOURCE 1
#undef _POSIX_SOURCE
#define _POSIX_SOURCE 1
#undef _POSIX_C_SOURCE
#define _POSIX_C_SOURCE 200809L
#undef _XOPEN_SOURCE
#define _XOPEN_SOURCE 700
#undef _XOPEN_SOURCE_EXTENDED
#define _XOPEN_SOURCE_EXTENDED 1
#undef _LARGEFILE64_SOURCE
#define _LARGEFILE64_SOURCE 1
#undef _DEFAULT_SOURCE
#define _DEFAULT_SOURCE 1
#undef _ATFILE_SOURCE
#define _ATFILE_SOURCE 1
#undef _DYNAMIC_STACK_SIZE_SOURCE
#define _DYNAMIC_STACK_SIZE_SOURCE 1
# 236 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/features.h" 3 4
#undef _DEFAULT_SOURCE
#define _DEFAULT_SOURCE 1





#define __GLIBC_USE_ISOC2X 1







#define __USE_ISOC11 1






#define __USE_ISOC99 1






#define __USE_ISOC95 1
# 276 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/features.h" 3 4
#define __USE_ISOCXX11 1
#define __USE_ISOC99 1
# 288 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/features.h" 3 4
#undef _POSIX_SOURCE
#define _POSIX_SOURCE 1
#undef _POSIX_C_SOURCE
#define _POSIX_C_SOURCE 200809L
# 326 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/features.h" 3 4
#define __USE_POSIX 1



#define __USE_POSIX2 1



#define __USE_POSIX199309 1



#define __USE_POSIX199506 1



#define __USE_XOPEN2K 1
#undef __USE_ISOC95
#define __USE_ISOC95 1
#undef __USE_ISOC99
#define __USE_ISOC99 1



#define __USE_XOPEN2K8 1
#undef _ATFILE_SOURCE
#define _ATFILE_SOURCE 1



#define __USE_XOPEN 1

#define __USE_XOPEN_EXTENDED 1
#define __USE_UNIX98 1
#undef _LARGEFILE_SOURCE
#define _LARGEFILE_SOURCE 1


#define __USE_XOPEN2K8 1
#define __USE_XOPEN2K8XSI 1

#define __USE_XOPEN2K 1
#define __USE_XOPEN2KXSI 1
#undef __USE_ISOC95
#define __USE_ISOC95 1
#undef __USE_ISOC99
#define __USE_ISOC99 1
# 382 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/features.h" 3 4
#define __USE_LARGEFILE 1



#define __USE_LARGEFILE64 1



#define __USE_FILE_OFFSET64 1


# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/features-time64.h" 1 3 4
# 20 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/features-time64.h" 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 1 3 4
# 21 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE 64
# 32 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE_TIME64_COMPAT32 0
# 21 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/features-time64.h" 2 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/timesize.h" 1 3 4







# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 1 3 4
# 21 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE 64
# 32 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE_TIME64_COMPAT32 0
# 9 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/timesize.h" 2 3 4
# 27 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/timesize.h" 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/timesize-64.h" 1 3 4
# 20 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/timesize-64.h" 3 4
#define __TIMESIZE 64
# 28 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/timesize.h" 2 3 4
# 22 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/features-time64.h" 2 3 4
# 394 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/features.h" 2 3 4


#define __USE_MISC 1



#define __USE_ATFILE 1



#define __USE_DYNAMIC_STACK_SIZE 1



#define __USE_GNU 1
# 427 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/features.h" 3 4
#define __USE_FORTIFY_LEVEL 2
# 443 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/features.h" 3 4
#define __GLIBC_USE_DEPRECATED_GETS 1
# 464 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/features.h" 3 4
#define __GLIBC_USE_DEPRECATED_SCANF 0
# 477 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/features.h" 3 4
#undef __GNU_LIBRARY__
#define __GNU_LIBRARY__ 6



#define __GLIBC__ 2
#define __GLIBC_MINOR__ 37

#define __GLIBC_PREREQ(maj,min) ((__GLIBC__ << 16) + __GLIBC_MINOR__ >= ((maj) << 16) + (min))





# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/cdefs.h" 1 3 4
# 20 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/cdefs.h" 3 4
#define _SYS_CDEFS_H 1
# 35 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/cdefs.h" 3 4
#undef __P
#undef __PMT
# 45 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/cdefs.h" 3 4
#define __glibc_has_attribute(attr) __has_attribute (attr)




#define __glibc_has_builtin(name) __has_builtin (name)






#define __glibc_has_extension(ext) 0







#define __LEAF , __leaf__
#define __LEAF_ATTR __attribute__ ((__leaf__))
# 86 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/cdefs.h" 3 4
#define __THROW noexcept (true)



#define __THROWNL __THROW
#define __NTH(fct) __LEAF_ATTR fct __THROW
#define __NTHNL(fct) fct __THROW
# 118 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/cdefs.h" 3 4
#define __P(args) args
#define __PMT(args) args




#define __CONCAT(x,y) x ## y
#define __STRING(x) #x


#define __ptr_t void *




#define __BEGIN_DECLS extern "C" {
#define __END_DECLS }







#define __bos(ptr) __builtin_object_size (ptr, __USE_FORTIFY_LEVEL > 1)
#define __bos0(ptr) __builtin_object_size (ptr, 0)







#define __glibc_objsize0(__o) __bos0 (__o)
#define __glibc_objsize(__o) __bos (__o)






#define __glibc_safe_len_cond(__l,__s,__osz) ((__l) <= (__osz) / (__s))
#define __glibc_unsigned_or_positive(__l) ((__typeof (__l)) 0 < (__typeof (__l)) -1 || (__builtin_constant_p (__l) && (__l) > 0))





#define __glibc_safe_or_unknown_len(__l,__s,__osz) ((__builtin_constant_p (__osz) && (__osz) == (__SIZE_TYPE__) -1) || (__glibc_unsigned_or_positive (__l) && __builtin_constant_p (__glibc_safe_len_cond ((__SIZE_TYPE__) (__l), (__s), (__osz))) && __glibc_safe_len_cond ((__SIZE_TYPE__) (__l), (__s), (__osz))))
# 176 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/cdefs.h" 3 4
#define __glibc_unsafe_len(__l,__s,__osz) (__glibc_unsigned_or_positive (__l) && __builtin_constant_p (__glibc_safe_len_cond ((__SIZE_TYPE__) (__l), __s, __osz)) && !__glibc_safe_len_cond ((__SIZE_TYPE__) (__l), __s, __osz))
# 185 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/cdefs.h" 3 4
#define __glibc_fortify(f,__l,__s,__osz,...) (__glibc_safe_or_unknown_len (__l, __s, __osz) ? __ ## f ## _alias (__VA_ARGS__) : (__glibc_unsafe_len (__l, __s, __osz) ? __ ## f ## _chk_warn (__VA_ARGS__, __osz) : __ ## f ## _chk (__VA_ARGS__, __osz)))
# 195 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/cdefs.h" 3 4
#define __glibc_fortify_n(f,__l,__s,__osz,...) (__glibc_safe_or_unknown_len (__l, __s, __osz) ? __ ## f ## _alias (__VA_ARGS__) : (__glibc_unsafe_len (__l, __s, __osz) ? __ ## f ## _chk_warn (__VA_ARGS__, (__osz) / (__s)) : __ ## f ## _chk (__VA_ARGS__, (__osz) / (__s))))







#define __warnattr(msg) __attribute__((__warning__ (msg)))
#define __errordecl(name,msg) extern void name (void) __attribute__((__error__ (msg)))
# 221 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/cdefs.h" 3 4
#define __flexarr []
#define __glibc_c99_flexarr_available 1
# 247 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/cdefs.h" 3 4
#define __REDIRECT(name,proto,alias) name proto __asm__ (__ASMNAME (#alias))

#define __REDIRECT_NTH(name,proto,alias) name proto __THROW __asm__ (__ASMNAME (#alias))

#define __REDIRECT_NTHNL(name,proto,alias) name proto __THROWNL __asm__ (__ASMNAME (#alias))







#define __ASMNAME(cname) __ASMNAME2 (__USER_LABEL_PREFIX__, cname)
#define __ASMNAME2(prefix,cname) __STRING (prefix) cname
# 281 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/cdefs.h" 3 4
#define __attribute_malloc__ __attribute__ ((__malloc__))







#define __attribute_alloc_size__(params) __attribute__ ((__alloc_size__ params))
# 298 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/cdefs.h" 3 4
#define __attribute_alloc_align__(param) __attribute__ ((__alloc_align__ param))
# 308 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/cdefs.h" 3 4
#define __attribute_pure__ __attribute__ ((__pure__))






#define __attribute_const__ __attribute__ ((__const__))





#define __attribute_maybe_unused__ __attribute__ ((__unused__))
# 330 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/cdefs.h" 3 4
#define __attribute_used__ __attribute__ ((__used__))
#define __attribute_noinline__ __attribute__ ((__noinline__))







#define __attribute_deprecated__ __attribute__ ((__deprecated__))
# 349 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/cdefs.h" 3 4
#define __attribute_deprecated_msg__(msg) __attribute__ ((__deprecated__ (msg)))
# 362 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/cdefs.h" 3 4
#define __attribute_format_arg__(x) __attribute__ ((__format_arg__ (x)))
# 372 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/cdefs.h" 3 4
#define __attribute_format_strfmon__(a,b) __attribute__ ((__format__ (__strfmon__, a, b)))
# 384 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/cdefs.h" 3 4
#define __attribute_nonnull__(params) __attribute__ ((__nonnull__ params))





#define __nonnull(params) __attribute_nonnull__ (params)






#define __returns_nonnull __attribute__ ((__returns_nonnull__))
# 406 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/cdefs.h" 3 4
#define __attribute_warn_unused_result__ __attribute__ ((__warn_unused_result__))


#define __wur __attribute_warn_unused_result__
# 423 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/cdefs.h" 3 4
#undef __always_inline
#define __always_inline __inline __attribute__ ((__always_inline__))
# 433 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/cdefs.h" 3 4
#define __attribute_artificial__ __attribute__ ((__artificial__))
# 451 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/cdefs.h" 3 4
#define __extern_inline extern __inline __attribute__ ((__gnu_inline__))
#define __extern_always_inline extern __always_inline __attribute__ ((__gnu_inline__))
# 461 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/cdefs.h" 3 4
#define __fortify_function __extern_always_inline __attribute_artificial__





#define __va_arg_pack() __builtin_va_arg_pack ()
#define __va_arg_pack_len() __builtin_va_arg_pack_len ()
# 498 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/cdefs.h" 3 4
#define __restrict_arr 
# 510 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/cdefs.h" 3 4
#define __glibc_unlikely(cond) __builtin_expect ((cond), 0)
#define __glibc_likely(cond) __builtin_expect ((cond), 1)
# 532 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/cdefs.h" 3 4
#define __attribute_nonstring__ __attribute__ ((__nonstring__))





#undef __attribute_copy__



#define __attribute_copy__(arg) __attribute__ ((__copy__ (arg)))
# 559 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/cdefs.h" 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 1 3 4
# 21 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE 64
# 32 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE_TIME64_COMPAT32 0
# 560 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/cdefs.h" 2 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/long-double.h" 1 3 4







# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 1 3 4
# 21 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE 64
# 32 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE_TIME64_COMPAT32 0
# 9 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/long-double.h" 2 3 4
# 27 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/long-double.h" 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/long-double-64.h" 1 3 4
# 21 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/long-double-64.h" 3 4
#define __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI 0
# 28 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/long-double.h" 2 3 4
# 561 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/cdefs.h" 2 3 4
# 616 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/cdefs.h" 3 4
#define __LDBL_REDIR1(name,proto,alias) name proto
#define __LDBL_REDIR(name,proto) name proto
#define __LDBL_REDIR1_NTH(name,proto,alias) name proto __THROW
#define __LDBL_REDIR_NTH(name,proto) name proto __THROW
#define __LDBL_REDIR2_DECL(name) 
#define __LDBL_REDIR_DECL(name) 

#define __REDIRECT_LDBL(name,proto,alias) __REDIRECT (name, proto, alias)
#define __REDIRECT_NTH_LDBL(name,proto,alias) __REDIRECT_NTH (name, proto, alias)
# 635 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/cdefs.h" 3 4
#define __glibc_macro_warning1(message) _Pragma (#message)
#define __glibc_macro_warning(message) __glibc_macro_warning1 (GCC warning message)
# 656 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/cdefs.h" 3 4
#define __HAVE_GENERIC_SELECTION 0
# 665 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/cdefs.h" 3 4
#define __attr_access(x) __attribute__ ((__access__ x))







#define __fortified_attr_access(a,o,s) __attr_access ((a, o, s))


#define __attr_access_none(argno) __attribute__ ((__access__ (__none__, argno)))
# 689 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/cdefs.h" 3 4
#define __attr_dealloc(dealloc,argno) __attribute__ ((__malloc__ (dealloc, argno)))

#define __attr_dealloc_free __attr_dealloc (__builtin_free, 1)
# 700 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/cdefs.h" 3 4
#define __attribute_returns_twice__ __attribute__ ((__returns_twice__))
# 492 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/features.h" 2 3 4
# 507 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/features.h" 3 4
#define __USE_EXTERN_INLINES 1







# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/gnu/stubs.h" 1 3 4







# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 1 3 4
# 21 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE 64
# 32 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE_TIME64_COMPAT32 0
# 9 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/gnu/stubs.h" 2 3 4
# 27 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/gnu/stubs.h" 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/gnu/stubs-64.h" 1 3 4




# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 1 3 4
# 21 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE 64
# 32 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE_TIME64_COMPAT32 0
# 6 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/gnu/stubs-64.h" 2 3 4


# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/gnu/stubs-lp64.h" 1 3 4
# 10 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/gnu/stubs-lp64.h" 3 4
#define __stub___compat_bdflush 
#define __stub___compat_create_module 
#define __stub___compat_get_kernel_syms 
#define __stub___compat_query_module 
#define __stub___compat_uselib 
#define __stub_chflags 
#define __stub_fchflags 
#define __stub_gtty 
#define __stub_revoke 
#define __stub_setlogin 
#define __stub_sigreturn 
#define __stub_stty 
# 9 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/gnu/stubs-64.h" 2 3 4
# 28 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/gnu/stubs.h" 2 3 4
# 516 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/features.h" 2 3 4
# 34 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/libc-header-start.h" 2 3 4



#undef __GLIBC_USE_LIB_EXT2


#define __GLIBC_USE_LIB_EXT2 1
# 67 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/libc-header-start.h" 3 4
#undef __GLIBC_USE_IEC_60559_BFP_EXT

#define __GLIBC_USE_IEC_60559_BFP_EXT 1



#undef __GLIBC_USE_IEC_60559_BFP_EXT_C2X

#define __GLIBC_USE_IEC_60559_BFP_EXT_C2X 1



#undef __GLIBC_USE_IEC_60559_EXT

#define __GLIBC_USE_IEC_60559_EXT 1
# 90 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/libc-header-start.h" 3 4
#undef __GLIBC_USE_IEC_60559_FUNCS_EXT

#define __GLIBC_USE_IEC_60559_FUNCS_EXT 1



#undef __GLIBC_USE_IEC_60559_FUNCS_EXT_C2X

#define __GLIBC_USE_IEC_60559_FUNCS_EXT_C2X 1






#undef __GLIBC_USE_IEC_60559_TYPES_EXT

#define __GLIBC_USE_IEC_60559_TYPES_EXT 1
# 27 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdint.h" 2 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/types.h" 1 3 4
# 24 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/types.h" 3 4
#define _BITS_TYPES_H 1


# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 1 3 4
# 21 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE 64
# 32 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE_TIME64_COMPAT32 0
# 28 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/types.h" 2 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/timesize.h" 1 3 4







# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 1 3 4
# 21 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE 64
# 32 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE_TIME64_COMPAT32 0
# 9 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/timesize.h" 2 3 4
# 27 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/timesize.h" 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/timesize-64.h" 1 3 4
# 20 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/timesize-64.h" 3 4
#define __TIMESIZE 64
# 28 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/timesize.h" 2 3 4
# 29 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/types.h" 2 3 4



# 31 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/types.h" 3 4
typedef unsigned char __u_char;
typedef unsigned short int __u_short;
typedef unsigned int __u_int;
typedef unsigned long int __u_long;


typedef signed char __int8_t;
typedef unsigned char __uint8_t;
typedef signed short int __int16_t;
typedef unsigned short int __uint16_t;
typedef signed int __int32_t;
typedef unsigned int __uint32_t;

typedef signed long int __int64_t;
typedef unsigned long int __uint64_t;






typedef __int8_t __int_least8_t;
typedef __uint8_t __uint_least8_t;
typedef __int16_t __int_least16_t;
typedef __uint16_t __uint_least16_t;
typedef __int32_t __int_least32_t;
typedef __uint32_t __uint_least32_t;
typedef __int64_t __int_least64_t;
typedef __uint64_t __uint_least64_t;



typedef long int __quad_t;
typedef unsigned long int __u_quad_t;







typedef long int __intmax_t;
typedef unsigned long int __uintmax_t;
# 109 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/types.h" 3 4
#define __S16_TYPE short int
#define __U16_TYPE unsigned short int
#define __S32_TYPE int
#define __U32_TYPE unsigned int
#define __SLONGWORD_TYPE long int
#define __ULONGWORD_TYPE unsigned long int
# 128 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/types.h" 3 4
#define __SQUAD_TYPE long int
#define __UQUAD_TYPE unsigned long int
#define __SWORD_TYPE long int
#define __UWORD_TYPE unsigned long int
#define __SLONG32_TYPE int
#define __ULONG32_TYPE unsigned int
#define __S64_TYPE long int
#define __U64_TYPE unsigned long int

#define __STD_TYPE typedef



# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/typesizes.h" 1 3 4







# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 1 3 4
# 21 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE 64
# 32 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE_TIME64_COMPAT32 0
# 9 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/typesizes.h" 2 3 4
# 27 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/typesizes.h" 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/typesizes-64.h" 1 3 4
# 24 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/typesizes-64.h" 3 4
#define _BITS_TYPESIZES_H 1
# 40 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/typesizes-64.h" 3 4
#define __INO_T_TYPE __ULONGWORD_TYPE
#define __OFF_T_TYPE __SLONGWORD_TYPE
#define __RLIM_T_TYPE __ULONGWORD_TYPE
#define __BLKCNT_T_TYPE __SLONGWORD_TYPE
#define __FSBLKCNT_T_TYPE __ULONGWORD_TYPE
#define __FSFILCNT_T_TYPE __ULONGWORD_TYPE
#define __TIME_T_TYPE __SLONGWORD_TYPE
#define __SUSECONDS_T_TYPE __SLONGWORD_TYPE


#define __DEV_T_TYPE __UQUAD_TYPE
#define __UID_T_TYPE __U32_TYPE
#define __GID_T_TYPE __U32_TYPE
#define __INO64_T_TYPE __UQUAD_TYPE
#define __MODE_T_TYPE __U32_TYPE
#define __NLINK_T_TYPE __U32_TYPE
#define __OFF64_T_TYPE __SQUAD_TYPE
#define __PID_T_TYPE __S32_TYPE
#define __RLIM64_T_TYPE __UQUAD_TYPE
#define __BLKCNT64_T_TYPE __SQUAD_TYPE
#define __FSBLKCNT64_T_TYPE __UQUAD_TYPE
#define __FSFILCNT64_T_TYPE __UQUAD_TYPE
#define __FSWORD_T_TYPE __SWORD_TYPE
#define __ID_T_TYPE __U32_TYPE
#define __CLOCK_T_TYPE __SLONGWORD_TYPE
#define __USECONDS_T_TYPE __U32_TYPE
#define __SUSECONDS64_T_TYPE __SQUAD_TYPE
#define __DADDR_T_TYPE __S32_TYPE
#define __KEY_T_TYPE __S32_TYPE
#define __CLOCKID_T_TYPE __S32_TYPE
#define __TIMER_T_TYPE void *
#define __BLKSIZE_T_TYPE __S32_TYPE
#define __FSID_T_TYPE struct { int __val[2]; }
#define __SSIZE_T_TYPE __SWORD_TYPE
#define __SYSCALL_SLONG_TYPE __SLONGWORD_TYPE
#define __SYSCALL_ULONG_TYPE __ULONGWORD_TYPE
#define __CPU_MASK_TYPE __ULONGWORD_TYPE





#define __OFF_T_MATCHES_OFF64_T 1


#define __INO_T_MATCHES_INO64_T 1


#define __RLIM_T_MATCHES_RLIM64_T 1


#define __STATFS_MATCHES_STATFS64 1


#define __KERNEL_OLD_TIMEVAL_MATCHES_TIMEVAL64 (__WORDSIZE == 64)
# 104 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/typesizes-64.h" 3 4
#define __FD_SETSIZE 1024
# 28 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/typesizes.h" 2 3 4
# 142 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/types.h" 2 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/time64.h" 1 3 4
# 24 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/time64.h" 3 4
#define _BITS_TIME64_H 1





#define __TIME64_T_TYPE __TIME_T_TYPE
# 143 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/types.h" 2 3 4


typedef unsigned long int __dev_t;
typedef unsigned int __uid_t;
typedef unsigned int __gid_t;
typedef unsigned long int __ino_t;
typedef unsigned long int __ino64_t;
typedef unsigned int __mode_t;
typedef unsigned int __nlink_t;
typedef long int __off_t;
typedef long int __off64_t;
typedef int __pid_t;
typedef struct { int __val[2]; } __fsid_t;
typedef long int __clock_t;
typedef unsigned long int __rlim_t;
typedef unsigned long int __rlim64_t;
typedef unsigned int __id_t;
typedef long int __time_t;
typedef unsigned int __useconds_t;
typedef long int __suseconds_t;
typedef long int __suseconds64_t;

typedef int __daddr_t;
typedef int __key_t;


typedef int __clockid_t;


typedef void * __timer_t;


typedef int __blksize_t;




typedef long int __blkcnt_t;
typedef long int __blkcnt64_t;


typedef unsigned long int __fsblkcnt_t;
typedef unsigned long int __fsblkcnt64_t;


typedef unsigned long int __fsfilcnt_t;
typedef unsigned long int __fsfilcnt64_t;


typedef long int __fsword_t;

typedef long int __ssize_t;


typedef long int __syscall_slong_t;

typedef unsigned long int __syscall_ulong_t;



typedef __off64_t __loff_t;
typedef char *__caddr_t;


typedef long int __intptr_t;


typedef unsigned int __socklen_t;




typedef int __sig_atomic_t;
# 226 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/types.h" 3 4
#undef __STD_TYPE
# 28 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdint.h" 2 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wchar.h" 1 3 4
# 20 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wchar.h" 3 4
#define _BITS_WCHAR_H 1
# 34 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wchar.h" 3 4
#define __WCHAR_MAX __WCHAR_MAX__







#define __WCHAR_MIN __WCHAR_MIN__
# 29 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdint.h" 2 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 1 3 4
# 21 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE 64
# 32 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE_TIME64_COMPAT32 0
# 30 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdint.h" 2 3 4




# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/stdint-intn.h" 1 3 4
# 20 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/stdint-intn.h" 3 4
#define _BITS_STDINT_INTN_H 1



typedef __int8_t int8_t;
typedef __int16_t int16_t;
typedef __int32_t int32_t;
typedef __int64_t int64_t;
# 35 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdint.h" 2 3 4


# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/stdint-uintn.h" 1 3 4
# 20 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/stdint-uintn.h" 3 4
#define _BITS_STDINT_UINTN_H 1



typedef __uint8_t uint8_t;
typedef __uint16_t uint16_t;
typedef __uint32_t uint32_t;
typedef __uint64_t uint64_t;
# 38 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdint.h" 2 3 4





typedef __int_least8_t int_least8_t;
typedef __int_least16_t int_least16_t;
typedef __int_least32_t int_least32_t;
typedef __int_least64_t int_least64_t;


typedef __uint_least8_t uint_least8_t;
typedef __uint_least16_t uint_least16_t;
typedef __uint_least32_t uint_least32_t;
typedef __uint_least64_t uint_least64_t;





typedef signed char int_fast8_t;

typedef long int int_fast16_t;
typedef long int int_fast32_t;
typedef long int int_fast64_t;
# 71 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdint.h" 3 4
typedef unsigned char uint_fast8_t;

typedef unsigned long int uint_fast16_t;
typedef unsigned long int uint_fast32_t;
typedef unsigned long int uint_fast64_t;
# 87 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdint.h" 3 4
typedef long int intptr_t;
#define __intptr_t_defined 

typedef unsigned long int uintptr_t;
# 101 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdint.h" 3 4
typedef __intmax_t intmax_t;
typedef __uintmax_t uintmax_t;



#define __INT64_C(c) c ## L
#define __UINT64_C(c) c ## UL
# 116 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdint.h" 3 4
#define INT8_MIN (-128)
#define INT16_MIN (-32767-1)
#define INT32_MIN (-2147483647-1)
#define INT64_MIN (-__INT64_C(9223372036854775807)-1)

#define INT8_MAX (127)
#define INT16_MAX (32767)
#define INT32_MAX (2147483647)
#define INT64_MAX (__INT64_C(9223372036854775807))


#define UINT8_MAX (255)
#define UINT16_MAX (65535)
#define UINT32_MAX (4294967295U)
#define UINT64_MAX (__UINT64_C(18446744073709551615))



#define INT_LEAST8_MIN (-128)
#define INT_LEAST16_MIN (-32767-1)
#define INT_LEAST32_MIN (-2147483647-1)
#define INT_LEAST64_MIN (-__INT64_C(9223372036854775807)-1)

#define INT_LEAST8_MAX (127)
#define INT_LEAST16_MAX (32767)
#define INT_LEAST32_MAX (2147483647)
#define INT_LEAST64_MAX (__INT64_C(9223372036854775807))


#define UINT_LEAST8_MAX (255)
#define UINT_LEAST16_MAX (65535)
#define UINT_LEAST32_MAX (4294967295U)
#define UINT_LEAST64_MAX (__UINT64_C(18446744073709551615))



#define INT_FAST8_MIN (-128)

#define INT_FAST16_MIN (-9223372036854775807L-1)
#define INT_FAST32_MIN (-9223372036854775807L-1)




#define INT_FAST64_MIN (-__INT64_C(9223372036854775807)-1)

#define INT_FAST8_MAX (127)

#define INT_FAST16_MAX (9223372036854775807L)
#define INT_FAST32_MAX (9223372036854775807L)




#define INT_FAST64_MAX (__INT64_C(9223372036854775807))


#define UINT_FAST8_MAX (255)

#define UINT_FAST16_MAX (18446744073709551615UL)
#define UINT_FAST32_MAX (18446744073709551615UL)




#define UINT_FAST64_MAX (__UINT64_C(18446744073709551615))




#define INTPTR_MIN (-9223372036854775807L-1)
#define INTPTR_MAX (9223372036854775807L)
#define UINTPTR_MAX (18446744073709551615UL)
# 197 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdint.h" 3 4
#define INTMAX_MIN (-__INT64_C(9223372036854775807)-1)

#define INTMAX_MAX (__INT64_C(9223372036854775807))


#define UINTMAX_MAX (__UINT64_C(18446744073709551615))






#define PTRDIFF_MIN (-9223372036854775807L-1)
#define PTRDIFF_MAX (9223372036854775807L)
# 222 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdint.h" 3 4
#define SIG_ATOMIC_MIN (-2147483647-1)
#define SIG_ATOMIC_MAX (2147483647)



#define SIZE_MAX (18446744073709551615UL)
# 239 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdint.h" 3 4
#define WCHAR_MIN __WCHAR_MIN
#define WCHAR_MAX __WCHAR_MAX



#define WINT_MIN (0u)
#define WINT_MAX (4294967295u)


#define INT8_C(c) c
#define INT16_C(c) c
#define INT32_C(c) c

#define INT64_C(c) c ## L





#define UINT8_C(c) c
#define UINT16_C(c) c
#define UINT32_C(c) c ## U

#define UINT64_C(c) c ## UL






#define INTMAX_C(c) c ## L
#define UINTMAX_C(c) c ## UL







#define INT8_WIDTH 8
#define UINT8_WIDTH 8
#define INT16_WIDTH 16
#define UINT16_WIDTH 16
#define INT32_WIDTH 32
#define UINT32_WIDTH 32
#define INT64_WIDTH 64
#define UINT64_WIDTH 64

#define INT_LEAST8_WIDTH 8
#define UINT_LEAST8_WIDTH 8
#define INT_LEAST16_WIDTH 16
#define UINT_LEAST16_WIDTH 16
#define INT_LEAST32_WIDTH 32
#define UINT_LEAST32_WIDTH 32
#define INT_LEAST64_WIDTH 64
#define UINT_LEAST64_WIDTH 64

#define INT_FAST8_WIDTH 8
#define UINT_FAST8_WIDTH 8
#define INT_FAST16_WIDTH __WORDSIZE
#define UINT_FAST16_WIDTH __WORDSIZE
#define INT_FAST32_WIDTH __WORDSIZE
#define UINT_FAST32_WIDTH __WORDSIZE
#define INT_FAST64_WIDTH 64
#define UINT_FAST64_WIDTH 64

#define INTPTR_WIDTH __WORDSIZE
#define UINTPTR_WIDTH __WORDSIZE

#define INTMAX_WIDTH 64
#define UINTMAX_WIDTH 64

#define PTRDIFF_WIDTH __WORDSIZE
#define SIG_ATOMIC_WIDTH 32
#define SIZE_WIDTH __WORDSIZE
#define WCHAR_WIDTH 32
#define WINT_WIDTH 32
# 70 "../harfbuzz-6.0.0/src/hb-common.h" 2



#define HB_DEPRECATED __attribute__((__deprecated__))







#define HB_DEPRECATED_FOR(f) __attribute__((__deprecated__("Use '" #f "' instead")))








# 89 "../harfbuzz-6.0.0/src/hb-common.h"
extern "C" {







typedef int hb_bool_t;
# 106 "../harfbuzz-6.0.0/src/hb-common.h"
typedef uint32_t hb_codepoint_t;
# 115 "../harfbuzz-6.0.0/src/hb-common.h"
typedef int32_t hb_position_t;






typedef uint32_t hb_mask_t;

typedef union _hb_var_int_t {
  uint32_t u32;
  int32_t i32;
  uint16_t u16[2];
  int16_t i16[2];
  uint8_t u8[4];
  int8_t i8[4];
} hb_var_int_t;

typedef union _hb_var_num_t {
  float f;
  uint32_t u32;
  int32_t i32;
  uint16_t u16[2];
  int16_t i16[2];
  uint8_t u8[4];
  int8_t i8[4];
} hb_var_num_t;
# 157 "../harfbuzz-6.0.0/src/hb-common.h"
typedef uint32_t hb_tag_t;
# 169 "../harfbuzz-6.0.0/src/hb-common.h"
#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
# 180 "../harfbuzz-6.0.0/src/hb-common.h"
#define HB_UNTAG(tag) (uint8_t)(((tag)>>24)&0xFF), (uint8_t)(((tag)>>16)&0xFF), (uint8_t)(((tag)>>8)&0xFF), (uint8_t)((tag)&0xFF)






#define HB_TAG_NONE HB_TAG(0,0,0,0)







#define HB_TAG_MAX HB_TAG(0xff,0xff,0xff,0xff)







#define HB_TAG_MAX_SIGNED HB_TAG(0x7f,0xff,0xff,0xff)


extern hb_tag_t
hb_tag_from_string (const char *str, int len);


extern void
hb_tag_to_string (hb_tag_t tag, char *buf);
# 229 "../harfbuzz-6.0.0/src/hb-common.h"
typedef enum {
  HB_DIRECTION_INVALID = 0,
  HB_DIRECTION_LTR = 4,
  HB_DIRECTION_RTL,
  HB_DIRECTION_TTB,
  HB_DIRECTION_BTT
} hb_direction_t;


extern hb_direction_t
hb_direction_from_string (const char *str, int len);

extern const char *
hb_direction_to_string (hb_direction_t direction);
# 251 "../harfbuzz-6.0.0/src/hb-common.h"
#define HB_DIRECTION_IS_VALID(dir) ((((unsigned int) (dir)) & ~3U) == 4)
# 261 "../harfbuzz-6.0.0/src/hb-common.h"
#define HB_DIRECTION_IS_HORIZONTAL(dir) ((((unsigned int) (dir)) & ~1U) == 4)
# 270 "../harfbuzz-6.0.0/src/hb-common.h"
#define HB_DIRECTION_IS_VERTICAL(dir) ((((unsigned int) (dir)) & ~1U) == 6)
# 279 "../harfbuzz-6.0.0/src/hb-common.h"
#define HB_DIRECTION_IS_FORWARD(dir) ((((unsigned int) (dir)) & ~2U) == 4)
# 288 "../harfbuzz-6.0.0/src/hb-common.h"
#define HB_DIRECTION_IS_BACKWARD(dir) ((((unsigned int) (dir)) & ~2U) == 5)
# 297 "../harfbuzz-6.0.0/src/hb-common.h"
#define HB_DIRECTION_REVERSE(dir) ((hb_direction_t) (((unsigned int) (dir)) ^ 1))
# 309 "../harfbuzz-6.0.0/src/hb-common.h"
typedef const struct hb_language_impl_t *hb_language_t;

extern hb_language_t
hb_language_from_string (const char *str, int len);

extern const char *
hb_language_to_string (hb_language_t language);
# 324 "../harfbuzz-6.0.0/src/hb-common.h"
#define HB_LANGUAGE_INVALID ((hb_language_t) 0)

extern hb_language_t
hb_language_get_default (void);

extern hb_bool_t
hb_language_matches (hb_language_t language,
       hb_language_t specific);
# 510 "../harfbuzz-6.0.0/src/hb-common.h"
typedef enum
{
  HB_SCRIPT_COMMON = ((hb_tag_t)((((uint32_t)('Z')&0xFF)<<24)|(((uint32_t)('y')&0xFF)<<16)|(((uint32_t)('y')&0xFF)<<8)|((uint32_t)('y')&0xFF))),
  HB_SCRIPT_INHERITED = ((hb_tag_t)((((uint32_t)('Z')&0xFF)<<24)|(((uint32_t)('i')&0xFF)<<16)|(((uint32_t)('n')&0xFF)<<8)|((uint32_t)('h')&0xFF))),
  HB_SCRIPT_UNKNOWN = ((hb_tag_t)((((uint32_t)('Z')&0xFF)<<24)|(((uint32_t)('z')&0xFF)<<16)|(((uint32_t)('z')&0xFF)<<8)|((uint32_t)('z')&0xFF))),

  HB_SCRIPT_ARABIC = ((hb_tag_t)((((uint32_t)('A')&0xFF)<<24)|(((uint32_t)('r')&0xFF)<<16)|(((uint32_t)('a')&0xFF)<<8)|((uint32_t)('b')&0xFF))),
  HB_SCRIPT_ARMENIAN = ((hb_tag_t)((((uint32_t)('A')&0xFF)<<24)|(((uint32_t)('r')&0xFF)<<16)|(((uint32_t)('m')&0xFF)<<8)|((uint32_t)('n')&0xFF))),
  HB_SCRIPT_BENGALI = ((hb_tag_t)((((uint32_t)('B')&0xFF)<<24)|(((uint32_t)('e')&0xFF)<<16)|(((uint32_t)('n')&0xFF)<<8)|((uint32_t)('g')&0xFF))),
  HB_SCRIPT_CYRILLIC = ((hb_tag_t)((((uint32_t)('C')&0xFF)<<24)|(((uint32_t)('y')&0xFF)<<16)|(((uint32_t)('r')&0xFF)<<8)|((uint32_t)('l')&0xFF))),
  HB_SCRIPT_DEVANAGARI = ((hb_tag_t)((((uint32_t)('D')&0xFF)<<24)|(((uint32_t)('e')&0xFF)<<16)|(((uint32_t)('v')&0xFF)<<8)|((uint32_t)('a')&0xFF))),
  HB_SCRIPT_GEORGIAN = ((hb_tag_t)((((uint32_t)('G')&0xFF)<<24)|(((uint32_t)('e')&0xFF)<<16)|(((uint32_t)('o')&0xFF)<<8)|((uint32_t)('r')&0xFF))),
  HB_SCRIPT_GREEK = ((hb_tag_t)((((uint32_t)('G')&0xFF)<<24)|(((uint32_t)('r')&0xFF)<<16)|(((uint32_t)('e')&0xFF)<<8)|((uint32_t)('k')&0xFF))),
  HB_SCRIPT_GUJARATI = ((hb_tag_t)((((uint32_t)('G')&0xFF)<<24)|(((uint32_t)('u')&0xFF)<<16)|(((uint32_t)('j')&0xFF)<<8)|((uint32_t)('r')&0xFF))),
  HB_SCRIPT_GURMUKHI = ((hb_tag_t)((((uint32_t)('G')&0xFF)<<24)|(((uint32_t)('u')&0xFF)<<16)|(((uint32_t)('r')&0xFF)<<8)|((uint32_t)('u')&0xFF))),
  HB_SCRIPT_HANGUL = ((hb_tag_t)((((uint32_t)('H')&0xFF)<<24)|(((uint32_t)('a')&0xFF)<<16)|(((uint32_t)('n')&0xFF)<<8)|((uint32_t)('g')&0xFF))),
  HB_SCRIPT_HAN = ((hb_tag_t)((((uint32_t)('H')&0xFF)<<24)|(((uint32_t)('a')&0xFF)<<16)|(((uint32_t)('n')&0xFF)<<8)|((uint32_t)('i')&0xFF))),
  HB_SCRIPT_HEBREW = ((hb_tag_t)((((uint32_t)('H')&0xFF)<<24)|(((uint32_t)('e')&0xFF)<<16)|(((uint32_t)('b')&0xFF)<<8)|((uint32_t)('r')&0xFF))),
  HB_SCRIPT_HIRAGANA = ((hb_tag_t)((((uint32_t)('H')&0xFF)<<24)|(((uint32_t)('i')&0xFF)<<16)|(((uint32_t)('r')&0xFF)<<8)|((uint32_t)('a')&0xFF))),
  HB_SCRIPT_KANNADA = ((hb_tag_t)((((uint32_t)('K')&0xFF)<<24)|(((uint32_t)('n')&0xFF)<<16)|(((uint32_t)('d')&0xFF)<<8)|((uint32_t)('a')&0xFF))),
  HB_SCRIPT_KATAKANA = ((hb_tag_t)((((uint32_t)('K')&0xFF)<<24)|(((uint32_t)('a')&0xFF)<<16)|(((uint32_t)('n')&0xFF)<<8)|((uint32_t)('a')&0xFF))),
  HB_SCRIPT_LAO = ((hb_tag_t)((((uint32_t)('L')&0xFF)<<24)|(((uint32_t)('a')&0xFF)<<16)|(((uint32_t)('o')&0xFF)<<8)|((uint32_t)('o')&0xFF))),
  HB_SCRIPT_LATIN = ((hb_tag_t)((((uint32_t)('L')&0xFF)<<24)|(((uint32_t)('a')&0xFF)<<16)|(((uint32_t)('t')&0xFF)<<8)|((uint32_t)('n')&0xFF))),
  HB_SCRIPT_MALAYALAM = ((hb_tag_t)((((uint32_t)('M')&0xFF)<<24)|(((uint32_t)('l')&0xFF)<<16)|(((uint32_t)('y')&0xFF)<<8)|((uint32_t)('m')&0xFF))),
  HB_SCRIPT_ORIYA = ((hb_tag_t)((((uint32_t)('O')&0xFF)<<24)|(((uint32_t)('r')&0xFF)<<16)|(((uint32_t)('y')&0xFF)<<8)|((uint32_t)('a')&0xFF))),
  HB_SCRIPT_TAMIL = ((hb_tag_t)((((uint32_t)('T')&0xFF)<<24)|(((uint32_t)('a')&0xFF)<<16)|(((uint32_t)('m')&0xFF)<<8)|((uint32_t)('l')&0xFF))),
  HB_SCRIPT_TELUGU = ((hb_tag_t)((((uint32_t)('T')&0xFF)<<24)|(((uint32_t)('e')&0xFF)<<16)|(((uint32_t)('l')&0xFF)<<8)|((uint32_t)('u')&0xFF))),
  HB_SCRIPT_THAI = ((hb_tag_t)((((uint32_t)('T')&0xFF)<<24)|(((uint32_t)('h')&0xFF)<<16)|(((uint32_t)('a')&0xFF)<<8)|((uint32_t)('i')&0xFF))),

  HB_SCRIPT_TIBETAN = ((hb_tag_t)((((uint32_t)('T')&0xFF)<<24)|(((uint32_t)('i')&0xFF)<<16)|(((uint32_t)('b')&0xFF)<<8)|((uint32_t)('t')&0xFF))),

  HB_SCRIPT_BOPOMOFO = ((hb_tag_t)((((uint32_t)('B')&0xFF)<<24)|(((uint32_t)('o')&0xFF)<<16)|(((uint32_t)('p')&0xFF)<<8)|((uint32_t)('o')&0xFF))),
  HB_SCRIPT_BRAILLE = ((hb_tag_t)((((uint32_t)('B')&0xFF)<<24)|(((uint32_t)('r')&0xFF)<<16)|(((uint32_t)('a')&0xFF)<<8)|((uint32_t)('i')&0xFF))),
  HB_SCRIPT_CANADIAN_SYLLABICS = ((hb_tag_t)((((uint32_t)('C')&0xFF)<<24)|(((uint32_t)('a')&0xFF)<<16)|(((uint32_t)('n')&0xFF)<<8)|((uint32_t)('s')&0xFF))),
  HB_SCRIPT_CHEROKEE = ((hb_tag_t)((((uint32_t)('C')&0xFF)<<24)|(((uint32_t)('h')&0xFF)<<16)|(((uint32_t)('e')&0xFF)<<8)|((uint32_t)('r')&0xFF))),
  HB_SCRIPT_ETHIOPIC = ((hb_tag_t)((((uint32_t)('E')&0xFF)<<24)|(((uint32_t)('t')&0xFF)<<16)|(((uint32_t)('h')&0xFF)<<8)|((uint32_t)('i')&0xFF))),
  HB_SCRIPT_KHMER = ((hb_tag_t)((((uint32_t)('K')&0xFF)<<24)|(((uint32_t)('h')&0xFF)<<16)|(((uint32_t)('m')&0xFF)<<8)|((uint32_t)('r')&0xFF))),
  HB_SCRIPT_MONGOLIAN = ((hb_tag_t)((((uint32_t)('M')&0xFF)<<24)|(((uint32_t)('o')&0xFF)<<16)|(((uint32_t)('n')&0xFF)<<8)|((uint32_t)('g')&0xFF))),
  HB_SCRIPT_MYANMAR = ((hb_tag_t)((((uint32_t)('M')&0xFF)<<24)|(((uint32_t)('y')&0xFF)<<16)|(((uint32_t)('m')&0xFF)<<8)|((uint32_t)('r')&0xFF))),
  HB_SCRIPT_OGHAM = ((hb_tag_t)((((uint32_t)('O')&0xFF)<<24)|(((uint32_t)('g')&0xFF)<<16)|(((uint32_t)('a')&0xFF)<<8)|((uint32_t)('m')&0xFF))),
  HB_SCRIPT_RUNIC = ((hb_tag_t)((((uint32_t)('R')&0xFF)<<24)|(((uint32_t)('u')&0xFF)<<16)|(((uint32_t)('n')&0xFF)<<8)|((uint32_t)('r')&0xFF))),
  HB_SCRIPT_SINHALA = ((hb_tag_t)((((uint32_t)('S')&0xFF)<<24)|(((uint32_t)('i')&0xFF)<<16)|(((uint32_t)('n')&0xFF)<<8)|((uint32_t)('h')&0xFF))),
  HB_SCRIPT_SYRIAC = ((hb_tag_t)((((uint32_t)('S')&0xFF)<<24)|(((uint32_t)('y')&0xFF)<<16)|(((uint32_t)('r')&0xFF)<<8)|((uint32_t)('c')&0xFF))),
  HB_SCRIPT_THAANA = ((hb_tag_t)((((uint32_t)('T')&0xFF)<<24)|(((uint32_t)('h')&0xFF)<<16)|(((uint32_t)('a')&0xFF)<<8)|((uint32_t)('a')&0xFF))),
  HB_SCRIPT_YI = ((hb_tag_t)((((uint32_t)('Y')&0xFF)<<24)|(((uint32_t)('i')&0xFF)<<16)|(((uint32_t)('i')&0xFF)<<8)|((uint32_t)('i')&0xFF))),

  HB_SCRIPT_DESERET = ((hb_tag_t)((((uint32_t)('D')&0xFF)<<24)|(((uint32_t)('s')&0xFF)<<16)|(((uint32_t)('r')&0xFF)<<8)|((uint32_t)('t')&0xFF))),
  HB_SCRIPT_GOTHIC = ((hb_tag_t)((((uint32_t)('G')&0xFF)<<24)|(((uint32_t)('o')&0xFF)<<16)|(((uint32_t)('t')&0xFF)<<8)|((uint32_t)('h')&0xFF))),
  HB_SCRIPT_OLD_ITALIC = ((hb_tag_t)((((uint32_t)('I')&0xFF)<<24)|(((uint32_t)('t')&0xFF)<<16)|(((uint32_t)('a')&0xFF)<<8)|((uint32_t)('l')&0xFF))),

  HB_SCRIPT_BUHID = ((hb_tag_t)((((uint32_t)('B')&0xFF)<<24)|(((uint32_t)('u')&0xFF)<<16)|(((uint32_t)('h')&0xFF)<<8)|((uint32_t)('d')&0xFF))),
  HB_SCRIPT_HANUNOO = ((hb_tag_t)((((uint32_t)('H')&0xFF)<<24)|(((uint32_t)('a')&0xFF)<<16)|(((uint32_t)('n')&0xFF)<<8)|((uint32_t)('o')&0xFF))),
  HB_SCRIPT_TAGALOG = ((hb_tag_t)((((uint32_t)('T')&0xFF)<<24)|(((uint32_t)('g')&0xFF)<<16)|(((uint32_t)('l')&0xFF)<<8)|((uint32_t)('g')&0xFF))),
  HB_SCRIPT_TAGBANWA = ((hb_tag_t)((((uint32_t)('T')&0xFF)<<24)|(((uint32_t)('a')&0xFF)<<16)|(((uint32_t)('g')&0xFF)<<8)|((uint32_t)('b')&0xFF))),

  HB_SCRIPT_CYPRIOT = ((hb_tag_t)((((uint32_t)('C')&0xFF)<<24)|(((uint32_t)('p')&0xFF)<<16)|(((uint32_t)('r')&0xFF)<<8)|((uint32_t)('t')&0xFF))),
  HB_SCRIPT_LIMBU = ((hb_tag_t)((((uint32_t)('L')&0xFF)<<24)|(((uint32_t)('i')&0xFF)<<16)|(((uint32_t)('m')&0xFF)<<8)|((uint32_t)('b')&0xFF))),
  HB_SCRIPT_LINEAR_B = ((hb_tag_t)((((uint32_t)('L')&0xFF)<<24)|(((uint32_t)('i')&0xFF)<<16)|(((uint32_t)('n')&0xFF)<<8)|((uint32_t)('b')&0xFF))),
  HB_SCRIPT_OSMANYA = ((hb_tag_t)((((uint32_t)('O')&0xFF)<<24)|(((uint32_t)('s')&0xFF)<<16)|(((uint32_t)('m')&0xFF)<<8)|((uint32_t)('a')&0xFF))),
  HB_SCRIPT_SHAVIAN = ((hb_tag_t)((((uint32_t)('S')&0xFF)<<24)|(((uint32_t)('h')&0xFF)<<16)|(((uint32_t)('a')&0xFF)<<8)|((uint32_t)('w')&0xFF))),
  HB_SCRIPT_TAI_LE = ((hb_tag_t)((((uint32_t)('T')&0xFF)<<24)|(((uint32_t)('a')&0xFF)<<16)|(((uint32_t)('l')&0xFF)<<8)|((uint32_t)('e')&0xFF))),
  HB_SCRIPT_UGARITIC = ((hb_tag_t)((((uint32_t)('U')&0xFF)<<24)|(((uint32_t)('g')&0xFF)<<16)|(((uint32_t)('a')&0xFF)<<8)|((uint32_t)('r')&0xFF))),

  HB_SCRIPT_BUGINESE = ((hb_tag_t)((((uint32_t)('B')&0xFF)<<24)|(((uint32_t)('u')&0xFF)<<16)|(((uint32_t)('g')&0xFF)<<8)|((uint32_t)('i')&0xFF))),
  HB_SCRIPT_COPTIC = ((hb_tag_t)((((uint32_t)('C')&0xFF)<<24)|(((uint32_t)('o')&0xFF)<<16)|(((uint32_t)('p')&0xFF)<<8)|((uint32_t)('t')&0xFF))),
  HB_SCRIPT_GLAGOLITIC = ((hb_tag_t)((((uint32_t)('G')&0xFF)<<24)|(((uint32_t)('l')&0xFF)<<16)|(((uint32_t)('a')&0xFF)<<8)|((uint32_t)('g')&0xFF))),
  HB_SCRIPT_KHAROSHTHI = ((hb_tag_t)((((uint32_t)('K')&0xFF)<<24)|(((uint32_t)('h')&0xFF)<<16)|(((uint32_t)('a')&0xFF)<<8)|((uint32_t)('r')&0xFF))),
  HB_SCRIPT_NEW_TAI_LUE = ((hb_tag_t)((((uint32_t)('T')&0xFF)<<24)|(((uint32_t)('a')&0xFF)<<16)|(((uint32_t)('l')&0xFF)<<8)|((uint32_t)('u')&0xFF))),
  HB_SCRIPT_OLD_PERSIAN = ((hb_tag_t)((((uint32_t)('X')&0xFF)<<24)|(((uint32_t)('p')&0xFF)<<16)|(((uint32_t)('e')&0xFF)<<8)|((uint32_t)('o')&0xFF))),
  HB_SCRIPT_SYLOTI_NAGRI = ((hb_tag_t)((((uint32_t)('S')&0xFF)<<24)|(((uint32_t)('y')&0xFF)<<16)|(((uint32_t)('l')&0xFF)<<8)|((uint32_t)('o')&0xFF))),
  HB_SCRIPT_TIFINAGH = ((hb_tag_t)((((uint32_t)('T')&0xFF)<<24)|(((uint32_t)('f')&0xFF)<<16)|(((uint32_t)('n')&0xFF)<<8)|((uint32_t)('g')&0xFF))),

  HB_SCRIPT_BALINESE = ((hb_tag_t)((((uint32_t)('B')&0xFF)<<24)|(((uint32_t)('a')&0xFF)<<16)|(((uint32_t)('l')&0xFF)<<8)|((uint32_t)('i')&0xFF))),
  HB_SCRIPT_CUNEIFORM = ((hb_tag_t)((((uint32_t)('X')&0xFF)<<24)|(((uint32_t)('s')&0xFF)<<16)|(((uint32_t)('u')&0xFF)<<8)|((uint32_t)('x')&0xFF))),
  HB_SCRIPT_NKO = ((hb_tag_t)((((uint32_t)('N')&0xFF)<<24)|(((uint32_t)('k')&0xFF)<<16)|(((uint32_t)('o')&0xFF)<<8)|((uint32_t)('o')&0xFF))),
  HB_SCRIPT_PHAGS_PA = ((hb_tag_t)((((uint32_t)('P')&0xFF)<<24)|(((uint32_t)('h')&0xFF)<<16)|(((uint32_t)('a')&0xFF)<<8)|((uint32_t)('g')&0xFF))),
  HB_SCRIPT_PHOENICIAN = ((hb_tag_t)((((uint32_t)('P')&0xFF)<<24)|(((uint32_t)('h')&0xFF)<<16)|(((uint32_t)('n')&0xFF)<<8)|((uint32_t)('x')&0xFF))),

  HB_SCRIPT_CARIAN = ((hb_tag_t)((((uint32_t)('C')&0xFF)<<24)|(((uint32_t)('a')&0xFF)<<16)|(((uint32_t)('r')&0xFF)<<8)|((uint32_t)('i')&0xFF))),
  HB_SCRIPT_CHAM = ((hb_tag_t)((((uint32_t)('C')&0xFF)<<24)|(((uint32_t)('h')&0xFF)<<16)|(((uint32_t)('a')&0xFF)<<8)|((uint32_t)('m')&0xFF))),
  HB_SCRIPT_KAYAH_LI = ((hb_tag_t)((((uint32_t)('K')&0xFF)<<24)|(((uint32_t)('a')&0xFF)<<16)|(((uint32_t)('l')&0xFF)<<8)|((uint32_t)('i')&0xFF))),
  HB_SCRIPT_LEPCHA = ((hb_tag_t)((((uint32_t)('L')&0xFF)<<24)|(((uint32_t)('e')&0xFF)<<16)|(((uint32_t)('p')&0xFF)<<8)|((uint32_t)('c')&0xFF))),
  HB_SCRIPT_LYCIAN = ((hb_tag_t)((((uint32_t)('L')&0xFF)<<24)|(((uint32_t)('y')&0xFF)<<16)|(((uint32_t)('c')&0xFF)<<8)|((uint32_t)('i')&0xFF))),
  HB_SCRIPT_LYDIAN = ((hb_tag_t)((((uint32_t)('L')&0xFF)<<24)|(((uint32_t)('y')&0xFF)<<16)|(((uint32_t)('d')&0xFF)<<8)|((uint32_t)('i')&0xFF))),
  HB_SCRIPT_OL_CHIKI = ((hb_tag_t)((((uint32_t)('O')&0xFF)<<24)|(((uint32_t)('l')&0xFF)<<16)|(((uint32_t)('c')&0xFF)<<8)|((uint32_t)('k')&0xFF))),
  HB_SCRIPT_REJANG = ((hb_tag_t)((((uint32_t)('R')&0xFF)<<24)|(((uint32_t)('j')&0xFF)<<16)|(((uint32_t)('n')&0xFF)<<8)|((uint32_t)('g')&0xFF))),
  HB_SCRIPT_SAURASHTRA = ((hb_tag_t)((((uint32_t)('S')&0xFF)<<24)|(((uint32_t)('a')&0xFF)<<16)|(((uint32_t)('u')&0xFF)<<8)|((uint32_t)('r')&0xFF))),
  HB_SCRIPT_SUNDANESE = ((hb_tag_t)((((uint32_t)('S')&0xFF)<<24)|(((uint32_t)('u')&0xFF)<<16)|(((uint32_t)('n')&0xFF)<<8)|((uint32_t)('d')&0xFF))),
  HB_SCRIPT_VAI = ((hb_tag_t)((((uint32_t)('V')&0xFF)<<24)|(((uint32_t)('a')&0xFF)<<16)|(((uint32_t)('i')&0xFF)<<8)|((uint32_t)('i')&0xFF))),

  HB_SCRIPT_AVESTAN = ((hb_tag_t)((((uint32_t)('A')&0xFF)<<24)|(((uint32_t)('v')&0xFF)<<16)|(((uint32_t)('s')&0xFF)<<8)|((uint32_t)('t')&0xFF))),
  HB_SCRIPT_BAMUM = ((hb_tag_t)((((uint32_t)('B')&0xFF)<<24)|(((uint32_t)('a')&0xFF)<<16)|(((uint32_t)('m')&0xFF)<<8)|((uint32_t)('u')&0xFF))),
  HB_SCRIPT_EGYPTIAN_HIEROGLYPHS = ((hb_tag_t)((((uint32_t)('E')&0xFF)<<24)|(((uint32_t)('g')&0xFF)<<16)|(((uint32_t)('y')&0xFF)<<8)|((uint32_t)('p')&0xFF))),
  HB_SCRIPT_IMPERIAL_ARAMAIC = ((hb_tag_t)((((uint32_t)('A')&0xFF)<<24)|(((uint32_t)('r')&0xFF)<<16)|(((uint32_t)('m')&0xFF)<<8)|((uint32_t)('i')&0xFF))),
  HB_SCRIPT_INSCRIPTIONAL_PAHLAVI = ((hb_tag_t)((((uint32_t)('P')&0xFF)<<24)|(((uint32_t)('h')&0xFF)<<16)|(((uint32_t)('l')&0xFF)<<8)|((uint32_t)('i')&0xFF))),
  HB_SCRIPT_INSCRIPTIONAL_PARTHIAN = ((hb_tag_t)((((uint32_t)('P')&0xFF)<<24)|(((uint32_t)('r')&0xFF)<<16)|(((uint32_t)('t')&0xFF)<<8)|((uint32_t)('i')&0xFF))),
  HB_SCRIPT_JAVANESE = ((hb_tag_t)((((uint32_t)('J')&0xFF)<<24)|(((uint32_t)('a')&0xFF)<<16)|(((uint32_t)('v')&0xFF)<<8)|((uint32_t)('a')&0xFF))),
  HB_SCRIPT_KAITHI = ((hb_tag_t)((((uint32_t)('K')&0xFF)<<24)|(((uint32_t)('t')&0xFF)<<16)|(((uint32_t)('h')&0xFF)<<8)|((uint32_t)('i')&0xFF))),
  HB_SCRIPT_LISU = ((hb_tag_t)((((uint32_t)('L')&0xFF)<<24)|(((uint32_t)('i')&0xFF)<<16)|(((uint32_t)('s')&0xFF)<<8)|((uint32_t)('u')&0xFF))),
  HB_SCRIPT_MEETEI_MAYEK = ((hb_tag_t)((((uint32_t)('M')&0xFF)<<24)|(((uint32_t)('t')&0xFF)<<16)|(((uint32_t)('e')&0xFF)<<8)|((uint32_t)('i')&0xFF))),
  HB_SCRIPT_OLD_SOUTH_ARABIAN = ((hb_tag_t)((((uint32_t)('S')&0xFF)<<24)|(((uint32_t)('a')&0xFF)<<16)|(((uint32_t)('r')&0xFF)<<8)|((uint32_t)('b')&0xFF))),
  HB_SCRIPT_OLD_TURKIC = ((hb_tag_t)((((uint32_t)('O')&0xFF)<<24)|(((uint32_t)('r')&0xFF)<<16)|(((uint32_t)('k')&0xFF)<<8)|((uint32_t)('h')&0xFF))),
  HB_SCRIPT_SAMARITAN = ((hb_tag_t)((((uint32_t)('S')&0xFF)<<24)|(((uint32_t)('a')&0xFF)<<16)|(((uint32_t)('m')&0xFF)<<8)|((uint32_t)('r')&0xFF))),
  HB_SCRIPT_TAI_THAM = ((hb_tag_t)((((uint32_t)('L')&0xFF)<<24)|(((uint32_t)('a')&0xFF)<<16)|(((uint32_t)('n')&0xFF)<<8)|((uint32_t)('a')&0xFF))),
  HB_SCRIPT_TAI_VIET = ((hb_tag_t)((((uint32_t)('T')&0xFF)<<24)|(((uint32_t)('a')&0xFF)<<16)|(((uint32_t)('v')&0xFF)<<8)|((uint32_t)('t')&0xFF))),

  HB_SCRIPT_BATAK = ((hb_tag_t)((((uint32_t)('B')&0xFF)<<24)|(((uint32_t)('a')&0xFF)<<16)|(((uint32_t)('t')&0xFF)<<8)|((uint32_t)('k')&0xFF))),
  HB_SCRIPT_BRAHMI = ((hb_tag_t)((((uint32_t)('B')&0xFF)<<24)|(((uint32_t)('r')&0xFF)<<16)|(((uint32_t)('a')&0xFF)<<8)|((uint32_t)('h')&0xFF))),
  HB_SCRIPT_MANDAIC = ((hb_tag_t)((((uint32_t)('M')&0xFF)<<24)|(((uint32_t)('a')&0xFF)<<16)|(((uint32_t)('n')&0xFF)<<8)|((uint32_t)('d')&0xFF))),

  HB_SCRIPT_CHAKMA = ((hb_tag_t)((((uint32_t)('C')&0xFF)<<24)|(((uint32_t)('a')&0xFF)<<16)|(((uint32_t)('k')&0xFF)<<8)|((uint32_t)('m')&0xFF))),
  HB_SCRIPT_MEROITIC_CURSIVE = ((hb_tag_t)((((uint32_t)('M')&0xFF)<<24)|(((uint32_t)('e')&0xFF)<<16)|(((uint32_t)('r')&0xFF)<<8)|((uint32_t)('c')&0xFF))),
  HB_SCRIPT_MEROITIC_HIEROGLYPHS = ((hb_tag_t)((((uint32_t)('M')&0xFF)<<24)|(((uint32_t)('e')&0xFF)<<16)|(((uint32_t)('r')&0xFF)<<8)|((uint32_t)('o')&0xFF))),
  HB_SCRIPT_MIAO = ((hb_tag_t)((((uint32_t)('P')&0xFF)<<24)|(((uint32_t)('l')&0xFF)<<16)|(((uint32_t)('r')&0xFF)<<8)|((uint32_t)('d')&0xFF))),
  HB_SCRIPT_SHARADA = ((hb_tag_t)((((uint32_t)('S')&0xFF)<<24)|(((uint32_t)('h')&0xFF)<<16)|(((uint32_t)('r')&0xFF)<<8)|((uint32_t)('d')&0xFF))),
  HB_SCRIPT_SORA_SOMPENG = ((hb_tag_t)((((uint32_t)('S')&0xFF)<<24)|(((uint32_t)('o')&0xFF)<<16)|(((uint32_t)('r')&0xFF)<<8)|((uint32_t)('a')&0xFF))),
  HB_SCRIPT_TAKRI = ((hb_tag_t)((((uint32_t)('T')&0xFF)<<24)|(((uint32_t)('a')&0xFF)<<16)|(((uint32_t)('k')&0xFF)<<8)|((uint32_t)('r')&0xFF))),




  HB_SCRIPT_BASSA_VAH = ((hb_tag_t)((((uint32_t)('B')&0xFF)<<24)|(((uint32_t)('a')&0xFF)<<16)|(((uint32_t)('s')&0xFF)<<8)|((uint32_t)('s')&0xFF))),
  HB_SCRIPT_CAUCASIAN_ALBANIAN = ((hb_tag_t)((((uint32_t)('A')&0xFF)<<24)|(((uint32_t)('g')&0xFF)<<16)|(((uint32_t)('h')&0xFF)<<8)|((uint32_t)('b')&0xFF))),
  HB_SCRIPT_DUPLOYAN = ((hb_tag_t)((((uint32_t)('D')&0xFF)<<24)|(((uint32_t)('u')&0xFF)<<16)|(((uint32_t)('p')&0xFF)<<8)|((uint32_t)('l')&0xFF))),
  HB_SCRIPT_ELBASAN = ((hb_tag_t)((((uint32_t)('E')&0xFF)<<24)|(((uint32_t)('l')&0xFF)<<16)|(((uint32_t)('b')&0xFF)<<8)|((uint32_t)('a')&0xFF))),
  HB_SCRIPT_GRANTHA = ((hb_tag_t)((((uint32_t)('G')&0xFF)<<24)|(((uint32_t)('r')&0xFF)<<16)|(((uint32_t)('a')&0xFF)<<8)|((uint32_t)('n')&0xFF))),
  HB_SCRIPT_KHOJKI = ((hb_tag_t)((((uint32_t)('K')&0xFF)<<24)|(((uint32_t)('h')&0xFF)<<16)|(((uint32_t)('o')&0xFF)<<8)|((uint32_t)('j')&0xFF))),
  HB_SCRIPT_KHUDAWADI = ((hb_tag_t)((((uint32_t)('S')&0xFF)<<24)|(((uint32_t)('i')&0xFF)<<16)|(((uint32_t)('n')&0xFF)<<8)|((uint32_t)('d')&0xFF))),
  HB_SCRIPT_LINEAR_A = ((hb_tag_t)((((uint32_t)('L')&0xFF)<<24)|(((uint32_t)('i')&0xFF)<<16)|(((uint32_t)('n')&0xFF)<<8)|((uint32_t)('a')&0xFF))),
  HB_SCRIPT_MAHAJANI = ((hb_tag_t)((((uint32_t)('M')&0xFF)<<24)|(((uint32_t)('a')&0xFF)<<16)|(((uint32_t)('h')&0xFF)<<8)|((uint32_t)('j')&0xFF))),
  HB_SCRIPT_MANICHAEAN = ((hb_tag_t)((((uint32_t)('M')&0xFF)<<24)|(((uint32_t)('a')&0xFF)<<16)|(((uint32_t)('n')&0xFF)<<8)|((uint32_t)('i')&0xFF))),
  HB_SCRIPT_MENDE_KIKAKUI = ((hb_tag_t)((((uint32_t)('M')&0xFF)<<24)|(((uint32_t)('e')&0xFF)<<16)|(((uint32_t)('n')&0xFF)<<8)|((uint32_t)('d')&0xFF))),
  HB_SCRIPT_MODI = ((hb_tag_t)((((uint32_t)('M')&0xFF)<<24)|(((uint32_t)('o')&0xFF)<<16)|(((uint32_t)('d')&0xFF)<<8)|((uint32_t)('i')&0xFF))),
  HB_SCRIPT_MRO = ((hb_tag_t)((((uint32_t)('M')&0xFF)<<24)|(((uint32_t)('r')&0xFF)<<16)|(((uint32_t)('o')&0xFF)<<8)|((uint32_t)('o')&0xFF))),
  HB_SCRIPT_NABATAEAN = ((hb_tag_t)((((uint32_t)('N')&0xFF)<<24)|(((uint32_t)('b')&0xFF)<<16)|(((uint32_t)('a')&0xFF)<<8)|((uint32_t)('t')&0xFF))),
  HB_SCRIPT_OLD_NORTH_ARABIAN = ((hb_tag_t)((((uint32_t)('N')&0xFF)<<24)|(((uint32_t)('a')&0xFF)<<16)|(((uint32_t)('r')&0xFF)<<8)|((uint32_t)('b')&0xFF))),
  HB_SCRIPT_OLD_PERMIC = ((hb_tag_t)((((uint32_t)('P')&0xFF)<<24)|(((uint32_t)('e')&0xFF)<<16)|(((uint32_t)('r')&0xFF)<<8)|((uint32_t)('m')&0xFF))),
  HB_SCRIPT_PAHAWH_HMONG = ((hb_tag_t)((((uint32_t)('H')&0xFF)<<24)|(((uint32_t)('m')&0xFF)<<16)|(((uint32_t)('n')&0xFF)<<8)|((uint32_t)('g')&0xFF))),
  HB_SCRIPT_PALMYRENE = ((hb_tag_t)((((uint32_t)('P')&0xFF)<<24)|(((uint32_t)('a')&0xFF)<<16)|(((uint32_t)('l')&0xFF)<<8)|((uint32_t)('m')&0xFF))),
  HB_SCRIPT_PAU_CIN_HAU = ((hb_tag_t)((((uint32_t)('P')&0xFF)<<24)|(((uint32_t)('a')&0xFF)<<16)|(((uint32_t)('u')&0xFF)<<8)|((uint32_t)('c')&0xFF))),
  HB_SCRIPT_PSALTER_PAHLAVI = ((hb_tag_t)((((uint32_t)('P')&0xFF)<<24)|(((uint32_t)('h')&0xFF)<<16)|(((uint32_t)('l')&0xFF)<<8)|((uint32_t)('p')&0xFF))),
  HB_SCRIPT_SIDDHAM = ((hb_tag_t)((((uint32_t)('S')&0xFF)<<24)|(((uint32_t)('i')&0xFF)<<16)|(((uint32_t)('d')&0xFF)<<8)|((uint32_t)('d')&0xFF))),
  HB_SCRIPT_TIRHUTA = ((hb_tag_t)((((uint32_t)('T')&0xFF)<<24)|(((uint32_t)('i')&0xFF)<<16)|(((uint32_t)('r')&0xFF)<<8)|((uint32_t)('h')&0xFF))),
  HB_SCRIPT_WARANG_CITI = ((hb_tag_t)((((uint32_t)('W')&0xFF)<<24)|(((uint32_t)('a')&0xFF)<<16)|(((uint32_t)('r')&0xFF)<<8)|((uint32_t)('a')&0xFF))),

  HB_SCRIPT_AHOM = ((hb_tag_t)((((uint32_t)('A')&0xFF)<<24)|(((uint32_t)('h')&0xFF)<<16)|(((uint32_t)('o')&0xFF)<<8)|((uint32_t)('m')&0xFF))),
  HB_SCRIPT_ANATOLIAN_HIEROGLYPHS = ((hb_tag_t)((((uint32_t)('H')&0xFF)<<24)|(((uint32_t)('l')&0xFF)<<16)|(((uint32_t)('u')&0xFF)<<8)|((uint32_t)('w')&0xFF))),
  HB_SCRIPT_HATRAN = ((hb_tag_t)((((uint32_t)('H')&0xFF)<<24)|(((uint32_t)('a')&0xFF)<<16)|(((uint32_t)('t')&0xFF)<<8)|((uint32_t)('r')&0xFF))),
  HB_SCRIPT_MULTANI = ((hb_tag_t)((((uint32_t)('M')&0xFF)<<24)|(((uint32_t)('u')&0xFF)<<16)|(((uint32_t)('l')&0xFF)<<8)|((uint32_t)('t')&0xFF))),
  HB_SCRIPT_OLD_HUNGARIAN = ((hb_tag_t)((((uint32_t)('H')&0xFF)<<24)|(((uint32_t)('u')&0xFF)<<16)|(((uint32_t)('n')&0xFF)<<8)|((uint32_t)('g')&0xFF))),
  HB_SCRIPT_SIGNWRITING = ((hb_tag_t)((((uint32_t)('S')&0xFF)<<24)|(((uint32_t)('g')&0xFF)<<16)|(((uint32_t)('n')&0xFF)<<8)|((uint32_t)('w')&0xFF))),




  HB_SCRIPT_ADLAM = ((hb_tag_t)((((uint32_t)('A')&0xFF)<<24)|(((uint32_t)('d')&0xFF)<<16)|(((uint32_t)('l')&0xFF)<<8)|((uint32_t)('m')&0xFF))),
  HB_SCRIPT_BHAIKSUKI = ((hb_tag_t)((((uint32_t)('B')&0xFF)<<24)|(((uint32_t)('h')&0xFF)<<16)|(((uint32_t)('k')&0xFF)<<8)|((uint32_t)('s')&0xFF))),
  HB_SCRIPT_MARCHEN = ((hb_tag_t)((((uint32_t)('M')&0xFF)<<24)|(((uint32_t)('a')&0xFF)<<16)|(((uint32_t)('r')&0xFF)<<8)|((uint32_t)('c')&0xFF))),
  HB_SCRIPT_OSAGE = ((hb_tag_t)((((uint32_t)('O')&0xFF)<<24)|(((uint32_t)('s')&0xFF)<<16)|(((uint32_t)('g')&0xFF)<<8)|((uint32_t)('e')&0xFF))),
  HB_SCRIPT_TANGUT = ((hb_tag_t)((((uint32_t)('T')&0xFF)<<24)|(((uint32_t)('a')&0xFF)<<16)|(((uint32_t)('n')&0xFF)<<8)|((uint32_t)('g')&0xFF))),
  HB_SCRIPT_NEWA = ((hb_tag_t)((((uint32_t)('N')&0xFF)<<24)|(((uint32_t)('e')&0xFF)<<16)|(((uint32_t)('w')&0xFF)<<8)|((uint32_t)('a')&0xFF))),




  HB_SCRIPT_MASARAM_GONDI = ((hb_tag_t)((((uint32_t)('G')&0xFF)<<24)|(((uint32_t)('o')&0xFF)<<16)|(((uint32_t)('n')&0xFF)<<8)|((uint32_t)('m')&0xFF))),
  HB_SCRIPT_NUSHU = ((hb_tag_t)((((uint32_t)('N')&0xFF)<<24)|(((uint32_t)('s')&0xFF)<<16)|(((uint32_t)('h')&0xFF)<<8)|((uint32_t)('u')&0xFF))),
  HB_SCRIPT_SOYOMBO = ((hb_tag_t)((((uint32_t)('S')&0xFF)<<24)|(((uint32_t)('o')&0xFF)<<16)|(((uint32_t)('y')&0xFF)<<8)|((uint32_t)('o')&0xFF))),
  HB_SCRIPT_ZANABAZAR_SQUARE = ((hb_tag_t)((((uint32_t)('Z')&0xFF)<<24)|(((uint32_t)('a')&0xFF)<<16)|(((uint32_t)('n')&0xFF)<<8)|((uint32_t)('b')&0xFF))),




  HB_SCRIPT_DOGRA = ((hb_tag_t)((((uint32_t)('D')&0xFF)<<24)|(((uint32_t)('o')&0xFF)<<16)|(((uint32_t)('g')&0xFF)<<8)|((uint32_t)('r')&0xFF))),
  HB_SCRIPT_GUNJALA_GONDI = ((hb_tag_t)((((uint32_t)('G')&0xFF)<<24)|(((uint32_t)('o')&0xFF)<<16)|(((uint32_t)('n')&0xFF)<<8)|((uint32_t)('g')&0xFF))),
  HB_SCRIPT_HANIFI_ROHINGYA = ((hb_tag_t)((((uint32_t)('R')&0xFF)<<24)|(((uint32_t)('o')&0xFF)<<16)|(((uint32_t)('h')&0xFF)<<8)|((uint32_t)('g')&0xFF))),
  HB_SCRIPT_MAKASAR = ((hb_tag_t)((((uint32_t)('M')&0xFF)<<24)|(((uint32_t)('a')&0xFF)<<16)|(((uint32_t)('k')&0xFF)<<8)|((uint32_t)('a')&0xFF))),
  HB_SCRIPT_MEDEFAIDRIN = ((hb_tag_t)((((uint32_t)('M')&0xFF)<<24)|(((uint32_t)('e')&0xFF)<<16)|(((uint32_t)('d')&0xFF)<<8)|((uint32_t)('f')&0xFF))),
  HB_SCRIPT_OLD_SOGDIAN = ((hb_tag_t)((((uint32_t)('S')&0xFF)<<24)|(((uint32_t)('o')&0xFF)<<16)|(((uint32_t)('g')&0xFF)<<8)|((uint32_t)('o')&0xFF))),
  HB_SCRIPT_SOGDIAN = ((hb_tag_t)((((uint32_t)('S')&0xFF)<<24)|(((uint32_t)('o')&0xFF)<<16)|(((uint32_t)('g')&0xFF)<<8)|((uint32_t)('d')&0xFF))),




  HB_SCRIPT_ELYMAIC = ((hb_tag_t)((((uint32_t)('E')&0xFF)<<24)|(((uint32_t)('l')&0xFF)<<16)|(((uint32_t)('y')&0xFF)<<8)|((uint32_t)('m')&0xFF))),
  HB_SCRIPT_NANDINAGARI = ((hb_tag_t)((((uint32_t)('N')&0xFF)<<24)|(((uint32_t)('a')&0xFF)<<16)|(((uint32_t)('n')&0xFF)<<8)|((uint32_t)('d')&0xFF))),
  HB_SCRIPT_NYIAKENG_PUACHUE_HMONG = ((hb_tag_t)((((uint32_t)('H')&0xFF)<<24)|(((uint32_t)('m')&0xFF)<<16)|(((uint32_t)('n')&0xFF)<<8)|((uint32_t)('p')&0xFF))),
  HB_SCRIPT_WANCHO = ((hb_tag_t)((((uint32_t)('W')&0xFF)<<24)|(((uint32_t)('c')&0xFF)<<16)|(((uint32_t)('h')&0xFF)<<8)|((uint32_t)('o')&0xFF))),




  HB_SCRIPT_CHORASMIAN = ((hb_tag_t)((((uint32_t)('C')&0xFF)<<24)|(((uint32_t)('h')&0xFF)<<16)|(((uint32_t)('r')&0xFF)<<8)|((uint32_t)('s')&0xFF))),
  HB_SCRIPT_DIVES_AKURU = ((hb_tag_t)((((uint32_t)('D')&0xFF)<<24)|(((uint32_t)('i')&0xFF)<<16)|(((uint32_t)('a')&0xFF)<<8)|((uint32_t)('k')&0xFF))),
  HB_SCRIPT_KHITAN_SMALL_SCRIPT = ((hb_tag_t)((((uint32_t)('K')&0xFF)<<24)|(((uint32_t)('i')&0xFF)<<16)|(((uint32_t)('t')&0xFF)<<8)|((uint32_t)('s')&0xFF))),
  HB_SCRIPT_YEZIDI = ((hb_tag_t)((((uint32_t)('Y')&0xFF)<<24)|(((uint32_t)('e')&0xFF)<<16)|(((uint32_t)('z')&0xFF)<<8)|((uint32_t)('i')&0xFF))),




  HB_SCRIPT_CYPRO_MINOAN = ((hb_tag_t)((((uint32_t)('C')&0xFF)<<24)|(((uint32_t)('p')&0xFF)<<16)|(((uint32_t)('m')&0xFF)<<8)|((uint32_t)('n')&0xFF))),
  HB_SCRIPT_OLD_UYGHUR = ((hb_tag_t)((((uint32_t)('O')&0xFF)<<24)|(((uint32_t)('u')&0xFF)<<16)|(((uint32_t)('g')&0xFF)<<8)|((uint32_t)('r')&0xFF))),
  HB_SCRIPT_TANGSA = ((hb_tag_t)((((uint32_t)('T')&0xFF)<<24)|(((uint32_t)('n')&0xFF)<<16)|(((uint32_t)('s')&0xFF)<<8)|((uint32_t)('a')&0xFF))),
  HB_SCRIPT_TOTO = ((hb_tag_t)((((uint32_t)('T')&0xFF)<<24)|(((uint32_t)('o')&0xFF)<<16)|(((uint32_t)('t')&0xFF)<<8)|((uint32_t)('o')&0xFF))),
  HB_SCRIPT_VITHKUQI = ((hb_tag_t)((((uint32_t)('V')&0xFF)<<24)|(((uint32_t)('i')&0xFF)<<16)|(((uint32_t)('t')&0xFF)<<8)|((uint32_t)('h')&0xFF))),




  HB_SCRIPT_MATH = ((hb_tag_t)((((uint32_t)('Z')&0xFF)<<24)|(((uint32_t)('m')&0xFF)<<16)|(((uint32_t)('t')&0xFF)<<8)|((uint32_t)('h')&0xFF))),




  HB_SCRIPT_KAWI = ((hb_tag_t)((((uint32_t)('K')&0xFF)<<24)|(((uint32_t)('a')&0xFF)<<16)|(((uint32_t)('w')&0xFF)<<8)|((uint32_t)('i')&0xFF))),
  HB_SCRIPT_NAG_MUNDARI = ((hb_tag_t)((((uint32_t)('N')&0xFF)<<24)|(((uint32_t)('a')&0xFF)<<16)|(((uint32_t)('g')&0xFF)<<8)|((uint32_t)('m')&0xFF))),


  HB_SCRIPT_INVALID = ((hb_tag_t)((((uint32_t)(0)&0xFF)<<24)|(((uint32_t)(0)&0xFF)<<16)|(((uint32_t)(0)&0xFF)<<8)|((uint32_t)(0)&0xFF))),
# 741 "../harfbuzz-6.0.0/src/hb-common.h"
  _HB_SCRIPT_MAX_VALUE = ((hb_tag_t)((((uint32_t)(0x7f)&0xFF)<<24)|(((uint32_t)(0xff)&0xFF)<<16)|(((uint32_t)(0xff)&0xFF)<<8)|((uint32_t)(0xff)&0xFF))),
  _HB_SCRIPT_MAX_VALUE_SIGNED = ((hb_tag_t)((((uint32_t)(0x7f)&0xFF)<<24)|(((uint32_t)(0xff)&0xFF)<<16)|(((uint32_t)(0xff)&0xFF)<<8)|((uint32_t)(0xff)&0xFF)))

} hb_script_t;




extern hb_script_t
hb_script_from_iso15924_tag (hb_tag_t tag);

extern hb_script_t
hb_script_from_string (const char *str, int len);

extern hb_tag_t
hb_script_to_iso15924_tag (hb_script_t script);

extern hb_direction_t
hb_script_get_horizontal_direction (hb_script_t script);
# 770 "../harfbuzz-6.0.0/src/hb-common.h"
typedef struct hb_user_data_key_t {

  char unused;
} hb_user_data_key_t;
# 782 "../harfbuzz-6.0.0/src/hb-common.h"
typedef void (*hb_destroy_func_t) (void *user_data);
# 795 "../harfbuzz-6.0.0/src/hb-common.h"
#define HB_FEATURE_GLOBAL_START 0
# 805 "../harfbuzz-6.0.0/src/hb-common.h"
#define HB_FEATURE_GLOBAL_END ((unsigned int) -1)
# 822 "../harfbuzz-6.0.0/src/hb-common.h"
typedef struct hb_feature_t {
  hb_tag_t tag;
  uint32_t value;
  unsigned int start;
  unsigned int end;
} hb_feature_t;

extern hb_bool_t
hb_feature_from_string (const char *str, int len,
   hb_feature_t *feature);

extern void
hb_feature_to_string (hb_feature_t *feature,
        char *buf, unsigned int size);
# 848 "../harfbuzz-6.0.0/src/hb-common.h"
typedef struct hb_variation_t {
  hb_tag_t tag;
  float value;
} hb_variation_t;

extern hb_bool_t
hb_variation_from_string (const char *str, int len,
     hb_variation_t *variation);

extern void
hb_variation_to_string (hb_variation_t *variation,
   char *buf, unsigned int size);
# 869 "../harfbuzz-6.0.0/src/hb-common.h"
typedef uint32_t hb_color_t;
# 882 "../harfbuzz-6.0.0/src/hb-common.h"
#define HB_COLOR(b,g,r,a) ((hb_color_t) HB_TAG ((b),(g),(r),(a)))

extern uint8_t
hb_color_get_alpha (hb_color_t color);
#define hb_color_get_alpha(color) ((color) & 0xFF)

extern uint8_t
hb_color_get_red (hb_color_t color);
#define hb_color_get_red(color) (((color) >> 8) & 0xFF)

extern uint8_t
hb_color_get_green (hb_color_t color);
#define hb_color_get_green(color) (((color) >> 16) & 0xFF)

extern uint8_t
hb_color_get_blue (hb_color_t color);
#define hb_color_get_blue(color) (((color) >> 24) & 0xFF)
# 911 "../harfbuzz-6.0.0/src/hb-common.h"
typedef struct hb_glyph_extents_t {
  hb_position_t x_bearing;
  hb_position_t y_bearing;
  hb_position_t width;
  hb_position_t height;
} hb_glyph_extents_t;







typedef struct hb_font_t hb_font_t;

}
# 35 "../harfbuzz-6.0.0/src/hb-blob.h" 2

extern "C" {
# 69 "../harfbuzz-6.0.0/src/hb-blob.h"
typedef enum {
  HB_MEMORY_MODE_DUPLICATE,
  HB_MEMORY_MODE_READONLY,
  HB_MEMORY_MODE_WRITABLE,
  HB_MEMORY_MODE_READONLY_MAY_MAKE_WRITABLE
} hb_memory_mode_t;
# 84 "../harfbuzz-6.0.0/src/hb-blob.h"
typedef struct hb_blob_t hb_blob_t;

extern hb_blob_t *
hb_blob_create (const char *data,
  unsigned int length,
  hb_memory_mode_t mode,
  void *user_data,
  hb_destroy_func_t destroy);

extern hb_blob_t *
hb_blob_create_or_fail (const char *data,
   unsigned int length,
   hb_memory_mode_t mode,
   void *user_data,
   hb_destroy_func_t destroy);

extern hb_blob_t *
hb_blob_create_from_file (const char *file_name);

extern hb_blob_t *
hb_blob_create_from_file_or_fail (const char *file_name);







extern hb_blob_t *
hb_blob_create_sub_blob (hb_blob_t *parent,
    unsigned int offset,
    unsigned int length);

extern hb_blob_t *
hb_blob_copy_writable_or_fail (hb_blob_t *blob);

extern hb_blob_t *
hb_blob_get_empty (void);

extern hb_blob_t *
hb_blob_reference (hb_blob_t *blob);

extern void
hb_blob_destroy (hb_blob_t *blob);

extern hb_bool_t
hb_blob_set_user_data (hb_blob_t *blob,
         hb_user_data_key_t *key,
         void * data,
         hb_destroy_func_t destroy,
         hb_bool_t replace);


extern void *
hb_blob_get_user_data (const hb_blob_t *blob,
         hb_user_data_key_t *key);


extern void
hb_blob_make_immutable (hb_blob_t *blob);

extern hb_bool_t
hb_blob_is_immutable (hb_blob_t *blob);


extern unsigned int
hb_blob_get_length (hb_blob_t *blob);

extern const char *
hb_blob_get_data (hb_blob_t *blob, unsigned int *length);

extern char *
hb_blob_get_data_writable (hb_blob_t *blob, unsigned int *length);

}
# 32 "../harfbuzz-6.0.0/src/hb.h" 2
# 1 "../harfbuzz-6.0.0/src/hb-buffer.h" 1
# 35 "../harfbuzz-6.0.0/src/hb-buffer.h"
#define HB_BUFFER_H 

# 1 "../harfbuzz-6.0.0/src/hb-common.h" 1
# 38 "../harfbuzz-6.0.0/src/hb-buffer.h" 2
# 1 "../harfbuzz-6.0.0/src/hb-unicode.h" 1
# 36 "../harfbuzz-6.0.0/src/hb-unicode.h"
#define HB_UNICODE_H 

# 1 "../harfbuzz-6.0.0/src/hb-common.h" 1
# 39 "../harfbuzz-6.0.0/src/hb-unicode.h" 2

extern "C" {
# 50 "../harfbuzz-6.0.0/src/hb-unicode.h"
#define HB_UNICODE_MAX 0x10FFFFu
# 91 "../harfbuzz-6.0.0/src/hb-unicode.h"
typedef enum
{
  HB_UNICODE_GENERAL_CATEGORY_CONTROL,
  HB_UNICODE_GENERAL_CATEGORY_FORMAT,
  HB_UNICODE_GENERAL_CATEGORY_UNASSIGNED,
  HB_UNICODE_GENERAL_CATEGORY_PRIVATE_USE,
  HB_UNICODE_GENERAL_CATEGORY_SURROGATE,
  HB_UNICODE_GENERAL_CATEGORY_LOWERCASE_LETTER,
  HB_UNICODE_GENERAL_CATEGORY_MODIFIER_LETTER,
  HB_UNICODE_GENERAL_CATEGORY_OTHER_LETTER,
  HB_UNICODE_GENERAL_CATEGORY_TITLECASE_LETTER,
  HB_UNICODE_GENERAL_CATEGORY_UPPERCASE_LETTER,
  HB_UNICODE_GENERAL_CATEGORY_SPACING_MARK,
  HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK,
  HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK,
  HB_UNICODE_GENERAL_CATEGORY_DECIMAL_NUMBER,
  HB_UNICODE_GENERAL_CATEGORY_LETTER_NUMBER,
  HB_UNICODE_GENERAL_CATEGORY_OTHER_NUMBER,
  HB_UNICODE_GENERAL_CATEGORY_CONNECT_PUNCTUATION,
  HB_UNICODE_GENERAL_CATEGORY_DASH_PUNCTUATION,
  HB_UNICODE_GENERAL_CATEGORY_CLOSE_PUNCTUATION,
  HB_UNICODE_GENERAL_CATEGORY_FINAL_PUNCTUATION,
  HB_UNICODE_GENERAL_CATEGORY_INITIAL_PUNCTUATION,
  HB_UNICODE_GENERAL_CATEGORY_OTHER_PUNCTUATION,
  HB_UNICODE_GENERAL_CATEGORY_OPEN_PUNCTUATION,
  HB_UNICODE_GENERAL_CATEGORY_CURRENCY_SYMBOL,
  HB_UNICODE_GENERAL_CATEGORY_MODIFIER_SYMBOL,
  HB_UNICODE_GENERAL_CATEGORY_MATH_SYMBOL,
  HB_UNICODE_GENERAL_CATEGORY_OTHER_SYMBOL,
  HB_UNICODE_GENERAL_CATEGORY_LINE_SEPARATOR,
  HB_UNICODE_GENERAL_CATEGORY_PARAGRAPH_SEPARATOR,
  HB_UNICODE_GENERAL_CATEGORY_SPACE_SEPARATOR
} hb_unicode_general_category_t;
# 193 "../harfbuzz-6.0.0/src/hb-unicode.h"
typedef enum
{
  HB_UNICODE_COMBINING_CLASS_NOT_REORDERED = 0,
  HB_UNICODE_COMBINING_CLASS_OVERLAY = 1,
  HB_UNICODE_COMBINING_CLASS_NUKTA = 7,
  HB_UNICODE_COMBINING_CLASS_KANA_VOICING = 8,
  HB_UNICODE_COMBINING_CLASS_VIRAMA = 9,


  HB_UNICODE_COMBINING_CLASS_CCC10 = 10,
  HB_UNICODE_COMBINING_CLASS_CCC11 = 11,
  HB_UNICODE_COMBINING_CLASS_CCC12 = 12,
  HB_UNICODE_COMBINING_CLASS_CCC13 = 13,
  HB_UNICODE_COMBINING_CLASS_CCC14 = 14,
  HB_UNICODE_COMBINING_CLASS_CCC15 = 15,
  HB_UNICODE_COMBINING_CLASS_CCC16 = 16,
  HB_UNICODE_COMBINING_CLASS_CCC17 = 17,
  HB_UNICODE_COMBINING_CLASS_CCC18 = 18,
  HB_UNICODE_COMBINING_CLASS_CCC19 = 19,
  HB_UNICODE_COMBINING_CLASS_CCC20 = 20,
  HB_UNICODE_COMBINING_CLASS_CCC21 = 21,
  HB_UNICODE_COMBINING_CLASS_CCC22 = 22,
  HB_UNICODE_COMBINING_CLASS_CCC23 = 23,
  HB_UNICODE_COMBINING_CLASS_CCC24 = 24,
  HB_UNICODE_COMBINING_CLASS_CCC25 = 25,
  HB_UNICODE_COMBINING_CLASS_CCC26 = 26,


  HB_UNICODE_COMBINING_CLASS_CCC27 = 27,
  HB_UNICODE_COMBINING_CLASS_CCC28 = 28,
  HB_UNICODE_COMBINING_CLASS_CCC29 = 29,
  HB_UNICODE_COMBINING_CLASS_CCC30 = 30,
  HB_UNICODE_COMBINING_CLASS_CCC31 = 31,
  HB_UNICODE_COMBINING_CLASS_CCC32 = 32,
  HB_UNICODE_COMBINING_CLASS_CCC33 = 33,
  HB_UNICODE_COMBINING_CLASS_CCC34 = 34,
  HB_UNICODE_COMBINING_CLASS_CCC35 = 35,


  HB_UNICODE_COMBINING_CLASS_CCC36 = 36,


  HB_UNICODE_COMBINING_CLASS_CCC84 = 84,
  HB_UNICODE_COMBINING_CLASS_CCC91 = 91,


  HB_UNICODE_COMBINING_CLASS_CCC103 = 103,
  HB_UNICODE_COMBINING_CLASS_CCC107 = 107,


  HB_UNICODE_COMBINING_CLASS_CCC118 = 118,
  HB_UNICODE_COMBINING_CLASS_CCC122 = 122,


  HB_UNICODE_COMBINING_CLASS_CCC129 = 129,
  HB_UNICODE_COMBINING_CLASS_CCC130 = 130,
  HB_UNICODE_COMBINING_CLASS_CCC133 = 132,


  HB_UNICODE_COMBINING_CLASS_ATTACHED_BELOW_LEFT = 200,
  HB_UNICODE_COMBINING_CLASS_ATTACHED_BELOW = 202,
  HB_UNICODE_COMBINING_CLASS_ATTACHED_ABOVE = 214,
  HB_UNICODE_COMBINING_CLASS_ATTACHED_ABOVE_RIGHT = 216,
  HB_UNICODE_COMBINING_CLASS_BELOW_LEFT = 218,
  HB_UNICODE_COMBINING_CLASS_BELOW = 220,
  HB_UNICODE_COMBINING_CLASS_BELOW_RIGHT = 222,
  HB_UNICODE_COMBINING_CLASS_LEFT = 224,
  HB_UNICODE_COMBINING_CLASS_RIGHT = 226,
  HB_UNICODE_COMBINING_CLASS_ABOVE_LEFT = 228,
  HB_UNICODE_COMBINING_CLASS_ABOVE = 230,
  HB_UNICODE_COMBINING_CLASS_ABOVE_RIGHT = 232,
  HB_UNICODE_COMBINING_CLASS_DOUBLE_BELOW = 233,
  HB_UNICODE_COMBINING_CLASS_DOUBLE_ABOVE = 234,

  HB_UNICODE_COMBINING_CLASS_IOTA_SUBSCRIPT = 240,

  HB_UNICODE_COMBINING_CLASS_INVALID = 255
} hb_unicode_combining_class_t;
# 289 "../harfbuzz-6.0.0/src/hb-unicode.h"
typedef struct hb_unicode_funcs_t hb_unicode_funcs_t;





extern hb_unicode_funcs_t *
hb_unicode_funcs_get_default (void);


extern hb_unicode_funcs_t *
hb_unicode_funcs_create (hb_unicode_funcs_t *parent);

extern hb_unicode_funcs_t *
hb_unicode_funcs_get_empty (void);

extern hb_unicode_funcs_t *
hb_unicode_funcs_reference (hb_unicode_funcs_t *ufuncs);

extern void
hb_unicode_funcs_destroy (hb_unicode_funcs_t *ufuncs);

extern hb_bool_t
hb_unicode_funcs_set_user_data (hb_unicode_funcs_t *ufuncs,
    hb_user_data_key_t *key,
    void * data,
    hb_destroy_func_t destroy,
    hb_bool_t replace);


extern void *
hb_unicode_funcs_get_user_data (const hb_unicode_funcs_t *ufuncs,
    hb_user_data_key_t *key);


extern void
hb_unicode_funcs_make_immutable (hb_unicode_funcs_t *ufuncs);

extern hb_bool_t
hb_unicode_funcs_is_immutable (hb_unicode_funcs_t *ufuncs);

extern hb_unicode_funcs_t *
hb_unicode_funcs_get_parent (hb_unicode_funcs_t *ufuncs);
# 354 "../harfbuzz-6.0.0/src/hb-unicode.h"
typedef hb_unicode_combining_class_t (*hb_unicode_combining_class_func_t) (hb_unicode_funcs_t *ufuncs,
           hb_codepoint_t unicode,
           void *user_data);
# 372 "../harfbuzz-6.0.0/src/hb-unicode.h"
typedef hb_unicode_general_category_t (*hb_unicode_general_category_func_t) (hb_unicode_funcs_t *ufuncs,
           hb_codepoint_t unicode,
           void *user_data);
# 394 "../harfbuzz-6.0.0/src/hb-unicode.h"
typedef hb_codepoint_t (*hb_unicode_mirroring_func_t) (hb_unicode_funcs_t *ufuncs,
           hb_codepoint_t unicode,
           void *user_data);
# 412 "../harfbuzz-6.0.0/src/hb-unicode.h"
typedef hb_script_t (*hb_unicode_script_func_t) (hb_unicode_funcs_t *ufuncs,
           hb_codepoint_t unicode,
           void *user_data);
# 435 "../harfbuzz-6.0.0/src/hb-unicode.h"
typedef hb_bool_t (*hb_unicode_compose_func_t) (hb_unicode_funcs_t *ufuncs,
           hb_codepoint_t a,
           hb_codepoint_t b,
           hb_codepoint_t *ab,
           void *user_data);
# 459 "../harfbuzz-6.0.0/src/hb-unicode.h"
typedef hb_bool_t (*hb_unicode_decompose_func_t) (hb_unicode_funcs_t *ufuncs,
           hb_codepoint_t ab,
           hb_codepoint_t *a,
           hb_codepoint_t *b,
           void *user_data);
# 478 "../harfbuzz-6.0.0/src/hb-unicode.h"
extern void
hb_unicode_funcs_set_combining_class_func (hb_unicode_funcs_t *ufuncs,
        hb_unicode_combining_class_func_t func,
        void *user_data, hb_destroy_func_t destroy);
# 494 "../harfbuzz-6.0.0/src/hb-unicode.h"
extern void
hb_unicode_funcs_set_general_category_func (hb_unicode_funcs_t *ufuncs,
         hb_unicode_general_category_func_t func,
         void *user_data, hb_destroy_func_t destroy);
# 510 "../harfbuzz-6.0.0/src/hb-unicode.h"
extern void
hb_unicode_funcs_set_mirroring_func (hb_unicode_funcs_t *ufuncs,
         hb_unicode_mirroring_func_t func,
         void *user_data, hb_destroy_func_t destroy);
# 526 "../harfbuzz-6.0.0/src/hb-unicode.h"
extern void
hb_unicode_funcs_set_script_func (hb_unicode_funcs_t *ufuncs,
      hb_unicode_script_func_t func,
      void *user_data, hb_destroy_func_t destroy);
# 542 "../harfbuzz-6.0.0/src/hb-unicode.h"
extern void
hb_unicode_funcs_set_compose_func (hb_unicode_funcs_t *ufuncs,
       hb_unicode_compose_func_t func,
       void *user_data, hb_destroy_func_t destroy);
# 558 "../harfbuzz-6.0.0/src/hb-unicode.h"
extern void
hb_unicode_funcs_set_decompose_func (hb_unicode_funcs_t *ufuncs,
         hb_unicode_decompose_func_t func,
         void *user_data, hb_destroy_func_t destroy);
# 577 "../harfbuzz-6.0.0/src/hb-unicode.h"
extern hb_unicode_combining_class_t
hb_unicode_combining_class (hb_unicode_funcs_t *ufuncs,
       hb_codepoint_t unicode);
# 593 "../harfbuzz-6.0.0/src/hb-unicode.h"
extern hb_unicode_general_category_t
hb_unicode_general_category (hb_unicode_funcs_t *ufuncs,
        hb_codepoint_t unicode);
# 609 "../harfbuzz-6.0.0/src/hb-unicode.h"
extern hb_codepoint_t
hb_unicode_mirroring (hb_unicode_funcs_t *ufuncs,
        hb_codepoint_t unicode);
# 625 "../harfbuzz-6.0.0/src/hb-unicode.h"
extern hb_script_t
hb_unicode_script (hb_unicode_funcs_t *ufuncs,
     hb_codepoint_t unicode);

extern hb_bool_t
hb_unicode_compose (hb_unicode_funcs_t *ufuncs,
      hb_codepoint_t a,
      hb_codepoint_t b,
      hb_codepoint_t *ab);

extern hb_bool_t
hb_unicode_decompose (hb_unicode_funcs_t *ufuncs,
        hb_codepoint_t ab,
        hb_codepoint_t *a,
        hb_codepoint_t *b);

}
# 39 "../harfbuzz-6.0.0/src/hb-buffer.h" 2
# 1 "../harfbuzz-6.0.0/src/hb-font.h" 1
# 32 "../harfbuzz-6.0.0/src/hb-font.h"
#define HB_FONT_H 

# 1 "../harfbuzz-6.0.0/src/hb-common.h" 1
# 35 "../harfbuzz-6.0.0/src/hb-font.h" 2
# 1 "../harfbuzz-6.0.0/src/hb-face.h" 1
# 32 "../harfbuzz-6.0.0/src/hb-face.h"
#define HB_FACE_H 

# 1 "../harfbuzz-6.0.0/src/hb-common.h" 1
# 35 "../harfbuzz-6.0.0/src/hb-face.h" 2
# 1 "../harfbuzz-6.0.0/src/hb-blob.h" 1
# 36 "../harfbuzz-6.0.0/src/hb-face.h" 2
# 1 "../harfbuzz-6.0.0/src/hb-map.h" 1
# 32 "../harfbuzz-6.0.0/src/hb-map.h"
#define HB_MAP_H 

# 1 "../harfbuzz-6.0.0/src/hb-common.h" 1
# 35 "../harfbuzz-6.0.0/src/hb-map.h" 2
# 1 "../harfbuzz-6.0.0/src/hb-set.h" 1
# 32 "../harfbuzz-6.0.0/src/hb-set.h"
#define HB_SET_H 

# 1 "../harfbuzz-6.0.0/src/hb-common.h" 1
# 35 "../harfbuzz-6.0.0/src/hb-set.h" 2

extern "C" {
# 46 "../harfbuzz-6.0.0/src/hb-set.h"
#define HB_SET_VALUE_INVALID ((hb_codepoint_t) -1)
# 57 "../harfbuzz-6.0.0/src/hb-set.h"
typedef struct hb_set_t hb_set_t;


extern hb_set_t *
hb_set_create (void);

extern hb_set_t *
hb_set_get_empty (void);

extern hb_set_t *
hb_set_reference (hb_set_t *set);

extern void
hb_set_destroy (hb_set_t *set);

extern hb_bool_t
hb_set_set_user_data (hb_set_t *set,
        hb_user_data_key_t *key,
        void * data,
        hb_destroy_func_t destroy,
        hb_bool_t replace);

extern void *
hb_set_get_user_data (const hb_set_t *set,
        hb_user_data_key_t *key);



extern hb_bool_t
hb_set_allocation_successful (const hb_set_t *set);

extern hb_set_t *
hb_set_copy (const hb_set_t *set);

extern void
hb_set_clear (hb_set_t *set);

extern hb_bool_t
hb_set_is_empty (const hb_set_t *set);

extern void
hb_set_invert (hb_set_t *set);

extern hb_bool_t
hb_set_is_inverted (const hb_set_t *set);

extern hb_bool_t
hb_set_has (const hb_set_t *set,
     hb_codepoint_t codepoint);

extern void
hb_set_add (hb_set_t *set,
     hb_codepoint_t codepoint);

extern void
hb_set_add_range (hb_set_t *set,
    hb_codepoint_t first,
    hb_codepoint_t last);

extern void
hb_set_add_sorted_array (hb_set_t *set,
           const hb_codepoint_t *sorted_codepoints,
           unsigned int num_codepoints);

extern void
hb_set_del (hb_set_t *set,
     hb_codepoint_t codepoint);

extern void
hb_set_del_range (hb_set_t *set,
    hb_codepoint_t first,
    hb_codepoint_t last);

extern hb_bool_t
hb_set_is_equal (const hb_set_t *set,
   const hb_set_t *other);

extern unsigned int
hb_set_hash (const hb_set_t *set);

extern hb_bool_t
hb_set_is_subset (const hb_set_t *set,
    const hb_set_t *larger_set);

extern void
hb_set_set (hb_set_t *set,
     const hb_set_t *other);

extern void
hb_set_union (hb_set_t *set,
       const hb_set_t *other);

extern void
hb_set_intersect (hb_set_t *set,
    const hb_set_t *other);

extern void
hb_set_subtract (hb_set_t *set,
   const hb_set_t *other);

extern void
hb_set_symmetric_difference (hb_set_t *set,
        const hb_set_t *other);

extern unsigned int
hb_set_get_population (const hb_set_t *set);


extern hb_codepoint_t
hb_set_get_min (const hb_set_t *set);


extern hb_codepoint_t
hb_set_get_max (const hb_set_t *set);


extern hb_bool_t
hb_set_next (const hb_set_t *set,
      hb_codepoint_t *codepoint);


extern hb_bool_t
hb_set_previous (const hb_set_t *set,
   hb_codepoint_t *codepoint);


extern hb_bool_t
hb_set_next_range (const hb_set_t *set,
     hb_codepoint_t *first,
     hb_codepoint_t *last);


extern hb_bool_t
hb_set_previous_range (const hb_set_t *set,
         hb_codepoint_t *first,
         hb_codepoint_t *last);


extern unsigned int
hb_set_next_many (const hb_set_t *set,
    hb_codepoint_t codepoint,
    hb_codepoint_t *out,
    unsigned int size);

}
# 36 "../harfbuzz-6.0.0/src/hb-map.h" 2

extern "C" {
# 47 "../harfbuzz-6.0.0/src/hb-map.h"
#define HB_MAP_VALUE_INVALID ((hb_codepoint_t) -1)







typedef struct hb_map_t hb_map_t;


extern hb_map_t *
hb_map_create (void);

extern hb_map_t *
hb_map_get_empty (void);

extern hb_map_t *
hb_map_reference (hb_map_t *map);

extern void
hb_map_destroy (hb_map_t *map);

extern hb_bool_t
hb_map_set_user_data (hb_map_t *map,
        hb_user_data_key_t *key,
        void * data,
        hb_destroy_func_t destroy,
        hb_bool_t replace);

extern void *
hb_map_get_user_data (const hb_map_t *map,
        hb_user_data_key_t *key);



extern hb_bool_t
hb_map_allocation_successful (const hb_map_t *map);

extern hb_map_t *
hb_map_copy (const hb_map_t *map);

extern void
hb_map_clear (hb_map_t *map);

extern hb_bool_t
hb_map_is_empty (const hb_map_t *map);

extern unsigned int
hb_map_get_population (const hb_map_t *map);

extern hb_bool_t
hb_map_is_equal (const hb_map_t *map,
   const hb_map_t *other);

extern unsigned int
hb_map_hash (const hb_map_t *map);

extern void
hb_map_set (hb_map_t *map,
     hb_codepoint_t key,
     hb_codepoint_t value);

extern hb_codepoint_t
hb_map_get (const hb_map_t *map,
     hb_codepoint_t key);

extern void
hb_map_del (hb_map_t *map,
     hb_codepoint_t key);

extern hb_bool_t
hb_map_has (const hb_map_t *map,
     hb_codepoint_t key);

extern void
hb_map_update (hb_map_t *map,
        const hb_map_t *other);


extern hb_bool_t
hb_map_next (const hb_map_t *map,
      int *idx,
      hb_codepoint_t *key,
      hb_codepoint_t *value);

extern void
hb_map_keys (const hb_map_t *map,
      hb_set_t *keys);

extern void
hb_map_values (const hb_map_t *map,
        hb_set_t *values);

}
# 37 "../harfbuzz-6.0.0/src/hb-face.h" 2
# 1 "../harfbuzz-6.0.0/src/hb-set.h" 1
# 38 "../harfbuzz-6.0.0/src/hb-face.h" 2

extern "C" {


extern unsigned int
hb_face_count (hb_blob_t *blob);
# 56 "../harfbuzz-6.0.0/src/hb-face.h"
typedef struct hb_face_t hb_face_t;

extern hb_face_t *
hb_face_create (hb_blob_t *blob,
  unsigned int index);
# 75 "../harfbuzz-6.0.0/src/hb-face.h"
typedef hb_blob_t * (*hb_reference_table_func_t) (hb_face_t *face, hb_tag_t tag, void *user_data);


extern hb_face_t *
hb_face_create_for_tables (hb_reference_table_func_t reference_table_func,
      void *user_data,
      hb_destroy_func_t destroy);

extern hb_face_t *
hb_face_get_empty (void);

extern hb_face_t *
hb_face_reference (hb_face_t *face);

extern void
hb_face_destroy (hb_face_t *face);

extern hb_bool_t
hb_face_set_user_data (hb_face_t *face,
         hb_user_data_key_t *key,
         void * data,
         hb_destroy_func_t destroy,
         hb_bool_t replace);

extern void *
hb_face_get_user_data (const hb_face_t *face,
         hb_user_data_key_t *key);

extern void
hb_face_make_immutable (hb_face_t *face);

extern hb_bool_t
hb_face_is_immutable (const hb_face_t *face);


extern hb_blob_t *
hb_face_reference_table (const hb_face_t *face,
    hb_tag_t tag);

extern hb_blob_t *
hb_face_reference_blob (hb_face_t *face);

extern void
hb_face_set_index (hb_face_t *face,
     unsigned int index);

extern unsigned int
hb_face_get_index (const hb_face_t *face);

extern void
hb_face_set_upem (hb_face_t *face,
    unsigned int upem);

extern unsigned int
hb_face_get_upem (const hb_face_t *face);

extern void
hb_face_set_glyph_count (hb_face_t *face,
    unsigned int glyph_count);

extern unsigned int
hb_face_get_glyph_count (const hb_face_t *face);

extern unsigned int
hb_face_get_table_tags (const hb_face_t *face,
   unsigned int start_offset,
   unsigned int *table_count,
   hb_tag_t *table_tags );






extern void
hb_face_collect_unicodes (hb_face_t *face,
     hb_set_t *out);

extern void
hb_face_collect_nominal_glyph_mapping (hb_face_t *face,
           hb_map_t *mapping,
           hb_set_t *unicodes);

extern void
hb_face_collect_variation_selectors (hb_face_t *face,
         hb_set_t *out);

extern void
hb_face_collect_variation_unicodes (hb_face_t *face,
        hb_codepoint_t variation_selector,
        hb_set_t *out);






extern hb_face_t *
hb_face_builder_create (void);

extern hb_bool_t
hb_face_builder_add_table (hb_face_t *face,
      hb_tag_t tag,
      hb_blob_t *blob);

extern void
hb_face_builder_sort_tables (hb_face_t *face,
                             const hb_tag_t *tags);


}
# 36 "../harfbuzz-6.0.0/src/hb-font.h" 2
# 1 "../harfbuzz-6.0.0/src/hb-draw.h" 1
# 30 "../harfbuzz-6.0.0/src/hb-draw.h"
#define HB_DRAW_H 

# 1 "../harfbuzz-6.0.0/src/hb.h" 1
# 33 "../harfbuzz-6.0.0/src/hb-draw.h" 2

extern "C" {
# 49 "../harfbuzz-6.0.0/src/hb-draw.h"
typedef struct hb_draw_state_t {
  hb_bool_t path_open;

  float path_start_x;
  float path_start_y;

  float current_x;
  float current_y;


  hb_var_num_t reserved1;
  hb_var_num_t reserved2;
  hb_var_num_t reserved3;
  hb_var_num_t reserved4;
  hb_var_num_t reserved5;
  hb_var_num_t reserved6;
  hb_var_num_t reserved7;
} hb_draw_state_t;






#define HB_DRAW_STATE_DEFAULT {0, 0.f, 0.f, 0.f, 0.f, {0.}, {0.}, {0.}}
# 89 "../harfbuzz-6.0.0/src/hb-draw.h"
typedef struct hb_draw_funcs_t hb_draw_funcs_t;
# 107 "../harfbuzz-6.0.0/src/hb-draw.h"
typedef void (*hb_draw_move_to_func_t) (hb_draw_funcs_t *dfuncs, void *draw_data,
     hb_draw_state_t *st,
     float to_x, float to_y,
     void *user_data);
# 127 "../harfbuzz-6.0.0/src/hb-draw.h"
typedef void (*hb_draw_line_to_func_t) (hb_draw_funcs_t *dfuncs, void *draw_data,
     hb_draw_state_t *st,
     float to_x, float to_y,
     void *user_data);
# 149 "../harfbuzz-6.0.0/src/hb-draw.h"
typedef void (*hb_draw_quadratic_to_func_t) (hb_draw_funcs_t *dfuncs, void *draw_data,
          hb_draw_state_t *st,
          float control_x, float control_y,
          float to_x, float to_y,
          void *user_data);
# 174 "../harfbuzz-6.0.0/src/hb-draw.h"
typedef void (*hb_draw_cubic_to_func_t) (hb_draw_funcs_t *dfuncs, void *draw_data,
      hb_draw_state_t *st,
      float control1_x, float control1_y,
      float control2_x, float control2_y,
      float to_x, float to_y,
      void *user_data);
# 194 "../harfbuzz-6.0.0/src/hb-draw.h"
typedef void (*hb_draw_close_path_func_t) (hb_draw_funcs_t *dfuncs, void *draw_data,
        hb_draw_state_t *st,
        void *user_data);
# 209 "../harfbuzz-6.0.0/src/hb-draw.h"
extern void
hb_draw_funcs_set_move_to_func (hb_draw_funcs_t *dfuncs,
    hb_draw_move_to_func_t func,
    void *user_data, hb_destroy_func_t destroy);
# 225 "../harfbuzz-6.0.0/src/hb-draw.h"
extern void
hb_draw_funcs_set_line_to_func (hb_draw_funcs_t *dfuncs,
    hb_draw_line_to_func_t func,
    void *user_data, hb_destroy_func_t destroy);
# 241 "../harfbuzz-6.0.0/src/hb-draw.h"
extern void
hb_draw_funcs_set_quadratic_to_func (hb_draw_funcs_t *dfuncs,
         hb_draw_quadratic_to_func_t func,
         void *user_data, hb_destroy_func_t destroy);
# 257 "../harfbuzz-6.0.0/src/hb-draw.h"
extern void
hb_draw_funcs_set_cubic_to_func (hb_draw_funcs_t *dfuncs,
     hb_draw_cubic_to_func_t func,
     void *user_data, hb_destroy_func_t destroy);
# 273 "../harfbuzz-6.0.0/src/hb-draw.h"
extern void
hb_draw_funcs_set_close_path_func (hb_draw_funcs_t *dfuncs,
       hb_draw_close_path_func_t func,
       void *user_data, hb_destroy_func_t destroy);


extern hb_draw_funcs_t *
hb_draw_funcs_create (void);

extern hb_draw_funcs_t *
hb_draw_funcs_get_empty (void);

extern hb_draw_funcs_t *
hb_draw_funcs_reference (hb_draw_funcs_t *dfuncs);

extern void
hb_draw_funcs_destroy (hb_draw_funcs_t *dfuncs);

extern hb_bool_t
hb_draw_funcs_set_user_data (hb_draw_funcs_t *dfuncs,
        hb_user_data_key_t *key,
        void * data,
        hb_destroy_func_t destroy,
        hb_bool_t replace);


extern void *
hb_draw_funcs_get_user_data (const hb_draw_funcs_t *dfuncs,
        hb_user_data_key_t *key);

extern void
hb_draw_funcs_make_immutable (hb_draw_funcs_t *dfuncs);

extern hb_bool_t
hb_draw_funcs_is_immutable (hb_draw_funcs_t *dfuncs);


extern void
hb_draw_move_to (hb_draw_funcs_t *dfuncs, void *draw_data,
   hb_draw_state_t *st,
   float to_x, float to_y);

extern void
hb_draw_line_to (hb_draw_funcs_t *dfuncs, void *draw_data,
   hb_draw_state_t *st,
   float to_x, float to_y);

extern void
hb_draw_quadratic_to (hb_draw_funcs_t *dfuncs, void *draw_data,
        hb_draw_state_t *st,
        float control_x, float control_y,
        float to_x, float to_y);

extern void
hb_draw_cubic_to (hb_draw_funcs_t *dfuncs, void *draw_data,
    hb_draw_state_t *st,
    float control1_x, float control1_y,
    float control2_x, float control2_y,
    float to_x, float to_y);

extern void
hb_draw_close_path (hb_draw_funcs_t *dfuncs, void *draw_data,
      hb_draw_state_t *st);


}
# 37 "../harfbuzz-6.0.0/src/hb-font.h" 2
# 1 "../harfbuzz-6.0.0/src/hb-paint.h" 1
# 30 "../harfbuzz-6.0.0/src/hb-paint.h"
#define HB_PAINT_H 

# 1 "../harfbuzz-6.0.0/src/hb-common.h" 1
# 33 "../harfbuzz-6.0.0/src/hb-paint.h" 2

extern "C" {
# 63 "../harfbuzz-6.0.0/src/hb-paint.h"
typedef struct hb_paint_funcs_t hb_paint_funcs_t;

extern hb_paint_funcs_t *
hb_paint_funcs_create (void);

extern hb_paint_funcs_t *
hb_paint_funcs_get_empty (void);

extern hb_paint_funcs_t *
hb_paint_funcs_reference (hb_paint_funcs_t *funcs);

extern void
hb_paint_funcs_destroy (hb_paint_funcs_t *funcs);

extern hb_bool_t
hb_paint_funcs_set_user_data (hb_paint_funcs_t *funcs,
         hb_user_data_key_t *key,
         void * data,
         hb_destroy_func_t destroy,
         hb_bool_t replace);


extern void *
hb_paint_funcs_get_user_data (const hb_paint_funcs_t *funcs,
         hb_user_data_key_t *key);

extern void
hb_paint_funcs_make_immutable (hb_paint_funcs_t *funcs);

extern hb_bool_t
hb_paint_funcs_is_immutable (hb_paint_funcs_t *funcs);
# 116 "../harfbuzz-6.0.0/src/hb-paint.h"
typedef void (*hb_paint_push_transform_func_t) (hb_paint_funcs_t *funcs,
                                                void *paint_data,
                                                float xx, float yx,
                                                float xy, float yy,
                                                float dx, float dy,
                                                void *user_data);
# 135 "../harfbuzz-6.0.0/src/hb-paint.h"
typedef void (*hb_paint_pop_transform_func_t) (hb_paint_funcs_t *funcs,
                                               void *paint_data,
                                               void *user_data);
# 159 "../harfbuzz-6.0.0/src/hb-paint.h"
typedef void (*hb_paint_push_clip_glyph_func_t) (hb_paint_funcs_t *funcs,
                                                 void *paint_data,
                                                 hb_codepoint_t glyph,
                                                 hb_font_t *font,
                                                 void *user_data);
# 187 "../harfbuzz-6.0.0/src/hb-paint.h"
typedef void (*hb_paint_push_clip_rectangle_func_t) (hb_paint_funcs_t *funcs,
                                                     void *paint_data,
                                                     float xmin, float ymin,
                                                     float xmax, float ymax,
                                                     void *user_data);
# 205 "../harfbuzz-6.0.0/src/hb-paint.h"
typedef void (*hb_paint_pop_clip_func_t) (hb_paint_funcs_t *funcs,
                                          void *paint_data,
                                          void *user_data);
# 222 "../harfbuzz-6.0.0/src/hb-paint.h"
typedef void (*hb_paint_color_func_t) (hb_paint_funcs_t *funcs,
                                       void *paint_data,
                                       hb_bool_t is_foreground,
                                       hb_color_t color,
                                       void *user_data);
# 235 "../harfbuzz-6.0.0/src/hb-paint.h"
#define HB_PAINT_IMAGE_FORMAT_PNG HB_TAG('p','n','g',' ')
# 244 "../harfbuzz-6.0.0/src/hb-paint.h"
#define HB_PAINT_IMAGE_FORMAT_SVG HB_TAG('s','v','g',' ')
# 254 "../harfbuzz-6.0.0/src/hb-paint.h"
#define HB_PAINT_IMAGE_FORMAT_BGRA HB_TAG('B','G','R','A')
# 282 "../harfbuzz-6.0.0/src/hb-paint.h"
typedef hb_bool_t (*hb_paint_image_func_t) (hb_paint_funcs_t *funcs,
         void *paint_data,
         hb_blob_t *image,
         unsigned int width,
         unsigned int height,
         hb_tag_t format,
         float slant,
         hb_glyph_extents_t *extents,
         void *user_data);
# 310 "../harfbuzz-6.0.0/src/hb-paint.h"
typedef struct {
  float offset;
  hb_bool_t is_foreground;
  hb_color_t color;
} hb_color_stop_t;
# 336 "../harfbuzz-6.0.0/src/hb-paint.h"
typedef enum {
  HB_PAINT_EXTEND_PAD,
  HB_PAINT_EXTEND_REPEAT,
  HB_PAINT_EXTEND_REFLECT
} hb_paint_extend_t;

typedef struct hb_color_line_t hb_color_line_t;
# 360 "../harfbuzz-6.0.0/src/hb-paint.h"
typedef unsigned int (*hb_color_line_get_color_stops_func_t) (hb_color_line_t *color_line,
             void *color_line_data,
             unsigned int start,
             unsigned int *count,
             hb_color_stop_t *color_stops,
             void *user_data);
# 379 "../harfbuzz-6.0.0/src/hb-paint.h"
typedef hb_paint_extend_t (*hb_color_line_get_extend_func_t) (hb_color_line_t *color_line,
             void *color_line_data,
             void *user_data);
# 390 "../harfbuzz-6.0.0/src/hb-paint.h"
struct hb_color_line_t {
  void *data;

  hb_color_line_get_color_stops_func_t get_color_stops;
  void *get_color_stops_user_data;

  hb_color_line_get_extend_func_t get_extend;
  void *get_extend_user_data;

  void *reserved0;
  void *reserved1;
  void *reserved2;
  void *reserved3;
  void *reserved5;
  void *reserved6;
  void *reserved7;
  void *reserved8;
};

extern unsigned int
hb_color_line_get_color_stops (hb_color_line_t *color_line,
                               unsigned int start,
                               unsigned int *count,
                               hb_color_stop_t *color_stops);

extern hb_paint_extend_t
hb_color_line_get_extend (hb_color_line_t *color_line);
# 446 "../harfbuzz-6.0.0/src/hb-paint.h"
typedef void (*hb_paint_linear_gradient_func_t) (hb_paint_funcs_t *funcs,
                                                 void *paint_data,
                                                 hb_color_line_t *color_line,
                                                 float x0, float y0,
                                                 float x1, float y1,
                                                 float x2, float y2,
                                                 void *user_data);
# 482 "../harfbuzz-6.0.0/src/hb-paint.h"
typedef void (*hb_paint_radial_gradient_func_t) (hb_paint_funcs_t *funcs,
                                                 void *paint_data,
                                                 hb_color_line_t *color_line,
                                                 float x0, float y0, float r0,
                                                 float x1, float y1, float r1,
                                                 void *user_data);
# 515 "../harfbuzz-6.0.0/src/hb-paint.h"
typedef void (*hb_paint_sweep_gradient_func_t) (hb_paint_funcs_t *funcs,
                                                 void *paint_data,
                                                 hb_color_line_t *color_line,
                                                 float x0, float y0,
                                                 float start_angle,
                                                 float end_angle,
                                                 void *user_data);
# 591 "../harfbuzz-6.0.0/src/hb-paint.h"
typedef enum {
  HB_PAINT_COMPOSITE_MODE_CLEAR,
  HB_PAINT_COMPOSITE_MODE_SRC,
  HB_PAINT_COMPOSITE_MODE_DEST,
  HB_PAINT_COMPOSITE_MODE_SRC_OVER,
  HB_PAINT_COMPOSITE_MODE_DEST_OVER,
  HB_PAINT_COMPOSITE_MODE_SRC_IN,
  HB_PAINT_COMPOSITE_MODE_DEST_IN,
  HB_PAINT_COMPOSITE_MODE_SRC_OUT,
  HB_PAINT_COMPOSITE_MODE_DEST_OUT,
  HB_PAINT_COMPOSITE_MODE_SRC_ATOP,
  HB_PAINT_COMPOSITE_MODE_DEST_ATOP,
  HB_PAINT_COMPOSITE_MODE_XOR,
  HB_PAINT_COMPOSITE_MODE_PLUS,
  HB_PAINT_COMPOSITE_MODE_SCREEN,
  HB_PAINT_COMPOSITE_MODE_OVERLAY,
  HB_PAINT_COMPOSITE_MODE_DARKEN,
  HB_PAINT_COMPOSITE_MODE_LIGHTEN,
  HB_PAINT_COMPOSITE_MODE_COLOR_DODGE,
  HB_PAINT_COMPOSITE_MODE_COLOR_BURN,
  HB_PAINT_COMPOSITE_MODE_HARD_LIGHT,
  HB_PAINT_COMPOSITE_MODE_SOFT_LIGHT,
  HB_PAINT_COMPOSITE_MODE_DIFFERENCE,
  HB_PAINT_COMPOSITE_MODE_EXCLUSION,
  HB_PAINT_COMPOSITE_MODE_MULTIPLY,
  HB_PAINT_COMPOSITE_MODE_HSL_HUE,
  HB_PAINT_COMPOSITE_MODE_HSL_SATURATION,
  HB_PAINT_COMPOSITE_MODE_HSL_COLOR,
  HB_PAINT_COMPOSITE_MODE_HSL_LUMINOSITY,
} hb_paint_composite_mode_t;
# 637 "../harfbuzz-6.0.0/src/hb-paint.h"
typedef void (*hb_paint_push_group_func_t) (hb_paint_funcs_t *funcs,
                                            void *paint_data,
                                            void *user_data);
# 658 "../harfbuzz-6.0.0/src/hb-paint.h"
typedef void (*hb_paint_pop_group_func_t) (hb_paint_funcs_t *funcs,
                                           void *paint_data,
                                           hb_paint_composite_mode_t mode,
                                           void *user_data);
# 685 "../harfbuzz-6.0.0/src/hb-paint.h"
typedef hb_bool_t (*hb_paint_custom_palette_color_func_t) (hb_paint_funcs_t *funcs,
                                                           void *paint_data,
                                                           unsigned int color_index,
                                                           hb_color_t *color,
                                                           void *user_data);
# 703 "../harfbuzz-6.0.0/src/hb-paint.h"
extern void
hb_paint_funcs_set_push_transform_func (hb_paint_funcs_t *funcs,
                                        hb_paint_push_transform_func_t func,
                                        void *user_data,
                                        hb_destroy_func_t destroy);
# 720 "../harfbuzz-6.0.0/src/hb-paint.h"
extern void
hb_paint_funcs_set_pop_transform_func (hb_paint_funcs_t *funcs,
                                       hb_paint_pop_transform_func_t func,
                                       void *user_data,
                                       hb_destroy_func_t destroy);
# 737 "../harfbuzz-6.0.0/src/hb-paint.h"
extern void
hb_paint_funcs_set_push_clip_glyph_func (hb_paint_funcs_t *funcs,
                                         hb_paint_push_clip_glyph_func_t func,
                                         void *user_data,
                                         hb_destroy_func_t destroy);
# 754 "../harfbuzz-6.0.0/src/hb-paint.h"
extern void
hb_paint_funcs_set_push_clip_rectangle_func (hb_paint_funcs_t *funcs,
                                             hb_paint_push_clip_rectangle_func_t func,
                                             void *user_data,
                                             hb_destroy_func_t destroy);
# 771 "../harfbuzz-6.0.0/src/hb-paint.h"
extern void
hb_paint_funcs_set_pop_clip_func (hb_paint_funcs_t *funcs,
                                  hb_paint_pop_clip_func_t func,
                                  void *user_data,
                                  hb_destroy_func_t destroy);
# 788 "../harfbuzz-6.0.0/src/hb-paint.h"
extern void
hb_paint_funcs_set_color_func (hb_paint_funcs_t *funcs,
                               hb_paint_color_func_t func,
                               void *user_data,
                               hb_destroy_func_t destroy);
# 805 "../harfbuzz-6.0.0/src/hb-paint.h"
extern void
hb_paint_funcs_set_image_func (hb_paint_funcs_t *funcs,
                               hb_paint_image_func_t func,
                               void *user_data,
                               hb_destroy_func_t destroy);
# 822 "../harfbuzz-6.0.0/src/hb-paint.h"
extern void
hb_paint_funcs_set_linear_gradient_func (hb_paint_funcs_t *funcs,
                                         hb_paint_linear_gradient_func_t func,
                                         void *user_data,
                                         hb_destroy_func_t destroy);
# 839 "../harfbuzz-6.0.0/src/hb-paint.h"
extern void
hb_paint_funcs_set_radial_gradient_func (hb_paint_funcs_t *funcs,
                                         hb_paint_radial_gradient_func_t func,
                                         void *user_data,
                                         hb_destroy_func_t destroy);
# 856 "../harfbuzz-6.0.0/src/hb-paint.h"
extern void
hb_paint_funcs_set_sweep_gradient_func (hb_paint_funcs_t *funcs,
                                        hb_paint_sweep_gradient_func_t func,
                                        void *user_data,
                                        hb_destroy_func_t destroy);
# 873 "../harfbuzz-6.0.0/src/hb-paint.h"
extern void
hb_paint_funcs_set_push_group_func (hb_paint_funcs_t *funcs,
                                    hb_paint_push_group_func_t func,
                                    void *user_data,
                                    hb_destroy_func_t destroy);
# 890 "../harfbuzz-6.0.0/src/hb-paint.h"
extern void
hb_paint_funcs_set_pop_group_func (hb_paint_funcs_t *funcs,
                                   hb_paint_pop_group_func_t func,
                                   void *user_data,
                                   hb_destroy_func_t destroy);
# 907 "../harfbuzz-6.0.0/src/hb-paint.h"
extern void
hb_paint_funcs_set_custom_palette_color_func (hb_paint_funcs_t *funcs,
                                              hb_paint_custom_palette_color_func_t func,
                                              void *user_data,
                                              hb_destroy_func_t destroy);




extern void
hb_paint_push_transform (hb_paint_funcs_t *funcs, void *paint_data,
                         float xx, float yx,
                         float xy, float yy,
                         float dx, float dy);

extern void
hb_paint_pop_transform (hb_paint_funcs_t *funcs, void *paint_data);

extern void
hb_paint_push_clip_glyph (hb_paint_funcs_t *funcs, void *paint_data,
                          hb_codepoint_t glyph,
                          hb_font_t *font);

extern void
hb_paint_push_clip_rectangle (hb_paint_funcs_t *funcs, void *paint_data,
                              float xmin, float ymin,
                              float xmax, float ymax);

extern void
hb_paint_pop_clip (hb_paint_funcs_t *funcs, void *paint_data);

extern void
hb_paint_color (hb_paint_funcs_t *funcs, void *paint_data,
                hb_bool_t is_foreground,
                hb_color_t color);

extern void
hb_paint_image (hb_paint_funcs_t *funcs, void *paint_data,
                hb_blob_t *image,
                unsigned int width,
                unsigned int height,
                hb_tag_t format,
                float slant,
                hb_glyph_extents_t *extents);

extern void
hb_paint_linear_gradient (hb_paint_funcs_t *funcs, void *paint_data,
                          hb_color_line_t *color_line,
                          float x0, float y0,
                          float x1, float y1,
                          float x2, float y2);

extern void
hb_paint_radial_gradient (hb_paint_funcs_t *funcs, void *paint_data,
                          hb_color_line_t *color_line,
                          float x0, float y0,
                          float r0,
                          float x1, float y1,
                          float r1);

extern void
hb_paint_sweep_gradient (hb_paint_funcs_t *funcs, void *paint_data,
                         hb_color_line_t *color_line,
                         float x0, float y0,
                         float start_angle, float end_angle);

extern void
hb_paint_push_group (hb_paint_funcs_t *funcs, void *paint_data);

extern void
hb_paint_pop_group (hb_paint_funcs_t *funcs, void *paint_data,
                    hb_paint_composite_mode_t mode);

extern hb_bool_t
hb_paint_custom_palette_color (hb_paint_funcs_t *funcs, void *paint_data,
                               unsigned int color_index,
                               hb_color_t *color);

}
# 38 "../harfbuzz-6.0.0/src/hb-font.h" 2

extern "C" {
# 58 "../harfbuzz-6.0.0/src/hb-font.h"
typedef struct hb_font_funcs_t hb_font_funcs_t;

extern hb_font_funcs_t *
hb_font_funcs_create (void);

extern hb_font_funcs_t *
hb_font_funcs_get_empty (void);

extern hb_font_funcs_t *
hb_font_funcs_reference (hb_font_funcs_t *ffuncs);

extern void
hb_font_funcs_destroy (hb_font_funcs_t *ffuncs);

extern hb_bool_t
hb_font_funcs_set_user_data (hb_font_funcs_t *ffuncs,
        hb_user_data_key_t *key,
        void * data,
        hb_destroy_func_t destroy,
        hb_bool_t replace);


extern void *
hb_font_funcs_get_user_data (const hb_font_funcs_t *ffuncs,
        hb_user_data_key_t *key);


extern void
hb_font_funcs_make_immutable (hb_font_funcs_t *ffuncs);

extern hb_bool_t
hb_font_funcs_is_immutable (hb_font_funcs_t *ffuncs);
# 105 "../harfbuzz-6.0.0/src/hb-font.h"
typedef struct hb_font_extents_t {
  hb_position_t ascender;
  hb_position_t descender;
  hb_position_t line_gap;

  hb_position_t reserved9;
  hb_position_t reserved8;
  hb_position_t reserved7;
  hb_position_t reserved6;
  hb_position_t reserved5;
  hb_position_t reserved4;
  hb_position_t reserved3;
  hb_position_t reserved2;
  hb_position_t reserved1;
} hb_font_extents_t;
# 133 "../harfbuzz-6.0.0/src/hb-font.h"
typedef hb_bool_t (*hb_font_get_font_extents_func_t) (hb_font_t *font, void *font_data,
             hb_font_extents_t *extents,
             void *user_data);
# 147 "../harfbuzz-6.0.0/src/hb-font.h"
typedef hb_font_get_font_extents_func_t hb_font_get_font_h_extents_func_t;
# 159 "../harfbuzz-6.0.0/src/hb-font.h"
typedef hb_font_get_font_extents_func_t hb_font_get_font_v_extents_func_t;
# 178 "../harfbuzz-6.0.0/src/hb-font.h"
typedef hb_bool_t (*hb_font_get_nominal_glyph_func_t) (hb_font_t *font, void *font_data,
             hb_codepoint_t unicode,
             hb_codepoint_t *glyph,
             void *user_data);
# 201 "../harfbuzz-6.0.0/src/hb-font.h"
typedef hb_bool_t (*hb_font_get_variation_glyph_func_t) (hb_font_t *font, void *font_data,
        hb_codepoint_t unicode, hb_codepoint_t variation_selector,
        hb_codepoint_t *glyph,
        void *user_data);
# 227 "../harfbuzz-6.0.0/src/hb-font.h"
typedef unsigned int (*hb_font_get_nominal_glyphs_func_t) (hb_font_t *font, void *font_data,
          unsigned int count,
          const hb_codepoint_t *first_unicode,
          unsigned int unicode_stride,
          hb_codepoint_t *first_glyph,
          unsigned int glyph_stride,
          void *user_data);
# 250 "../harfbuzz-6.0.0/src/hb-font.h"
typedef hb_position_t (*hb_font_get_glyph_advance_func_t) (hb_font_t *font, void *font_data,
          hb_codepoint_t glyph,
          void *user_data);
# 264 "../harfbuzz-6.0.0/src/hb-font.h"
typedef hb_font_get_glyph_advance_func_t hb_font_get_glyph_h_advance_func_t;
# 276 "../harfbuzz-6.0.0/src/hb-font.h"
typedef hb_font_get_glyph_advance_func_t hb_font_get_glyph_v_advance_func_t;
# 294 "../harfbuzz-6.0.0/src/hb-font.h"
typedef void (*hb_font_get_glyph_advances_func_t) (hb_font_t* font, void* font_data,
         unsigned int count,
         const hb_codepoint_t *first_glyph,
         unsigned glyph_stride,
         hb_position_t *first_advance,
         unsigned advance_stride,
         void *user_data);
# 311 "../harfbuzz-6.0.0/src/hb-font.h"
typedef hb_font_get_glyph_advances_func_t hb_font_get_glyph_h_advances_func_t;
# 322 "../harfbuzz-6.0.0/src/hb-font.h"
typedef hb_font_get_glyph_advances_func_t hb_font_get_glyph_v_advances_func_t;
# 342 "../harfbuzz-6.0.0/src/hb-font.h"
typedef hb_bool_t (*hb_font_get_glyph_origin_func_t) (hb_font_t *font, void *font_data,
            hb_codepoint_t glyph,
            hb_position_t *x, hb_position_t *y,
            void *user_data);
# 357 "../harfbuzz-6.0.0/src/hb-font.h"
typedef hb_font_get_glyph_origin_func_t hb_font_get_glyph_h_origin_func_t;
# 369 "../harfbuzz-6.0.0/src/hb-font.h"
typedef hb_font_get_glyph_origin_func_t hb_font_get_glyph_v_origin_func_t;
# 383 "../harfbuzz-6.0.0/src/hb-font.h"
typedef hb_position_t (*hb_font_get_glyph_kerning_func_t) (hb_font_t *font, void *font_data,
          hb_codepoint_t first_glyph, hb_codepoint_t second_glyph,
          void *user_data);
# 395 "../harfbuzz-6.0.0/src/hb-font.h"
typedef hb_font_get_glyph_kerning_func_t hb_font_get_glyph_h_kerning_func_t;
# 414 "../harfbuzz-6.0.0/src/hb-font.h"
typedef hb_bool_t (*hb_font_get_glyph_extents_func_t) (hb_font_t *font, void *font_data,
             hb_codepoint_t glyph,
             hb_glyph_extents_t *extents,
             void *user_data);
# 438 "../harfbuzz-6.0.0/src/hb-font.h"
typedef hb_bool_t (*hb_font_get_glyph_contour_point_func_t) (hb_font_t *font, void *font_data,
            hb_codepoint_t glyph, unsigned int point_index,
            hb_position_t *x, hb_position_t *y,
            void *user_data);
# 461 "../harfbuzz-6.0.0/src/hb-font.h"
typedef hb_bool_t (*hb_font_get_glyph_name_func_t) (hb_font_t *font, void *font_data,
          hb_codepoint_t glyph,
          char *name, unsigned int size,
          void *user_data);
# 483 "../harfbuzz-6.0.0/src/hb-font.h"
typedef hb_bool_t (*hb_font_get_glyph_from_name_func_t) (hb_font_t *font, void *font_data,
        const char *name, int len,
        hb_codepoint_t *glyph,
        void *user_data);
# 503 "../harfbuzz-6.0.0/src/hb-font.h"
typedef void (*hb_font_get_glyph_shape_func_t) (hb_font_t *font, void *font_data,
      hb_codepoint_t glyph,
      hb_draw_funcs_t *draw_funcs, void *draw_data,
      void *user_data);
# 522 "../harfbuzz-6.0.0/src/hb-font.h"
typedef void (*hb_font_draw_glyph_func_t) (hb_font_t *font, void *font_data,
                                           hb_codepoint_t glyph,
                                           hb_draw_funcs_t *draw_funcs, void *draw_data,
                                           void *user_data);
# 542 "../harfbuzz-6.0.0/src/hb-font.h"
typedef void (*hb_font_paint_glyph_func_t) (hb_font_t *font, void *font_data,
                                            hb_codepoint_t glyph,
                                            hb_paint_funcs_t *paint_funcs, void *paint_data,
                                            unsigned int palette_index,
                                            hb_color_t foreground,
                                            void *user_data);
# 562 "../harfbuzz-6.0.0/src/hb-font.h"
extern void
hb_font_funcs_set_font_h_extents_func (hb_font_funcs_t *ffuncs,
           hb_font_get_font_h_extents_func_t func,
           void *user_data, hb_destroy_func_t destroy);
# 578 "../harfbuzz-6.0.0/src/hb-font.h"
extern void
hb_font_funcs_set_font_v_extents_func (hb_font_funcs_t *ffuncs,
           hb_font_get_font_v_extents_func_t func,
           void *user_data, hb_destroy_func_t destroy);
# 594 "../harfbuzz-6.0.0/src/hb-font.h"
extern void
hb_font_funcs_set_nominal_glyph_func (hb_font_funcs_t *ffuncs,
          hb_font_get_nominal_glyph_func_t func,
          void *user_data, hb_destroy_func_t destroy);
# 610 "../harfbuzz-6.0.0/src/hb-font.h"
extern void
hb_font_funcs_set_nominal_glyphs_func (hb_font_funcs_t *ffuncs,
           hb_font_get_nominal_glyphs_func_t func,
           void *user_data, hb_destroy_func_t destroy);
# 626 "../harfbuzz-6.0.0/src/hb-font.h"
extern void
hb_font_funcs_set_variation_glyph_func (hb_font_funcs_t *ffuncs,
     hb_font_get_variation_glyph_func_t func,
     void *user_data, hb_destroy_func_t destroy);
# 642 "../harfbuzz-6.0.0/src/hb-font.h"
extern void
hb_font_funcs_set_glyph_h_advance_func (hb_font_funcs_t *ffuncs,
     hb_font_get_glyph_h_advance_func_t func,
     void *user_data, hb_destroy_func_t destroy);
# 658 "../harfbuzz-6.0.0/src/hb-font.h"
extern void
hb_font_funcs_set_glyph_v_advance_func (hb_font_funcs_t *ffuncs,
     hb_font_get_glyph_v_advance_func_t func,
     void *user_data, hb_destroy_func_t destroy);
# 674 "../harfbuzz-6.0.0/src/hb-font.h"
extern void
hb_font_funcs_set_glyph_h_advances_func (hb_font_funcs_t *ffuncs,
     hb_font_get_glyph_h_advances_func_t func,
     void *user_data, hb_destroy_func_t destroy);
# 690 "../harfbuzz-6.0.0/src/hb-font.h"
extern void
hb_font_funcs_set_glyph_v_advances_func (hb_font_funcs_t *ffuncs,
     hb_font_get_glyph_v_advances_func_t func,
     void *user_data, hb_destroy_func_t destroy);
# 706 "../harfbuzz-6.0.0/src/hb-font.h"
extern void
hb_font_funcs_set_glyph_h_origin_func (hb_font_funcs_t *ffuncs,
           hb_font_get_glyph_h_origin_func_t func,
           void *user_data, hb_destroy_func_t destroy);
# 722 "../harfbuzz-6.0.0/src/hb-font.h"
extern void
hb_font_funcs_set_glyph_v_origin_func (hb_font_funcs_t *ffuncs,
           hb_font_get_glyph_v_origin_func_t func,
           void *user_data, hb_destroy_func_t destroy);
# 738 "../harfbuzz-6.0.0/src/hb-font.h"
extern void
hb_font_funcs_set_glyph_h_kerning_func (hb_font_funcs_t *ffuncs,
     hb_font_get_glyph_h_kerning_func_t func,
     void *user_data, hb_destroy_func_t destroy);
# 754 "../harfbuzz-6.0.0/src/hb-font.h"
extern void
hb_font_funcs_set_glyph_extents_func (hb_font_funcs_t *ffuncs,
          hb_font_get_glyph_extents_func_t func,
          void *user_data, hb_destroy_func_t destroy);
# 770 "../harfbuzz-6.0.0/src/hb-font.h"
extern void
hb_font_funcs_set_glyph_contour_point_func (hb_font_funcs_t *ffuncs,
         hb_font_get_glyph_contour_point_func_t func,
         void *user_data, hb_destroy_func_t destroy);
# 786 "../harfbuzz-6.0.0/src/hb-font.h"
extern void
hb_font_funcs_set_glyph_name_func (hb_font_funcs_t *ffuncs,
       hb_font_get_glyph_name_func_t func,
       void *user_data, hb_destroy_func_t destroy);
# 802 "../harfbuzz-6.0.0/src/hb-font.h"
extern void
hb_font_funcs_set_glyph_from_name_func (hb_font_funcs_t *ffuncs,
     hb_font_get_glyph_from_name_func_t func,
     void *user_data, hb_destroy_func_t destroy);
# 821 "../harfbuzz-6.0.0/src/hb-font.h"
extern void
hb_font_funcs_set_glyph_shape_func (hb_font_funcs_t *ffuncs,
        hb_font_get_glyph_shape_func_t func,
        void *user_data, hb_destroy_func_t destroy);
# 838 "../harfbuzz-6.0.0/src/hb-font.h"
extern void
hb_font_funcs_set_draw_glyph_func (hb_font_funcs_t *ffuncs,
                                   hb_font_draw_glyph_func_t func,
                                   void *user_data, hb_destroy_func_t destroy);
# 854 "../harfbuzz-6.0.0/src/hb-font.h"
extern void
hb_font_funcs_set_paint_glyph_func (hb_font_funcs_t *ffuncs,
                                    hb_font_paint_glyph_func_t func,
                                    void *user_data, hb_destroy_func_t destroy);



extern hb_bool_t
hb_font_get_h_extents (hb_font_t *font,
         hb_font_extents_t *extents);
extern hb_bool_t
hb_font_get_v_extents (hb_font_t *font,
         hb_font_extents_t *extents);

extern hb_bool_t
hb_font_get_nominal_glyph (hb_font_t *font,
      hb_codepoint_t unicode,
      hb_codepoint_t *glyph);
extern hb_bool_t
hb_font_get_variation_glyph (hb_font_t *font,
        hb_codepoint_t unicode, hb_codepoint_t variation_selector,
        hb_codepoint_t *glyph);

extern unsigned int
hb_font_get_nominal_glyphs (hb_font_t *font,
       unsigned int count,
       const hb_codepoint_t *first_unicode,
       unsigned int unicode_stride,
       hb_codepoint_t *first_glyph,
       unsigned int glyph_stride);

extern hb_position_t
hb_font_get_glyph_h_advance (hb_font_t *font,
        hb_codepoint_t glyph);
extern hb_position_t
hb_font_get_glyph_v_advance (hb_font_t *font,
        hb_codepoint_t glyph);

extern void
hb_font_get_glyph_h_advances (hb_font_t* font,
         unsigned int count,
         const hb_codepoint_t *first_glyph,
         unsigned glyph_stride,
         hb_position_t *first_advance,
         unsigned advance_stride);
extern void
hb_font_get_glyph_v_advances (hb_font_t* font,
         unsigned int count,
         const hb_codepoint_t *first_glyph,
         unsigned glyph_stride,
         hb_position_t *first_advance,
         unsigned advance_stride);

extern hb_bool_t
hb_font_get_glyph_h_origin (hb_font_t *font,
       hb_codepoint_t glyph,
       hb_position_t *x, hb_position_t *y);
extern hb_bool_t
hb_font_get_glyph_v_origin (hb_font_t *font,
       hb_codepoint_t glyph,
       hb_position_t *x, hb_position_t *y);

extern hb_position_t
hb_font_get_glyph_h_kerning (hb_font_t *font,
        hb_codepoint_t left_glyph, hb_codepoint_t right_glyph);

extern hb_bool_t
hb_font_get_glyph_extents (hb_font_t *font,
      hb_codepoint_t glyph,
      hb_glyph_extents_t *extents);

extern hb_bool_t
hb_font_get_glyph_contour_point (hb_font_t *font,
     hb_codepoint_t glyph, unsigned int point_index,
     hb_position_t *x, hb_position_t *y);

extern hb_bool_t
hb_font_get_glyph_name (hb_font_t *font,
   hb_codepoint_t glyph,
   char *name, unsigned int size);
extern hb_bool_t
hb_font_get_glyph_from_name (hb_font_t *font,
        const char *name, int len,
        hb_codepoint_t *glyph);

extern void
hb_font_get_glyph_shape (hb_font_t *font,
    hb_codepoint_t glyph,
    hb_draw_funcs_t *dfuncs, void *draw_data);

extern void
hb_font_draw_glyph (hb_font_t *font,
                    hb_codepoint_t glyph,
                    hb_draw_funcs_t *dfuncs, void *draw_data);

extern void
hb_font_paint_glyph (hb_font_t *font,
                     hb_codepoint_t glyph,
                     hb_paint_funcs_t *pfuncs, void *paint_data,
                     unsigned int palette_index,
                     hb_color_t foreground);





extern hb_bool_t
hb_font_get_glyph (hb_font_t *font,
     hb_codepoint_t unicode, hb_codepoint_t variation_selector,
     hb_codepoint_t *glyph);

extern void
hb_font_get_extents_for_direction (hb_font_t *font,
       hb_direction_t direction,
       hb_font_extents_t *extents);
extern void
hb_font_get_glyph_advance_for_direction (hb_font_t *font,
      hb_codepoint_t glyph,
      hb_direction_t direction,
      hb_position_t *x, hb_position_t *y);
extern void
hb_font_get_glyph_advances_for_direction (hb_font_t* font,
       hb_direction_t direction,
       unsigned int count,
       const hb_codepoint_t *first_glyph,
       unsigned glyph_stride,
       hb_position_t *first_advance,
       unsigned advance_stride);
extern void
hb_font_get_glyph_origin_for_direction (hb_font_t *font,
     hb_codepoint_t glyph,
     hb_direction_t direction,
     hb_position_t *x, hb_position_t *y);
extern void
hb_font_add_glyph_origin_for_direction (hb_font_t *font,
     hb_codepoint_t glyph,
     hb_direction_t direction,
     hb_position_t *x, hb_position_t *y);
extern void
hb_font_subtract_glyph_origin_for_direction (hb_font_t *font,
          hb_codepoint_t glyph,
          hb_direction_t direction,
          hb_position_t *x, hb_position_t *y);

extern void
hb_font_get_glyph_kerning_for_direction (hb_font_t *font,
      hb_codepoint_t first_glyph, hb_codepoint_t second_glyph,
      hb_direction_t direction,
      hb_position_t *x, hb_position_t *y);

extern hb_bool_t
hb_font_get_glyph_extents_for_origin (hb_font_t *font,
          hb_codepoint_t glyph,
          hb_direction_t direction,
          hb_glyph_extents_t *extents);

extern hb_bool_t
hb_font_get_glyph_contour_point_for_origin (hb_font_t *font,
         hb_codepoint_t glyph, unsigned int point_index,
         hb_direction_t direction,
         hb_position_t *x, hb_position_t *y);


extern void
hb_font_glyph_to_string (hb_font_t *font,
    hb_codepoint_t glyph,
    char *s, unsigned int size);

extern hb_bool_t
hb_font_glyph_from_string (hb_font_t *font,
      const char *s, int len,
      hb_codepoint_t *glyph);
# 1034 "../harfbuzz-6.0.0/src/hb-font.h"
extern hb_font_t *
hb_font_create (hb_face_t *face);

extern hb_font_t *
hb_font_create_sub_font (hb_font_t *parent);

extern hb_font_t *
hb_font_get_empty (void);

extern hb_font_t *
hb_font_reference (hb_font_t *font);

extern void
hb_font_destroy (hb_font_t *font);

extern hb_bool_t
hb_font_set_user_data (hb_font_t *font,
         hb_user_data_key_t *key,
         void * data,
         hb_destroy_func_t destroy,
         hb_bool_t replace);


extern void *
hb_font_get_user_data (const hb_font_t *font,
         hb_user_data_key_t *key);

extern void
hb_font_make_immutable (hb_font_t *font);

extern hb_bool_t
hb_font_is_immutable (hb_font_t *font);

extern unsigned int
hb_font_get_serial (hb_font_t *font);

extern void
hb_font_changed (hb_font_t *font);

extern void
hb_font_set_parent (hb_font_t *font,
      hb_font_t *parent);

extern hb_font_t *
hb_font_get_parent (hb_font_t *font);

extern void
hb_font_set_face (hb_font_t *font,
    hb_face_t *face);

extern hb_face_t *
hb_font_get_face (hb_font_t *font);


extern void
hb_font_set_funcs (hb_font_t *font,
     hb_font_funcs_t *klass,
     void *font_data,
     hb_destroy_func_t destroy);


extern void
hb_font_set_funcs_data (hb_font_t *font,
   void *font_data,
   hb_destroy_func_t destroy);


extern void
hb_font_set_scale (hb_font_t *font,
     int x_scale,
     int y_scale);

extern void
hb_font_get_scale (hb_font_t *font,
     int *x_scale,
     int *y_scale);




extern void
hb_font_set_ppem (hb_font_t *font,
    unsigned int x_ppem,
    unsigned int y_ppem);

extern void
hb_font_get_ppem (hb_font_t *font,
    unsigned int *x_ppem,
    unsigned int *y_ppem);





extern void
hb_font_set_ptem (hb_font_t *font, float ptem);

extern float
hb_font_get_ptem (hb_font_t *font);

extern void
hb_font_set_synthetic_slant (hb_font_t *font, float slant);

extern float
hb_font_get_synthetic_slant (hb_font_t *font);

extern void
hb_font_set_variations (hb_font_t *font,
   const hb_variation_t *variations,
   unsigned int variations_length);

extern void
hb_font_set_var_coords_design (hb_font_t *font,
          const float *coords,
          unsigned int coords_length);

extern const float *
hb_font_get_var_coords_design (hb_font_t *font,
          unsigned int *length);

extern void
hb_font_set_var_coords_normalized (hb_font_t *font,
       const int *coords,
       unsigned int coords_length);

extern const int *
hb_font_get_var_coords_normalized (hb_font_t *font,
       unsigned int *length);
# 1172 "../harfbuzz-6.0.0/src/hb-font.h"
#define HB_FONT_NO_VAR_NAMED_INSTANCE 0xFFFFFFFF

extern void
hb_font_set_var_named_instance (hb_font_t *font,
    unsigned int instance_index);

extern unsigned int
hb_font_get_var_named_instance (hb_font_t *font);

}
# 40 "../harfbuzz-6.0.0/src/hb-buffer.h" 2

extern "C" {
# 62 "../harfbuzz-6.0.0/src/hb-buffer.h"
typedef struct hb_glyph_info_t {
  hb_codepoint_t codepoint;

  hb_mask_t mask;

  uint32_t cluster;


  hb_var_int_t var1;
  hb_var_int_t var2;
} hb_glyph_info_t;
# 160 "../harfbuzz-6.0.0/src/hb-buffer.h"
typedef enum {
  HB_GLYPH_FLAG_UNSAFE_TO_BREAK = 0x00000001,
  HB_GLYPH_FLAG_UNSAFE_TO_CONCAT = 0x00000002,
  HB_GLYPH_FLAG_SAFE_TO_INSERT_TATWEEL = 0x00000004,

  HB_GLYPH_FLAG_DEFINED = 0x00000007
} hb_glyph_flags_t;

extern hb_glyph_flags_t
hb_glyph_info_get_glyph_flags (const hb_glyph_info_t *info);

#define hb_glyph_info_get_glyph_flags(info) ((hb_glyph_flags_t) ((unsigned int) (info)->mask & HB_GLYPH_FLAG_DEFINED))
# 191 "../harfbuzz-6.0.0/src/hb-buffer.h"
typedef struct hb_glyph_position_t {
  hb_position_t x_advance;
  hb_position_t y_advance;
  hb_position_t x_offset;
  hb_position_t y_offset;


  hb_var_int_t var;
} hb_glyph_position_t;
# 211 "../harfbuzz-6.0.0/src/hb-buffer.h"
typedef struct hb_segment_properties_t {
  hb_direction_t direction;
  hb_script_t script;
  hb_language_t language;

  void *reserved1;
  void *reserved2;
} hb_segment_properties_t;






#define HB_SEGMENT_PROPERTIES_DEFAULT {HB_DIRECTION_INVALID, HB_SCRIPT_INVALID, HB_LANGUAGE_INVALID, (void *) 0, (void *) 0}





extern hb_bool_t
hb_segment_properties_equal (const hb_segment_properties_t *a,
        const hb_segment_properties_t *b);

extern unsigned int
hb_segment_properties_hash (const hb_segment_properties_t *p);

extern void
hb_segment_properties_overlay (hb_segment_properties_t *p,
          const hb_segment_properties_t *src);
# 250 "../harfbuzz-6.0.0/src/hb-buffer.h"
typedef struct hb_buffer_t hb_buffer_t;

extern hb_buffer_t *
hb_buffer_create (void);

extern hb_buffer_t *
hb_buffer_create_similar (const hb_buffer_t *src);

extern void
hb_buffer_reset (hb_buffer_t *buffer);


extern hb_buffer_t *
hb_buffer_get_empty (void);

extern hb_buffer_t *
hb_buffer_reference (hb_buffer_t *buffer);

extern void
hb_buffer_destroy (hb_buffer_t *buffer);

extern hb_bool_t
hb_buffer_set_user_data (hb_buffer_t *buffer,
    hb_user_data_key_t *key,
    void * data,
    hb_destroy_func_t destroy,
    hb_bool_t replace);

extern void *
hb_buffer_get_user_data (const hb_buffer_t *buffer,
    hb_user_data_key_t *key);
# 291 "../harfbuzz-6.0.0/src/hb-buffer.h"
typedef enum {
  HB_BUFFER_CONTENT_TYPE_INVALID = 0,
  HB_BUFFER_CONTENT_TYPE_UNICODE,
  HB_BUFFER_CONTENT_TYPE_GLYPHS
} hb_buffer_content_type_t;

extern void
hb_buffer_set_content_type (hb_buffer_t *buffer,
       hb_buffer_content_type_t content_type);

extern hb_buffer_content_type_t
hb_buffer_get_content_type (const hb_buffer_t *buffer);


extern void
hb_buffer_set_unicode_funcs (hb_buffer_t *buffer,
        hb_unicode_funcs_t *unicode_funcs);

extern hb_unicode_funcs_t *
hb_buffer_get_unicode_funcs (const hb_buffer_t *buffer);

extern void
hb_buffer_set_direction (hb_buffer_t *buffer,
    hb_direction_t direction);

extern hb_direction_t
hb_buffer_get_direction (const hb_buffer_t *buffer);

extern void
hb_buffer_set_script (hb_buffer_t *buffer,
        hb_script_t script);

extern hb_script_t
hb_buffer_get_script (const hb_buffer_t *buffer);

extern void
hb_buffer_set_language (hb_buffer_t *buffer,
   hb_language_t language);


extern hb_language_t
hb_buffer_get_language (const hb_buffer_t *buffer);

extern void
hb_buffer_set_segment_properties (hb_buffer_t *buffer,
      const hb_segment_properties_t *props);

extern void
hb_buffer_get_segment_properties (const hb_buffer_t *buffer,
      hb_segment_properties_t *props);

extern void
hb_buffer_guess_segment_properties (hb_buffer_t *buffer);
# 396 "../harfbuzz-6.0.0/src/hb-buffer.h"
typedef enum {
  HB_BUFFER_FLAG_DEFAULT = 0x00000000u,
  HB_BUFFER_FLAG_BOT = 0x00000001u,
  HB_BUFFER_FLAG_EOT = 0x00000002u,
  HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES = 0x00000004u,
  HB_BUFFER_FLAG_REMOVE_DEFAULT_IGNORABLES = 0x00000008u,
  HB_BUFFER_FLAG_DO_NOT_INSERT_DOTTED_CIRCLE = 0x00000010u,
  HB_BUFFER_FLAG_VERIFY = 0x00000020u,
  HB_BUFFER_FLAG_PRODUCE_UNSAFE_TO_CONCAT = 0x00000040u,
  HB_BUFFER_FLAG_PRODUCE_SAFE_TO_INSERT_TATWEEL = 0x00000080u,

  HB_BUFFER_FLAG_DEFINED = 0x000000FFu
} hb_buffer_flags_t;

extern void
hb_buffer_set_flags (hb_buffer_t *buffer,
       hb_buffer_flags_t flags);

extern hb_buffer_flags_t
hb_buffer_get_flags (const hb_buffer_t *buffer);
# 445 "../harfbuzz-6.0.0/src/hb-buffer.h"
typedef enum {
  HB_BUFFER_CLUSTER_LEVEL_MONOTONE_GRAPHEMES = 0,
  HB_BUFFER_CLUSTER_LEVEL_MONOTONE_CHARACTERS = 1,
  HB_BUFFER_CLUSTER_LEVEL_CHARACTERS = 2,
  HB_BUFFER_CLUSTER_LEVEL_DEFAULT = HB_BUFFER_CLUSTER_LEVEL_MONOTONE_GRAPHEMES
} hb_buffer_cluster_level_t;

extern void
hb_buffer_set_cluster_level (hb_buffer_t *buffer,
        hb_buffer_cluster_level_t cluster_level);

extern hb_buffer_cluster_level_t
hb_buffer_get_cluster_level (const hb_buffer_t *buffer);
# 467 "../harfbuzz-6.0.0/src/hb-buffer.h"
#define HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT 0xFFFDu

extern void
hb_buffer_set_replacement_codepoint (hb_buffer_t *buffer,
         hb_codepoint_t replacement);

extern hb_codepoint_t
hb_buffer_get_replacement_codepoint (const hb_buffer_t *buffer);

extern void
hb_buffer_set_invisible_glyph (hb_buffer_t *buffer,
          hb_codepoint_t invisible);

extern hb_codepoint_t
hb_buffer_get_invisible_glyph (const hb_buffer_t *buffer);

extern void
hb_buffer_set_not_found_glyph (hb_buffer_t *buffer,
          hb_codepoint_t not_found);

extern hb_codepoint_t
hb_buffer_get_not_found_glyph (const hb_buffer_t *buffer);






extern void
hb_buffer_clear_contents (hb_buffer_t *buffer);

extern hb_bool_t
hb_buffer_pre_allocate (hb_buffer_t *buffer,
   unsigned int size);


extern hb_bool_t
hb_buffer_allocation_successful (hb_buffer_t *buffer);

extern void
hb_buffer_reverse (hb_buffer_t *buffer);

extern void
hb_buffer_reverse_range (hb_buffer_t *buffer,
    unsigned int start, unsigned int end);

extern void
hb_buffer_reverse_clusters (hb_buffer_t *buffer);




extern void
hb_buffer_add (hb_buffer_t *buffer,
        hb_codepoint_t codepoint,
        unsigned int cluster);

extern void
hb_buffer_add_utf8 (hb_buffer_t *buffer,
      const char *text,
      int text_length,
      unsigned int item_offset,
      int item_length);

extern void
hb_buffer_add_utf16 (hb_buffer_t *buffer,
       const uint16_t *text,
       int text_length,
       unsigned int item_offset,
       int item_length);

extern void
hb_buffer_add_utf32 (hb_buffer_t *buffer,
       const uint32_t *text,
       int text_length,
       unsigned int item_offset,
       int item_length);

extern void
hb_buffer_add_latin1 (hb_buffer_t *buffer,
        const uint8_t *text,
        int text_length,
        unsigned int item_offset,
        int item_length);

extern void
hb_buffer_add_codepoints (hb_buffer_t *buffer,
     const hb_codepoint_t *text,
     int text_length,
     unsigned int item_offset,
     int item_length);

extern void
hb_buffer_append (hb_buffer_t *buffer,
    const hb_buffer_t *source,
    unsigned int start,
    unsigned int end);

extern hb_bool_t
hb_buffer_set_length (hb_buffer_t *buffer,
        unsigned int length);

extern unsigned int
hb_buffer_get_length (const hb_buffer_t *buffer);



extern hb_glyph_info_t *
hb_buffer_get_glyph_infos (hb_buffer_t *buffer,
      unsigned int *length);

extern hb_glyph_position_t *
hb_buffer_get_glyph_positions (hb_buffer_t *buffer,
          unsigned int *length);

extern hb_bool_t
hb_buffer_has_positions (hb_buffer_t *buffer);


extern void
hb_buffer_normalize_glyphs (hb_buffer_t *buffer);
# 610 "../harfbuzz-6.0.0/src/hb-buffer.h"
typedef enum {
  HB_BUFFER_SERIALIZE_FLAG_DEFAULT = 0x00000000u,
  HB_BUFFER_SERIALIZE_FLAG_NO_CLUSTERS = 0x00000001u,
  HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS = 0x00000002u,
  HB_BUFFER_SERIALIZE_FLAG_NO_GLYPH_NAMES = 0x00000004u,
  HB_BUFFER_SERIALIZE_FLAG_GLYPH_EXTENTS = 0x00000008u,
  HB_BUFFER_SERIALIZE_FLAG_GLYPH_FLAGS = 0x00000010u,
  HB_BUFFER_SERIALIZE_FLAG_NO_ADVANCES = 0x00000020u,

  HB_BUFFER_SERIALIZE_FLAG_DEFINED = 0x0000003Fu
} hb_buffer_serialize_flags_t;
# 633 "../harfbuzz-6.0.0/src/hb-buffer.h"
typedef enum {
  HB_BUFFER_SERIALIZE_FORMAT_TEXT = ((hb_tag_t)((((uint32_t)('T')&0xFF)<<24)|(((uint32_t)('E')&0xFF)<<16)|(((uint32_t)('X')&0xFF)<<8)|((uint32_t)('T')&0xFF))),
  HB_BUFFER_SERIALIZE_FORMAT_JSON = ((hb_tag_t)((((uint32_t)('J')&0xFF)<<24)|(((uint32_t)('S')&0xFF)<<16)|(((uint32_t)('O')&0xFF)<<8)|((uint32_t)('N')&0xFF))),
  HB_BUFFER_SERIALIZE_FORMAT_INVALID = ((hb_tag_t)((((uint32_t)(0)&0xFF)<<24)|(((uint32_t)(0)&0xFF)<<16)|(((uint32_t)(0)&0xFF)<<8)|((uint32_t)(0)&0xFF)))
} hb_buffer_serialize_format_t;

extern hb_buffer_serialize_format_t
hb_buffer_serialize_format_from_string (const char *str, int len);

extern const char *
hb_buffer_serialize_format_to_string (hb_buffer_serialize_format_t format);

extern const char **
hb_buffer_serialize_list_formats (void);

extern unsigned int
hb_buffer_serialize_glyphs (hb_buffer_t *buffer,
       unsigned int start,
       unsigned int end,
       char *buf,
       unsigned int buf_size,
       unsigned int *buf_consumed,
       hb_font_t *font,
       hb_buffer_serialize_format_t format,
       hb_buffer_serialize_flags_t flags);

extern unsigned int
hb_buffer_serialize_unicode (hb_buffer_t *buffer,
        unsigned int start,
        unsigned int end,
        char *buf,
        unsigned int buf_size,
        unsigned int *buf_consumed,
        hb_buffer_serialize_format_t format,
        hb_buffer_serialize_flags_t flags);

extern unsigned int
hb_buffer_serialize (hb_buffer_t *buffer,
       unsigned int start,
       unsigned int end,
       char *buf,
       unsigned int buf_size,
       unsigned int *buf_consumed,
       hb_font_t *font,
       hb_buffer_serialize_format_t format,
       hb_buffer_serialize_flags_t flags);

extern hb_bool_t
hb_buffer_deserialize_glyphs (hb_buffer_t *buffer,
         const char *buf,
         int buf_len,
         const char **end_ptr,
         hb_font_t *font,
         hb_buffer_serialize_format_t format);

extern hb_bool_t
hb_buffer_deserialize_unicode (hb_buffer_t *buffer,
          const char *buf,
          int buf_len,
          const char **end_ptr,
          hb_buffer_serialize_format_t format);
# 730 "../harfbuzz-6.0.0/src/hb-buffer.h"
typedef enum {
  HB_BUFFER_DIFF_FLAG_EQUAL = 0x0000,



  HB_BUFFER_DIFF_FLAG_CONTENT_TYPE_MISMATCH = 0x0001,




  HB_BUFFER_DIFF_FLAG_LENGTH_MISMATCH = 0x0002,




  HB_BUFFER_DIFF_FLAG_NOTDEF_PRESENT = 0x0004,
  HB_BUFFER_DIFF_FLAG_DOTTED_CIRCLE_PRESENT = 0x0008,



  HB_BUFFER_DIFF_FLAG_CODEPOINT_MISMATCH = 0x0010,
  HB_BUFFER_DIFF_FLAG_CLUSTER_MISMATCH = 0x0020,
  HB_BUFFER_DIFF_FLAG_GLYPH_FLAGS_MISMATCH = 0x0040,
  HB_BUFFER_DIFF_FLAG_POSITION_MISMATCH = 0x0080

} hb_buffer_diff_flags_t;


extern hb_buffer_diff_flags_t
hb_buffer_diff (hb_buffer_t *buffer,
  hb_buffer_t *reference,
  hb_codepoint_t dottedcircle_glyph,
  unsigned int position_fuzz);
# 786 "../harfbuzz-6.0.0/src/hb-buffer.h"
typedef hb_bool_t (*hb_buffer_message_func_t) (hb_buffer_t *buffer,
        hb_font_t *font,
        const char *message,
        void *user_data);

extern void
hb_buffer_set_message_func (hb_buffer_t *buffer,
       hb_buffer_message_func_t func,
       void *user_data, hb_destroy_func_t destroy);


}
# 33 "../harfbuzz-6.0.0/src/hb.h" 2
# 1 "../harfbuzz-6.0.0/src/hb-common.h" 1
# 34 "../harfbuzz-6.0.0/src/hb.h" 2
# 1 "../harfbuzz-6.0.0/src/hb-deprecated.h" 1
# 32 "../harfbuzz-6.0.0/src/hb-deprecated.h"
#define HB_DEPRECATED_H 

# 1 "../harfbuzz-6.0.0/src/hb-common.h" 1
# 35 "../harfbuzz-6.0.0/src/hb-deprecated.h" 2
# 1 "../harfbuzz-6.0.0/src/hb-unicode.h" 1
# 36 "../harfbuzz-6.0.0/src/hb-deprecated.h" 2
# 1 "../harfbuzz-6.0.0/src/hb-font.h" 1
# 37 "../harfbuzz-6.0.0/src/hb-deprecated.h" 2
# 1 "../harfbuzz-6.0.0/src/hb-set.h" 1
# 38 "../harfbuzz-6.0.0/src/hb-deprecated.h" 2
# 51 "../harfbuzz-6.0.0/src/hb-deprecated.h"
extern "C" {
# 63 "../harfbuzz-6.0.0/src/hb-deprecated.h"
#define HB_SCRIPT_CANADIAN_ABORIGINAL HB_SCRIPT_CANADIAN_SYLLABICS
# 72 "../harfbuzz-6.0.0/src/hb-deprecated.h"
#define HB_BUFFER_FLAGS_DEFAULT HB_BUFFER_FLAG_DEFAULT







#define HB_BUFFER_SERIALIZE_FLAGS_DEFAULT HB_BUFFER_SERIALIZE_FLAG_DEFAULT
# 100 "../harfbuzz-6.0.0/src/hb-deprecated.h"
typedef hb_bool_t (*hb_font_get_glyph_func_t) (hb_font_t *font, void *font_data,
            hb_codepoint_t unicode, hb_codepoint_t variation_selector,
            hb_codepoint_t *glyph,
            void *user_data);

__attribute__((__deprecated__("Use '" "hb_font_funcs_set_nominal_glyph_func and hb_font_funcs_set_variation_glyph_func" "' instead")))
extern void
hb_font_funcs_set_glyph_func (hb_font_funcs_t *ffuncs,
         hb_font_get_glyph_func_t func,
         void *user_data, hb_destroy_func_t destroy);
# 121 "../harfbuzz-6.0.0/src/hb-deprecated.h"
typedef unsigned int (*hb_unicode_eastasian_width_func_t) (hb_unicode_funcs_t *ufuncs,
           hb_codepoint_t unicode,
           void *user_data);
# 137 "../harfbuzz-6.0.0/src/hb-deprecated.h"
extern __attribute__((__deprecated__)) void
hb_unicode_funcs_set_eastasian_width_func (hb_unicode_funcs_t *ufuncs,
        hb_unicode_eastasian_width_func_t func,
        void *user_data, hb_destroy_func_t destroy);
# 152 "../harfbuzz-6.0.0/src/hb-deprecated.h"
extern __attribute__((__deprecated__)) unsigned int
hb_unicode_eastasian_width (hb_unicode_funcs_t *ufuncs,
       hb_codepoint_t unicode);
# 177 "../harfbuzz-6.0.0/src/hb-deprecated.h"
typedef unsigned int (*hb_unicode_decompose_compatibility_func_t) (hb_unicode_funcs_t *ufuncs,
            hb_codepoint_t u,
            hb_codepoint_t *decomposed,
            void *user_data);
# 189 "../harfbuzz-6.0.0/src/hb-deprecated.h"
#define HB_UNICODE_MAX_DECOMPOSITION_LEN (18+1)
# 205 "../harfbuzz-6.0.0/src/hb-deprecated.h"
extern __attribute__((__deprecated__)) void
hb_unicode_funcs_set_decompose_compatibility_func (hb_unicode_funcs_t *ufuncs,
         hb_unicode_decompose_compatibility_func_t func,
         void *user_data, hb_destroy_func_t destroy);

extern __attribute__((__deprecated__)) unsigned int
hb_unicode_decompose_compatibility (hb_unicode_funcs_t *ufuncs,
        hb_codepoint_t u,
        hb_codepoint_t *decomposed);
# 225 "../harfbuzz-6.0.0/src/hb-deprecated.h"
typedef hb_font_get_glyph_kerning_func_t hb_font_get_glyph_v_kerning_func_t;
# 239 "../harfbuzz-6.0.0/src/hb-deprecated.h"
extern void
hb_font_funcs_set_glyph_v_kerning_func (hb_font_funcs_t *ffuncs,
     hb_font_get_glyph_v_kerning_func_t func,
     void *user_data, hb_destroy_func_t destroy);

extern hb_position_t
hb_font_get_glyph_v_kerning (hb_font_t *font,
        hb_codepoint_t top_glyph, hb_codepoint_t bottom_glyph);



}
# 35 "../harfbuzz-6.0.0/src/hb.h" 2
# 1 "../harfbuzz-6.0.0/src/hb-draw.h" 1
# 36 "../harfbuzz-6.0.0/src/hb.h" 2
# 1 "../harfbuzz-6.0.0/src/hb-face.h" 1
# 37 "../harfbuzz-6.0.0/src/hb.h" 2
# 1 "../harfbuzz-6.0.0/src/hb-font.h" 1
# 38 "../harfbuzz-6.0.0/src/hb.h" 2
# 1 "../harfbuzz-6.0.0/src/hb-map.h" 1
# 39 "../harfbuzz-6.0.0/src/hb.h" 2
# 1 "../harfbuzz-6.0.0/src/hb-paint.h" 1
# 40 "../harfbuzz-6.0.0/src/hb.h" 2
# 1 "../harfbuzz-6.0.0/src/hb-set.h" 1
# 41 "../harfbuzz-6.0.0/src/hb.h" 2
# 1 "../harfbuzz-6.0.0/src/hb-shape.h" 1
# 34 "../harfbuzz-6.0.0/src/hb-shape.h"
#define HB_SHAPE_H 

# 1 "../harfbuzz-6.0.0/src/hb-common.h" 1
# 37 "../harfbuzz-6.0.0/src/hb-shape.h" 2
# 1 "../harfbuzz-6.0.0/src/hb-buffer.h" 1
# 38 "../harfbuzz-6.0.0/src/hb-shape.h" 2
# 1 "../harfbuzz-6.0.0/src/hb-font.h" 1
# 39 "../harfbuzz-6.0.0/src/hb-shape.h" 2

extern "C" {


extern void
hb_shape (hb_font_t *font,
   hb_buffer_t *buffer,
   const hb_feature_t *features,
   unsigned int num_features);

extern hb_bool_t
hb_shape_full (hb_font_t *font,
        hb_buffer_t *buffer,
        const hb_feature_t *features,
        unsigned int num_features,
        const char * const *shaper_list);

extern const char **
hb_shape_list_shapers (void);


}
# 42 "../harfbuzz-6.0.0/src/hb.h" 2
# 1 "../harfbuzz-6.0.0/src/hb-shape-plan.h" 1
# 32 "../harfbuzz-6.0.0/src/hb-shape-plan.h"
#define HB_SHAPE_PLAN_H 

# 1 "../harfbuzz-6.0.0/src/hb-common.h" 1
# 35 "../harfbuzz-6.0.0/src/hb-shape-plan.h" 2
# 1 "../harfbuzz-6.0.0/src/hb-font.h" 1
# 36 "../harfbuzz-6.0.0/src/hb-shape-plan.h" 2

extern "C" {
# 53 "../harfbuzz-6.0.0/src/hb-shape-plan.h"
typedef struct hb_shape_plan_t hb_shape_plan_t;

extern hb_shape_plan_t *
hb_shape_plan_create (hb_face_t *face,
        const hb_segment_properties_t *props,
        const hb_feature_t *user_features,
        unsigned int num_user_features,
        const char * const *shaper_list);

extern hb_shape_plan_t *
hb_shape_plan_create_cached (hb_face_t *face,
        const hb_segment_properties_t *props,
        const hb_feature_t *user_features,
        unsigned int num_user_features,
        const char * const *shaper_list);

extern hb_shape_plan_t *
hb_shape_plan_create2 (hb_face_t *face,
         const hb_segment_properties_t *props,
         const hb_feature_t *user_features,
         unsigned int num_user_features,
         const int *coords,
         unsigned int num_coords,
         const char * const *shaper_list);

extern hb_shape_plan_t *
hb_shape_plan_create_cached2 (hb_face_t *face,
         const hb_segment_properties_t *props,
         const hb_feature_t *user_features,
         unsigned int num_user_features,
         const int *coords,
         unsigned int num_coords,
         const char * const *shaper_list);


extern hb_shape_plan_t *
hb_shape_plan_get_empty (void);

extern hb_shape_plan_t *
hb_shape_plan_reference (hb_shape_plan_t *shape_plan);

extern void
hb_shape_plan_destroy (hb_shape_plan_t *shape_plan);

extern hb_bool_t
hb_shape_plan_set_user_data (hb_shape_plan_t *shape_plan,
        hb_user_data_key_t *key,
        void * data,
        hb_destroy_func_t destroy,
        hb_bool_t replace);

extern void *
hb_shape_plan_get_user_data (const hb_shape_plan_t *shape_plan,
        hb_user_data_key_t *key);


extern hb_bool_t
hb_shape_plan_execute (hb_shape_plan_t *shape_plan,
         hb_font_t *font,
         hb_buffer_t *buffer,
         const hb_feature_t *features,
         unsigned int num_features);

extern const char *
hb_shape_plan_get_shaper (hb_shape_plan_t *shape_plan);


}
# 43 "../harfbuzz-6.0.0/src/hb.h" 2
# 1 "../harfbuzz-6.0.0/src/hb-style.h" 1
# 30 "../harfbuzz-6.0.0/src/hb-style.h"
#define HB_STYLE_H 



extern "C" {
# 62 "../harfbuzz-6.0.0/src/hb-style.h"
typedef enum
{
  HB_STYLE_TAG_ITALIC = ((hb_tag_t)((((uint32_t)('i')&0xFF)<<24)|(((uint32_t)('t')&0xFF)<<16)|(((uint32_t)('a')&0xFF)<<8)|((uint32_t)('l')&0xFF))),
  HB_STYLE_TAG_OPTICAL_SIZE = ((hb_tag_t)((((uint32_t)('o')&0xFF)<<24)|(((uint32_t)('p')&0xFF)<<16)|(((uint32_t)('s')&0xFF)<<8)|((uint32_t)('z')&0xFF))),
  HB_STYLE_TAG_SLANT_ANGLE = ((hb_tag_t)((((uint32_t)('s')&0xFF)<<24)|(((uint32_t)('l')&0xFF)<<16)|(((uint32_t)('n')&0xFF)<<8)|((uint32_t)('t')&0xFF))),
  HB_STYLE_TAG_SLANT_RATIO = ((hb_tag_t)((((uint32_t)('S')&0xFF)<<24)|(((uint32_t)('l')&0xFF)<<16)|(((uint32_t)('n')&0xFF)<<8)|((uint32_t)('t')&0xFF))),
  HB_STYLE_TAG_WIDTH = ((hb_tag_t)((((uint32_t)('w')&0xFF)<<24)|(((uint32_t)('d')&0xFF)<<16)|(((uint32_t)('t')&0xFF)<<8)|((uint32_t)('h')&0xFF))),
  HB_STYLE_TAG_WEIGHT = ((hb_tag_t)((((uint32_t)('w')&0xFF)<<24)|(((uint32_t)('g')&0xFF)<<16)|(((uint32_t)('h')&0xFF)<<8)|((uint32_t)('t')&0xFF))),


  _HB_STYLE_TAG_MAX_VALUE = ((hb_tag_t)((((uint32_t)(0x7f)&0xFF)<<24)|(((uint32_t)(0xff)&0xFF)<<16)|(((uint32_t)(0xff)&0xFF)<<8)|((uint32_t)(0xff)&0xFF)))
} hb_style_tag_t;


extern float
hb_style_get_value (hb_font_t *font, hb_style_tag_t style_tag);

}
# 44 "../harfbuzz-6.0.0/src/hb.h" 2
# 1 "../harfbuzz-6.0.0/src/hb-unicode.h" 1
# 45 "../harfbuzz-6.0.0/src/hb.h" 2
# 1 "../harfbuzz-6.0.0/src/hb-version.h" 1
# 32 "../harfbuzz-6.0.0/src/hb-version.h"
#define HB_VERSION_H 

# 1 "../harfbuzz-6.0.0/src/hb-common.h" 1
# 35 "../harfbuzz-6.0.0/src/hb-version.h" 2

extern "C" {







#define HB_VERSION_MAJOR 6





#define HB_VERSION_MINOR 0





#define HB_VERSION_MICRO 0






#define HB_VERSION_STRING "6.0.0"
# 74 "../harfbuzz-6.0.0/src/hb-version.h"
#define HB_VERSION_ATLEAST(major,minor,micro) ((major)*10000+(minor)*100+(micro) <= HB_VERSION_MAJOR*10000+HB_VERSION_MINOR*100+HB_VERSION_MICRO)




extern void
hb_version (unsigned int *major,
     unsigned int *minor,
     unsigned int *micro);

extern const char *
hb_version_string (void);

extern hb_bool_t
hb_version_atleast (unsigned int major,
      unsigned int minor,
      unsigned int micro);


}
# 46 "../harfbuzz-6.0.0/src/hb.h" 2

extern "C" {
}

#undef HB_H_IN
# 180 "../harfbuzz-6.0.0/src/hb.hh" 2
#define HB_H_IN 
# 1 "../harfbuzz-6.0.0/src/hb-ot.h" 1
# 28 "../harfbuzz-6.0.0/src/hb-ot.h"
#define HB_OT_H 
#define HB_OT_H_IN 



# 1 "../harfbuzz-6.0.0/src/hb-ot-color.h" 1
# 34 "../harfbuzz-6.0.0/src/hb-ot-color.h"
#define HB_OT_COLOR_H 


# 1 "../harfbuzz-6.0.0/src/hb-ot-name.h" 1
# 30 "../harfbuzz-6.0.0/src/hb-ot-name.h"
#define HB_OT_NAME_H 



extern "C" {
# 84 "../harfbuzz-6.0.0/src/hb-ot-name.h"
typedef enum
{
  HB_OT_NAME_ID_COPYRIGHT = 0,
  HB_OT_NAME_ID_FONT_FAMILY = 1,
  HB_OT_NAME_ID_FONT_SUBFAMILY = 2,
  HB_OT_NAME_ID_UNIQUE_ID = 3,
  HB_OT_NAME_ID_FULL_NAME = 4,
  HB_OT_NAME_ID_VERSION_STRING = 5,
  HB_OT_NAME_ID_POSTSCRIPT_NAME = 6,
  HB_OT_NAME_ID_TRADEMARK = 7,
  HB_OT_NAME_ID_MANUFACTURER = 8,
  HB_OT_NAME_ID_DESIGNER = 9,
  HB_OT_NAME_ID_DESCRIPTION = 10,
  HB_OT_NAME_ID_VENDOR_URL = 11,
  HB_OT_NAME_ID_DESIGNER_URL = 12,
  HB_OT_NAME_ID_LICENSE = 13,
  HB_OT_NAME_ID_LICENSE_URL = 14,

  HB_OT_NAME_ID_TYPOGRAPHIC_FAMILY = 16,
  HB_OT_NAME_ID_TYPOGRAPHIC_SUBFAMILY = 17,
  HB_OT_NAME_ID_MAC_FULL_NAME = 18,
  HB_OT_NAME_ID_SAMPLE_TEXT = 19,
  HB_OT_NAME_ID_CID_FINDFONT_NAME = 20,
  HB_OT_NAME_ID_WWS_FAMILY = 21,
  HB_OT_NAME_ID_WWS_SUBFAMILY = 22,
  HB_OT_NAME_ID_LIGHT_BACKGROUND = 23,
  HB_OT_NAME_ID_DARK_BACKGROUND = 24,
  HB_OT_NAME_ID_VARIATIONS_PS_PREFIX = 25,

  HB_OT_NAME_ID_INVALID = 0xFFFF
} hb_ot_name_id_predefined_t;

typedef unsigned int hb_ot_name_id_t;
# 128 "../harfbuzz-6.0.0/src/hb-ot-name.h"
typedef struct hb_ot_name_entry_t {
  hb_ot_name_id_t name_id;

  hb_var_int_t var;

  hb_language_t language;
} hb_ot_name_entry_t;

extern const hb_ot_name_entry_t *
hb_ot_name_list_names (hb_face_t *face,
         unsigned int *num_entries );


extern unsigned int
hb_ot_name_get_utf8 (hb_face_t *face,
       hb_ot_name_id_t name_id,
       hb_language_t language,
       unsigned int *text_size ,
       char *text );

extern unsigned int
hb_ot_name_get_utf16 (hb_face_t *face,
        hb_ot_name_id_t name_id,
        hb_language_t language,
        unsigned int *text_size ,
        uint16_t *text );

extern unsigned int
hb_ot_name_get_utf32 (hb_face_t *face,
        hb_ot_name_id_t name_id,
        hb_language_t language,
        unsigned int *text_size ,
        uint32_t *text );


}
# 38 "../harfbuzz-6.0.0/src/hb-ot-color.h" 2

extern "C" {






extern hb_bool_t
hb_ot_color_has_palettes (hb_face_t *face);

extern unsigned int
hb_ot_color_palette_get_count (hb_face_t *face);

extern hb_ot_name_id_t
hb_ot_color_palette_get_name_id (hb_face_t *face,
     unsigned int palette_index);

extern hb_ot_name_id_t
hb_ot_color_palette_color_get_name_id (hb_face_t *face,
           unsigned int color_index);
# 73 "../harfbuzz-6.0.0/src/hb-ot-color.h"
typedef enum {
  HB_OT_COLOR_PALETTE_FLAG_DEFAULT = 0x00000000u,
  HB_OT_COLOR_PALETTE_FLAG_USABLE_WITH_LIGHT_BACKGROUND = 0x00000001u,
  HB_OT_COLOR_PALETTE_FLAG_USABLE_WITH_DARK_BACKGROUND = 0x00000002u
} hb_ot_color_palette_flags_t;

extern hb_ot_color_palette_flags_t
hb_ot_color_palette_get_flags (hb_face_t *face,
          unsigned int palette_index);

extern unsigned int
hb_ot_color_palette_get_colors (hb_face_t *face,
    unsigned int palette_index,
    unsigned int start_offset,
    unsigned int *color_count,
    hb_color_t *colors );






extern hb_bool_t
hb_ot_color_has_layers (hb_face_t *face);
# 111 "../harfbuzz-6.0.0/src/hb-ot-color.h"
typedef struct hb_ot_color_layer_t {
  hb_codepoint_t glyph;
  unsigned int color_index;
} hb_ot_color_layer_t;

extern unsigned int
hb_ot_color_glyph_get_layers (hb_face_t *face,
         hb_codepoint_t glyph,
         unsigned int start_offset,
         unsigned int *layer_count,
         hb_ot_color_layer_t *layers );



extern hb_bool_t
hb_ot_color_has_paint (hb_face_t *face);

extern hb_bool_t
hb_ot_color_glyph_has_paint (hb_face_t *face,
                             hb_codepoint_t glyph);





extern hb_bool_t
hb_ot_color_has_svg (hb_face_t *face);

extern hb_blob_t *
hb_ot_color_glyph_reference_svg (hb_face_t *face, hb_codepoint_t glyph);





extern hb_bool_t
hb_ot_color_has_png (hb_face_t *face);

extern hb_blob_t *
hb_ot_color_glyph_reference_png (hb_font_t *font, hb_codepoint_t glyph);


}
# 34 "../harfbuzz-6.0.0/src/hb-ot.h" 2
# 1 "../harfbuzz-6.0.0/src/hb-ot-deprecated.h" 1
# 32 "../harfbuzz-6.0.0/src/hb-ot-deprecated.h"
#define HB_OT_DEPRECATED_H 


# 1 "../harfbuzz-6.0.0/src/hb-ot-name.h" 1
# 36 "../harfbuzz-6.0.0/src/hb-ot-deprecated.h" 2


extern "C" {
# 51 "../harfbuzz-6.0.0/src/hb-ot-deprecated.h"
#define HB_MATH_GLYPH_PART_FLAG_EXTENDER HB_OT_MATH_GLYPH_PART_FLAG_EXTENDER
# 66 "../harfbuzz-6.0.0/src/hb-ot-deprecated.h"
#define HB_OT_MATH_SCRIPT HB_OT_TAG_MATH_SCRIPT



__attribute__((__deprecated__("Use '" "hb_ot_layout_table_select_script" "' instead")))
extern hb_bool_t
hb_ot_layout_table_choose_script (hb_face_t *face,
      hb_tag_t table_tag,
      const hb_tag_t *script_tags,
      unsigned int *script_index,
      hb_tag_t *chosen_script);

__attribute__((__deprecated__("Use '" "hb_ot_layout_script_select_language" "' instead")))
extern hb_bool_t
hb_ot_layout_script_find_language (hb_face_t *face,
       hb_tag_t table_tag,
       unsigned int script_index,
       hb_tag_t language_tag,
       unsigned int *language_index);

__attribute__((__deprecated__("Use '" "hb_ot_tags_from_script_and_language" "' instead")))
extern void
hb_ot_tags_from_script (hb_script_t script,
   hb_tag_t *script_tag_1,
   hb_tag_t *script_tag_2);

__attribute__((__deprecated__("Use '" "hb_ot_tags_from_script_and_language" "' instead")))
extern hb_tag_t
hb_ot_tag_from_language (hb_language_t language);
# 105 "../harfbuzz-6.0.0/src/hb-ot-deprecated.h"
#define HB_OT_VAR_NO_AXIS_INDEX 0xFFFFFFFFu
# 120 "../harfbuzz-6.0.0/src/hb-ot-deprecated.h"
typedef struct hb_ot_var_axis_t {
  hb_tag_t tag;
  hb_ot_name_id_t name_id;
  float min_value;
  float default_value;
  float max_value;
} hb_ot_var_axis_t;

__attribute__((__deprecated__("Use '" "hb_ot_var_get_axis_infos" "' instead")))
extern unsigned int
hb_ot_var_get_axes (hb_face_t *face,
      unsigned int start_offset,
      unsigned int *axes_count ,
      hb_ot_var_axis_t *axes_array );

__attribute__((__deprecated__("Use '" "hb_ot_var_find_axis_info" "' instead")))
extern hb_bool_t
hb_ot_var_find_axis (hb_face_t *face,
       hb_tag_t axis_tag,
       unsigned int *axis_index,
       hb_ot_var_axis_t *axis_info);




}
# 35 "../harfbuzz-6.0.0/src/hb-ot.h" 2
# 1 "../harfbuzz-6.0.0/src/hb-ot-font.h" 1
# 32 "../harfbuzz-6.0.0/src/hb-ot-font.h"
#define HB_OT_FONT_H 



extern "C" {


extern void
hb_ot_font_set_funcs (hb_font_t *font);


}
# 36 "../harfbuzz-6.0.0/src/hb-ot.h" 2
# 1 "../harfbuzz-6.0.0/src/hb-ot-layout.h" 1
# 32 "../harfbuzz-6.0.0/src/hb-ot-layout.h"
#define HB_OT_LAYOUT_H 



# 1 "../harfbuzz-6.0.0/src/hb-ot-name.h" 1
# 37 "../harfbuzz-6.0.0/src/hb-ot-layout.h" 2

extern "C" {







#define HB_OT_TAG_BASE HB_TAG('B','A','S','E')





#define HB_OT_TAG_GDEF HB_TAG('G','D','E','F')





#define HB_OT_TAG_GSUB HB_TAG('G','S','U','B')





#define HB_OT_TAG_GPOS HB_TAG('G','P','O','S')





#define HB_OT_TAG_JSTF HB_TAG('J','S','T','F')
# 83 "../harfbuzz-6.0.0/src/hb-ot-layout.h"
#define HB_OT_TAG_DEFAULT_SCRIPT HB_TAG ('D', 'F', 'L', 'T')






#define HB_OT_TAG_DEFAULT_LANGUAGE HB_TAG ('d', 'f', 'l', 't')
# 99 "../harfbuzz-6.0.0/src/hb-ot-layout.h"
#define HB_OT_MAX_TAGS_PER_SCRIPT 3u







#define HB_OT_MAX_TAGS_PER_LANGUAGE 3u

extern void
hb_ot_tags_from_script_and_language (hb_script_t script,
         hb_language_t language,
         unsigned int *script_count ,
         hb_tag_t *script_tags ,
         unsigned int *language_count ,
         hb_tag_t *language_tags );

extern hb_script_t
hb_ot_tag_to_script (hb_tag_t tag);

extern hb_language_t
hb_ot_tag_to_language (hb_tag_t tag);

extern void
hb_ot_tags_to_script_and_language (hb_tag_t script_tag,
       hb_tag_t language_tag,
       hb_script_t *script ,
       hb_language_t *language );






extern hb_bool_t
hb_ot_layout_has_glyph_classes (hb_face_t *face);
# 148 "../harfbuzz-6.0.0/src/hb-ot-layout.h"
typedef enum {
  HB_OT_LAYOUT_GLYPH_CLASS_UNCLASSIFIED = 0,
  HB_OT_LAYOUT_GLYPH_CLASS_BASE_GLYPH = 1,
  HB_OT_LAYOUT_GLYPH_CLASS_LIGATURE = 2,
  HB_OT_LAYOUT_GLYPH_CLASS_MARK = 3,
  HB_OT_LAYOUT_GLYPH_CLASS_COMPONENT = 4
} hb_ot_layout_glyph_class_t;

extern hb_ot_layout_glyph_class_t
hb_ot_layout_get_glyph_class (hb_face_t *face,
         hb_codepoint_t glyph);

extern void
hb_ot_layout_get_glyphs_in_class (hb_face_t *face,
      hb_ot_layout_glyph_class_t klass,
      hb_set_t *glyphs );



extern unsigned int
hb_ot_layout_get_attach_points (hb_face_t *face,
    hb_codepoint_t glyph,
    unsigned int start_offset,
    unsigned int *point_count ,
    unsigned int *point_array );


extern unsigned int
hb_ot_layout_get_ligature_carets (hb_font_t *font,
      hb_direction_t direction,
      hb_codepoint_t glyph,
      unsigned int start_offset,
      unsigned int *caret_count ,
      hb_position_t *caret_array );
# 193 "../harfbuzz-6.0.0/src/hb-ot-layout.h"
#define HB_OT_LAYOUT_NO_SCRIPT_INDEX 0xFFFFu





#define HB_OT_LAYOUT_NO_FEATURE_INDEX 0xFFFFu





#define HB_OT_LAYOUT_DEFAULT_LANGUAGE_INDEX 0xFFFFu





#define HB_OT_LAYOUT_NO_VARIATIONS_INDEX 0xFFFFFFFFu

extern unsigned int
hb_ot_layout_table_get_script_tags (hb_face_t *face,
        hb_tag_t table_tag,
        unsigned int start_offset,
        unsigned int *script_count ,
        hb_tag_t *script_tags );

extern hb_bool_t
hb_ot_layout_table_find_script (hb_face_t *face,
    hb_tag_t table_tag,
    hb_tag_t script_tag,
    unsigned int *script_index );

extern hb_bool_t
hb_ot_layout_table_select_script (hb_face_t *face,
      hb_tag_t table_tag,
      unsigned int script_count,
      const hb_tag_t *script_tags,
      unsigned int *script_index ,
      hb_tag_t *chosen_script );

extern unsigned int
hb_ot_layout_table_get_feature_tags (hb_face_t *face,
         hb_tag_t table_tag,
         unsigned int start_offset,
         unsigned int *feature_count ,
         hb_tag_t *feature_tags );

extern unsigned int
hb_ot_layout_script_get_language_tags (hb_face_t *face,
           hb_tag_t table_tag,
           unsigned int script_index,
           unsigned int start_offset,
           unsigned int *language_count ,
           hb_tag_t *language_tags );

extern hb_bool_t
hb_ot_layout_script_select_language (hb_face_t *face,
         hb_tag_t table_tag,
         unsigned int script_index,
         unsigned int language_count,
         const hb_tag_t *language_tags,
         unsigned int *language_index );

extern hb_bool_t
hb_ot_layout_script_select_language2 (hb_face_t *face,
         hb_tag_t table_tag,
         unsigned int script_index,
         unsigned int language_count,
         const hb_tag_t *language_tags,
         unsigned int *language_index ,
         hb_tag_t *chosen_language );

extern hb_bool_t
hb_ot_layout_language_get_required_feature_index (hb_face_t *face,
        hb_tag_t table_tag,
        unsigned int script_index,
        unsigned int language_index,
        unsigned int *feature_index );

extern hb_bool_t
hb_ot_layout_language_get_required_feature (hb_face_t *face,
         hb_tag_t table_tag,
         unsigned int script_index,
         unsigned int language_index,
         unsigned int *feature_index ,
         hb_tag_t *feature_tag );

extern unsigned int
hb_ot_layout_language_get_feature_indexes (hb_face_t *face,
        hb_tag_t table_tag,
        unsigned int script_index,
        unsigned int language_index,
        unsigned int start_offset,
        unsigned int *feature_count ,
        unsigned int *feature_indexes );

extern unsigned int
hb_ot_layout_language_get_feature_tags (hb_face_t *face,
     hb_tag_t table_tag,
     unsigned int script_index,
     unsigned int language_index,
     unsigned int start_offset,
     unsigned int *feature_count ,
     hb_tag_t *feature_tags );

extern hb_bool_t
hb_ot_layout_language_find_feature (hb_face_t *face,
        hb_tag_t table_tag,
        unsigned int script_index,
        unsigned int language_index,
        hb_tag_t feature_tag,
        unsigned int *feature_index );

extern unsigned int
hb_ot_layout_feature_get_lookups (hb_face_t *face,
      hb_tag_t table_tag,
      unsigned int feature_index,
      unsigned int start_offset,
      unsigned int *lookup_count ,
      unsigned int *lookup_indexes );

extern unsigned int
hb_ot_layout_table_get_lookup_count (hb_face_t *face,
         hb_tag_t table_tag);

extern void
hb_ot_layout_collect_features (hb_face_t *face,
          hb_tag_t table_tag,
          const hb_tag_t *scripts,
          const hb_tag_t *languages,
          const hb_tag_t *features,
          hb_set_t *feature_indexes );

extern void
hb_ot_layout_collect_lookups (hb_face_t *face,
         hb_tag_t table_tag,
         const hb_tag_t *scripts,
         const hb_tag_t *languages,
         const hb_tag_t *features,
         hb_set_t *lookup_indexes );

extern void
hb_ot_layout_lookup_collect_glyphs (hb_face_t *face,
        hb_tag_t table_tag,
        unsigned int lookup_index,
        hb_set_t *glyphs_before,
        hb_set_t *glyphs_input,
        hb_set_t *glyphs_after,
        hb_set_t *glyphs_output );




extern hb_bool_t
hb_ot_layout_table_find_feature_variations (hb_face_t *face,
         hb_tag_t table_tag,
         const int *coords,
         unsigned int num_coords,
         unsigned int *variations_index );

extern unsigned int
hb_ot_layout_feature_with_variations_get_lookups (hb_face_t *face,
        hb_tag_t table_tag,
        unsigned int feature_index,
        unsigned int variations_index,
        unsigned int start_offset,
        unsigned int *lookup_count ,
        unsigned int *lookup_indexes );






extern hb_bool_t
hb_ot_layout_has_substitution (hb_face_t *face);

extern unsigned
hb_ot_layout_lookup_get_glyph_alternates (hb_face_t *face,
       unsigned lookup_index,
       hb_codepoint_t glyph,
       unsigned start_offset,
       unsigned *alternate_count ,
       hb_codepoint_t *alternate_glyphs );

extern hb_bool_t
hb_ot_layout_lookup_would_substitute (hb_face_t *face,
          unsigned int lookup_index,
          const hb_codepoint_t *glyphs,
          unsigned int glyphs_length,
          hb_bool_t zero_context);

extern void
hb_ot_layout_lookup_substitute_closure (hb_face_t *face,
     unsigned int lookup_index,
     hb_set_t *glyphs
                                     );

extern void
hb_ot_layout_lookups_substitute_closure (hb_face_t *face,
      const hb_set_t *lookups,
      hb_set_t *glyphs);






extern hb_bool_t
hb_ot_layout_has_positioning (hb_face_t *face);



extern hb_bool_t
hb_ot_layout_get_size_params (hb_face_t *face,
         unsigned int *design_size,
         unsigned int *subfamily_id,
         hb_ot_name_id_t *subfamily_name_id,
         unsigned int *range_start,
         unsigned int *range_end );

extern hb_position_t
hb_ot_layout_lookup_get_optical_bound (hb_font_t *font,
           unsigned lookup_index,
           hb_direction_t direction,
           hb_codepoint_t glyph);






extern hb_bool_t
hb_ot_layout_feature_get_name_ids (hb_face_t *face,
       hb_tag_t table_tag,
       unsigned int feature_index,
       hb_ot_name_id_t *label_id ,
       hb_ot_name_id_t *tooltip_id ,
       hb_ot_name_id_t *sample_id ,
       unsigned int *num_named_parameters ,
       hb_ot_name_id_t *first_param_id );


extern unsigned int
hb_ot_layout_feature_get_characters (hb_face_t *face,
         hb_tag_t table_tag,
         unsigned int feature_index,
         unsigned int start_offset,
         unsigned int *char_count ,
         hb_codepoint_t *characters );
# 476 "../harfbuzz-6.0.0/src/hb-ot-layout.h"
typedef enum {
  HB_OT_LAYOUT_BASELINE_TAG_ROMAN = ((hb_tag_t)((((uint32_t)('r')&0xFF)<<24)|(((uint32_t)('o')&0xFF)<<16)|(((uint32_t)('m')&0xFF)<<8)|((uint32_t)('n')&0xFF))),
  HB_OT_LAYOUT_BASELINE_TAG_HANGING = ((hb_tag_t)((((uint32_t)('h')&0xFF)<<24)|(((uint32_t)('a')&0xFF)<<16)|(((uint32_t)('n')&0xFF)<<8)|((uint32_t)('g')&0xFF))),
  HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_BOTTOM_OR_LEFT = ((hb_tag_t)((((uint32_t)('i')&0xFF)<<24)|(((uint32_t)('c')&0xFF)<<16)|(((uint32_t)('f')&0xFF)<<8)|((uint32_t)('b')&0xFF))),
  HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_TOP_OR_RIGHT = ((hb_tag_t)((((uint32_t)('i')&0xFF)<<24)|(((uint32_t)('c')&0xFF)<<16)|(((uint32_t)('f')&0xFF)<<8)|((uint32_t)('t')&0xFF))),
  HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_CENTRAL = ((hb_tag_t)((((uint32_t)('I')&0xFF)<<24)|(((uint32_t)('c')&0xFF)<<16)|(((uint32_t)('f')&0xFF)<<8)|((uint32_t)('c')&0xFF))),
  HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_BOTTOM_OR_LEFT = ((hb_tag_t)((((uint32_t)('i')&0xFF)<<24)|(((uint32_t)('d')&0xFF)<<16)|(((uint32_t)('e')&0xFF)<<8)|((uint32_t)('o')&0xFF))),
  HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_TOP_OR_RIGHT = ((hb_tag_t)((((uint32_t)('i')&0xFF)<<24)|(((uint32_t)('d')&0xFF)<<16)|(((uint32_t)('t')&0xFF)<<8)|((uint32_t)('p')&0xFF))),
  HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_CENTRAL = ((hb_tag_t)((((uint32_t)('I')&0xFF)<<24)|(((uint32_t)('d')&0xFF)<<16)|(((uint32_t)('c')&0xFF)<<8)|((uint32_t)('e')&0xFF))),
  HB_OT_LAYOUT_BASELINE_TAG_MATH = ((hb_tag_t)((((uint32_t)('m')&0xFF)<<24)|(((uint32_t)('a')&0xFF)<<16)|(((uint32_t)('t')&0xFF)<<8)|((uint32_t)('h')&0xFF))),


  _HB_OT_LAYOUT_BASELINE_TAG_MAX_VALUE = ((hb_tag_t)((((uint32_t)(0x7f)&0xFF)<<24)|(((uint32_t)(0xff)&0xFF)<<16)|(((uint32_t)(0xff)&0xFF)<<8)|((uint32_t)(0xff)&0xFF)))
} hb_ot_layout_baseline_tag_t;

extern hb_ot_layout_baseline_tag_t
hb_ot_layout_get_horizontal_baseline_tag_for_script (hb_script_t script);

extern hb_bool_t
hb_ot_layout_get_baseline (hb_font_t *font,
      hb_ot_layout_baseline_tag_t baseline_tag,
      hb_direction_t direction,
      hb_tag_t script_tag,
      hb_tag_t language_tag,
      hb_position_t *coord );

extern void
hb_ot_layout_get_baseline_with_fallback (hb_font_t *font,
      hb_ot_layout_baseline_tag_t baseline_tag,
      hb_direction_t direction,
      hb_tag_t script_tag,
      hb_tag_t language_tag,
      hb_position_t *coord );

}
# 37 "../harfbuzz-6.0.0/src/hb-ot.h" 2
# 1 "../harfbuzz-6.0.0/src/hb-ot-math.h" 1
# 32 "../harfbuzz-6.0.0/src/hb-ot-math.h"
#define HB_OT_MATH_H 



extern "C" {
# 50 "../harfbuzz-6.0.0/src/hb-ot-math.h"
#define HB_OT_TAG_MATH HB_TAG('M','A','T','H')
# 64 "../harfbuzz-6.0.0/src/hb-ot-math.h"
#define HB_OT_TAG_MATH_SCRIPT HB_TAG('m','a','t','h')
# 133 "../harfbuzz-6.0.0/src/hb-ot-math.h"
typedef enum {
  HB_OT_MATH_CONSTANT_SCRIPT_PERCENT_SCALE_DOWN = 0,
  HB_OT_MATH_CONSTANT_SCRIPT_SCRIPT_PERCENT_SCALE_DOWN = 1,
  HB_OT_MATH_CONSTANT_DELIMITED_SUB_FORMULA_MIN_HEIGHT = 2,
  HB_OT_MATH_CONSTANT_DISPLAY_OPERATOR_MIN_HEIGHT = 3,
  HB_OT_MATH_CONSTANT_MATH_LEADING = 4,
  HB_OT_MATH_CONSTANT_AXIS_HEIGHT = 5,
  HB_OT_MATH_CONSTANT_ACCENT_BASE_HEIGHT = 6,
  HB_OT_MATH_CONSTANT_FLATTENED_ACCENT_BASE_HEIGHT = 7,
  HB_OT_MATH_CONSTANT_SUBSCRIPT_SHIFT_DOWN = 8,
  HB_OT_MATH_CONSTANT_SUBSCRIPT_TOP_MAX = 9,
  HB_OT_MATH_CONSTANT_SUBSCRIPT_BASELINE_DROP_MIN = 10,
  HB_OT_MATH_CONSTANT_SUPERSCRIPT_SHIFT_UP = 11,
  HB_OT_MATH_CONSTANT_SUPERSCRIPT_SHIFT_UP_CRAMPED = 12,
  HB_OT_MATH_CONSTANT_SUPERSCRIPT_BOTTOM_MIN = 13,
  HB_OT_MATH_CONSTANT_SUPERSCRIPT_BASELINE_DROP_MAX = 14,
  HB_OT_MATH_CONSTANT_SUB_SUPERSCRIPT_GAP_MIN = 15,
  HB_OT_MATH_CONSTANT_SUPERSCRIPT_BOTTOM_MAX_WITH_SUBSCRIPT = 16,
  HB_OT_MATH_CONSTANT_SPACE_AFTER_SCRIPT = 17,
  HB_OT_MATH_CONSTANT_UPPER_LIMIT_GAP_MIN = 18,
  HB_OT_MATH_CONSTANT_UPPER_LIMIT_BASELINE_RISE_MIN = 19,
  HB_OT_MATH_CONSTANT_LOWER_LIMIT_GAP_MIN = 20,
  HB_OT_MATH_CONSTANT_LOWER_LIMIT_BASELINE_DROP_MIN = 21,
  HB_OT_MATH_CONSTANT_STACK_TOP_SHIFT_UP = 22,
  HB_OT_MATH_CONSTANT_STACK_TOP_DISPLAY_STYLE_SHIFT_UP = 23,
  HB_OT_MATH_CONSTANT_STACK_BOTTOM_SHIFT_DOWN = 24,
  HB_OT_MATH_CONSTANT_STACK_BOTTOM_DISPLAY_STYLE_SHIFT_DOWN = 25,
  HB_OT_MATH_CONSTANT_STACK_GAP_MIN = 26,
  HB_OT_MATH_CONSTANT_STACK_DISPLAY_STYLE_GAP_MIN = 27,
  HB_OT_MATH_CONSTANT_STRETCH_STACK_TOP_SHIFT_UP = 28,
  HB_OT_MATH_CONSTANT_STRETCH_STACK_BOTTOM_SHIFT_DOWN = 29,
  HB_OT_MATH_CONSTANT_STRETCH_STACK_GAP_ABOVE_MIN = 30,
  HB_OT_MATH_CONSTANT_STRETCH_STACK_GAP_BELOW_MIN = 31,
  HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_SHIFT_UP = 32,
  HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_DISPLAY_STYLE_SHIFT_UP = 33,
  HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_SHIFT_DOWN = 34,
  HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_DISPLAY_STYLE_SHIFT_DOWN = 35,
  HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_GAP_MIN = 36,
  HB_OT_MATH_CONSTANT_FRACTION_NUM_DISPLAY_STYLE_GAP_MIN = 37,
  HB_OT_MATH_CONSTANT_FRACTION_RULE_THICKNESS = 38,
  HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_GAP_MIN = 39,
  HB_OT_MATH_CONSTANT_FRACTION_DENOM_DISPLAY_STYLE_GAP_MIN = 40,
  HB_OT_MATH_CONSTANT_SKEWED_FRACTION_HORIZONTAL_GAP = 41,
  HB_OT_MATH_CONSTANT_SKEWED_FRACTION_VERTICAL_GAP = 42,
  HB_OT_MATH_CONSTANT_OVERBAR_VERTICAL_GAP = 43,
  HB_OT_MATH_CONSTANT_OVERBAR_RULE_THICKNESS = 44,
  HB_OT_MATH_CONSTANT_OVERBAR_EXTRA_ASCENDER = 45,
  HB_OT_MATH_CONSTANT_UNDERBAR_VERTICAL_GAP = 46,
  HB_OT_MATH_CONSTANT_UNDERBAR_RULE_THICKNESS = 47,
  HB_OT_MATH_CONSTANT_UNDERBAR_EXTRA_DESCENDER = 48,
  HB_OT_MATH_CONSTANT_RADICAL_VERTICAL_GAP = 49,
  HB_OT_MATH_CONSTANT_RADICAL_DISPLAY_STYLE_VERTICAL_GAP = 50,
  HB_OT_MATH_CONSTANT_RADICAL_RULE_THICKNESS = 51,
  HB_OT_MATH_CONSTANT_RADICAL_EXTRA_ASCENDER = 52,
  HB_OT_MATH_CONSTANT_RADICAL_KERN_BEFORE_DEGREE = 53,
  HB_OT_MATH_CONSTANT_RADICAL_KERN_AFTER_DEGREE = 54,
  HB_OT_MATH_CONSTANT_RADICAL_DEGREE_BOTTOM_RAISE_PERCENT = 55
} hb_ot_math_constant_t;
# 204 "../harfbuzz-6.0.0/src/hb-ot-math.h"
typedef enum {
  HB_OT_MATH_KERN_TOP_RIGHT = 0,
  HB_OT_MATH_KERN_TOP_LEFT = 1,
  HB_OT_MATH_KERN_BOTTOM_RIGHT = 2,
  HB_OT_MATH_KERN_BOTTOM_LEFT = 3
} hb_ot_math_kern_t;
# 220 "../harfbuzz-6.0.0/src/hb-ot-math.h"
typedef struct {
  hb_position_t max_correction_height;
  hb_position_t kern_value;
} hb_ot_math_kern_entry_t;
# 234 "../harfbuzz-6.0.0/src/hb-ot-math.h"
typedef struct hb_ot_math_glyph_variant_t {
  hb_codepoint_t glyph;
  hb_position_t advance;
} hb_ot_math_glyph_variant_t;
# 248 "../harfbuzz-6.0.0/src/hb-ot-math.h"
typedef enum {
  HB_OT_MATH_GLYPH_PART_FLAG_EXTENDER = 0x00000001u
} hb_ot_math_glyph_part_flags_t;
# 266 "../harfbuzz-6.0.0/src/hb-ot-math.h"
typedef struct hb_ot_math_glyph_part_t {
  hb_codepoint_t glyph;
  hb_position_t start_connector_length;
  hb_position_t end_connector_length;
  hb_position_t full_advance;
  hb_ot_math_glyph_part_flags_t flags;
} hb_ot_math_glyph_part_t;



extern hb_bool_t
hb_ot_math_has_data (hb_face_t *face);

extern hb_position_t
hb_ot_math_get_constant (hb_font_t *font,
    hb_ot_math_constant_t constant);

extern hb_position_t
hb_ot_math_get_glyph_italics_correction (hb_font_t *font,
      hb_codepoint_t glyph);

extern hb_position_t
hb_ot_math_get_glyph_top_accent_attachment (hb_font_t *font,
         hb_codepoint_t glyph);

extern hb_bool_t
hb_ot_math_is_glyph_extended_shape (hb_face_t *face,
        hb_codepoint_t glyph);

extern hb_position_t
hb_ot_math_get_glyph_kerning (hb_font_t *font,
         hb_codepoint_t glyph,
         hb_ot_math_kern_t kern,
         hb_position_t correction_height);

extern unsigned int
hb_ot_math_get_glyph_kernings (hb_font_t *font,
          hb_codepoint_t glyph,
          hb_ot_math_kern_t kern,
          unsigned int start_offset,
          unsigned int *entries_count,
          hb_ot_math_kern_entry_t *kern_entries );

extern unsigned int
hb_ot_math_get_glyph_variants (hb_font_t *font,
          hb_codepoint_t glyph,
          hb_direction_t direction,
          unsigned int start_offset,
          unsigned int *variants_count,
          hb_ot_math_glyph_variant_t *variants );

extern hb_position_t
hb_ot_math_get_min_connector_overlap (hb_font_t *font,
          hb_direction_t direction);

extern unsigned int
hb_ot_math_get_glyph_assembly (hb_font_t *font,
          hb_codepoint_t glyph,
          hb_direction_t direction,
          unsigned int start_offset,
          unsigned int *parts_count,
          hb_ot_math_glyph_part_t *parts,
          hb_position_t *italics_correction );


}
# 38 "../harfbuzz-6.0.0/src/hb-ot.h" 2
# 1 "../harfbuzz-6.0.0/src/hb-ot-meta.h" 1
# 30 "../harfbuzz-6.0.0/src/hb-ot-meta.h"
#define HB_OT_META_H 



extern "C" {
# 49 "../harfbuzz-6.0.0/src/hb-ot-meta.h"
typedef enum {




  HB_OT_META_TAG_DESIGN_LANGUAGES = ((hb_tag_t)((((uint32_t)('d')&0xFF)<<24)|(((uint32_t)('l')&0xFF)<<16)|(((uint32_t)('n')&0xFF)<<8)|((uint32_t)('g')&0xFF))),
  HB_OT_META_TAG_SUPPORTED_LANGUAGES = ((hb_tag_t)((((uint32_t)('s')&0xFF)<<24)|(((uint32_t)('l')&0xFF)<<16)|(((uint32_t)('n')&0xFF)<<8)|((uint32_t)('g')&0xFF))),


  _HB_OT_META_TAG_MAX_VALUE = ((hb_tag_t)((((uint32_t)(0x7f)&0xFF)<<24)|(((uint32_t)(0xff)&0xFF)<<16)|(((uint32_t)(0xff)&0xFF)<<8)|((uint32_t)(0xff)&0xFF)))
} hb_ot_meta_tag_t;

extern unsigned int
hb_ot_meta_get_entry_tags (hb_face_t *face,
      unsigned int start_offset,
      unsigned int *entries_count,
      hb_ot_meta_tag_t *entries );

extern hb_blob_t *
hb_ot_meta_reference_entry (hb_face_t *face, hb_ot_meta_tag_t meta_tag);

}
# 39 "../harfbuzz-6.0.0/src/hb-ot.h" 2
# 1 "../harfbuzz-6.0.0/src/hb-ot-metrics.h" 1
# 30 "../harfbuzz-6.0.0/src/hb-ot-metrics.h"
#define HB_OT_METRICS_H 


# 1 "../harfbuzz-6.0.0/src/hb-ot-name.h" 1
# 34 "../harfbuzz-6.0.0/src/hb-ot-metrics.h" 2

extern "C" {
# 74 "../harfbuzz-6.0.0/src/hb-ot-metrics.h"
typedef enum {
  HB_OT_METRICS_TAG_HORIZONTAL_ASCENDER = ((hb_tag_t)((((uint32_t)('h')&0xFF)<<24)|(((uint32_t)('a')&0xFF)<<16)|(((uint32_t)('s')&0xFF)<<8)|((uint32_t)('c')&0xFF))),
  HB_OT_METRICS_TAG_HORIZONTAL_DESCENDER = ((hb_tag_t)((((uint32_t)('h')&0xFF)<<24)|(((uint32_t)('d')&0xFF)<<16)|(((uint32_t)('s')&0xFF)<<8)|((uint32_t)('c')&0xFF))),
  HB_OT_METRICS_TAG_HORIZONTAL_LINE_GAP = ((hb_tag_t)((((uint32_t)('h')&0xFF)<<24)|(((uint32_t)('l')&0xFF)<<16)|(((uint32_t)('g')&0xFF)<<8)|((uint32_t)('p')&0xFF))),
  HB_OT_METRICS_TAG_HORIZONTAL_CLIPPING_ASCENT = ((hb_tag_t)((((uint32_t)('h')&0xFF)<<24)|(((uint32_t)('c')&0xFF)<<16)|(((uint32_t)('l')&0xFF)<<8)|((uint32_t)('a')&0xFF))),
  HB_OT_METRICS_TAG_HORIZONTAL_CLIPPING_DESCENT = ((hb_tag_t)((((uint32_t)('h')&0xFF)<<24)|(((uint32_t)('c')&0xFF)<<16)|(((uint32_t)('l')&0xFF)<<8)|((uint32_t)('d')&0xFF))),
  HB_OT_METRICS_TAG_VERTICAL_ASCENDER = ((hb_tag_t)((((uint32_t)('v')&0xFF)<<24)|(((uint32_t)('a')&0xFF)<<16)|(((uint32_t)('s')&0xFF)<<8)|((uint32_t)('c')&0xFF))),
  HB_OT_METRICS_TAG_VERTICAL_DESCENDER = ((hb_tag_t)((((uint32_t)('v')&0xFF)<<24)|(((uint32_t)('d')&0xFF)<<16)|(((uint32_t)('s')&0xFF)<<8)|((uint32_t)('c')&0xFF))),
  HB_OT_METRICS_TAG_VERTICAL_LINE_GAP = ((hb_tag_t)((((uint32_t)('v')&0xFF)<<24)|(((uint32_t)('l')&0xFF)<<16)|(((uint32_t)('g')&0xFF)<<8)|((uint32_t)('p')&0xFF))),
  HB_OT_METRICS_TAG_HORIZONTAL_CARET_RISE = ((hb_tag_t)((((uint32_t)('h')&0xFF)<<24)|(((uint32_t)('c')&0xFF)<<16)|(((uint32_t)('r')&0xFF)<<8)|((uint32_t)('s')&0xFF))),
  HB_OT_METRICS_TAG_HORIZONTAL_CARET_RUN = ((hb_tag_t)((((uint32_t)('h')&0xFF)<<24)|(((uint32_t)('c')&0xFF)<<16)|(((uint32_t)('r')&0xFF)<<8)|((uint32_t)('n')&0xFF))),
  HB_OT_METRICS_TAG_HORIZONTAL_CARET_OFFSET = ((hb_tag_t)((((uint32_t)('h')&0xFF)<<24)|(((uint32_t)('c')&0xFF)<<16)|(((uint32_t)('o')&0xFF)<<8)|((uint32_t)('f')&0xFF))),
  HB_OT_METRICS_TAG_VERTICAL_CARET_RISE = ((hb_tag_t)((((uint32_t)('v')&0xFF)<<24)|(((uint32_t)('c')&0xFF)<<16)|(((uint32_t)('r')&0xFF)<<8)|((uint32_t)('s')&0xFF))),
  HB_OT_METRICS_TAG_VERTICAL_CARET_RUN = ((hb_tag_t)((((uint32_t)('v')&0xFF)<<24)|(((uint32_t)('c')&0xFF)<<16)|(((uint32_t)('r')&0xFF)<<8)|((uint32_t)('n')&0xFF))),
  HB_OT_METRICS_TAG_VERTICAL_CARET_OFFSET = ((hb_tag_t)((((uint32_t)('v')&0xFF)<<24)|(((uint32_t)('c')&0xFF)<<16)|(((uint32_t)('o')&0xFF)<<8)|((uint32_t)('f')&0xFF))),
  HB_OT_METRICS_TAG_X_HEIGHT = ((hb_tag_t)((((uint32_t)('x')&0xFF)<<24)|(((uint32_t)('h')&0xFF)<<16)|(((uint32_t)('g')&0xFF)<<8)|((uint32_t)('t')&0xFF))),
  HB_OT_METRICS_TAG_CAP_HEIGHT = ((hb_tag_t)((((uint32_t)('c')&0xFF)<<24)|(((uint32_t)('p')&0xFF)<<16)|(((uint32_t)('h')&0xFF)<<8)|((uint32_t)('t')&0xFF))),
  HB_OT_METRICS_TAG_SUBSCRIPT_EM_X_SIZE = ((hb_tag_t)((((uint32_t)('s')&0xFF)<<24)|(((uint32_t)('b')&0xFF)<<16)|(((uint32_t)('x')&0xFF)<<8)|((uint32_t)('s')&0xFF))),
  HB_OT_METRICS_TAG_SUBSCRIPT_EM_Y_SIZE = ((hb_tag_t)((((uint32_t)('s')&0xFF)<<24)|(((uint32_t)('b')&0xFF)<<16)|(((uint32_t)('y')&0xFF)<<8)|((uint32_t)('s')&0xFF))),
  HB_OT_METRICS_TAG_SUBSCRIPT_EM_X_OFFSET = ((hb_tag_t)((((uint32_t)('s')&0xFF)<<24)|(((uint32_t)('b')&0xFF)<<16)|(((uint32_t)('x')&0xFF)<<8)|((uint32_t)('o')&0xFF))),
  HB_OT_METRICS_TAG_SUBSCRIPT_EM_Y_OFFSET = ((hb_tag_t)((((uint32_t)('s')&0xFF)<<24)|(((uint32_t)('b')&0xFF)<<16)|(((uint32_t)('y')&0xFF)<<8)|((uint32_t)('o')&0xFF))),
  HB_OT_METRICS_TAG_SUPERSCRIPT_EM_X_SIZE = ((hb_tag_t)((((uint32_t)('s')&0xFF)<<24)|(((uint32_t)('p')&0xFF)<<16)|(((uint32_t)('x')&0xFF)<<8)|((uint32_t)('s')&0xFF))),
  HB_OT_METRICS_TAG_SUPERSCRIPT_EM_Y_SIZE = ((hb_tag_t)((((uint32_t)('s')&0xFF)<<24)|(((uint32_t)('p')&0xFF)<<16)|(((uint32_t)('y')&0xFF)<<8)|((uint32_t)('s')&0xFF))),
  HB_OT_METRICS_TAG_SUPERSCRIPT_EM_X_OFFSET = ((hb_tag_t)((((uint32_t)('s')&0xFF)<<24)|(((uint32_t)('p')&0xFF)<<16)|(((uint32_t)('x')&0xFF)<<8)|((uint32_t)('o')&0xFF))),
  HB_OT_METRICS_TAG_SUPERSCRIPT_EM_Y_OFFSET = ((hb_tag_t)((((uint32_t)('s')&0xFF)<<24)|(((uint32_t)('p')&0xFF)<<16)|(((uint32_t)('y')&0xFF)<<8)|((uint32_t)('o')&0xFF))),
  HB_OT_METRICS_TAG_STRIKEOUT_SIZE = ((hb_tag_t)((((uint32_t)('s')&0xFF)<<24)|(((uint32_t)('t')&0xFF)<<16)|(((uint32_t)('r')&0xFF)<<8)|((uint32_t)('s')&0xFF))),
  HB_OT_METRICS_TAG_STRIKEOUT_OFFSET = ((hb_tag_t)((((uint32_t)('s')&0xFF)<<24)|(((uint32_t)('t')&0xFF)<<16)|(((uint32_t)('r')&0xFF)<<8)|((uint32_t)('o')&0xFF))),
  HB_OT_METRICS_TAG_UNDERLINE_SIZE = ((hb_tag_t)((((uint32_t)('u')&0xFF)<<24)|(((uint32_t)('n')&0xFF)<<16)|(((uint32_t)('d')&0xFF)<<8)|((uint32_t)('s')&0xFF))),
  HB_OT_METRICS_TAG_UNDERLINE_OFFSET = ((hb_tag_t)((((uint32_t)('u')&0xFF)<<24)|(((uint32_t)('n')&0xFF)<<16)|(((uint32_t)('d')&0xFF)<<8)|((uint32_t)('o')&0xFF))),


  _HB_OT_METRICS_TAG_MAX_VALUE = ((hb_tag_t)((((uint32_t)(0x7f)&0xFF)<<24)|(((uint32_t)(0xff)&0xFF)<<16)|(((uint32_t)(0xff)&0xFF)<<8)|((uint32_t)(0xff)&0xFF)))
} hb_ot_metrics_tag_t;

extern hb_bool_t
hb_ot_metrics_get_position (hb_font_t *font,
       hb_ot_metrics_tag_t metrics_tag,
       hb_position_t *position );

extern void
hb_ot_metrics_get_position_with_fallback (hb_font_t *font,
       hb_ot_metrics_tag_t metrics_tag,
       hb_position_t *position );

extern float
hb_ot_metrics_get_variation (hb_font_t *font, hb_ot_metrics_tag_t metrics_tag);

extern hb_position_t
hb_ot_metrics_get_x_variation (hb_font_t *font, hb_ot_metrics_tag_t metrics_tag);

extern hb_position_t
hb_ot_metrics_get_y_variation (hb_font_t *font, hb_ot_metrics_tag_t metrics_tag);

}
# 40 "../harfbuzz-6.0.0/src/hb-ot.h" 2
# 1 "../harfbuzz-6.0.0/src/hb-ot-name.h" 1
# 41 "../harfbuzz-6.0.0/src/hb-ot.h" 2
# 1 "../harfbuzz-6.0.0/src/hb-ot-shape.h" 1
# 32 "../harfbuzz-6.0.0/src/hb-ot-shape.h"
#define HB_OT_SHAPE_H 



extern "C" {


extern void
hb_ot_shape_glyphs_closure (hb_font_t *font,
       hb_buffer_t *buffer,
       const hb_feature_t *features,
       unsigned int num_features,
       hb_set_t *glyphs);

extern void
hb_ot_shape_plan_collect_lookups (hb_shape_plan_t *shape_plan,
      hb_tag_t table_tag,
      hb_set_t *lookup_indexes );

}
# 42 "../harfbuzz-6.0.0/src/hb-ot.h" 2
# 1 "../harfbuzz-6.0.0/src/hb-ot-var.h" 1
# 32 "../harfbuzz-6.0.0/src/hb-ot-var.h"
#define HB_OT_VAR_H 



extern "C" {






#define HB_OT_TAG_VAR_AXIS_ITALIC HB_TAG('i','t','a','l')







#define HB_OT_TAG_VAR_AXIS_OPTICAL_SIZE HB_TAG('o','p','s','z')






#define HB_OT_TAG_VAR_AXIS_SLANT HB_TAG('s','l','n','t')






#define HB_OT_TAG_VAR_AXIS_WIDTH HB_TAG('w','d','t','h')






#define HB_OT_TAG_VAR_AXIS_WEIGHT HB_TAG('w','g','h','t')






extern hb_bool_t
hb_ot_var_has_data (hb_face_t *face);







extern unsigned int
hb_ot_var_get_axis_count (hb_face_t *face);
# 99 "../harfbuzz-6.0.0/src/hb-ot-var.h"
typedef enum {
  HB_OT_VAR_AXIS_FLAG_HIDDEN = 0x00000001u,


  _HB_OT_VAR_AXIS_FLAG_MAX_VALUE= ((hb_tag_t)((((uint32_t)(0x7f)&0xFF)<<24)|(((uint32_t)(0xff)&0xFF)<<16)|(((uint32_t)(0xff)&0xFF)<<8)|((uint32_t)(0xff)&0xFF)))
} hb_ot_var_axis_flags_t;
# 125 "../harfbuzz-6.0.0/src/hb-ot-var.h"
typedef struct hb_ot_var_axis_info_t {
  unsigned int axis_index;
  hb_tag_t tag;
  hb_ot_name_id_t name_id;
  hb_ot_var_axis_flags_t flags;
  float min_value;
  float default_value;
  float max_value;

  unsigned int reserved;
} hb_ot_var_axis_info_t;

extern unsigned int
hb_ot_var_get_axis_infos (hb_face_t *face,
     unsigned int start_offset,
     unsigned int *axes_count ,
     hb_ot_var_axis_info_t *axes_array );

extern hb_bool_t
hb_ot_var_find_axis_info (hb_face_t *face,
     hb_tag_t axis_tag,
     hb_ot_var_axis_info_t *axis_info);






extern unsigned int
hb_ot_var_get_named_instance_count (hb_face_t *face);

extern hb_ot_name_id_t
hb_ot_var_named_instance_get_subfamily_name_id (hb_face_t *face,
      unsigned int instance_index);

extern hb_ot_name_id_t
hb_ot_var_named_instance_get_postscript_name_id (hb_face_t *face,
      unsigned int instance_index);

extern unsigned int
hb_ot_var_named_instance_get_design_coords (hb_face_t *face,
         unsigned int instance_index,
         unsigned int *coords_length,
         float *coords );






extern void
hb_ot_var_normalize_variations (hb_face_t *face,
    const hb_variation_t *variations,
    unsigned int variations_length,
    int *coords,
    unsigned int coords_length);

extern void
hb_ot_var_normalize_coords (hb_face_t *face,
       unsigned int coords_length,
       const float *design_coords,
       int *normalized_coords );


}
# 43 "../harfbuzz-6.0.0/src/hb-ot.h" 2

extern "C" {

}

#undef HB_OT_H_IN
# 182 "../harfbuzz-6.0.0/src/hb.hh" 2
#define HB_OT_H_IN 
# 1 "../harfbuzz-6.0.0/src/hb-aat.h" 1
# 26 "../harfbuzz-6.0.0/src/hb-aat.h"
#define HB_AAT_H 
#define HB_AAT_H_IN 



# 1 "../harfbuzz-6.0.0/src/hb-aat-layout.h" 1
# 30 "../harfbuzz-6.0.0/src/hb-aat-layout.h"
#define HB_AAT_LAYOUT_H 





extern "C" {
# 85 "../harfbuzz-6.0.0/src/hb-aat-layout.h"
typedef enum
{
  HB_AAT_LAYOUT_FEATURE_TYPE_INVALID = 0xFFFF,

  HB_AAT_LAYOUT_FEATURE_TYPE_ALL_TYPOGRAPHIC = 0,
  HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES = 1,
  HB_AAT_LAYOUT_FEATURE_TYPE_CURISVE_CONNECTION = 2,
  HB_AAT_LAYOUT_FEATURE_TYPE_LETTER_CASE = 3,
  HB_AAT_LAYOUT_FEATURE_TYPE_VERTICAL_SUBSTITUTION = 4,
  HB_AAT_LAYOUT_FEATURE_TYPE_LINGUISTIC_REARRANGEMENT = 5,
  HB_AAT_LAYOUT_FEATURE_TYPE_NUMBER_SPACING = 6,
  HB_AAT_LAYOUT_FEATURE_TYPE_SMART_SWASH_TYPE = 8,
  HB_AAT_LAYOUT_FEATURE_TYPE_DIACRITICS_TYPE = 9,
  HB_AAT_LAYOUT_FEATURE_TYPE_VERTICAL_POSITION = 10,
  HB_AAT_LAYOUT_FEATURE_TYPE_FRACTIONS = 11,
  HB_AAT_LAYOUT_FEATURE_TYPE_OVERLAPPING_CHARACTERS_TYPE = 13,
  HB_AAT_LAYOUT_FEATURE_TYPE_TYPOGRAPHIC_EXTRAS = 14,
  HB_AAT_LAYOUT_FEATURE_TYPE_MATHEMATICAL_EXTRAS = 15,
  HB_AAT_LAYOUT_FEATURE_TYPE_ORNAMENT_SETS_TYPE = 16,
  HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_ALTERNATIVES = 17,
  HB_AAT_LAYOUT_FEATURE_TYPE_DESIGN_COMPLEXITY_TYPE = 18,
  HB_AAT_LAYOUT_FEATURE_TYPE_STYLE_OPTIONS = 19,
  HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE = 20,
  HB_AAT_LAYOUT_FEATURE_TYPE_NUMBER_CASE = 21,
  HB_AAT_LAYOUT_FEATURE_TYPE_TEXT_SPACING = 22,
  HB_AAT_LAYOUT_FEATURE_TYPE_TRANSLITERATION = 23,
  HB_AAT_LAYOUT_FEATURE_TYPE_ANNOTATION_TYPE = 24,
  HB_AAT_LAYOUT_FEATURE_TYPE_KANA_SPACING_TYPE = 25,
  HB_AAT_LAYOUT_FEATURE_TYPE_IDEOGRAPHIC_SPACING_TYPE = 26,
  HB_AAT_LAYOUT_FEATURE_TYPE_UNICODE_DECOMPOSITION_TYPE = 27,
  HB_AAT_LAYOUT_FEATURE_TYPE_RUBY_KANA = 28,
  HB_AAT_LAYOUT_FEATURE_TYPE_CJK_SYMBOL_ALTERNATIVES_TYPE = 29,
  HB_AAT_LAYOUT_FEATURE_TYPE_IDEOGRAPHIC_ALTERNATIVES_TYPE = 30,
  HB_AAT_LAYOUT_FEATURE_TYPE_CJK_VERTICAL_ROMAN_PLACEMENT_TYPE = 31,
  HB_AAT_LAYOUT_FEATURE_TYPE_ITALIC_CJK_ROMAN = 32,
  HB_AAT_LAYOUT_FEATURE_TYPE_CASE_SENSITIVE_LAYOUT = 33,
  HB_AAT_LAYOUT_FEATURE_TYPE_ALTERNATE_KANA = 34,
  HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES = 35,
  HB_AAT_LAYOUT_FEATURE_TYPE_CONTEXTUAL_ALTERNATIVES = 36,
  HB_AAT_LAYOUT_FEATURE_TYPE_LOWER_CASE = 37,
  HB_AAT_LAYOUT_FEATURE_TYPE_UPPER_CASE = 38,
  HB_AAT_LAYOUT_FEATURE_TYPE_LANGUAGE_TAG_TYPE = 39,
  HB_AAT_LAYOUT_FEATURE_TYPE_CJK_ROMAN_SPACING_TYPE = 103,


  _HB_AAT_LAYOUT_FEATURE_TYPE_MAX_VALUE = ((hb_tag_t)((((uint32_t)(0x7f)&0xFF)<<24)|(((uint32_t)(0xff)&0xFF)<<16)|(((uint32_t)(0xff)&0xFF)<<8)|((uint32_t)(0xff)&0xFF)))
} hb_aat_layout_feature_type_t;
# 391 "../harfbuzz-6.0.0/src/hb-aat-layout.h"
typedef enum
{
  HB_AAT_LAYOUT_FEATURE_SELECTOR_INVALID = 0xFFFF,


  HB_AAT_LAYOUT_FEATURE_SELECTOR_ALL_TYPE_FEATURES_ON = 0,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_ALL_TYPE_FEATURES_OFF = 1,


  HB_AAT_LAYOUT_FEATURE_SELECTOR_REQUIRED_LIGATURES_ON = 0,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_REQUIRED_LIGATURES_OFF = 1,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_COMMON_LIGATURES_ON = 2,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_COMMON_LIGATURES_OFF = 3,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_RARE_LIGATURES_ON = 4,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_RARE_LIGATURES_OFF = 5,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_LOGOS_ON = 6,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_LOGOS_OFF = 7,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_REBUS_PICTURES_ON = 8,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_REBUS_PICTURES_OFF = 9,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_DIPHTHONG_LIGATURES_ON = 10,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_DIPHTHONG_LIGATURES_OFF = 11,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_SQUARED_LIGATURES_ON = 12,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_SQUARED_LIGATURES_OFF = 13,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_ABBREV_SQUARED_LIGATURES_ON = 14,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_ABBREV_SQUARED_LIGATURES_OFF = 15,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_SYMBOL_LIGATURES_ON = 16,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_SYMBOL_LIGATURES_OFF = 17,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_CONTEXTUAL_LIGATURES_ON = 18,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_CONTEXTUAL_LIGATURES_OFF = 19,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_HISTORICAL_LIGATURES_ON = 20,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_HISTORICAL_LIGATURES_OFF = 21,


  HB_AAT_LAYOUT_FEATURE_SELECTOR_UNCONNECTED = 0,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_PARTIALLY_CONNECTED = 1,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_CURSIVE = 2,


  HB_AAT_LAYOUT_FEATURE_SELECTOR_UPPER_AND_LOWER_CASE = 0,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_ALL_CAPS = 1,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_ALL_LOWER_CASE = 2,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_SMALL_CAPS = 3,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_INITIAL_CAPS = 4,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_INITIAL_CAPS_AND_SMALL_CAPS = 5,


  HB_AAT_LAYOUT_FEATURE_SELECTOR_SUBSTITUTE_VERTICAL_FORMS_ON = 0,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_SUBSTITUTE_VERTICAL_FORMS_OFF = 1,


  HB_AAT_LAYOUT_FEATURE_SELECTOR_LINGUISTIC_REARRANGEMENT_ON = 0,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_LINGUISTIC_REARRANGEMENT_OFF = 1,


  HB_AAT_LAYOUT_FEATURE_SELECTOR_MONOSPACED_NUMBERS = 0,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_PROPORTIONAL_NUMBERS = 1,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_THIRD_WIDTH_NUMBERS = 2,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_QUARTER_WIDTH_NUMBERS = 3,


  HB_AAT_LAYOUT_FEATURE_SELECTOR_WORD_INITIAL_SWASHES_ON = 0,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_WORD_INITIAL_SWASHES_OFF = 1,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_WORD_FINAL_SWASHES_ON = 2,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_WORD_FINAL_SWASHES_OFF = 3,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_LINE_INITIAL_SWASHES_ON = 4,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_LINE_INITIAL_SWASHES_OFF = 5,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_LINE_FINAL_SWASHES_ON = 6,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_LINE_FINAL_SWASHES_OFF = 7,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_NON_FINAL_SWASHES_ON = 8,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_NON_FINAL_SWASHES_OFF = 9,


  HB_AAT_LAYOUT_FEATURE_SELECTOR_SHOW_DIACRITICS = 0,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_HIDE_DIACRITICS = 1,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_DECOMPOSE_DIACRITICS = 2,


  HB_AAT_LAYOUT_FEATURE_SELECTOR_NORMAL_POSITION = 0,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_SUPERIORS = 1,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_INFERIORS = 2,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_ORDINALS = 3,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_SCIENTIFIC_INFERIORS = 4,


  HB_AAT_LAYOUT_FEATURE_SELECTOR_NO_FRACTIONS = 0,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_VERTICAL_FRACTIONS = 1,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_DIAGONAL_FRACTIONS = 2,


  HB_AAT_LAYOUT_FEATURE_SELECTOR_PREVENT_OVERLAP_ON = 0,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_PREVENT_OVERLAP_OFF = 1,


  HB_AAT_LAYOUT_FEATURE_SELECTOR_HYPHENS_TO_EM_DASH_ON = 0,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_HYPHENS_TO_EM_DASH_OFF = 1,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_HYPHEN_TO_EN_DASH_ON = 2,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_HYPHEN_TO_EN_DASH_OFF = 3,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_SLASHED_ZERO_ON = 4,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_SLASHED_ZERO_OFF = 5,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_FORM_INTERROBANG_ON = 6,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_FORM_INTERROBANG_OFF = 7,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_SMART_QUOTES_ON = 8,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_SMART_QUOTES_OFF = 9,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_PERIODS_TO_ELLIPSIS_ON = 10,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_PERIODS_TO_ELLIPSIS_OFF = 11,


  HB_AAT_LAYOUT_FEATURE_SELECTOR_HYPHEN_TO_MINUS_ON = 0,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_HYPHEN_TO_MINUS_OFF = 1,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_ASTERISK_TO_MULTIPLY_ON = 2,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_ASTERISK_TO_MULTIPLY_OFF = 3,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_SLASH_TO_DIVIDE_ON = 4,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_SLASH_TO_DIVIDE_OFF = 5,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_INEQUALITY_LIGATURES_ON = 6,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_INEQUALITY_LIGATURES_OFF = 7,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_EXPONENTS_ON = 8,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_EXPONENTS_OFF = 9,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_MATHEMATICAL_GREEK_ON = 10,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_MATHEMATICAL_GREEK_OFF = 11,


  HB_AAT_LAYOUT_FEATURE_SELECTOR_NO_ORNAMENTS = 0,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_DINGBATS = 1,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_PI_CHARACTERS = 2,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_FLEURONS = 3,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_DECORATIVE_BORDERS = 4,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_INTERNATIONAL_SYMBOLS = 5,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_MATH_SYMBOLS = 6,


  HB_AAT_LAYOUT_FEATURE_SELECTOR_NO_ALTERNATES = 0,


  HB_AAT_LAYOUT_FEATURE_SELECTOR_DESIGN_LEVEL1 = 0,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_DESIGN_LEVEL2 = 1,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_DESIGN_LEVEL3 = 2,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_DESIGN_LEVEL4 = 3,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_DESIGN_LEVEL5 = 4,


  HB_AAT_LAYOUT_FEATURE_SELECTOR_NO_STYLE_OPTIONS = 0,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_DISPLAY_TEXT = 1,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_ENGRAVED_TEXT = 2,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_ILLUMINATED_CAPS = 3,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_TITLING_CAPS = 4,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_TALL_CAPS = 5,


  HB_AAT_LAYOUT_FEATURE_SELECTOR_TRADITIONAL_CHARACTERS = 0,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_SIMPLIFIED_CHARACTERS = 1,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_JIS1978_CHARACTERS = 2,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_JIS1983_CHARACTERS = 3,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_JIS1990_CHARACTERS = 4,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_TRADITIONAL_ALT_ONE = 5,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_TRADITIONAL_ALT_TWO = 6,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_TRADITIONAL_ALT_THREE = 7,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_TRADITIONAL_ALT_FOUR = 8,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_TRADITIONAL_ALT_FIVE = 9,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_EXPERT_CHARACTERS = 10,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_JIS2004_CHARACTERS = 11,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_HOJO_CHARACTERS = 12,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_NLCCHARACTERS = 13,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_TRADITIONAL_NAMES_CHARACTERS = 14,


  HB_AAT_LAYOUT_FEATURE_SELECTOR_LOWER_CASE_NUMBERS = 0,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_UPPER_CASE_NUMBERS = 1,


  HB_AAT_LAYOUT_FEATURE_SELECTOR_PROPORTIONAL_TEXT = 0,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_MONOSPACED_TEXT = 1,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_HALF_WIDTH_TEXT = 2,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_THIRD_WIDTH_TEXT = 3,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_QUARTER_WIDTH_TEXT = 4,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_ALT_PROPORTIONAL_TEXT = 5,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_ALT_HALF_WIDTH_TEXT = 6,


  HB_AAT_LAYOUT_FEATURE_SELECTOR_NO_TRANSLITERATION = 0,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_HANJA_TO_HANGUL = 1,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_HIRAGANA_TO_KATAKANA = 2,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_KATAKANA_TO_HIRAGANA = 3,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_KANA_TO_ROMANIZATION = 4,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_ROMANIZATION_TO_HIRAGANA = 5,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_ROMANIZATION_TO_KATAKANA = 6,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_HANJA_TO_HANGUL_ALT_ONE = 7,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_HANJA_TO_HANGUL_ALT_TWO = 8,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_HANJA_TO_HANGUL_ALT_THREE = 9,


  HB_AAT_LAYOUT_FEATURE_SELECTOR_NO_ANNOTATION = 0,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_BOX_ANNOTATION = 1,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_ROUNDED_BOX_ANNOTATION = 2,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_CIRCLE_ANNOTATION = 3,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_INVERTED_CIRCLE_ANNOTATION = 4,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_PARENTHESIS_ANNOTATION = 5,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_PERIOD_ANNOTATION = 6,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_ROMAN_NUMERAL_ANNOTATION = 7,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_DIAMOND_ANNOTATION = 8,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_INVERTED_BOX_ANNOTATION = 9,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_INVERTED_ROUNDED_BOX_ANNOTATION= 10,


  HB_AAT_LAYOUT_FEATURE_SELECTOR_FULL_WIDTH_KANA = 0,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_PROPORTIONAL_KANA = 1,


  HB_AAT_LAYOUT_FEATURE_SELECTOR_FULL_WIDTH_IDEOGRAPHS = 0,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_PROPORTIONAL_IDEOGRAPHS = 1,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_HALF_WIDTH_IDEOGRAPHS = 2,


  HB_AAT_LAYOUT_FEATURE_SELECTOR_CANONICAL_COMPOSITION_ON = 0,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_CANONICAL_COMPOSITION_OFF = 1,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_COMPATIBILITY_COMPOSITION_ON = 2,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_COMPATIBILITY_COMPOSITION_OFF = 3,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_TRANSCODING_COMPOSITION_ON = 4,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_TRANSCODING_COMPOSITION_OFF = 5,


  HB_AAT_LAYOUT_FEATURE_SELECTOR_NO_RUBY_KANA = 0,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_RUBY_KANA = 1,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_RUBY_KANA_ON = 2,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_RUBY_KANA_OFF = 3,


  HB_AAT_LAYOUT_FEATURE_SELECTOR_NO_CJK_SYMBOL_ALTERNATIVES = 0,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_CJK_SYMBOL_ALT_ONE = 1,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_CJK_SYMBOL_ALT_TWO = 2,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_CJK_SYMBOL_ALT_THREE = 3,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_CJK_SYMBOL_ALT_FOUR = 4,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_CJK_SYMBOL_ALT_FIVE = 5,


  HB_AAT_LAYOUT_FEATURE_SELECTOR_NO_IDEOGRAPHIC_ALTERNATIVES = 0,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_IDEOGRAPHIC_ALT_ONE = 1,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_IDEOGRAPHIC_ALT_TWO = 2,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_IDEOGRAPHIC_ALT_THREE = 3,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_IDEOGRAPHIC_ALT_FOUR = 4,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_IDEOGRAPHIC_ALT_FIVE = 5,


  HB_AAT_LAYOUT_FEATURE_SELECTOR_CJK_VERTICAL_ROMAN_CENTERED = 0,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_CJK_VERTICAL_ROMAN_HBASELINE = 1,


  HB_AAT_LAYOUT_FEATURE_SELECTOR_NO_CJK_ITALIC_ROMAN = 0,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_CJK_ITALIC_ROMAN = 1,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_CJK_ITALIC_ROMAN_ON = 2,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_CJK_ITALIC_ROMAN_OFF = 3,


  HB_AAT_LAYOUT_FEATURE_SELECTOR_CASE_SENSITIVE_LAYOUT_ON = 0,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_CASE_SENSITIVE_LAYOUT_OFF = 1,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_CASE_SENSITIVE_SPACING_ON = 2,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_CASE_SENSITIVE_SPACING_OFF = 3,


  HB_AAT_LAYOUT_FEATURE_SELECTOR_ALTERNATE_HORIZ_KANA_ON = 0,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_ALTERNATE_HORIZ_KANA_OFF = 1,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_ALTERNATE_VERT_KANA_ON = 2,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_ALTERNATE_VERT_KANA_OFF = 3,


  HB_AAT_LAYOUT_FEATURE_SELECTOR_NO_STYLISTIC_ALTERNATES = 0,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_ONE_ON = 2,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_ONE_OFF = 3,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_TWO_ON = 4,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_TWO_OFF = 5,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_THREE_ON = 6,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_THREE_OFF = 7,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_FOUR_ON = 8,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_FOUR_OFF = 9,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_FIVE_ON = 10,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_FIVE_OFF = 11,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_SIX_ON = 12,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_SIX_OFF = 13,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_SEVEN_ON = 14,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_SEVEN_OFF = 15,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_EIGHT_ON = 16,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_EIGHT_OFF = 17,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_NINE_ON = 18,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_NINE_OFF = 19,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_TEN_ON = 20,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_TEN_OFF = 21,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_ELEVEN_ON = 22,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_ELEVEN_OFF = 23,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_TWELVE_ON = 24,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_TWELVE_OFF = 25,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_THIRTEEN_ON = 26,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_THIRTEEN_OFF = 27,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_FOURTEEN_ON = 28,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_FOURTEEN_OFF = 29,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_FIFTEEN_ON = 30,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_FIFTEEN_OFF = 31,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_SIXTEEN_ON = 32,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_SIXTEEN_OFF = 33,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_SEVENTEEN_ON = 34,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_SEVENTEEN_OFF = 35,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_EIGHTEEN_ON = 36,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_EIGHTEEN_OFF = 37,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_NINETEEN_ON = 38,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_NINETEEN_OFF = 39,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_TWENTY_ON = 40,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_TWENTY_OFF = 41,


  HB_AAT_LAYOUT_FEATURE_SELECTOR_CONTEXTUAL_ALTERNATES_ON = 0,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_CONTEXTUAL_ALTERNATES_OFF = 1,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_SWASH_ALTERNATES_ON = 2,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_SWASH_ALTERNATES_OFF = 3,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_CONTEXTUAL_SWASH_ALTERNATES_ON = 4,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_CONTEXTUAL_SWASH_ALTERNATES_OFF= 5,


  HB_AAT_LAYOUT_FEATURE_SELECTOR_DEFAULT_LOWER_CASE = 0,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_LOWER_CASE_SMALL_CAPS = 1,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_LOWER_CASE_PETITE_CAPS = 2,


  HB_AAT_LAYOUT_FEATURE_SELECTOR_DEFAULT_UPPER_CASE = 0,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_UPPER_CASE_SMALL_CAPS = 1,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_UPPER_CASE_PETITE_CAPS = 2,


  HB_AAT_LAYOUT_FEATURE_SELECTOR_HALF_WIDTH_CJK_ROMAN = 0,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_PROPORTIONAL_CJK_ROMAN = 1,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_DEFAULT_CJK_ROMAN = 2,
  HB_AAT_LAYOUT_FEATURE_SELECTOR_FULL_WIDTH_CJK_ROMAN = 3,


  _HB_AAT_LAYOUT_FEATURE_SELECTOR_MAX_VALUE = ((hb_tag_t)((((uint32_t)(0x7f)&0xFF)<<24)|(((uint32_t)(0xff)&0xFF)<<16)|(((uint32_t)(0xff)&0xFF)<<8)|((uint32_t)(0xff)&0xFF)))
} hb_aat_layout_feature_selector_t;

extern unsigned int
hb_aat_layout_get_feature_types (hb_face_t *face,
     unsigned int start_offset,
     unsigned int *feature_count,
     hb_aat_layout_feature_type_t *features );

extern hb_ot_name_id_t
hb_aat_layout_feature_type_get_name_id (hb_face_t *face,
     hb_aat_layout_feature_type_t feature_type);
# 743 "../harfbuzz-6.0.0/src/hb-aat-layout.h"
typedef struct hb_aat_layout_feature_selector_info_t {
  hb_ot_name_id_t name_id;
  hb_aat_layout_feature_selector_t enable;
  hb_aat_layout_feature_selector_t disable;

  unsigned int reserved;
} hb_aat_layout_feature_selector_info_t;
# 758 "../harfbuzz-6.0.0/src/hb-aat-layout.h"
#define HB_AAT_LAYOUT_NO_SELECTOR_INDEX 0xFFFFu

extern unsigned int
hb_aat_layout_feature_type_get_selector_infos (hb_face_t *face,
            hb_aat_layout_feature_type_t feature_type,
            unsigned int start_offset,
            unsigned int *selector_count,
            hb_aat_layout_feature_selector_info_t *selectors,
            unsigned int *default_index );






extern hb_bool_t
hb_aat_layout_has_substitution (hb_face_t *face);






extern hb_bool_t
hb_aat_layout_has_positioning (hb_face_t *face);






extern hb_bool_t
hb_aat_layout_has_tracking (hb_face_t *face);


}
# 32 "../harfbuzz-6.0.0/src/hb-aat.h" 2

extern "C" {

}

#undef HB_AAT_H_IN
# 184 "../harfbuzz-6.0.0/src/hb.hh" 2
#define HB_AAT_H_IN 

# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cassert" 1 3
# 41 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cassert" 3
       
# 42 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cassert" 3

# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/c++config.h" 1 3
# 31 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/c++config.h" 3
#define _GLIBCXX_CXX_CONFIG_H 1


#define _GLIBCXX_RELEASE 13


#define __GLIBCXX__ 20230203
# 46 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/c++config.h" 3
#define _GLIBCXX_PURE __attribute__ ((__pure__))



#define _GLIBCXX_CONST __attribute__ ((__const__))



#define _GLIBCXX_NORETURN __attribute__ ((__noreturn__))
# 67 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/c++config.h" 3
#define _GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY 1


#define _GLIBCXX_VISIBILITY(V) __attribute__ ((__visibility__ (#V)))
# 90 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/c++config.h" 3
#define _GLIBCXX_USE_DEPRECATED 1



#define _GLIBCXX_DEPRECATED __attribute__ ((__deprecated__))
#define _GLIBCXX_DEPRECATED_SUGGEST(ALT) __attribute__ ((__deprecated__ ("use '" ALT "' instead")))







#define _GLIBCXX11_DEPRECATED _GLIBCXX_DEPRECATED
#define _GLIBCXX11_DEPRECATED_SUGGEST(ALT) _GLIBCXX_DEPRECATED_SUGGEST(ALT)
# 114 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/c++config.h" 3
#define _GLIBCXX14_DEPRECATED 
#define _GLIBCXX14_DEPRECATED_SUGGEST(ALT) 






#define _GLIBCXX17_DEPRECATED 
#define _GLIBCXX17_DEPRECATED_SUGGEST(ALT) 






#define _GLIBCXX20_DEPRECATED(MSG) 
#define _GLIBCXX20_DEPRECATED_SUGGEST(ALT) 




#define _GLIBCXX_ABI_TAG_CXX11 __attribute ((__abi_tag__ ("cxx11")))






#define _GLIBCXX_NODISCARD 
# 153 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/c++config.h" 3
#define _GLIBCXX_CONSTEXPR constexpr
#define _GLIBCXX_USE_CONSTEXPR constexpr
# 165 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/c++config.h" 3
#define _GLIBCXX14_CONSTEXPR 







#define _GLIBCXX17_CONSTEXPR 







#define _GLIBCXX20_CONSTEXPR 







#define _GLIBCXX23_CONSTEXPR 







#define _GLIBCXX17_INLINE 






#define _GLIBCXX_NOEXCEPT noexcept
#define _GLIBCXX_NOEXCEPT_IF(...) noexcept(__VA_ARGS__)
#define _GLIBCXX_USE_NOEXCEPT noexcept
#define _GLIBCXX_THROW(_EXC) 
# 217 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/c++config.h" 3
#define _GLIBCXX_NOTHROW _GLIBCXX_USE_NOEXCEPT






#define _GLIBCXX_THROW_OR_ABORT(_EXC) (__builtin_abort())







#define _GLIBCXX_NOEXCEPT_PARM 
#define _GLIBCXX_NOEXCEPT_QUAL 
# 246 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/c++config.h" 3
#define _GLIBCXX_EXTERN_TEMPLATE 1
# 296 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/c++config.h" 3

# 296 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/c++config.h" 3
namespace std
{
  typedef long unsigned int size_t;
  typedef long int ptrdiff_t;


  typedef decltype(nullptr) nullptr_t;


#pragma GCC visibility push(default)


  extern "C++" __attribute__ ((__noreturn__, __always_inline__))
  inline void __terminate() noexcept
  {
    void terminate() noexcept __attribute__ ((__noreturn__));
    terminate();
  }
#pragma GCC visibility pop
}

#define _GLIBCXX_USE_DUAL_ABI 1







#define _GLIBCXX_USE_CXX11_ABI 1



namespace std
{
  inline namespace __cxx11 __attribute__((__abi_tag__ ("cxx11"))) { }
}
namespace __gnu_cxx
{
  inline namespace __cxx11 __attribute__((__abi_tag__ ("cxx11"))) { }
}
#define _GLIBCXX_NAMESPACE_CXX11 __cxx11::
#define _GLIBCXX_BEGIN_NAMESPACE_CXX11 namespace __cxx11 {
#define _GLIBCXX_END_NAMESPACE_CXX11 }
#define _GLIBCXX_DEFAULT_ABI_TAG _GLIBCXX_ABI_TAG_CXX11
# 349 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/c++config.h" 3
#define _GLIBCXX_INLINE_VERSION 0
# 383 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/c++config.h" 3
#define _GLIBCXX_BEGIN_NAMESPACE_VERSION 
#define _GLIBCXX_END_NAMESPACE_VERSION 

#define _GLIBCXX_BEGIN_INLINE_ABI_NAMESPACE(X) inline namespace X {
#define _GLIBCXX_END_INLINE_ABI_NAMESPACE(X) }
# 445 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/c++config.h" 3
#define _GLIBCXX_STD_C std
#define _GLIBCXX_BEGIN_NAMESPACE_CONTAINER 
#define _GLIBCXX_END_NAMESPACE_CONTAINER 
# 456 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/c++config.h" 3
#define _GLIBCXX_STD_A std
#define _GLIBCXX_BEGIN_NAMESPACE_ALGO 
#define _GLIBCXX_END_NAMESPACE_ALGO 




#undef _GLIBCXX_LONG_DOUBLE_COMPAT




#undef _GLIBCXX_LONG_DOUBLE_ALT128_COMPAT
# 498 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/c++config.h" 3
#define _GLIBCXX_NAMESPACE_LDBL 
#define _GLIBCXX_BEGIN_NAMESPACE_LDBL 
#define _GLIBCXX_END_NAMESPACE_LDBL 



#define _GLIBCXX_NAMESPACE_LDBL_OR_CXX11 _GLIBCXX_NAMESPACE_CXX11
#define _GLIBCXX_BEGIN_NAMESPACE_LDBL_OR_CXX11 _GLIBCXX_BEGIN_NAMESPACE_CXX11
#define _GLIBCXX_END_NAMESPACE_LDBL_OR_CXX11 _GLIBCXX_END_NAMESPACE_CXX11
# 515 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/c++config.h" 3
namespace std
{
#pragma GCC visibility push(default)




  constexpr inline bool
  __is_constant_evaluated() noexcept
  {




#define _GLIBCXX_HAVE_IS_CONSTANT_EVALUATED 1
    return __builtin_is_constant_evaluated();



  }
#pragma GCC visibility pop
}
# 551 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/c++config.h" 3
#define __glibcxx_constexpr_assert(cond) if (std::__is_constant_evaluated() && !bool(cond)) __builtin_unreachable()






#define _GLIBCXX_VERBOSE_ASSERT 1
# 597 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/c++config.h" 3
#define __glibcxx_assert(cond) do { __glibcxx_constexpr_assert(cond); } while (false)
# 632 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/c++config.h" 3
#define _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(A) 


#define _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(A) 



#define _GLIBCXX_BEGIN_EXTERN_C extern "C" {
#define _GLIBCXX_END_EXTERN_C }

#define _GLIBCXX_USE_ALLOCATOR_NEW 1
# 662 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/c++config.h" 3
# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/os_defines.h" 1 3
# 31 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/os_defines.h" 3
#define _GLIBCXX_OS_DEFINES 1







#define _GLIBCXX_GTHREAD_USE_WEAK 0
# 663 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/c++config.h" 2 3


# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/cpu_defines.h" 1 3
# 31 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/cpu_defines.h" 3
#define _GLIBCXX_CPU_DEFINES 1
# 666 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/c++config.h" 2 3




#define _GLIBCXX_PSEUDO_VISIBILITY(V) 






#define _GLIBCXX_WEAK_DEFINITION 







#define _GLIBCXX_USE_WEAK_REF __GXX_WEAK__
# 698 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/c++config.h" 3
#define _GLIBCXX_TXN_SAFE 
#define _GLIBCXX_TXN_SAFE_DYN 
# 717 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/c++config.h" 3
#define _GLIBCXX_FAST_MATH 0






#define __N(msgid) (msgid)


#undef min
#undef max





#define _GLIBCXX_USE_C99_MATH _GLIBCXX11_USE_C99_MATH


#define _GLIBCXX_USE_C99_COMPLEX _GLIBCXX11_USE_C99_COMPLEX


#define _GLIBCXX_USE_C99_STDIO _GLIBCXX11_USE_C99_STDIO


#define _GLIBCXX_USE_C99_STDLIB _GLIBCXX11_USE_C99_STDLIB


#define _GLIBCXX_USE_C99_WCHAR _GLIBCXX11_USE_C99_WCHAR
# 789 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/c++config.h" 3
#define _GLIBCXX_FLOAT_IS_IEEE_BINARY32 1






#define _GLIBCXX_DOUBLE_IS_IEEE_BINARY64 1






#define _GLIBCXX_LDOUBLE_IS_IEEE_BINARY128 1
# 818 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/c++config.h" 3
#define _GLIBCXX_HAS_BUILTIN(B) __has_builtin(B)




#define _GLIBCXX_HAVE_BUILTIN_HAS_UNIQ_OBJ_REP 1



#define _GLIBCXX_HAVE_BUILTIN_IS_AGGREGATE 1



#define _GLIBCXX_HAVE_BUILTIN_IS_SAME 1



#define _GLIBCXX_HAVE_BUILTIN_LAUNDER 1


#undef _GLIBCXX_HAS_BUILTIN


#define _GLIBCXX_DOXYGEN_ONLY(X) 
# 874 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/c++config.h" 3
#define _GLIBCXX_HAVE_ACOSF 1


#define _GLIBCXX_HAVE_ACOSL 1


#define _GLIBCXX_HAVE_ALIGNED_ALLOC 1





#define _GLIBCXX_HAVE_ARPA_INET_H 1


#define _GLIBCXX_HAVE_ASINF 1


#define _GLIBCXX_HAVE_ASINL 1


#define _GLIBCXX_HAVE_AS_SYMVER_DIRECTIVE 1


#define _GLIBCXX_HAVE_ATAN2F 1


#define _GLIBCXX_HAVE_ATAN2L 1


#define _GLIBCXX_HAVE_ATANF 1


#define _GLIBCXX_HAVE_ATANL 1


#define _GLIBCXX_HAVE_ATOMIC_LOCK_POLICY 1


#define _GLIBCXX_HAVE_AT_QUICK_EXIT 1





#define _GLIBCXX_HAVE_CEILF 1


#define _GLIBCXX_HAVE_CEILL 1


#define _GLIBCXX_HAVE_COMPLEX_H 1


#define _GLIBCXX_HAVE_COSF 1


#define _GLIBCXX_HAVE_COSHF 1


#define _GLIBCXX_HAVE_COSHL 1


#define _GLIBCXX_HAVE_COSL 1



#define _GLIBCXX_HAVE_DECL_STRNLEN 1


#define _GLIBCXX_HAVE_DIRENT_H 1


#define _GLIBCXX_HAVE_DIRFD 1


#define _GLIBCXX_HAVE_DLFCN_H 1


#define _GLIBCXX_HAVE_ENDIAN_H 1


#define _GLIBCXX_HAVE_EXCEPTION_PTR_SINCE_GCC46 1





#define _GLIBCXX_HAVE_EXPF 1


#define _GLIBCXX_HAVE_EXPL 1


#define _GLIBCXX_HAVE_FABSF 1


#define _GLIBCXX_HAVE_FABSL 1


#define _GLIBCXX_HAVE_FCNTL_H 1


#define _GLIBCXX_HAVE_FDOPENDIR 1


#define _GLIBCXX_HAVE_FENV_H 1


#define _GLIBCXX_HAVE_FINITE 1


#define _GLIBCXX_HAVE_FINITEF 1





#define _GLIBCXX_HAVE_FLOAT_H 1


#define _GLIBCXX_HAVE_FLOORF 1


#define _GLIBCXX_HAVE_FLOORL 1


#define _GLIBCXX_HAVE_FMODF 1


#define _GLIBCXX_HAVE_FMODL 1
# 1013 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/c++config.h" 3
#define _GLIBCXX_HAVE_FREXPF 1


#define _GLIBCXX_HAVE_FREXPL 1


#define _GLIBCXX_HAVE_GETENTROPY 1


#define _GLIBCXX_HAVE_GETIPINFO 1


#define _GLIBCXX_HAVE_GETS 1


#define _GLIBCXX_HAVE_HYPOT 1


#define _GLIBCXX_HAVE_HYPOTF 1


#define _GLIBCXX_HAVE_HYPOTL 1


#define _GLIBCXX_HAVE_ICONV 1





#define _GLIBCXX_HAVE_INTTYPES_H 1
# 1064 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/c++config.h" 3
#define _GLIBCXX_HAVE_ISWBLANK 1


#define _GLIBCXX_HAVE_LC_MESSAGES 1


#define _GLIBCXX_HAVE_LDEXPF 1


#define _GLIBCXX_HAVE_LDEXPL 1





#define _GLIBCXX_HAVE_LIMIT_AS 1


#define _GLIBCXX_HAVE_LIMIT_DATA 1


#define _GLIBCXX_HAVE_LIMIT_FSIZE 1


#define _GLIBCXX_HAVE_LIMIT_RSS 1


#define _GLIBCXX_HAVE_LIMIT_VMEM 0


#define _GLIBCXX_HAVE_LINK 1


#define _GLIBCXX_HAVE_LINK_H 1


#define _GLIBCXX_HAVE_LINUX_FUTEX 1


#define _GLIBCXX_HAVE_LINUX_RANDOM_H 1


#define _GLIBCXX_HAVE_LINUX_TYPES_H 1


#define _GLIBCXX_HAVE_LOCALE_H 1


#define _GLIBCXX_HAVE_LOG10F 1


#define _GLIBCXX_HAVE_LOG10L 1


#define _GLIBCXX_HAVE_LOGF 1


#define _GLIBCXX_HAVE_LOGL 1
# 1130 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/c++config.h" 3
#define _GLIBCXX_HAVE_MBSTATE_T 1


#define _GLIBCXX_HAVE_MEMALIGN 1


#define _GLIBCXX_HAVE_MEMORY_H 1


#define _GLIBCXX_HAVE_MODF 1


#define _GLIBCXX_HAVE_MODFF 1


#define _GLIBCXX_HAVE_MODFL 1





#define _GLIBCXX_HAVE_NETDB_H 1


#define _GLIBCXX_HAVE_NETINET_IN_H 1


#define _GLIBCXX_HAVE_NETINET_TCP_H 1
# 1166 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/c++config.h" 3
#define _GLIBCXX_HAVE_OPENAT 1


#define _GLIBCXX_HAVE_POLL 1


#define _GLIBCXX_HAVE_POLL_H 1


#define _GLIBCXX_HAVE_POSIX_MEMALIGN 1



#define _GLIBCXX_HAVE_POSIX_SEMAPHORE 1


#define _GLIBCXX_HAVE_POWF 1


#define _GLIBCXX_HAVE_POWL 1





#define _GLIBCXX_HAVE_QUICK_EXIT 1


#define _GLIBCXX_HAVE_READLINK 1


#define _GLIBCXX_HAVE_SECURE_GETENV 1





#define _GLIBCXX_HAVE_SINCOS 1


#define _GLIBCXX_HAVE_SINCOSF 1


#define _GLIBCXX_HAVE_SINCOSL 1


#define _GLIBCXX_HAVE_SINF 1


#define _GLIBCXX_HAVE_SINHF 1


#define _GLIBCXX_HAVE_SINHL 1


#define _GLIBCXX_HAVE_SINL 1





#define _GLIBCXX_HAVE_SOCKATMARK 1


#define _GLIBCXX_HAVE_SQRTF 1


#define _GLIBCXX_HAVE_SQRTL 1





#define _GLIBCXX_HAVE_STDALIGN_H 1


#define _GLIBCXX_HAVE_STDBOOL_H 1


#define _GLIBCXX_HAVE_STDINT_H 1


#define _GLIBCXX_HAVE_STDLIB_H 1





#define _GLIBCXX_HAVE_STRERROR_R 1


#define _GLIBCXX_HAVE_STRINGS_H 1


#define _GLIBCXX_HAVE_STRING_H 1


#define _GLIBCXX_HAVE_STRTOF 1


#define _GLIBCXX_HAVE_STRTOLD 1


#define _GLIBCXX_HAVE_STRUCT_DIRENT_D_TYPE 1





#define _GLIBCXX_HAVE_SYMLINK 1



#define _GLIBCXX_HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT 1





#define _GLIBCXX_HAVE_SYS_IOCTL_H 1


#define _GLIBCXX_HAVE_SYS_IPC_H 1
# 1300 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/c++config.h" 3
#define _GLIBCXX_HAVE_SYS_PARAM_H 1


#define _GLIBCXX_HAVE_SYS_RESOURCE_H 1





#define _GLIBCXX_HAVE_SYS_SEM_H 1


#define _GLIBCXX_HAVE_SYS_SOCKET_H 1


#define _GLIBCXX_HAVE_SYS_STATVFS_H 1


#define _GLIBCXX_HAVE_SYS_STAT_H 1


#define _GLIBCXX_HAVE_SYS_SYSINFO_H 1


#define _GLIBCXX_HAVE_SYS_TIME_H 1


#define _GLIBCXX_HAVE_SYS_TYPES_H 1


#define _GLIBCXX_HAVE_SYS_UIO_H 1





#define _GLIBCXX_HAVE_S_ISREG 1


#define _GLIBCXX_HAVE_TANF 1


#define _GLIBCXX_HAVE_TANHF 1


#define _GLIBCXX_HAVE_TANHL 1


#define _GLIBCXX_HAVE_TANL 1


#define _GLIBCXX_HAVE_TGMATH_H 1


#define _GLIBCXX_HAVE_TIMESPEC_GET 1


#define _GLIBCXX_HAVE_TLS 1


#define _GLIBCXX_HAVE_TRUNCATE 1


#define _GLIBCXX_HAVE_UCHAR_H 1


#define _GLIBCXX_HAVE_UNISTD_H 1


#define _GLIBCXX_HAVE_UNLINKAT 1


#define _GLIBCXX_HAVE_USELOCALE 1





#define _GLIBCXX_HAVE_UTIME_H 1


#define _GLIBCXX_HAVE_VFWSCANF 1


#define _GLIBCXX_HAVE_VSWSCANF 1


#define _GLIBCXX_HAVE_VWSCANF 1


#define _GLIBCXX_HAVE_WCHAR_H 1


#define _GLIBCXX_HAVE_WCSTOF 1


#define _GLIBCXX_HAVE_WCTYPE_H 1





#define _GLIBCXX_HAVE_WRITEV 1
# 1606 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/c++config.h" 3
#define _GLIBCXX_ICONV_CONST 



#define _GLIBCXX_LT_OBJDIR ".libs/"





#define _GLIBCXX_PACKAGE_BUGREPORT ""


#define _GLIBCXX_PACKAGE_NAME "package-unused"


#define _GLIBCXX_PACKAGE_STRING "package-unused version-unused"


#define _GLIBCXX_PACKAGE_TARNAME "libstdc++"


#define _GLIBCXX_PACKAGE_URL ""


#define _GLIBCXX_PACKAGE__GLIBCXX_VERSION "version-unused"


#define _GLIBCXX_STDC_HEADERS 1






#define _GLIBCXX_DARWIN_USE_64_BIT_INODE 1
# 1650 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/c++config.h" 3
#define _GLIBCXX11_USE_C99_COMPLEX 1



#define _GLIBCXX11_USE_C99_MATH 1



#define _GLIBCXX11_USE_C99_STDIO 1



#define _GLIBCXX11_USE_C99_STDLIB 1



#define _GLIBCXX11_USE_C99_WCHAR 1




#define _GLIBCXX98_USE_C99_COMPLEX 1



#define _GLIBCXX98_USE_C99_MATH 1



#define _GLIBCXX98_USE_C99_STDIO 1



#define _GLIBCXX98_USE_C99_STDLIB 1



#define _GLIBCXX98_USE_C99_WCHAR 1


#define _GLIBCXX_ATOMIC_BUILTINS 1






#define _GLIBCXX_FULLY_DYNAMIC_STRING 0


#define _GLIBCXX_HAS_GTHREADS 1


#define _GLIBCXX_HOSTED __STDC_HOSTED__







#define _GLIBCXX_MANGLE_SIZE_T m
# 1723 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/c++config.h" 3
#define _GLIBCXX_RES_LIMITS 1





#define _GLIBCXX_STATIC_TZDATA 1


#define _GLIBCXX_STDIO_EOF -1


#define _GLIBCXX_STDIO_SEEK_CUR 1


#define _GLIBCXX_STDIO_SEEK_END 2


#define _GLIBCXX_SYMVER 1





#define _GLIBCXX_SYMVER_GNU 1
# 1757 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/c++config.h" 3
#define _GLIBCXX_USE_C11_UCHAR_CXX11 1



#define _GLIBCXX_USE_C99 1




#define _GLIBCXX_USE_C99_COMPLEX_TR1 1



#define _GLIBCXX_USE_C99_CTYPE_TR1 1



#define _GLIBCXX_USE_C99_FENV_TR1 1



#define _GLIBCXX_USE_C99_INTTYPES_TR1 1



#define _GLIBCXX_USE_C99_INTTYPES_WCHAR_T_TR1 1



#define _GLIBCXX_USE_C99_MATH_TR1 1



#define _GLIBCXX_USE_C99_STDINT_TR1 1






#define _GLIBCXX_USE_CLOCK_MONOTONIC 1


#define _GLIBCXX_USE_CLOCK_REALTIME 1



#define _GLIBCXX_USE_DECIMAL_FLOAT 1



#define _GLIBCXX_USE_DEV_RANDOM 1


#define _GLIBCXX_USE_FCHMOD 1


#define _GLIBCXX_USE_FCHMODAT 1


#define _GLIBCXX_USE_GETTIMEOFDAY 1


#define _GLIBCXX_USE_GET_NPROCS 1





#define _GLIBCXX_USE_LONG_LONG 1


#define _GLIBCXX_USE_LSTAT 1


#define _GLIBCXX_USE_NANOSLEEP 1
# 1851 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/c++config.h" 3
#define _GLIBCXX_USE_PTHREAD_RWLOCK_T 1



#define _GLIBCXX_USE_RANDOM_TR1 1


#define _GLIBCXX_USE_REALPATH 1


#define _GLIBCXX_USE_SCHED_YIELD 1


#define _GLIBCXX_USE_SC_NPROCESSORS_ONLN 1





#define _GLIBCXX_USE_SENDFILE 1





#define _GLIBCXX_USE_ST_MTIM 1





#define _GLIBCXX_USE_TMPNAM 1
# 1893 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/c++config.h" 3
#define _GLIBCXX_USE_UTIME 1



#define _GLIBCXX_USE_UTIMENSAT 1


#define _GLIBCXX_USE_WCHAR_T 1





#define _GLIBCXX_VERBOSE 1
# 1915 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/c++config.h" 3
#define _GLIBCXX_ZONEINFO_DIR "/usr/share/zoneinfo"


#define _GTHREAD_USE_MUTEX_TIMEDLOCK 1
# 44 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cassert" 2 3
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/assert.h" 1 3 4
# 34 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/assert.h" 3 4
#define _ASSERT_H 1



#define __ASSERT_VOID_CAST static_cast<void>
# 64 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/assert.h" 3 4
extern "C" {


extern void __assert_fail (const char *__assertion, const char *__file,
      unsigned int __line, const char *__function)
     noexcept (true) __attribute__ ((__noreturn__));


extern void __assert_perror_fail (int __errnum, const char *__file,
      unsigned int __line, const char *__function)
     noexcept (true) __attribute__ ((__noreturn__));




extern void __assert (const char *__assertion, const char *__file, int __line)
     noexcept (true) __attribute__ ((__noreturn__));


}





#define assert(expr) (static_cast <bool> (expr) ? void (0) : __assert_fail (#expr, __FILE__, __LINE__, __ASSERT_FUNCTION))
# 114 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/assert.h" 3 4
#define assert_perror(errnum) (!(errnum) ? __ASSERT_VOID_CAST (0) : __assert_perror_fail ((errnum), __FILE__, __LINE__, __ASSERT_FUNCTION))
# 126 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/assert.h" 3 4
#define __ASSERT_FUNCTION __extension__ __PRETTY_FUNCTION__
# 45 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cassert" 2 3
# 187 "../harfbuzz-6.0.0/src/hb.hh" 2
# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cfloat" 1 3
# 39 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cfloat" 3
       
# 40 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cfloat" 3


# 1 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/float.h" 1 3
# 29 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/float.h" 3
#define _FLOAT_H___ 


#undef FLT_RADIX
#define FLT_RADIX __FLT_RADIX__


#undef FLT_MANT_DIG
#undef DBL_MANT_DIG
#undef LDBL_MANT_DIG
#define FLT_MANT_DIG __FLT_MANT_DIG__
#define DBL_MANT_DIG __DBL_MANT_DIG__
#define LDBL_MANT_DIG __LDBL_MANT_DIG__
# 50 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/float.h" 3
#undef FLT_DIG
#undef DBL_DIG
#undef LDBL_DIG
#define FLT_DIG __FLT_DIG__
#define DBL_DIG __DBL_DIG__
#define LDBL_DIG __LDBL_DIG__


#undef FLT_MIN_EXP
#undef DBL_MIN_EXP
#undef LDBL_MIN_EXP
#define FLT_MIN_EXP __FLT_MIN_EXP__
#define DBL_MIN_EXP __DBL_MIN_EXP__
#define LDBL_MIN_EXP __LDBL_MIN_EXP__






#undef FLT_MIN_10_EXP
#undef DBL_MIN_10_EXP
#undef LDBL_MIN_10_EXP
#define FLT_MIN_10_EXP __FLT_MIN_10_EXP__
#define DBL_MIN_10_EXP __DBL_MIN_10_EXP__
#define LDBL_MIN_10_EXP __LDBL_MIN_10_EXP__


#undef FLT_MAX_EXP
#undef DBL_MAX_EXP
#undef LDBL_MAX_EXP
#define FLT_MAX_EXP __FLT_MAX_EXP__
#define DBL_MAX_EXP __DBL_MAX_EXP__
#define LDBL_MAX_EXP __LDBL_MAX_EXP__






#undef FLT_MAX_10_EXP
#undef DBL_MAX_10_EXP
#undef LDBL_MAX_10_EXP
#define FLT_MAX_10_EXP __FLT_MAX_10_EXP__
#define DBL_MAX_10_EXP __DBL_MAX_10_EXP__
#define LDBL_MAX_10_EXP __LDBL_MAX_10_EXP__





#undef FLT_MAX
#undef DBL_MAX
#undef LDBL_MAX
#define FLT_MAX __FLT_MAX__
#define DBL_MAX __DBL_MAX__
#define LDBL_MAX __LDBL_MAX__



#undef FLT_EPSILON
#undef DBL_EPSILON
#undef LDBL_EPSILON
#define FLT_EPSILON __FLT_EPSILON__
#define DBL_EPSILON __DBL_EPSILON__
#define LDBL_EPSILON __LDBL_EPSILON__


#undef FLT_MIN
#undef DBL_MIN
#undef LDBL_MIN
#define FLT_MIN __FLT_MIN__
#define DBL_MIN __DBL_MIN__
#define LDBL_MIN __LDBL_MIN__



#undef FLT_ROUNDS
#define FLT_ROUNDS 1
# 193 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/float.h" 3
#undef FLT_EVAL_METHOD



#define FLT_EVAL_METHOD __FLT_EVAL_METHOD__
# 208 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/float.h" 3
#undef DECIMAL_DIG
#define DECIMAL_DIG __DECIMAL_DIG__
# 43 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cfloat" 2 3


#define _GLIBCXX_CFLOAT 1
# 188 "../harfbuzz-6.0.0/src/hb.hh" 2
# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/climits" 1 3
# 39 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/climits" 3
       
# 40 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/climits" 3


# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/limits.h" 1 3 4
# 23 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/limits.h" 3 4
#define _LIBC_LIMITS_H_ 1

#define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION 
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/libc-header-start.h" 1 3 4
# 31 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/libc-header-start.h" 3 4
#undef __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION





#undef __GLIBC_USE_LIB_EXT2


#define __GLIBC_USE_LIB_EXT2 1
# 67 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/libc-header-start.h" 3 4
#undef __GLIBC_USE_IEC_60559_BFP_EXT

#define __GLIBC_USE_IEC_60559_BFP_EXT 1



#undef __GLIBC_USE_IEC_60559_BFP_EXT_C2X

#define __GLIBC_USE_IEC_60559_BFP_EXT_C2X 1



#undef __GLIBC_USE_IEC_60559_EXT

#define __GLIBC_USE_IEC_60559_EXT 1
# 90 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/libc-header-start.h" 3 4
#undef __GLIBC_USE_IEC_60559_FUNCS_EXT

#define __GLIBC_USE_IEC_60559_FUNCS_EXT 1



#undef __GLIBC_USE_IEC_60559_FUNCS_EXT_C2X

#define __GLIBC_USE_IEC_60559_FUNCS_EXT_C2X 1






#undef __GLIBC_USE_IEC_60559_TYPES_EXT

#define __GLIBC_USE_IEC_60559_TYPES_EXT 1
# 27 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/limits.h" 2 3 4





#define MB_LEN_MAX 16
# 124 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/limits.h" 3 4
# 1 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/limits.h" 1 3 4
# 30 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/limits.h" 3 4
#define _GCC_LIMITS_H_ 
# 60 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/limits.h" 3 4
#define _LIMITS_H___ 


#undef CHAR_BIT
#define CHAR_BIT __CHAR_BIT__







#undef SCHAR_MIN
#define SCHAR_MIN (-SCHAR_MAX - 1)
#undef SCHAR_MAX
#define SCHAR_MAX __SCHAR_MAX__


#undef UCHAR_MAX



#define UCHAR_MAX (SCHAR_MAX * 2 + 1)




#undef CHAR_MIN



#define CHAR_MIN 0

#undef CHAR_MAX
#define CHAR_MAX UCHAR_MAX
# 103 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/limits.h" 3 4
#undef SHRT_MIN
#define SHRT_MIN (-SHRT_MAX - 1)
#undef SHRT_MAX
#define SHRT_MAX __SHRT_MAX__


#undef USHRT_MAX



#define USHRT_MAX (SHRT_MAX * 2 + 1)



#undef INT_MIN
#define INT_MIN (-INT_MAX - 1)
#undef INT_MAX
#define INT_MAX __INT_MAX__


#undef UINT_MAX
#define UINT_MAX (INT_MAX * 2U + 1U)



#undef LONG_MIN
#define LONG_MIN (-LONG_MAX - 1L)
#undef LONG_MAX
#define LONG_MAX __LONG_MAX__


#undef ULONG_MAX
#define ULONG_MAX (LONG_MAX * 2UL + 1UL)
# 151 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/limits.h" 3 4
#undef LONG_LONG_MIN
#define LONG_LONG_MIN (-LONG_LONG_MAX - 1LL)
#undef LONG_LONG_MAX
#define LONG_LONG_MAX __LONG_LONG_MAX__


#undef ULONG_LONG_MAX
#define ULONG_LONG_MAX (LONG_LONG_MAX * 2ULL + 1ULL)
# 125 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/limits.h" 2 3 4







#define LLONG_MIN (-LLONG_MAX-1)


#define LLONG_MAX __LONG_LONG_MAX__


#define ULLONG_MAX (LLONG_MAX * 2ULL + 1)
# 147 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/limits.h" 3 4
#define CHAR_WIDTH 8


#define SCHAR_WIDTH 8


#define UCHAR_WIDTH 8


#define SHRT_WIDTH 16


#define USHRT_WIDTH 16


#define INT_WIDTH 32


#define UINT_WIDTH 32


#define LONG_WIDTH __WORDSIZE


#define ULONG_WIDTH __WORDSIZE


#define LLONG_WIDTH 64


#define ULLONG_WIDTH 64
# 186 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/limits.h" 3 4
#define BOOL_MAX 1


#define BOOL_WIDTH 1





# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/posix1_lim.h" 1 3 4
# 25 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/posix1_lim.h" 3 4
#define _BITS_POSIX1_LIM_H 1

# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 1 3 4
# 21 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE 64
# 32 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE_TIME64_COMPAT32 0
# 28 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/posix1_lim.h" 2 3 4




#define _POSIX_AIO_LISTIO_MAX 2


#define _POSIX_AIO_MAX 1


#define _POSIX_ARG_MAX 4096



#define _POSIX_CHILD_MAX 25





#define _POSIX_DELAYTIMER_MAX 32



#define _POSIX_HOST_NAME_MAX 255


#define _POSIX_LINK_MAX 8


#define _POSIX_LOGIN_NAME_MAX 9


#define _POSIX_MAX_CANON 255



#define _POSIX_MAX_INPUT 255


#define _POSIX_MQ_OPEN_MAX 8


#define _POSIX_MQ_PRIO_MAX 32


#define _POSIX_NAME_MAX 14



#define _POSIX_NGROUPS_MAX 8






#define _POSIX_OPEN_MAX 20







#define _POSIX_FD_SETSIZE _POSIX_OPEN_MAX



#define _POSIX_PATH_MAX 256


#define _POSIX_PIPE_BUF 512



#define _POSIX_RE_DUP_MAX 255


#define _POSIX_RTSIG_MAX 8


#define _POSIX_SEM_NSEMS_MAX 256


#define _POSIX_SEM_VALUE_MAX 32767


#define _POSIX_SIGQUEUE_MAX 32


#define _POSIX_SSIZE_MAX 32767


#define _POSIX_STREAM_MAX 8


#define _POSIX_SYMLINK_MAX 255



#define _POSIX_SYMLOOP_MAX 8


#define _POSIX_TIMER_MAX 32


#define _POSIX_TTY_NAME_MAX 9



#define _POSIX_TZNAME_MAX 6






#define _POSIX_QLIMIT 1



#define _POSIX_HIWAT _POSIX_PIPE_BUF


#define _POSIX_UIO_MAXIOV 16



#define _POSIX_CLOCKRES_MIN 20000000



# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/local_lim.h" 1 3 4







# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 1 3 4
# 21 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE 64
# 32 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE_TIME64_COMPAT32 0
# 9 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/local_lim.h" 2 3 4
# 27 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/local_lim.h" 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/local_lim-64.h" 1 3 4
# 25 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/local_lim-64.h" 3 4
#define __undef_NR_OPEN 


#define __undef_LINK_MAX 


#define __undef_OPEN_MAX 


#define __undef_ARG_MAX 



# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/linux/limits.h" 1 3 4


#define _LINUX_LIMITS_H 

#define NR_OPEN 1024

#define NGROUPS_MAX 65536
#define ARG_MAX 131072
#define LINK_MAX 127
#define MAX_CANON 255
#define MAX_INPUT 255
#define NAME_MAX 255
#define PATH_MAX 4096
#define PIPE_BUF 4096
#define XATTR_NAME_MAX 255
#define XATTR_SIZE_MAX 65536
#define XATTR_LIST_MAX 65536

#define RTSIG_MAX 32
# 39 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/local_lim-64.h" 2 3 4



#undef NR_OPEN
#undef __undef_NR_OPEN



#undef LINK_MAX
#undef __undef_LINK_MAX



#undef OPEN_MAX
#undef __undef_OPEN_MAX



#undef ARG_MAX
#undef __undef_ARG_MAX



#define _POSIX_THREAD_KEYS_MAX 128

#define PTHREAD_KEYS_MAX 1024


#define _POSIX_THREAD_DESTRUCTOR_ITERATIONS 4

#define PTHREAD_DESTRUCTOR_ITERATIONS _POSIX_THREAD_DESTRUCTOR_ITERATIONS


#define _POSIX_THREAD_THREADS_MAX 64

#undef PTHREAD_THREADS_MAX



#define AIO_PRIO_DELTA_MAX 20


# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/pthread_stack_min-dynamic.h" 1 3 4
# 22 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/pthread_stack_min-dynamic.h" 3 4
#define __SC_THREAD_STACK_MIN_VALUE 75
extern "C" {
extern long int __sysconf (int __name) noexcept (true);
}
#define PTHREAD_STACK_MIN __sysconf (__SC_THREAD_STACK_MIN_VALUE)
# 82 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/local_lim-64.h" 2 3 4


#define DELAYTIMER_MAX 2147483647


#define TTY_NAME_MAX 32


#define LOGIN_NAME_MAX 256


#define HOST_NAME_MAX 64


#define MQ_PRIO_MAX 32768


#define SEM_VALUE_MAX (2147483647)
# 28 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/local_lim.h" 2 3 4
# 162 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/posix1_lim.h" 2 3 4







#define SSIZE_MAX LONG_MAX
# 196 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/limits.h" 2 3 4



# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/posix2_lim.h" 1 3 4
# 23 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/posix2_lim.h" 3 4
#define _BITS_POSIX2_LIM_H 1



#define _POSIX2_BC_BASE_MAX 99


#define _POSIX2_BC_DIM_MAX 2048


#define _POSIX2_BC_SCALE_MAX 99


#define _POSIX2_BC_STRING_MAX 1000



#define _POSIX2_COLL_WEIGHTS_MAX 2



#define _POSIX2_EXPR_NEST_MAX 32


#define _POSIX2_LINE_MAX 2048



#define _POSIX2_RE_DUP_MAX 255



#define _POSIX2_CHARCLASS_NAME_MAX 14







#define BC_BASE_MAX _POSIX2_BC_BASE_MAX


#define BC_DIM_MAX _POSIX2_BC_DIM_MAX


#define BC_SCALE_MAX _POSIX2_BC_SCALE_MAX


#define BC_STRING_MAX _POSIX2_BC_STRING_MAX


#define COLL_WEIGHTS_MAX 255


#define EXPR_NEST_MAX _POSIX2_EXPR_NEST_MAX


#define LINE_MAX _POSIX2_LINE_MAX


#define CHARCLASS_NAME_MAX 2048



#define RE_DUP_MAX (0x7fff)
# 200 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/limits.h" 2 3 4



# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/xopen_lim.h" 1 3 4
# 30 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/xopen_lim.h" 3 4
#define _XOPEN_LIM_H 1
# 62 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/xopen_lim.h" 3 4
#define _XOPEN_IOV_MAX _POSIX_UIO_MAXIOV

# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/uio_lim.h" 1 3 4
# 20 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/uio_lim.h" 3 4
#define _BITS_UIO_LIM_H 1
# 30 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/uio_lim.h" 3 4
#define __IOV_MAX 1024
# 65 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/xopen_lim.h" 2 3 4

#define IOV_MAX __IOV_MAX






#define NL_ARGMAX _POSIX_ARG_MAX


#define NL_LANGMAX _POSIX2_LINE_MAX


#define NL_MSGMAX INT_MAX




#define NL_NMAX INT_MAX



#define NL_SETMAX INT_MAX


#define NL_TEXTMAX INT_MAX


#define NZERO 20
# 103 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/xopen_lim.h" 3 4
#define WORD_BIT 32
# 130 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/xopen_lim.h" 3 4
#define LONG_BIT 64
# 204 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/limits.h" 2 3 4
# 43 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/climits" 2 3


#define _GLIBCXX_CLIMITS 1
# 189 "../harfbuzz-6.0.0/src/hb.hh" 2



# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cmath" 1 3
# 39 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cmath" 3
       
# 40 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cmath" 3

# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/requires_hosted.h" 1 3
# 29 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/requires_hosted.h" 3
#define _REQUIRES_FREESTANDING_H 1
# 42 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cmath" 2 3


# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/cpp_type_traits.h" 1 3
# 33 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/cpp_type_traits.h" 3
#define _CPP_TYPE_TRAITS_H 1

       
# 36 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/cpp_type_traits.h" 3
# 67 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/cpp_type_traits.h" 3
extern "C++" {

namespace std __attribute__ ((__visibility__ ("default")))
{


  struct __true_type { };
  struct __false_type { };

  template<bool>
    struct __truth_type
    { typedef __false_type __type; };

  template<>
    struct __truth_type<true>
    { typedef __true_type __type; };



  template<class _Sp, class _Tp>
    struct __traitor
    {
      enum { __value = bool(_Sp::__value) || bool(_Tp::__value) };
      typedef typename __truth_type<__value>::__type __type;
    };


  template<typename, typename>
    struct __are_same
    {
      enum { __value = 0 };
      typedef __false_type __type;
    };

  template<typename _Tp>
    struct __are_same<_Tp, _Tp>
    {
      enum { __value = 1 };
      typedef __true_type __type;
    };


  template<typename _Tp>
    struct __is_void
    {
      enum { __value = 0 };
      typedef __false_type __type;
    };

  template<>
    struct __is_void<void>
    {
      enum { __value = 1 };
      typedef __true_type __type;
    };




  template<typename _Tp>
    struct __is_integer
    {
      enum { __value = 0 };
      typedef __false_type __type;
    };





  template<>
    struct __is_integer<bool>
    {
      enum { __value = 1 };
      typedef __true_type __type;
    };

  template<>
    struct __is_integer<char>
    {
      enum { __value = 1 };
      typedef __true_type __type;
    };

  template<>
    struct __is_integer<signed char>
    {
      enum { __value = 1 };
      typedef __true_type __type;
    };

  template<>
    struct __is_integer<unsigned char>
    {
      enum { __value = 1 };
      typedef __true_type __type;
    };


  template<>
    struct __is_integer<wchar_t>
    {
      enum { __value = 1 };
      typedef __true_type __type;
    };
# 184 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/cpp_type_traits.h" 3
  template<>
    struct __is_integer<char16_t>
    {
      enum { __value = 1 };
      typedef __true_type __type;
    };

  template<>
    struct __is_integer<char32_t>
    {
      enum { __value = 1 };
      typedef __true_type __type;
    };


  template<>
    struct __is_integer<short>
    {
      enum { __value = 1 };
      typedef __true_type __type;
    };

  template<>
    struct __is_integer<unsigned short>
    {
      enum { __value = 1 };
      typedef __true_type __type;
    };

  template<>
    struct __is_integer<int>
    {
      enum { __value = 1 };
      typedef __true_type __type;
    };

  template<>
    struct __is_integer<unsigned int>
    {
      enum { __value = 1 };
      typedef __true_type __type;
    };

  template<>
    struct __is_integer<long>
    {
      enum { __value = 1 };
      typedef __true_type __type;
    };

  template<>
    struct __is_integer<unsigned long>
    {
      enum { __value = 1 };
      typedef __true_type __type;
    };

  template<>
    struct __is_integer<long long>
    {
      enum { __value = 1 };
      typedef __true_type __type;
    };

  template<>
    struct __is_integer<unsigned long long>
    {
      enum { __value = 1 };
      typedef __true_type __type;
    };

#define __INT_N(TYPE) __extension__ template<> struct __is_integer<TYPE> { enum { __value = 1 }; typedef __true_type __type; }; __extension__ template<> struct __is_integer<unsigned TYPE> { enum { __value = 1 }; typedef __true_type __type; };
# 284 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/cpp_type_traits.h" 3
#undef __INT_N




  template<typename _Tp>
    struct __is_floating
    {
      enum { __value = 0 };
      typedef __false_type __type;
    };


  template<>
    struct __is_floating<float>
    {
      enum { __value = 1 };
      typedef __true_type __type;
    };

  template<>
    struct __is_floating<double>
    {
      enum { __value = 1 };
      typedef __true_type __type;
    };

  template<>
    struct __is_floating<long double>
    {
      enum { __value = 1 };
      typedef __true_type __type;
    };
# 366 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/cpp_type_traits.h" 3
  template<typename _Tp>
    struct __is_pointer
    {
      enum { __value = 0 };
      typedef __false_type __type;
    };

  template<typename _Tp>
    struct __is_pointer<_Tp*>
    {
      enum { __value = 1 };
      typedef __true_type __type;
    };




  template<typename _Tp>
    struct __is_arithmetic
    : public __traitor<__is_integer<_Tp>, __is_floating<_Tp> >
    { };




  template<typename _Tp>
    struct __is_scalar
    : public __traitor<__is_arithmetic<_Tp>, __is_pointer<_Tp> >
    { };




  template<typename _Tp>
    struct __is_char
    {
      enum { __value = 0 };
      typedef __false_type __type;
    };

  template<>
    struct __is_char<char>
    {
      enum { __value = 1 };
      typedef __true_type __type;
    };


  template<>
    struct __is_char<wchar_t>
    {
      enum { __value = 1 };
      typedef __true_type __type;
    };


  template<typename _Tp>
    struct __is_byte
    {
      enum { __value = 0 };
      typedef __false_type __type;
    };

  template<>
    struct __is_byte<char>
    {
      enum { __value = 1 };
      typedef __true_type __type;
    };

  template<>
    struct __is_byte<signed char>
    {
      enum { __value = 1 };
      typedef __true_type __type;
    };

  template<>
    struct __is_byte<unsigned char>
    {
      enum { __value = 1 };
      typedef __true_type __type;
    };
# 470 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/cpp_type_traits.h" 3
  template<typename> struct iterator_traits;


  template<typename _Tp>
    struct __is_nonvolatile_trivially_copyable
    {
      enum { __value = __is_trivially_copyable(_Tp) };
    };




  template<typename _Tp>
    struct __is_nonvolatile_trivially_copyable<volatile _Tp>
    {
      enum { __value = 0 };
    };


  template<typename _OutputIter, typename _InputIter>
    struct __memcpyable
    {
      enum { __value = 0 };
    };

  template<typename _Tp>
    struct __memcpyable<_Tp*, _Tp*>
    : __is_nonvolatile_trivially_copyable<_Tp>
    { };

  template<typename _Tp>
    struct __memcpyable<_Tp*, const _Tp*>
    : __is_nonvolatile_trivially_copyable<_Tp>
    { };






  template<typename _Iter1, typename _Iter2>
    struct __memcmpable
    {
      enum { __value = 0 };
    };


  template<typename _Tp>
    struct __memcmpable<_Tp*, _Tp*>
    : __is_nonvolatile_trivially_copyable<_Tp>
    { };

  template<typename _Tp>
    struct __memcmpable<const _Tp*, _Tp*>
    : __is_nonvolatile_trivially_copyable<_Tp>
    { };

  template<typename _Tp>
    struct __memcmpable<_Tp*, const _Tp*>
    : __is_nonvolatile_trivially_copyable<_Tp>
    { };







  template<typename _Tp, bool _TreatAsBytes =



 __is_byte<_Tp>::__value

    >
    struct __is_memcmp_ordered
    {
      static const bool __value = _Tp(-1) > _Tp(1);
    };

  template<typename _Tp>
    struct __is_memcmp_ordered<_Tp, false>
    {
      static const bool __value = false;
    };


  template<typename _Tp, typename _Up, bool = sizeof(_Tp) == sizeof(_Up)>
    struct __is_memcmp_ordered_with
    {
      static const bool __value = __is_memcmp_ordered<_Tp>::__value
 && __is_memcmp_ordered<_Up>::__value;
    };

  template<typename _Tp, typename _Up>
    struct __is_memcmp_ordered_with<_Tp, _Up, false>
    {
      static const bool __value = false;
    };
# 595 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/cpp_type_traits.h" 3
  template<typename _Tp>
    struct __is_move_iterator
    {
      enum { __value = 0 };
      typedef __false_type __type;
    };



  template<typename _Iterator>
   
    inline _Iterator
    __miter_base(_Iterator __it)
    { return __it; }


}
}
# 45 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cmath" 2 3
# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/ext/type_traits.h" 1 3
# 30 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/ext/type_traits.h" 3
#define _EXT_TYPE_TRAITS 1

       
# 33 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/ext/type_traits.h" 3




extern "C++" {

namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
{



  template<bool, typename>
    struct __enable_if
    { };

  template<typename _Tp>
    struct __enable_if<true, _Tp>
    { typedef _Tp __type; };



  template<bool _Cond, typename _Iftrue, typename _Iffalse>
    struct __conditional_type
    { typedef _Iftrue __type; };

  template<typename _Iftrue, typename _Iffalse>
    struct __conditional_type<false, _Iftrue, _Iffalse>
    { typedef _Iffalse __type; };



  template<typename _Tp>
    struct __add_unsigned
    {
    private:
      typedef __enable_if<std::__is_integer<_Tp>::__value, _Tp> __if_type;

    public:
      typedef typename __if_type::__type __type;
    };

  template<>
    struct __add_unsigned<char>
    { typedef unsigned char __type; };

  template<>
    struct __add_unsigned<signed char>
    { typedef unsigned char __type; };

  template<>
    struct __add_unsigned<short>
    { typedef unsigned short __type; };

  template<>
    struct __add_unsigned<int>
    { typedef unsigned int __type; };

  template<>
    struct __add_unsigned<long>
    { typedef unsigned long __type; };

  template<>
    struct __add_unsigned<long long>
    { typedef unsigned long long __type; };


  template<>
    struct __add_unsigned<bool>;

  template<>
    struct __add_unsigned<wchar_t>;



  template<typename _Tp>
    struct __remove_unsigned
    {
    private:
      typedef __enable_if<std::__is_integer<_Tp>::__value, _Tp> __if_type;

    public:
      typedef typename __if_type::__type __type;
    };

  template<>
    struct __remove_unsigned<char>
    { typedef signed char __type; };

  template<>
    struct __remove_unsigned<unsigned char>
    { typedef signed char __type; };

  template<>
    struct __remove_unsigned<unsigned short>
    { typedef short __type; };

  template<>
    struct __remove_unsigned<unsigned int>
    { typedef int __type; };

  template<>
    struct __remove_unsigned<unsigned long>
    { typedef long __type; };

  template<>
    struct __remove_unsigned<unsigned long long>
    { typedef long long __type; };


  template<>
    struct __remove_unsigned<bool>;

  template<>
    struct __remove_unsigned<wchar_t>;



  template<typename _Type>
    constexpr
    inline bool
    __is_null_pointer(_Type* __ptr)
    { return __ptr == 0; }

  template<typename _Type>
    constexpr
    inline bool
    __is_null_pointer(_Type)
    { return false; }


  constexpr bool
  __is_null_pointer(std::nullptr_t)
  { return true; }




  template<typename _Tp, bool = std::__is_integer<_Tp>::__value>
    struct __promote
    { typedef double __type; };




  template<typename _Tp>
    struct __promote<_Tp, false>
    { };

  template<>
    struct __promote<long double>
    { typedef long double __type; };

  template<>
    struct __promote<double>
    { typedef double __type; };

  template<>
    struct __promote<float>
    { typedef float __type; };
# 241 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/ext/type_traits.h" 3
  template<typename _Tp, typename _Up,
           typename _Tp2 = typename __promote<_Tp>::__type,
           typename _Up2 = typename __promote<_Up>::__type>
    struct __promote_2
    {
      typedef __typeof__(_Tp2() + _Up2()) __type;
    };

  template<typename _Tp, typename _Up, typename _Vp,
           typename _Tp2 = typename __promote<_Tp>::__type,
           typename _Up2 = typename __promote<_Up>::__type,
           typename _Vp2 = typename __promote<_Vp>::__type>
    struct __promote_3
    {
      typedef __typeof__(_Tp2() + _Up2() + _Vp2()) __type;
    };

  template<typename _Tp, typename _Up, typename _Vp, typename _Wp,
           typename _Tp2 = typename __promote<_Tp>::__type,
           typename _Up2 = typename __promote<_Up>::__type,
           typename _Vp2 = typename __promote<_Vp>::__type,
           typename _Wp2 = typename __promote<_Wp>::__type>
    struct __promote_4
    {
      typedef __typeof__(_Tp2() + _Up2() + _Vp2() + _Wp2()) __type;
    };



}
}
# 46 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cmath" 2 3
#define _GLIBCXX_INCLUDE_NEXT_C_HEADERS 
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 1 3 4
# 24 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 3 4
#define _MATH_H 1

#define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION 
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/libc-header-start.h" 1 3 4
# 31 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/libc-header-start.h" 3 4
#undef __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION





#undef __GLIBC_USE_LIB_EXT2


#define __GLIBC_USE_LIB_EXT2 1
# 67 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/libc-header-start.h" 3 4
#undef __GLIBC_USE_IEC_60559_BFP_EXT

#define __GLIBC_USE_IEC_60559_BFP_EXT 1



#undef __GLIBC_USE_IEC_60559_BFP_EXT_C2X

#define __GLIBC_USE_IEC_60559_BFP_EXT_C2X 1



#undef __GLIBC_USE_IEC_60559_EXT

#define __GLIBC_USE_IEC_60559_EXT 1
# 90 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/libc-header-start.h" 3 4
#undef __GLIBC_USE_IEC_60559_FUNCS_EXT

#define __GLIBC_USE_IEC_60559_FUNCS_EXT 1



#undef __GLIBC_USE_IEC_60559_FUNCS_EXT_C2X

#define __GLIBC_USE_IEC_60559_FUNCS_EXT_C2X 1






#undef __GLIBC_USE_IEC_60559_TYPES_EXT

#define __GLIBC_USE_IEC_60559_TYPES_EXT 1
# 28 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 2 3 4






extern "C" {





# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/math-vector.h" 1 3 4
# 27 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/math-vector.h" 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/libm-simd-decl-stubs.h" 1 3 4
# 34 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/libm-simd-decl-stubs.h" 3 4
#define _BITS_LIBM_SIMD_DECL_STUBS_H 1

#define __DECL_SIMD_cos 
#define __DECL_SIMD_cosf 
#define __DECL_SIMD_cosl 
#define __DECL_SIMD_cosf16 
#define __DECL_SIMD_cosf32 
#define __DECL_SIMD_cosf64 
#define __DECL_SIMD_cosf128 
#define __DECL_SIMD_cosf32x 
#define __DECL_SIMD_cosf64x 
#define __DECL_SIMD_cosf128x 

#define __DECL_SIMD_sin 
#define __DECL_SIMD_sinf 
#define __DECL_SIMD_sinl 
#define __DECL_SIMD_sinf16 
#define __DECL_SIMD_sinf32 
#define __DECL_SIMD_sinf64 
#define __DECL_SIMD_sinf128 
#define __DECL_SIMD_sinf32x 
#define __DECL_SIMD_sinf64x 
#define __DECL_SIMD_sinf128x 

#define __DECL_SIMD_sincos 
#define __DECL_SIMD_sincosf 
#define __DECL_SIMD_sincosl 
#define __DECL_SIMD_sincosf16 
#define __DECL_SIMD_sincosf32 
#define __DECL_SIMD_sincosf64 
#define __DECL_SIMD_sincosf128 
#define __DECL_SIMD_sincosf32x 
#define __DECL_SIMD_sincosf64x 
#define __DECL_SIMD_sincosf128x 

#define __DECL_SIMD_log 
#define __DECL_SIMD_logf 
#define __DECL_SIMD_logl 
#define __DECL_SIMD_logf16 
#define __DECL_SIMD_logf32 
#define __DECL_SIMD_logf64 
#define __DECL_SIMD_logf128 
#define __DECL_SIMD_logf32x 
#define __DECL_SIMD_logf64x 
#define __DECL_SIMD_logf128x 

#define __DECL_SIMD_exp 
#define __DECL_SIMD_expf 
#define __DECL_SIMD_expl 
#define __DECL_SIMD_expf16 
#define __DECL_SIMD_expf32 
#define __DECL_SIMD_expf64 
#define __DECL_SIMD_expf128 
#define __DECL_SIMD_expf32x 
#define __DECL_SIMD_expf64x 
#define __DECL_SIMD_expf128x 

#define __DECL_SIMD_pow 
#define __DECL_SIMD_powf 
#define __DECL_SIMD_powl 
#define __DECL_SIMD_powf16 
#define __DECL_SIMD_powf32 
#define __DECL_SIMD_powf64 
#define __DECL_SIMD_powf128 
#define __DECL_SIMD_powf32x 
#define __DECL_SIMD_powf64x 
#define __DECL_SIMD_powf128x 

#define __DECL_SIMD_acos 
#define __DECL_SIMD_acosf 
#define __DECL_SIMD_acosl 
#define __DECL_SIMD_acosf16 
#define __DECL_SIMD_acosf32 
#define __DECL_SIMD_acosf64 
#define __DECL_SIMD_acosf128 
#define __DECL_SIMD_acosf32x 
#define __DECL_SIMD_acosf64x 
#define __DECL_SIMD_acosf128x 

#define __DECL_SIMD_atan 
#define __DECL_SIMD_atanf 
#define __DECL_SIMD_atanl 
#define __DECL_SIMD_atanf16 
#define __DECL_SIMD_atanf32 
#define __DECL_SIMD_atanf64 
#define __DECL_SIMD_atanf128 
#define __DECL_SIMD_atanf32x 
#define __DECL_SIMD_atanf64x 
#define __DECL_SIMD_atanf128x 

#define __DECL_SIMD_asin 
#define __DECL_SIMD_asinf 
#define __DECL_SIMD_asinl 
#define __DECL_SIMD_asinf16 
#define __DECL_SIMD_asinf32 
#define __DECL_SIMD_asinf64 
#define __DECL_SIMD_asinf128 
#define __DECL_SIMD_asinf32x 
#define __DECL_SIMD_asinf64x 
#define __DECL_SIMD_asinf128x 

#define __DECL_SIMD_hypot 
#define __DECL_SIMD_hypotf 
#define __DECL_SIMD_hypotl 
#define __DECL_SIMD_hypotf16 
#define __DECL_SIMD_hypotf32 
#define __DECL_SIMD_hypotf64 
#define __DECL_SIMD_hypotf128 
#define __DECL_SIMD_hypotf32x 
#define __DECL_SIMD_hypotf64x 
#define __DECL_SIMD_hypotf128x 

#define __DECL_SIMD_exp2 
#define __DECL_SIMD_exp2f 
#define __DECL_SIMD_exp2l 
#define __DECL_SIMD_exp2f16 
#define __DECL_SIMD_exp2f32 
#define __DECL_SIMD_exp2f64 
#define __DECL_SIMD_exp2f128 
#define __DECL_SIMD_exp2f32x 
#define __DECL_SIMD_exp2f64x 
#define __DECL_SIMD_exp2f128x 

#define __DECL_SIMD_exp10 
#define __DECL_SIMD_exp10f 
#define __DECL_SIMD_exp10l 
#define __DECL_SIMD_exp10f16 
#define __DECL_SIMD_exp10f32 
#define __DECL_SIMD_exp10f64 
#define __DECL_SIMD_exp10f128 
#define __DECL_SIMD_exp10f32x 
#define __DECL_SIMD_exp10f64x 
#define __DECL_SIMD_exp10f128x 

#define __DECL_SIMD_cosh 
#define __DECL_SIMD_coshf 
#define __DECL_SIMD_coshl 
#define __DECL_SIMD_coshf16 
#define __DECL_SIMD_coshf32 
#define __DECL_SIMD_coshf64 
#define __DECL_SIMD_coshf128 
#define __DECL_SIMD_coshf32x 
#define __DECL_SIMD_coshf64x 
#define __DECL_SIMD_coshf128x 

#define __DECL_SIMD_expm1 
#define __DECL_SIMD_expm1f 
#define __DECL_SIMD_expm1l 
#define __DECL_SIMD_expm1f16 
#define __DECL_SIMD_expm1f32 
#define __DECL_SIMD_expm1f64 
#define __DECL_SIMD_expm1f128 
#define __DECL_SIMD_expm1f32x 
#define __DECL_SIMD_expm1f64x 
#define __DECL_SIMD_expm1f128x 

#define __DECL_SIMD_sinh 
#define __DECL_SIMD_sinhf 
#define __DECL_SIMD_sinhl 
#define __DECL_SIMD_sinhf16 
#define __DECL_SIMD_sinhf32 
#define __DECL_SIMD_sinhf64 
#define __DECL_SIMD_sinhf128 
#define __DECL_SIMD_sinhf32x 
#define __DECL_SIMD_sinhf64x 
#define __DECL_SIMD_sinhf128x 

#define __DECL_SIMD_cbrt 
#define __DECL_SIMD_cbrtf 
#define __DECL_SIMD_cbrtl 
#define __DECL_SIMD_cbrtf16 
#define __DECL_SIMD_cbrtf32 
#define __DECL_SIMD_cbrtf64 
#define __DECL_SIMD_cbrtf128 
#define __DECL_SIMD_cbrtf32x 
#define __DECL_SIMD_cbrtf64x 
#define __DECL_SIMD_cbrtf128x 

#define __DECL_SIMD_atan2 
#define __DECL_SIMD_atan2f 
#define __DECL_SIMD_atan2l 
#define __DECL_SIMD_atan2f16 
#define __DECL_SIMD_atan2f32 
#define __DECL_SIMD_atan2f64 
#define __DECL_SIMD_atan2f128 
#define __DECL_SIMD_atan2f32x 
#define __DECL_SIMD_atan2f64x 
#define __DECL_SIMD_atan2f128x 

#define __DECL_SIMD_log10 
#define __DECL_SIMD_log10f 
#define __DECL_SIMD_log10l 
#define __DECL_SIMD_log10f16 
#define __DECL_SIMD_log10f32 
#define __DECL_SIMD_log10f64 
#define __DECL_SIMD_log10f128 
#define __DECL_SIMD_log10f32x 
#define __DECL_SIMD_log10f64x 
#define __DECL_SIMD_log10f128x 

#define __DECL_SIMD_log2 
#define __DECL_SIMD_log2f 
#define __DECL_SIMD_log2l 
#define __DECL_SIMD_log2f16 
#define __DECL_SIMD_log2f32 
#define __DECL_SIMD_log2f64 
#define __DECL_SIMD_log2f128 
#define __DECL_SIMD_log2f32x 
#define __DECL_SIMD_log2f64x 
#define __DECL_SIMD_log2f128x 

#define __DECL_SIMD_log1p 
#define __DECL_SIMD_log1pf 
#define __DECL_SIMD_log1pl 
#define __DECL_SIMD_log1pf16 
#define __DECL_SIMD_log1pf32 
#define __DECL_SIMD_log1pf64 
#define __DECL_SIMD_log1pf128 
#define __DECL_SIMD_log1pf32x 
#define __DECL_SIMD_log1pf64x 
#define __DECL_SIMD_log1pf128x 

#define __DECL_SIMD_atanh 
#define __DECL_SIMD_atanhf 
#define __DECL_SIMD_atanhl 
#define __DECL_SIMD_atanhf16 
#define __DECL_SIMD_atanhf32 
#define __DECL_SIMD_atanhf64 
#define __DECL_SIMD_atanhf128 
#define __DECL_SIMD_atanhf32x 
#define __DECL_SIMD_atanhf64x 
#define __DECL_SIMD_atanhf128x 

#define __DECL_SIMD_acosh 
#define __DECL_SIMD_acoshf 
#define __DECL_SIMD_acoshl 
#define __DECL_SIMD_acoshf16 
#define __DECL_SIMD_acoshf32 
#define __DECL_SIMD_acoshf64 
#define __DECL_SIMD_acoshf128 
#define __DECL_SIMD_acoshf32x 
#define __DECL_SIMD_acoshf64x 
#define __DECL_SIMD_acoshf128x 

#define __DECL_SIMD_erf 
#define __DECL_SIMD_erff 
#define __DECL_SIMD_erfl 
#define __DECL_SIMD_erff16 
#define __DECL_SIMD_erff32 
#define __DECL_SIMD_erff64 
#define __DECL_SIMD_erff128 
#define __DECL_SIMD_erff32x 
#define __DECL_SIMD_erff64x 
#define __DECL_SIMD_erff128x 

#define __DECL_SIMD_tanh 
#define __DECL_SIMD_tanhf 
#define __DECL_SIMD_tanhl 
#define __DECL_SIMD_tanhf16 
#define __DECL_SIMD_tanhf32 
#define __DECL_SIMD_tanhf64 
#define __DECL_SIMD_tanhf128 
#define __DECL_SIMD_tanhf32x 
#define __DECL_SIMD_tanhf64x 
#define __DECL_SIMD_tanhf128x 

#define __DECL_SIMD_asinh 
#define __DECL_SIMD_asinhf 
#define __DECL_SIMD_asinhl 
#define __DECL_SIMD_asinhf16 
#define __DECL_SIMD_asinhf32 
#define __DECL_SIMD_asinhf64 
#define __DECL_SIMD_asinhf128 
#define __DECL_SIMD_asinhf32x 
#define __DECL_SIMD_asinhf64x 
#define __DECL_SIMD_asinhf128x 

#define __DECL_SIMD_erfc 
#define __DECL_SIMD_erfcf 
#define __DECL_SIMD_erfcl 
#define __DECL_SIMD_erfcf16 
#define __DECL_SIMD_erfcf32 
#define __DECL_SIMD_erfcf64 
#define __DECL_SIMD_erfcf128 
#define __DECL_SIMD_erfcf32x 
#define __DECL_SIMD_erfcf64x 
#define __DECL_SIMD_erfcf128x 

#define __DECL_SIMD_tan 
#define __DECL_SIMD_tanf 
#define __DECL_SIMD_tanl 
#define __DECL_SIMD_tanf16 
#define __DECL_SIMD_tanf32 
#define __DECL_SIMD_tanf64 
#define __DECL_SIMD_tanf128 
#define __DECL_SIMD_tanf32x 
#define __DECL_SIMD_tanf64x 
#define __DECL_SIMD_tanf128x 
# 28 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/math-vector.h" 2 3 4
# 41 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 2 3 4


# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/floatn.h" 1 3 4







# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 1 3 4
# 21 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE 64
# 32 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE_TIME64_COMPAT32 0
# 9 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/floatn.h" 2 3 4
# 27 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/floatn.h" 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/floatn-64.h" 1 3 4
# 20 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/floatn-64.h" 3 4
#define _BITS_FLOATN_H 


# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/long-double.h" 1 3 4







# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 1 3 4
# 21 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE 64
# 32 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE_TIME64_COMPAT32 0
# 9 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/long-double.h" 2 3 4
# 27 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/long-double.h" 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/long-double-64.h" 1 3 4
# 21 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/long-double-64.h" 3 4
#define __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI 0
# 28 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/long-double.h" 2 3 4
# 24 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/floatn-64.h" 2 3 4





#define __HAVE_FLOAT128 1
# 40 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/floatn-64.h" 3 4
#define __HAVE_DISTINCT_FLOAT128 0




#define __HAVE_FLOAT64X __HAVE_FLOAT128





#define __HAVE_FLOAT64X_LONG_DOUBLE __HAVE_FLOAT128
# 62 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/floatn-64.h" 3 4
#define __f128(x) x ##f128
# 71 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/floatn-64.h" 3 4
#define __CFLOAT128 _Complex _Float128
# 95 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/floatn-64.h" 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/floatn-common.h" 1 3 4
# 21 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/floatn-common.h" 3 4
#define _BITS_FLOATN_COMMON_H 


# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/long-double.h" 1 3 4







# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 1 3 4
# 21 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE 64
# 32 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE_TIME64_COMPAT32 0
# 9 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/long-double.h" 2 3 4
# 27 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/long-double.h" 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/long-double-64.h" 1 3 4
# 21 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/long-double-64.h" 3 4
#define __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI 0
# 28 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/long-double.h" 2 3 4
# 25 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/floatn-common.h" 2 3 4
# 34 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/floatn-common.h" 3 4
#define __HAVE_FLOAT16 0
#define __HAVE_FLOAT32 1
#define __HAVE_FLOAT64 1
#define __HAVE_FLOAT32X 1
#define __HAVE_FLOAT128X 0
# 52 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/floatn-common.h" 3 4
#define __HAVE_DISTINCT_FLOAT16 __HAVE_FLOAT16
#define __HAVE_DISTINCT_FLOAT32 0
#define __HAVE_DISTINCT_FLOAT64 0
#define __HAVE_DISTINCT_FLOAT32X 0
#define __HAVE_DISTINCT_FLOAT64X 0
#define __HAVE_DISTINCT_FLOAT128X __HAVE_FLOAT128X





#define __HAVE_FLOAT128_UNLIKE_LDBL (__HAVE_DISTINCT_FLOAT128 && __LDBL_MANT_DIG__ != 113)
# 72 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/floatn-common.h" 3 4
#define __HAVE_FLOATN_NOT_TYPEDEF 0
# 93 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/floatn-common.h" 3 4
#define __f32(x) x ##f32
# 105 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/floatn-common.h" 3 4
#define __f64(x) x ##f64







#define __f32x(x) x ##f32x
# 125 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/floatn-common.h" 3 4
#define __f64x(x) x ##f64x
# 151 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/floatn-common.h" 3 4
#define __CFLOAT32 _Complex _Float32
# 163 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/floatn-common.h" 3 4
#define __CFLOAT64 _Complex _Float64







#define __CFLOAT32X _Complex _Float32x
# 183 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/floatn-common.h" 3 4
#define __CFLOAT64X _Complex _Float64x
# 96 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/floatn-64.h" 2 3 4
# 28 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/floatn.h" 2 3 4
# 44 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 2 3 4




#define HUGE_VAL (__builtin_huge_val ())
# 59 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 3 4
#define HUGE_VALF (__builtin_huge_valf ())
#define HUGE_VALL (__builtin_huge_vall ())
# 70 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 3 4
#define HUGE_VAL_F32 (__builtin_huge_valf32 ())


#define HUGE_VAL_F64 (__builtin_huge_valf64 ())


#define HUGE_VAL_F128 (__builtin_huge_valf128 ())


#define HUGE_VAL_F32X (__builtin_huge_valf32x ())


#define HUGE_VAL_F64X (__builtin_huge_valf64x ())
# 91 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 3 4
#define INFINITY (__builtin_inff ())






#define NAN (__builtin_nanf (""))
# 110 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 3 4
#define SNANF (__builtin_nansf (""))
#define SNAN (__builtin_nans (""))
#define SNANL (__builtin_nansl (""))
# 123 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 3 4
#define SNANF32 (__builtin_nansf32 (""))




#define SNANF64 (__builtin_nansf64 (""))




#define SNANF128 (__builtin_nansf128 (""))




#define SNANF32X (__builtin_nansf32x (""))




#define SNANF64X (__builtin_nansf64x (""))
# 152 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/flt-eval-method.h" 1 3 4
# 38 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/flt-eval-method.h" 3 4
#define __GLIBC_FLT_EVAL_METHOD __FLT_EVAL_METHOD__
# 153 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 2 3 4
# 163 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 3 4
typedef float float_t;
typedef double double_t;
# 204 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/fp-logb.h" 1 3 4
# 27 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/fp-logb.h" 3 4
#define __FP_LOGB0_IS_MIN 0
#define __FP_LOGBNAN_IS_MIN 0
# 205 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 2 3 4




#define FP_ILOGB0 (-2147483647)




#define FP_ILOGBNAN 2147483647






#define __FP_LONG_MAX 0x7fffffffffffffffL




#define FP_LLOGB0 (-__FP_LONG_MAX)




#define FP_LLOGBNAN __FP_LONG_MAX
# 247 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/fp-fast.h" 1 3 4







# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 1 3 4
# 21 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE 64
# 32 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE_TIME64_COMPAT32 0
# 9 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/fp-fast.h" 2 3 4
# 27 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/fp-fast.h" 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/fp-fast-64.h" 1 3 4
# 27 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/fp-fast-64.h" 3 4
#define FP_FAST_FMA 1
#define FP_FAST_FMAF 1
# 28 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/fp-fast.h" 2 3 4
# 248 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 2 3 4



enum
  {
    FP_INT_UPWARD =
#define FP_INT_UPWARD 0
      0,
    FP_INT_DOWNWARD =
#define FP_INT_DOWNWARD 1
      1,
    FP_INT_TOWARDZERO =
#define FP_INT_TOWARDZERO 2
      2,
    FP_INT_TONEARESTFROMZERO =
#define FP_INT_TONEARESTFROMZERO 3
      3,
    FP_INT_TONEAREST =
#define FP_INT_TONEAREST 4
      4,
  };







#define __SIMD_DECL(function) __CONCAT (__DECL_SIMD_, function)

#define __MATHCALL_VEC(function,suffix,args) __SIMD_DECL (__MATH_PRECNAME (function, suffix)) __MATHCALL (function, suffix, args)



#define __MATHDECL_VEC(type,function,suffix,args) __SIMD_DECL (__MATH_PRECNAME (function, suffix)) __MATHDECL(type, function,suffix, args)



#define __MATHCALL(function,suffix,args) __MATHDECL (_Mdouble_,function,suffix, args)

#define __MATHDECL(type,function,suffix,args) __MATHDECL_1(type, function,suffix, args); __MATHDECL_1(type, __CONCAT(__,function),suffix, args)


#define __MATHCALLX(function,suffix,args,attrib) __MATHDECLX (_Mdouble_,function,suffix, args, attrib)

#define __MATHDECLX(type,function,suffix,args,attrib) __MATHDECL_1(type, function,suffix, args) __attribute__ (attrib); __MATHDECL_1(type, __CONCAT(__,function),suffix, args) __attribute__ (attrib)


#define __MATHDECL_1_IMPL(type,function,suffix,args) extern type __MATH_PRECNAME(function,suffix) args __THROW

#define __MATHDECL_1(type,function,suffix,args) __MATHDECL_1_IMPL(type, function, suffix, args)



#define __MATHDECL_ALIAS(type,function,suffix,args,alias) __MATHDECL_1(type, function, suffix, args)


#define __MATHREDIR(type,function,suffix,args,to) extern type __REDIRECT_NTH (__MATH_PRECNAME (function, suffix), args, to)


#define _Mdouble_ double
#define __MATH_PRECNAME(name,r) __CONCAT(name,r)
#define __MATH_DECLARING_DOUBLE 1
#define __MATH_DECLARING_FLOATN 0
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls-helper-functions.h" 1 3 4
# 20 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls-helper-functions.h" 3 4
extern int __fpclassify (double __value) noexcept (true)
     __attribute__ ((__const__));


extern int __signbit (double __value) noexcept (true)
     __attribute__ ((__const__));



extern int __isinf (double __value) noexcept (true)
  __attribute__ ((__const__));


extern int __finite (double __value) noexcept (true)
  __attribute__ ((__const__));


extern int __isnan (double __value) noexcept (true)
  __attribute__ ((__const__));


extern int __iseqsig (double __x, double __y) noexcept (true);


extern int __issignaling (double __value) noexcept (true)
     __attribute__ ((__const__));
# 313 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 2 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls.h" 1 3 4
# 53 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls.h" 3 4
 extern double acos (double __x) noexcept (true); extern double __acos (double __x) noexcept (true);

 extern double asin (double __x) noexcept (true); extern double __asin (double __x) noexcept (true);

 extern double atan (double __x) noexcept (true); extern double __atan (double __x) noexcept (true);

 extern double atan2 (double __y, double __x) noexcept (true); extern double __atan2 (double __y, double __x) noexcept (true);


 extern double cos (double __x) noexcept (true); extern double __cos (double __x) noexcept (true);

 extern double sin (double __x) noexcept (true); extern double __sin (double __x) noexcept (true);

 extern double tan (double __x) noexcept (true); extern double __tan (double __x) noexcept (true);




 extern double cosh (double __x) noexcept (true); extern double __cosh (double __x) noexcept (true);

 extern double sinh (double __x) noexcept (true); extern double __sinh (double __x) noexcept (true);

 extern double tanh (double __x) noexcept (true); extern double __tanh (double __x) noexcept (true);



 extern void sincos (double __x, double *__sinx, double *__cosx) noexcept (true); extern void __sincos (double __x, double *__sinx, double *__cosx) noexcept (true)
                                                        ;




 extern double acosh (double __x) noexcept (true); extern double __acosh (double __x) noexcept (true);

 extern double asinh (double __x) noexcept (true); extern double __asinh (double __x) noexcept (true);

 extern double atanh (double __x) noexcept (true); extern double __atanh (double __x) noexcept (true);





 extern double exp (double __x) noexcept (true); extern double __exp (double __x) noexcept (true);


extern double frexp (double __x, int *__exponent) noexcept (true); extern double __frexp (double __x, int *__exponent) noexcept (true);


extern double ldexp (double __x, int __exponent) noexcept (true); extern double __ldexp (double __x, int __exponent) noexcept (true);


 extern double log (double __x) noexcept (true); extern double __log (double __x) noexcept (true);


 extern double log10 (double __x) noexcept (true); extern double __log10 (double __x) noexcept (true);


extern double modf (double __x, double *__iptr) noexcept (true); extern double __modf (double __x, double *__iptr) noexcept (true) __attribute__ ((__nonnull__ (2)));



 extern double exp10 (double __x) noexcept (true); extern double __exp10 (double __x) noexcept (true);




 extern double expm1 (double __x) noexcept (true); extern double __expm1 (double __x) noexcept (true);


 extern double log1p (double __x) noexcept (true); extern double __log1p (double __x) noexcept (true);


extern double logb (double __x) noexcept (true); extern double __logb (double __x) noexcept (true);




 extern double exp2 (double __x) noexcept (true); extern double __exp2 (double __x) noexcept (true);


 extern double log2 (double __x) noexcept (true); extern double __log2 (double __x) noexcept (true);






 extern double pow (double __x, double __y) noexcept (true); extern double __pow (double __x, double __y) noexcept (true);


extern double sqrt (double __x) noexcept (true); extern double __sqrt (double __x) noexcept (true);



 extern double hypot (double __x, double __y) noexcept (true); extern double __hypot (double __x, double __y) noexcept (true);




 extern double cbrt (double __x) noexcept (true); extern double __cbrt (double __x) noexcept (true);






extern double ceil (double __x) noexcept (true) __attribute__ ((__const__)); extern double __ceil (double __x) noexcept (true) __attribute__ ((__const__));


extern double fabs (double __x) noexcept (true) __attribute__ ((__const__)); extern double __fabs (double __x) noexcept (true) __attribute__ ((__const__));


extern double floor (double __x) noexcept (true) __attribute__ ((__const__)); extern double __floor (double __x) noexcept (true) __attribute__ ((__const__));


extern double fmod (double __x, double __y) noexcept (true); extern double __fmod (double __x, double __y) noexcept (true);
# 183 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls.h" 3 4
extern int finite (double __value) noexcept (true)
  __attribute__ ((__const__));


extern double drem (double __x, double __y) noexcept (true); extern double __drem (double __x, double __y) noexcept (true);



extern double significand (double __x) noexcept (true); extern double __significand (double __x) noexcept (true);






extern double copysign (double __x, double __y) noexcept (true) __attribute__ ((__const__)); extern double __copysign (double __x, double __y) noexcept (true) __attribute__ ((__const__));




extern double nan (const char *__tagb) noexcept (true); extern double __nan (const char *__tagb) noexcept (true);
# 220 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls.h" 3 4
extern double j0 (double) noexcept (true); extern double __j0 (double) noexcept (true);
extern double j1 (double) noexcept (true); extern double __j1 (double) noexcept (true);
extern double jn (int, double) noexcept (true); extern double __jn (int, double) noexcept (true);
extern double y0 (double) noexcept (true); extern double __y0 (double) noexcept (true);
extern double y1 (double) noexcept (true); extern double __y1 (double) noexcept (true);
extern double yn (int, double) noexcept (true); extern double __yn (int, double) noexcept (true);





 extern double erf (double) noexcept (true); extern double __erf (double) noexcept (true);
 extern double erfc (double) noexcept (true); extern double __erfc (double) noexcept (true);
extern double lgamma (double) noexcept (true); extern double __lgamma (double) noexcept (true);




extern double tgamma (double) noexcept (true); extern double __tgamma (double) noexcept (true);





extern double gamma (double) noexcept (true); extern double __gamma (double) noexcept (true);







extern double lgamma_r (double, int *__signgamp) noexcept (true); extern double __lgamma_r (double, int *__signgamp) noexcept (true);






extern double rint (double __x) noexcept (true); extern double __rint (double __x) noexcept (true);


extern double nextafter (double __x, double __y) noexcept (true); extern double __nextafter (double __x, double __y) noexcept (true);

extern double nexttoward (double __x, long double __y) noexcept (true); extern double __nexttoward (double __x, long double __y) noexcept (true);




extern double nextdown (double __x) noexcept (true); extern double __nextdown (double __x) noexcept (true);

extern double nextup (double __x) noexcept (true); extern double __nextup (double __x) noexcept (true);



extern double remainder (double __x, double __y) noexcept (true); extern double __remainder (double __x, double __y) noexcept (true);



extern double scalbn (double __x, int __n) noexcept (true); extern double __scalbn (double __x, int __n) noexcept (true);



extern int ilogb (double __x) noexcept (true); extern int __ilogb (double __x) noexcept (true);




extern long int llogb (double __x) noexcept (true); extern long int __llogb (double __x) noexcept (true);




extern double scalbln (double __x, long int __n) noexcept (true); extern double __scalbln (double __x, long int __n) noexcept (true);



extern double nearbyint (double __x) noexcept (true); extern double __nearbyint (double __x) noexcept (true);



extern double round (double __x) noexcept (true) __attribute__ ((__const__)); extern double __round (double __x) noexcept (true) __attribute__ ((__const__));



extern double trunc (double __x) noexcept (true) __attribute__ ((__const__)); extern double __trunc (double __x) noexcept (true) __attribute__ ((__const__));




extern double remquo (double __x, double __y, int *__quo) noexcept (true); extern double __remquo (double __x, double __y, int *__quo) noexcept (true);






extern long int lrint (double __x) noexcept (true); extern long int __lrint (double __x) noexcept (true);
__extension__
extern long long int llrint (double __x) noexcept (true); extern long long int __llrint (double __x) noexcept (true);



extern long int lround (double __x) noexcept (true); extern long int __lround (double __x) noexcept (true);
__extension__
extern long long int llround (double __x) noexcept (true); extern long long int __llround (double __x) noexcept (true);



extern double fdim (double __x, double __y) noexcept (true); extern double __fdim (double __x, double __y) noexcept (true);



extern double fmax (double __x, double __y) noexcept (true) __attribute__ ((__const__)); extern double __fmax (double __x, double __y) noexcept (true) __attribute__ ((__const__));


extern double fmin (double __x, double __y) noexcept (true) __attribute__ ((__const__)); extern double __fmin (double __x, double __y) noexcept (true) __attribute__ ((__const__));



extern double fma (double __x, double __y, double __z) noexcept (true); extern double __fma (double __x, double __y, double __z) noexcept (true);




extern double roundeven (double __x) noexcept (true) __attribute__ ((__const__)); extern double __roundeven (double __x) noexcept (true) __attribute__ ((__const__));



extern __intmax_t fromfp (double __x, int __round, unsigned int __width) noexcept (true); extern __intmax_t __fromfp (double __x, int __round, unsigned int __width) noexcept (true)
                            ;



extern __uintmax_t ufromfp (double __x, int __round, unsigned int __width) noexcept (true); extern __uintmax_t __ufromfp (double __x, int __round, unsigned int __width) noexcept (true)
                              ;




extern __intmax_t fromfpx (double __x, int __round, unsigned int __width) noexcept (true); extern __intmax_t __fromfpx (double __x, int __round, unsigned int __width) noexcept (true)
                             ;




extern __uintmax_t ufromfpx (double __x, int __round, unsigned int __width) noexcept (true); extern __uintmax_t __ufromfpx (double __x, int __round, unsigned int __width) noexcept (true)
                               ;


extern int canonicalize (double *__cx, const double *__x) noexcept (true);






extern double fmaxmag (double __x, double __y) noexcept (true) __attribute__ ((__const__)); extern double __fmaxmag (double __x, double __y) noexcept (true) __attribute__ ((__const__));


extern double fminmag (double __x, double __y) noexcept (true) __attribute__ ((__const__)); extern double __fminmag (double __x, double __y) noexcept (true) __attribute__ ((__const__));




extern double fmaximum (double __x, double __y) noexcept (true) __attribute__ ((__const__)); extern double __fmaximum (double __x, double __y) noexcept (true) __attribute__ ((__const__));


extern double fminimum (double __x, double __y) noexcept (true) __attribute__ ((__const__)); extern double __fminimum (double __x, double __y) noexcept (true) __attribute__ ((__const__));


extern double fmaximum_num (double __x, double __y) noexcept (true) __attribute__ ((__const__)); extern double __fmaximum_num (double __x, double __y) noexcept (true) __attribute__ ((__const__));


extern double fminimum_num (double __x, double __y) noexcept (true) __attribute__ ((__const__)); extern double __fminimum_num (double __x, double __y) noexcept (true) __attribute__ ((__const__));


extern double fmaximum_mag (double __x, double __y) noexcept (true) __attribute__ ((__const__)); extern double __fmaximum_mag (double __x, double __y) noexcept (true) __attribute__ ((__const__));


extern double fminimum_mag (double __x, double __y) noexcept (true) __attribute__ ((__const__)); extern double __fminimum_mag (double __x, double __y) noexcept (true) __attribute__ ((__const__));


extern double fmaximum_mag_num (double __x, double __y) noexcept (true) __attribute__ ((__const__)); extern double __fmaximum_mag_num (double __x, double __y) noexcept (true) __attribute__ ((__const__));


extern double fminimum_mag_num (double __x, double __y) noexcept (true) __attribute__ ((__const__)); extern double __fminimum_mag_num (double __x, double __y) noexcept (true) __attribute__ ((__const__));




extern int totalorder (const double *__x, const double *__y) noexcept (true)

     __attribute__ ((__pure__));


extern int totalordermag (const double *__x, const double *__y) noexcept (true)

     __attribute__ ((__pure__));


extern double getpayload (const double *__x) noexcept (true); extern double __getpayload (const double *__x) noexcept (true);


extern int setpayload (double *__x, double __payload) noexcept (true);


extern int setpayloadsig (double *__x, double __payload) noexcept (true);







extern double scalb (double __x, double __n) noexcept (true); extern double __scalb (double __x, double __n) noexcept (true);
# 314 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 2 3 4
#undef _Mdouble_
#undef __MATH_PRECNAME
#undef __MATH_DECLARING_DOUBLE
#undef __MATH_DECLARING_FLOATN







#define _Mdouble_ float
#define __MATH_PRECNAME(name,r) name ##f ##r
#define __MATH_DECLARING_DOUBLE 0
#define __MATH_DECLARING_FLOATN 0
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls-helper-functions.h" 1 3 4
# 20 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls-helper-functions.h" 3 4
extern int __fpclassifyf (float __value) noexcept (true)
     __attribute__ ((__const__));


extern int __signbitf (float __value) noexcept (true)
     __attribute__ ((__const__));



extern int __isinff (float __value) noexcept (true)
  __attribute__ ((__const__));


extern int __finitef (float __value) noexcept (true)
  __attribute__ ((__const__));


extern int __isnanf (float __value) noexcept (true)
  __attribute__ ((__const__));


extern int __iseqsigf (float __x, float __y) noexcept (true);


extern int __issignalingf (float __value) noexcept (true)
     __attribute__ ((__const__));
# 330 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 2 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls.h" 1 3 4
# 53 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls.h" 3 4
 extern float acosf (float __x) noexcept (true); extern float __acosf (float __x) noexcept (true);

 extern float asinf (float __x) noexcept (true); extern float __asinf (float __x) noexcept (true);

 extern float atanf (float __x) noexcept (true); extern float __atanf (float __x) noexcept (true);

 extern float atan2f (float __y, float __x) noexcept (true); extern float __atan2f (float __y, float __x) noexcept (true);


 extern float cosf (float __x) noexcept (true); extern float __cosf (float __x) noexcept (true);

 extern float sinf (float __x) noexcept (true); extern float __sinf (float __x) noexcept (true);

 extern float tanf (float __x) noexcept (true); extern float __tanf (float __x) noexcept (true);




 extern float coshf (float __x) noexcept (true); extern float __coshf (float __x) noexcept (true);

 extern float sinhf (float __x) noexcept (true); extern float __sinhf (float __x) noexcept (true);

 extern float tanhf (float __x) noexcept (true); extern float __tanhf (float __x) noexcept (true);



 extern void sincosf (float __x, float *__sinx, float *__cosx) noexcept (true); extern void __sincosf (float __x, float *__sinx, float *__cosx) noexcept (true)
                                                        ;




 extern float acoshf (float __x) noexcept (true); extern float __acoshf (float __x) noexcept (true);

 extern float asinhf (float __x) noexcept (true); extern float __asinhf (float __x) noexcept (true);

 extern float atanhf (float __x) noexcept (true); extern float __atanhf (float __x) noexcept (true);





 extern float expf (float __x) noexcept (true); extern float __expf (float __x) noexcept (true);


extern float frexpf (float __x, int *__exponent) noexcept (true); extern float __frexpf (float __x, int *__exponent) noexcept (true);


extern float ldexpf (float __x, int __exponent) noexcept (true); extern float __ldexpf (float __x, int __exponent) noexcept (true);


 extern float logf (float __x) noexcept (true); extern float __logf (float __x) noexcept (true);


 extern float log10f (float __x) noexcept (true); extern float __log10f (float __x) noexcept (true);


extern float modff (float __x, float *__iptr) noexcept (true); extern float __modff (float __x, float *__iptr) noexcept (true) __attribute__ ((__nonnull__ (2)));



 extern float exp10f (float __x) noexcept (true); extern float __exp10f (float __x) noexcept (true);




 extern float expm1f (float __x) noexcept (true); extern float __expm1f (float __x) noexcept (true);


 extern float log1pf (float __x) noexcept (true); extern float __log1pf (float __x) noexcept (true);


extern float logbf (float __x) noexcept (true); extern float __logbf (float __x) noexcept (true);




 extern float exp2f (float __x) noexcept (true); extern float __exp2f (float __x) noexcept (true);


 extern float log2f (float __x) noexcept (true); extern float __log2f (float __x) noexcept (true);






 extern float powf (float __x, float __y) noexcept (true); extern float __powf (float __x, float __y) noexcept (true);


extern float sqrtf (float __x) noexcept (true); extern float __sqrtf (float __x) noexcept (true);



 extern float hypotf (float __x, float __y) noexcept (true); extern float __hypotf (float __x, float __y) noexcept (true);




 extern float cbrtf (float __x) noexcept (true); extern float __cbrtf (float __x) noexcept (true);






extern float ceilf (float __x) noexcept (true) __attribute__ ((__const__)); extern float __ceilf (float __x) noexcept (true) __attribute__ ((__const__));


extern float fabsf (float __x) noexcept (true) __attribute__ ((__const__)); extern float __fabsf (float __x) noexcept (true) __attribute__ ((__const__));


extern float floorf (float __x) noexcept (true) __attribute__ ((__const__)); extern float __floorf (float __x) noexcept (true) __attribute__ ((__const__));


extern float fmodf (float __x, float __y) noexcept (true); extern float __fmodf (float __x, float __y) noexcept (true);
# 177 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls.h" 3 4
extern int isinff (float __value) noexcept (true)
  __attribute__ ((__const__));




extern int finitef (float __value) noexcept (true)
  __attribute__ ((__const__));


extern float dremf (float __x, float __y) noexcept (true); extern float __dremf (float __x, float __y) noexcept (true);



extern float significandf (float __x) noexcept (true); extern float __significandf (float __x) noexcept (true);






extern float copysignf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); extern float __copysignf (float __x, float __y) noexcept (true) __attribute__ ((__const__));




extern float nanf (const char *__tagb) noexcept (true); extern float __nanf (const char *__tagb) noexcept (true);
# 213 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls.h" 3 4
extern int isnanf (float __value) noexcept (true)
  __attribute__ ((__const__));





extern float j0f (float) noexcept (true); extern float __j0f (float) noexcept (true);
extern float j1f (float) noexcept (true); extern float __j1f (float) noexcept (true);
extern float jnf (int, float) noexcept (true); extern float __jnf (int, float) noexcept (true);
extern float y0f (float) noexcept (true); extern float __y0f (float) noexcept (true);
extern float y1f (float) noexcept (true); extern float __y1f (float) noexcept (true);
extern float ynf (int, float) noexcept (true); extern float __ynf (int, float) noexcept (true);





 extern float erff (float) noexcept (true); extern float __erff (float) noexcept (true);
 extern float erfcf (float) noexcept (true); extern float __erfcf (float) noexcept (true);
extern float lgammaf (float) noexcept (true); extern float __lgammaf (float) noexcept (true);




extern float tgammaf (float) noexcept (true); extern float __tgammaf (float) noexcept (true);





extern float gammaf (float) noexcept (true); extern float __gammaf (float) noexcept (true);







extern float lgammaf_r (float, int *__signgamp) noexcept (true); extern float __lgammaf_r (float, int *__signgamp) noexcept (true);






extern float rintf (float __x) noexcept (true); extern float __rintf (float __x) noexcept (true);


extern float nextafterf (float __x, float __y) noexcept (true); extern float __nextafterf (float __x, float __y) noexcept (true);

extern float nexttowardf (float __x, long double __y) noexcept (true); extern float __nexttowardf (float __x, long double __y) noexcept (true);




extern float nextdownf (float __x) noexcept (true); extern float __nextdownf (float __x) noexcept (true);

extern float nextupf (float __x) noexcept (true); extern float __nextupf (float __x) noexcept (true);



extern float remainderf (float __x, float __y) noexcept (true); extern float __remainderf (float __x, float __y) noexcept (true);



extern float scalbnf (float __x, int __n) noexcept (true); extern float __scalbnf (float __x, int __n) noexcept (true);



extern int ilogbf (float __x) noexcept (true); extern int __ilogbf (float __x) noexcept (true);




extern long int llogbf (float __x) noexcept (true); extern long int __llogbf (float __x) noexcept (true);




extern float scalblnf (float __x, long int __n) noexcept (true); extern float __scalblnf (float __x, long int __n) noexcept (true);



extern float nearbyintf (float __x) noexcept (true); extern float __nearbyintf (float __x) noexcept (true);



extern float roundf (float __x) noexcept (true) __attribute__ ((__const__)); extern float __roundf (float __x) noexcept (true) __attribute__ ((__const__));



extern float truncf (float __x) noexcept (true) __attribute__ ((__const__)); extern float __truncf (float __x) noexcept (true) __attribute__ ((__const__));




extern float remquof (float __x, float __y, int *__quo) noexcept (true); extern float __remquof (float __x, float __y, int *__quo) noexcept (true);






extern long int lrintf (float __x) noexcept (true); extern long int __lrintf (float __x) noexcept (true);
__extension__
extern long long int llrintf (float __x) noexcept (true); extern long long int __llrintf (float __x) noexcept (true);



extern long int lroundf (float __x) noexcept (true); extern long int __lroundf (float __x) noexcept (true);
__extension__
extern long long int llroundf (float __x) noexcept (true); extern long long int __llroundf (float __x) noexcept (true);



extern float fdimf (float __x, float __y) noexcept (true); extern float __fdimf (float __x, float __y) noexcept (true);



extern float fmaxf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); extern float __fmaxf (float __x, float __y) noexcept (true) __attribute__ ((__const__));


extern float fminf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); extern float __fminf (float __x, float __y) noexcept (true) __attribute__ ((__const__));



extern float fmaf (float __x, float __y, float __z) noexcept (true); extern float __fmaf (float __x, float __y, float __z) noexcept (true);




extern float roundevenf (float __x) noexcept (true) __attribute__ ((__const__)); extern float __roundevenf (float __x) noexcept (true) __attribute__ ((__const__));



extern __intmax_t fromfpf (float __x, int __round, unsigned int __width) noexcept (true); extern __intmax_t __fromfpf (float __x, int __round, unsigned int __width) noexcept (true)
                            ;



extern __uintmax_t ufromfpf (float __x, int __round, unsigned int __width) noexcept (true); extern __uintmax_t __ufromfpf (float __x, int __round, unsigned int __width) noexcept (true)
                              ;




extern __intmax_t fromfpxf (float __x, int __round, unsigned int __width) noexcept (true); extern __intmax_t __fromfpxf (float __x, int __round, unsigned int __width) noexcept (true)
                             ;




extern __uintmax_t ufromfpxf (float __x, int __round, unsigned int __width) noexcept (true); extern __uintmax_t __ufromfpxf (float __x, int __round, unsigned int __width) noexcept (true)
                               ;


extern int canonicalizef (float *__cx, const float *__x) noexcept (true);






extern float fmaxmagf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); extern float __fmaxmagf (float __x, float __y) noexcept (true) __attribute__ ((__const__));


extern float fminmagf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); extern float __fminmagf (float __x, float __y) noexcept (true) __attribute__ ((__const__));




extern float fmaximumf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); extern float __fmaximumf (float __x, float __y) noexcept (true) __attribute__ ((__const__));


extern float fminimumf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); extern float __fminimumf (float __x, float __y) noexcept (true) __attribute__ ((__const__));


extern float fmaximum_numf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); extern float __fmaximum_numf (float __x, float __y) noexcept (true) __attribute__ ((__const__));


extern float fminimum_numf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); extern float __fminimum_numf (float __x, float __y) noexcept (true) __attribute__ ((__const__));


extern float fmaximum_magf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); extern float __fmaximum_magf (float __x, float __y) noexcept (true) __attribute__ ((__const__));


extern float fminimum_magf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); extern float __fminimum_magf (float __x, float __y) noexcept (true) __attribute__ ((__const__));


extern float fmaximum_mag_numf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); extern float __fmaximum_mag_numf (float __x, float __y) noexcept (true) __attribute__ ((__const__));


extern float fminimum_mag_numf (float __x, float __y) noexcept (true) __attribute__ ((__const__)); extern float __fminimum_mag_numf (float __x, float __y) noexcept (true) __attribute__ ((__const__));




extern int totalorderf (const float *__x, const float *__y) noexcept (true)

     __attribute__ ((__pure__));


extern int totalordermagf (const float *__x, const float *__y) noexcept (true)

     __attribute__ ((__pure__));


extern float getpayloadf (const float *__x) noexcept (true); extern float __getpayloadf (const float *__x) noexcept (true);


extern int setpayloadf (float *__x, float __payload) noexcept (true);


extern int setpayloadsigf (float *__x, float __payload) noexcept (true);







extern float scalbf (float __x, float __n) noexcept (true); extern float __scalbf (float __x, float __n) noexcept (true);
# 331 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 2 3 4
#undef _Mdouble_
#undef __MATH_PRECNAME
#undef __MATH_DECLARING_DOUBLE
#undef __MATH_DECLARING_FLOATN
# 393 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 3 4
#define _Mdouble_ long double
#define __MATH_PRECNAME(name,r) name ##l ##r
#define __MATH_DECLARING_DOUBLE 0
#define __MATH_DECLARING_FLOATN 0
#define __MATH_DECLARE_LDOUBLE 1
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls-helper-functions.h" 1 3 4
# 20 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls-helper-functions.h" 3 4
extern int __fpclassifyl (long double __value) noexcept (true)
     __attribute__ ((__const__));


extern int __signbitl (long double __value) noexcept (true)
     __attribute__ ((__const__));



extern int __isinfl (long double __value) noexcept (true)
  __attribute__ ((__const__));


extern int __finitel (long double __value) noexcept (true)
  __attribute__ ((__const__));


extern int __isnanl (long double __value) noexcept (true)
  __attribute__ ((__const__));


extern int __iseqsigl (long double __x, long double __y) noexcept (true);


extern int __issignalingl (long double __value) noexcept (true)
     __attribute__ ((__const__));
# 399 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 2 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls.h" 1 3 4
# 53 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls.h" 3 4
 extern long double acosl (long double __x) noexcept (true); extern long double __acosl (long double __x) noexcept (true);

 extern long double asinl (long double __x) noexcept (true); extern long double __asinl (long double __x) noexcept (true);

 extern long double atanl (long double __x) noexcept (true); extern long double __atanl (long double __x) noexcept (true);

 extern long double atan2l (long double __y, long double __x) noexcept (true); extern long double __atan2l (long double __y, long double __x) noexcept (true);


 extern long double cosl (long double __x) noexcept (true); extern long double __cosl (long double __x) noexcept (true);

 extern long double sinl (long double __x) noexcept (true); extern long double __sinl (long double __x) noexcept (true);

 extern long double tanl (long double __x) noexcept (true); extern long double __tanl (long double __x) noexcept (true);




 extern long double coshl (long double __x) noexcept (true); extern long double __coshl (long double __x) noexcept (true);

 extern long double sinhl (long double __x) noexcept (true); extern long double __sinhl (long double __x) noexcept (true);

 extern long double tanhl (long double __x) noexcept (true); extern long double __tanhl (long double __x) noexcept (true);



 extern void sincosl (long double __x, long double *__sinx, long double *__cosx) noexcept (true); extern void __sincosl (long double __x, long double *__sinx, long double *__cosx) noexcept (true)
                                                        ;




 extern long double acoshl (long double __x) noexcept (true); extern long double __acoshl (long double __x) noexcept (true);

 extern long double asinhl (long double __x) noexcept (true); extern long double __asinhl (long double __x) noexcept (true);

 extern long double atanhl (long double __x) noexcept (true); extern long double __atanhl (long double __x) noexcept (true);





 extern long double expl (long double __x) noexcept (true); extern long double __expl (long double __x) noexcept (true);


extern long double frexpl (long double __x, int *__exponent) noexcept (true); extern long double __frexpl (long double __x, int *__exponent) noexcept (true);


extern long double ldexpl (long double __x, int __exponent) noexcept (true); extern long double __ldexpl (long double __x, int __exponent) noexcept (true);


 extern long double logl (long double __x) noexcept (true); extern long double __logl (long double __x) noexcept (true);


 extern long double log10l (long double __x) noexcept (true); extern long double __log10l (long double __x) noexcept (true);


extern long double modfl (long double __x, long double *__iptr) noexcept (true); extern long double __modfl (long double __x, long double *__iptr) noexcept (true) __attribute__ ((__nonnull__ (2)));



 extern long double exp10l (long double __x) noexcept (true); extern long double __exp10l (long double __x) noexcept (true);




 extern long double expm1l (long double __x) noexcept (true); extern long double __expm1l (long double __x) noexcept (true);


 extern long double log1pl (long double __x) noexcept (true); extern long double __log1pl (long double __x) noexcept (true);


extern long double logbl (long double __x) noexcept (true); extern long double __logbl (long double __x) noexcept (true);




 extern long double exp2l (long double __x) noexcept (true); extern long double __exp2l (long double __x) noexcept (true);


 extern long double log2l (long double __x) noexcept (true); extern long double __log2l (long double __x) noexcept (true);






 extern long double powl (long double __x, long double __y) noexcept (true); extern long double __powl (long double __x, long double __y) noexcept (true);


extern long double sqrtl (long double __x) noexcept (true); extern long double __sqrtl (long double __x) noexcept (true);



 extern long double hypotl (long double __x, long double __y) noexcept (true); extern long double __hypotl (long double __x, long double __y) noexcept (true);




 extern long double cbrtl (long double __x) noexcept (true); extern long double __cbrtl (long double __x) noexcept (true);






extern long double ceill (long double __x) noexcept (true) __attribute__ ((__const__)); extern long double __ceill (long double __x) noexcept (true) __attribute__ ((__const__));


extern long double fabsl (long double __x) noexcept (true) __attribute__ ((__const__)); extern long double __fabsl (long double __x) noexcept (true) __attribute__ ((__const__));


extern long double floorl (long double __x) noexcept (true) __attribute__ ((__const__)); extern long double __floorl (long double __x) noexcept (true) __attribute__ ((__const__));


extern long double fmodl (long double __x, long double __y) noexcept (true); extern long double __fmodl (long double __x, long double __y) noexcept (true);
# 177 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls.h" 3 4
extern int isinfl (long double __value) noexcept (true)
  __attribute__ ((__const__));




extern int finitel (long double __value) noexcept (true)
  __attribute__ ((__const__));


extern long double dreml (long double __x, long double __y) noexcept (true); extern long double __dreml (long double __x, long double __y) noexcept (true);



extern long double significandl (long double __x) noexcept (true); extern long double __significandl (long double __x) noexcept (true);






extern long double copysignl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); extern long double __copysignl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__));




extern long double nanl (const char *__tagb) noexcept (true); extern long double __nanl (const char *__tagb) noexcept (true);
# 213 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls.h" 3 4
extern int isnanl (long double __value) noexcept (true)
  __attribute__ ((__const__));





extern long double j0l (long double) noexcept (true); extern long double __j0l (long double) noexcept (true);
extern long double j1l (long double) noexcept (true); extern long double __j1l (long double) noexcept (true);
extern long double jnl (int, long double) noexcept (true); extern long double __jnl (int, long double) noexcept (true);
extern long double y0l (long double) noexcept (true); extern long double __y0l (long double) noexcept (true);
extern long double y1l (long double) noexcept (true); extern long double __y1l (long double) noexcept (true);
extern long double ynl (int, long double) noexcept (true); extern long double __ynl (int, long double) noexcept (true);





 extern long double erfl (long double) noexcept (true); extern long double __erfl (long double) noexcept (true);
 extern long double erfcl (long double) noexcept (true); extern long double __erfcl (long double) noexcept (true);
extern long double lgammal (long double) noexcept (true); extern long double __lgammal (long double) noexcept (true);




extern long double tgammal (long double) noexcept (true); extern long double __tgammal (long double) noexcept (true);





extern long double gammal (long double) noexcept (true); extern long double __gammal (long double) noexcept (true);







extern long double lgammal_r (long double, int *__signgamp) noexcept (true); extern long double __lgammal_r (long double, int *__signgamp) noexcept (true);






extern long double rintl (long double __x) noexcept (true); extern long double __rintl (long double __x) noexcept (true);


extern long double nextafterl (long double __x, long double __y) noexcept (true); extern long double __nextafterl (long double __x, long double __y) noexcept (true);

extern long double nexttowardl (long double __x, long double __y) noexcept (true); extern long double __nexttowardl (long double __x, long double __y) noexcept (true);




extern long double nextdownl (long double __x) noexcept (true); extern long double __nextdownl (long double __x) noexcept (true);

extern long double nextupl (long double __x) noexcept (true); extern long double __nextupl (long double __x) noexcept (true);



extern long double remainderl (long double __x, long double __y) noexcept (true); extern long double __remainderl (long double __x, long double __y) noexcept (true);



extern long double scalbnl (long double __x, int __n) noexcept (true); extern long double __scalbnl (long double __x, int __n) noexcept (true);



extern int ilogbl (long double __x) noexcept (true); extern int __ilogbl (long double __x) noexcept (true);




extern long int llogbl (long double __x) noexcept (true); extern long int __llogbl (long double __x) noexcept (true);




extern long double scalblnl (long double __x, long int __n) noexcept (true); extern long double __scalblnl (long double __x, long int __n) noexcept (true);



extern long double nearbyintl (long double __x) noexcept (true); extern long double __nearbyintl (long double __x) noexcept (true);



extern long double roundl (long double __x) noexcept (true) __attribute__ ((__const__)); extern long double __roundl (long double __x) noexcept (true) __attribute__ ((__const__));



extern long double truncl (long double __x) noexcept (true) __attribute__ ((__const__)); extern long double __truncl (long double __x) noexcept (true) __attribute__ ((__const__));




extern long double remquol (long double __x, long double __y, int *__quo) noexcept (true); extern long double __remquol (long double __x, long double __y, int *__quo) noexcept (true);






extern long int lrintl (long double __x) noexcept (true); extern long int __lrintl (long double __x) noexcept (true);
__extension__
extern long long int llrintl (long double __x) noexcept (true); extern long long int __llrintl (long double __x) noexcept (true);



extern long int lroundl (long double __x) noexcept (true); extern long int __lroundl (long double __x) noexcept (true);
__extension__
extern long long int llroundl (long double __x) noexcept (true); extern long long int __llroundl (long double __x) noexcept (true);



extern long double fdiml (long double __x, long double __y) noexcept (true); extern long double __fdiml (long double __x, long double __y) noexcept (true);



extern long double fmaxl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); extern long double __fmaxl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__));


extern long double fminl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); extern long double __fminl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__));



extern long double fmal (long double __x, long double __y, long double __z) noexcept (true); extern long double __fmal (long double __x, long double __y, long double __z) noexcept (true);




extern long double roundevenl (long double __x) noexcept (true) __attribute__ ((__const__)); extern long double __roundevenl (long double __x) noexcept (true) __attribute__ ((__const__));



extern __intmax_t fromfpl (long double __x, int __round, unsigned int __width) noexcept (true); extern __intmax_t __fromfpl (long double __x, int __round, unsigned int __width) noexcept (true)
                            ;



extern __uintmax_t ufromfpl (long double __x, int __round, unsigned int __width) noexcept (true); extern __uintmax_t __ufromfpl (long double __x, int __round, unsigned int __width) noexcept (true)
                              ;




extern __intmax_t fromfpxl (long double __x, int __round, unsigned int __width) noexcept (true); extern __intmax_t __fromfpxl (long double __x, int __round, unsigned int __width) noexcept (true)
                             ;




extern __uintmax_t ufromfpxl (long double __x, int __round, unsigned int __width) noexcept (true); extern __uintmax_t __ufromfpxl (long double __x, int __round, unsigned int __width) noexcept (true)
                               ;


extern int canonicalizel (long double *__cx, const long double *__x) noexcept (true);






extern long double fmaxmagl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); extern long double __fmaxmagl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__));


extern long double fminmagl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); extern long double __fminmagl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__));




extern long double fmaximuml (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); extern long double __fmaximuml (long double __x, long double __y) noexcept (true) __attribute__ ((__const__));


extern long double fminimuml (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); extern long double __fminimuml (long double __x, long double __y) noexcept (true) __attribute__ ((__const__));


extern long double fmaximum_numl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); extern long double __fmaximum_numl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__));


extern long double fminimum_numl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); extern long double __fminimum_numl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__));


extern long double fmaximum_magl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); extern long double __fmaximum_magl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__));


extern long double fminimum_magl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); extern long double __fminimum_magl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__));


extern long double fmaximum_mag_numl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); extern long double __fmaximum_mag_numl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__));


extern long double fminimum_mag_numl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__)); extern long double __fminimum_mag_numl (long double __x, long double __y) noexcept (true) __attribute__ ((__const__));




extern int totalorderl (const long double *__x, const long double *__y) noexcept (true)

     __attribute__ ((__pure__));


extern int totalordermagl (const long double *__x, const long double *__y) noexcept (true)

     __attribute__ ((__pure__));


extern long double getpayloadl (const long double *__x) noexcept (true); extern long double __getpayloadl (const long double *__x) noexcept (true);


extern int setpayloadl (long double *__x, long double __payload) noexcept (true);


extern int setpayloadsigl (long double *__x, long double __payload) noexcept (true);







extern long double scalbl (long double __x, long double __n) noexcept (true); extern long double __scalbl (long double __x, long double __n) noexcept (true);
# 400 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 2 3 4

#undef _Mdouble_
#undef __MATH_PRECNAME
#undef __MATH_DECLARING_DOUBLE
#undef __MATH_DECLARING_FLOATN
# 442 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 3 4
#define _Mdouble_ _Float32
#define __MATH_PRECNAME(name,r) name ##f32 ##r
#define __MATH_DECLARING_DOUBLE 0
#define __MATH_DECLARING_FLOATN 1




# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls.h" 1 3 4
# 53 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls.h" 3 4
 extern _Float32 acosf32 (_Float32 __x) noexcept (true); extern _Float32 __acosf32 (_Float32 __x) noexcept (true);

 extern _Float32 asinf32 (_Float32 __x) noexcept (true); extern _Float32 __asinf32 (_Float32 __x) noexcept (true);

 extern _Float32 atanf32 (_Float32 __x) noexcept (true); extern _Float32 __atanf32 (_Float32 __x) noexcept (true);

 extern _Float32 atan2f32 (_Float32 __y, _Float32 __x) noexcept (true); extern _Float32 __atan2f32 (_Float32 __y, _Float32 __x) noexcept (true);


 extern _Float32 cosf32 (_Float32 __x) noexcept (true); extern _Float32 __cosf32 (_Float32 __x) noexcept (true);

 extern _Float32 sinf32 (_Float32 __x) noexcept (true); extern _Float32 __sinf32 (_Float32 __x) noexcept (true);

 extern _Float32 tanf32 (_Float32 __x) noexcept (true); extern _Float32 __tanf32 (_Float32 __x) noexcept (true);




 extern _Float32 coshf32 (_Float32 __x) noexcept (true); extern _Float32 __coshf32 (_Float32 __x) noexcept (true);

 extern _Float32 sinhf32 (_Float32 __x) noexcept (true); extern _Float32 __sinhf32 (_Float32 __x) noexcept (true);

 extern _Float32 tanhf32 (_Float32 __x) noexcept (true); extern _Float32 __tanhf32 (_Float32 __x) noexcept (true);



 extern void sincosf32 (_Float32 __x, _Float32 *__sinx, _Float32 *__cosx) noexcept (true); extern void __sincosf32 (_Float32 __x, _Float32 *__sinx, _Float32 *__cosx) noexcept (true)
                                                        ;




 extern _Float32 acoshf32 (_Float32 __x) noexcept (true); extern _Float32 __acoshf32 (_Float32 __x) noexcept (true);

 extern _Float32 asinhf32 (_Float32 __x) noexcept (true); extern _Float32 __asinhf32 (_Float32 __x) noexcept (true);

 extern _Float32 atanhf32 (_Float32 __x) noexcept (true); extern _Float32 __atanhf32 (_Float32 __x) noexcept (true);





 extern _Float32 expf32 (_Float32 __x) noexcept (true); extern _Float32 __expf32 (_Float32 __x) noexcept (true);


extern _Float32 frexpf32 (_Float32 __x, int *__exponent) noexcept (true); extern _Float32 __frexpf32 (_Float32 __x, int *__exponent) noexcept (true);


extern _Float32 ldexpf32 (_Float32 __x, int __exponent) noexcept (true); extern _Float32 __ldexpf32 (_Float32 __x, int __exponent) noexcept (true);


 extern _Float32 logf32 (_Float32 __x) noexcept (true); extern _Float32 __logf32 (_Float32 __x) noexcept (true);


 extern _Float32 log10f32 (_Float32 __x) noexcept (true); extern _Float32 __log10f32 (_Float32 __x) noexcept (true);


extern _Float32 modff32 (_Float32 __x, _Float32 *__iptr) noexcept (true); extern _Float32 __modff32 (_Float32 __x, _Float32 *__iptr) noexcept (true) __attribute__ ((__nonnull__ (2)));



 extern _Float32 exp10f32 (_Float32 __x) noexcept (true); extern _Float32 __exp10f32 (_Float32 __x) noexcept (true);




 extern _Float32 expm1f32 (_Float32 __x) noexcept (true); extern _Float32 __expm1f32 (_Float32 __x) noexcept (true);


 extern _Float32 log1pf32 (_Float32 __x) noexcept (true); extern _Float32 __log1pf32 (_Float32 __x) noexcept (true);


extern _Float32 logbf32 (_Float32 __x) noexcept (true); extern _Float32 __logbf32 (_Float32 __x) noexcept (true);




 extern _Float32 exp2f32 (_Float32 __x) noexcept (true); extern _Float32 __exp2f32 (_Float32 __x) noexcept (true);


 extern _Float32 log2f32 (_Float32 __x) noexcept (true); extern _Float32 __log2f32 (_Float32 __x) noexcept (true);






 extern _Float32 powf32 (_Float32 __x, _Float32 __y) noexcept (true); extern _Float32 __powf32 (_Float32 __x, _Float32 __y) noexcept (true);


extern _Float32 sqrtf32 (_Float32 __x) noexcept (true); extern _Float32 __sqrtf32 (_Float32 __x) noexcept (true);



 extern _Float32 hypotf32 (_Float32 __x, _Float32 __y) noexcept (true); extern _Float32 __hypotf32 (_Float32 __x, _Float32 __y) noexcept (true);




 extern _Float32 cbrtf32 (_Float32 __x) noexcept (true); extern _Float32 __cbrtf32 (_Float32 __x) noexcept (true);






extern _Float32 ceilf32 (_Float32 __x) noexcept (true) __attribute__ ((__const__)); extern _Float32 __ceilf32 (_Float32 __x) noexcept (true) __attribute__ ((__const__));


extern _Float32 fabsf32 (_Float32 __x) noexcept (true) __attribute__ ((__const__)); extern _Float32 __fabsf32 (_Float32 __x) noexcept (true) __attribute__ ((__const__));


extern _Float32 floorf32 (_Float32 __x) noexcept (true) __attribute__ ((__const__)); extern _Float32 __floorf32 (_Float32 __x) noexcept (true) __attribute__ ((__const__));


extern _Float32 fmodf32 (_Float32 __x, _Float32 __y) noexcept (true); extern _Float32 __fmodf32 (_Float32 __x, _Float32 __y) noexcept (true);
# 198 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls.h" 3 4
extern _Float32 copysignf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); extern _Float32 __copysignf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__));




extern _Float32 nanf32 (const char *__tagb) noexcept (true); extern _Float32 __nanf32 (const char *__tagb) noexcept (true);
# 220 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls.h" 3 4
extern _Float32 j0f32 (_Float32) noexcept (true); extern _Float32 __j0f32 (_Float32) noexcept (true);
extern _Float32 j1f32 (_Float32) noexcept (true); extern _Float32 __j1f32 (_Float32) noexcept (true);
extern _Float32 jnf32 (int, _Float32) noexcept (true); extern _Float32 __jnf32 (int, _Float32) noexcept (true);
extern _Float32 y0f32 (_Float32) noexcept (true); extern _Float32 __y0f32 (_Float32) noexcept (true);
extern _Float32 y1f32 (_Float32) noexcept (true); extern _Float32 __y1f32 (_Float32) noexcept (true);
extern _Float32 ynf32 (int, _Float32) noexcept (true); extern _Float32 __ynf32 (int, _Float32) noexcept (true);





 extern _Float32 erff32 (_Float32) noexcept (true); extern _Float32 __erff32 (_Float32) noexcept (true);
 extern _Float32 erfcf32 (_Float32) noexcept (true); extern _Float32 __erfcf32 (_Float32) noexcept (true);
extern _Float32 lgammaf32 (_Float32) noexcept (true); extern _Float32 __lgammaf32 (_Float32) noexcept (true);




extern _Float32 tgammaf32 (_Float32) noexcept (true); extern _Float32 __tgammaf32 (_Float32) noexcept (true);
# 252 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls.h" 3 4
extern _Float32 lgammaf32_r (_Float32, int *__signgamp) noexcept (true); extern _Float32 __lgammaf32_r (_Float32, int *__signgamp) noexcept (true);






extern _Float32 rintf32 (_Float32 __x) noexcept (true); extern _Float32 __rintf32 (_Float32 __x) noexcept (true);


extern _Float32 nextafterf32 (_Float32 __x, _Float32 __y) noexcept (true); extern _Float32 __nextafterf32 (_Float32 __x, _Float32 __y) noexcept (true);






extern _Float32 nextdownf32 (_Float32 __x) noexcept (true); extern _Float32 __nextdownf32 (_Float32 __x) noexcept (true);

extern _Float32 nextupf32 (_Float32 __x) noexcept (true); extern _Float32 __nextupf32 (_Float32 __x) noexcept (true);



extern _Float32 remainderf32 (_Float32 __x, _Float32 __y) noexcept (true); extern _Float32 __remainderf32 (_Float32 __x, _Float32 __y) noexcept (true);



extern _Float32 scalbnf32 (_Float32 __x, int __n) noexcept (true); extern _Float32 __scalbnf32 (_Float32 __x, int __n) noexcept (true);



extern int ilogbf32 (_Float32 __x) noexcept (true); extern int __ilogbf32 (_Float32 __x) noexcept (true);




extern long int llogbf32 (_Float32 __x) noexcept (true); extern long int __llogbf32 (_Float32 __x) noexcept (true);




extern _Float32 scalblnf32 (_Float32 __x, long int __n) noexcept (true); extern _Float32 __scalblnf32 (_Float32 __x, long int __n) noexcept (true);



extern _Float32 nearbyintf32 (_Float32 __x) noexcept (true); extern _Float32 __nearbyintf32 (_Float32 __x) noexcept (true);



extern _Float32 roundf32 (_Float32 __x) noexcept (true) __attribute__ ((__const__)); extern _Float32 __roundf32 (_Float32 __x) noexcept (true) __attribute__ ((__const__));



extern _Float32 truncf32 (_Float32 __x) noexcept (true) __attribute__ ((__const__)); extern _Float32 __truncf32 (_Float32 __x) noexcept (true) __attribute__ ((__const__));




extern _Float32 remquof32 (_Float32 __x, _Float32 __y, int *__quo) noexcept (true); extern _Float32 __remquof32 (_Float32 __x, _Float32 __y, int *__quo) noexcept (true);






extern long int lrintf32 (_Float32 __x) noexcept (true); extern long int __lrintf32 (_Float32 __x) noexcept (true);
__extension__
extern long long int llrintf32 (_Float32 __x) noexcept (true); extern long long int __llrintf32 (_Float32 __x) noexcept (true);



extern long int lroundf32 (_Float32 __x) noexcept (true); extern long int __lroundf32 (_Float32 __x) noexcept (true);
__extension__
extern long long int llroundf32 (_Float32 __x) noexcept (true); extern long long int __llroundf32 (_Float32 __x) noexcept (true);



extern _Float32 fdimf32 (_Float32 __x, _Float32 __y) noexcept (true); extern _Float32 __fdimf32 (_Float32 __x, _Float32 __y) noexcept (true);



extern _Float32 fmaxf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); extern _Float32 __fmaxf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__));


extern _Float32 fminf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); extern _Float32 __fminf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__));



extern _Float32 fmaf32 (_Float32 __x, _Float32 __y, _Float32 __z) noexcept (true); extern _Float32 __fmaf32 (_Float32 __x, _Float32 __y, _Float32 __z) noexcept (true);




extern _Float32 roundevenf32 (_Float32 __x) noexcept (true) __attribute__ ((__const__)); extern _Float32 __roundevenf32 (_Float32 __x) noexcept (true) __attribute__ ((__const__));



extern __intmax_t fromfpf32 (_Float32 __x, int __round, unsigned int __width) noexcept (true); extern __intmax_t __fromfpf32 (_Float32 __x, int __round, unsigned int __width) noexcept (true)
                            ;



extern __uintmax_t ufromfpf32 (_Float32 __x, int __round, unsigned int __width) noexcept (true); extern __uintmax_t __ufromfpf32 (_Float32 __x, int __round, unsigned int __width) noexcept (true)
                              ;




extern __intmax_t fromfpxf32 (_Float32 __x, int __round, unsigned int __width) noexcept (true); extern __intmax_t __fromfpxf32 (_Float32 __x, int __round, unsigned int __width) noexcept (true)
                             ;




extern __uintmax_t ufromfpxf32 (_Float32 __x, int __round, unsigned int __width) noexcept (true); extern __uintmax_t __ufromfpxf32 (_Float32 __x, int __round, unsigned int __width) noexcept (true)
                               ;


extern int canonicalizef32 (_Float32 *__cx, const _Float32 *__x) noexcept (true);






extern _Float32 fmaxmagf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); extern _Float32 __fmaxmagf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__));


extern _Float32 fminmagf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); extern _Float32 __fminmagf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__));




extern _Float32 fmaximumf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); extern _Float32 __fmaximumf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__));


extern _Float32 fminimumf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); extern _Float32 __fminimumf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__));


extern _Float32 fmaximum_numf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); extern _Float32 __fmaximum_numf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__));


extern _Float32 fminimum_numf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); extern _Float32 __fminimum_numf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__));


extern _Float32 fmaximum_magf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); extern _Float32 __fmaximum_magf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__));


extern _Float32 fminimum_magf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); extern _Float32 __fminimum_magf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__));


extern _Float32 fmaximum_mag_numf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); extern _Float32 __fmaximum_mag_numf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__));


extern _Float32 fminimum_mag_numf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__)); extern _Float32 __fminimum_mag_numf32 (_Float32 __x, _Float32 __y) noexcept (true) __attribute__ ((__const__));




extern int totalorderf32 (const _Float32 *__x, const _Float32 *__y) noexcept (true)

     __attribute__ ((__pure__));


extern int totalordermagf32 (const _Float32 *__x, const _Float32 *__y) noexcept (true)

     __attribute__ ((__pure__));


extern _Float32 getpayloadf32 (const _Float32 *__x) noexcept (true); extern _Float32 __getpayloadf32 (const _Float32 *__x) noexcept (true);


extern int setpayloadf32 (_Float32 *__x, _Float32 __payload) noexcept (true);


extern int setpayloadsigf32 (_Float32 *__x, _Float32 __payload) noexcept (true);
# 451 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 2 3 4

#undef _Mdouble_
#undef __MATH_PRECNAME
#undef __MATH_DECLARING_DOUBLE
#undef __MATH_DECLARING_FLOATN



#define _Mdouble_ _Float64
#define __MATH_PRECNAME(name,r) name ##f64 ##r
#define __MATH_DECLARING_DOUBLE 0
#define __MATH_DECLARING_FLOATN 1




# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls.h" 1 3 4
# 53 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls.h" 3 4
 extern _Float64 acosf64 (_Float64 __x) noexcept (true); extern _Float64 __acosf64 (_Float64 __x) noexcept (true);

 extern _Float64 asinf64 (_Float64 __x) noexcept (true); extern _Float64 __asinf64 (_Float64 __x) noexcept (true);

 extern _Float64 atanf64 (_Float64 __x) noexcept (true); extern _Float64 __atanf64 (_Float64 __x) noexcept (true);

 extern _Float64 atan2f64 (_Float64 __y, _Float64 __x) noexcept (true); extern _Float64 __atan2f64 (_Float64 __y, _Float64 __x) noexcept (true);


 extern _Float64 cosf64 (_Float64 __x) noexcept (true); extern _Float64 __cosf64 (_Float64 __x) noexcept (true);

 extern _Float64 sinf64 (_Float64 __x) noexcept (true); extern _Float64 __sinf64 (_Float64 __x) noexcept (true);

 extern _Float64 tanf64 (_Float64 __x) noexcept (true); extern _Float64 __tanf64 (_Float64 __x) noexcept (true);




 extern _Float64 coshf64 (_Float64 __x) noexcept (true); extern _Float64 __coshf64 (_Float64 __x) noexcept (true);

 extern _Float64 sinhf64 (_Float64 __x) noexcept (true); extern _Float64 __sinhf64 (_Float64 __x) noexcept (true);

 extern _Float64 tanhf64 (_Float64 __x) noexcept (true); extern _Float64 __tanhf64 (_Float64 __x) noexcept (true);



 extern void sincosf64 (_Float64 __x, _Float64 *__sinx, _Float64 *__cosx) noexcept (true); extern void __sincosf64 (_Float64 __x, _Float64 *__sinx, _Float64 *__cosx) noexcept (true)
                                                        ;




 extern _Float64 acoshf64 (_Float64 __x) noexcept (true); extern _Float64 __acoshf64 (_Float64 __x) noexcept (true);

 extern _Float64 asinhf64 (_Float64 __x) noexcept (true); extern _Float64 __asinhf64 (_Float64 __x) noexcept (true);

 extern _Float64 atanhf64 (_Float64 __x) noexcept (true); extern _Float64 __atanhf64 (_Float64 __x) noexcept (true);





 extern _Float64 expf64 (_Float64 __x) noexcept (true); extern _Float64 __expf64 (_Float64 __x) noexcept (true);


extern _Float64 frexpf64 (_Float64 __x, int *__exponent) noexcept (true); extern _Float64 __frexpf64 (_Float64 __x, int *__exponent) noexcept (true);


extern _Float64 ldexpf64 (_Float64 __x, int __exponent) noexcept (true); extern _Float64 __ldexpf64 (_Float64 __x, int __exponent) noexcept (true);


 extern _Float64 logf64 (_Float64 __x) noexcept (true); extern _Float64 __logf64 (_Float64 __x) noexcept (true);


 extern _Float64 log10f64 (_Float64 __x) noexcept (true); extern _Float64 __log10f64 (_Float64 __x) noexcept (true);


extern _Float64 modff64 (_Float64 __x, _Float64 *__iptr) noexcept (true); extern _Float64 __modff64 (_Float64 __x, _Float64 *__iptr) noexcept (true) __attribute__ ((__nonnull__ (2)));



 extern _Float64 exp10f64 (_Float64 __x) noexcept (true); extern _Float64 __exp10f64 (_Float64 __x) noexcept (true);




 extern _Float64 expm1f64 (_Float64 __x) noexcept (true); extern _Float64 __expm1f64 (_Float64 __x) noexcept (true);


 extern _Float64 log1pf64 (_Float64 __x) noexcept (true); extern _Float64 __log1pf64 (_Float64 __x) noexcept (true);


extern _Float64 logbf64 (_Float64 __x) noexcept (true); extern _Float64 __logbf64 (_Float64 __x) noexcept (true);




 extern _Float64 exp2f64 (_Float64 __x) noexcept (true); extern _Float64 __exp2f64 (_Float64 __x) noexcept (true);


 extern _Float64 log2f64 (_Float64 __x) noexcept (true); extern _Float64 __log2f64 (_Float64 __x) noexcept (true);






 extern _Float64 powf64 (_Float64 __x, _Float64 __y) noexcept (true); extern _Float64 __powf64 (_Float64 __x, _Float64 __y) noexcept (true);


extern _Float64 sqrtf64 (_Float64 __x) noexcept (true); extern _Float64 __sqrtf64 (_Float64 __x) noexcept (true);



 extern _Float64 hypotf64 (_Float64 __x, _Float64 __y) noexcept (true); extern _Float64 __hypotf64 (_Float64 __x, _Float64 __y) noexcept (true);




 extern _Float64 cbrtf64 (_Float64 __x) noexcept (true); extern _Float64 __cbrtf64 (_Float64 __x) noexcept (true);






extern _Float64 ceilf64 (_Float64 __x) noexcept (true) __attribute__ ((__const__)); extern _Float64 __ceilf64 (_Float64 __x) noexcept (true) __attribute__ ((__const__));


extern _Float64 fabsf64 (_Float64 __x) noexcept (true) __attribute__ ((__const__)); extern _Float64 __fabsf64 (_Float64 __x) noexcept (true) __attribute__ ((__const__));


extern _Float64 floorf64 (_Float64 __x) noexcept (true) __attribute__ ((__const__)); extern _Float64 __floorf64 (_Float64 __x) noexcept (true) __attribute__ ((__const__));


extern _Float64 fmodf64 (_Float64 __x, _Float64 __y) noexcept (true); extern _Float64 __fmodf64 (_Float64 __x, _Float64 __y) noexcept (true);
# 198 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls.h" 3 4
extern _Float64 copysignf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); extern _Float64 __copysignf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__));




extern _Float64 nanf64 (const char *__tagb) noexcept (true); extern _Float64 __nanf64 (const char *__tagb) noexcept (true);
# 220 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls.h" 3 4
extern _Float64 j0f64 (_Float64) noexcept (true); extern _Float64 __j0f64 (_Float64) noexcept (true);
extern _Float64 j1f64 (_Float64) noexcept (true); extern _Float64 __j1f64 (_Float64) noexcept (true);
extern _Float64 jnf64 (int, _Float64) noexcept (true); extern _Float64 __jnf64 (int, _Float64) noexcept (true);
extern _Float64 y0f64 (_Float64) noexcept (true); extern _Float64 __y0f64 (_Float64) noexcept (true);
extern _Float64 y1f64 (_Float64) noexcept (true); extern _Float64 __y1f64 (_Float64) noexcept (true);
extern _Float64 ynf64 (int, _Float64) noexcept (true); extern _Float64 __ynf64 (int, _Float64) noexcept (true);





 extern _Float64 erff64 (_Float64) noexcept (true); extern _Float64 __erff64 (_Float64) noexcept (true);
 extern _Float64 erfcf64 (_Float64) noexcept (true); extern _Float64 __erfcf64 (_Float64) noexcept (true);
extern _Float64 lgammaf64 (_Float64) noexcept (true); extern _Float64 __lgammaf64 (_Float64) noexcept (true);




extern _Float64 tgammaf64 (_Float64) noexcept (true); extern _Float64 __tgammaf64 (_Float64) noexcept (true);
# 252 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls.h" 3 4
extern _Float64 lgammaf64_r (_Float64, int *__signgamp) noexcept (true); extern _Float64 __lgammaf64_r (_Float64, int *__signgamp) noexcept (true);






extern _Float64 rintf64 (_Float64 __x) noexcept (true); extern _Float64 __rintf64 (_Float64 __x) noexcept (true);


extern _Float64 nextafterf64 (_Float64 __x, _Float64 __y) noexcept (true); extern _Float64 __nextafterf64 (_Float64 __x, _Float64 __y) noexcept (true);






extern _Float64 nextdownf64 (_Float64 __x) noexcept (true); extern _Float64 __nextdownf64 (_Float64 __x) noexcept (true);

extern _Float64 nextupf64 (_Float64 __x) noexcept (true); extern _Float64 __nextupf64 (_Float64 __x) noexcept (true);



extern _Float64 remainderf64 (_Float64 __x, _Float64 __y) noexcept (true); extern _Float64 __remainderf64 (_Float64 __x, _Float64 __y) noexcept (true);



extern _Float64 scalbnf64 (_Float64 __x, int __n) noexcept (true); extern _Float64 __scalbnf64 (_Float64 __x, int __n) noexcept (true);



extern int ilogbf64 (_Float64 __x) noexcept (true); extern int __ilogbf64 (_Float64 __x) noexcept (true);




extern long int llogbf64 (_Float64 __x) noexcept (true); extern long int __llogbf64 (_Float64 __x) noexcept (true);




extern _Float64 scalblnf64 (_Float64 __x, long int __n) noexcept (true); extern _Float64 __scalblnf64 (_Float64 __x, long int __n) noexcept (true);



extern _Float64 nearbyintf64 (_Float64 __x) noexcept (true); extern _Float64 __nearbyintf64 (_Float64 __x) noexcept (true);



extern _Float64 roundf64 (_Float64 __x) noexcept (true) __attribute__ ((__const__)); extern _Float64 __roundf64 (_Float64 __x) noexcept (true) __attribute__ ((__const__));



extern _Float64 truncf64 (_Float64 __x) noexcept (true) __attribute__ ((__const__)); extern _Float64 __truncf64 (_Float64 __x) noexcept (true) __attribute__ ((__const__));




extern _Float64 remquof64 (_Float64 __x, _Float64 __y, int *__quo) noexcept (true); extern _Float64 __remquof64 (_Float64 __x, _Float64 __y, int *__quo) noexcept (true);






extern long int lrintf64 (_Float64 __x) noexcept (true); extern long int __lrintf64 (_Float64 __x) noexcept (true);
__extension__
extern long long int llrintf64 (_Float64 __x) noexcept (true); extern long long int __llrintf64 (_Float64 __x) noexcept (true);



extern long int lroundf64 (_Float64 __x) noexcept (true); extern long int __lroundf64 (_Float64 __x) noexcept (true);
__extension__
extern long long int llroundf64 (_Float64 __x) noexcept (true); extern long long int __llroundf64 (_Float64 __x) noexcept (true);



extern _Float64 fdimf64 (_Float64 __x, _Float64 __y) noexcept (true); extern _Float64 __fdimf64 (_Float64 __x, _Float64 __y) noexcept (true);



extern _Float64 fmaxf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); extern _Float64 __fmaxf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__));


extern _Float64 fminf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); extern _Float64 __fminf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__));



extern _Float64 fmaf64 (_Float64 __x, _Float64 __y, _Float64 __z) noexcept (true); extern _Float64 __fmaf64 (_Float64 __x, _Float64 __y, _Float64 __z) noexcept (true);




extern _Float64 roundevenf64 (_Float64 __x) noexcept (true) __attribute__ ((__const__)); extern _Float64 __roundevenf64 (_Float64 __x) noexcept (true) __attribute__ ((__const__));



extern __intmax_t fromfpf64 (_Float64 __x, int __round, unsigned int __width) noexcept (true); extern __intmax_t __fromfpf64 (_Float64 __x, int __round, unsigned int __width) noexcept (true)
                            ;



extern __uintmax_t ufromfpf64 (_Float64 __x, int __round, unsigned int __width) noexcept (true); extern __uintmax_t __ufromfpf64 (_Float64 __x, int __round, unsigned int __width) noexcept (true)
                              ;




extern __intmax_t fromfpxf64 (_Float64 __x, int __round, unsigned int __width) noexcept (true); extern __intmax_t __fromfpxf64 (_Float64 __x, int __round, unsigned int __width) noexcept (true)
                             ;




extern __uintmax_t ufromfpxf64 (_Float64 __x, int __round, unsigned int __width) noexcept (true); extern __uintmax_t __ufromfpxf64 (_Float64 __x, int __round, unsigned int __width) noexcept (true)
                               ;


extern int canonicalizef64 (_Float64 *__cx, const _Float64 *__x) noexcept (true);






extern _Float64 fmaxmagf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); extern _Float64 __fmaxmagf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__));


extern _Float64 fminmagf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); extern _Float64 __fminmagf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__));




extern _Float64 fmaximumf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); extern _Float64 __fmaximumf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__));


extern _Float64 fminimumf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); extern _Float64 __fminimumf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__));


extern _Float64 fmaximum_numf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); extern _Float64 __fmaximum_numf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__));


extern _Float64 fminimum_numf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); extern _Float64 __fminimum_numf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__));


extern _Float64 fmaximum_magf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); extern _Float64 __fmaximum_magf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__));


extern _Float64 fminimum_magf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); extern _Float64 __fminimum_magf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__));


extern _Float64 fmaximum_mag_numf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); extern _Float64 __fmaximum_mag_numf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__));


extern _Float64 fminimum_mag_numf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__)); extern _Float64 __fminimum_mag_numf64 (_Float64 __x, _Float64 __y) noexcept (true) __attribute__ ((__const__));




extern int totalorderf64 (const _Float64 *__x, const _Float64 *__y) noexcept (true)

     __attribute__ ((__pure__));


extern int totalordermagf64 (const _Float64 *__x, const _Float64 *__y) noexcept (true)

     __attribute__ ((__pure__));


extern _Float64 getpayloadf64 (const _Float64 *__x) noexcept (true); extern _Float64 __getpayloadf64 (const _Float64 *__x) noexcept (true);


extern int setpayloadf64 (_Float64 *__x, _Float64 __payload) noexcept (true);


extern int setpayloadsigf64 (_Float64 *__x, _Float64 __payload) noexcept (true);
# 468 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 2 3 4

#undef _Mdouble_
#undef __MATH_PRECNAME
#undef __MATH_DECLARING_DOUBLE
#undef __MATH_DECLARING_FLOATN



#define _Mdouble_ _Float128
#define __MATH_PRECNAME(name,r) name ##f128 ##r
#define __MATH_DECLARING_DOUBLE 0
#define __MATH_DECLARING_FLOATN 1




# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls.h" 1 3 4
# 53 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls.h" 3 4
 extern _Float128 acosf128 (_Float128 __x) noexcept (true); extern _Float128 __acosf128 (_Float128 __x) noexcept (true);

 extern _Float128 asinf128 (_Float128 __x) noexcept (true); extern _Float128 __asinf128 (_Float128 __x) noexcept (true);

 extern _Float128 atanf128 (_Float128 __x) noexcept (true); extern _Float128 __atanf128 (_Float128 __x) noexcept (true);

 extern _Float128 atan2f128 (_Float128 __y, _Float128 __x) noexcept (true); extern _Float128 __atan2f128 (_Float128 __y, _Float128 __x) noexcept (true);


 extern _Float128 cosf128 (_Float128 __x) noexcept (true); extern _Float128 __cosf128 (_Float128 __x) noexcept (true);

 extern _Float128 sinf128 (_Float128 __x) noexcept (true); extern _Float128 __sinf128 (_Float128 __x) noexcept (true);

 extern _Float128 tanf128 (_Float128 __x) noexcept (true); extern _Float128 __tanf128 (_Float128 __x) noexcept (true);




 extern _Float128 coshf128 (_Float128 __x) noexcept (true); extern _Float128 __coshf128 (_Float128 __x) noexcept (true);

 extern _Float128 sinhf128 (_Float128 __x) noexcept (true); extern _Float128 __sinhf128 (_Float128 __x) noexcept (true);

 extern _Float128 tanhf128 (_Float128 __x) noexcept (true); extern _Float128 __tanhf128 (_Float128 __x) noexcept (true);



 extern void sincosf128 (_Float128 __x, _Float128 *__sinx, _Float128 *__cosx) noexcept (true); extern void __sincosf128 (_Float128 __x, _Float128 *__sinx, _Float128 *__cosx) noexcept (true)
                                                        ;




 extern _Float128 acoshf128 (_Float128 __x) noexcept (true); extern _Float128 __acoshf128 (_Float128 __x) noexcept (true);

 extern _Float128 asinhf128 (_Float128 __x) noexcept (true); extern _Float128 __asinhf128 (_Float128 __x) noexcept (true);

 extern _Float128 atanhf128 (_Float128 __x) noexcept (true); extern _Float128 __atanhf128 (_Float128 __x) noexcept (true);





 extern _Float128 expf128 (_Float128 __x) noexcept (true); extern _Float128 __expf128 (_Float128 __x) noexcept (true);


extern _Float128 frexpf128 (_Float128 __x, int *__exponent) noexcept (true); extern _Float128 __frexpf128 (_Float128 __x, int *__exponent) noexcept (true);


extern _Float128 ldexpf128 (_Float128 __x, int __exponent) noexcept (true); extern _Float128 __ldexpf128 (_Float128 __x, int __exponent) noexcept (true);


 extern _Float128 logf128 (_Float128 __x) noexcept (true); extern _Float128 __logf128 (_Float128 __x) noexcept (true);


 extern _Float128 log10f128 (_Float128 __x) noexcept (true); extern _Float128 __log10f128 (_Float128 __x) noexcept (true);


extern _Float128 modff128 (_Float128 __x, _Float128 *__iptr) noexcept (true); extern _Float128 __modff128 (_Float128 __x, _Float128 *__iptr) noexcept (true) __attribute__ ((__nonnull__ (2)));



 extern _Float128 exp10f128 (_Float128 __x) noexcept (true); extern _Float128 __exp10f128 (_Float128 __x) noexcept (true);




 extern _Float128 expm1f128 (_Float128 __x) noexcept (true); extern _Float128 __expm1f128 (_Float128 __x) noexcept (true);


 extern _Float128 log1pf128 (_Float128 __x) noexcept (true); extern _Float128 __log1pf128 (_Float128 __x) noexcept (true);


extern _Float128 logbf128 (_Float128 __x) noexcept (true); extern _Float128 __logbf128 (_Float128 __x) noexcept (true);




 extern _Float128 exp2f128 (_Float128 __x) noexcept (true); extern _Float128 __exp2f128 (_Float128 __x) noexcept (true);


 extern _Float128 log2f128 (_Float128 __x) noexcept (true); extern _Float128 __log2f128 (_Float128 __x) noexcept (true);






 extern _Float128 powf128 (_Float128 __x, _Float128 __y) noexcept (true); extern _Float128 __powf128 (_Float128 __x, _Float128 __y) noexcept (true);


extern _Float128 sqrtf128 (_Float128 __x) noexcept (true); extern _Float128 __sqrtf128 (_Float128 __x) noexcept (true);



 extern _Float128 hypotf128 (_Float128 __x, _Float128 __y) noexcept (true); extern _Float128 __hypotf128 (_Float128 __x, _Float128 __y) noexcept (true);




 extern _Float128 cbrtf128 (_Float128 __x) noexcept (true); extern _Float128 __cbrtf128 (_Float128 __x) noexcept (true);






extern _Float128 ceilf128 (_Float128 __x) noexcept (true) __attribute__ ((__const__)); extern _Float128 __ceilf128 (_Float128 __x) noexcept (true) __attribute__ ((__const__));


extern _Float128 fabsf128 (_Float128 __x) noexcept (true) __attribute__ ((__const__)); extern _Float128 __fabsf128 (_Float128 __x) noexcept (true) __attribute__ ((__const__));


extern _Float128 floorf128 (_Float128 __x) noexcept (true) __attribute__ ((__const__)); extern _Float128 __floorf128 (_Float128 __x) noexcept (true) __attribute__ ((__const__));


extern _Float128 fmodf128 (_Float128 __x, _Float128 __y) noexcept (true); extern _Float128 __fmodf128 (_Float128 __x, _Float128 __y) noexcept (true);
# 198 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls.h" 3 4
extern _Float128 copysignf128 (_Float128 __x, _Float128 __y) noexcept (true) __attribute__ ((__const__)); extern _Float128 __copysignf128 (_Float128 __x, _Float128 __y) noexcept (true) __attribute__ ((__const__));




extern _Float128 nanf128 (const char *__tagb) noexcept (true); extern _Float128 __nanf128 (const char *__tagb) noexcept (true);
# 220 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls.h" 3 4
extern _Float128 j0f128 (_Float128) noexcept (true); extern _Float128 __j0f128 (_Float128) noexcept (true);
extern _Float128 j1f128 (_Float128) noexcept (true); extern _Float128 __j1f128 (_Float128) noexcept (true);
extern _Float128 jnf128 (int, _Float128) noexcept (true); extern _Float128 __jnf128 (int, _Float128) noexcept (true);
extern _Float128 y0f128 (_Float128) noexcept (true); extern _Float128 __y0f128 (_Float128) noexcept (true);
extern _Float128 y1f128 (_Float128) noexcept (true); extern _Float128 __y1f128 (_Float128) noexcept (true);
extern _Float128 ynf128 (int, _Float128) noexcept (true); extern _Float128 __ynf128 (int, _Float128) noexcept (true);





 extern _Float128 erff128 (_Float128) noexcept (true); extern _Float128 __erff128 (_Float128) noexcept (true);
 extern _Float128 erfcf128 (_Float128) noexcept (true); extern _Float128 __erfcf128 (_Float128) noexcept (true);
extern _Float128 lgammaf128 (_Float128) noexcept (true); extern _Float128 __lgammaf128 (_Float128) noexcept (true);




extern _Float128 tgammaf128 (_Float128) noexcept (true); extern _Float128 __tgammaf128 (_Float128) noexcept (true);
# 252 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls.h" 3 4
extern _Float128 lgammaf128_r (_Float128, int *__signgamp) noexcept (true); extern _Float128 __lgammaf128_r (_Float128, int *__signgamp) noexcept (true);






extern _Float128 rintf128 (_Float128 __x) noexcept (true); extern _Float128 __rintf128 (_Float128 __x) noexcept (true);


extern _Float128 nextafterf128 (_Float128 __x, _Float128 __y) noexcept (true); extern _Float128 __nextafterf128 (_Float128 __x, _Float128 __y) noexcept (true);






extern _Float128 nextdownf128 (_Float128 __x) noexcept (true); extern _Float128 __nextdownf128 (_Float128 __x) noexcept (true);

extern _Float128 nextupf128 (_Float128 __x) noexcept (true); extern _Float128 __nextupf128 (_Float128 __x) noexcept (true);



extern _Float128 remainderf128 (_Float128 __x, _Float128 __y) noexcept (true); extern _Float128 __remainderf128 (_Float128 __x, _Float128 __y) noexcept (true);



extern _Float128 scalbnf128 (_Float128 __x, int __n) noexcept (true); extern _Float128 __scalbnf128 (_Float128 __x, int __n) noexcept (true);



extern int ilogbf128 (_Float128 __x) noexcept (true); extern int __ilogbf128 (_Float128 __x) noexcept (true);




extern long int llogbf128 (_Float128 __x) noexcept (true); extern long int __llogbf128 (_Float128 __x) noexcept (true);




extern _Float128 scalblnf128 (_Float128 __x, long int __n) noexcept (true); extern _Float128 __scalblnf128 (_Float128 __x, long int __n) noexcept (true);



extern _Float128 nearbyintf128 (_Float128 __x) noexcept (true); extern _Float128 __nearbyintf128 (_Float128 __x) noexcept (true);



extern _Float128 roundf128 (_Float128 __x) noexcept (true) __attribute__ ((__const__)); extern _Float128 __roundf128 (_Float128 __x) noexcept (true) __attribute__ ((__const__));



extern _Float128 truncf128 (_Float128 __x) noexcept (true) __attribute__ ((__const__)); extern _Float128 __truncf128 (_Float128 __x) noexcept (true) __attribute__ ((__const__));




extern _Float128 remquof128 (_Float128 __x, _Float128 __y, int *__quo) noexcept (true); extern _Float128 __remquof128 (_Float128 __x, _Float128 __y, int *__quo) noexcept (true);






extern long int lrintf128 (_Float128 __x) noexcept (true); extern long int __lrintf128 (_Float128 __x) noexcept (true);
__extension__
extern long long int llrintf128 (_Float128 __x) noexcept (true); extern long long int __llrintf128 (_Float128 __x) noexcept (true);



extern long int lroundf128 (_Float128 __x) noexcept (true); extern long int __lroundf128 (_Float128 __x) noexcept (true);
__extension__
extern long long int llroundf128 (_Float128 __x) noexcept (true); extern long long int __llroundf128 (_Float128 __x) noexcept (true);



extern _Float128 fdimf128 (_Float128 __x, _Float128 __y) noexcept (true); extern _Float128 __fdimf128 (_Float128 __x, _Float128 __y) noexcept (true);



extern _Float128 fmaxf128 (_Float128 __x, _Float128 __y) noexcept (true) __attribute__ ((__const__)); extern _Float128 __fmaxf128 (_Float128 __x, _Float128 __y) noexcept (true) __attribute__ ((__const__));


extern _Float128 fminf128 (_Float128 __x, _Float128 __y) noexcept (true) __attribute__ ((__const__)); extern _Float128 __fminf128 (_Float128 __x, _Float128 __y) noexcept (true) __attribute__ ((__const__));



extern _Float128 fmaf128 (_Float128 __x, _Float128 __y, _Float128 __z) noexcept (true); extern _Float128 __fmaf128 (_Float128 __x, _Float128 __y, _Float128 __z) noexcept (true);




extern _Float128 roundevenf128 (_Float128 __x) noexcept (true) __attribute__ ((__const__)); extern _Float128 __roundevenf128 (_Float128 __x) noexcept (true) __attribute__ ((__const__));



extern __intmax_t fromfpf128 (_Float128 __x, int __round, unsigned int __width) noexcept (true); extern __intmax_t __fromfpf128 (_Float128 __x, int __round, unsigned int __width) noexcept (true)
                            ;



extern __uintmax_t ufromfpf128 (_Float128 __x, int __round, unsigned int __width) noexcept (true); extern __uintmax_t __ufromfpf128 (_Float128 __x, int __round, unsigned int __width) noexcept (true)
                              ;




extern __intmax_t fromfpxf128 (_Float128 __x, int __round, unsigned int __width) noexcept (true); extern __intmax_t __fromfpxf128 (_Float128 __x, int __round, unsigned int __width) noexcept (true)
                             ;




extern __uintmax_t ufromfpxf128 (_Float128 __x, int __round, unsigned int __width) noexcept (true); extern __uintmax_t __ufromfpxf128 (_Float128 __x, int __round, unsigned int __width) noexcept (true)
                               ;


extern int canonicalizef128 (_Float128 *__cx, const _Float128 *__x) noexcept (true);






extern _Float128 fmaxmagf128 (_Float128 __x, _Float128 __y) noexcept (true) __attribute__ ((__const__)); extern _Float128 __fmaxmagf128 (_Float128 __x, _Float128 __y) noexcept (true) __attribute__ ((__const__));


extern _Float128 fminmagf128 (_Float128 __x, _Float128 __y) noexcept (true) __attribute__ ((__const__)); extern _Float128 __fminmagf128 (_Float128 __x, _Float128 __y) noexcept (true) __attribute__ ((__const__));




extern _Float128 fmaximumf128 (_Float128 __x, _Float128 __y) noexcept (true) __attribute__ ((__const__)); extern _Float128 __fmaximumf128 (_Float128 __x, _Float128 __y) noexcept (true) __attribute__ ((__const__));


extern _Float128 fminimumf128 (_Float128 __x, _Float128 __y) noexcept (true) __attribute__ ((__const__)); extern _Float128 __fminimumf128 (_Float128 __x, _Float128 __y) noexcept (true) __attribute__ ((__const__));


extern _Float128 fmaximum_numf128 (_Float128 __x, _Float128 __y) noexcept (true) __attribute__ ((__const__)); extern _Float128 __fmaximum_numf128 (_Float128 __x, _Float128 __y) noexcept (true) __attribute__ ((__const__));


extern _Float128 fminimum_numf128 (_Float128 __x, _Float128 __y) noexcept (true) __attribute__ ((__const__)); extern _Float128 __fminimum_numf128 (_Float128 __x, _Float128 __y) noexcept (true) __attribute__ ((__const__));


extern _Float128 fmaximum_magf128 (_Float128 __x, _Float128 __y) noexcept (true) __attribute__ ((__const__)); extern _Float128 __fmaximum_magf128 (_Float128 __x, _Float128 __y) noexcept (true) __attribute__ ((__const__));


extern _Float128 fminimum_magf128 (_Float128 __x, _Float128 __y) noexcept (true) __attribute__ ((__const__)); extern _Float128 __fminimum_magf128 (_Float128 __x, _Float128 __y) noexcept (true) __attribute__ ((__const__));


extern _Float128 fmaximum_mag_numf128 (_Float128 __x, _Float128 __y) noexcept (true) __attribute__ ((__const__)); extern _Float128 __fmaximum_mag_numf128 (_Float128 __x, _Float128 __y) noexcept (true) __attribute__ ((__const__));


extern _Float128 fminimum_mag_numf128 (_Float128 __x, _Float128 __y) noexcept (true) __attribute__ ((__const__)); extern _Float128 __fminimum_mag_numf128 (_Float128 __x, _Float128 __y) noexcept (true) __attribute__ ((__const__));




extern int totalorderf128 (const _Float128 *__x, const _Float128 *__y) noexcept (true)

     __attribute__ ((__pure__));


extern int totalordermagf128 (const _Float128 *__x, const _Float128 *__y) noexcept (true)

     __attribute__ ((__pure__));


extern _Float128 getpayloadf128 (const _Float128 *__x) noexcept (true); extern _Float128 __getpayloadf128 (const _Float128 *__x) noexcept (true);


extern int setpayloadf128 (_Float128 *__x, _Float128 __payload) noexcept (true);


extern int setpayloadsigf128 (_Float128 *__x, _Float128 __payload) noexcept (true);
# 485 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 2 3 4

#undef _Mdouble_
#undef __MATH_PRECNAME
#undef __MATH_DECLARING_DOUBLE
#undef __MATH_DECLARING_FLOATN



#define _Mdouble_ _Float32x
#define __MATH_PRECNAME(name,r) name ##f32x ##r
#define __MATH_DECLARING_DOUBLE 0
#define __MATH_DECLARING_FLOATN 1




# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls.h" 1 3 4
# 53 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls.h" 3 4
 extern _Float32x acosf32x (_Float32x __x) noexcept (true); extern _Float32x __acosf32x (_Float32x __x) noexcept (true);

 extern _Float32x asinf32x (_Float32x __x) noexcept (true); extern _Float32x __asinf32x (_Float32x __x) noexcept (true);

 extern _Float32x atanf32x (_Float32x __x) noexcept (true); extern _Float32x __atanf32x (_Float32x __x) noexcept (true);

 extern _Float32x atan2f32x (_Float32x __y, _Float32x __x) noexcept (true); extern _Float32x __atan2f32x (_Float32x __y, _Float32x __x) noexcept (true);


 extern _Float32x cosf32x (_Float32x __x) noexcept (true); extern _Float32x __cosf32x (_Float32x __x) noexcept (true);

 extern _Float32x sinf32x (_Float32x __x) noexcept (true); extern _Float32x __sinf32x (_Float32x __x) noexcept (true);

 extern _Float32x tanf32x (_Float32x __x) noexcept (true); extern _Float32x __tanf32x (_Float32x __x) noexcept (true);




 extern _Float32x coshf32x (_Float32x __x) noexcept (true); extern _Float32x __coshf32x (_Float32x __x) noexcept (true);

 extern _Float32x sinhf32x (_Float32x __x) noexcept (true); extern _Float32x __sinhf32x (_Float32x __x) noexcept (true);

 extern _Float32x tanhf32x (_Float32x __x) noexcept (true); extern _Float32x __tanhf32x (_Float32x __x) noexcept (true);



 extern void sincosf32x (_Float32x __x, _Float32x *__sinx, _Float32x *__cosx) noexcept (true); extern void __sincosf32x (_Float32x __x, _Float32x *__sinx, _Float32x *__cosx) noexcept (true)
                                                        ;




 extern _Float32x acoshf32x (_Float32x __x) noexcept (true); extern _Float32x __acoshf32x (_Float32x __x) noexcept (true);

 extern _Float32x asinhf32x (_Float32x __x) noexcept (true); extern _Float32x __asinhf32x (_Float32x __x) noexcept (true);

 extern _Float32x atanhf32x (_Float32x __x) noexcept (true); extern _Float32x __atanhf32x (_Float32x __x) noexcept (true);





 extern _Float32x expf32x (_Float32x __x) noexcept (true); extern _Float32x __expf32x (_Float32x __x) noexcept (true);


extern _Float32x frexpf32x (_Float32x __x, int *__exponent) noexcept (true); extern _Float32x __frexpf32x (_Float32x __x, int *__exponent) noexcept (true);


extern _Float32x ldexpf32x (_Float32x __x, int __exponent) noexcept (true); extern _Float32x __ldexpf32x (_Float32x __x, int __exponent) noexcept (true);


 extern _Float32x logf32x (_Float32x __x) noexcept (true); extern _Float32x __logf32x (_Float32x __x) noexcept (true);


 extern _Float32x log10f32x (_Float32x __x) noexcept (true); extern _Float32x __log10f32x (_Float32x __x) noexcept (true);


extern _Float32x modff32x (_Float32x __x, _Float32x *__iptr) noexcept (true); extern _Float32x __modff32x (_Float32x __x, _Float32x *__iptr) noexcept (true) __attribute__ ((__nonnull__ (2)));



 extern _Float32x exp10f32x (_Float32x __x) noexcept (true); extern _Float32x __exp10f32x (_Float32x __x) noexcept (true);




 extern _Float32x expm1f32x (_Float32x __x) noexcept (true); extern _Float32x __expm1f32x (_Float32x __x) noexcept (true);


 extern _Float32x log1pf32x (_Float32x __x) noexcept (true); extern _Float32x __log1pf32x (_Float32x __x) noexcept (true);


extern _Float32x logbf32x (_Float32x __x) noexcept (true); extern _Float32x __logbf32x (_Float32x __x) noexcept (true);




 extern _Float32x exp2f32x (_Float32x __x) noexcept (true); extern _Float32x __exp2f32x (_Float32x __x) noexcept (true);


 extern _Float32x log2f32x (_Float32x __x) noexcept (true); extern _Float32x __log2f32x (_Float32x __x) noexcept (true);






 extern _Float32x powf32x (_Float32x __x, _Float32x __y) noexcept (true); extern _Float32x __powf32x (_Float32x __x, _Float32x __y) noexcept (true);


extern _Float32x sqrtf32x (_Float32x __x) noexcept (true); extern _Float32x __sqrtf32x (_Float32x __x) noexcept (true);



 extern _Float32x hypotf32x (_Float32x __x, _Float32x __y) noexcept (true); extern _Float32x __hypotf32x (_Float32x __x, _Float32x __y) noexcept (true);




 extern _Float32x cbrtf32x (_Float32x __x) noexcept (true); extern _Float32x __cbrtf32x (_Float32x __x) noexcept (true);






extern _Float32x ceilf32x (_Float32x __x) noexcept (true) __attribute__ ((__const__)); extern _Float32x __ceilf32x (_Float32x __x) noexcept (true) __attribute__ ((__const__));


extern _Float32x fabsf32x (_Float32x __x) noexcept (true) __attribute__ ((__const__)); extern _Float32x __fabsf32x (_Float32x __x) noexcept (true) __attribute__ ((__const__));


extern _Float32x floorf32x (_Float32x __x) noexcept (true) __attribute__ ((__const__)); extern _Float32x __floorf32x (_Float32x __x) noexcept (true) __attribute__ ((__const__));


extern _Float32x fmodf32x (_Float32x __x, _Float32x __y) noexcept (true); extern _Float32x __fmodf32x (_Float32x __x, _Float32x __y) noexcept (true);
# 198 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls.h" 3 4
extern _Float32x copysignf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); extern _Float32x __copysignf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__));




extern _Float32x nanf32x (const char *__tagb) noexcept (true); extern _Float32x __nanf32x (const char *__tagb) noexcept (true);
# 220 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls.h" 3 4
extern _Float32x j0f32x (_Float32x) noexcept (true); extern _Float32x __j0f32x (_Float32x) noexcept (true);
extern _Float32x j1f32x (_Float32x) noexcept (true); extern _Float32x __j1f32x (_Float32x) noexcept (true);
extern _Float32x jnf32x (int, _Float32x) noexcept (true); extern _Float32x __jnf32x (int, _Float32x) noexcept (true);
extern _Float32x y0f32x (_Float32x) noexcept (true); extern _Float32x __y0f32x (_Float32x) noexcept (true);
extern _Float32x y1f32x (_Float32x) noexcept (true); extern _Float32x __y1f32x (_Float32x) noexcept (true);
extern _Float32x ynf32x (int, _Float32x) noexcept (true); extern _Float32x __ynf32x (int, _Float32x) noexcept (true);





 extern _Float32x erff32x (_Float32x) noexcept (true); extern _Float32x __erff32x (_Float32x) noexcept (true);
 extern _Float32x erfcf32x (_Float32x) noexcept (true); extern _Float32x __erfcf32x (_Float32x) noexcept (true);
extern _Float32x lgammaf32x (_Float32x) noexcept (true); extern _Float32x __lgammaf32x (_Float32x) noexcept (true);




extern _Float32x tgammaf32x (_Float32x) noexcept (true); extern _Float32x __tgammaf32x (_Float32x) noexcept (true);
# 252 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls.h" 3 4
extern _Float32x lgammaf32x_r (_Float32x, int *__signgamp) noexcept (true); extern _Float32x __lgammaf32x_r (_Float32x, int *__signgamp) noexcept (true);






extern _Float32x rintf32x (_Float32x __x) noexcept (true); extern _Float32x __rintf32x (_Float32x __x) noexcept (true);


extern _Float32x nextafterf32x (_Float32x __x, _Float32x __y) noexcept (true); extern _Float32x __nextafterf32x (_Float32x __x, _Float32x __y) noexcept (true);






extern _Float32x nextdownf32x (_Float32x __x) noexcept (true); extern _Float32x __nextdownf32x (_Float32x __x) noexcept (true);

extern _Float32x nextupf32x (_Float32x __x) noexcept (true); extern _Float32x __nextupf32x (_Float32x __x) noexcept (true);



extern _Float32x remainderf32x (_Float32x __x, _Float32x __y) noexcept (true); extern _Float32x __remainderf32x (_Float32x __x, _Float32x __y) noexcept (true);



extern _Float32x scalbnf32x (_Float32x __x, int __n) noexcept (true); extern _Float32x __scalbnf32x (_Float32x __x, int __n) noexcept (true);



extern int ilogbf32x (_Float32x __x) noexcept (true); extern int __ilogbf32x (_Float32x __x) noexcept (true);




extern long int llogbf32x (_Float32x __x) noexcept (true); extern long int __llogbf32x (_Float32x __x) noexcept (true);




extern _Float32x scalblnf32x (_Float32x __x, long int __n) noexcept (true); extern _Float32x __scalblnf32x (_Float32x __x, long int __n) noexcept (true);



extern _Float32x nearbyintf32x (_Float32x __x) noexcept (true); extern _Float32x __nearbyintf32x (_Float32x __x) noexcept (true);



extern _Float32x roundf32x (_Float32x __x) noexcept (true) __attribute__ ((__const__)); extern _Float32x __roundf32x (_Float32x __x) noexcept (true) __attribute__ ((__const__));



extern _Float32x truncf32x (_Float32x __x) noexcept (true) __attribute__ ((__const__)); extern _Float32x __truncf32x (_Float32x __x) noexcept (true) __attribute__ ((__const__));




extern _Float32x remquof32x (_Float32x __x, _Float32x __y, int *__quo) noexcept (true); extern _Float32x __remquof32x (_Float32x __x, _Float32x __y, int *__quo) noexcept (true);






extern long int lrintf32x (_Float32x __x) noexcept (true); extern long int __lrintf32x (_Float32x __x) noexcept (true);
__extension__
extern long long int llrintf32x (_Float32x __x) noexcept (true); extern long long int __llrintf32x (_Float32x __x) noexcept (true);



extern long int lroundf32x (_Float32x __x) noexcept (true); extern long int __lroundf32x (_Float32x __x) noexcept (true);
__extension__
extern long long int llroundf32x (_Float32x __x) noexcept (true); extern long long int __llroundf32x (_Float32x __x) noexcept (true);



extern _Float32x fdimf32x (_Float32x __x, _Float32x __y) noexcept (true); extern _Float32x __fdimf32x (_Float32x __x, _Float32x __y) noexcept (true);



extern _Float32x fmaxf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); extern _Float32x __fmaxf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__));


extern _Float32x fminf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); extern _Float32x __fminf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__));



extern _Float32x fmaf32x (_Float32x __x, _Float32x __y, _Float32x __z) noexcept (true); extern _Float32x __fmaf32x (_Float32x __x, _Float32x __y, _Float32x __z) noexcept (true);




extern _Float32x roundevenf32x (_Float32x __x) noexcept (true) __attribute__ ((__const__)); extern _Float32x __roundevenf32x (_Float32x __x) noexcept (true) __attribute__ ((__const__));



extern __intmax_t fromfpf32x (_Float32x __x, int __round, unsigned int __width) noexcept (true); extern __intmax_t __fromfpf32x (_Float32x __x, int __round, unsigned int __width) noexcept (true)
                            ;



extern __uintmax_t ufromfpf32x (_Float32x __x, int __round, unsigned int __width) noexcept (true); extern __uintmax_t __ufromfpf32x (_Float32x __x, int __round, unsigned int __width) noexcept (true)
                              ;




extern __intmax_t fromfpxf32x (_Float32x __x, int __round, unsigned int __width) noexcept (true); extern __intmax_t __fromfpxf32x (_Float32x __x, int __round, unsigned int __width) noexcept (true)
                             ;




extern __uintmax_t ufromfpxf32x (_Float32x __x, int __round, unsigned int __width) noexcept (true); extern __uintmax_t __ufromfpxf32x (_Float32x __x, int __round, unsigned int __width) noexcept (true)
                               ;


extern int canonicalizef32x (_Float32x *__cx, const _Float32x *__x) noexcept (true);






extern _Float32x fmaxmagf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); extern _Float32x __fmaxmagf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__));


extern _Float32x fminmagf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); extern _Float32x __fminmagf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__));




extern _Float32x fmaximumf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); extern _Float32x __fmaximumf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__));


extern _Float32x fminimumf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); extern _Float32x __fminimumf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__));


extern _Float32x fmaximum_numf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); extern _Float32x __fmaximum_numf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__));


extern _Float32x fminimum_numf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); extern _Float32x __fminimum_numf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__));


extern _Float32x fmaximum_magf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); extern _Float32x __fmaximum_magf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__));


extern _Float32x fminimum_magf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); extern _Float32x __fminimum_magf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__));


extern _Float32x fmaximum_mag_numf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); extern _Float32x __fmaximum_mag_numf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__));


extern _Float32x fminimum_mag_numf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__)); extern _Float32x __fminimum_mag_numf32x (_Float32x __x, _Float32x __y) noexcept (true) __attribute__ ((__const__));




extern int totalorderf32x (const _Float32x *__x, const _Float32x *__y) noexcept (true)

     __attribute__ ((__pure__));


extern int totalordermagf32x (const _Float32x *__x, const _Float32x *__y) noexcept (true)

     __attribute__ ((__pure__));


extern _Float32x getpayloadf32x (const _Float32x *__x) noexcept (true); extern _Float32x __getpayloadf32x (const _Float32x *__x) noexcept (true);


extern int setpayloadf32x (_Float32x *__x, _Float32x __payload) noexcept (true);


extern int setpayloadsigf32x (_Float32x *__x, _Float32x __payload) noexcept (true);
# 502 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 2 3 4

#undef _Mdouble_
#undef __MATH_PRECNAME
#undef __MATH_DECLARING_DOUBLE
#undef __MATH_DECLARING_FLOATN



#define _Mdouble_ _Float64x
#define __MATH_PRECNAME(name,r) name ##f64x ##r
#define __MATH_DECLARING_DOUBLE 0
#define __MATH_DECLARING_FLOATN 1




# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls.h" 1 3 4
# 53 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls.h" 3 4
 extern _Float64x acosf64x (_Float64x __x) noexcept (true); extern _Float64x __acosf64x (_Float64x __x) noexcept (true);

 extern _Float64x asinf64x (_Float64x __x) noexcept (true); extern _Float64x __asinf64x (_Float64x __x) noexcept (true);

 extern _Float64x atanf64x (_Float64x __x) noexcept (true); extern _Float64x __atanf64x (_Float64x __x) noexcept (true);

 extern _Float64x atan2f64x (_Float64x __y, _Float64x __x) noexcept (true); extern _Float64x __atan2f64x (_Float64x __y, _Float64x __x) noexcept (true);


 extern _Float64x cosf64x (_Float64x __x) noexcept (true); extern _Float64x __cosf64x (_Float64x __x) noexcept (true);

 extern _Float64x sinf64x (_Float64x __x) noexcept (true); extern _Float64x __sinf64x (_Float64x __x) noexcept (true);

 extern _Float64x tanf64x (_Float64x __x) noexcept (true); extern _Float64x __tanf64x (_Float64x __x) noexcept (true);




 extern _Float64x coshf64x (_Float64x __x) noexcept (true); extern _Float64x __coshf64x (_Float64x __x) noexcept (true);

 extern _Float64x sinhf64x (_Float64x __x) noexcept (true); extern _Float64x __sinhf64x (_Float64x __x) noexcept (true);

 extern _Float64x tanhf64x (_Float64x __x) noexcept (true); extern _Float64x __tanhf64x (_Float64x __x) noexcept (true);



 extern void sincosf64x (_Float64x __x, _Float64x *__sinx, _Float64x *__cosx) noexcept (true); extern void __sincosf64x (_Float64x __x, _Float64x *__sinx, _Float64x *__cosx) noexcept (true)
                                                        ;




 extern _Float64x acoshf64x (_Float64x __x) noexcept (true); extern _Float64x __acoshf64x (_Float64x __x) noexcept (true);

 extern _Float64x asinhf64x (_Float64x __x) noexcept (true); extern _Float64x __asinhf64x (_Float64x __x) noexcept (true);

 extern _Float64x atanhf64x (_Float64x __x) noexcept (true); extern _Float64x __atanhf64x (_Float64x __x) noexcept (true);





 extern _Float64x expf64x (_Float64x __x) noexcept (true); extern _Float64x __expf64x (_Float64x __x) noexcept (true);


extern _Float64x frexpf64x (_Float64x __x, int *__exponent) noexcept (true); extern _Float64x __frexpf64x (_Float64x __x, int *__exponent) noexcept (true);


extern _Float64x ldexpf64x (_Float64x __x, int __exponent) noexcept (true); extern _Float64x __ldexpf64x (_Float64x __x, int __exponent) noexcept (true);


 extern _Float64x logf64x (_Float64x __x) noexcept (true); extern _Float64x __logf64x (_Float64x __x) noexcept (true);


 extern _Float64x log10f64x (_Float64x __x) noexcept (true); extern _Float64x __log10f64x (_Float64x __x) noexcept (true);


extern _Float64x modff64x (_Float64x __x, _Float64x *__iptr) noexcept (true); extern _Float64x __modff64x (_Float64x __x, _Float64x *__iptr) noexcept (true) __attribute__ ((__nonnull__ (2)));



 extern _Float64x exp10f64x (_Float64x __x) noexcept (true); extern _Float64x __exp10f64x (_Float64x __x) noexcept (true);




 extern _Float64x expm1f64x (_Float64x __x) noexcept (true); extern _Float64x __expm1f64x (_Float64x __x) noexcept (true);


 extern _Float64x log1pf64x (_Float64x __x) noexcept (true); extern _Float64x __log1pf64x (_Float64x __x) noexcept (true);


extern _Float64x logbf64x (_Float64x __x) noexcept (true); extern _Float64x __logbf64x (_Float64x __x) noexcept (true);




 extern _Float64x exp2f64x (_Float64x __x) noexcept (true); extern _Float64x __exp2f64x (_Float64x __x) noexcept (true);


 extern _Float64x log2f64x (_Float64x __x) noexcept (true); extern _Float64x __log2f64x (_Float64x __x) noexcept (true);






 extern _Float64x powf64x (_Float64x __x, _Float64x __y) noexcept (true); extern _Float64x __powf64x (_Float64x __x, _Float64x __y) noexcept (true);


extern _Float64x sqrtf64x (_Float64x __x) noexcept (true); extern _Float64x __sqrtf64x (_Float64x __x) noexcept (true);



 extern _Float64x hypotf64x (_Float64x __x, _Float64x __y) noexcept (true); extern _Float64x __hypotf64x (_Float64x __x, _Float64x __y) noexcept (true);




 extern _Float64x cbrtf64x (_Float64x __x) noexcept (true); extern _Float64x __cbrtf64x (_Float64x __x) noexcept (true);






extern _Float64x ceilf64x (_Float64x __x) noexcept (true) __attribute__ ((__const__)); extern _Float64x __ceilf64x (_Float64x __x) noexcept (true) __attribute__ ((__const__));


extern _Float64x fabsf64x (_Float64x __x) noexcept (true) __attribute__ ((__const__)); extern _Float64x __fabsf64x (_Float64x __x) noexcept (true) __attribute__ ((__const__));


extern _Float64x floorf64x (_Float64x __x) noexcept (true) __attribute__ ((__const__)); extern _Float64x __floorf64x (_Float64x __x) noexcept (true) __attribute__ ((__const__));


extern _Float64x fmodf64x (_Float64x __x, _Float64x __y) noexcept (true); extern _Float64x __fmodf64x (_Float64x __x, _Float64x __y) noexcept (true);
# 198 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls.h" 3 4
extern _Float64x copysignf64x (_Float64x __x, _Float64x __y) noexcept (true) __attribute__ ((__const__)); extern _Float64x __copysignf64x (_Float64x __x, _Float64x __y) noexcept (true) __attribute__ ((__const__));




extern _Float64x nanf64x (const char *__tagb) noexcept (true); extern _Float64x __nanf64x (const char *__tagb) noexcept (true);
# 220 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls.h" 3 4
extern _Float64x j0f64x (_Float64x) noexcept (true); extern _Float64x __j0f64x (_Float64x) noexcept (true);
extern _Float64x j1f64x (_Float64x) noexcept (true); extern _Float64x __j1f64x (_Float64x) noexcept (true);
extern _Float64x jnf64x (int, _Float64x) noexcept (true); extern _Float64x __jnf64x (int, _Float64x) noexcept (true);
extern _Float64x y0f64x (_Float64x) noexcept (true); extern _Float64x __y0f64x (_Float64x) noexcept (true);
extern _Float64x y1f64x (_Float64x) noexcept (true); extern _Float64x __y1f64x (_Float64x) noexcept (true);
extern _Float64x ynf64x (int, _Float64x) noexcept (true); extern _Float64x __ynf64x (int, _Float64x) noexcept (true);





 extern _Float64x erff64x (_Float64x) noexcept (true); extern _Float64x __erff64x (_Float64x) noexcept (true);
 extern _Float64x erfcf64x (_Float64x) noexcept (true); extern _Float64x __erfcf64x (_Float64x) noexcept (true);
extern _Float64x lgammaf64x (_Float64x) noexcept (true); extern _Float64x __lgammaf64x (_Float64x) noexcept (true);




extern _Float64x tgammaf64x (_Float64x) noexcept (true); extern _Float64x __tgammaf64x (_Float64x) noexcept (true);
# 252 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls.h" 3 4
extern _Float64x lgammaf64x_r (_Float64x, int *__signgamp) noexcept (true); extern _Float64x __lgammaf64x_r (_Float64x, int *__signgamp) noexcept (true);






extern _Float64x rintf64x (_Float64x __x) noexcept (true); extern _Float64x __rintf64x (_Float64x __x) noexcept (true);


extern _Float64x nextafterf64x (_Float64x __x, _Float64x __y) noexcept (true); extern _Float64x __nextafterf64x (_Float64x __x, _Float64x __y) noexcept (true);






extern _Float64x nextdownf64x (_Float64x __x) noexcept (true); extern _Float64x __nextdownf64x (_Float64x __x) noexcept (true);

extern _Float64x nextupf64x (_Float64x __x) noexcept (true); extern _Float64x __nextupf64x (_Float64x __x) noexcept (true);



extern _Float64x remainderf64x (_Float64x __x, _Float64x __y) noexcept (true); extern _Float64x __remainderf64x (_Float64x __x, _Float64x __y) noexcept (true);



extern _Float64x scalbnf64x (_Float64x __x, int __n) noexcept (true); extern _Float64x __scalbnf64x (_Float64x __x, int __n) noexcept (true);



extern int ilogbf64x (_Float64x __x) noexcept (true); extern int __ilogbf64x (_Float64x __x) noexcept (true);




extern long int llogbf64x (_Float64x __x) noexcept (true); extern long int __llogbf64x (_Float64x __x) noexcept (true);




extern _Float64x scalblnf64x (_Float64x __x, long int __n) noexcept (true); extern _Float64x __scalblnf64x (_Float64x __x, long int __n) noexcept (true);



extern _Float64x nearbyintf64x (_Float64x __x) noexcept (true); extern _Float64x __nearbyintf64x (_Float64x __x) noexcept (true);



extern _Float64x roundf64x (_Float64x __x) noexcept (true) __attribute__ ((__const__)); extern _Float64x __roundf64x (_Float64x __x) noexcept (true) __attribute__ ((__const__));



extern _Float64x truncf64x (_Float64x __x) noexcept (true) __attribute__ ((__const__)); extern _Float64x __truncf64x (_Float64x __x) noexcept (true) __attribute__ ((__const__));




extern _Float64x remquof64x (_Float64x __x, _Float64x __y, int *__quo) noexcept (true); extern _Float64x __remquof64x (_Float64x __x, _Float64x __y, int *__quo) noexcept (true);






extern long int lrintf64x (_Float64x __x) noexcept (true); extern long int __lrintf64x (_Float64x __x) noexcept (true);
__extension__
extern long long int llrintf64x (_Float64x __x) noexcept (true); extern long long int __llrintf64x (_Float64x __x) noexcept (true);



extern long int lroundf64x (_Float64x __x) noexcept (true); extern long int __lroundf64x (_Float64x __x) noexcept (true);
__extension__
extern long long int llroundf64x (_Float64x __x) noexcept (true); extern long long int __llroundf64x (_Float64x __x) noexcept (true);



extern _Float64x fdimf64x (_Float64x __x, _Float64x __y) noexcept (true); extern _Float64x __fdimf64x (_Float64x __x, _Float64x __y) noexcept (true);



extern _Float64x fmaxf64x (_Float64x __x, _Float64x __y) noexcept (true) __attribute__ ((__const__)); extern _Float64x __fmaxf64x (_Float64x __x, _Float64x __y) noexcept (true) __attribute__ ((__const__));


extern _Float64x fminf64x (_Float64x __x, _Float64x __y) noexcept (true) __attribute__ ((__const__)); extern _Float64x __fminf64x (_Float64x __x, _Float64x __y) noexcept (true) __attribute__ ((__const__));



extern _Float64x fmaf64x (_Float64x __x, _Float64x __y, _Float64x __z) noexcept (true); extern _Float64x __fmaf64x (_Float64x __x, _Float64x __y, _Float64x __z) noexcept (true);




extern _Float64x roundevenf64x (_Float64x __x) noexcept (true) __attribute__ ((__const__)); extern _Float64x __roundevenf64x (_Float64x __x) noexcept (true) __attribute__ ((__const__));



extern __intmax_t fromfpf64x (_Float64x __x, int __round, unsigned int __width) noexcept (true); extern __intmax_t __fromfpf64x (_Float64x __x, int __round, unsigned int __width) noexcept (true)
                            ;



extern __uintmax_t ufromfpf64x (_Float64x __x, int __round, unsigned int __width) noexcept (true); extern __uintmax_t __ufromfpf64x (_Float64x __x, int __round, unsigned int __width) noexcept (true)
                              ;




extern __intmax_t fromfpxf64x (_Float64x __x, int __round, unsigned int __width) noexcept (true); extern __intmax_t __fromfpxf64x (_Float64x __x, int __round, unsigned int __width) noexcept (true)
                             ;




extern __uintmax_t ufromfpxf64x (_Float64x __x, int __round, unsigned int __width) noexcept (true); extern __uintmax_t __ufromfpxf64x (_Float64x __x, int __round, unsigned int __width) noexcept (true)
                               ;


extern int canonicalizef64x (_Float64x *__cx, const _Float64x *__x) noexcept (true);






extern _Float64x fmaxmagf64x (_Float64x __x, _Float64x __y) noexcept (true) __attribute__ ((__const__)); extern _Float64x __fmaxmagf64x (_Float64x __x, _Float64x __y) noexcept (true) __attribute__ ((__const__));


extern _Float64x fminmagf64x (_Float64x __x, _Float64x __y) noexcept (true) __attribute__ ((__const__)); extern _Float64x __fminmagf64x (_Float64x __x, _Float64x __y) noexcept (true) __attribute__ ((__const__));




extern _Float64x fmaximumf64x (_Float64x __x, _Float64x __y) noexcept (true) __attribute__ ((__const__)); extern _Float64x __fmaximumf64x (_Float64x __x, _Float64x __y) noexcept (true) __attribute__ ((__const__));


extern _Float64x fminimumf64x (_Float64x __x, _Float64x __y) noexcept (true) __attribute__ ((__const__)); extern _Float64x __fminimumf64x (_Float64x __x, _Float64x __y) noexcept (true) __attribute__ ((__const__));


extern _Float64x fmaximum_numf64x (_Float64x __x, _Float64x __y) noexcept (true) __attribute__ ((__const__)); extern _Float64x __fmaximum_numf64x (_Float64x __x, _Float64x __y) noexcept (true) __attribute__ ((__const__));


extern _Float64x fminimum_numf64x (_Float64x __x, _Float64x __y) noexcept (true) __attribute__ ((__const__)); extern _Float64x __fminimum_numf64x (_Float64x __x, _Float64x __y) noexcept (true) __attribute__ ((__const__));


extern _Float64x fmaximum_magf64x (_Float64x __x, _Float64x __y) noexcept (true) __attribute__ ((__const__)); extern _Float64x __fmaximum_magf64x (_Float64x __x, _Float64x __y) noexcept (true) __attribute__ ((__const__));


extern _Float64x fminimum_magf64x (_Float64x __x, _Float64x __y) noexcept (true) __attribute__ ((__const__)); extern _Float64x __fminimum_magf64x (_Float64x __x, _Float64x __y) noexcept (true) __attribute__ ((__const__));


extern _Float64x fmaximum_mag_numf64x (_Float64x __x, _Float64x __y) noexcept (true) __attribute__ ((__const__)); extern _Float64x __fmaximum_mag_numf64x (_Float64x __x, _Float64x __y) noexcept (true) __attribute__ ((__const__));


extern _Float64x fminimum_mag_numf64x (_Float64x __x, _Float64x __y) noexcept (true) __attribute__ ((__const__)); extern _Float64x __fminimum_mag_numf64x (_Float64x __x, _Float64x __y) noexcept (true) __attribute__ ((__const__));




extern int totalorderf64x (const _Float64x *__x, const _Float64x *__y) noexcept (true)

     __attribute__ ((__pure__));


extern int totalordermagf64x (const _Float64x *__x, const _Float64x *__y) noexcept (true)

     __attribute__ ((__pure__));


extern _Float64x getpayloadf64x (const _Float64x *__x) noexcept (true); extern _Float64x __getpayloadf64x (const _Float64x *__x) noexcept (true);


extern int setpayloadf64x (_Float64x *__x, _Float64x __payload) noexcept (true);


extern int setpayloadsigf64x (_Float64x *__x, _Float64x __payload) noexcept (true);
# 519 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 2 3 4

#undef _Mdouble_
#undef __MATH_PRECNAME
#undef __MATH_DECLARING_DOUBLE
#undef __MATH_DECLARING_FLOATN
# 543 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 3 4
#undef __MATHDECL_1_IMPL
#undef __MATHDECL_1
#undef __MATHDECL_ALIAS
#undef __MATHDECL
#undef __MATHCALL


#define __MATHCALL_NARROW_ARGS_1 (_Marg_ __x)
#define __MATHCALL_NARROW_ARGS_2 (_Marg_ __x, _Marg_ __y)
#define __MATHCALL_NARROW_ARGS_3 (_Marg_ __x, _Marg_ __y, _Marg_ __z)
#define __MATHCALL_NARROW_NORMAL(func,nargs) extern _Mret_ func __MATHCALL_NARROW_ARGS_ ## nargs __THROW

#define __MATHCALL_NARROW_REDIR(func,redir,nargs) extern _Mret_ __REDIRECT_NTH (func, __MATHCALL_NARROW_ARGS_ ## nargs, redir)


#define __MATHCALL_NARROW(func,redir,nargs) __MATHCALL_NARROW_NORMAL (func, nargs)




#define _Mret_ float
#define _Marg_ double
#define __MATHCALL_NAME(name) f ## name
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls-narrow.h" 1 3 4
# 24 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls-narrow.h" 3 4
extern float fadd (double __x, double __y) noexcept (true);


extern float fdiv (double __x, double __y) noexcept (true);


extern float ffma (double __x, double __y, double __z) noexcept (true);


extern float fmul (double __x, double __y) noexcept (true);


extern float fsqrt (double __x) noexcept (true);


extern float fsub (double __x, double __y) noexcept (true);
# 567 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 2 3 4
#undef _Mret_
#undef _Marg_
#undef __MATHCALL_NAME

#define _Mret_ float
#define _Marg_ long double
#define __MATHCALL_NAME(name) f ## name ## l
# 587 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls-narrow.h" 1 3 4
# 24 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls-narrow.h" 3 4
extern float faddl (long double __x, long double __y) noexcept (true);


extern float fdivl (long double __x, long double __y) noexcept (true);


extern float ffmal (long double __x, long double __y, long double __z) noexcept (true);


extern float fmull (long double __x, long double __y) noexcept (true);


extern float fsqrtl (long double __x) noexcept (true);


extern float fsubl (long double __x, long double __y) noexcept (true);
# 588 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 2 3 4
#undef _Mret_
#undef _Marg_
#undef __MATHCALL_NAME
# 600 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 3 4
#define _Mret_ double
#define _Marg_ long double
#define __MATHCALL_NAME(name) d ## name ## l
# 616 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls-narrow.h" 1 3 4
# 24 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls-narrow.h" 3 4
extern double daddl (long double __x, long double __y) noexcept (true);


extern double ddivl (long double __x, long double __y) noexcept (true);


extern double dfmal (long double __x, long double __y, long double __z) noexcept (true);


extern double dmull (long double __x, long double __y) noexcept (true);


extern double dsqrtl (long double __x) noexcept (true);


extern double dsubl (long double __x, long double __y) noexcept (true);
# 617 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 2 3 4
#undef _Mret_
#undef _Marg_
#undef __MATHCALL_NAME
# 694 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 3 4
#define _Mret_ _Float32
#define _Marg_ _Float32x
#define __MATHCALL_NAME(name) f32 ## name ## f32x
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls-narrow.h" 1 3 4
# 24 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls-narrow.h" 3 4
extern _Float32 f32addf32x (_Float32x __x, _Float32x __y) noexcept (true);


extern _Float32 f32divf32x (_Float32x __x, _Float32x __y) noexcept (true);


extern _Float32 f32fmaf32x (_Float32x __x, _Float32x __y, _Float32x __z) noexcept (true);


extern _Float32 f32mulf32x (_Float32x __x, _Float32x __y) noexcept (true);


extern _Float32 f32sqrtf32x (_Float32x __x) noexcept (true);


extern _Float32 f32subf32x (_Float32x __x, _Float32x __y) noexcept (true);
# 698 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 2 3 4
#undef _Mret_
#undef _Marg_
#undef __MATHCALL_NAME



#define _Mret_ _Float32
#define _Marg_ _Float64
#define __MATHCALL_NAME(name) f32 ## name ## f64
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls-narrow.h" 1 3 4
# 24 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls-narrow.h" 3 4
extern _Float32 f32addf64 (_Float64 __x, _Float64 __y) noexcept (true);


extern _Float32 f32divf64 (_Float64 __x, _Float64 __y) noexcept (true);


extern _Float32 f32fmaf64 (_Float64 __x, _Float64 __y, _Float64 __z) noexcept (true);


extern _Float32 f32mulf64 (_Float64 __x, _Float64 __y) noexcept (true);


extern _Float32 f32sqrtf64 (_Float64 __x) noexcept (true);


extern _Float32 f32subf64 (_Float64 __x, _Float64 __y) noexcept (true);
# 708 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 2 3 4
#undef _Mret_
#undef _Marg_
#undef __MATHCALL_NAME



#define _Mret_ _Float32
#define _Marg_ _Float64x
#define __MATHCALL_NAME(name) f32 ## name ## f64x
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls-narrow.h" 1 3 4
# 24 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls-narrow.h" 3 4
extern _Float32 f32addf64x (_Float64x __x, _Float64x __y) noexcept (true);


extern _Float32 f32divf64x (_Float64x __x, _Float64x __y) noexcept (true);


extern _Float32 f32fmaf64x (_Float64x __x, _Float64x __y, _Float64x __z) noexcept (true);


extern _Float32 f32mulf64x (_Float64x __x, _Float64x __y) noexcept (true);


extern _Float32 f32sqrtf64x (_Float64x __x) noexcept (true);


extern _Float32 f32subf64x (_Float64x __x, _Float64x __y) noexcept (true);
# 718 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 2 3 4
#undef _Mret_
#undef _Marg_
#undef __MATHCALL_NAME



#define _Mret_ _Float32
#define _Marg_ _Float128
#define __MATHCALL_NAME(name) f32 ## name ## f128
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls-narrow.h" 1 3 4
# 24 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls-narrow.h" 3 4
extern _Float32 f32addf128 (_Float128 __x, _Float128 __y) noexcept (true);


extern _Float32 f32divf128 (_Float128 __x, _Float128 __y) noexcept (true);


extern _Float32 f32fmaf128 (_Float128 __x, _Float128 __y, _Float128 __z) noexcept (true);


extern _Float32 f32mulf128 (_Float128 __x, _Float128 __y) noexcept (true);


extern _Float32 f32sqrtf128 (_Float128 __x) noexcept (true);


extern _Float32 f32subf128 (_Float128 __x, _Float128 __y) noexcept (true);
# 728 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 2 3 4
#undef _Mret_
#undef _Marg_
#undef __MATHCALL_NAME
# 744 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 3 4
#define _Mret_ _Float32x
#define _Marg_ _Float64
#define __MATHCALL_NAME(name) f32x ## name ## f64
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls-narrow.h" 1 3 4
# 24 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls-narrow.h" 3 4
extern _Float32x f32xaddf64 (_Float64 __x, _Float64 __y) noexcept (true);


extern _Float32x f32xdivf64 (_Float64 __x, _Float64 __y) noexcept (true);


extern _Float32x f32xfmaf64 (_Float64 __x, _Float64 __y, _Float64 __z) noexcept (true);


extern _Float32x f32xmulf64 (_Float64 __x, _Float64 __y) noexcept (true);


extern _Float32x f32xsqrtf64 (_Float64 __x) noexcept (true);


extern _Float32x f32xsubf64 (_Float64 __x, _Float64 __y) noexcept (true);
# 748 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 2 3 4
#undef _Mret_
#undef _Marg_
#undef __MATHCALL_NAME



#define _Mret_ _Float32x
#define _Marg_ _Float64x
#define __MATHCALL_NAME(name) f32x ## name ## f64x
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls-narrow.h" 1 3 4
# 24 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls-narrow.h" 3 4
extern _Float32x f32xaddf64x (_Float64x __x, _Float64x __y) noexcept (true);


extern _Float32x f32xdivf64x (_Float64x __x, _Float64x __y) noexcept (true);


extern _Float32x f32xfmaf64x (_Float64x __x, _Float64x __y, _Float64x __z) noexcept (true);


extern _Float32x f32xmulf64x (_Float64x __x, _Float64x __y) noexcept (true);


extern _Float32x f32xsqrtf64x (_Float64x __x) noexcept (true);


extern _Float32x f32xsubf64x (_Float64x __x, _Float64x __y) noexcept (true);
# 758 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 2 3 4
#undef _Mret_
#undef _Marg_
#undef __MATHCALL_NAME



#define _Mret_ _Float32x
#define _Marg_ _Float128
#define __MATHCALL_NAME(name) f32x ## name ## f128
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls-narrow.h" 1 3 4
# 24 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls-narrow.h" 3 4
extern _Float32x f32xaddf128 (_Float128 __x, _Float128 __y) noexcept (true);


extern _Float32x f32xdivf128 (_Float128 __x, _Float128 __y) noexcept (true);


extern _Float32x f32xfmaf128 (_Float128 __x, _Float128 __y, _Float128 __z) noexcept (true);


extern _Float32x f32xmulf128 (_Float128 __x, _Float128 __y) noexcept (true);


extern _Float32x f32xsqrtf128 (_Float128 __x) noexcept (true);


extern _Float32x f32xsubf128 (_Float128 __x, _Float128 __y) noexcept (true);
# 768 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 2 3 4
#undef _Mret_
#undef _Marg_
#undef __MATHCALL_NAME
# 784 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 3 4
#define _Mret_ _Float64
#define _Marg_ _Float64x
#define __MATHCALL_NAME(name) f64 ## name ## f64x
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls-narrow.h" 1 3 4
# 24 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls-narrow.h" 3 4
extern _Float64 f64addf64x (_Float64x __x, _Float64x __y) noexcept (true);


extern _Float64 f64divf64x (_Float64x __x, _Float64x __y) noexcept (true);


extern _Float64 f64fmaf64x (_Float64x __x, _Float64x __y, _Float64x __z) noexcept (true);


extern _Float64 f64mulf64x (_Float64x __x, _Float64x __y) noexcept (true);


extern _Float64 f64sqrtf64x (_Float64x __x) noexcept (true);


extern _Float64 f64subf64x (_Float64x __x, _Float64x __y) noexcept (true);
# 788 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 2 3 4
#undef _Mret_
#undef _Marg_
#undef __MATHCALL_NAME



#define _Mret_ _Float64
#define _Marg_ _Float128
#define __MATHCALL_NAME(name) f64 ## name ## f128
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls-narrow.h" 1 3 4
# 24 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls-narrow.h" 3 4
extern _Float64 f64addf128 (_Float128 __x, _Float128 __y) noexcept (true);


extern _Float64 f64divf128 (_Float128 __x, _Float128 __y) noexcept (true);


extern _Float64 f64fmaf128 (_Float128 __x, _Float128 __y, _Float128 __z) noexcept (true);


extern _Float64 f64mulf128 (_Float128 __x, _Float128 __y) noexcept (true);


extern _Float64 f64sqrtf128 (_Float128 __x) noexcept (true);


extern _Float64 f64subf128 (_Float128 __x, _Float128 __y) noexcept (true);
# 798 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 2 3 4
#undef _Mret_
#undef _Marg_
#undef __MATHCALL_NAME
# 814 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 3 4
#define _Mret_ _Float64x
#define _Marg_ _Float128
#define __MATHCALL_NAME(name) f64x ## name ## f128
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls-narrow.h" 1 3 4
# 24 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/mathcalls-narrow.h" 3 4
extern _Float64x f64xaddf128 (_Float128 __x, _Float128 __y) noexcept (true);


extern _Float64x f64xdivf128 (_Float128 __x, _Float128 __y) noexcept (true);


extern _Float64x f64xfmaf128 (_Float128 __x, _Float128 __y, _Float128 __z) noexcept (true);


extern _Float64x f64xmulf128 (_Float128 __x, _Float128 __y) noexcept (true);


extern _Float64x f64xsqrtf128 (_Float128 __x) noexcept (true);


extern _Float64x f64xsubf128 (_Float128 __x, _Float128 __y) noexcept (true);
# 818 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 2 3 4
#undef _Mret_
#undef _Marg_
#undef __MATHCALL_NAME
# 845 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 3 4
#undef __MATHCALL_NARROW_ARGS_1
#undef __MATHCALL_NARROW_ARGS_2
#undef __MATHCALL_NARROW_ARGS_3
#undef __MATHCALL_NARROW_NORMAL
#undef __MATHCALL_NARROW_REDIR
#undef __MATHCALL_NARROW



extern int signgam;
# 922 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 3 4
#define __MATH_TG(TG_ARG,FUNC,ARGS) (sizeof (TG_ARG) == sizeof (float) ? FUNC ## f ARGS : sizeof (TG_ARG) == sizeof (double) ? FUNC ARGS : FUNC ## l ARGS)
# 934 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 3 4
enum
  {
    FP_NAN =
#define FP_NAN 0
      0,
    FP_INFINITE =
#define FP_INFINITE 1
      1,
    FP_ZERO =
#define FP_ZERO 2
      2,
    FP_SUBNORMAL =
#define FP_SUBNORMAL 3
      3,
    FP_NORMAL =
#define FP_NORMAL 4
      4
  };
# 967 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 3 4
#define fpclassify(x) __builtin_fpclassify (FP_NAN, FP_INFINITE, FP_NORMAL, FP_SUBNORMAL, FP_ZERO, x)







#define signbit(x) __builtin_signbit (x)
# 994 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 3 4
#define isfinite(x) __builtin_isfinite (x)







#define isnormal(x) __builtin_isnormal (x)
# 1011 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 3 4
#define isnan(x) __builtin_isnan (x)
# 1029 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 3 4
#define isinf(x) __builtin_isinf_sign (x)





#define MATH_ERRNO 1
#define MATH_ERREXCEPT 2
# 1048 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 3 4
#define math_errhandling (MATH_ERRNO | MATH_ERREXCEPT)





# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/iscanonical.h" 1 3 4
# 28 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/iscanonical.h" 3 4
#define iscanonical(x) ((void) (__typeof (x)) (x), 1)
# 1055 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 2 3 4
# 1066 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 3 4
extern "C++" {
inline int issignaling (float __val) { return __issignalingf (__val); }
inline int issignaling (double __val) { return __issignaling (__val); }
inline int
issignaling (long double __val)
{



  return __issignalingl (__val);

}





}



#define issubnormal(x) (fpclassify (x) == FP_SUBNORMAL)
# 1097 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 3 4
extern "C++" {
# 1128 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 3 4
template <class __T> inline bool
iszero (__T __val)
{
  return __val == 0;
}

}





#define MAXFLOAT 3.40282347e+38F





#define M_E 2.7182818284590452354
#define M_LOG2E 1.4426950408889634074
#define M_LOG10E 0.43429448190325182765
#define M_LN2 0.69314718055994530942
#define M_LN10 2.30258509299404568402
#define M_PI 3.14159265358979323846
#define M_PI_2 1.57079632679489661923
#define M_PI_4 0.78539816339744830962
#define M_1_PI 0.31830988618379067154
#define M_2_PI 0.63661977236758134308
#define M_2_SQRTPI 1.12837916709551257390
#define M_SQRT2 1.41421356237309504880
#define M_SQRT1_2 0.70710678118654752440




#define M_Ef 2.7182818284590452354f
#define M_LOG2Ef 1.4426950408889634074f
#define M_LOG10Ef 0.43429448190325182765f
#define M_LN2f 0.69314718055994530942f
#define M_LN10f 2.30258509299404568402f
#define M_PIf 3.14159265358979323846f
#define M_PI_2f 1.57079632679489661923f
#define M_PI_4f 0.78539816339744830962f
#define M_1_PIf 0.31830988618379067154f
#define M_2_PIf 0.63661977236758134308f
#define M_2_SQRTPIf 1.12837916709551257390f
#define M_SQRT2f 1.41421356237309504880f
#define M_SQRT1_2f 0.70710678118654752440f






#define M_El 2.718281828459045235360287471352662498L
#define M_LOG2El 1.442695040888963407359924681001892137L
#define M_LOG10El 0.434294481903251827651128918916605082L
#define M_LN2l 0.693147180559945309417232121458176568L
#define M_LN10l 2.302585092994045684017991454684364208L
#define M_PIl 3.141592653589793238462643383279502884L
#define M_PI_2l 1.570796326794896619231321691639751442L
#define M_PI_4l 0.785398163397448309615660845819875721L
#define M_1_PIl 0.318309886183790671537767526745028724L
#define M_2_PIl 0.636619772367581343075535053490057448L
#define M_2_SQRTPIl 1.128379167095512573896158903121545172L
#define M_SQRT2l 1.414213562373095048801688724209698079L
#define M_SQRT1_2l 0.707106781186547524400844362104849039L
# 1214 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 3 4
#define M_Ef32 __f32 (2.718281828459045235360287471352662498)
#define M_LOG2Ef32 __f32 (1.442695040888963407359924681001892137)
#define M_LOG10Ef32 __f32 (0.434294481903251827651128918916605082)
#define M_LN2f32 __f32 (0.693147180559945309417232121458176568)
#define M_LN10f32 __f32 (2.302585092994045684017991454684364208)
#define M_PIf32 __f32 (3.141592653589793238462643383279502884)
#define M_PI_2f32 __f32 (1.570796326794896619231321691639751442)
#define M_PI_4f32 __f32 (0.785398163397448309615660845819875721)
#define M_1_PIf32 __f32 (0.318309886183790671537767526745028724)
#define M_2_PIf32 __f32 (0.636619772367581343075535053490057448)
#define M_2_SQRTPIf32 __f32 (1.128379167095512573896158903121545172)
#define M_SQRT2f32 __f32 (1.414213562373095048801688724209698079)
#define M_SQRT1_2f32 __f32 (0.707106781186547524400844362104849039)



#define M_Ef64 __f64 (2.718281828459045235360287471352662498)
#define M_LOG2Ef64 __f64 (1.442695040888963407359924681001892137)
#define M_LOG10Ef64 __f64 (0.434294481903251827651128918916605082)
#define M_LN2f64 __f64 (0.693147180559945309417232121458176568)
#define M_LN10f64 __f64 (2.302585092994045684017991454684364208)
#define M_PIf64 __f64 (3.141592653589793238462643383279502884)
#define M_PI_2f64 __f64 (1.570796326794896619231321691639751442)
#define M_PI_4f64 __f64 (0.785398163397448309615660845819875721)
#define M_1_PIf64 __f64 (0.318309886183790671537767526745028724)
#define M_2_PIf64 __f64 (0.636619772367581343075535053490057448)
#define M_2_SQRTPIf64 __f64 (1.128379167095512573896158903121545172)
#define M_SQRT2f64 __f64 (1.414213562373095048801688724209698079)
#define M_SQRT1_2f64 __f64 (0.707106781186547524400844362104849039)



#define M_Ef128 __f128 (2.718281828459045235360287471352662498)
#define M_LOG2Ef128 __f128 (1.442695040888963407359924681001892137)
#define M_LOG10Ef128 __f128 (0.434294481903251827651128918916605082)
#define M_LN2f128 __f128 (0.693147180559945309417232121458176568)
#define M_LN10f128 __f128 (2.302585092994045684017991454684364208)
#define M_PIf128 __f128 (3.141592653589793238462643383279502884)
#define M_PI_2f128 __f128 (1.570796326794896619231321691639751442)
#define M_PI_4f128 __f128 (0.785398163397448309615660845819875721)
#define M_1_PIf128 __f128 (0.318309886183790671537767526745028724)
#define M_2_PIf128 __f128 (0.636619772367581343075535053490057448)
#define M_2_SQRTPIf128 __f128 (1.128379167095512573896158903121545172)
#define M_SQRT2f128 __f128 (1.414213562373095048801688724209698079)
#define M_SQRT1_2f128 __f128 (0.707106781186547524400844362104849039)



#define M_Ef32x __f32x (2.718281828459045235360287471352662498)
#define M_LOG2Ef32x __f32x (1.442695040888963407359924681001892137)
#define M_LOG10Ef32x __f32x (0.434294481903251827651128918916605082)
#define M_LN2f32x __f32x (0.693147180559945309417232121458176568)
#define M_LN10f32x __f32x (2.302585092994045684017991454684364208)
#define M_PIf32x __f32x (3.141592653589793238462643383279502884)
#define M_PI_2f32x __f32x (1.570796326794896619231321691639751442)
#define M_PI_4f32x __f32x (0.785398163397448309615660845819875721)
#define M_1_PIf32x __f32x (0.318309886183790671537767526745028724)
#define M_2_PIf32x __f32x (0.636619772367581343075535053490057448)
#define M_2_SQRTPIf32x __f32x (1.128379167095512573896158903121545172)
#define M_SQRT2f32x __f32x (1.414213562373095048801688724209698079)
#define M_SQRT1_2f32x __f32x (0.707106781186547524400844362104849039)



#define M_Ef64x __f64x (2.718281828459045235360287471352662498)
#define M_LOG2Ef64x __f64x (1.442695040888963407359924681001892137)
#define M_LOG10Ef64x __f64x (0.434294481903251827651128918916605082)
#define M_LN2f64x __f64x (0.693147180559945309417232121458176568)
#define M_LN10f64x __f64x (2.302585092994045684017991454684364208)
#define M_PIf64x __f64x (3.141592653589793238462643383279502884)
#define M_PI_2f64x __f64x (1.570796326794896619231321691639751442)
#define M_PI_4f64x __f64x (0.785398163397448309615660845819875721)
#define M_1_PIf64x __f64x (0.318309886183790671537767526745028724)
#define M_2_PIf64x __f64x (0.636619772367581343075535053490057448)
#define M_2_SQRTPIf64x __f64x (1.128379167095512573896158903121545172)
#define M_SQRT2f64x __f64x (1.414213562373095048801688724209698079)
#define M_SQRT1_2f64x __f64x (0.707106781186547524400844362104849039)
# 1305 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 3 4
#define isgreater(x,y) __builtin_isgreater(x, y)
#define isgreaterequal(x,y) __builtin_isgreaterequal(x, y)
#define isless(x,y) __builtin_isless(x, y)
#define islessequal(x,y) __builtin_islessequal(x, y)
#define islessgreater(x,y) __builtin_islessgreater(x, y)
#define isunordered(x,y) __builtin_isunordered(x, y)
# 1342 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 3 4
#define __MATH_EVAL_FMT2(x,y) ((x) + (y) + 0.0f)
# 1363 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/math.h" 3 4
extern "C++" {
template<typename> struct __iseqsig_type;

template<> struct __iseqsig_type<float>
{
  static int __call (float __x, float __y) throw ()
  {
    return __iseqsigf (__x, __y);
  }
};

template<> struct __iseqsig_type<double>
{
  static int __call (double __x, double __y) throw ()
  {
    return __iseqsig (__x, __y);
  }
};

template<> struct __iseqsig_type<long double>
{
  static int __call (long double __x, long double __y) throw ()
  {

    return __iseqsigl (__x, __y);



  }
};


template<> struct __iseqsig_type<_Float32>
{
  static int __call (_Float32 __x, _Float32 __y) throw ()
  {
    return __iseqsigf (__x, __y);
  }
};



template<> struct __iseqsig_type<_Float64>
{
  static int __call (_Float64 __x, _Float64 __y) throw ()
  {
    return __iseqsig (__x, __y);
  }
};





template<> struct __iseqsig_type<_Float128>
{
  static int __call (_Float128 __x, _Float128 __y) throw ()
  {



    return __iseqsigl (__x, __y);

  }
};



template<> struct __iseqsig_type<_Float32x>
{
  static int __call (_Float32x __x, _Float32x __y) throw ()
  {
    return __iseqsig (__x, __y);
  }
};



template<> struct __iseqsig_type<_Float64x>
{
  static int __call (_Float64x __x, _Float64x __y) throw ()
  {

    return __iseqsigl (__x, __y);



  }
};


template<typename _T1, typename _T2>
inline int
iseqsig (_T1 __x, _T2 __y) throw ()
{

  typedef decltype (((__x) + (__y) + 0.0f)) _T3;



  return __iseqsig_type<_T3>::__call (__x, __y);
}

}




}
# 48 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cmath" 2 3
#undef _GLIBCXX_INCLUDE_NEXT_C_HEADERS
# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/std_abs.h" 1 3
# 31 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/std_abs.h" 3
#define _GLIBCXX_BITS_STD_ABS_H 

       
# 34 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/std_abs.h" 3



#define _GLIBCXX_INCLUDE_NEXT_C_HEADERS 
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdlib.h" 1 3 4
# 25 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdlib.h" 3 4
#define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION 
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/libc-header-start.h" 1 3 4
# 31 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/libc-header-start.h" 3 4
#undef __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION





#undef __GLIBC_USE_LIB_EXT2


#define __GLIBC_USE_LIB_EXT2 1
# 67 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/libc-header-start.h" 3 4
#undef __GLIBC_USE_IEC_60559_BFP_EXT

#define __GLIBC_USE_IEC_60559_BFP_EXT 1



#undef __GLIBC_USE_IEC_60559_BFP_EXT_C2X

#define __GLIBC_USE_IEC_60559_BFP_EXT_C2X 1



#undef __GLIBC_USE_IEC_60559_EXT

#define __GLIBC_USE_IEC_60559_EXT 1
# 90 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/libc-header-start.h" 3 4
#undef __GLIBC_USE_IEC_60559_FUNCS_EXT

#define __GLIBC_USE_IEC_60559_FUNCS_EXT 1



#undef __GLIBC_USE_IEC_60559_FUNCS_EXT_C2X

#define __GLIBC_USE_IEC_60559_FUNCS_EXT_C2X 1






#undef __GLIBC_USE_IEC_60559_TYPES_EXT

#define __GLIBC_USE_IEC_60559_TYPES_EXT 1
# 27 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdlib.h" 2 3 4


#define __need_size_t 
#define __need_wchar_t 
#define __need_NULL 
# 1 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 1 3 4
# 185 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 3 4
#define __size_t__ 
#define __SIZE_T__ 
#define _SIZE_T 
#define _SYS_SIZE_T_H 
#define _T_SIZE_ 
#define _T_SIZE 
#define __SIZE_T 
#define _SIZE_T_ 
#define _BSD_SIZE_T_ 
#define _SIZE_T_DEFINED_ 
#define _SIZE_T_DEFINED 
#define _BSD_SIZE_T_DEFINED_ 
#define _SIZE_T_DECLARED 
#define __DEFINED_size_t 
#define ___int_size_t_h 
#define _GCC_SIZE_T 
#define _SIZET_ 






#define __size_t 





typedef long unsigned int size_t;
# 237 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 3 4
#undef __need_size_t
# 267 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 3 4
#define __wchar_t__ 
#define __WCHAR_T__ 
#define _WCHAR_T 
#define _T_WCHAR_ 
#define _T_WCHAR 
#define __WCHAR_T 
#define _WCHAR_T_ 
#define _BSD_WCHAR_T_ 
#define _WCHAR_T_DEFINED_ 
#define _WCHAR_T_DEFINED 
#define _WCHAR_T_H 
#define ___int_wchar_t_h 
#define __INT_WCHAR_T_H 
#define _GCC_WCHAR_T 
#define _WCHAR_T_DECLARED 
#define __DEFINED_wchar_t 
# 295 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 3 4
#undef _BSD_WCHAR_T_
# 349 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 3 4
#undef __need_wchar_t
# 399 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 3 4
#undef NULL

#define NULL __null
# 410 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 3 4
#undef __need_NULL
# 33 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdlib.h" 2 3 4

extern "C" {

#define _STDLIB_H 1



# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/waitflags.h" 1 3 4
# 25 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/waitflags.h" 3 4
#define WNOHANG 1
#define WUNTRACED 2



#define WSTOPPED 2
#define WEXITED 4
#define WCONTINUED 8
#define WNOWAIT 0x01000000


#define __WNOTHREAD 0x20000000

#define __WALL 0x40000000
#define __WCLONE 0x80000000
# 41 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdlib.h" 2 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/waitstatus.h" 1 3 4
# 28 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/waitstatus.h" 3 4
#define __WEXITSTATUS(status) (((status) & 0xff00) >> 8)


#define __WTERMSIG(status) ((status) & 0x7f)


#define __WSTOPSIG(status) __WEXITSTATUS(status)


#define __WIFEXITED(status) (__WTERMSIG(status) == 0)


#define __WIFSIGNALED(status) (((signed char) (((status) & 0x7f) + 1) >> 1) > 0)



#define __WIFSTOPPED(status) (((status) & 0xff) == 0x7f)




#define __WIFCONTINUED(status) ((status) == __W_CONTINUED)



#define __WCOREDUMP(status) ((status) & __WCOREFLAG)


#define __W_EXITCODE(ret,sig) ((ret) << 8 | (sig))
#define __W_STOPCODE(sig) ((sig) << 8 | 0x7f)
#define __W_CONTINUED 0xffff
#define __WCOREFLAG 0x80
# 42 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdlib.h" 2 3 4


#define WEXITSTATUS(status) __WEXITSTATUS (status)
#define WTERMSIG(status) __WTERMSIG (status)
#define WSTOPSIG(status) __WSTOPSIG (status)
#define WIFEXITED(status) __WIFEXITED (status)
#define WIFSIGNALED(status) __WIFSIGNALED (status)
#define WIFSTOPPED(status) __WIFSTOPPED (status)

#define WIFCONTINUED(status) __WIFCONTINUED (status)




# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/floatn.h" 1 3 4







# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 1 3 4
# 21 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE 64
# 32 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE_TIME64_COMPAT32 0
# 9 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/floatn.h" 2 3 4
# 57 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdlib.h" 2 3 4


typedef struct
  {
    int quot;
    int rem;
  } div_t;



typedef struct
  {
    long int quot;
    long int rem;
  } ldiv_t;
#define __ldiv_t_defined 1




__extension__ typedef struct
  {
    long long int quot;
    long long int rem;
  } lldiv_t;
#define __lldiv_t_defined 1




#define RAND_MAX 2147483647




#define EXIT_FAILURE 1
#define EXIT_SUCCESS 0



#define MB_CUR_MAX (__ctype_get_mb_cur_max ())
extern size_t __ctype_get_mb_cur_max (void) noexcept (true) __attribute__ ((__warn_unused_result__));



extern double atof (const char *__nptr)
     noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));

extern int atoi (const char *__nptr)
     noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));

extern long int atol (const char *__nptr)
     noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));



__extension__ extern long long int atoll (const char *__nptr)
     noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));



extern double strtod (const char *__restrict __nptr,
        char **__restrict __endptr)
     noexcept (true) __attribute__ ((__nonnull__ (1)));



extern float strtof (const char *__restrict __nptr,
       char **__restrict __endptr) noexcept (true) __attribute__ ((__nonnull__ (1)));

extern long double strtold (const char *__restrict __nptr,
       char **__restrict __endptr)
     noexcept (true) __attribute__ ((__nonnull__ (1)));
# 141 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdlib.h" 3 4
extern _Float32 strtof32 (const char *__restrict __nptr,
     char **__restrict __endptr)
     noexcept (true) __attribute__ ((__nonnull__ (1)));



extern _Float64 strtof64 (const char *__restrict __nptr,
     char **__restrict __endptr)
     noexcept (true) __attribute__ ((__nonnull__ (1)));



extern _Float128 strtof128 (const char *__restrict __nptr,
       char **__restrict __endptr)
     noexcept (true) __attribute__ ((__nonnull__ (1)));



extern _Float32x strtof32x (const char *__restrict __nptr,
       char **__restrict __endptr)
     noexcept (true) __attribute__ ((__nonnull__ (1)));



extern _Float64x strtof64x (const char *__restrict __nptr,
       char **__restrict __endptr)
     noexcept (true) __attribute__ ((__nonnull__ (1)));
# 177 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdlib.h" 3 4
extern long int strtol (const char *__restrict __nptr,
   char **__restrict __endptr, int __base)
     noexcept (true) __attribute__ ((__nonnull__ (1)));

extern unsigned long int strtoul (const char *__restrict __nptr,
      char **__restrict __endptr, int __base)
     noexcept (true) __attribute__ ((__nonnull__ (1)));



__extension__
extern long long int strtoq (const char *__restrict __nptr,
        char **__restrict __endptr, int __base)
     noexcept (true) __attribute__ ((__nonnull__ (1)));

__extension__
extern unsigned long long int strtouq (const char *__restrict __nptr,
           char **__restrict __endptr, int __base)
     noexcept (true) __attribute__ ((__nonnull__ (1)));




__extension__
extern long long int strtoll (const char *__restrict __nptr,
         char **__restrict __endptr, int __base)
     noexcept (true) __attribute__ ((__nonnull__ (1)));

__extension__
extern unsigned long long int strtoull (const char *__restrict __nptr,
     char **__restrict __endptr, int __base)
     noexcept (true) __attribute__ ((__nonnull__ (1)));




extern int strfromd (char *__dest, size_t __size, const char *__format,
       double __f)
     noexcept (true) __attribute__ ((__nonnull__ (3)));

extern int strfromf (char *__dest, size_t __size, const char *__format,
       float __f)
     noexcept (true) __attribute__ ((__nonnull__ (3)));

extern int strfroml (char *__dest, size_t __size, const char *__format,
       long double __f)
     noexcept (true) __attribute__ ((__nonnull__ (3)));
# 233 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdlib.h" 3 4
extern int strfromf32 (char *__dest, size_t __size, const char * __format,
         _Float32 __f)
     noexcept (true) __attribute__ ((__nonnull__ (3)));



extern int strfromf64 (char *__dest, size_t __size, const char * __format,
         _Float64 __f)
     noexcept (true) __attribute__ ((__nonnull__ (3)));



extern int strfromf128 (char *__dest, size_t __size, const char * __format,
   _Float128 __f)
     noexcept (true) __attribute__ ((__nonnull__ (3)));



extern int strfromf32x (char *__dest, size_t __size, const char * __format,
   _Float32x __f)
     noexcept (true) __attribute__ ((__nonnull__ (3)));



extern int strfromf64x (char *__dest, size_t __size, const char * __format,
   _Float64x __f)
     noexcept (true) __attribute__ ((__nonnull__ (3)));
# 273 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdlib.h" 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/types/locale_t.h" 1 3 4
# 20 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/types/locale_t.h" 3 4
#define _BITS_TYPES_LOCALE_T_H 1

# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/types/__locale_t.h" 1 3 4
# 20 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/types/__locale_t.h" 3 4
#define _BITS_TYPES___LOCALE_T_H 1






struct __locale_struct
{

  struct __locale_data *__locales[13];


  const unsigned short int *__ctype_b;
  const int *__ctype_tolower;
  const int *__ctype_toupper;


  const char *__names[13];
};

typedef struct __locale_struct *__locale_t;
# 23 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/types/locale_t.h" 2 3 4

typedef __locale_t locale_t;
# 274 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdlib.h" 2 3 4

extern long int strtol_l (const char *__restrict __nptr,
     char **__restrict __endptr, int __base,
     locale_t __loc) noexcept (true) __attribute__ ((__nonnull__ (1, 4)));

extern unsigned long int strtoul_l (const char *__restrict __nptr,
        char **__restrict __endptr,
        int __base, locale_t __loc)
     noexcept (true) __attribute__ ((__nonnull__ (1, 4)));

__extension__
extern long long int strtoll_l (const char *__restrict __nptr,
    char **__restrict __endptr, int __base,
    locale_t __loc)
     noexcept (true) __attribute__ ((__nonnull__ (1, 4)));

__extension__
extern unsigned long long int strtoull_l (const char *__restrict __nptr,
       char **__restrict __endptr,
       int __base, locale_t __loc)
     noexcept (true) __attribute__ ((__nonnull__ (1, 4)));

extern double strtod_l (const char *__restrict __nptr,
   char **__restrict __endptr, locale_t __loc)
     noexcept (true) __attribute__ ((__nonnull__ (1, 3)));

extern float strtof_l (const char *__restrict __nptr,
         char **__restrict __endptr, locale_t __loc)
     noexcept (true) __attribute__ ((__nonnull__ (1, 3)));

extern long double strtold_l (const char *__restrict __nptr,
         char **__restrict __endptr,
         locale_t __loc)
     noexcept (true) __attribute__ ((__nonnull__ (1, 3)));
# 317 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdlib.h" 3 4
extern _Float32 strtof32_l (const char *__restrict __nptr,
       char **__restrict __endptr,
       locale_t __loc)
     noexcept (true) __attribute__ ((__nonnull__ (1, 3)));



extern _Float64 strtof64_l (const char *__restrict __nptr,
       char **__restrict __endptr,
       locale_t __loc)
     noexcept (true) __attribute__ ((__nonnull__ (1, 3)));



extern _Float128 strtof128_l (const char *__restrict __nptr,
         char **__restrict __endptr,
         locale_t __loc)
     noexcept (true) __attribute__ ((__nonnull__ (1, 3)));



extern _Float32x strtof32x_l (const char *__restrict __nptr,
         char **__restrict __endptr,
         locale_t __loc)
     noexcept (true) __attribute__ ((__nonnull__ (1, 3)));



extern _Float64x strtof64x_l (const char *__restrict __nptr,
         char **__restrict __endptr,
         locale_t __loc)
     noexcept (true) __attribute__ ((__nonnull__ (1, 3)));
# 361 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdlib.h" 3 4
extern __inline __attribute__ ((__gnu_inline__)) int
__attribute__ ((__leaf__)) atoi (const char *__nptr) noexcept (true)
{
  return (int) strtol (__nptr, (char **) __null, 10);
}
extern __inline __attribute__ ((__gnu_inline__)) long int
__attribute__ ((__leaf__)) atol (const char *__nptr) noexcept (true)
{
  return strtol (__nptr, (char **) __null, 10);
}


__extension__ extern __inline __attribute__ ((__gnu_inline__)) long long int
__attribute__ ((__leaf__)) atoll (const char *__nptr) noexcept (true)
{
  return strtoll (__nptr, (char **) __null, 10);
}
# 386 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdlib.h" 3 4
extern char *l64a (long int __n) noexcept (true) __attribute__ ((__warn_unused_result__));


extern long int a64l (const char *__s)
     noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));




# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/types.h" 1 3 4
# 23 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/types.h" 3 4
#define _SYS_TYPES_H 1



extern "C" {





typedef __u_char u_char;
typedef __u_short u_short;
typedef __u_int u_int;
typedef __u_long u_long;
typedef __quad_t quad_t;
typedef __u_quad_t u_quad_t;
typedef __fsid_t fsid_t;
#define __u_char_defined 

typedef __loff_t loff_t;






typedef __ino64_t ino_t;

#define __ino_t_defined 


typedef __ino64_t ino64_t;
#define __ino64_t_defined 



typedef __dev_t dev_t;
#define __dev_t_defined 



typedef __gid_t gid_t;
#define __gid_t_defined 



typedef __mode_t mode_t;
#define __mode_t_defined 



typedef __nlink_t nlink_t;
#define __nlink_t_defined 



typedef __uid_t uid_t;
#define __uid_t_defined 






typedef __off64_t off_t;

#define __off_t_defined 


typedef __off64_t off64_t;
#define __off64_t_defined 



typedef __pid_t pid_t;
#define __pid_t_defined 




typedef __id_t id_t;
#define __id_t_defined 



typedef __ssize_t ssize_t;
#define __ssize_t_defined 




typedef __daddr_t daddr_t;
typedef __caddr_t caddr_t;
#define __daddr_t_defined 




typedef __key_t key_t;
#define __key_t_defined 



# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/types/clock_t.h" 1 3 4

#define __clock_t_defined 1




typedef __clock_t clock_t;
# 127 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/types.h" 2 3 4

# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/types/clockid_t.h" 1 3 4

#define __clockid_t_defined 1




typedef __clockid_t clockid_t;
# 129 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/types.h" 2 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/types/time_t.h" 1 3 4

#define __time_t_defined 1







typedef __time_t time_t;
# 130 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/types.h" 2 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/types/timer_t.h" 1 3 4

#define __timer_t_defined 1




typedef __timer_t timer_t;
# 131 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/types.h" 2 3 4



typedef __useconds_t useconds_t;
#define __useconds_t_defined 


typedef __suseconds_t suseconds_t;
#define __suseconds_t_defined 



#define __need_size_t 
# 1 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 1 3 4
# 237 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 3 4
#undef __need_size_t
# 410 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 3 4
#undef __need_NULL
# 145 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/types.h" 2 3 4



typedef unsigned long int ulong;
typedef unsigned short int ushort;
typedef unsigned int uint;







typedef __uint8_t u_int8_t;
typedef __uint16_t u_int16_t;
typedef __uint32_t u_int32_t;
typedef __uint64_t u_int64_t;


typedef int register_t __attribute__ ((__mode__ (__word__)));






#define __BIT_TYPES_DEFINED__ 1




# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/endian.h" 1 3 4
# 19 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/endian.h" 3 4
#define _ENDIAN_H 1




# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/endian.h" 1 3 4







# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 1 3 4
# 21 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE 64
# 32 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE_TIME64_COMPAT32 0
# 9 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/endian.h" 2 3 4
# 27 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/endian.h" 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/endian-64.h" 1 3 4
# 20 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/endian-64.h" 3 4
#define _BITS_ENDIAN_H 1
# 30 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/endian-64.h" 3 4
#define __LITTLE_ENDIAN 1234
#define __BIG_ENDIAN 4321
#define __PDP_ENDIAN 3412


# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/endianness.h" 1 3 4







# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 1 3 4
# 21 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE 64
# 32 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE_TIME64_COMPAT32 0
# 9 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/endianness.h" 2 3 4
# 27 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/endianness.h" 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/endianness-64.h" 1 3 4

#define _BITS_ENDIANNESS_H 1
# 12 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/endianness-64.h" 3 4
#define __BYTE_ORDER __LITTLE_ENDIAN
# 28 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/endianness.h" 2 3 4
# 36 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/endian-64.h" 2 3 4




#define __FLOAT_WORD_ORDER __BYTE_ORDER



#define __LONG_LONG_PAIR(HI,LO) LO, HI
# 28 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/endian.h" 2 3 4
# 25 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/endian.h" 2 3 4


#define LITTLE_ENDIAN __LITTLE_ENDIAN
#define BIG_ENDIAN __BIG_ENDIAN
#define PDP_ENDIAN __PDP_ENDIAN
#define BYTE_ORDER __BYTE_ORDER




# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/byteswap.h" 1 3 4
# 24 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/byteswap.h" 3 4
#define _BITS_BYTESWAP_H 1





#define __bswap_constant_16(x) ((__uint16_t) ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8)))


static __inline __uint16_t
__bswap_16 (__uint16_t __bsx)
{

  return __builtin_bswap16 (__bsx);



}


#define __bswap_constant_32(x) ((((x) & 0xff000000u) >> 24) | (((x) & 0x00ff0000u) >> 8) | (((x) & 0x0000ff00u) << 8) | (((x) & 0x000000ffu) << 24))



static __inline __uint32_t
__bswap_32 (__uint32_t __bsx)
{

  return __builtin_bswap32 (__bsx);



}


#define __bswap_constant_64(x) ((((x) & 0xff00000000000000ull) >> 56) | (((x) & 0x00ff000000000000ull) >> 40) | (((x) & 0x0000ff0000000000ull) >> 24) | (((x) & 0x000000ff00000000ull) >> 8) | (((x) & 0x00000000ff000000ull) << 8) | (((x) & 0x0000000000ff0000ull) << 24) | (((x) & 0x000000000000ff00ull) << 40) | (((x) & 0x00000000000000ffull) << 56))
# 69 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/byteswap.h" 3 4
__extension__ static __inline __uint64_t
__bswap_64 (__uint64_t __bsx)
{

  return __builtin_bswap64 (__bsx);



}
# 36 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/endian.h" 2 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/uintn-identity.h" 1 3 4
# 24 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/uintn-identity.h" 3 4
#define _BITS_UINTN_IDENTITY_H 1







static __inline __uint16_t
__uint16_identity (__uint16_t __x)
{
  return __x;
}

static __inline __uint32_t
__uint32_identity (__uint32_t __x)
{
  return __x;
}

static __inline __uint64_t
__uint64_identity (__uint64_t __x)
{
  return __x;
}
# 37 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/endian.h" 2 3 4


#define htobe16(x) __bswap_16 (x)
#define htole16(x) __uint16_identity (x)
#define be16toh(x) __bswap_16 (x)
#define le16toh(x) __uint16_identity (x)

#define htobe32(x) __bswap_32 (x)
#define htole32(x) __uint32_identity (x)
#define be32toh(x) __bswap_32 (x)
#define le32toh(x) __uint32_identity (x)

#define htobe64(x) __bswap_64 (x)
#define htole64(x) __uint64_identity (x)
#define be64toh(x) __bswap_64 (x)
#define le64toh(x) __uint64_identity (x)
# 177 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/types.h" 2 3 4


# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/select.h" 1 3 4
# 22 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/select.h" 3 4
#define _SYS_SELECT_H 1







# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/select.h" 1 3 4
# 25 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/select.h" 3 4
#define __FD_ZERO(s) do { unsigned int __i; fd_set *__arr = (s); for (__i = 0; __i < sizeof (fd_set) / sizeof (__fd_mask); ++__i) __FDS_BITS (__arr)[__i] = 0; } while (0)






#define __FD_SET(d,s) ((void) (__FDS_BITS (s)[__FD_ELT(d)] |= __FD_MASK(d)))

#define __FD_CLR(d,s) ((void) (__FDS_BITS (s)[__FD_ELT(d)] &= ~__FD_MASK(d)))

#define __FD_ISSET(d,s) ((__FDS_BITS (s)[__FD_ELT (d)] & __FD_MASK (d)) != 0)
# 31 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/select.h" 2 3 4


# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/types/sigset_t.h" 1 3 4

#define __sigset_t_defined 1

# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/types/__sigset_t.h" 1 3 4

#define ____sigset_t_defined 

#define _SIGSET_NWORDS (1024 / (8 * sizeof (unsigned long int)))
typedef struct
{
  unsigned long int __val[(1024 / (8 * sizeof (unsigned long int)))];
} __sigset_t;
# 5 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/types/sigset_t.h" 2 3 4


typedef __sigset_t sigset_t;
# 34 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/select.h" 2 3 4



# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/types/struct_timeval.h" 1 3 4

#define __timeval_defined 1





struct timeval
{




  __time_t tv_sec;
  __suseconds_t tv_usec;

};
# 38 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/select.h" 2 3 4

# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/types/struct_timespec.h" 1 3 4


#define _STRUCT_TIMESPEC 1


# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/endian.h" 1 3 4







# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 1 3 4
# 21 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE 64
# 32 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE_TIME64_COMPAT32 0
# 9 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/endian.h" 2 3 4
# 7 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/types/struct_timespec.h" 2 3 4




struct timespec
{



  __time_t tv_sec;




  __syscall_slong_t tv_nsec;
# 31 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/types/struct_timespec.h" 3 4
};
# 40 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/select.h" 2 3 4
# 49 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/select.h" 3 4
typedef long int __fd_mask;


#undef __NFDBITS

#define __NFDBITS (8 * (int) sizeof (__fd_mask))
#define __FD_ELT(d) ((d) / __NFDBITS)
#define __FD_MASK(d) ((__fd_mask) (1UL << ((d) % __NFDBITS)))


typedef struct
  {



    __fd_mask fds_bits[1024 / (8 * (int) sizeof (__fd_mask))];
#define __FDS_BITS(set) ((set)->fds_bits)




  } fd_set;


#define FD_SETSIZE __FD_SETSIZE



typedef __fd_mask fd_mask;


#define NFDBITS __NFDBITS




#define FD_SET(fd,fdsetp) __FD_SET (fd, fdsetp)
#define FD_CLR(fd,fdsetp) __FD_CLR (fd, fdsetp)
#define FD_ISSET(fd,fdsetp) __FD_ISSET (fd, fdsetp)
#define FD_ZERO(fdsetp) __FD_ZERO (fdsetp)


extern "C" {
# 102 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/select.h" 3 4
extern int select (int __nfds, fd_set *__restrict __readfds,
     fd_set *__restrict __writefds,
     fd_set *__restrict __exceptfds,
     struct timeval *__restrict __timeout);
# 127 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/select.h" 3 4
extern int pselect (int __nfds, fd_set *__restrict __readfds,
      fd_set *__restrict __writefds,
      fd_set *__restrict __exceptfds,
      const struct timespec *__restrict __timeout,
      const __sigset_t *__restrict __sigmask);
# 150 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/select.h" 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/select2.h" 1 3 4
# 24 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/select2.h" 3 4
extern long int __fdelt_chk (long int __d);
extern long int __fdelt_warn (long int __d)
  __attribute__((__warning__ ("bit outside of fd_set selected")));
#undef __FD_ELT
#define __FD_ELT(d) __extension__ ({ long int __d = (d); (__builtin_constant_p (__d) ? (0 <= __d && __d < __FD_SETSIZE ? (__d / __NFDBITS) : __fdelt_warn (__d)) : __fdelt_chk (__d)); })
# 151 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/select.h" 2 3 4


}
# 180 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/types.h" 2 3 4





typedef __blksize_t blksize_t;
#define __blksize_t_defined 
# 205 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/types.h" 3 4
typedef __blkcnt64_t blkcnt_t;
#define __blkcnt_t_defined 


typedef __fsblkcnt64_t fsblkcnt_t;
#define __fsblkcnt_t_defined 


typedef __fsfilcnt64_t fsfilcnt_t;
#define __fsfilcnt_t_defined 




typedef __blkcnt64_t blkcnt64_t;
typedef __fsblkcnt64_t fsblkcnt64_t;
typedef __fsfilcnt64_t fsfilcnt64_t;





# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/pthreadtypes.h" 1 3 4







# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 1 3 4
# 21 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE 64
# 32 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE_TIME64_COMPAT32 0
# 9 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/pthreadtypes.h" 2 3 4
# 27 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/pthreadtypes.h" 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/pthreadtypes-64.h" 1 3 4
# 20 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/pthreadtypes-64.h" 3 4
#define _BITS_PTHREADTYPES_COMMON_H 1


# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/thread-shared-types.h" 1 3 4
# 20 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/thread-shared-types.h" 3 4
#define _THREAD_SHARED_TYPES_H 1
# 44 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/thread-shared-types.h" 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/pthreadtypes-arch.h" 1 3 4







# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 1 3 4
# 21 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE 64
# 32 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE_TIME64_COMPAT32 0
# 9 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/pthreadtypes-arch.h" 2 3 4
# 27 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/pthreadtypes-arch.h" 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/pthreadtypes-arch-64.h" 1 3 4
# 20 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/pthreadtypes-arch-64.h" 3 4
#define _BITS_PTHREADTYPES_ARCH_H 1

# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/endian.h" 1 3 4







# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 1 3 4
# 21 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE 64
# 32 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE_TIME64_COMPAT32 0
# 9 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/endian.h" 2 3 4
# 23 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/pthreadtypes-arch-64.h" 2 3 4
# 33 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/pthreadtypes-arch-64.h" 3 4
#define __SIZEOF_PTHREAD_ATTR_T 64
#define __SIZEOF_PTHREAD_MUTEX_T 48
#define __SIZEOF_PTHREAD_MUTEXATTR_T 8
#define __SIZEOF_PTHREAD_CONDATTR_T 8
#define __SIZEOF_PTHREAD_RWLOCK_T 56
#define __SIZEOF_PTHREAD_BARRIER_T 32
#define __SIZEOF_PTHREAD_BARRIERATTR_T 8

#define __SIZEOF_PTHREAD_COND_T 48
#define __SIZEOF_PTHREAD_RWLOCKATTR_T 8

#define __LOCK_ALIGNMENT 
#define __ONCE_ALIGNMENT 
# 28 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/pthreadtypes-arch.h" 2 3 4
# 45 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/thread-shared-types.h" 2 3 4

# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/atomic_wide_counter.h" 1 3 4
# 20 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/atomic_wide_counter.h" 3 4
#define _BITS_ATOMIC_WIDE_COUNTER_H 




typedef union
{
  __extension__ unsigned long long int __value64;
  struct
  {
    unsigned int __low;
    unsigned int __high;
  } __value32;
} __atomic_wide_counter;
# 47 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/thread-shared-types.h" 2 3 4




typedef struct __pthread_internal_list
{
  struct __pthread_internal_list *__prev;
  struct __pthread_internal_list *__next;
} __pthread_list_t;

typedef struct __pthread_internal_slist
{
  struct __pthread_internal_slist *__next;
} __pthread_slist_t;
# 76 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/thread-shared-types.h" 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/struct_mutex.h" 1 3 4
# 20 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/struct_mutex.h" 3 4
#define _THREAD_MUTEX_INTERNAL_H 1






struct __pthread_mutex_s
{
  int __lock ;
  unsigned int __count;
  int __owner;

  unsigned int __nusers;
# 58 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/struct_mutex.h" 3 4
  int __kind;




  int __spins;
  __pthread_list_t __list;
#define __PTHREAD_MUTEX_HAVE_PREV 1
# 74 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/struct_mutex.h" 3 4
};


#define __PTHREAD_MUTEX_INITIALIZER(__kind) 0, 0, 0, 0, __kind, 0, { 0, 0 }
# 77 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/thread-shared-types.h" 2 3 4
# 89 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/thread-shared-types.h" 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/struct_rwlock.h" 1 3 4







# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 1 3 4
# 21 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE 64
# 32 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE_TIME64_COMPAT32 0
# 9 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/struct_rwlock.h" 2 3 4
# 27 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/struct_rwlock.h" 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/struct_rwlock-64.h" 1 3 4
# 21 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/struct_rwlock-64.h" 3 4
#define _RWLOCK_INTERNAL_H 

struct __pthread_rwlock_arch_t
{
  unsigned int __readers;
  unsigned int __writers;
  unsigned int __wrphase_futex;
  unsigned int __writers_futex;
  unsigned int __pad3;
  unsigned int __pad4;
  int __cur_writer;
  int __shared;
  unsigned long int __pad1;
  unsigned long int __pad2;
  unsigned int __flags;
};

#define __PTHREAD_RWLOCK_INITIALIZER(__flags) 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, __flags
# 28 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/struct_rwlock.h" 2 3 4
# 90 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/thread-shared-types.h" 2 3 4




struct __pthread_cond_s
{
  __atomic_wide_counter __wseq;
  __atomic_wide_counter __g1_start;
  unsigned int __g_refs[2] ;
  unsigned int __g_size[2];
  unsigned int __g1_orig_size;
  unsigned int __wrefs;
  unsigned int __g_signals[2];
};

typedef unsigned int __tss_t;
typedef unsigned long int __thrd_t;

typedef struct
{
  int __data ;
} __once_flag;

#define __ONCE_FLAG_INIT { 0 }
# 24 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/pthreadtypes-64.h" 2 3 4



typedef unsigned long int pthread_t;




typedef union
{
  char __size[8];
  int __align;
} pthread_mutexattr_t;




typedef union
{
  char __size[8];
  int __align;
} pthread_condattr_t;



typedef unsigned int pthread_key_t;



typedef int pthread_once_t;


union pthread_attr_t
{
  char __size[64];
  long int __align;
};

typedef union pthread_attr_t pthread_attr_t;
#define __have_pthread_attr_t 1



typedef union
{
  struct __pthread_mutex_s __data;
  char __size[48];
  long int __align;
} pthread_mutex_t;


typedef union
{
  struct __pthread_cond_s __data;
  char __size[48];
  __extension__ long long int __align;
} pthread_cond_t;





typedef union
{
  struct __pthread_rwlock_arch_t __data;
  char __size[56];
  long int __align;
} pthread_rwlock_t;

typedef union
{
  char __size[8];
  long int __align;
} pthread_rwlockattr_t;





typedef volatile int pthread_spinlock_t;




typedef union
{
  char __size[32];
  long int __align;
} pthread_barrier_t;

typedef union
{
  char __size[8];
  int __align;
} pthread_barrierattr_t;
# 28 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/pthreadtypes.h" 2 3 4
# 228 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/types.h" 2 3 4


}
# 396 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdlib.h" 2 3 4






extern long int random (void) noexcept (true);


extern void srandom (unsigned int __seed) noexcept (true);





extern char *initstate (unsigned int __seed, char *__statebuf,
   size_t __statelen) noexcept (true) __attribute__ ((__nonnull__ (2)));



extern char *setstate (char *__statebuf) noexcept (true) __attribute__ ((__nonnull__ (1)));







struct random_data
  {
    int32_t *fptr;
    int32_t *rptr;
    int32_t *state;
    int rand_type;
    int rand_deg;
    int rand_sep;
    int32_t *end_ptr;
  };

extern int random_r (struct random_data *__restrict __buf,
       int32_t *__restrict __result) noexcept (true) __attribute__ ((__nonnull__ (1, 2)));

extern int srandom_r (unsigned int __seed, struct random_data *__buf)
     noexcept (true) __attribute__ ((__nonnull__ (2)));

extern int initstate_r (unsigned int __seed, char *__restrict __statebuf,
   size_t __statelen,
   struct random_data *__restrict __buf)
     noexcept (true) __attribute__ ((__nonnull__ (2, 4)));

extern int setstate_r (char *__restrict __statebuf,
         struct random_data *__restrict __buf)
     noexcept (true) __attribute__ ((__nonnull__ (1, 2)));





extern int rand (void) noexcept (true);

extern void srand (unsigned int __seed) noexcept (true);



extern int rand_r (unsigned int *__seed) noexcept (true);







extern double drand48 (void) noexcept (true);
extern double erand48 (unsigned short int __xsubi[3]) noexcept (true) __attribute__ ((__nonnull__ (1)));


extern long int lrand48 (void) noexcept (true);
extern long int nrand48 (unsigned short int __xsubi[3])
     noexcept (true) __attribute__ ((__nonnull__ (1)));


extern long int mrand48 (void) noexcept (true);
extern long int jrand48 (unsigned short int __xsubi[3])
     noexcept (true) __attribute__ ((__nonnull__ (1)));


extern void srand48 (long int __seedval) noexcept (true);
extern unsigned short int *seed48 (unsigned short int __seed16v[3])
     noexcept (true) __attribute__ ((__nonnull__ (1)));
extern void lcong48 (unsigned short int __param[7]) noexcept (true) __attribute__ ((__nonnull__ (1)));





struct drand48_data
  {
    unsigned short int __x[3];
    unsigned short int __old_x[3];
    unsigned short int __c;
    unsigned short int __init;
    __extension__ unsigned long long int __a;

  };


extern int drand48_r (struct drand48_data *__restrict __buffer,
        double *__restrict __result) noexcept (true) __attribute__ ((__nonnull__ (1, 2)));
extern int erand48_r (unsigned short int __xsubi[3],
        struct drand48_data *__restrict __buffer,
        double *__restrict __result) noexcept (true) __attribute__ ((__nonnull__ (1, 2)));


extern int lrand48_r (struct drand48_data *__restrict __buffer,
        long int *__restrict __result)
     noexcept (true) __attribute__ ((__nonnull__ (1, 2)));
extern int nrand48_r (unsigned short int __xsubi[3],
        struct drand48_data *__restrict __buffer,
        long int *__restrict __result)
     noexcept (true) __attribute__ ((__nonnull__ (1, 2)));


extern int mrand48_r (struct drand48_data *__restrict __buffer,
        long int *__restrict __result)
     noexcept (true) __attribute__ ((__nonnull__ (1, 2)));
extern int jrand48_r (unsigned short int __xsubi[3],
        struct drand48_data *__restrict __buffer,
        long int *__restrict __result)
     noexcept (true) __attribute__ ((__nonnull__ (1, 2)));


extern int srand48_r (long int __seedval, struct drand48_data *__buffer)
     noexcept (true) __attribute__ ((__nonnull__ (2)));

extern int seed48_r (unsigned short int __seed16v[3],
       struct drand48_data *__buffer) noexcept (true) __attribute__ ((__nonnull__ (1, 2)));

extern int lcong48_r (unsigned short int __param[7],
        struct drand48_data *__buffer)
     noexcept (true) __attribute__ ((__nonnull__ (1, 2)));


extern __uint32_t arc4random (void)
     noexcept (true) __attribute__ ((__warn_unused_result__));


extern void arc4random_buf (void *__buf, size_t __size)
     noexcept (true) __attribute__ ((__nonnull__ (1)));



extern __uint32_t arc4random_uniform (__uint32_t __upper_bound)
     noexcept (true) __attribute__ ((__warn_unused_result__));




extern void *malloc (size_t __size) noexcept (true) __attribute__ ((__malloc__))
     __attribute__ ((__alloc_size__ (1))) __attribute__ ((__warn_unused_result__));

extern void *calloc (size_t __nmemb, size_t __size)
     noexcept (true) __attribute__ ((__malloc__)) __attribute__ ((__alloc_size__ (1, 2))) __attribute__ ((__warn_unused_result__));






extern void *realloc (void *__ptr, size_t __size)
     noexcept (true) __attribute__ ((__warn_unused_result__)) __attribute__ ((__alloc_size__ (2)));


extern void free (void *__ptr) noexcept (true);







extern void *reallocarray (void *__ptr, size_t __nmemb, size_t __size)
     noexcept (true) __attribute__ ((__warn_unused_result__))
     __attribute__ ((__alloc_size__ (2, 3)))
    __attribute__ ((__malloc__ (__builtin_free, 1)));


extern void *reallocarray (void *__ptr, size_t __nmemb, size_t __size)
     noexcept (true) __attribute__ ((__malloc__ (reallocarray, 1)));



# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/alloca.h" 1 3 4
# 19 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/alloca.h" 3 4
#define _ALLOCA_H 1



#define __need_size_t 
# 1 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 1 3 4
# 237 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 3 4
#undef __need_size_t
# 410 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 3 4
#undef __need_NULL
# 25 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/alloca.h" 2 3 4

extern "C" {


#undef alloca


extern void *alloca (size_t __size) noexcept (true);


#define alloca(size) __builtin_alloca (size)


}
# 588 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdlib.h" 2 3 4





extern void *valloc (size_t __size) noexcept (true) __attribute__ ((__malloc__))
     __attribute__ ((__alloc_size__ (1))) __attribute__ ((__warn_unused_result__));




extern int posix_memalign (void **__memptr, size_t __alignment, size_t __size)
     noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));




extern void *aligned_alloc (size_t __alignment, size_t __size)
     noexcept (true) __attribute__ ((__malloc__)) __attribute__ ((__alloc_align__ (1)))
     __attribute__ ((__alloc_size__ (2))) __attribute__ ((__warn_unused_result__));



extern void abort (void) noexcept (true) __attribute__ ((__noreturn__));



extern int atexit (void (*__func) (void)) noexcept (true) __attribute__ ((__nonnull__ (1)));




extern "C++" int at_quick_exit (void (*__func) (void))
     noexcept (true) __asm ("at_quick_exit") __attribute__ ((__nonnull__ (1)));
# 630 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdlib.h" 3 4
extern int on_exit (void (*__func) (int __status, void *__arg), void *__arg)
     noexcept (true) __attribute__ ((__nonnull__ (1)));





extern void exit (int __status) noexcept (true) __attribute__ ((__noreturn__));





extern void quick_exit (int __status) noexcept (true) __attribute__ ((__noreturn__));





extern void _Exit (int __status) noexcept (true) __attribute__ ((__noreturn__));




extern char *getenv (const char *__name) noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));




extern char *secure_getenv (const char *__name)
     noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));






extern int putenv (char *__string) noexcept (true) __attribute__ ((__nonnull__ (1)));





extern int setenv (const char *__name, const char *__value, int __replace)
     noexcept (true) __attribute__ ((__nonnull__ (2)));


extern int unsetenv (const char *__name) noexcept (true) __attribute__ ((__nonnull__ (1)));






extern int clearenv (void) noexcept (true);
# 695 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdlib.h" 3 4
extern char *mktemp (char *__template) noexcept (true) __attribute__ ((__nonnull__ (1)));
# 711 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdlib.h" 3 4
extern int mkstemp (char *__template) __asm__ ("" "mkstemp64")
     __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));





extern int mkstemp64 (char *__template) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
# 733 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdlib.h" 3 4
extern int mkstemps (char *__template, int __suffixlen) __asm__ ("" "mkstemps64")
                     __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));





extern int mkstemps64 (char *__template, int __suffixlen)
     __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
# 751 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdlib.h" 3 4
extern char *mkdtemp (char *__template) noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
# 765 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdlib.h" 3 4
extern int mkostemp (char *__template, int __flags) __asm__ ("" "mkostemp64")
     __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));





extern int mkostemp64 (char *__template, int __flags) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
# 786 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdlib.h" 3 4
extern int mkostemps (char *__template, int __suffixlen, int __flags) __asm__ ("" "mkostemps64")

     __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));





extern int mkostemps64 (char *__template, int __suffixlen, int __flags)
     __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
# 804 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdlib.h" 3 4
extern int system (const char *__command) __attribute__ ((__warn_unused_result__));





extern char *canonicalize_file_name (const char *__name)
     noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__malloc__))
     __attribute__ ((__malloc__ (__builtin_free, 1))) __attribute__ ((__warn_unused_result__));
# 821 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdlib.h" 3 4
extern char *realpath (const char *__restrict __name,
         char *__restrict __resolved) noexcept (true) __attribute__ ((__warn_unused_result__));





#define __COMPAR_FN_T 
typedef int (*__compar_fn_t) (const void *, const void *);


typedef __compar_fn_t comparison_fn_t;



typedef int (*__compar_d_fn_t) (const void *, const void *, void *);




extern void *bsearch (const void *__key, const void *__base,
        size_t __nmemb, size_t __size, __compar_fn_t __compar)
     __attribute__ ((__nonnull__ (1, 2, 5))) __attribute__ ((__warn_unused_result__));


# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/stdlib-bsearch.h" 1 3 4
# 19 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/stdlib-bsearch.h" 3 4
extern __inline __attribute__ ((__gnu_inline__)) void *
bsearch (const void *__key, const void *__base, size_t __nmemb, size_t __size,
  __compar_fn_t __compar)
{
  size_t __l, __u, __idx;
  const void *__p;
  int __comparison;

  __l = 0;
  __u = __nmemb;
  while (__l < __u)
    {
      __idx = (__l + __u) / 2;
      __p = (const void *) (((const char *) __base) + (__idx * __size));
      __comparison = (*__compar) (__key, __p);
      if (__comparison < 0)
 __u = __idx;
      else if (__comparison > 0)
 __l = __idx + 1;
      else
 {

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wcast-qual"

   return (void *) __p;

#pragma GCC diagnostic pop

 }
    }

  return __null;
}
# 847 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdlib.h" 2 3 4




extern void qsort (void *__base, size_t __nmemb, size_t __size,
     __compar_fn_t __compar) __attribute__ ((__nonnull__ (1, 4)));

extern void qsort_r (void *__base, size_t __nmemb, size_t __size,
       __compar_d_fn_t __compar, void *__arg)
  __attribute__ ((__nonnull__ (1, 4)));




extern int abs (int __x) noexcept (true) __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__));
extern long int labs (long int __x) noexcept (true) __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__));


__extension__ extern long long int llabs (long long int __x)
     noexcept (true) __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__));






extern div_t div (int __numer, int __denom)
     noexcept (true) __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__));
extern ldiv_t ldiv (long int __numer, long int __denom)
     noexcept (true) __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__));


__extension__ extern lldiv_t lldiv (long long int __numer,
        long long int __denom)
     noexcept (true) __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__));
# 893 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdlib.h" 3 4
extern char *ecvt (double __value, int __ndigit, int *__restrict __decpt,
     int *__restrict __sign) noexcept (true) __attribute__ ((__nonnull__ (3, 4))) __attribute__ ((__warn_unused_result__));




extern char *fcvt (double __value, int __ndigit, int *__restrict __decpt,
     int *__restrict __sign) noexcept (true) __attribute__ ((__nonnull__ (3, 4))) __attribute__ ((__warn_unused_result__));




extern char *gcvt (double __value, int __ndigit, char *__buf)
     noexcept (true) __attribute__ ((__nonnull__ (3))) __attribute__ ((__warn_unused_result__));




extern char *qecvt (long double __value, int __ndigit,
      int *__restrict __decpt, int *__restrict __sign)
     noexcept (true) __attribute__ ((__nonnull__ (3, 4))) __attribute__ ((__warn_unused_result__));
extern char *qfcvt (long double __value, int __ndigit,
      int *__restrict __decpt, int *__restrict __sign)
     noexcept (true) __attribute__ ((__nonnull__ (3, 4))) __attribute__ ((__warn_unused_result__));
extern char *qgcvt (long double __value, int __ndigit, char *__buf)
     noexcept (true) __attribute__ ((__nonnull__ (3))) __attribute__ ((__warn_unused_result__));




extern int ecvt_r (double __value, int __ndigit, int *__restrict __decpt,
     int *__restrict __sign, char *__restrict __buf,
     size_t __len) noexcept (true) __attribute__ ((__nonnull__ (3, 4, 5)));
extern int fcvt_r (double __value, int __ndigit, int *__restrict __decpt,
     int *__restrict __sign, char *__restrict __buf,
     size_t __len) noexcept (true) __attribute__ ((__nonnull__ (3, 4, 5)));

extern int qecvt_r (long double __value, int __ndigit,
      int *__restrict __decpt, int *__restrict __sign,
      char *__restrict __buf, size_t __len)
     noexcept (true) __attribute__ ((__nonnull__ (3, 4, 5)));
extern int qfcvt_r (long double __value, int __ndigit,
      int *__restrict __decpt, int *__restrict __sign,
      char *__restrict __buf, size_t __len)
     noexcept (true) __attribute__ ((__nonnull__ (3, 4, 5)));





extern int mblen (const char *__s, size_t __n) noexcept (true);


extern int mbtowc (wchar_t *__restrict __pwc,
     const char *__restrict __s, size_t __n) noexcept (true);


extern int wctomb (char *__s, wchar_t __wchar) noexcept (true);



extern size_t mbstowcs (wchar_t *__restrict __pwcs,
   const char *__restrict __s, size_t __n) noexcept (true)
    __attribute__ ((__access__ (__read_only__, 2)));

extern size_t wcstombs (char *__restrict __s,
   const wchar_t *__restrict __pwcs, size_t __n)
     noexcept (true)
  __attribute__ ((__access__ (__write_only__, 1, 3)))
  __attribute__ ((__access__ (__read_only__, 2)));






extern int rpmatch (const char *__response) noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
# 980 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdlib.h" 3 4
extern int getsubopt (char **__restrict __optionp,
        char *const *__restrict __tokens,
        char **__restrict __valuep)
     noexcept (true) __attribute__ ((__nonnull__ (1, 2, 3))) __attribute__ ((__warn_unused_result__));







extern int posix_openpt (int __oflag) __attribute__ ((__warn_unused_result__));







extern int grantpt (int __fd) noexcept (true);



extern int unlockpt (int __fd) noexcept (true);




extern char *ptsname (int __fd) noexcept (true) __attribute__ ((__warn_unused_result__));






extern int ptsname_r (int __fd, char *__buf, size_t __buflen)
     noexcept (true) __attribute__ ((__nonnull__ (2))) __attribute__ ((__access__ (__write_only__, 2, 3)));


extern int getpt (void);






extern int getloadavg (double __loadavg[], int __nelem)
     noexcept (true) __attribute__ ((__nonnull__ (1)));
# 1036 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdlib.h" 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/stdlib-float.h" 1 3 4
# 24 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/stdlib-float.h" 3 4
extern __inline __attribute__ ((__gnu_inline__)) double
__attribute__ ((__leaf__)) atof (const char *__nptr) noexcept (true)
{
  return strtod (__nptr, (char **) __null);
}
# 1037 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdlib.h" 2 3 4



# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/stdlib.h" 1 3 4
# 23 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/stdlib.h" 3 4
extern char *__realpath_chk (const char *__restrict __name,
        char *__restrict __resolved,
        size_t __resolvedlen) noexcept (true) __attribute__ ((__warn_unused_result__));
extern char *__realpath_alias (const char *__restrict __name, char *__restrict __resolved) noexcept (true) __asm__ ("" "realpath")

                                                 __attribute__ ((__warn_unused_result__));
extern char *__realpath_chk_warn (const char *__restrict __name, char *__restrict __resolved, size_t __resolvedlen) noexcept (true) __asm__ ("" "__realpath_chk")


                                                __attribute__ ((__warn_unused_result__))
     __attribute__((__warning__ ("second argument of realpath must be either NULL or at " "least PATH_MAX bytes long buffer")))
                                      ;

extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) char *
__attribute__ ((__leaf__)) realpath (const char *__restrict __name, char *__restrict __resolved) noexcept (true)
{
  size_t sz = __builtin_object_size (__resolved, 2 > 1);

  if (sz == (size_t) -1)
    return __realpath_alias (__name, __resolved);


  if ((((__typeof (4096)) 0 < (__typeof (4096)) -1 || (__builtin_constant_p (4096) && (4096) > 0)) && __builtin_constant_p ((((long unsigned int) (4096)) <= (sz) / (sizeof (char)))) && !(((long unsigned int) (4096)) <= (sz) / (sizeof (char)))))
    return __realpath_chk_warn (__name, __resolved, sz);

  return __realpath_chk (__name, __resolved, sz);
}


extern int __ptsname_r_chk (int __fd, char *__buf, size_t __buflen,
       size_t __nreal) noexcept (true) __attribute__ ((__nonnull__ (2)))
    __attribute__ ((__access__ (__write_only__, 2, 3)));
extern int __ptsname_r_alias (int __fd, char *__buf, size_t __buflen) noexcept (true) __asm__ ("" "ptsname_r")

     __attribute__ ((__nonnull__ (2))) __attribute__ ((__access__ (__write_only__, 2, 3)));
extern int __ptsname_r_chk_warn (int __fd, char *__buf, size_t __buflen, size_t __nreal) noexcept (true) __asm__ ("" "__ptsname_r_chk")


     __attribute__ ((__nonnull__ (2))) __attribute__((__warning__ ("ptsname_r called with buflen bigger than " "size of buf")))
                   ;

extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
__attribute__ ((__leaf__)) ptsname_r (int __fd, char *__buf, size_t __buflen) noexcept (true)
{
  return (((__builtin_constant_p (__builtin_object_size (__buf, 2 > 1)) && (__builtin_object_size (__buf, 2 > 1)) == (long unsigned int) -1) || (((__typeof (__buflen)) 0 < (__typeof (__buflen)) -1 || (__builtin_constant_p (__buflen) && (__buflen) > 0)) && __builtin_constant_p ((((long unsigned int) (__buflen)) <= ((__builtin_object_size (__buf, 2 > 1))) / ((sizeof (char))))) && (((long unsigned int) (__buflen)) <= ((__builtin_object_size (__buf, 2 > 1))) / ((sizeof (char)))))) ? __ptsname_r_alias (__fd, __buf, __buflen) : ((((__typeof (__buflen)) 0 < (__typeof (__buflen)) -1 || (__builtin_constant_p (__buflen) && (__buflen) > 0)) && __builtin_constant_p ((((long unsigned int) (__buflen)) <= (__builtin_object_size (__buf, 2 > 1)) / (sizeof (char)))) && !(((long unsigned int) (__buflen)) <= (__builtin_object_size (__buf, 2 > 1)) / (sizeof (char)))) ? __ptsname_r_chk_warn (__fd, __buf, __buflen, __builtin_object_size (__buf, 2 > 1)) : __ptsname_r_chk (__fd, __buf, __buflen, __builtin_object_size (__buf, 2 > 1))))

                           ;
}


extern int __wctomb_chk (char *__s, wchar_t __wchar, size_t __buflen)
  noexcept (true) __attribute__ ((__warn_unused_result__));
extern int __wctomb_alias (char *__s, wchar_t __wchar) noexcept (true) __asm__ ("" "wctomb")
              __attribute__ ((__warn_unused_result__));

extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) int
__attribute__ ((__leaf__)) wctomb (char *__s, wchar_t __wchar) noexcept (true)
{



#define __STDLIB_MB_LEN_MAX 16



  if (__builtin_object_size (__s, 2 > 1) != (size_t) -1
      && 16 > __builtin_object_size (__s, 2 > 1))
    return __wctomb_chk (__s, __wchar, __builtin_object_size (__s, 2 > 1));
  return __wctomb_alias (__s, __wchar);
}


extern size_t __mbstowcs_chk (wchar_t *__restrict __dst,
         const char *__restrict __src,
         size_t __len, size_t __dstlen) noexcept (true)
    __attribute__ ((__access__ (__write_only__, 1, 3))) __attribute__ ((__access__ (__read_only__, 2)));
extern size_t __mbstowcs_nulldst (wchar_t *__restrict __dst, const char *__restrict __src, size_t __len) noexcept (true) __asm__ ("" "mbstowcs")



    __attribute__ ((__access__ (__read_only__, 2)));
extern size_t __mbstowcs_alias (wchar_t *__restrict __dst, const char *__restrict __src, size_t __len) noexcept (true) __asm__ ("" "mbstowcs")



    __attribute__ ((__access__ (__write_only__, 1, 3))) __attribute__ ((__access__ (__read_only__, 2)));
extern size_t __mbstowcs_chk_warn (wchar_t *__restrict __dst, const char *__restrict __src, size_t __len, size_t __dstlen) noexcept (true) __asm__ ("" "__mbstowcs_chk")



     __attribute__((__warning__ ("mbstowcs called with dst buffer smaller than len " "* sizeof (wchar_t)")))
                        ;

extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) size_t
__attribute__ ((__leaf__)) mbstowcs (wchar_t *__restrict __dst, const char *__restrict __src, size_t __len) noexcept (true)

{
  if (__builtin_constant_p (__dst == __null) && __dst == __null)
    return __mbstowcs_nulldst (__dst, __src, __len);
  else
    return (((__builtin_constant_p (__builtin_object_size (__dst, 2 > 1)) && (__builtin_object_size (__dst, 2 > 1)) == (long unsigned int) -1) || (((__typeof (__len)) 0 < (__typeof (__len)) -1 || (__builtin_constant_p (__len) && (__len) > 0)) && __builtin_constant_p ((((long unsigned int) (__len)) <= ((__builtin_object_size (__dst, 2 > 1))) / ((sizeof (wchar_t))))) && (((long unsigned int) (__len)) <= ((__builtin_object_size (__dst, 2 > 1))) / ((sizeof (wchar_t)))))) ? __mbstowcs_alias (__dst, __src, __len) : ((((__typeof (__len)) 0 < (__typeof (__len)) -1 || (__builtin_constant_p (__len) && (__len) > 0)) && __builtin_constant_p ((((long unsigned int) (__len)) <= (__builtin_object_size (__dst, 2 > 1)) / (sizeof (wchar_t)))) && !(((long unsigned int) (__len)) <= (__builtin_object_size (__dst, 2 > 1)) / (sizeof (wchar_t)))) ? __mbstowcs_chk_warn (__dst, __src, __len, (__builtin_object_size (__dst, 2 > 1)) / (sizeof (wchar_t))) : __mbstowcs_chk (__dst, __src, __len, (__builtin_object_size (__dst, 2 > 1)) / (sizeof (wchar_t)))))
                                                      ;
}

extern size_t __wcstombs_chk (char *__restrict __dst,
         const wchar_t *__restrict __src,
         size_t __len, size_t __dstlen) noexcept (true)
  __attribute__ ((__access__ (__write_only__, 1, 3))) __attribute__ ((__access__ (__read_only__, 2)));
extern size_t __wcstombs_alias (char *__restrict __dst, const wchar_t *__restrict __src, size_t __len) noexcept (true) __asm__ ("" "wcstombs")



  __attribute__ ((__access__ (__write_only__, 1, 3))) __attribute__ ((__access__ (__read_only__, 2)));
extern size_t __wcstombs_chk_warn (char *__restrict __dst, const wchar_t *__restrict __src, size_t __len, size_t __dstlen) noexcept (true) __asm__ ("" "__wcstombs_chk")



     __attribute__((__warning__ ("wcstombs called with dst buffer smaller than len")));

extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) size_t
__attribute__ ((__leaf__)) wcstombs (char *__restrict __dst, const wchar_t *__restrict __src, size_t __len) noexcept (true)

{
  return (((__builtin_constant_p (__builtin_object_size (__dst, 2 > 1)) && (__builtin_object_size (__dst, 2 > 1)) == (long unsigned int) -1) || (((__typeof (__len)) 0 < (__typeof (__len)) -1 || (__builtin_constant_p (__len) && (__len) > 0)) && __builtin_constant_p ((((long unsigned int) (__len)) <= ((__builtin_object_size (__dst, 2 > 1))) / ((sizeof (char))))) && (((long unsigned int) (__len)) <= ((__builtin_object_size (__dst, 2 > 1))) / ((sizeof (char)))))) ? __wcstombs_alias (__dst, __src, __len) : ((((__typeof (__len)) 0 < (__typeof (__len)) -1 || (__builtin_constant_p (__len) && (__len) > 0)) && __builtin_constant_p ((((long unsigned int) (__len)) <= (__builtin_object_size (__dst, 2 > 1)) / (sizeof (char)))) && !(((long unsigned int) (__len)) <= (__builtin_object_size (__dst, 2 > 1)) / (sizeof (char)))) ? __wcstombs_chk_warn (__dst, __src, __len, __builtin_object_size (__dst, 2 > 1)) : __wcstombs_chk (__dst, __src, __len, __builtin_object_size (__dst, 2 > 1))))

                         ;
}
# 1041 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdlib.h" 2 3 4


# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/floatn.h" 1 3 4







# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 1 3 4
# 21 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE 64
# 32 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE_TIME64_COMPAT32 0
# 9 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/floatn.h" 2 3 4
# 1044 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdlib.h" 2 3 4




}
# 39 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/std_abs.h" 2 3



#undef _GLIBCXX_INCLUDE_NEXT_C_HEADERS

#undef abs

extern "C++"
{
namespace std __attribute__ ((__visibility__ ("default")))
{


  using ::abs;


  inline long
  abs(long __i) { return __builtin_labs(__i); }



  inline long long
  abs(long long __x) { return __builtin_llabs (__x); }
# 70 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/std_abs.h" 3
  inline constexpr double
  abs(double __x)
  { return __builtin_fabs(__x); }

  inline constexpr float
  abs(float __x)
  { return __builtin_fabsf(__x); }

  inline constexpr long double
  abs(long double __x)
  { return __builtin_fabsl(__x); }
# 141 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/std_abs.h" 3

}
}
# 50 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cmath" 2 3


#define _GLIBCXX_CMATH 1


#undef div
#undef acos
#undef asin
#undef atan
#undef atan2
#undef ceil
#undef cos
#undef cosh
#undef exp
#undef fabs
#undef floor
#undef fmod
#undef frexp
#undef ldexp
#undef log
#undef log10
#undef modf
#undef pow
#undef sin
#undef sinh
#undef sqrt
#undef tan
#undef tanh

extern "C++"
{
namespace std __attribute__ ((__visibility__ ("default")))
{


  using ::acos;


  inline constexpr float
  acos(float __x)
  { return __builtin_acosf(__x); }

  inline constexpr long double
  acos(long double __x)
  { return __builtin_acosl(__x); }


  template<typename _Tp>
    inline constexpr
    typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
                                    double>::__type
    acos(_Tp __x)
    { return __builtin_acos(__x); }

  using ::asin;


  inline constexpr float
  asin(float __x)
  { return __builtin_asinf(__x); }

  inline constexpr long double
  asin(long double __x)
  { return __builtin_asinl(__x); }


  template<typename _Tp>
    inline constexpr
    typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
                                    double>::__type
    asin(_Tp __x)
    { return __builtin_asin(__x); }

  using ::atan;


  inline constexpr float
  atan(float __x)
  { return __builtin_atanf(__x); }

  inline constexpr long double
  atan(long double __x)
  { return __builtin_atanl(__x); }


  template<typename _Tp>
    inline constexpr
    typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
                                    double>::__type
    atan(_Tp __x)
    { return __builtin_atan(__x); }

  using ::atan2;


  inline constexpr float
  atan2(float __y, float __x)
  { return __builtin_atan2f(__y, __x); }

  inline constexpr long double
  atan2(long double __y, long double __x)
  { return __builtin_atan2l(__y, __x); }


  template<typename _Tp, typename _Up>
    inline constexpr
    typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
    atan2(_Tp __y, _Up __x)
    {
      typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
      return atan2(__type(__y), __type(__x));
    }

  using ::ceil;


  inline constexpr float
  ceil(float __x)
  { return __builtin_ceilf(__x); }

  inline constexpr long double
  ceil(long double __x)
  { return __builtin_ceill(__x); }


  template<typename _Tp>
    inline constexpr
    typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
                                    double>::__type
    ceil(_Tp __x)
    { return __builtin_ceil(__x); }

  using ::cos;


  inline constexpr float
  cos(float __x)
  { return __builtin_cosf(__x); }

  inline constexpr long double
  cos(long double __x)
  { return __builtin_cosl(__x); }


  template<typename _Tp>
    inline constexpr
    typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
                                    double>::__type
    cos(_Tp __x)
    { return __builtin_cos(__x); }

  using ::cosh;


  inline constexpr float
  cosh(float __x)
  { return __builtin_coshf(__x); }

  inline constexpr long double
  cosh(long double __x)
  { return __builtin_coshl(__x); }


  template<typename _Tp>
    inline constexpr
    typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
                                    double>::__type
    cosh(_Tp __x)
    { return __builtin_cosh(__x); }

  using ::exp;


  inline constexpr float
  exp(float __x)
  { return __builtin_expf(__x); }

  inline constexpr long double
  exp(long double __x)
  { return __builtin_expl(__x); }


  template<typename _Tp>
    inline constexpr
    typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
                                    double>::__type
    exp(_Tp __x)
    { return __builtin_exp(__x); }

  using ::fabs;


  inline constexpr float
  fabs(float __x)
  { return __builtin_fabsf(__x); }

  inline constexpr long double
  fabs(long double __x)
  { return __builtin_fabsl(__x); }


  template<typename _Tp>
    inline constexpr
    typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
                                    double>::__type
    fabs(_Tp __x)
    { return __builtin_fabs(__x); }

  using ::floor;


  inline constexpr float
  floor(float __x)
  { return __builtin_floorf(__x); }

  inline constexpr long double
  floor(long double __x)
  { return __builtin_floorl(__x); }


  template<typename _Tp>
    inline constexpr
    typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
                                    double>::__type
    floor(_Tp __x)
    { return __builtin_floor(__x); }

  using ::fmod;


  inline constexpr float
  fmod(float __x, float __y)
  { return __builtin_fmodf(__x, __y); }

  inline constexpr long double
  fmod(long double __x, long double __y)
  { return __builtin_fmodl(__x, __y); }


  template<typename _Tp, typename _Up>
    inline constexpr
    typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
    fmod(_Tp __x, _Up __y)
    {
      typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
      return fmod(__type(__x), __type(__y));
    }

  using ::frexp;


  inline float
  frexp(float __x, int* __exp)
  { return __builtin_frexpf(__x, __exp); }

  inline long double
  frexp(long double __x, int* __exp)
  { return __builtin_frexpl(__x, __exp); }


  template<typename _Tp>
    inline constexpr
    typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
                                    double>::__type
    frexp(_Tp __x, int* __exp)
    { return __builtin_frexp(__x, __exp); }

  using ::ldexp;


  inline constexpr float
  ldexp(float __x, int __exp)
  { return __builtin_ldexpf(__x, __exp); }

  inline constexpr long double
  ldexp(long double __x, int __exp)
  { return __builtin_ldexpl(__x, __exp); }


  template<typename _Tp>
    inline constexpr
    typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
                                    double>::__type
    ldexp(_Tp __x, int __exp)
    { return __builtin_ldexp(__x, __exp); }

  using ::log;


  inline constexpr float
  log(float __x)
  { return __builtin_logf(__x); }

  inline constexpr long double
  log(long double __x)
  { return __builtin_logl(__x); }


  template<typename _Tp>
    inline constexpr
    typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
                                    double>::__type
    log(_Tp __x)
    { return __builtin_log(__x); }

  using ::log10;


  inline constexpr float
  log10(float __x)
  { return __builtin_log10f(__x); }

  inline constexpr long double
  log10(long double __x)
  { return __builtin_log10l(__x); }


  template<typename _Tp>
    inline constexpr
    typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
                                    double>::__type
    log10(_Tp __x)
    { return __builtin_log10(__x); }

  using ::modf;


  inline float
  modf(float __x, float* __iptr)
  { return __builtin_modff(__x, __iptr); }

  inline long double
  modf(long double __x, long double* __iptr)
  { return __builtin_modfl(__x, __iptr); }


  using ::pow;


  inline constexpr float
  pow(float __x, float __y)
  { return __builtin_powf(__x, __y); }

  inline constexpr long double
  pow(long double __x, long double __y)
  { return __builtin_powl(__x, __y); }
# 414 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cmath" 3
  template<typename _Tp, typename _Up>
    inline constexpr
    typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
    pow(_Tp __x, _Up __y)
    {
      typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
      return pow(__type(__x), __type(__y));
    }

  using ::sin;


  inline constexpr float
  sin(float __x)
  { return __builtin_sinf(__x); }

  inline constexpr long double
  sin(long double __x)
  { return __builtin_sinl(__x); }


  template<typename _Tp>
    inline constexpr
    typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
                                    double>::__type
    sin(_Tp __x)
    { return __builtin_sin(__x); }

  using ::sinh;


  inline constexpr float
  sinh(float __x)
  { return __builtin_sinhf(__x); }

  inline constexpr long double
  sinh(long double __x)
  { return __builtin_sinhl(__x); }


  template<typename _Tp>
    inline constexpr
    typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
                                    double>::__type
    sinh(_Tp __x)
    { return __builtin_sinh(__x); }

  using ::sqrt;


  inline constexpr float
  sqrt(float __x)
  { return __builtin_sqrtf(__x); }

  inline constexpr long double
  sqrt(long double __x)
  { return __builtin_sqrtl(__x); }


  template<typename _Tp>
    inline constexpr
    typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
                                    double>::__type
    sqrt(_Tp __x)
    { return __builtin_sqrt(__x); }

  using ::tan;


  inline constexpr float
  tan(float __x)
  { return __builtin_tanf(__x); }

  inline constexpr long double
  tan(long double __x)
  { return __builtin_tanl(__x); }


  template<typename _Tp>
    inline constexpr
    typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
                                    double>::__type
    tan(_Tp __x)
    { return __builtin_tan(__x); }

  using ::tanh;


  inline constexpr float
  tanh(float __x)
  { return __builtin_tanhf(__x); }

  inline constexpr long double
  tanh(long double __x)
  { return __builtin_tanhl(__x); }


  template<typename _Tp>
    inline constexpr
    typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
                                    double>::__type
    tanh(_Tp __x)
    { return __builtin_tanh(__x); }
# 1080 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cmath" 3
#undef fpclassify
#undef isfinite
#undef isinf
#undef isnan
#undef isnormal
#undef signbit
#undef isgreater
#undef isgreaterequal
#undef isless
#undef islessequal
#undef islessgreater
#undef isunordered




  constexpr int
  fpclassify(float __x)
  { return __builtin_fpclassify(0, 1, 4,
    3, 2, __x); }

  constexpr int
  fpclassify(double __x)
  { return __builtin_fpclassify(0, 1, 4,
    3, 2, __x); }

  constexpr int
  fpclassify(long double __x)
  { return __builtin_fpclassify(0, 1, 4,
    3, 2, __x); }



  template<typename _Tp>
    constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
                                              int>::__type
    fpclassify(_Tp __x)
    { return __x != 0 ? 4 : 2; }



  constexpr bool
  isfinite(float __x)
  { return __builtin_isfinite(__x); }

  constexpr bool
  isfinite(double __x)
  { return __builtin_isfinite(__x); }

  constexpr bool
  isfinite(long double __x)
  { return __builtin_isfinite(__x); }



  template<typename _Tp>
    constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
                                              bool>::__type
    isfinite(_Tp __x)
    { return true; }



  constexpr bool
  isinf(float __x)
  { return __builtin_isinf(__x); }





  constexpr bool
  isinf(double __x)
  { return __builtin_isinf(__x); }


  constexpr bool
  isinf(long double __x)
  { return __builtin_isinf(__x); }



  template<typename _Tp>
    constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
                                              bool>::__type
    isinf(_Tp __x)
    { return false; }



  constexpr bool
  isnan(float __x)
  { return __builtin_isnan(__x); }





  constexpr bool
  isnan(double __x)
  { return __builtin_isnan(__x); }


  constexpr bool
  isnan(long double __x)
  { return __builtin_isnan(__x); }



  template<typename _Tp>
    constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
                                              bool>::__type
    isnan(_Tp __x)
    { return false; }



  constexpr bool
  isnormal(float __x)
  { return __builtin_isnormal(__x); }

  constexpr bool
  isnormal(double __x)
  { return __builtin_isnormal(__x); }

  constexpr bool
  isnormal(long double __x)
  { return __builtin_isnormal(__x); }



  template<typename _Tp>
    constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
                                              bool>::__type
    isnormal(_Tp __x)
    { return __x != 0 ? true : false; }




  constexpr bool
  signbit(float __x)
  { return __builtin_signbit(__x); }

  constexpr bool
  signbit(double __x)
  { return __builtin_signbit(__x); }

  constexpr bool
  signbit(long double __x)
  { return __builtin_signbit(__x); }



  template<typename _Tp>
    constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
                                              bool>::__type
    signbit(_Tp __x)
    { return __x < 0 ? true : false; }



  constexpr bool
  isgreater(float __x, float __y)
  { return __builtin_isgreater(__x, __y); }

  constexpr bool
  isgreater(double __x, double __y)
  { return __builtin_isgreater(__x, __y); }

  constexpr bool
  isgreater(long double __x, long double __y)
  { return __builtin_isgreater(__x, __y); }



  template<typename _Tp, typename _Up>
    constexpr typename
    __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
       && __is_arithmetic<_Up>::__value), bool>::__type
    isgreater(_Tp __x, _Up __y)
    {
      typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
      return __builtin_isgreater(__type(__x), __type(__y));
    }



  constexpr bool
  isgreaterequal(float __x, float __y)
  { return __builtin_isgreaterequal(__x, __y); }

  constexpr bool
  isgreaterequal(double __x, double __y)
  { return __builtin_isgreaterequal(__x, __y); }

  constexpr bool
  isgreaterequal(long double __x, long double __y)
  { return __builtin_isgreaterequal(__x, __y); }



  template<typename _Tp, typename _Up>
    constexpr typename
    __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
       && __is_arithmetic<_Up>::__value), bool>::__type
    isgreaterequal(_Tp __x, _Up __y)
    {
      typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
      return __builtin_isgreaterequal(__type(__x), __type(__y));
    }



  constexpr bool
  isless(float __x, float __y)
  { return __builtin_isless(__x, __y); }

  constexpr bool
  isless(double __x, double __y)
  { return __builtin_isless(__x, __y); }

  constexpr bool
  isless(long double __x, long double __y)
  { return __builtin_isless(__x, __y); }



  template<typename _Tp, typename _Up>
    constexpr typename
    __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
       && __is_arithmetic<_Up>::__value), bool>::__type
    isless(_Tp __x, _Up __y)
    {
      typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
      return __builtin_isless(__type(__x), __type(__y));
    }



  constexpr bool
  islessequal(float __x, float __y)
  { return __builtin_islessequal(__x, __y); }

  constexpr bool
  islessequal(double __x, double __y)
  { return __builtin_islessequal(__x, __y); }

  constexpr bool
  islessequal(long double __x, long double __y)
  { return __builtin_islessequal(__x, __y); }



  template<typename _Tp, typename _Up>
    constexpr typename
    __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
       && __is_arithmetic<_Up>::__value), bool>::__type
    islessequal(_Tp __x, _Up __y)
    {
      typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
      return __builtin_islessequal(__type(__x), __type(__y));
    }



  constexpr bool
  islessgreater(float __x, float __y)
  { return __builtin_islessgreater(__x, __y); }

  constexpr bool
  islessgreater(double __x, double __y)
  { return __builtin_islessgreater(__x, __y); }

  constexpr bool
  islessgreater(long double __x, long double __y)
  { return __builtin_islessgreater(__x, __y); }



  template<typename _Tp, typename _Up>
    constexpr typename
    __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
       && __is_arithmetic<_Up>::__value), bool>::__type
    islessgreater(_Tp __x, _Up __y)
    {
      typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
      return __builtin_islessgreater(__type(__x), __type(__y));
    }



  constexpr bool
  isunordered(float __x, float __y)
  { return __builtin_isunordered(__x, __y); }

  constexpr bool
  isunordered(double __x, double __y)
  { return __builtin_isunordered(__x, __y); }

  constexpr bool
  isunordered(long double __x, long double __y)
  { return __builtin_isunordered(__x, __y); }



  template<typename _Tp, typename _Up>
    constexpr typename
    __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
       && __is_arithmetic<_Up>::__value), bool>::__type
    isunordered(_Tp __x, _Up __y)
    {
      typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
      return __builtin_isunordered(__type(__x), __type(__y));
    }
# 1772 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cmath" 3
#undef acosh
#undef acoshf
#undef acoshl
#undef asinh
#undef asinhf
#undef asinhl
#undef atanh
#undef atanhf
#undef atanhl
#undef cbrt
#undef cbrtf
#undef cbrtl
#undef copysign
#undef copysignf
#undef copysignl
#undef erf
#undef erff
#undef erfl
#undef erfc
#undef erfcf
#undef erfcl
#undef exp2
#undef exp2f
#undef exp2l
#undef expm1
#undef expm1f
#undef expm1l
#undef fdim
#undef fdimf
#undef fdiml
#undef fma
#undef fmaf
#undef fmal
#undef fmax
#undef fmaxf
#undef fmaxl
#undef fmin
#undef fminf
#undef fminl
#undef hypot
#undef hypotf
#undef hypotl
#undef ilogb
#undef ilogbf
#undef ilogbl
#undef lgamma
#undef lgammaf
#undef lgammal

#undef llrint
#undef llrintf
#undef llrintl
#undef llround
#undef llroundf
#undef llroundl

#undef log1p
#undef log1pf
#undef log1pl
#undef log2
#undef log2f
#undef log2l
#undef logb
#undef logbf
#undef logbl
#undef lrint
#undef lrintf
#undef lrintl
#undef lround
#undef lroundf
#undef lroundl
#undef nan
#undef nanf
#undef nanl
#undef nearbyint
#undef nearbyintf
#undef nearbyintl
#undef nextafter
#undef nextafterf
#undef nextafterl
#undef nexttoward
#undef nexttowardf
#undef nexttowardl
#undef remainder
#undef remainderf
#undef remainderl
#undef remquo
#undef remquof
#undef remquol
#undef rint
#undef rintf
#undef rintl
#undef round
#undef roundf
#undef roundl
#undef scalbln
#undef scalblnf
#undef scalblnl
#undef scalbn
#undef scalbnf
#undef scalbnl
#undef tgamma
#undef tgammaf
#undef tgammal
#undef trunc
#undef truncf
#undef truncl


  using ::double_t;
  using ::float_t;


  using ::acosh;
  using ::acoshf;
  using ::acoshl;

  using ::asinh;
  using ::asinhf;
  using ::asinhl;

  using ::atanh;
  using ::atanhf;
  using ::atanhl;

  using ::cbrt;
  using ::cbrtf;
  using ::cbrtl;

  using ::copysign;
  using ::copysignf;
  using ::copysignl;

  using ::erf;
  using ::erff;
  using ::erfl;

  using ::erfc;
  using ::erfcf;
  using ::erfcl;

  using ::exp2;
  using ::exp2f;
  using ::exp2l;

  using ::expm1;
  using ::expm1f;
  using ::expm1l;

  using ::fdim;
  using ::fdimf;
  using ::fdiml;

  using ::fma;
  using ::fmaf;
  using ::fmal;

  using ::fmax;
  using ::fmaxf;
  using ::fmaxl;

  using ::fmin;
  using ::fminf;
  using ::fminl;

  using ::hypot;
  using ::hypotf;
  using ::hypotl;

  using ::ilogb;
  using ::ilogbf;
  using ::ilogbl;

  using ::lgamma;
  using ::lgammaf;
  using ::lgammal;


  using ::llrint;
  using ::llrintf;
  using ::llrintl;

  using ::llround;
  using ::llroundf;
  using ::llroundl;


  using ::log1p;
  using ::log1pf;
  using ::log1pl;

  using ::log2;
  using ::log2f;
  using ::log2l;

  using ::logb;
  using ::logbf;
  using ::logbl;

  using ::lrint;
  using ::lrintf;
  using ::lrintl;

  using ::lround;
  using ::lroundf;
  using ::lroundl;

  using ::nan;
  using ::nanf;
  using ::nanl;

  using ::nearbyint;
  using ::nearbyintf;
  using ::nearbyintl;

  using ::nextafter;
  using ::nextafterf;
  using ::nextafterl;

  using ::nexttoward;
  using ::nexttowardf;
  using ::nexttowardl;

  using ::remainder;
  using ::remainderf;
  using ::remainderl;

  using ::remquo;
  using ::remquof;
  using ::remquol;

  using ::rint;
  using ::rintf;
  using ::rintl;

  using ::round;
  using ::roundf;
  using ::roundl;

  using ::scalbln;
  using ::scalblnf;
  using ::scalblnl;

  using ::scalbn;
  using ::scalbnf;
  using ::scalbnl;

  using ::tgamma;
  using ::tgammaf;
  using ::tgammal;

  using ::trunc;
  using ::truncf;
  using ::truncl;



  constexpr float
  acosh(float __x)
  { return __builtin_acoshf(__x); }

  constexpr long double
  acosh(long double __x)
  { return __builtin_acoshl(__x); }



  template<typename _Tp>
    constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
                                              double>::__type
    acosh(_Tp __x)
    { return __builtin_acosh(__x); }



  constexpr float
  asinh(float __x)
  { return __builtin_asinhf(__x); }

  constexpr long double
  asinh(long double __x)
  { return __builtin_asinhl(__x); }



  template<typename _Tp>
    constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
                                              double>::__type
    asinh(_Tp __x)
    { return __builtin_asinh(__x); }



  constexpr float
  atanh(float __x)
  { return __builtin_atanhf(__x); }

  constexpr long double
  atanh(long double __x)
  { return __builtin_atanhl(__x); }



  template<typename _Tp>
    constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
                                              double>::__type
    atanh(_Tp __x)
    { return __builtin_atanh(__x); }



  constexpr float
  cbrt(float __x)
  { return __builtin_cbrtf(__x); }

  constexpr long double
  cbrt(long double __x)
  { return __builtin_cbrtl(__x); }



  template<typename _Tp>
    constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
                                              double>::__type
    cbrt(_Tp __x)
    { return __builtin_cbrt(__x); }



  constexpr float
  copysign(float __x, float __y)
  { return __builtin_copysignf(__x, __y); }

  constexpr long double
  copysign(long double __x, long double __y)
  { return __builtin_copysignl(__x, __y); }



  template<typename _Tp, typename _Up>
    constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
    copysign(_Tp __x, _Up __y)
    {
      typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
      return copysign(__type(__x), __type(__y));
    }



  constexpr float
  erf(float __x)
  { return __builtin_erff(__x); }

  constexpr long double
  erf(long double __x)
  { return __builtin_erfl(__x); }



  template<typename _Tp>
    constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
                                              double>::__type
    erf(_Tp __x)
    { return __builtin_erf(__x); }



  constexpr float
  erfc(float __x)
  { return __builtin_erfcf(__x); }

  constexpr long double
  erfc(long double __x)
  { return __builtin_erfcl(__x); }



  template<typename _Tp>
    constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
                                              double>::__type
    erfc(_Tp __x)
    { return __builtin_erfc(__x); }



  constexpr float
  exp2(float __x)
  { return __builtin_exp2f(__x); }

  constexpr long double
  exp2(long double __x)
  { return __builtin_exp2l(__x); }



  template<typename _Tp>
    constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
                                              double>::__type
    exp2(_Tp __x)
    { return __builtin_exp2(__x); }



  constexpr float
  expm1(float __x)
  { return __builtin_expm1f(__x); }

  constexpr long double
  expm1(long double __x)
  { return __builtin_expm1l(__x); }



  template<typename _Tp>
    constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
                                              double>::__type
    expm1(_Tp __x)
    { return __builtin_expm1(__x); }



  constexpr float
  fdim(float __x, float __y)
  { return __builtin_fdimf(__x, __y); }

  constexpr long double
  fdim(long double __x, long double __y)
  { return __builtin_fdiml(__x, __y); }



  template<typename _Tp, typename _Up>
    constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
    fdim(_Tp __x, _Up __y)
    {
      typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
      return fdim(__type(__x), __type(__y));
    }



  constexpr float
  fma(float __x, float __y, float __z)
  { return __builtin_fmaf(__x, __y, __z); }

  constexpr long double
  fma(long double __x, long double __y, long double __z)
  { return __builtin_fmal(__x, __y, __z); }



  template<typename _Tp, typename _Up, typename _Vp>
    constexpr typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type
    fma(_Tp __x, _Up __y, _Vp __z)
    {
      typedef typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type __type;
      return fma(__type(__x), __type(__y), __type(__z));
    }



  constexpr float
  fmax(float __x, float __y)
  { return __builtin_fmaxf(__x, __y); }

  constexpr long double
  fmax(long double __x, long double __y)
  { return __builtin_fmaxl(__x, __y); }



  template<typename _Tp, typename _Up>
    constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
    fmax(_Tp __x, _Up __y)
    {
      typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
      return fmax(__type(__x), __type(__y));
    }



  constexpr float
  fmin(float __x, float __y)
  { return __builtin_fminf(__x, __y); }

  constexpr long double
  fmin(long double __x, long double __y)
  { return __builtin_fminl(__x, __y); }



  template<typename _Tp, typename _Up>
    constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
    fmin(_Tp __x, _Up __y)
    {
      typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
      return fmin(__type(__x), __type(__y));
    }



  constexpr float
  hypot(float __x, float __y)
  { return __builtin_hypotf(__x, __y); }

  constexpr long double
  hypot(long double __x, long double __y)
  { return __builtin_hypotl(__x, __y); }



  template<typename _Tp, typename _Up>
    constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
    hypot(_Tp __x, _Up __y)
    {
      typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
      return hypot(__type(__x), __type(__y));
    }



  constexpr int
  ilogb(float __x)
  { return __builtin_ilogbf(__x); }

  constexpr int
  ilogb(long double __x)
  { return __builtin_ilogbl(__x); }



  template<typename _Tp>
    constexpr
    typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
                                    int>::__type
    ilogb(_Tp __x)
    { return __builtin_ilogb(__x); }



  constexpr float
  lgamma(float __x)
  { return __builtin_lgammaf(__x); }

  constexpr long double
  lgamma(long double __x)
  { return __builtin_lgammal(__x); }



  template<typename _Tp>
    constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
                                              double>::__type
    lgamma(_Tp __x)
    { return __builtin_lgamma(__x); }



  constexpr long long
  llrint(float __x)
  { return __builtin_llrintf(__x); }

  constexpr long long
  llrint(long double __x)
  { return __builtin_llrintl(__x); }



  template<typename _Tp>
    constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
                                              long long>::__type
    llrint(_Tp __x)
    { return __builtin_llrint(__x); }



  constexpr long long
  llround(float __x)
  { return __builtin_llroundf(__x); }

  constexpr long long
  llround(long double __x)
  { return __builtin_llroundl(__x); }



  template<typename _Tp>
    constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
                                              long long>::__type
    llround(_Tp __x)
    { return __builtin_llround(__x); }



  constexpr float
  log1p(float __x)
  { return __builtin_log1pf(__x); }

  constexpr long double
  log1p(long double __x)
  { return __builtin_log1pl(__x); }



  template<typename _Tp>
    constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
                                              double>::__type
    log1p(_Tp __x)
    { return __builtin_log1p(__x); }




  constexpr float
  log2(float __x)
  { return __builtin_log2f(__x); }

  constexpr long double
  log2(long double __x)
  { return __builtin_log2l(__x); }



  template<typename _Tp>
    constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
                                              double>::__type
    log2(_Tp __x)
    { return __builtin_log2(__x); }



  constexpr float
  logb(float __x)
  { return __builtin_logbf(__x); }

  constexpr long double
  logb(long double __x)
  { return __builtin_logbl(__x); }



  template<typename _Tp>
    constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
                                              double>::__type
    logb(_Tp __x)
    { return __builtin_logb(__x); }



  constexpr long
  lrint(float __x)
  { return __builtin_lrintf(__x); }

  constexpr long
  lrint(long double __x)
  { return __builtin_lrintl(__x); }



  template<typename _Tp>
    constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
                                              long>::__type
    lrint(_Tp __x)
    { return __builtin_lrint(__x); }



  constexpr long
  lround(float __x)
  { return __builtin_lroundf(__x); }

  constexpr long
  lround(long double __x)
  { return __builtin_lroundl(__x); }



  template<typename _Tp>
    constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
                                              long>::__type
    lround(_Tp __x)
    { return __builtin_lround(__x); }



  constexpr float
  nearbyint(float __x)
  { return __builtin_nearbyintf(__x); }

  constexpr long double
  nearbyint(long double __x)
  { return __builtin_nearbyintl(__x); }



  template<typename _Tp>
    constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
                                              double>::__type
    nearbyint(_Tp __x)
    { return __builtin_nearbyint(__x); }



  constexpr float
  nextafter(float __x, float __y)
  { return __builtin_nextafterf(__x, __y); }

  constexpr long double
  nextafter(long double __x, long double __y)
  { return __builtin_nextafterl(__x, __y); }



  template<typename _Tp, typename _Up>
    constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
    nextafter(_Tp __x, _Up __y)
    {
      typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
      return nextafter(__type(__x), __type(__y));
    }



  constexpr float
  nexttoward(float __x, long double __y)
  { return __builtin_nexttowardf(__x, __y); }

  constexpr long double
  nexttoward(long double __x, long double __y)
  { return __builtin_nexttowardl(__x, __y); }



  template<typename _Tp>
    constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
                                              double>::__type
    nexttoward(_Tp __x, long double __y)
    { return __builtin_nexttoward(__x, __y); }



  constexpr float
  remainder(float __x, float __y)
  { return __builtin_remainderf(__x, __y); }

  constexpr long double
  remainder(long double __x, long double __y)
  { return __builtin_remainderl(__x, __y); }



  template<typename _Tp, typename _Up>
    constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
    remainder(_Tp __x, _Up __y)
    {
      typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
      return remainder(__type(__x), __type(__y));
    }



  inline float
  remquo(float __x, float __y, int* __pquo)
  { return __builtin_remquof(__x, __y, __pquo); }

  inline long double
  remquo(long double __x, long double __y, int* __pquo)
  { return __builtin_remquol(__x, __y, __pquo); }



  template<typename _Tp, typename _Up>
    inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
    remquo(_Tp __x, _Up __y, int* __pquo)
    {
      typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
      return remquo(__type(__x), __type(__y), __pquo);
    }



  constexpr float
  rint(float __x)
  { return __builtin_rintf(__x); }

  constexpr long double
  rint(long double __x)
  { return __builtin_rintl(__x); }



  template<typename _Tp>
    constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
                                              double>::__type
    rint(_Tp __x)
    { return __builtin_rint(__x); }



  constexpr float
  round(float __x)
  { return __builtin_roundf(__x); }

  constexpr long double
  round(long double __x)
  { return __builtin_roundl(__x); }



  template<typename _Tp>
    constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
                                              double>::__type
    round(_Tp __x)
    { return __builtin_round(__x); }



  constexpr float
  scalbln(float __x, long __ex)
  { return __builtin_scalblnf(__x, __ex); }

  constexpr long double
  scalbln(long double __x, long __ex)
  { return __builtin_scalblnl(__x, __ex); }



  template<typename _Tp>
    constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
                                              double>::__type
    scalbln(_Tp __x, long __ex)
    { return __builtin_scalbln(__x, __ex); }



  constexpr float
  scalbn(float __x, int __ex)
  { return __builtin_scalbnf(__x, __ex); }

  constexpr long double
  scalbn(long double __x, int __ex)
  { return __builtin_scalbnl(__x, __ex); }



  template<typename _Tp>
    constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
                                              double>::__type
    scalbn(_Tp __x, int __ex)
    { return __builtin_scalbn(__x, __ex); }



  constexpr float
  tgamma(float __x)
  { return __builtin_tgammaf(__x); }

  constexpr long double
  tgamma(long double __x)
  { return __builtin_tgammal(__x); }



  template<typename _Tp>
    constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
                                              double>::__type
    tgamma(_Tp __x)
    { return __builtin_tgamma(__x); }



  constexpr float
  trunc(float __x)
  { return __builtin_truncf(__x); }

  constexpr long double
  trunc(long double __x)
  { return __builtin_truncl(__x); }



  template<typename _Tp>
    constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
                                              double>::__type
    trunc(_Tp __x)
    { return __builtin_trunc(__x); }
# 3712 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cmath" 3

}





}
# 193 "../harfbuzz-6.0.0/src/hb.hh" 2
# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cstdarg" 1 3
# 39 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cstdarg" 3
       
# 40 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cstdarg" 3

#undef __need___va_list

# 1 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stdarg.h" 1 3
# 31 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stdarg.h" 3
#define _STDARG_H 
#define _ANSI_STDARG_H_ 

#undef __need___va_list




#define __GNUC_VA_LIST 
typedef __builtin_va_list __gnuc_va_list;
# 50 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stdarg.h" 3
#define va_start(v,l) __builtin_va_start(v,l)

#define va_end(v) __builtin_va_end(v)
#define va_arg(v,l) __builtin_va_arg(v,l)


#define va_copy(d,s) __builtin_va_copy(d,s)

#define __va_copy(d,s) __builtin_va_copy(d,s)
# 103 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stdarg.h" 3
typedef __gnuc_va_list va_list;





#define _VA_LIST_ 


#define _VA_LIST 


#define _VA_LIST_DEFINED 


#define _VA_LIST_T_H 


#define __va_list__ 
# 44 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cstdarg" 2 3


#define _GLIBCXX_CSTDARG 1






namespace std
{
  using ::va_list;
}
# 194 "../harfbuzz-6.0.0/src/hb.hh" 2
# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cstddef" 1 3
# 40 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cstddef" 3
#define _GLIBCXX_CSTDDEF 1

       
# 43 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cstddef" 3

#undef __need_wchar_t
#undef __need_ptrdiff_t
#undef __need_size_t
#undef __need_NULL
#undef __need_wint_t

# 1 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 1 3
# 39 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 3
#define _STDDEF_H 
#define _STDDEF_H_ 

#define _ANSI_STDDEF_H 
# 132 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 3
#define _PTRDIFF_T 
#define _T_PTRDIFF_ 
#define _T_PTRDIFF 
#define __PTRDIFF_T 
#define _PTRDIFF_T_ 
#define _BSD_PTRDIFF_T_ 
#define ___int_ptrdiff_t_h 
#define _GCC_PTRDIFF_T 
#define _PTRDIFF_T_DECLARED 
#define __DEFINED_ptrdiff_t 



typedef long int ptrdiff_t;
# 158 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 3
#undef __need_ptrdiff_t
# 237 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 3
#undef __need_size_t
# 349 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 3
#undef __need_wchar_t
# 399 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 3
#undef NULL

#define NULL __null
# 410 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 3
#undef __need_NULL




#undef offsetof
#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)




#define _GCC_MAX_ALIGN_T 



typedef struct {
  long long __max_align_ll __attribute__((__aligned__(__alignof__(long long))));
  long double __max_align_ld __attribute__((__aligned__(__alignof__(long double))));
# 436 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 3
} max_align_t;





#define _GXX_NULLPTR_T 
  typedef decltype(nullptr) nullptr_t;
# 51 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cstddef" 2 3

extern "C++"
{

namespace std
{

  using ::max_align_t;
}
# 189 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cstddef" 3
}
# 195 "../harfbuzz-6.0.0/src/hb.hh" 2
# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cstdio" 1 3
# 39 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cstdio" 3
       
# 40 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cstdio" 3


# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdio.h" 1 3 4
# 24 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdio.h" 3 4
#define _STDIO_H 1

#define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION 
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/libc-header-start.h" 1 3 4
# 31 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/libc-header-start.h" 3 4
#undef __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION





#undef __GLIBC_USE_LIB_EXT2


#define __GLIBC_USE_LIB_EXT2 1
# 67 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/libc-header-start.h" 3 4
#undef __GLIBC_USE_IEC_60559_BFP_EXT

#define __GLIBC_USE_IEC_60559_BFP_EXT 1



#undef __GLIBC_USE_IEC_60559_BFP_EXT_C2X

#define __GLIBC_USE_IEC_60559_BFP_EXT_C2X 1



#undef __GLIBC_USE_IEC_60559_EXT

#define __GLIBC_USE_IEC_60559_EXT 1
# 90 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/libc-header-start.h" 3 4
#undef __GLIBC_USE_IEC_60559_FUNCS_EXT

#define __GLIBC_USE_IEC_60559_FUNCS_EXT 1



#undef __GLIBC_USE_IEC_60559_FUNCS_EXT_C2X

#define __GLIBC_USE_IEC_60559_FUNCS_EXT_C2X 1






#undef __GLIBC_USE_IEC_60559_TYPES_EXT

#define __GLIBC_USE_IEC_60559_TYPES_EXT 1
# 28 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdio.h" 2 3 4

extern "C" {

#define __need_size_t 
#define __need_NULL 
# 1 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 1 3 4
# 158 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 3 4
#undef __need_ptrdiff_t
# 237 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 3 4
#undef __need_size_t
# 349 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 3 4
#undef __need_wchar_t
# 399 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 3 4
#undef NULL

#define NULL __null
# 410 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 3 4
#undef __need_NULL




#undef offsetof
#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
# 34 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdio.h" 2 3 4

#define __need___va_list 



# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/types/__fpos_t.h" 1 3 4

#define _____fpos_t_defined 1


# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/types/__mbstate_t.h" 1 3 4

#define ____mbstate_t_defined 1
# 13 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/types/__mbstate_t.h" 3 4
typedef struct
{
  int __count;
  union
  {
    unsigned int __wch;
    char __wchb[4];
  } __value;
} __mbstate_t;
# 6 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/types/__fpos_t.h" 2 3 4




typedef struct _G_fpos_t
{
  __off_t __pos;
  __mbstate_t __state;
} __fpos_t;
# 40 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdio.h" 2 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/types/__fpos64_t.h" 1 3 4

#define _____fpos64_t_defined 1







typedef struct _G_fpos64_t
{
  __off64_t __pos;
  __mbstate_t __state;
} __fpos64_t;
# 41 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdio.h" 2 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/types/__FILE.h" 1 3 4

#define ____FILE_defined 1

struct _IO_FILE;
typedef struct _IO_FILE __FILE;
# 42 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdio.h" 2 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/types/FILE.h" 1 3 4

#define __FILE_defined 1

struct _IO_FILE;


typedef struct _IO_FILE FILE;
# 43 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdio.h" 2 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/types/struct_FILE.h" 1 3 4
# 19 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/types/struct_FILE.h" 3 4
#define __struct_FILE_defined 1
# 35 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/types/struct_FILE.h" 3 4
struct _IO_FILE;
struct _IO_marker;
struct _IO_codecvt;
struct _IO_wide_data;




typedef void _IO_lock_t;





struct _IO_FILE
{
  int _flags;


  char *_IO_read_ptr;
  char *_IO_read_end;
  char *_IO_read_base;
  char *_IO_write_base;
  char *_IO_write_ptr;
  char *_IO_write_end;
  char *_IO_buf_base;
  char *_IO_buf_end;


  char *_IO_save_base;
  char *_IO_backup_base;
  char *_IO_save_end;

  struct _IO_marker *_markers;

  struct _IO_FILE *_chain;

  int _fileno;
  int _flags2;
  __off_t _old_offset;


  unsigned short _cur_column;
  signed char _vtable_offset;
  char _shortbuf[1];

  _IO_lock_t *_lock;







  __off64_t _offset;

  struct _IO_codecvt *_codecvt;
  struct _IO_wide_data *_wide_data;
  struct _IO_FILE *_freeres_list;
  void *_freeres_buf;
  size_t __pad5;
  int _mode;

  char _unused2[15 * sizeof (int) - 4 * sizeof (void *) - sizeof (size_t)];
};


#define __getc_unlocked_body(_fp) (__glibc_unlikely ((_fp)->_IO_read_ptr >= (_fp)->_IO_read_end) ? __uflow (_fp) : *(unsigned char *) (_fp)->_IO_read_ptr++)



#define __putc_unlocked_body(_ch,_fp) (__glibc_unlikely ((_fp)->_IO_write_ptr >= (_fp)->_IO_write_end) ? __overflow (_fp, (unsigned char) (_ch)) : (unsigned char) (*(_fp)->_IO_write_ptr++ = (_ch)))




#define _IO_EOF_SEEN 0x0010
#define __feof_unlocked_body(_fp) (((_fp)->_flags & _IO_EOF_SEEN) != 0)

#define _IO_ERR_SEEN 0x0020
#define __ferror_unlocked_body(_fp) (((_fp)->_flags & _IO_ERR_SEEN) != 0)

#define _IO_USER_LOCK 0x8000
# 44 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdio.h" 2 3 4


# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/types/cookie_io_functions_t.h" 1 3 4
# 19 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/types/cookie_io_functions_t.h" 3 4
#define __cookie_io_functions_t_defined 1







typedef __ssize_t cookie_read_function_t (void *__cookie, char *__buf,
                                          size_t __nbytes);







typedef __ssize_t cookie_write_function_t (void *__cookie, const char *__buf,
                                           size_t __nbytes);







typedef int cookie_seek_function_t (void *__cookie, __off64_t *__pos, int __w);


typedef int cookie_close_function_t (void *__cookie);






typedef struct _IO_cookie_io_functions_t
{
  cookie_read_function_t *read;
  cookie_write_function_t *write;
  cookie_seek_function_t *seek;
  cookie_close_function_t *close;
} cookie_io_functions_t;
# 47 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdio.h" 2 3 4
# 86 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdio.h" 3 4
typedef __fpos64_t fpos_t;


typedef __fpos64_t fpos64_t;



#define _IOFBF 0
#define _IOLBF 1
#define _IONBF 2



#define BUFSIZ 8192




#define EOF (-1)




#define SEEK_SET 0
#define SEEK_CUR 1
#define SEEK_END 2

#define SEEK_DATA 3
#define SEEK_HOLE 4





#define P_tmpdir "/tmp"
# 133 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdio.h" 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/stdio_lim.h" 1 3 4
# 19 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/stdio_lim.h" 3 4
#define _BITS_STDIO_LIM_H 1





#define L_tmpnam 20
#define TMP_MAX 238328
#define FILENAME_MAX 4096


#define L_ctermid 9

#define L_cuserid 9



#undef FOPEN_MAX
#define FOPEN_MAX 16
# 134 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdio.h" 2 3 4




#define _PRINTF_NAN_LEN_MAX 4




extern FILE *stdin;
extern FILE *stdout;
extern FILE *stderr;

#define stdin stdin
#define stdout stdout
#define stderr stderr


extern int remove (const char *__filename) noexcept (true);

extern int rename (const char *__old, const char *__new) noexcept (true);



extern int renameat (int __oldfd, const char *__old, int __newfd,
       const char *__new) noexcept (true);




#define RENAME_NOREPLACE (1 << 0)
#define RENAME_EXCHANGE (1 << 1)
#define RENAME_WHITEOUT (1 << 2)



extern int renameat2 (int __oldfd, const char *__old, int __newfd,
        const char *__new, unsigned int __flags) noexcept (true);






extern int fclose (FILE *__stream);

#undef __attr_dealloc_fclose
#define __attr_dealloc_fclose __attr_dealloc (fclose, 1)
# 192 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdio.h" 3 4
extern FILE *tmpfile (void) __asm__ ("" "tmpfile64")
  __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (fclose, 1))) __attribute__ ((__warn_unused_result__));






extern FILE *tmpfile64 (void)
   __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (fclose, 1))) __attribute__ ((__warn_unused_result__));



extern char *tmpnam (char[20]) noexcept (true) __attribute__ ((__warn_unused_result__));




extern char *tmpnam_r (char __s[20]) noexcept (true) __attribute__ ((__warn_unused_result__));
# 222 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdio.h" 3 4
extern char *tempnam (const char *__dir, const char *__pfx)
   noexcept (true) __attribute__ ((__malloc__)) __attribute__ ((__warn_unused_result__)) __attribute__ ((__malloc__ (__builtin_free, 1)));






extern int fflush (FILE *__stream);
# 239 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdio.h" 3 4
extern int fflush_unlocked (FILE *__stream);
# 249 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdio.h" 3 4
extern int fcloseall (void);
# 270 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdio.h" 3 4
extern FILE *fopen (const char *__restrict __filename, const char *__restrict __modes) __asm__ ("" "fopen64")

  __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (fclose, 1))) __attribute__ ((__warn_unused_result__));
extern FILE *freopen (const char *__restrict __filename, const char *__restrict __modes, FILE *__restrict __stream) __asm__ ("" "freopen64")


  __attribute__ ((__warn_unused_result__));






extern FILE *fopen64 (const char *__restrict __filename,
        const char *__restrict __modes)
  __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (fclose, 1))) __attribute__ ((__warn_unused_result__));
extern FILE *freopen64 (const char *__restrict __filename,
   const char *__restrict __modes,
   FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));




extern FILE *fdopen (int __fd, const char *__modes) noexcept (true)
  __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (fclose, 1))) __attribute__ ((__warn_unused_result__));





extern FILE *fopencookie (void *__restrict __magic_cookie,
     const char *__restrict __modes,
     cookie_io_functions_t __io_funcs) noexcept (true)
  __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (fclose, 1))) __attribute__ ((__warn_unused_result__));




extern FILE *fmemopen (void *__s, size_t __len, const char *__modes)
  noexcept (true) __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (fclose, 1))) __attribute__ ((__warn_unused_result__));




extern FILE *open_memstream (char **__bufloc, size_t *__sizeloc) noexcept (true)
  __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (fclose, 1))) __attribute__ ((__warn_unused_result__));
# 328 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdio.h" 3 4
extern void setbuf (FILE *__restrict __stream, char *__restrict __buf) noexcept (true);



extern int setvbuf (FILE *__restrict __stream, char *__restrict __buf,
      int __modes, size_t __n) noexcept (true);




extern void setbuffer (FILE *__restrict __stream, char *__restrict __buf,
         size_t __size) noexcept (true);


extern void setlinebuf (FILE *__stream) noexcept (true);







extern int fprintf (FILE *__restrict __stream,
      const char *__restrict __format, ...);




extern int printf (const char *__restrict __format, ...);

extern int sprintf (char *__restrict __s,
      const char *__restrict __format, ...) noexcept (true);





extern int vfprintf (FILE *__restrict __s, const char *__restrict __format,
       __gnuc_va_list __arg);




extern int vprintf (const char *__restrict __format, __gnuc_va_list __arg);

extern int vsprintf (char *__restrict __s, const char *__restrict __format,
       __gnuc_va_list __arg) noexcept (true);



extern int snprintf (char *__restrict __s, size_t __maxlen,
       const char *__restrict __format, ...)
     noexcept (true) __attribute__ ((__format__ (__printf__, 3, 4)));

extern int vsnprintf (char *__restrict __s, size_t __maxlen,
        const char *__restrict __format, __gnuc_va_list __arg)
     noexcept (true) __attribute__ ((__format__ (__printf__, 3, 0)));





extern int vasprintf (char **__restrict __ptr, const char *__restrict __f,
        __gnuc_va_list __arg)
     noexcept (true) __attribute__ ((__format__ (__printf__, 2, 0))) __attribute__ ((__warn_unused_result__));
extern int __asprintf (char **__restrict __ptr,
         const char *__restrict __fmt, ...)
     noexcept (true) __attribute__ ((__format__ (__printf__, 2, 3))) __attribute__ ((__warn_unused_result__));
extern int asprintf (char **__restrict __ptr,
       const char *__restrict __fmt, ...)
     noexcept (true) __attribute__ ((__format__ (__printf__, 2, 3))) __attribute__ ((__warn_unused_result__));




extern int vdprintf (int __fd, const char *__restrict __fmt,
       __gnuc_va_list __arg)
     __attribute__ ((__format__ (__printf__, 2, 0)));
extern int dprintf (int __fd, const char *__restrict __fmt, ...)
     __attribute__ ((__format__ (__printf__, 2, 3)));







extern int fscanf (FILE *__restrict __stream,
     const char *__restrict __format, ...) __attribute__ ((__warn_unused_result__));




extern int scanf (const char *__restrict __format, ...) __attribute__ ((__warn_unused_result__));

extern int sscanf (const char *__restrict __s,
     const char *__restrict __format, ...) noexcept (true);





# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/floatn.h" 1 3 4







# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 1 3 4
# 21 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE 64
# 32 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE_TIME64_COMPAT32 0
# 9 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/floatn.h" 2 3 4
# 431 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdio.h" 2 3 4



extern int fscanf (FILE *__restrict __stream, const char *__restrict __format, ...) __asm__ ("" "__isoc99_fscanf")

                          __attribute__ ((__warn_unused_result__));
extern int scanf (const char *__restrict __format, ...) __asm__ ("" "__isoc99_scanf")
                         __attribute__ ((__warn_unused_result__));
extern int sscanf (const char *__restrict __s, const char *__restrict __format, ...) noexcept (true) __asm__ ("" "__isoc99_sscanf")

                      ;
# 459 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdio.h" 3 4
extern int vfscanf (FILE *__restrict __s, const char *__restrict __format,
      __gnuc_va_list __arg)
     __attribute__ ((__format__ (__scanf__, 2, 0))) __attribute__ ((__warn_unused_result__));





extern int vscanf (const char *__restrict __format, __gnuc_va_list __arg)
     __attribute__ ((__format__ (__scanf__, 1, 0))) __attribute__ ((__warn_unused_result__));


extern int vsscanf (const char *__restrict __s,
      const char *__restrict __format, __gnuc_va_list __arg)
     noexcept (true) __attribute__ ((__format__ (__scanf__, 2, 0)));





extern int vfscanf (FILE *__restrict __s, const char *__restrict __format, __gnuc_va_list __arg) __asm__ ("" "__isoc99_vfscanf")



     __attribute__ ((__format__ (__scanf__, 2, 0))) __attribute__ ((__warn_unused_result__));
extern int vscanf (const char *__restrict __format, __gnuc_va_list __arg) __asm__ ("" "__isoc99_vscanf")

     __attribute__ ((__format__ (__scanf__, 1, 0))) __attribute__ ((__warn_unused_result__));
extern int vsscanf (const char *__restrict __s, const char *__restrict __format, __gnuc_va_list __arg) noexcept (true) __asm__ ("" "__isoc99_vsscanf")



     __attribute__ ((__format__ (__scanf__, 2, 0)));
# 513 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdio.h" 3 4
extern int fgetc (FILE *__stream);
extern int getc (FILE *__stream);





extern int getchar (void);






extern int getc_unlocked (FILE *__stream);
extern int getchar_unlocked (void);
# 538 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdio.h" 3 4
extern int fgetc_unlocked (FILE *__stream);
# 549 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdio.h" 3 4
extern int fputc (int __c, FILE *__stream);
extern int putc (int __c, FILE *__stream);





extern int putchar (int __c);
# 565 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdio.h" 3 4
extern int fputc_unlocked (int __c, FILE *__stream);







extern int putc_unlocked (int __c, FILE *__stream);
extern int putchar_unlocked (int __c);






extern int getw (FILE *__stream);


extern int putw (int __w, FILE *__stream);







extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
     __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 1, 2)));
# 605 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdio.h" 3 4
extern char *gets (char *__s) __attribute__ ((__warn_unused_result__)) __attribute__ ((__deprecated__));
# 615 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdio.h" 3 4
extern char *fgets_unlocked (char *__restrict __s, int __n,
        FILE *__restrict __stream) __attribute__ ((__warn_unused_result__))
    __attribute__ ((__access__ (__write_only__, 1, 2)));
# 632 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdio.h" 3 4
extern __ssize_t __getdelim (char **__restrict __lineptr,
                             size_t *__restrict __n, int __delimiter,
                             FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
extern __ssize_t getdelim (char **__restrict __lineptr,
                           size_t *__restrict __n, int __delimiter,
                           FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));







extern __ssize_t getline (char **__restrict __lineptr,
                          size_t *__restrict __n,
                          FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));







extern int fputs (const char *__restrict __s, FILE *__restrict __stream);





extern int puts (const char *__s);






extern int ungetc (int __c, FILE *__stream);






extern size_t fread (void *__restrict __ptr, size_t __size,
       size_t __n, FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));




extern size_t fwrite (const void *__restrict __ptr, size_t __size,
        size_t __n, FILE *__restrict __s);
# 691 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdio.h" 3 4
extern int fputs_unlocked (const char *__restrict __s,
      FILE *__restrict __stream);
# 702 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdio.h" 3 4
extern size_t fread_unlocked (void *__restrict __ptr, size_t __size,
         size_t __n, FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
extern size_t fwrite_unlocked (const void *__restrict __ptr, size_t __size,
          size_t __n, FILE *__restrict __stream);







extern int fseek (FILE *__stream, long int __off, int __whence);




extern long int ftell (FILE *__stream) __attribute__ ((__warn_unused_result__));




extern void rewind (FILE *__stream);
# 744 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdio.h" 3 4
extern int fseeko (FILE *__stream, __off64_t __off, int __whence) __asm__ ("" "fseeko64")

                  ;
extern __off64_t ftello (FILE *__stream) __asm__ ("" "ftello64");
# 768 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdio.h" 3 4
extern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos) __asm__ ("" "fgetpos64")
                                          ;
extern int fsetpos (FILE *__stream, const fpos_t *__pos) __asm__ ("" "fsetpos64")
                                                          ;







extern int fseeko64 (FILE *__stream, __off64_t __off, int __whence);
extern __off64_t ftello64 (FILE *__stream) __attribute__ ((__warn_unused_result__));
extern int fgetpos64 (FILE *__restrict __stream, fpos64_t *__restrict __pos);
extern int fsetpos64 (FILE *__stream, const fpos64_t *__pos);



extern void clearerr (FILE *__stream) noexcept (true);

extern int feof (FILE *__stream) noexcept (true) __attribute__ ((__warn_unused_result__));

extern int ferror (FILE *__stream) noexcept (true) __attribute__ ((__warn_unused_result__));



extern void clearerr_unlocked (FILE *__stream) noexcept (true);
extern int feof_unlocked (FILE *__stream) noexcept (true) __attribute__ ((__warn_unused_result__));
extern int ferror_unlocked (FILE *__stream) noexcept (true) __attribute__ ((__warn_unused_result__));







extern void perror (const char *__s);




extern int fileno (FILE *__stream) noexcept (true) __attribute__ ((__warn_unused_result__));




extern int fileno_unlocked (FILE *__stream) noexcept (true) __attribute__ ((__warn_unused_result__));
# 823 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdio.h" 3 4
extern int pclose (FILE *__stream);





extern FILE *popen (const char *__command, const char *__modes)
  __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (pclose, 1))) __attribute__ ((__warn_unused_result__));






extern char *ctermid (char *__s) noexcept (true)
  __attribute__ ((__access__ (__write_only__, 1)));





extern char *cuserid (char *__s)
  __attribute__ ((__access__ (__write_only__, 1)));




struct obstack;


extern int obstack_printf (struct obstack *__restrict __obstack,
      const char *__restrict __format, ...)
     noexcept (true) __attribute__ ((__format__ (__printf__, 2, 3)));
extern int obstack_vprintf (struct obstack *__restrict __obstack,
       const char *__restrict __format,
       __gnuc_va_list __args)
     noexcept (true) __attribute__ ((__format__ (__printf__, 2, 0)));







extern void flockfile (FILE *__stream) noexcept (true);



extern int ftrylockfile (FILE *__stream) noexcept (true) __attribute__ ((__warn_unused_result__));


extern void funlockfile (FILE *__stream) noexcept (true);
# 885 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdio.h" 3 4
extern int __uflow (FILE *);
extern int __overflow (FILE *, int);



# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/stdio2-decl.h" 1 3 4
# 20 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/stdio2-decl.h" 3 4
#define _BITS_STDIO2_DEC_H 1





extern int __sprintf_chk (char *__restrict __s, int __flag, size_t __slen,
     const char *__restrict __format, ...) noexcept (true)
    __attribute__ ((__access__ (__write_only__, 1, 3)));
extern int __vsprintf_chk (char *__restrict __s, int __flag, size_t __slen,
      const char *__restrict __format,
      __gnuc_va_list __ap) noexcept (true)
    __attribute__ ((__access__ (__write_only__, 1, 3)));



extern int __snprintf_chk (char *__restrict __s, size_t __n, int __flag,
      size_t __slen, const char *__restrict __format,
      ...) noexcept (true)
    __attribute__ ((__access__ (__write_only__, 1, 2)));
extern int __vsnprintf_chk (char *__restrict __s, size_t __n, int __flag,
       size_t __slen, const char *__restrict __format,
       __gnuc_va_list __ap) noexcept (true)
    __attribute__ ((__access__ (__write_only__, 1, 2)));





extern int __fprintf_chk (FILE *__restrict __stream, int __flag,
     const char *__restrict __format, ...);
extern int __printf_chk (int __flag, const char *__restrict __format, ...);
extern int __vfprintf_chk (FILE *__restrict __stream, int __flag,
      const char *__restrict __format, __gnuc_va_list __ap);
extern int __vprintf_chk (int __flag, const char *__restrict __format,
     __gnuc_va_list __ap);


extern int __dprintf_chk (int __fd, int __flag, const char *__restrict __fmt,
     ...) __attribute__ ((__format__ (__printf__, 3, 4)));
extern int __vdprintf_chk (int __fd, int __flag,
      const char *__restrict __fmt, __gnuc_va_list __arg)
     __attribute__ ((__format__ (__printf__, 3, 0)));




extern int __asprintf_chk (char **__restrict __ptr, int __flag,
      const char *__restrict __fmt, ...)
     noexcept (true) __attribute__ ((__format__ (__printf__, 3, 4))) __attribute__ ((__warn_unused_result__));
extern int __vasprintf_chk (char **__restrict __ptr, int __flag,
       const char *__restrict __fmt, __gnuc_va_list __arg)
     noexcept (true) __attribute__ ((__format__ (__printf__, 3, 0))) __attribute__ ((__warn_unused_result__));
extern int __obstack_printf_chk (struct obstack *__restrict __obstack,
     int __flag, const char *__restrict __format,
     ...)
     noexcept (true) __attribute__ ((__format__ (__printf__, 3, 4)));
extern int __obstack_vprintf_chk (struct obstack *__restrict __obstack,
      int __flag,
      const char *__restrict __format,
      __gnuc_va_list __args)
     noexcept (true) __attribute__ ((__format__ (__printf__, 3, 0)));





extern char *__gets_chk (char *__str, size_t) __attribute__ ((__warn_unused_result__));


extern char *__fgets_chk (char *__restrict __s, size_t __size, int __n,
     FILE *__restrict __stream)
    __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 1, 3)));

extern size_t __fread_chk (void *__restrict __ptr, size_t __ptrlen,
      size_t __size, size_t __n,
      FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));


extern char *__fgets_unlocked_chk (char *__restrict __s, size_t __size,
       int __n, FILE *__restrict __stream)
    __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 1, 3)));



#undef fread_unlocked
extern size_t __fread_unlocked_chk (void *__restrict __ptr, size_t __ptrlen,
        size_t __size, size_t __n,
        FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
# 891 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdio.h" 2 3 4
# 902 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdio.h" 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/stdio.h" 1 3 4
# 20 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/stdio.h" 3 4
#define _BITS_STDIO_H 1
# 29 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/stdio.h" 3 4
#define __STDIO_INLINE __extern_inline
# 46 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/stdio.h" 3 4
extern __inline __attribute__ ((__gnu_inline__)) int
getchar (void)
{
  return getc (stdin);
}




extern __inline __attribute__ ((__gnu_inline__)) int
fgetc_unlocked (FILE *__fp)
{
  return (__builtin_expect (((__fp)->_IO_read_ptr >= (__fp)->_IO_read_end), 0) ? __uflow (__fp) : *(unsigned char *) (__fp)->_IO_read_ptr++);
}





extern __inline __attribute__ ((__gnu_inline__)) int
getc_unlocked (FILE *__fp)
{
  return (__builtin_expect (((__fp)->_IO_read_ptr >= (__fp)->_IO_read_end), 0) ? __uflow (__fp) : *(unsigned char *) (__fp)->_IO_read_ptr++);
}


extern __inline __attribute__ ((__gnu_inline__)) int
getchar_unlocked (void)
{
  return (__builtin_expect (((stdin)->_IO_read_ptr >= (stdin)->_IO_read_end), 0) ? __uflow (stdin) : *(unsigned char *) (stdin)->_IO_read_ptr++);
}




extern __inline __attribute__ ((__gnu_inline__)) int
putchar (int __c)
{
  return putc (__c, stdout);
}




extern __inline __attribute__ ((__gnu_inline__)) int
fputc_unlocked (int __c, FILE *__stream)
{
  return (__builtin_expect (((__stream)->_IO_write_ptr >= (__stream)->_IO_write_end), 0) ? __overflow (__stream, (unsigned char) (__c)) : (unsigned char) (*(__stream)->_IO_write_ptr++ = (__c)));
}





extern __inline __attribute__ ((__gnu_inline__)) int
putc_unlocked (int __c, FILE *__stream)
{
  return (__builtin_expect (((__stream)->_IO_write_ptr >= (__stream)->_IO_write_end), 0) ? __overflow (__stream, (unsigned char) (__c)) : (unsigned char) (*(__stream)->_IO_write_ptr++ = (__c)));
}


extern __inline __attribute__ ((__gnu_inline__)) int
putchar_unlocked (int __c)
{
  return (__builtin_expect (((stdout)->_IO_write_ptr >= (stdout)->_IO_write_end), 0) ? __overflow (stdout, (unsigned char) (__c)) : (unsigned char) (*(stdout)->_IO_write_ptr++ = (__c)));
}





extern __inline __attribute__ ((__gnu_inline__)) __ssize_t
getline (char **__lineptr, size_t *__n, FILE *__stream)
{
  return __getdelim (__lineptr, __n, '\n', __stream);
}





extern __inline __attribute__ ((__gnu_inline__)) int
__attribute__ ((__leaf__)) feof_unlocked (FILE *__stream) noexcept (true)
{
  return (((__stream)->_flags & 0x0010) != 0);
}


extern __inline __attribute__ ((__gnu_inline__)) int
__attribute__ ((__leaf__)) ferror_unlocked (FILE *__stream) noexcept (true)
{
  return (((__stream)->_flags & 0x0020) != 0);
}
# 193 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/stdio.h" 3 4
#undef __STDIO_INLINE
# 903 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdio.h" 2 3 4



# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/stdio2.h" 1 3 4
# 20 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/stdio2.h" 3 4
#define _BITS_STDIO2_H 1






extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
__attribute__ ((__leaf__)) sprintf (char *__restrict __s, const char *__restrict __fmt, ...) noexcept (true)
{
  return __builtin___sprintf_chk (__s, 2 - 1,
      __builtin_object_size (__s, 2 > 1), __fmt,
      __builtin_va_arg_pack ());
}






extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
__attribute__ ((__leaf__)) vsprintf (char *__restrict __s, const char *__restrict __fmt, __gnuc_va_list __ap) noexcept (true)

{
  return __builtin___vsprintf_chk (__s, 2 - 1,
       __builtin_object_size (__s, 2 > 1), __fmt, __ap);
}



extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
__attribute__ ((__leaf__)) snprintf (char *__restrict __s, size_t __n, const char *__restrict __fmt, ...) noexcept (true)

{
  return __builtin___snprintf_chk (__s, __n, 2 - 1,
       __builtin_object_size (__s, 2 > 1), __fmt,
       __builtin_va_arg_pack ());
}






extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
__attribute__ ((__leaf__)) vsnprintf (char *__restrict __s, size_t __n, const char *__restrict __fmt, __gnuc_va_list __ap) noexcept (true)

{
  return __builtin___vsnprintf_chk (__s, __n, 2 - 1,
        __builtin_object_size (__s, 2 > 1), __fmt, __ap);
}





extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
fprintf (FILE *__restrict __stream, const char *__restrict __fmt, ...)
{
  return __fprintf_chk (__stream, 2 - 1, __fmt,
   __builtin_va_arg_pack ());
}

extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
printf (const char *__restrict __fmt, ...)
{
  return __printf_chk (2 - 1, __fmt, __builtin_va_arg_pack ());
}







extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
vprintf (const char *__restrict __fmt, __gnuc_va_list __ap)
{

  return __vfprintf_chk (stdout, 2 - 1, __fmt, __ap);



}

extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
vfprintf (FILE *__restrict __stream,
   const char *__restrict __fmt, __gnuc_va_list __ap)
{
  return __vfprintf_chk (__stream, 2 - 1, __fmt, __ap);
}



extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
dprintf (int __fd, const char *__restrict __fmt, ...)
{
  return __dprintf_chk (__fd, 2 - 1, __fmt,
   __builtin_va_arg_pack ());
}





extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
vdprintf (int __fd, const char *__restrict __fmt, __gnuc_va_list __ap)
{
  return __vdprintf_chk (__fd, 2 - 1, __fmt, __ap);
}




extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
__attribute__ ((__leaf__)) asprintf (char **__restrict __ptr, const char *__restrict __fmt, ...) noexcept (true)
{
  return __asprintf_chk (__ptr, 2 - 1, __fmt,
    __builtin_va_arg_pack ());
}

extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
__attribute__ ((__leaf__)) __asprintf (char **__restrict __ptr, const char *__restrict __fmt, ...) noexcept (true)

{
  return __asprintf_chk (__ptr, 2 - 1, __fmt,
    __builtin_va_arg_pack ());
}

extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
__attribute__ ((__leaf__)) obstack_printf (struct obstack *__restrict __obstack, const char *__restrict __fmt, ...) noexcept (true)

{
  return __obstack_printf_chk (__obstack, 2 - 1, __fmt,
          __builtin_va_arg_pack ());
}
# 165 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/stdio2.h" 3 4
extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
__attribute__ ((__leaf__)) vasprintf (char **__restrict __ptr, const char *__restrict __fmt, __gnuc_va_list __ap) noexcept (true)

{
  return __vasprintf_chk (__ptr, 2 - 1, __fmt, __ap);
}

extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
__attribute__ ((__leaf__)) obstack_vprintf (struct obstack *__restrict __obstack, const char *__restrict __fmt, __gnuc_va_list __ap) noexcept (true)

{
  return __obstack_vprintf_chk (__obstack, 2 - 1, __fmt,
    __ap);
}






extern char *__gets_warn (char *__str) __asm__ ("" "gets")
     __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("please use fgets or getline instead, gets can't " "specify buffer size")))
                               ;

extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) char *
gets (char *__str)
{
  if (__builtin_object_size (__str, 2 > 1) != (size_t) -1)
    return __gets_chk (__str, __builtin_object_size (__str, 2 > 1));
  return __gets_warn (__str);
}


extern char *__fgets_alias (char *__restrict __s, int __n, FILE *__restrict __stream) __asm__ ("" "fgets")


    __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 1, 2)));
extern char *__fgets_chk_warn (char *__restrict __s, size_t __size, int __n, FILE *__restrict __stream) __asm__ ("" "__fgets_chk")


     __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("fgets called with bigger size than length " "of destination buffer")))
                                 ;

extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 1, 2))) char *
fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
{
  size_t sz = __builtin_object_size (__s, 2 > 1);
  if (((__builtin_constant_p (sz) && (sz) == (long unsigned int) -1) || (((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((long unsigned int) (__n)) <= ((sz)) / ((sizeof (char))))) && (((long unsigned int) (__n)) <= ((sz)) / ((sizeof (char)))))))
    return __fgets_alias (__s, __n, __stream);
  if ((((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((long unsigned int) (__n)) <= (sz) / (sizeof (char)))) && !(((long unsigned int) (__n)) <= (sz) / (sizeof (char)))))
    return __fgets_chk_warn (__s, sz, __n, __stream);
  return __fgets_chk (__s, sz, __n, __stream);
}

extern size_t __fread_alias (void *__restrict __ptr, size_t __size, size_t __n, FILE *__restrict __stream) __asm__ ("" "fread")


            __attribute__ ((__warn_unused_result__));
extern size_t __fread_chk_warn (void *__restrict __ptr, size_t __ptrlen, size_t __size, size_t __n, FILE *__restrict __stream) __asm__ ("" "__fread_chk")




     __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("fread called with bigger size * nmemb than length " "of destination buffer")))
                                 ;

extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) size_t
fread (void *__restrict __ptr, size_t __size, size_t __n,
       FILE *__restrict __stream)
{
  size_t sz = __builtin_object_size (__ptr, 0);
  if (((__builtin_constant_p (sz) && (sz) == (long unsigned int) -1) || (((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((long unsigned int) (__n)) <= ((sz)) / ((__size)))) && (((long unsigned int) (__n)) <= ((sz)) / ((__size))))))
    return __fread_alias (__ptr, __size, __n, __stream);
  if ((((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((long unsigned int) (__n)) <= (sz) / (__size))) && !(((long unsigned int) (__n)) <= (sz) / (__size))))
    return __fread_chk_warn (__ptr, sz, __size, __n, __stream);
  return __fread_chk (__ptr, sz, __size, __n, __stream);
}


extern char *__fgets_unlocked_alias (char *__restrict __s, int __n, FILE *__restrict __stream) __asm__ ("" "fgets_unlocked")


    __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 1, 2)));
extern char *__fgets_unlocked_chk_warn (char *__restrict __s, size_t __size, int __n, FILE *__restrict __stream) __asm__ ("" "__fgets_unlocked_chk")


     __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("fgets_unlocked called with bigger size than length " "of destination buffer")))
                                 ;

extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 1, 2))) char *
fgets_unlocked (char *__restrict __s, int __n, FILE *__restrict __stream)
{
  size_t sz = __builtin_object_size (__s, 2 > 1);
  if (((__builtin_constant_p (sz) && (sz) == (long unsigned int) -1) || (((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((long unsigned int) (__n)) <= ((sz)) / ((sizeof (char))))) && (((long unsigned int) (__n)) <= ((sz)) / ((sizeof (char)))))))
    return __fgets_unlocked_alias (__s, __n, __stream);
  if ((((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((long unsigned int) (__n)) <= (sz) / (sizeof (char)))) && !(((long unsigned int) (__n)) <= (sz) / (sizeof (char)))))
    return __fgets_unlocked_chk_warn (__s, sz, __n, __stream);
  return __fgets_unlocked_chk (__s, sz, __n, __stream);
}



#undef fread_unlocked
extern size_t __fread_unlocked_alias (void *__restrict __ptr, size_t __size, size_t __n, FILE *__restrict __stream) __asm__ ("" "fread_unlocked")


                     __attribute__ ((__warn_unused_result__));
extern size_t __fread_unlocked_chk_warn (void *__restrict __ptr, size_t __ptrlen, size_t __size, size_t __n, FILE *__restrict __stream) __asm__ ("" "__fread_unlocked_chk")




     __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("fread_unlocked called with bigger size * nmemb than " "length of destination buffer")))
                                        ;

extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) size_t
fread_unlocked (void *__restrict __ptr, size_t __size, size_t __n,
  FILE *__restrict __stream)
{
  size_t sz = __builtin_object_size (__ptr, 0);
  if (((__builtin_constant_p (sz) && (sz) == (long unsigned int) -1) || (((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((long unsigned int) (__n)) <= ((sz)) / ((__size)))) && (((long unsigned int) (__n)) <= ((sz)) / ((__size))))))
    {

      if (__builtin_constant_p (__size)
   && __builtin_constant_p (__n)
   && (__size | __n) < (((size_t) 1) << (8 * sizeof (size_t) / 2))
   && __size * __n <= 8)
 {
   size_t __cnt = __size * __n;
   char *__cptr = (char *) __ptr;
   if (__cnt == 0)
     return 0;

   for (; __cnt > 0; --__cnt)
     {
       int __c = getc_unlocked (__stream);
       if (__c == (-1))
  break;
       *__cptr++ = __c;
     }
   return (__cptr - (char *) __ptr) / __size;
 }

      return __fread_unlocked_alias (__ptr, __size, __n, __stream);
    }
  if ((((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((long unsigned int) (__n)) <= (sz) / (__size))) && !(((long unsigned int) (__n)) <= (sz) / (__size))))
    return __fread_unlocked_chk_warn (__ptr, sz, __size, __n, __stream);
  return __fread_unlocked_chk (__ptr, sz, __size, __n, __stream);

}
# 907 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/stdio.h" 2 3 4


}
# 43 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cstdio" 2 3


#define _GLIBCXX_CSTDIO 1






#undef clearerr
#undef fclose
#undef feof
#undef ferror
#undef fflush
#undef fgetc
#undef fgetpos
#undef fgets
#undef fopen
#undef fprintf
#undef fputc
#undef fputs
#undef fread
#undef freopen
#undef fscanf
#undef fseek
#undef fsetpos
#undef ftell
#undef fwrite
#undef getc
#undef getchar

#undef gets

#undef perror
#undef printf
#undef putc
#undef putchar
#undef puts
#undef remove
#undef rename
#undef rewind
#undef scanf
#undef setbuf
#undef setvbuf
#undef sprintf
#undef sscanf
#undef tmpfile
#undef tmpnam
#undef ungetc
#undef vfprintf
#undef vprintf
#undef vsprintf

namespace std
{
  using ::FILE;
  using ::fpos_t;

  using ::clearerr;
  using ::fclose;
  using ::feof;
  using ::ferror;
  using ::fflush;
  using ::fgetc;
  using ::fgetpos;
  using ::fgets;
  using ::fopen;
  using ::fprintf;
  using ::fputc;
  using ::fputs;
  using ::fread;
  using ::freopen;
  using ::fscanf;
  using ::fseek;
  using ::fsetpos;
  using ::ftell;
  using ::fwrite;
  using ::getc;
  using ::getchar;


  using ::gets;

  using ::perror;
  using ::printf;
  using ::putc;
  using ::putchar;
  using ::puts;
  using ::remove;
  using ::rename;
  using ::rewind;
  using ::scanf;
  using ::setbuf;
  using ::setvbuf;
  using ::sprintf;
  using ::sscanf;
  using ::tmpfile;

  using ::tmpnam;

  using ::ungetc;
  using ::vfprintf;
  using ::vprintf;
  using ::vsprintf;
}



#undef snprintf
#undef vfscanf
#undef vscanf
#undef vsnprintf
#undef vsscanf

namespace __gnu_cxx
{
# 175 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cstdio" 3
  using ::snprintf;
  using ::vfscanf;
  using ::vscanf;
  using ::vsnprintf;
  using ::vsscanf;

}

namespace std
{
  using ::__gnu_cxx::snprintf;
  using ::__gnu_cxx::vfscanf;
  using ::__gnu_cxx::vscanf;
  using ::__gnu_cxx::vsnprintf;
  using ::__gnu_cxx::vsscanf;
}
# 196 "../harfbuzz-6.0.0/src/hb.hh" 2
# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cstdlib" 1 3
# 39 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cstdlib" 3
       
# 40 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cstdlib" 3




#define _GLIBCXX_CSTDLIB 1
# 78 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cstdlib" 3
#define _GLIBCXX_INCLUDE_NEXT_C_HEADERS 

#undef _GLIBCXX_INCLUDE_NEXT_C_HEADERS



#undef abort



#undef atexit


#undef at_quick_exit


#undef atof
#undef atoi
#undef atol
#undef bsearch
#undef calloc
#undef div
#undef exit
#undef free
#undef getenv
#undef labs
#undef ldiv
#undef malloc
#undef mblen
#undef mbstowcs
#undef mbtowc
#undef qsort


#undef quick_exit


#undef rand
#undef realloc
#undef srand
#undef strtod
#undef strtol
#undef strtoul
#undef system
#undef wcstombs
#undef wctomb

extern "C++"
{
namespace std __attribute__ ((__visibility__ ("default")))
{


  using ::div_t;
  using ::ldiv_t;

  using ::abort;



  using ::atexit;


  using ::at_quick_exit;


  using ::atof;
  using ::atoi;
  using ::atol;
  using ::bsearch;
  using ::calloc;
  using ::div;
  using ::exit;
  using ::free;
  using ::getenv;
  using ::labs;
  using ::ldiv;
  using ::malloc;

  using ::mblen;
  using ::mbstowcs;
  using ::mbtowc;

  using ::qsort;


  using ::quick_exit;


  using ::rand;
  using ::realloc;
  using ::srand;
  using ::strtod;
  using ::strtol;
  using ::strtoul;
  using ::system;

  using ::wcstombs;
  using ::wctomb;



  inline ldiv_t
  div(long __i, long __j) noexcept { return ldiv(__i, __j); }




}



#undef _Exit
#undef llabs
#undef lldiv
#undef atoll
#undef strtoll
#undef strtoull
#undef strtof
#undef strtold

namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
{



  using ::lldiv_t;





  using ::_Exit;



  using ::llabs;

  inline lldiv_t
  div(long long __n, long long __d)
  { lldiv_t __q; __q.quot = __n / __d; __q.rem = __n % __d; return __q; }

  using ::lldiv;
# 231 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cstdlib" 3
  using ::atoll;
  using ::strtoll;
  using ::strtoull;

  using ::strtof;
  using ::strtold;


}

namespace std
{

  using ::__gnu_cxx::lldiv_t;

  using ::__gnu_cxx::_Exit;

  using ::__gnu_cxx::llabs;
  using ::__gnu_cxx::div;
  using ::__gnu_cxx::lldiv;

  using ::__gnu_cxx::atoll;
  using ::__gnu_cxx::strtof;
  using ::__gnu_cxx::strtoll;
  using ::__gnu_cxx::strtoull;
  using ::__gnu_cxx::strtold;
}



}
# 197 "../harfbuzz-6.0.0/src/hb.hh" 2
# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cstring" 1 3
# 39 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cstring" 3
       
# 40 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cstring" 3


# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/string.h" 1 3 4
# 23 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/string.h" 3 4
#define _STRING_H 1

#define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION 
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/libc-header-start.h" 1 3 4
# 31 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/libc-header-start.h" 3 4
#undef __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION





#undef __GLIBC_USE_LIB_EXT2


#define __GLIBC_USE_LIB_EXT2 1
# 67 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/libc-header-start.h" 3 4
#undef __GLIBC_USE_IEC_60559_BFP_EXT

#define __GLIBC_USE_IEC_60559_BFP_EXT 1



#undef __GLIBC_USE_IEC_60559_BFP_EXT_C2X

#define __GLIBC_USE_IEC_60559_BFP_EXT_C2X 1



#undef __GLIBC_USE_IEC_60559_EXT

#define __GLIBC_USE_IEC_60559_EXT 1
# 90 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/libc-header-start.h" 3 4
#undef __GLIBC_USE_IEC_60559_FUNCS_EXT

#define __GLIBC_USE_IEC_60559_FUNCS_EXT 1



#undef __GLIBC_USE_IEC_60559_FUNCS_EXT_C2X

#define __GLIBC_USE_IEC_60559_FUNCS_EXT_C2X 1






#undef __GLIBC_USE_IEC_60559_TYPES_EXT

#define __GLIBC_USE_IEC_60559_TYPES_EXT 1
# 27 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/string.h" 2 3 4

extern "C" {


#define __need_size_t 
#define __need_NULL 
# 1 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 1 3 4
# 158 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 3 4
#undef __need_ptrdiff_t
# 237 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 3 4
#undef __need_size_t
# 349 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 3 4
#undef __need_wchar_t
# 399 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 3 4
#undef NULL

#define NULL __null
# 410 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 3 4
#undef __need_NULL




#undef offsetof
#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
# 34 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/string.h" 2 3 4




#define __CORRECT_ISO_CPP_STRING_H_PROTO 




extern void *memcpy (void *__restrict __dest, const void *__restrict __src,
       size_t __n) noexcept (true) __attribute__ ((__nonnull__ (1, 2)));


extern void *memmove (void *__dest, const void *__src, size_t __n)
     noexcept (true) __attribute__ ((__nonnull__ (1, 2)));





extern void *memccpy (void *__restrict __dest, const void *__restrict __src,
        int __c, size_t __n)
    noexcept (true) __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__access__ (__write_only__, 1, 4)));




extern void *memset (void *__s, int __c, size_t __n) noexcept (true) __attribute__ ((__nonnull__ (1)));


extern int memcmp (const void *__s1, const void *__s2, size_t __n)
     noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
# 80 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/string.h" 3 4
extern int __memcmpeq (const void *__s1, const void *__s2, size_t __n)
     noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));



extern "C++"
{
extern void *memchr (void *__s, int __c, size_t __n)
      noexcept (true) __asm ("memchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
extern const void *memchr (const void *__s, int __c, size_t __n)
      noexcept (true) __asm ("memchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));


extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) void *
memchr (void *__s, int __c, size_t __n) noexcept (true)
{
  return __builtin_memchr (__s, __c, __n);
}

extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const void *
memchr (const void *__s, int __c, size_t __n) noexcept (true)
{
  return __builtin_memchr (__s, __c, __n);
}

}
# 115 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/string.h" 3 4
extern "C++" void *rawmemchr (void *__s, int __c)
     noexcept (true) __asm ("rawmemchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
extern "C++" const void *rawmemchr (const void *__s, int __c)
     noexcept (true) __asm ("rawmemchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));







extern "C++" void *memrchr (void *__s, int __c, size_t __n)
      noexcept (true) __asm ("memrchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)))
      __attribute__ ((__access__ (__read_only__, 1, 3)));
extern "C++" const void *memrchr (const void *__s, int __c, size_t __n)
      noexcept (true) __asm ("memrchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)))
      __attribute__ ((__access__ (__read_only__, 1, 3)));
# 141 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/string.h" 3 4
extern char *strcpy (char *__restrict __dest, const char *__restrict __src)
     noexcept (true) __attribute__ ((__nonnull__ (1, 2)));

extern char *strncpy (char *__restrict __dest,
        const char *__restrict __src, size_t __n)
     noexcept (true) __attribute__ ((__nonnull__ (1, 2)));


extern char *strcat (char *__restrict __dest, const char *__restrict __src)
     noexcept (true) __attribute__ ((__nonnull__ (1, 2)));

extern char *strncat (char *__restrict __dest, const char *__restrict __src,
        size_t __n) noexcept (true) __attribute__ ((__nonnull__ (1, 2)));


extern int strcmp (const char *__s1, const char *__s2)
     noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));

extern int strncmp (const char *__s1, const char *__s2, size_t __n)
     noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));


extern int strcoll (const char *__s1, const char *__s2)
     noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));

extern size_t strxfrm (char *__restrict __dest,
         const char *__restrict __src, size_t __n)
    noexcept (true) __attribute__ ((__nonnull__ (2))) __attribute__ ((__access__ (__write_only__, 1, 3)));






extern int strcoll_l (const char *__s1, const char *__s2, locale_t __l)
     noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 3)));


extern size_t strxfrm_l (char *__dest, const char *__src, size_t __n,
    locale_t __l) noexcept (true) __attribute__ ((__nonnull__ (2, 4)))
     __attribute__ ((__access__ (__write_only__, 1, 3)));





extern char *strdup (const char *__s)
     noexcept (true) __attribute__ ((__malloc__)) __attribute__ ((__nonnull__ (1)));






extern char *strndup (const char *__string, size_t __n)
     noexcept (true) __attribute__ ((__malloc__)) __attribute__ ((__nonnull__ (1)));




#define strdupa(s) (__extension__ ({ const char *__old = (s); size_t __len = strlen (__old) + 1; char *__new = (char *) __builtin_alloca (__len); (char *) memcpy (__new, __old, __len); }))
# 211 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/string.h" 3 4
#define strndupa(s,n) (__extension__ ({ const char *__old = (s); size_t __len = strnlen (__old, (n)); char *__new = (char *) __builtin_alloca (__len + 1); __new[__len] = '\0'; (char *) memcpy (__new, __old, __len); }))
# 224 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/string.h" 3 4
extern "C++"
{
extern char *strchr (char *__s, int __c)
     noexcept (true) __asm ("strchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
extern const char *strchr (const char *__s, int __c)
     noexcept (true) __asm ("strchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));


extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char *
strchr (char *__s, int __c) noexcept (true)
{
  return __builtin_strchr (__s, __c);
}

extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char *
strchr (const char *__s, int __c) noexcept (true)
{
  return __builtin_strchr (__s, __c);
}

}






extern "C++"
{
extern char *strrchr (char *__s, int __c)
     noexcept (true) __asm ("strrchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
extern const char *strrchr (const char *__s, int __c)
     noexcept (true) __asm ("strrchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));


extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char *
strrchr (char *__s, int __c) noexcept (true)
{
  return __builtin_strrchr (__s, __c);
}

extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char *
strrchr (const char *__s, int __c) noexcept (true)
{
  return __builtin_strrchr (__s, __c);
}

}
# 281 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/string.h" 3 4
extern "C++" char *strchrnul (char *__s, int __c)
     noexcept (true) __asm ("strchrnul") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
extern "C++" const char *strchrnul (const char *__s, int __c)
     noexcept (true) __asm ("strchrnul") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
# 293 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/string.h" 3 4
extern size_t strcspn (const char *__s, const char *__reject)
     noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));


extern size_t strspn (const char *__s, const char *__accept)
     noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));


extern "C++"
{
extern char *strpbrk (char *__s, const char *__accept)
     noexcept (true) __asm ("strpbrk") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
extern const char *strpbrk (const char *__s, const char *__accept)
     noexcept (true) __asm ("strpbrk") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));


extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char *
strpbrk (char *__s, const char *__accept) noexcept (true)
{
  return __builtin_strpbrk (__s, __accept);
}

extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char *
strpbrk (const char *__s, const char *__accept) noexcept (true)
{
  return __builtin_strpbrk (__s, __accept);
}

}






extern "C++"
{
extern char *strstr (char *__haystack, const char *__needle)
     noexcept (true) __asm ("strstr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
extern const char *strstr (const char *__haystack, const char *__needle)
     noexcept (true) __asm ("strstr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));


extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char *
strstr (char *__haystack, const char *__needle) noexcept (true)
{
  return __builtin_strstr (__haystack, __needle);
}

extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char *
strstr (const char *__haystack, const char *__needle) noexcept (true)
{
  return __builtin_strstr (__haystack, __needle);
}

}







extern char *strtok (char *__restrict __s, const char *__restrict __delim)
     noexcept (true) __attribute__ ((__nonnull__ (2)));



extern char *__strtok_r (char *__restrict __s,
    const char *__restrict __delim,
    char **__restrict __save_ptr)
     noexcept (true) __attribute__ ((__nonnull__ (2, 3)));

extern char *strtok_r (char *__restrict __s, const char *__restrict __delim,
         char **__restrict __save_ptr)
     noexcept (true) __attribute__ ((__nonnull__ (2, 3)));





extern "C++" char *strcasestr (char *__haystack, const char *__needle)
     noexcept (true) __asm ("strcasestr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
extern "C++" const char *strcasestr (const char *__haystack,
         const char *__needle)
     noexcept (true) __asm ("strcasestr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
# 389 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/string.h" 3 4
extern void *memmem (const void *__haystack, size_t __haystacklen,
       const void *__needle, size_t __needlelen)
     noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 3)))
    __attribute__ ((__access__ (__read_only__, 1, 2)))
    __attribute__ ((__access__ (__read_only__, 3, 4)));



extern void *__mempcpy (void *__restrict __dest,
   const void *__restrict __src, size_t __n)
     noexcept (true) __attribute__ ((__nonnull__ (1, 2)));
extern void *mempcpy (void *__restrict __dest,
        const void *__restrict __src, size_t __n)
     noexcept (true) __attribute__ ((__nonnull__ (1, 2)));




extern size_t strlen (const char *__s)
     noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));




extern size_t strnlen (const char *__string, size_t __maxlen)
     noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));




extern char *strerror (int __errnum) noexcept (true);
# 444 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/string.h" 3 4
extern char *strerror_r (int __errnum, char *__buf, size_t __buflen)
     noexcept (true) __attribute__ ((__nonnull__ (2))) __attribute__ ((__warn_unused_result__)) __attribute__ ((__access__ (__write_only__, 2, 3)));




extern const char *strerrordesc_np (int __err) noexcept (true);

extern const char *strerrorname_np (int __err) noexcept (true);





extern char *strerror_l (int __errnum, locale_t __l) noexcept (true);



# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/strings.h" 1 3 4
# 19 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/strings.h" 3 4
#define _STRINGS_H 1


#define __need_size_t 
# 1 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 1 3 4
# 158 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 3 4
#undef __need_ptrdiff_t
# 237 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 3 4
#undef __need_size_t
# 349 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 3 4
#undef __need_wchar_t
# 399 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 3 4
#undef NULL

#define NULL __null
# 410 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 3 4
#undef __need_NULL




#undef offsetof
#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
# 24 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/strings.h" 2 3 4



#define __CORRECT_ISO_CPP_STRINGS_H_PROTO 


extern "C" {



extern int bcmp (const void *__s1, const void *__s2, size_t __n)
     noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));


extern void bcopy (const void *__src, void *__dest, size_t __n)
  noexcept (true) __attribute__ ((__nonnull__ (1, 2)));


extern void bzero (void *__s, size_t __n) noexcept (true) __attribute__ ((__nonnull__ (1)));



extern "C++"
{
extern char *index (char *__s, int __c)
     noexcept (true) __asm ("index") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
extern const char *index (const char *__s, int __c)
     noexcept (true) __asm ("index") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));


extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char *
index (char *__s, int __c) noexcept (true)
{
  return __builtin_index (__s, __c);
}

extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char *
index (const char *__s, int __c) noexcept (true)
{
  return __builtin_index (__s, __c);
}

}







extern "C++"
{
extern char *rindex (char *__s, int __c)
     noexcept (true) __asm ("rindex") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
extern const char *rindex (const char *__s, int __c)
     noexcept (true) __asm ("rindex") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));


extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char *
rindex (char *__s, int __c) noexcept (true)
{
  return __builtin_rindex (__s, __c);
}

extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char *
rindex (const char *__s, int __c) noexcept (true)
{
  return __builtin_rindex (__s, __c);
}

}
# 104 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/strings.h" 3 4
extern int ffs (int __i) noexcept (true) __attribute__ ((__const__));





extern int ffsl (long int __l) noexcept (true) __attribute__ ((__const__));
__extension__ extern int ffsll (long long int __ll)
     noexcept (true) __attribute__ ((__const__));



extern int strcasecmp (const char *__s1, const char *__s2)
     noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));


extern int strncasecmp (const char *__s1, const char *__s2, size_t __n)
     noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));






extern int strcasecmp_l (const char *__s1, const char *__s2, locale_t __loc)
     noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 3)));



extern int strncasecmp_l (const char *__s1, const char *__s2,
     size_t __n, locale_t __loc)
     noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 4)));


}





# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/strings_fortified.h" 1 3 4
# 20 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/strings_fortified.h" 3 4
#define __STRINGS_FORTIFIED 1

extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void
__attribute__ ((__leaf__)) bcopy (const void *__src, void *__dest, size_t __len) noexcept (true)
{
  (void) __builtin___memmove_chk (__dest, __src, __len,
      __builtin_object_size (__dest, 0));
}

extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void
__attribute__ ((__leaf__)) bzero (void *__dest, size_t __len) noexcept (true)
{
  (void) __builtin___memset_chk (__dest, '\0', __len,
     __builtin_object_size (__dest, 0));
}
# 145 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/strings.h" 2 3 4
# 463 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/string.h" 2 3 4



extern void explicit_bzero (void *__s, size_t __n) noexcept (true) __attribute__ ((__nonnull__ (1)))
    __attribute__ ((__access__ (__write_only__, 1, 2)));



extern char *strsep (char **__restrict __stringp,
       const char *__restrict __delim)
     noexcept (true) __attribute__ ((__nonnull__ (1, 2)));




extern char *strsignal (int __sig) noexcept (true);



extern const char *sigabbrev_np (int __sig) noexcept (true);


extern const char *sigdescr_np (int __sig) noexcept (true);



extern char *__stpcpy (char *__restrict __dest, const char *__restrict __src)
     noexcept (true) __attribute__ ((__nonnull__ (1, 2)));
extern char *stpcpy (char *__restrict __dest, const char *__restrict __src)
     noexcept (true) __attribute__ ((__nonnull__ (1, 2)));



extern char *__stpncpy (char *__restrict __dest,
   const char *__restrict __src, size_t __n)
     noexcept (true) __attribute__ ((__nonnull__ (1, 2)));
extern char *stpncpy (char *__restrict __dest,
        const char *__restrict __src, size_t __n)
     noexcept (true) __attribute__ ((__nonnull__ (1, 2)));




extern int strverscmp (const char *__s1, const char *__s2)
     noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));


extern char *strfry (char *__string) noexcept (true) __attribute__ ((__nonnull__ (1)));


extern void *memfrob (void *__s, size_t __n) noexcept (true) __attribute__ ((__nonnull__ (1)))
    __attribute__ ((__access__ (__read_write__, 1, 2)));







extern "C++" char *basename (char *__filename)
     noexcept (true) __asm ("basename") __attribute__ ((__nonnull__ (1)));
extern "C++" const char *basename (const char *__filename)
     noexcept (true) __asm ("basename") __attribute__ ((__nonnull__ (1)));
# 535 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/string.h" 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/string_fortified.h" 1 3 4
# 19 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/string_fortified.h" 3 4
#define _BITS_STRING_FORTIFIED_H 1





extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void *
__attribute__ ((__leaf__)) memcpy (void *__restrict __dest, const void *__restrict __src, size_t __len) noexcept (true)

{
  return __builtin___memcpy_chk (__dest, __src, __len,
     __builtin_object_size (__dest, 0));
}

extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void *
__attribute__ ((__leaf__)) memmove (void *__dest, const void *__src, size_t __len) noexcept (true)
{
  return __builtin___memmove_chk (__dest, __src, __len,
      __builtin_object_size (__dest, 0));
}


extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void *
__attribute__ ((__leaf__)) mempcpy (void *__restrict __dest, const void *__restrict __src, size_t __len) noexcept (true)

{
  return __builtin___mempcpy_chk (__dest, __src, __len,
      __builtin_object_size (__dest, 0));
}
# 56 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/string_fortified.h" 3 4
extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void *
__attribute__ ((__leaf__)) memset (void *__dest, int __ch, size_t __len) noexcept (true)
{
  return __builtin___memset_chk (__dest, __ch, __len,
     __builtin_object_size (__dest, 0));
}




void __explicit_bzero_chk (void *__dest, size_t __len, size_t __destlen)
  noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__access__ (__write_only__, 1, 2)));

extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void
__attribute__ ((__leaf__)) explicit_bzero (void *__dest, size_t __len) noexcept (true)
{
  __explicit_bzero_chk (__dest, __len, __builtin_object_size (__dest, 0));
}


extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char *
__attribute__ ((__leaf__)) strcpy (char *__restrict __dest, const char *__restrict __src) noexcept (true)
{
  return __builtin___strcpy_chk (__dest, __src, __builtin_object_size (__dest, 2 > 1));
}


extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char *
__attribute__ ((__leaf__)) stpcpy (char *__restrict __dest, const char *__restrict __src) noexcept (true)
{
  return __builtin___stpcpy_chk (__dest, __src, __builtin_object_size (__dest, 2 > 1));
}



extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char *
__attribute__ ((__leaf__)) strncpy (char *__restrict __dest, const char *__restrict __src, size_t __len) noexcept (true)

{
  return __builtin___strncpy_chk (__dest, __src, __len,
      __builtin_object_size (__dest, 2 > 1));
}



extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char *
__attribute__ ((__leaf__)) stpncpy (char *__dest, const char *__src, size_t __n) noexcept (true)
{
  return __builtin___stpncpy_chk (__dest, __src, __n,
      __builtin_object_size (__dest, 2 > 1));
}
# 127 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/string_fortified.h" 3 4
extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char *
__attribute__ ((__leaf__)) strcat (char *__restrict __dest, const char *__restrict __src) noexcept (true)
{
  return __builtin___strcat_chk (__dest, __src, __builtin_object_size (__dest, 2 > 1));
}


extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char *
__attribute__ ((__leaf__)) strncat (char *__restrict __dest, const char *__restrict __src, size_t __len) noexcept (true)

{
  return __builtin___strncat_chk (__dest, __src, __len,
      __builtin_object_size (__dest, 2 > 1));
}
# 536 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/string.h" 2 3 4



}
# 43 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cstring" 2 3


#define _GLIBCXX_CSTRING 1


#undef memchr
#undef memcmp
#undef memcpy
#undef memmove
#undef memset
#undef strcat
#undef strchr
#undef strcmp
#undef strcoll
#undef strcpy
#undef strcspn
#undef strerror
#undef strlen
#undef strncat
#undef strncmp
#undef strncpy
#undef strpbrk
#undef strrchr
#undef strspn
#undef strstr
#undef strtok
#undef strxfrm

extern "C++"
{
namespace std __attribute__ ((__visibility__ ("default")))
{


  using ::memchr;
  using ::memcmp;
  using ::memcpy;
  using ::memmove;
  using ::memset;
  using ::strcat;
  using ::strcmp;
  using ::strcoll;
  using ::strcpy;
  using ::strcspn;
  using ::strerror;
  using ::strlen;
  using ::strncat;
  using ::strncmp;
  using ::strncpy;
  using ::strspn;
  using ::strtok;
  using ::strxfrm;
  using ::strchr;
  using ::strpbrk;
  using ::strrchr;
  using ::strstr;
# 122 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cstring" 3

}
}
# 198 "../harfbuzz-6.0.0/src/hb.hh" 2
# 214 "../harfbuzz-6.0.0/src/hb.hh"
#define HB_PASTE1(a,b) a ##b
#define HB_PASTE(a,b) HB_PASTE1(a,b)
# 238 "../harfbuzz-6.0.0/src/hb.hh"
#define hb_malloc malloc
#define hb_calloc calloc
#define hb_realloc realloc
#define hb_free free
# 250 "../harfbuzz-6.0.0/src/hb.hh"
#define likely(expr) (__builtin_expect (!!(expr), 1))
#define unlikely(expr) (__builtin_expect (!!(expr), 0))
# 263 "../harfbuzz-6.0.0/src/hb.hh"
#define HB_PRINTF_FUNC(format_idx,arg_idx) __attribute__((__format__ (__printf__, format_idx, arg_idx)))




#define HB_UNUSED __attribute__((unused))
# 277 "../harfbuzz-6.0.0/src/hb.hh"
#define HB_INTERNAL __attribute__((__visibility__("hidden")))
# 294 "../harfbuzz-6.0.0/src/hb.hh"
#define static_const static const



#define HB_FUNC __PRETTY_FUNCTION__
# 331 "../harfbuzz-6.0.0/src/hb.hh"
#define HB_FALLTHROUGH __attribute__((fallthrough))
# 347 "../harfbuzz-6.0.0/src/hb.hh"
#define HB_NODISCARD __attribute__((warn_unused_result))
# 360 "../harfbuzz-6.0.0/src/hb.hh"
#define HB_NO_SANITIZE_SIGNED_INTEGER_OVERFLOW 
# 408 "../harfbuzz-6.0.0/src/hb.hh"
# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cerrno" 1 3
# 39 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cerrno" 3
       
# 40 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cerrno" 3


# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/errno.h" 1 3 4
# 23 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/errno.h" 3 4
#define _ERRNO_H 1




# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/errno.h" 1 3 4
# 20 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/errno.h" 3 4
#define _BITS_ERRNO_H 1





# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/linux/errno.h" 1 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/asm/errno.h" 1 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/asm-generic/errno.h" 1 3 4


#define _ASM_GENERIC_ERRNO_H 

# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/asm-generic/errno-base.h" 1 3 4


#define _ASM_GENERIC_ERRNO_BASE_H 

#define EPERM 1
#define ENOENT 2
#define ESRCH 3
#define EINTR 4
#define EIO 5
#define ENXIO 6
#define E2BIG 7
#define ENOEXEC 8
#define EBADF 9
#define ECHILD 10
#define EAGAIN 11
#define ENOMEM 12
#define EACCES 13
#define EFAULT 14
#define ENOTBLK 15
#define EBUSY 16
#define EEXIST 17
#define EXDEV 18
#define ENODEV 19
#define ENOTDIR 20
#define EISDIR 21
#define EINVAL 22
#define ENFILE 23
#define EMFILE 24
#define ENOTTY 25
#define ETXTBSY 26
#define EFBIG 27
#define ENOSPC 28
#define ESPIPE 29
#define EROFS 30
#define EMLINK 31
#define EPIPE 32
#define EDOM 33
#define ERANGE 34
# 6 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/asm-generic/errno.h" 2 3 4

#define EDEADLK 35
#define ENAMETOOLONG 36
#define ENOLCK 37
# 18 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/asm-generic/errno.h" 3 4
#define ENOSYS 38

#define ENOTEMPTY 39
#define ELOOP 40
#define EWOULDBLOCK EAGAIN
#define ENOMSG 42
#define EIDRM 43
#define ECHRNG 44
#define EL2NSYNC 45
#define EL3HLT 46
#define EL3RST 47
#define ELNRNG 48
#define EUNATCH 49
#define ENOCSI 50
#define EL2HLT 51
#define EBADE 52
#define EBADR 53
#define EXFULL 54
#define ENOANO 55
#define EBADRQC 56
#define EBADSLT 57

#define EDEADLOCK EDEADLK

#define EBFONT 59
#define ENOSTR 60
#define ENODATA 61
#define ETIME 62
#define ENOSR 63
#define ENONET 64
#define ENOPKG 65
#define EREMOTE 66
#define ENOLINK 67
#define EADV 68
#define ESRMNT 69
#define ECOMM 70
#define EPROTO 71
#define EMULTIHOP 72
#define EDOTDOT 73
#define EBADMSG 74
#define EOVERFLOW 75
#define ENOTUNIQ 76
#define EBADFD 77
#define EREMCHG 78
#define ELIBACC 79
#define ELIBBAD 80
#define ELIBSCN 81
#define ELIBMAX 82
#define ELIBEXEC 83
#define EILSEQ 84
#define ERESTART 85
#define ESTRPIPE 86
#define EUSERS 87
#define ENOTSOCK 88
#define EDESTADDRREQ 89
#define EMSGSIZE 90
#define EPROTOTYPE 91
#define ENOPROTOOPT 92
#define EPROTONOSUPPORT 93
#define ESOCKTNOSUPPORT 94
#define EOPNOTSUPP 95
#define EPFNOSUPPORT 96
#define EAFNOSUPPORT 97
#define EADDRINUSE 98
#define EADDRNOTAVAIL 99
#define ENETDOWN 100
#define ENETUNREACH 101
#define ENETRESET 102
#define ECONNABORTED 103
#define ECONNRESET 104
#define ENOBUFS 105
#define EISCONN 106
#define ENOTCONN 107
#define ESHUTDOWN 108
#define ETOOMANYREFS 109
#define ETIMEDOUT 110
#define ECONNREFUSED 111
#define EHOSTDOWN 112
#define EHOSTUNREACH 113
#define EALREADY 114
#define EINPROGRESS 115
#define ESTALE 116
#define EUCLEAN 117
#define ENOTNAM 118
#define ENAVAIL 119
#define EISNAM 120
#define EREMOTEIO 121
#define EDQUOT 122

#define ENOMEDIUM 123
#define EMEDIUMTYPE 124
#define ECANCELED 125
#define ENOKEY 126
#define EKEYEXPIRED 127
#define EKEYREVOKED 128
#define EKEYREJECTED 129


#define EOWNERDEAD 130
#define ENOTRECOVERABLE 131

#define ERFKILL 132

#define EHWPOISON 133
# 2 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/asm/errno.h" 2 3 4
# 2 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/linux/errno.h" 2 3 4
# 27 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/errno.h" 2 3 4



#define ENOTSUP EOPNOTSUPP
# 29 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/errno.h" 2 3 4





extern "C" {


extern int *__errno_location (void) noexcept (true) __attribute__ ((__const__));
#define errno (*__errno_location ())






extern char *program_invocation_name;
extern char *program_invocation_short_name;

# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/types/error_t.h" 1 3 4
# 20 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/types/error_t.h" 3 4
#define __error_t_defined 1

typedef int error_t;
# 49 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/errno.h" 2 3 4



}
# 43 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cerrno" 2 3


#define _GLIBCXX_CERRNO 1
# 409 "../harfbuzz-6.0.0/src/hb.hh" 2






#define HB_STMT_START do
#define HB_STMT_END while (0)
# 425 "../harfbuzz-6.0.0/src/hb.hh"
#define HB_USE_ATEXIT 1
# 458 "../harfbuzz-6.0.0/src/hb.hh"
#define hb_atexit atexit
# 467 "../harfbuzz-6.0.0/src/hb.hh"

# 467 "../harfbuzz-6.0.0/src/hb.hh"
static_assert ((sizeof (hb_codepoint_t) == 4), "");
static_assert ((sizeof (hb_position_t) == 4), "");
static_assert ((sizeof (hb_mask_t) == 4), "");
static_assert ((sizeof (hb_var_int_t) == 4), "");





# 1 "../harfbuzz-6.0.0/src/hb-cplusplus.hh" 1
# 26 "../harfbuzz-6.0.0/src/hb-cplusplus.hh"
#define HB_CPLUSPLUS_HH 



extern "C" {
}



# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/functional" 1 3
# 44 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/functional" 3
#define _GLIBCXX_FUNCTIONAL 1

       
# 47 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/functional" 3


# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_function.h" 1 3
# 57 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_function.h" 3
#define _STL_FUNCTION_H 1






# 63 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_function.h" 3
namespace std __attribute__ ((__visibility__ ("default")))
{

# 116 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_function.h" 3
  template<typename _Arg, typename _Result>
    struct unary_function
    {

      typedef _Arg argument_type;


      typedef _Result result_type;
    } __attribute__ ((__deprecated__));





  template<typename _Arg1, typename _Arg2, typename _Result>
    struct binary_function
    {

      typedef _Arg1 first_argument_type;


      typedef _Arg2 second_argument_type;


      typedef _Result result_type;
    } __attribute__ ((__deprecated__));
# 179 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_function.h" 3
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"


  template<typename _Tp>
    struct plus : public binary_function<_Tp, _Tp, _Tp>
    {

     
      _Tp
      operator()(const _Tp& __x, const _Tp& __y) const
      { return __x + __y; }
    };


  template<typename _Tp>
    struct minus : public binary_function<_Tp, _Tp, _Tp>
    {
     
      _Tp
      operator()(const _Tp& __x, const _Tp& __y) const
      { return __x - __y; }
    };


  template<typename _Tp>
    struct multiplies : public binary_function<_Tp, _Tp, _Tp>
    {
     
      _Tp
      operator()(const _Tp& __x, const _Tp& __y) const
      { return __x * __y; }
    };


  template<typename _Tp>
    struct divides : public binary_function<_Tp, _Tp, _Tp>
    {
     
      _Tp
      operator()(const _Tp& __x, const _Tp& __y) const
      { return __x / __y; }
    };


  template<typename _Tp>
    struct modulus : public binary_function<_Tp, _Tp, _Tp>
    {
     
      _Tp
      operator()(const _Tp& __x, const _Tp& __y) const
      { return __x % __y; }
    };


  template<typename _Tp>
    struct negate : public unary_function<_Tp, _Tp>
    {
     
      _Tp
      operator()(const _Tp& __x) const
      { return -__x; }
    };
#pragma GCC diagnostic pop
# 368 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_function.h" 3
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"


  template<typename _Tp>
    struct equal_to : public binary_function<_Tp, _Tp, bool>
    {
     
      bool
      operator()(const _Tp& __x, const _Tp& __y) const
      { return __x == __y; }
    };


  template<typename _Tp>
    struct not_equal_to : public binary_function<_Tp, _Tp, bool>
    {
     
      bool
      operator()(const _Tp& __x, const _Tp& __y) const
      { return __x != __y; }
    };


  template<typename _Tp>
    struct greater : public binary_function<_Tp, _Tp, bool>
    {
     
      bool
      operator()(const _Tp& __x, const _Tp& __y) const
      { return __x > __y; }
    };


  template<typename _Tp>
    struct less : public binary_function<_Tp, _Tp, bool>
    {
     
      bool
      operator()(const _Tp& __x, const _Tp& __y) const
      { return __x < __y; }
    };


  template<typename _Tp>
    struct greater_equal : public binary_function<_Tp, _Tp, bool>
    {
     
      bool
      operator()(const _Tp& __x, const _Tp& __y) const
      { return __x >= __y; }
    };


  template<typename _Tp>
    struct less_equal : public binary_function<_Tp, _Tp, bool>
    {
     
      bool
      operator()(const _Tp& __x, const _Tp& __y) const
      { return __x <= __y; }
    };


  template<typename _Tp>
    struct greater<_Tp*> : public binary_function<_Tp*, _Tp*, bool>
    {
      bool
      operator()(_Tp* __x, _Tp* __y) const noexcept
      {




 return (long unsigned int)__x > (long unsigned int)__y;
      }
    };


  template<typename _Tp>
    struct less<_Tp*> : public binary_function<_Tp*, _Tp*, bool>
    {
      bool
      operator()(_Tp* __x, _Tp* __y) const noexcept
      {




 return (long unsigned int)__x < (long unsigned int)__y;
      }
    };


  template<typename _Tp>
    struct greater_equal<_Tp*> : public binary_function<_Tp*, _Tp*, bool>
    {
      bool
      operator()(_Tp* __x, _Tp* __y) const noexcept
      {




 return (long unsigned int)__x >= (long unsigned int)__y;
      }
    };


  template<typename _Tp>
    struct less_equal<_Tp*> : public binary_function<_Tp*, _Tp*, bool>
    {
      bool
      operator()(_Tp* __x, _Tp* __y) const noexcept
      {




 return (long unsigned int)__x <= (long unsigned int)__y;
      }
    };
#pragma GCC diagnostic pop
# 791 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_function.h" 3
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"


  template<typename _Tp>
    struct logical_and : public binary_function<_Tp, _Tp, bool>
    {
     
      bool
      operator()(const _Tp& __x, const _Tp& __y) const
      { return __x && __y; }
    };


  template<typename _Tp>
    struct logical_or : public binary_function<_Tp, _Tp, bool>
    {
     
      bool
      operator()(const _Tp& __x, const _Tp& __y) const
      { return __x || __y; }
    };


  template<typename _Tp>
    struct logical_not : public unary_function<_Tp, bool>
    {
     
      bool
      operator()(const _Tp& __x) const
      { return !__x; }
    };
#pragma GCC diagnostic pop
# 887 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_function.h" 3
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"



  template<typename _Tp>
    struct bit_and : public binary_function<_Tp, _Tp, _Tp>
    {
     
      _Tp
      operator()(const _Tp& __x, const _Tp& __y) const
      { return __x & __y; }
    };

  template<typename _Tp>
    struct bit_or : public binary_function<_Tp, _Tp, _Tp>
    {
     
      _Tp
      operator()(const _Tp& __x, const _Tp& __y) const
      { return __x | __y; }
    };

  template<typename _Tp>
    struct bit_xor : public binary_function<_Tp, _Tp, _Tp>
    {
     
      _Tp
      operator()(const _Tp& __x, const _Tp& __y) const
      { return __x ^ __y; }
    };

  template<typename _Tp>
    struct bit_not : public unary_function<_Tp, _Tp>
    {
   
      _Tp
      operator()(const _Tp& __x) const
      { return ~__x; }
    };
#pragma GCC diagnostic pop
# 987 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_function.h" 3
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
# 1023 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_function.h" 3
  template<typename _Predicate>
    class unary_negate
    : public unary_function<typename _Predicate::argument_type, bool>
    {
    protected:
      _Predicate _M_pred;

    public:
     
      explicit
      unary_negate(const _Predicate& __x) : _M_pred(__x) { }

     
      bool
      operator()(const typename _Predicate::argument_type& __x) const
      { return !_M_pred(__x); }
    };


  template<typename _Predicate>
   
   
    inline unary_negate<_Predicate>
    not1(const _Predicate& __pred)
    { return unary_negate<_Predicate>(__pred); }


  template<typename _Predicate>
    class binary_negate
    : public binary_function<typename _Predicate::first_argument_type,
        typename _Predicate::second_argument_type, bool>
    {
    protected:
      _Predicate _M_pred;

    public:
     
      explicit
      binary_negate(const _Predicate& __x) : _M_pred(__x) { }

     
      bool
      operator()(const typename _Predicate::first_argument_type& __x,
   const typename _Predicate::second_argument_type& __y) const
      { return !_M_pred(__x, __y); }
    };


  template<typename _Predicate>
   
   
    inline binary_negate<_Predicate>
    not2(const _Predicate& __pred)
    { return binary_negate<_Predicate>(__pred); }
# 1104 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_function.h" 3
  template<typename _Arg, typename _Result>
    class pointer_to_unary_function : public unary_function<_Arg, _Result>
    {
    protected:
      _Result (*_M_ptr)(_Arg);

    public:
      pointer_to_unary_function() { }

      explicit
      pointer_to_unary_function(_Result (*__x)(_Arg))
      : _M_ptr(__x) { }

      _Result
      operator()(_Arg __x) const
      { return _M_ptr(__x); }
    } __attribute__ ((__deprecated__));


  template<typename _Arg, typename _Result>
    __attribute__ ((__deprecated__ ("use '" "std::function" "' instead")))
    inline pointer_to_unary_function<_Arg, _Result>
    ptr_fun(_Result (*__x)(_Arg))
    { return pointer_to_unary_function<_Arg, _Result>(__x); }


  template<typename _Arg1, typename _Arg2, typename _Result>
    class pointer_to_binary_function
    : public binary_function<_Arg1, _Arg2, _Result>
    {
    protected:
      _Result (*_M_ptr)(_Arg1, _Arg2);

    public:
      pointer_to_binary_function() { }

      explicit
      pointer_to_binary_function(_Result (*__x)(_Arg1, _Arg2))
      : _M_ptr(__x) { }

      _Result
      operator()(_Arg1 __x, _Arg2 __y) const
      { return _M_ptr(__x, __y); }
    } __attribute__ ((__deprecated__));


  template<typename _Arg1, typename _Arg2, typename _Result>
    __attribute__ ((__deprecated__ ("use '" "std::function" "' instead")))
    inline pointer_to_binary_function<_Arg1, _Arg2, _Result>
    ptr_fun(_Result (*__x)(_Arg1, _Arg2))
    { return pointer_to_binary_function<_Arg1, _Arg2, _Result>(__x); }


  template<typename _Tp>
    struct _Identity
    : public unary_function<_Tp, _Tp>
    {
      _Tp&
      operator()(_Tp& __x) const
      { return __x; }

      const _Tp&
      operator()(const _Tp& __x) const
      { return __x; }
    };


  template<typename _Tp> struct _Identity<const _Tp> : _Identity<_Tp> { };

  template<typename _Pair>
    struct _Select1st
    : public unary_function<_Pair, typename _Pair::first_type>
    {
      typename _Pair::first_type&
      operator()(_Pair& __x) const
      { return __x.first; }

      const typename _Pair::first_type&
      operator()(const _Pair& __x) const
      { return __x.first; }


      template<typename _Pair2>
        typename _Pair2::first_type&
        operator()(_Pair2& __x) const
        { return __x.first; }

      template<typename _Pair2>
        const typename _Pair2::first_type&
        operator()(const _Pair2& __x) const
        { return __x.first; }

    };

  template<typename _Pair>
    struct _Select2nd
    : public unary_function<_Pair, typename _Pair::second_type>
    {
      typename _Pair::second_type&
      operator()(_Pair& __x) const
      { return __x.second; }

      const typename _Pair::second_type&
      operator()(const _Pair& __x) const
      { return __x.second; }
    };
# 1231 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_function.h" 3
  template<typename _Ret, typename _Tp>
    class mem_fun_t : public unary_function<_Tp*, _Ret>
    {
    public:
      explicit
      mem_fun_t(_Ret (_Tp::*__pf)())
      : _M_f(__pf) { }

      _Ret
      operator()(_Tp* __p) const
      { return (__p->*_M_f)(); }

    private:
      _Ret (_Tp::*_M_f)();
    } __attribute__ ((__deprecated__));


  template<typename _Ret, typename _Tp>
    class const_mem_fun_t : public unary_function<const _Tp*, _Ret>
    {
    public:
      explicit
      const_mem_fun_t(_Ret (_Tp::*__pf)() const)
      : _M_f(__pf) { }

      _Ret
      operator()(const _Tp* __p) const
      { return (__p->*_M_f)(); }

    private:
      _Ret (_Tp::*_M_f)() const;
    } __attribute__ ((__deprecated__));


  template<typename _Ret, typename _Tp>
    class mem_fun_ref_t : public unary_function<_Tp, _Ret>
    {
    public:
      explicit
      mem_fun_ref_t(_Ret (_Tp::*__pf)())
      : _M_f(__pf) { }

      _Ret
      operator()(_Tp& __r) const
      { return (__r.*_M_f)(); }

    private:
      _Ret (_Tp::*_M_f)();
    } __attribute__ ((__deprecated__));


  template<typename _Ret, typename _Tp>
    class const_mem_fun_ref_t : public unary_function<_Tp, _Ret>
    {
    public:
      explicit
      const_mem_fun_ref_t(_Ret (_Tp::*__pf)() const)
      : _M_f(__pf) { }

      _Ret
      operator()(const _Tp& __r) const
      { return (__r.*_M_f)(); }

    private:
      _Ret (_Tp::*_M_f)() const;
    } __attribute__ ((__deprecated__));


  template<typename _Ret, typename _Tp, typename _Arg>
    class mem_fun1_t : public binary_function<_Tp*, _Arg, _Ret>
    {
    public:
      explicit
      mem_fun1_t(_Ret (_Tp::*__pf)(_Arg))
      : _M_f(__pf) { }

      _Ret
      operator()(_Tp* __p, _Arg __x) const
      { return (__p->*_M_f)(__x); }

    private:
      _Ret (_Tp::*_M_f)(_Arg);
    } __attribute__ ((__deprecated__));


  template<typename _Ret, typename _Tp, typename _Arg>
    class const_mem_fun1_t : public binary_function<const _Tp*, _Arg, _Ret>
    {
    public:
      explicit
      const_mem_fun1_t(_Ret (_Tp::*__pf)(_Arg) const)
      : _M_f(__pf) { }

      _Ret
      operator()(const _Tp* __p, _Arg __x) const
      { return (__p->*_M_f)(__x); }

    private:
      _Ret (_Tp::*_M_f)(_Arg) const;
    } __attribute__ ((__deprecated__));


  template<typename _Ret, typename _Tp, typename _Arg>
    class mem_fun1_ref_t : public binary_function<_Tp, _Arg, _Ret>
    {
    public:
      explicit
      mem_fun1_ref_t(_Ret (_Tp::*__pf)(_Arg))
      : _M_f(__pf) { }

      _Ret
      operator()(_Tp& __r, _Arg __x) const
      { return (__r.*_M_f)(__x); }

    private:
      _Ret (_Tp::*_M_f)(_Arg);
    } __attribute__ ((__deprecated__));


  template<typename _Ret, typename _Tp, typename _Arg>
    class const_mem_fun1_ref_t : public binary_function<_Tp, _Arg, _Ret>
    {
    public:
      explicit
      const_mem_fun1_ref_t(_Ret (_Tp::*__pf)(_Arg) const)
      : _M_f(__pf) { }

      _Ret
      operator()(const _Tp& __r, _Arg __x) const
      { return (__r.*_M_f)(__x); }

    private:
      _Ret (_Tp::*_M_f)(_Arg) const;
    } __attribute__ ((__deprecated__));



  template<typename _Ret, typename _Tp>
    __attribute__ ((__deprecated__ ("use '" "std::mem_fn" "' instead")))
    inline mem_fun_t<_Ret, _Tp>
    mem_fun(_Ret (_Tp::*__f)())
    { return mem_fun_t<_Ret, _Tp>(__f); }

  template<typename _Ret, typename _Tp>
    __attribute__ ((__deprecated__ ("use '" "std::mem_fn" "' instead")))
    inline const_mem_fun_t<_Ret, _Tp>
    mem_fun(_Ret (_Tp::*__f)() const)
    { return const_mem_fun_t<_Ret, _Tp>(__f); }

  template<typename _Ret, typename _Tp>
    __attribute__ ((__deprecated__ ("use '" "std::mem_fn" "' instead")))
    inline mem_fun_ref_t<_Ret, _Tp>
    mem_fun_ref(_Ret (_Tp::*__f)())
    { return mem_fun_ref_t<_Ret, _Tp>(__f); }

  template<typename _Ret, typename _Tp>
    __attribute__ ((__deprecated__ ("use '" "std::mem_fn" "' instead")))
    inline const_mem_fun_ref_t<_Ret, _Tp>
    mem_fun_ref(_Ret (_Tp::*__f)() const)
    { return const_mem_fun_ref_t<_Ret, _Tp>(__f); }

  template<typename _Ret, typename _Tp, typename _Arg>
    __attribute__ ((__deprecated__ ("use '" "std::mem_fn" "' instead")))
    inline mem_fun1_t<_Ret, _Tp, _Arg>
    mem_fun(_Ret (_Tp::*__f)(_Arg))
    { return mem_fun1_t<_Ret, _Tp, _Arg>(__f); }

  template<typename _Ret, typename _Tp, typename _Arg>
    __attribute__ ((__deprecated__ ("use '" "std::mem_fn" "' instead")))
    inline const_mem_fun1_t<_Ret, _Tp, _Arg>
    mem_fun(_Ret (_Tp::*__f)(_Arg) const)
    { return const_mem_fun1_t<_Ret, _Tp, _Arg>(__f); }

  template<typename _Ret, typename _Tp, typename _Arg>
    __attribute__ ((__deprecated__ ("use '" "std::mem_fn" "' instead")))
    inline mem_fun1_ref_t<_Ret, _Tp, _Arg>
    mem_fun_ref(_Ret (_Tp::*__f)(_Arg))
    { return mem_fun1_ref_t<_Ret, _Tp, _Arg>(__f); }

  template<typename _Ret, typename _Tp, typename _Arg>
    __attribute__ ((__deprecated__ ("use '" "std::mem_fn" "' instead")))
    inline const_mem_fun1_ref_t<_Ret, _Tp, _Arg>
    mem_fun_ref(_Ret (_Tp::*__f)(_Arg) const)
    { return const_mem_fun1_ref_t<_Ret, _Tp, _Arg>(__f); }
#pragma GCC diagnostic pop
# 1434 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_function.h" 3

}


# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/backward/binders.h" 1 3
# 57 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/backward/binders.h" 3
#define _BACKWARD_BINDERS_H 1


#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"

namespace std __attribute__ ((__visibility__ ("default")))
{

# 107 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/backward/binders.h" 3
  template<typename _Operation>
    class binder1st
    : public unary_function<typename _Operation::second_argument_type,
       typename _Operation::result_type>
    {
    protected:
      _Operation op;
      typename _Operation::first_argument_type value;

    public:
      binder1st(const _Operation& __x,
  const typename _Operation::first_argument_type& __y)
      : op(__x), value(__y) { }

      typename _Operation::result_type
      operator()(const typename _Operation::second_argument_type& __x) const
      { return op(value, __x); }



      typename _Operation::result_type
      operator()(typename _Operation::second_argument_type& __x) const
      { return op(value, __x); }
    } __attribute__ ((__deprecated__ ("use '" "std::bind" "' instead")));


  template<typename _Operation, typename _Tp>
    __attribute__ ((__deprecated__ ("use '" "std::bind" "' instead")))
    inline binder1st<_Operation>
    bind1st(const _Operation& __fn, const _Tp& __x)
    {
      typedef typename _Operation::first_argument_type _Arg1_type;
      return binder1st<_Operation>(__fn, _Arg1_type(__x));
    }


  template<typename _Operation>
    class binder2nd
    : public unary_function<typename _Operation::first_argument_type,
       typename _Operation::result_type>
    {
    protected:
      _Operation op;
      typename _Operation::second_argument_type value;

    public:
      binder2nd(const _Operation& __x,
  const typename _Operation::second_argument_type& __y)
      : op(__x), value(__y) { }

      typename _Operation::result_type
      operator()(const typename _Operation::first_argument_type& __x) const
      { return op(__x, value); }



      typename _Operation::result_type
      operator()(typename _Operation::first_argument_type& __x) const
      { return op(__x, value); }
    } __attribute__ ((__deprecated__ ("use '" "std::bind" "' instead")));


  template<typename _Operation, typename _Tp>
    __attribute__ ((__deprecated__ ("use '" "std::bind" "' instead")))
    inline binder2nd<_Operation>
    bind2nd(const _Operation& __fn, const _Tp& __x)
    {
      typedef typename _Operation::second_argument_type _Arg2_type;
      return binder2nd<_Operation>(__fn, _Arg2_type(__x));
    }



}

#pragma GCC diagnostic pop
# 1439 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_function.h" 2 3
# 50 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/functional" 2 3



# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/tuple" 1 3
# 30 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/tuple" 3
#define _GLIBCXX_TUPLE 1

       
# 33 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/tuple" 3





# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_pair.h" 1 3
# 57 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_pair.h" 3
#define _STL_PAIR_H 1


# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/type_traits" 1 3
# 30 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/type_traits" 3
#define _GLIBCXX_TYPE_TRAITS 1

       
# 33 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/type_traits" 3







namespace std __attribute__ ((__visibility__ ("default")))
{


  template<typename _Tp>
    class reference_wrapper;
# 61 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/type_traits" 3
  template<typename _Tp, _Tp __v>
    struct integral_constant
    {
      static constexpr _Tp value = __v;
      typedef _Tp value_type;
      typedef integral_constant<_Tp, __v> type;
      constexpr operator value_type() const noexcept { return value; }






    };


  template<typename _Tp, _Tp __v>
    constexpr _Tp integral_constant<_Tp, __v>::value;



  using true_type = integral_constant<bool, true>;


  using false_type = integral_constant<bool, false>;



  template<bool __v>
    using __bool_constant = integral_constant<bool, __v>;
# 105 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/type_traits" 3
  template<bool, typename _Tp = void>
    struct enable_if
    { };


  template<typename _Tp>
    struct enable_if<true, _Tp>
    { typedef _Tp type; };


  template<bool _Cond, typename _Tp = void>
    using __enable_if_t = typename enable_if<_Cond, _Tp>::type;

  template<bool>
    struct __conditional
    {
      template<typename _Tp, typename>
 using type = _Tp;
    };

  template<>
    struct __conditional<false>
    {
      template<typename, typename _Up>
 using type = _Up;
    };


  template<bool _Cond, typename _If, typename _Else>
    using __conditional_t
      = typename __conditional<_Cond>::template type<_If, _Else>;


  template <typename _Type>
    struct __type_identity
    { using type = _Type; };

  template<typename _Tp>
    using __type_identity_t = typename __type_identity<_Tp>::type;

  namespace __detail
  {

    template<typename _Tp, typename...>
      using __first_t = _Tp;


    template<typename... _Bn>
      auto __or_fn(int) -> __first_t<false_type,
         __enable_if_t<!bool(_Bn::value)>...>;

    template<typename... _Bn>
      auto __or_fn(...) -> true_type;

    template<typename... _Bn>
      auto __and_fn(int) -> __first_t<true_type,
          __enable_if_t<bool(_Bn::value)>...>;

    template<typename... _Bn>
      auto __and_fn(...) -> false_type;
  }




  template<typename... _Bn>
    struct __or_
    : decltype(__detail::__or_fn<_Bn...>(0))
    { };

  template<typename... _Bn>
    struct __and_
    : decltype(__detail::__and_fn<_Bn...>(0))
    { };

  template<typename _Pp>
    struct __not_
    : __bool_constant<!bool(_Pp::value)>
    { };
# 257 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/type_traits" 3
  template<typename>
    struct is_reference;
  template<typename>
    struct is_function;
  template<typename>
    struct is_void;
  template<typename>
    struct remove_cv;
  template<typename>
    struct is_const;


  template<typename>
    struct __is_array_unknown_bounds;




  template <typename _Tp, size_t = sizeof(_Tp)>
    constexpr true_type __is_complete_or_unbounded(__type_identity<_Tp>)
    { return {}; }

  template <typename _TypeIdentity,
      typename _NestedType = typename _TypeIdentity::type>
    constexpr typename __or_<
      is_reference<_NestedType>,
      is_function<_NestedType>,
      is_void<_NestedType>,
      __is_array_unknown_bounds<_NestedType>
    >::type __is_complete_or_unbounded(_TypeIdentity)
    { return {}; }


  template<typename _Tp>
    using __remove_cv_t = typename remove_cv<_Tp>::type;





  template<typename _Tp>
    struct is_void
    : public false_type { };

  template<>
    struct is_void<void>
    : public true_type { };

  template<>
    struct is_void<const void>
    : public true_type { };

  template<>
    struct is_void<volatile void>
    : public true_type { };

  template<>
    struct is_void<const volatile void>
    : public true_type { };


  template<typename>
    struct __is_integral_helper
    : public false_type { };

  template<>
    struct __is_integral_helper<bool>
    : public true_type { };

  template<>
    struct __is_integral_helper<char>
    : public true_type { };

  template<>
    struct __is_integral_helper<signed char>
    : public true_type { };

  template<>
    struct __is_integral_helper<unsigned char>
    : public true_type { };




  template<>
    struct __is_integral_helper<wchar_t>
    : public true_type { };







  template<>
    struct __is_integral_helper<char16_t>
    : public true_type { };

  template<>
    struct __is_integral_helper<char32_t>
    : public true_type { };

  template<>
    struct __is_integral_helper<short>
    : public true_type { };

  template<>
    struct __is_integral_helper<unsigned short>
    : public true_type { };

  template<>
    struct __is_integral_helper<int>
    : public true_type { };

  template<>
    struct __is_integral_helper<unsigned int>
    : public true_type { };

  template<>
    struct __is_integral_helper<long>
    : public true_type { };

  template<>
    struct __is_integral_helper<unsigned long>
    : public true_type { };

  template<>
    struct __is_integral_helper<long long>
    : public true_type { };

  template<>
    struct __is_integral_helper<unsigned long long>
    : public true_type { };
# 440 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/type_traits" 3
  template<typename _Tp>
    struct is_integral
    : public __is_integral_helper<__remove_cv_t<_Tp>>::type
    { };


  template<typename>
    struct __is_floating_point_helper
    : public false_type { };

  template<>
    struct __is_floating_point_helper<float>
    : public true_type { };

  template<>
    struct __is_floating_point_helper<double>
    : public true_type { };

  template<>
    struct __is_floating_point_helper<long double>
    : public true_type { };
# 500 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/type_traits" 3
  template<typename _Tp>
    struct is_floating_point
    : public __is_floating_point_helper<__remove_cv_t<_Tp>>::type
    { };


  template<typename>
    struct is_array
    : public false_type { };

  template<typename _Tp, std::size_t _Size>
    struct is_array<_Tp[_Size]>
    : public true_type { };

  template<typename _Tp>
    struct is_array<_Tp[]>
    : public true_type { };

  template<typename>
    struct __is_pointer_helper
    : public false_type { };

  template<typename _Tp>
    struct __is_pointer_helper<_Tp*>
    : public true_type { };


  template<typename _Tp>
    struct is_pointer
    : public __is_pointer_helper<__remove_cv_t<_Tp>>::type
    { };


  template<typename>
    struct is_lvalue_reference
    : public false_type { };

  template<typename _Tp>
    struct is_lvalue_reference<_Tp&>
    : public true_type { };


  template<typename>
    struct is_rvalue_reference
    : public false_type { };

  template<typename _Tp>
    struct is_rvalue_reference<_Tp&&>
    : public true_type { };

  template<typename>
    struct __is_member_object_pointer_helper
    : public false_type { };

  template<typename _Tp, typename _Cp>
    struct __is_member_object_pointer_helper<_Tp _Cp::*>
    : public __not_<is_function<_Tp>>::type { };


  template<typename _Tp>
    struct is_member_object_pointer
    : public __is_member_object_pointer_helper<__remove_cv_t<_Tp>>::type
    { };

  template<typename>
    struct __is_member_function_pointer_helper
    : public false_type { };

  template<typename _Tp, typename _Cp>
    struct __is_member_function_pointer_helper<_Tp _Cp::*>
    : public is_function<_Tp>::type { };


  template<typename _Tp>
    struct is_member_function_pointer
    : public __is_member_function_pointer_helper<__remove_cv_t<_Tp>>::type
    { };


  template<typename _Tp>
    struct is_enum
    : public integral_constant<bool, __is_enum(_Tp)>
    { };


  template<typename _Tp>
    struct is_union
    : public integral_constant<bool, __is_union(_Tp)>
    { };


  template<typename _Tp>
    struct is_class
    : public integral_constant<bool, __is_class(_Tp)>
    { };


  template<typename _Tp>
    struct is_function
    : public __bool_constant<!is_const<const _Tp>::value> { };

  template<typename _Tp>
    struct is_function<_Tp&>
    : public false_type { };

  template<typename _Tp>
    struct is_function<_Tp&&>
    : public false_type { };

#define __cpp_lib_is_null_pointer 201309L


  template<typename _Tp>
    struct is_null_pointer
    : public false_type { };

  template<>
    struct is_null_pointer<std::nullptr_t>
    : public true_type { };

  template<>
    struct is_null_pointer<const std::nullptr_t>
    : public true_type { };

  template<>
    struct is_null_pointer<volatile std::nullptr_t>
    : public true_type { };

  template<>
    struct is_null_pointer<const volatile std::nullptr_t>
    : public true_type { };



  template<typename _Tp>
    struct __is_nullptr_t
    : public is_null_pointer<_Tp>
    { } __attribute__ ((__deprecated__ ("use '" "std::is_null_pointer" "' instead")));




  template<typename _Tp>
    struct is_reference
    : public false_type
    { };

  template<typename _Tp>
    struct is_reference<_Tp&>
    : public true_type
    { };

  template<typename _Tp>
    struct is_reference<_Tp&&>
    : public true_type
    { };


  template<typename _Tp>
    struct is_arithmetic
    : public __or_<is_integral<_Tp>, is_floating_point<_Tp>>::type
    { };


  template<typename _Tp>
    struct is_fundamental
    : public __or_<is_arithmetic<_Tp>, is_void<_Tp>,
     is_null_pointer<_Tp>>::type
    { };


  template<typename _Tp>
    struct is_object
    : public __not_<__or_<is_function<_Tp>, is_reference<_Tp>,
                          is_void<_Tp>>>::type
    { };

  template<typename>
    struct is_member_pointer;


  template<typename _Tp>
    struct is_scalar
    : public __or_<is_arithmetic<_Tp>, is_enum<_Tp>, is_pointer<_Tp>,
                   is_member_pointer<_Tp>, is_null_pointer<_Tp>>::type
    { };


  template<typename _Tp>
    struct is_compound
    : public __not_<is_fundamental<_Tp>>::type { };


  template<typename _Tp>
    struct __is_member_pointer_helper
    : public false_type { };

  template<typename _Tp, typename _Cp>
    struct __is_member_pointer_helper<_Tp _Cp::*>
    : public true_type { };



  template<typename _Tp>
    struct is_member_pointer
    : public __is_member_pointer_helper<__remove_cv_t<_Tp>>::type
    { };

  template<typename, typename>
    struct is_same;


  template<typename _Tp, typename... _Types>
    using __is_one_of = __or_<is_same<_Tp, _Types>...>;


  __extension__
  template<typename _Tp>
    using __is_signed_integer = __is_one_of<__remove_cv_t<_Tp>,
   signed char, signed short, signed int, signed long,
   signed long long
# 733 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/type_traits" 3
   >;


  __extension__
  template<typename _Tp>
    using __is_unsigned_integer = __is_one_of<__remove_cv_t<_Tp>,
   unsigned char, unsigned short, unsigned int, unsigned long,
   unsigned long long
# 753 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/type_traits" 3
   >;


  template<typename _Tp>
    using __is_standard_integer
      = __or_<__is_signed_integer<_Tp>, __is_unsigned_integer<_Tp>>;


  template<typename...> using __void_t = void;





  template<typename>
    struct is_const
    : public false_type { };

  template<typename _Tp>
    struct is_const<_Tp const>
    : public true_type { };


  template<typename>
    struct is_volatile
    : public false_type { };

  template<typename _Tp>
    struct is_volatile<_Tp volatile>
    : public true_type { };


  template<typename _Tp>
    struct is_trivial
    : public integral_constant<bool, __is_trivial(_Tp)>
    {
      static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
 "template argument must be a complete class or an unbounded array");
    };


  template<typename _Tp>
    struct is_trivially_copyable
    : public integral_constant<bool, __is_trivially_copyable(_Tp)>
    {
      static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
 "template argument must be a complete class or an unbounded array");
    };


  template<typename _Tp>
    struct is_standard_layout
    : public integral_constant<bool, __is_standard_layout(_Tp)>
    {
      static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
 "template argument must be a complete class or an unbounded array");
    };






  template<typename _Tp>
    struct
   
    is_pod
    : public integral_constant<bool, __is_pod(_Tp)>
    {
      static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
 "template argument must be a complete class or an unbounded array");
    };





  template<typename _Tp>
    struct
   
    is_literal_type
    : public integral_constant<bool, __is_literal_type(_Tp)>
    {
      static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
 "template argument must be a complete class or an unbounded array");
    };


  template<typename _Tp>
    struct is_empty
    : public integral_constant<bool, __is_empty(_Tp)>
    { };


  template<typename _Tp>
    struct is_polymorphic
    : public integral_constant<bool, __is_polymorphic(_Tp)>
    { };
# 863 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/type_traits" 3
  template<typename _Tp>
    struct is_abstract
    : public integral_constant<bool, __is_abstract(_Tp)>
    { };


  template<typename _Tp,
    bool = is_arithmetic<_Tp>::value>
    struct __is_signed_helper
    : public false_type { };

  template<typename _Tp>
    struct __is_signed_helper<_Tp, true>
    : public integral_constant<bool, _Tp(-1) < _Tp(0)>
    { };



  template<typename _Tp>
    struct is_signed
    : public __is_signed_helper<_Tp>::type
    { };


  template<typename _Tp>
    struct is_unsigned
    : public __and_<is_arithmetic<_Tp>, __not_<is_signed<_Tp>>>::type
    { };


  template<typename _Tp, typename _Up = _Tp&&>
    _Up
    __declval(int);

  template<typename _Tp>
    _Tp
    __declval(long);


  template<typename _Tp>
    auto declval() noexcept -> decltype(__declval<_Tp>(0));

  template<typename>
    struct remove_all_extents;


  template<typename _Tp>
    struct __is_array_known_bounds
    : public false_type
    { };

  template<typename _Tp, size_t _Size>
    struct __is_array_known_bounds<_Tp[_Size]>
    : public true_type
    { };

  template<typename _Tp>
    struct __is_array_unknown_bounds
    : public false_type
    { };

  template<typename _Tp>
    struct __is_array_unknown_bounds<_Tp[]>
    : public true_type
    { };
# 936 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/type_traits" 3
  struct __do_is_destructible_impl
  {
    template<typename _Tp, typename = decltype(declval<_Tp&>().~_Tp())>
      static true_type __test(int);

    template<typename>
      static false_type __test(...);
  };

  template<typename _Tp>
    struct __is_destructible_impl
    : public __do_is_destructible_impl
    {
      typedef decltype(__test<_Tp>(0)) type;
    };

  template<typename _Tp,
           bool = __or_<is_void<_Tp>,
                        __is_array_unknown_bounds<_Tp>,
                        is_function<_Tp>>::value,
           bool = __or_<is_reference<_Tp>, is_scalar<_Tp>>::value>
    struct __is_destructible_safe;

  template<typename _Tp>
    struct __is_destructible_safe<_Tp, false, false>
    : public __is_destructible_impl<typename
               remove_all_extents<_Tp>::type>::type
    { };

  template<typename _Tp>
    struct __is_destructible_safe<_Tp, true, false>
    : public false_type { };

  template<typename _Tp>
    struct __is_destructible_safe<_Tp, false, true>
    : public true_type { };



  template<typename _Tp>
    struct is_destructible
    : public __is_destructible_safe<_Tp>::type
    {
      static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
 "template argument must be a complete class or an unbounded array");
    };







  struct __do_is_nt_destructible_impl
  {
    template<typename _Tp>
      static __bool_constant<noexcept(declval<_Tp&>().~_Tp())>
      __test(int);

    template<typename>
      static false_type __test(...);
  };

  template<typename _Tp>
    struct __is_nt_destructible_impl
    : public __do_is_nt_destructible_impl
    {
      typedef decltype(__test<_Tp>(0)) type;
    };

  template<typename _Tp,
           bool = __or_<is_void<_Tp>,
                        __is_array_unknown_bounds<_Tp>,
                        is_function<_Tp>>::value,
           bool = __or_<is_reference<_Tp>, is_scalar<_Tp>>::value>
    struct __is_nt_destructible_safe;

  template<typename _Tp>
    struct __is_nt_destructible_safe<_Tp, false, false>
    : public __is_nt_destructible_impl<typename
               remove_all_extents<_Tp>::type>::type
    { };

  template<typename _Tp>
    struct __is_nt_destructible_safe<_Tp, true, false>
    : public false_type { };

  template<typename _Tp>
    struct __is_nt_destructible_safe<_Tp, false, true>
    : public true_type { };



  template<typename _Tp>
    struct is_nothrow_destructible
    : public __is_nt_destructible_safe<_Tp>::type
    {
      static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
 "template argument must be a complete class or an unbounded array");
    };


  template<typename _Tp, typename... _Args>
    using __is_constructible_impl
      = __bool_constant<__is_constructible(_Tp, _Args...)>;



  template<typename _Tp, typename... _Args>
    struct is_constructible
      : public __is_constructible_impl<_Tp, _Args...>
    {
      static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
 "template argument must be a complete class or an unbounded array");
    };


  template<typename _Tp>
    struct is_default_constructible
    : public __is_constructible_impl<_Tp>
    {
      static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
 "template argument must be a complete class or an unbounded array");
    };


  template<typename _Tp, typename = void>
    struct __add_lvalue_reference_helper
    { using type = _Tp; };

  template<typename _Tp>
    struct __add_lvalue_reference_helper<_Tp, __void_t<_Tp&>>
    { using type = _Tp&; };

  template<typename _Tp>
    using __add_lval_ref_t = typename __add_lvalue_reference_helper<_Tp>::type;



  template<typename _Tp>
    struct is_copy_constructible
    : public __is_constructible_impl<_Tp, __add_lval_ref_t<const _Tp>>
    {
      static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
 "template argument must be a complete class or an unbounded array");
    };


  template<typename _Tp, typename = void>
    struct __add_rvalue_reference_helper
    { using type = _Tp; };

  template<typename _Tp>
    struct __add_rvalue_reference_helper<_Tp, __void_t<_Tp&&>>
    { using type = _Tp&&; };

  template<typename _Tp>
    using __add_rval_ref_t = typename __add_rvalue_reference_helper<_Tp>::type;



  template<typename _Tp>
    struct is_move_constructible
    : public __is_constructible_impl<_Tp, __add_rval_ref_t<_Tp>>
    {
      static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
 "template argument must be a complete class or an unbounded array");
    };


  template<typename _Tp, typename... _Args>
    using __is_nothrow_constructible_impl
      = __bool_constant<__is_nothrow_constructible(_Tp, _Args...)>;



  template<typename _Tp, typename... _Args>
    struct is_nothrow_constructible
    : public __is_nothrow_constructible_impl<_Tp, _Args...>
    {
      static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
 "template argument must be a complete class or an unbounded array");
    };


  template<typename _Tp>
    struct is_nothrow_default_constructible
    : public __is_nothrow_constructible_impl<_Tp>
    {
      static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
 "template argument must be a complete class or an unbounded array");
    };


  template<typename _Tp>
    struct is_nothrow_copy_constructible
    : public __is_nothrow_constructible_impl<_Tp, __add_lval_ref_t<const _Tp>>
    {
      static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
 "template argument must be a complete class or an unbounded array");
    };


  template<typename _Tp>
    struct is_nothrow_move_constructible
    : public __is_nothrow_constructible_impl<_Tp, __add_rval_ref_t<_Tp>>
    {
      static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
 "template argument must be a complete class or an unbounded array");
    };


  template<typename _Tp, typename _Up>
    using __is_assignable_impl = __bool_constant<__is_assignable(_Tp, _Up)>;



  template<typename _Tp, typename _Up>
    struct is_assignable
    : public __is_assignable_impl<_Tp, _Up>
    {
      static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
 "template argument must be a complete class or an unbounded array");
    };


  template<typename _Tp>
    struct is_copy_assignable
    : public __is_assignable_impl<__add_lval_ref_t<_Tp>,
      __add_lval_ref_t<const _Tp>>
    {
      static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
 "template argument must be a complete class or an unbounded array");
    };


  template<typename _Tp>
    struct is_move_assignable
    : public __is_assignable_impl<__add_lval_ref_t<_Tp>, __add_rval_ref_t<_Tp>>
    {
      static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
 "template argument must be a complete class or an unbounded array");
    };


  template<typename _Tp, typename _Up>
    using __is_nothrow_assignable_impl
      = __bool_constant<__is_nothrow_assignable(_Tp, _Up)>;



  template<typename _Tp, typename _Up>
    struct is_nothrow_assignable
    : public __is_nothrow_assignable_impl<_Tp, _Up>
    {
      static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
 "template argument must be a complete class or an unbounded array");
    };


  template<typename _Tp>
    struct is_nothrow_copy_assignable
    : public __is_nothrow_assignable_impl<__add_lval_ref_t<_Tp>,
       __add_lval_ref_t<const _Tp>>
    {
      static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
 "template argument must be a complete class or an unbounded array");
    };


  template<typename _Tp>
    struct is_nothrow_move_assignable
    : public __is_nothrow_assignable_impl<__add_lval_ref_t<_Tp>,
       __add_rval_ref_t<_Tp>>
    {
      static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
 "template argument must be a complete class or an unbounded array");
    };


  template<typename _Tp, typename... _Args>
    using __is_trivially_constructible_impl
      = __bool_constant<__is_trivially_constructible(_Tp, _Args...)>;



  template<typename _Tp, typename... _Args>
    struct is_trivially_constructible
    : public __is_trivially_constructible_impl<_Tp, _Args...>
    {
      static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
 "template argument must be a complete class or an unbounded array");
    };


  template<typename _Tp>
    struct is_trivially_default_constructible
    : public __is_trivially_constructible_impl<_Tp>
    {
      static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
 "template argument must be a complete class or an unbounded array");
    };

  struct __do_is_implicitly_default_constructible_impl
  {
    template <typename _Tp>
    static void __helper(const _Tp&);

    template <typename _Tp>
    static true_type __test(const _Tp&,
                            decltype(__helper<const _Tp&>({}))* = 0);

    static false_type __test(...);
  };

  template<typename _Tp>
    struct __is_implicitly_default_constructible_impl
    : public __do_is_implicitly_default_constructible_impl
    {
      typedef decltype(__test(declval<_Tp>())) type;
    };

  template<typename _Tp>
    struct __is_implicitly_default_constructible_safe
    : public __is_implicitly_default_constructible_impl<_Tp>::type
    { };

  template <typename _Tp>
    struct __is_implicitly_default_constructible
    : public __and_<__is_constructible_impl<_Tp>,
      __is_implicitly_default_constructible_safe<_Tp>>::type
    { };


  template<typename _Tp>
    struct is_trivially_copy_constructible
    : public __is_trivially_constructible_impl<_Tp, __add_lval_ref_t<const _Tp>>
    {
      static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
 "template argument must be a complete class or an unbounded array");
    };


  template<typename _Tp>
    struct is_trivially_move_constructible
    : public __is_trivially_constructible_impl<_Tp, __add_rval_ref_t<_Tp>>
    {
      static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
 "template argument must be a complete class or an unbounded array");
    };


  template<typename _Tp, typename _Up>
    using __is_trivially_assignable_impl
      = __bool_constant<__is_trivially_assignable(_Tp, _Up)>;



  template<typename _Tp, typename _Up>
    struct is_trivially_assignable
    : public __is_trivially_assignable_impl<_Tp, _Up>
    {
      static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
 "template argument must be a complete class or an unbounded array");
    };


  template<typename _Tp>
    struct is_trivially_copy_assignable
    : public __is_trivially_assignable_impl<__add_lval_ref_t<_Tp>,
         __add_lval_ref_t<const _Tp>>
    {
      static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
 "template argument must be a complete class or an unbounded array");
    };


  template<typename _Tp>
    struct is_trivially_move_assignable
    : public __is_trivially_assignable_impl<__add_lval_ref_t<_Tp>,
         __add_rval_ref_t<_Tp>>
    {
      static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
 "template argument must be a complete class or an unbounded array");
    };


  template<typename _Tp>
    struct is_trivially_destructible
    : public __and_<__is_destructible_safe<_Tp>,
      __bool_constant<__has_trivial_destructor(_Tp)>>::type
    {
      static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
 "template argument must be a complete class or an unbounded array");
    };



  template<typename _Tp>
    struct has_virtual_destructor
    : public integral_constant<bool, __has_virtual_destructor(_Tp)>
    {
      static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
 "template argument must be a complete class or an unbounded array");
    };





  template<typename _Tp>
    struct alignment_of
    : public integral_constant<std::size_t, alignof(_Tp)>
    {
      static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
 "template argument must be a complete class or an unbounded array");
    };


  template<typename>
    struct rank
    : public integral_constant<std::size_t, 0> { };

  template<typename _Tp, std::size_t _Size>
    struct rank<_Tp[_Size]>
    : public integral_constant<std::size_t, 1 + rank<_Tp>::value> { };

  template<typename _Tp>
    struct rank<_Tp[]>
    : public integral_constant<std::size_t, 1 + rank<_Tp>::value> { };


  template<typename, unsigned _Uint = 0>
    struct extent
    : public integral_constant<size_t, 0> { };

  template<typename _Tp, size_t _Size>
    struct extent<_Tp[_Size], 0>
    : public integral_constant<size_t, _Size> { };

  template<typename _Tp, unsigned _Uint, size_t _Size>
    struct extent<_Tp[_Size], _Uint>
    : public extent<_Tp, _Uint - 1>::type { };

  template<typename _Tp>
    struct extent<_Tp[], 0>
    : public integral_constant<size_t, 0> { };

  template<typename _Tp, unsigned _Uint>
    struct extent<_Tp[], _Uint>
    : public extent<_Tp, _Uint - 1>::type { };





  template<typename _Tp, typename _Up>
    struct is_same

    : public integral_constant<bool, __is_same(_Tp, _Up)>



    { };
# 1409 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/type_traits" 3
  template<typename _Base, typename _Derived>
    struct is_base_of
    : public integral_constant<bool, __is_base_of(_Base, _Derived)>
    { };


  template<typename _From, typename _To>
    struct is_convertible
    : public __bool_constant<__is_convertible(_From, _To)>
    { };
# 1458 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/type_traits" 3
  template<typename _ToElementType, typename _FromElementType>
    using __is_array_convertible
      = is_convertible<_FromElementType(*)[], _ToElementType(*)[]>;
# 1522 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/type_traits" 3
  template<typename _Tp>
    struct remove_const
    { typedef _Tp type; };

  template<typename _Tp>
    struct remove_const<_Tp const>
    { typedef _Tp type; };


  template<typename _Tp>
    struct remove_volatile
    { typedef _Tp type; };

  template<typename _Tp>
    struct remove_volatile<_Tp volatile>
    { typedef _Tp type; };



  template<typename _Tp>
    struct remove_cv
    { using type = __remove_cv(_Tp); };
# 1563 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/type_traits" 3
  template<typename _Tp>
    struct add_const
    { using type = _Tp const; };


  template<typename _Tp>
    struct add_volatile
    { using type = _Tp volatile; };


  template<typename _Tp>
    struct add_cv
    { using type = _Tp const volatile; };
# 1610 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/type_traits" 3
  template<typename _Tp>
    struct remove_reference
    { using type = __remove_reference(_Tp); };
# 1628 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/type_traits" 3
  template<typename _Tp>
    struct add_lvalue_reference
    { using type = __add_lval_ref_t<_Tp>; };


  template<typename _Tp>
    struct add_rvalue_reference
    { using type = __add_rval_ref_t<_Tp>; };
# 1656 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/type_traits" 3
  template<typename _Unqualified, bool _IsConst, bool _IsVol>
    struct __cv_selector;

  template<typename _Unqualified>
    struct __cv_selector<_Unqualified, false, false>
    { typedef _Unqualified __type; };

  template<typename _Unqualified>
    struct __cv_selector<_Unqualified, false, true>
    { typedef volatile _Unqualified __type; };

  template<typename _Unqualified>
    struct __cv_selector<_Unqualified, true, false>
    { typedef const _Unqualified __type; };

  template<typename _Unqualified>
    struct __cv_selector<_Unqualified, true, true>
    { typedef const volatile _Unqualified __type; };

  template<typename _Qualified, typename _Unqualified,
    bool _IsConst = is_const<_Qualified>::value,
    bool _IsVol = is_volatile<_Qualified>::value>
    class __match_cv_qualifiers
    {
      typedef __cv_selector<_Unqualified, _IsConst, _IsVol> __match;

    public:
      typedef typename __match::__type __type;
    };


  template<typename _Tp>
    struct __make_unsigned
    { typedef _Tp __type; };

  template<>
    struct __make_unsigned<char>
    { typedef unsigned char __type; };

  template<>
    struct __make_unsigned<signed char>
    { typedef unsigned char __type; };

  template<>
    struct __make_unsigned<short>
    { typedef unsigned short __type; };

  template<>
    struct __make_unsigned<int>
    { typedef unsigned int __type; };

  template<>
    struct __make_unsigned<long>
    { typedef unsigned long __type; };

  template<>
    struct __make_unsigned<long long>
    { typedef unsigned long long __type; };
# 1741 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/type_traits" 3
  template<typename _Tp,
    bool _IsInt = is_integral<_Tp>::value,
    bool _IsEnum = is_enum<_Tp>::value>
    class __make_unsigned_selector;

  template<typename _Tp>
    class __make_unsigned_selector<_Tp, true, false>
    {
      using __unsigned_type
 = typename __make_unsigned<__remove_cv_t<_Tp>>::__type;

    public:
      using __type
 = typename __match_cv_qualifiers<_Tp, __unsigned_type>::__type;
    };

  class __make_unsigned_selector_base
  {
  protected:
    template<typename...> struct _List { };

    template<typename _Tp, typename... _Up>
      struct _List<_Tp, _Up...> : _List<_Up...>
      { static constexpr size_t __size = sizeof(_Tp); };

    template<size_t _Sz, typename _Tp, bool = (_Sz <= _Tp::__size)>
      struct __select;

    template<size_t _Sz, typename _Uint, typename... _UInts>
      struct __select<_Sz, _List<_Uint, _UInts...>, true>
      { using __type = _Uint; };

    template<size_t _Sz, typename _Uint, typename... _UInts>
      struct __select<_Sz, _List<_Uint, _UInts...>, false>
      : __select<_Sz, _List<_UInts...>>
      { };
  };


  template<typename _Tp>
    class __make_unsigned_selector<_Tp, false, true>
    : __make_unsigned_selector_base
    {

      using _UInts = _List<unsigned char, unsigned short, unsigned int,
      unsigned long, unsigned long long>;

      using __unsigned_type = typename __select<sizeof(_Tp), _UInts>::__type;

    public:
      using __type
 = typename __match_cv_qualifiers<_Tp, __unsigned_type>::__type;
    };





  template<>
    struct __make_unsigned<wchar_t>
    {
      using __type
 = typename __make_unsigned_selector<wchar_t, false, true>::__type;
    };
# 1815 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/type_traits" 3
  template<>
    struct __make_unsigned<char16_t>
    {
      using __type
 = typename __make_unsigned_selector<char16_t, false, true>::__type;
    };

  template<>
    struct __make_unsigned<char32_t>
    {
      using __type
 = typename __make_unsigned_selector<char32_t, false, true>::__type;
    };






  template<typename _Tp>
    struct make_unsigned
    { typedef typename __make_unsigned_selector<_Tp>::__type type; };


  template<> struct make_unsigned<bool>;
  template<> struct make_unsigned<bool const>;
  template<> struct make_unsigned<bool volatile>;
  template<> struct make_unsigned<bool const volatile>;




  template<typename _Tp>
    struct __make_signed
    { typedef _Tp __type; };

  template<>
    struct __make_signed<char>
    { typedef signed char __type; };

  template<>
    struct __make_signed<unsigned char>
    { typedef signed char __type; };

  template<>
    struct __make_signed<unsigned short>
    { typedef signed short __type; };

  template<>
    struct __make_signed<unsigned int>
    { typedef signed int __type; };

  template<>
    struct __make_signed<unsigned long>
    { typedef signed long __type; };

  template<>
    struct __make_signed<unsigned long long>
    { typedef signed long long __type; };
# 1901 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/type_traits" 3
  template<typename _Tp,
    bool _IsInt = is_integral<_Tp>::value,
    bool _IsEnum = is_enum<_Tp>::value>
    class __make_signed_selector;

  template<typename _Tp>
    class __make_signed_selector<_Tp, true, false>
    {
      using __signed_type
 = typename __make_signed<__remove_cv_t<_Tp>>::__type;

    public:
      using __type
 = typename __match_cv_qualifiers<_Tp, __signed_type>::__type;
    };


  template<typename _Tp>
    class __make_signed_selector<_Tp, false, true>
    {
      typedef typename __make_unsigned_selector<_Tp>::__type __unsigned_type;

    public:
      typedef typename __make_signed_selector<__unsigned_type>::__type __type;
    };





  template<>
    struct __make_signed<wchar_t>
    {
      using __type
 = typename __make_signed_selector<wchar_t, false, true>::__type;
    };
# 1947 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/type_traits" 3
  template<>
    struct __make_signed<char16_t>
    {
      using __type
 = typename __make_signed_selector<char16_t, false, true>::__type;
    };

  template<>
    struct __make_signed<char32_t>
    {
      using __type
 = typename __make_signed_selector<char32_t, false, true>::__type;
    };






  template<typename _Tp>
    struct make_signed
    { typedef typename __make_signed_selector<_Tp>::__type type; };


  template<> struct make_signed<bool>;
  template<> struct make_signed<bool const>;
  template<> struct make_signed<bool volatile>;
  template<> struct make_signed<bool const volatile>;
# 1989 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/type_traits" 3
  template<typename _Tp>
    struct remove_extent
    { typedef _Tp type; };

  template<typename _Tp, std::size_t _Size>
    struct remove_extent<_Tp[_Size]>
    { typedef _Tp type; };

  template<typename _Tp>
    struct remove_extent<_Tp[]>
    { typedef _Tp type; };


  template<typename _Tp>
    struct remove_all_extents
    { typedef _Tp type; };

  template<typename _Tp, std::size_t _Size>
    struct remove_all_extents<_Tp[_Size]>
    { typedef typename remove_all_extents<_Tp>::type type; };

  template<typename _Tp>
    struct remove_all_extents<_Tp[]>
    { typedef typename remove_all_extents<_Tp>::type type; };
# 2026 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/type_traits" 3
  template<typename _Tp, typename>
    struct __remove_pointer_helper
    { typedef _Tp type; };

  template<typename _Tp, typename _Up>
    struct __remove_pointer_helper<_Tp, _Up*>
    { typedef _Up type; };


  template<typename _Tp>
    struct remove_pointer
    : public __remove_pointer_helper<_Tp, __remove_cv_t<_Tp>>
    { };

  template<typename _Tp, typename = void>
    struct __add_pointer_helper
    { using type = _Tp; };

  template<typename _Tp>
    struct __add_pointer_helper<_Tp, __void_t<_Tp*>>
    { using type = _Tp*; };


  template<typename _Tp>
    struct add_pointer
    : public __add_pointer_helper<_Tp>
    { };

  template<typename _Tp>
    struct add_pointer<_Tp&>
    { using type = _Tp*; };

  template<typename _Tp>
    struct add_pointer<_Tp&&>
    { using type = _Tp*; };
# 2072 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/type_traits" 3
  template<std::size_t _Len>
    struct __aligned_storage_msa
    {
      union __type
      {
 unsigned char __data[_Len];
 struct __attribute__((__aligned__)) { } __align;
      };
    };
# 2092 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/type_traits" 3
  template<std::size_t _Len, std::size_t _Align =
    __alignof__(typename __aligned_storage_msa<_Len>::__type)>
    struct aligned_storage
    {
      union type
      {
 unsigned char __data[_Len];
 struct __attribute__((__aligned__((_Align)))) { } __align;
      };
    };

  template <typename... _Types>
    struct __strictest_alignment
    {
      static const size_t _S_alignment = 0;
      static const size_t _S_size = 0;
    };

  template <typename _Tp, typename... _Types>
    struct __strictest_alignment<_Tp, _Types...>
    {
      static const size_t _S_alignment =
        alignof(_Tp) > __strictest_alignment<_Types...>::_S_alignment
 ? alignof(_Tp) : __strictest_alignment<_Types...>::_S_alignment;
      static const size_t _S_size =
        sizeof(_Tp) > __strictest_alignment<_Types...>::_S_size
 ? sizeof(_Tp) : __strictest_alignment<_Types...>::_S_size;
    };
# 2131 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/type_traits" 3
  template <size_t _Len, typename... _Types>
    struct aligned_union
    {
    private:
      static_assert(sizeof...(_Types) != 0, "At least one type is required");

      using __strictest = __strictest_alignment<_Types...>;
      static const size_t _S_len = _Len > __strictest::_S_size
 ? _Len : __strictest::_S_size;
    public:

      static const size_t alignment_value = __strictest::_S_alignment;

      typedef typename aligned_storage<_S_len, alignment_value>::type type;
    };

  template <size_t _Len, typename... _Types>
    const size_t aligned_union<_Len, _Types...>::alignment_value;





  template<typename _Up>
    struct __decay_selector
    : __conditional_t<is_const<const _Up>::value,
        remove_cv<_Up>,
        add_pointer<_Up>>
    { };

  template<typename _Up, size_t _Nm>
    struct __decay_selector<_Up[_Nm]>
    { using type = _Up*; };

  template<typename _Up>
    struct __decay_selector<_Up[]>
    { using type = _Up*; };




  template<typename _Tp>
    struct decay
    { using type = typename __decay_selector<_Tp>::type; };

  template<typename _Tp>
    struct decay<_Tp&>
    { using type = typename __decay_selector<_Tp>::type; };

  template<typename _Tp>
    struct decay<_Tp&&>
    { using type = typename __decay_selector<_Tp>::type; };




  template<typename _Tp>
    struct __strip_reference_wrapper
    {
      typedef _Tp __type;
    };

  template<typename _Tp>
    struct __strip_reference_wrapper<reference_wrapper<_Tp> >
    {
      typedef _Tp& __type;
    };


  template<typename _Tp>
    using __decay_t = typename decay<_Tp>::type;

  template<typename _Tp>
    using __decay_and_strip = __strip_reference_wrapper<__decay_t<_Tp>>;





  template<typename... _Cond>
    using _Require = __enable_if_t<__and_<_Cond...>::value>;


  template<typename _Tp>
    using __remove_cvref_t
     = typename remove_cv<typename remove_reference<_Tp>::type>::type;




  template<bool _Cond, typename _Iftrue, typename _Iffalse>
    struct conditional
    { typedef _Iftrue type; };


  template<typename _Iftrue, typename _Iffalse>
    struct conditional<false, _Iftrue, _Iffalse>
    { typedef _Iffalse type; };


  template<typename... _Tp>
    struct common_type;
# 2243 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/type_traits" 3
  template<typename _Tp>
    struct __success_type
    { typedef _Tp type; };

  struct __failure_type
  { };

  struct __do_common_type_impl
  {
    template<typename _Tp, typename _Up>
      using __cond_t
 = decltype(true ? std::declval<_Tp>() : std::declval<_Up>());



    template<typename _Tp, typename _Up>
      static __success_type<__decay_t<__cond_t<_Tp, _Up>>>
      _S_test(int);
# 2270 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/type_traits" 3
    template<typename, typename>
      static __failure_type
      _S_test_2(...);

    template<typename _Tp, typename _Up>
      static decltype(_S_test_2<_Tp, _Up>(0))
      _S_test(...);
  };


  template<>
    struct common_type<>
    { };


  template<typename _Tp0>
    struct common_type<_Tp0>
    : public common_type<_Tp0, _Tp0>
    { };


  template<typename _Tp1, typename _Tp2,
    typename _Dp1 = __decay_t<_Tp1>, typename _Dp2 = __decay_t<_Tp2>>
    struct __common_type_impl
    {


      using type = common_type<_Dp1, _Dp2>;
    };

  template<typename _Tp1, typename _Tp2>
    struct __common_type_impl<_Tp1, _Tp2, _Tp1, _Tp2>
    : private __do_common_type_impl
    {


      using type = decltype(_S_test<_Tp1, _Tp2>(0));
    };


  template<typename _Tp1, typename _Tp2>
    struct common_type<_Tp1, _Tp2>
    : public __common_type_impl<_Tp1, _Tp2>::type
    { };

  template<typename...>
    struct __common_type_pack
    { };

  template<typename, typename, typename = void>
    struct __common_type_fold;


  template<typename _Tp1, typename _Tp2, typename... _Rp>
    struct common_type<_Tp1, _Tp2, _Rp...>
    : public __common_type_fold<common_type<_Tp1, _Tp2>,
    __common_type_pack<_Rp...>>
    { };




  template<typename _CTp, typename... _Rp>
    struct __common_type_fold<_CTp, __common_type_pack<_Rp...>,
         __void_t<typename _CTp::type>>
    : public common_type<typename _CTp::type, _Rp...>
    { };


  template<typename _CTp, typename _Rp>
    struct __common_type_fold<_CTp, _Rp, void>
    { };

  template<typename _Tp, bool = is_enum<_Tp>::value>
    struct __underlying_type_impl
    {
      using type = __underlying_type(_Tp);
    };

  template<typename _Tp>
    struct __underlying_type_impl<_Tp, false>
    { };



  template<typename _Tp>
    struct underlying_type
    : public __underlying_type_impl<_Tp>
    { };


  template<typename _Tp>
    struct __declval_protector
    {
      static const bool __stop = false;
    };






  template<typename _Tp>
    auto declval() noexcept -> decltype(__declval<_Tp>(0))
    {
      static_assert(__declval_protector<_Tp>::__stop,
      "declval() must not be used!");
      return __declval<_Tp>(0);
    }


  template<typename _Signature>
    struct result_of;



#define __cpp_lib_result_of_sfinae 201210L


  struct __invoke_memfun_ref { };
  struct __invoke_memfun_deref { };
  struct __invoke_memobj_ref { };
  struct __invoke_memobj_deref { };
  struct __invoke_other { };


  template<typename _Tp, typename _Tag>
    struct __result_of_success : __success_type<_Tp>
    { using __invoke_type = _Tag; };


  struct __result_of_memfun_ref_impl
  {
    template<typename _Fp, typename _Tp1, typename... _Args>
      static __result_of_success<decltype(
      (std::declval<_Tp1>().*std::declval<_Fp>())(std::declval<_Args>()...)
      ), __invoke_memfun_ref> _S_test(int);

    template<typename...>
      static __failure_type _S_test(...);
  };

  template<typename _MemPtr, typename _Arg, typename... _Args>
    struct __result_of_memfun_ref
    : private __result_of_memfun_ref_impl
    {
      typedef decltype(_S_test<_MemPtr, _Arg, _Args...>(0)) type;
    };


  struct __result_of_memfun_deref_impl
  {
    template<typename _Fp, typename _Tp1, typename... _Args>
      static __result_of_success<decltype(
      ((*std::declval<_Tp1>()).*std::declval<_Fp>())(std::declval<_Args>()...)
      ), __invoke_memfun_deref> _S_test(int);

    template<typename...>
      static __failure_type _S_test(...);
  };

  template<typename _MemPtr, typename _Arg, typename... _Args>
    struct __result_of_memfun_deref
    : private __result_of_memfun_deref_impl
    {
      typedef decltype(_S_test<_MemPtr, _Arg, _Args...>(0)) type;
    };


  struct __result_of_memobj_ref_impl
  {
    template<typename _Fp, typename _Tp1>
      static __result_of_success<decltype(
      std::declval<_Tp1>().*std::declval<_Fp>()
      ), __invoke_memobj_ref> _S_test(int);

    template<typename, typename>
      static __failure_type _S_test(...);
  };

  template<typename _MemPtr, typename _Arg>
    struct __result_of_memobj_ref
    : private __result_of_memobj_ref_impl
    {
      typedef decltype(_S_test<_MemPtr, _Arg>(0)) type;
    };


  struct __result_of_memobj_deref_impl
  {
    template<typename _Fp, typename _Tp1>
      static __result_of_success<decltype(
      (*std::declval<_Tp1>()).*std::declval<_Fp>()
      ), __invoke_memobj_deref> _S_test(int);

    template<typename, typename>
      static __failure_type _S_test(...);
  };

  template<typename _MemPtr, typename _Arg>
    struct __result_of_memobj_deref
    : private __result_of_memobj_deref_impl
    {
      typedef decltype(_S_test<_MemPtr, _Arg>(0)) type;
    };

  template<typename _MemPtr, typename _Arg>
    struct __result_of_memobj;

  template<typename _Res, typename _Class, typename _Arg>
    struct __result_of_memobj<_Res _Class::*, _Arg>
    {
      typedef __remove_cvref_t<_Arg> _Argval;
      typedef _Res _Class::* _MemPtr;
      typedef typename __conditional_t<__or_<is_same<_Argval, _Class>,
        is_base_of<_Class, _Argval>>::value,
        __result_of_memobj_ref<_MemPtr, _Arg>,
        __result_of_memobj_deref<_MemPtr, _Arg>
      >::type type;
    };

  template<typename _MemPtr, typename _Arg, typename... _Args>
    struct __result_of_memfun;

  template<typename _Res, typename _Class, typename _Arg, typename... _Args>
    struct __result_of_memfun<_Res _Class::*, _Arg, _Args...>
    {
      typedef typename remove_reference<_Arg>::type _Argval;
      typedef _Res _Class::* _MemPtr;
      typedef typename __conditional_t<is_base_of<_Class, _Argval>::value,
        __result_of_memfun_ref<_MemPtr, _Arg, _Args...>,
        __result_of_memfun_deref<_MemPtr, _Arg, _Args...>
      >::type type;
    };






  template<typename _Tp, typename _Up = __remove_cvref_t<_Tp>>
    struct __inv_unwrap
    {
      using type = _Tp;
    };

  template<typename _Tp, typename _Up>
    struct __inv_unwrap<_Tp, reference_wrapper<_Up>>
    {
      using type = _Up&;
    };

  template<bool, bool, typename _Functor, typename... _ArgTypes>
    struct __result_of_impl
    {
      typedef __failure_type type;
    };

  template<typename _MemPtr, typename _Arg>
    struct __result_of_impl<true, false, _MemPtr, _Arg>
    : public __result_of_memobj<__decay_t<_MemPtr>,
    typename __inv_unwrap<_Arg>::type>
    { };

  template<typename _MemPtr, typename _Arg, typename... _Args>
    struct __result_of_impl<false, true, _MemPtr, _Arg, _Args...>
    : public __result_of_memfun<__decay_t<_MemPtr>,
    typename __inv_unwrap<_Arg>::type, _Args...>
    { };


  struct __result_of_other_impl
  {
    template<typename _Fn, typename... _Args>
      static __result_of_success<decltype(
      std::declval<_Fn>()(std::declval<_Args>()...)
      ), __invoke_other> _S_test(int);

    template<typename...>
      static __failure_type _S_test(...);
  };

  template<typename _Functor, typename... _ArgTypes>
    struct __result_of_impl<false, false, _Functor, _ArgTypes...>
    : private __result_of_other_impl
    {
      typedef decltype(_S_test<_Functor, _ArgTypes...>(0)) type;
    };


  template<typename _Functor, typename... _ArgTypes>
    struct __invoke_result
    : public __result_of_impl<
        is_member_object_pointer<
          typename remove_reference<_Functor>::type
        >::value,
        is_member_function_pointer<
          typename remove_reference<_Functor>::type
        >::value,
 _Functor, _ArgTypes...
      >::type
    { };


  template<typename _Functor, typename... _ArgTypes>
    struct result_of<_Functor(_ArgTypes...)>
    : public __invoke_result<_Functor, _ArgTypes...>
    { } ;
# 2643 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/type_traits" 3
  template<typename _Default, typename _AlwaysVoid,
    template<typename...> class _Op, typename... _Args>
    struct __detector
    {
      using type = _Default;
      using __is_detected = false_type;
    };


  template<typename _Default, template<typename...> class _Op,
     typename... _Args>
    struct __detector<_Default, __void_t<_Op<_Args...>>, _Op, _Args...>
    {
      using type = _Op<_Args...>;
      using __is_detected = true_type;
    };

  template<typename _Default, template<typename...> class _Op,
    typename... _Args>
    using __detected_or = __detector<_Default, void, _Op, _Args...>;



  template<typename _Default, template<typename...> class _Op,
    typename... _Args>
    using __detected_or_t
      = typename __detected_or<_Default, _Op, _Args...>::type;





#define _GLIBCXX_HAS_NESTED_TYPE(_NTYPE) template<typename _Tp, typename = __void_t<>> struct __has_ ##_NTYPE : false_type { }; template<typename _Tp> struct __has_ ##_NTYPE<_Tp, __void_t<typename _Tp::_NTYPE>> : true_type { };
# 2685 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/type_traits" 3
  template <typename _Tp>
    struct __is_swappable;

  template <typename _Tp>
    struct __is_nothrow_swappable;

  template<typename>
    struct __is_tuple_like_impl : false_type
    { };


  template<typename _Tp>
    struct __is_tuple_like
    : public __is_tuple_like_impl<__remove_cvref_t<_Tp>>::type
    { };


  template<typename _Tp>
   
    inline
    _Require<__not_<__is_tuple_like<_Tp>>,
      is_move_constructible<_Tp>,
      is_move_assignable<_Tp>>
    swap(_Tp&, _Tp&)
    noexcept(__and_<is_nothrow_move_constructible<_Tp>,
             is_nothrow_move_assignable<_Tp>>::value);

  template<typename _Tp, size_t _Nm>
   
    inline
    __enable_if_t<__is_swappable<_Tp>::value>
    swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm])
    noexcept(__is_nothrow_swappable<_Tp>::value);


  namespace __swappable_details {
    using std::swap;

    struct __do_is_swappable_impl
    {
      template<typename _Tp, typename
               = decltype(swap(std::declval<_Tp&>(), std::declval<_Tp&>()))>
        static true_type __test(int);

      template<typename>
        static false_type __test(...);
    };

    struct __do_is_nothrow_swappable_impl
    {
      template<typename _Tp>
        static __bool_constant<
          noexcept(swap(std::declval<_Tp&>(), std::declval<_Tp&>()))
        > __test(int);

      template<typename>
        static false_type __test(...);
    };

  }

  template<typename _Tp>
    struct __is_swappable_impl
    : public __swappable_details::__do_is_swappable_impl
    {
      typedef decltype(__test<_Tp>(0)) type;
    };

  template<typename _Tp>
    struct __is_nothrow_swappable_impl
    : public __swappable_details::__do_is_nothrow_swappable_impl
    {
      typedef decltype(__test<_Tp>(0)) type;
    };

  template<typename _Tp>
    struct __is_swappable
    : public __is_swappable_impl<_Tp>::type
    { };

  template<typename _Tp>
    struct __is_nothrow_swappable
    : public __is_nothrow_swappable_impl<_Tp>::type
    { };
# 2908 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/type_traits" 3
  template<typename _Result, typename _Ret,
    bool = is_void<_Ret>::value, typename = void>
    struct __is_invocable_impl
    : false_type
    {
      using __nothrow_conv = false_type;
    };


  template<typename _Result, typename _Ret>
    struct __is_invocable_impl<_Result, _Ret,
                                true,
          __void_t<typename _Result::type>>
    : true_type
    {
      using __nothrow_conv = true_type;
    };

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wctor-dtor-privacy"

  template<typename _Result, typename _Ret>
    struct __is_invocable_impl<_Result, _Ret,
                                false,
          __void_t<typename _Result::type>>
    {
    private:

      using _Res_t = typename _Result::type;



      static _Res_t _S_get() noexcept;


      template<typename _Tp>
 static void _S_conv(__type_identity_t<_Tp>) noexcept;


      template<typename _Tp,
        bool _Nothrow = noexcept(_S_conv<_Tp>(_S_get())),
        typename = decltype(_S_conv<_Tp>(_S_get())),

        bool _Dangle = __reference_converts_from_temporary(_Tp, _Res_t)



       >
 static __bool_constant<_Nothrow && !_Dangle>
 _S_test(int);

      template<typename _Tp, bool = false>
 static false_type
 _S_test(...);

    public:

      using type = decltype(_S_test<_Ret, true>(1));


      using __nothrow_conv = decltype(_S_test<_Ret>(1));
    };
#pragma GCC diagnostic pop

  template<typename _Fn, typename... _ArgTypes>
    struct __is_invocable
    : __is_invocable_impl<__invoke_result<_Fn, _ArgTypes...>, void>::type
    { };

  template<typename _Fn, typename _Tp, typename... _Args>
    constexpr bool __call_is_nt(__invoke_memfun_ref)
    {
      using _Up = typename __inv_unwrap<_Tp>::type;
      return noexcept((std::declval<_Up>().*std::declval<_Fn>())(
     std::declval<_Args>()...));
    }

  template<typename _Fn, typename _Tp, typename... _Args>
    constexpr bool __call_is_nt(__invoke_memfun_deref)
    {
      return noexcept(((*std::declval<_Tp>()).*std::declval<_Fn>())(
     std::declval<_Args>()...));
    }

  template<typename _Fn, typename _Tp>
    constexpr bool __call_is_nt(__invoke_memobj_ref)
    {
      using _Up = typename __inv_unwrap<_Tp>::type;
      return noexcept(std::declval<_Up>().*std::declval<_Fn>());
    }

  template<typename _Fn, typename _Tp>
    constexpr bool __call_is_nt(__invoke_memobj_deref)
    {
      return noexcept((*std::declval<_Tp>()).*std::declval<_Fn>());
    }

  template<typename _Fn, typename... _Args>
    constexpr bool __call_is_nt(__invoke_other)
    {
      return noexcept(std::declval<_Fn>()(std::declval<_Args>()...));
    }

  template<typename _Result, typename _Fn, typename... _Args>
    struct __call_is_nothrow
    : __bool_constant<
 std::__call_is_nt<_Fn, _Args...>(typename _Result::__invoke_type{})
      >
    { };

  template<typename _Fn, typename... _Args>
    using __call_is_nothrow_
      = __call_is_nothrow<__invoke_result<_Fn, _Args...>, _Fn, _Args...>;


  template<typename _Fn, typename... _Args>
    struct __is_nothrow_invocable
    : __and_<__is_invocable<_Fn, _Args...>,
             __call_is_nothrow_<_Fn, _Args...>>::type
    { };

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wctor-dtor-privacy"
  struct __nonesuchbase {};
  struct __nonesuch : private __nonesuchbase {
    ~__nonesuch() = delete;
    __nonesuch(__nonesuch const&) = delete;
    void operator=(__nonesuch const&) = delete;
  };
#pragma GCC diagnostic pop
# 3812 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/type_traits" 3

}
# 61 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_pair.h" 2 3
# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/move.h" 1 3
# 31 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/move.h" 3
#define _MOVE_H 1






namespace std __attribute__ ((__visibility__ ("default")))
{







  template<typename _Tp>
    inline constexpr _Tp*
    __addressof(_Tp& __r) noexcept
    { return __builtin_addressof(__r); }




}



namespace std __attribute__ ((__visibility__ ("default")))
{

# 74 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/move.h" 3
  template<typename _Tp>
   
    constexpr _Tp&&
    forward(typename std::remove_reference<_Tp>::type& __t) noexcept
    { return static_cast<_Tp&&>(__t); }







  template<typename _Tp>
   
    constexpr _Tp&&
    forward(typename std::remove_reference<_Tp>::type&& __t) noexcept
    {
      static_assert(!std::is_lvalue_reference<_Tp>::value,
   "std::forward must not be used to convert an rvalue to an lvalue");
      return static_cast<_Tp&&>(__t);
    }






  template<typename _Tp>
   
    constexpr typename std::remove_reference<_Tp>::type&&
    move(_Tp&& __t) noexcept
    { return static_cast<typename std::remove_reference<_Tp>::type&&>(__t); }


  template<typename _Tp>
    struct __move_if_noexcept_cond
    : public __and_<__not_<is_nothrow_move_constructible<_Tp>>,
                    is_copy_constructible<_Tp>>::type { };
# 121 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/move.h" 3
  template<typename _Tp>
   
    constexpr
    __conditional_t<__move_if_noexcept_cond<_Tp>::value, const _Tp&, _Tp&&>
    move_if_noexcept(_Tp& __x) noexcept
    { return std::move(__x); }
# 142 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/move.h" 3
  template<typename _Tp>
   
    inline _Tp*
    addressof(_Tp& __r) noexcept
    { return std::__addressof(__r); }



  template<typename _Tp>
    const _Tp* addressof(const _Tp&&) = delete;


  template <typename _Tp, typename _Up = _Tp>
   
    inline _Tp
    __exchange(_Tp& __obj, _Up&& __new_val)
    {
      _Tp __old_val = std::move(__obj);
      __obj = std::forward<_Up>(__new_val);
      return __old_val;
    }



#define _GLIBCXX_FWDREF(_Tp) _Tp&&
#define _GLIBCXX_MOVE(__val) std::move(__val)
#define _GLIBCXX_FORWARD(_Tp,__val) std::forward<_Tp>(__val)
# 186 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/move.h" 3
  template<typename _Tp>
   
    inline

    typename enable_if<__and_<__not_<__is_tuple_like<_Tp>>,
         is_move_constructible<_Tp>,
         is_move_assignable<_Tp>>::value>::type



    swap(_Tp& __a, _Tp& __b)
    noexcept(__and_<is_nothrow_move_constructible<_Tp>, is_nothrow_move_assignable<_Tp>>::value)

    {




      _Tp __tmp = std::move(__a);
      __a = std::move(__b);
      __b = std::move(__tmp);
    }




  template<typename _Tp, size_t _Nm>
   
    inline

    typename enable_if<__is_swappable<_Tp>::value>::type



    swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm])
    noexcept(__is_nothrow_swappable<_Tp>::value)
    {
      for (size_t __n = 0; __n < _Nm; ++__n)
 swap(__a[__n], __b[__n]);
    }



}
# 62 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_pair.h" 2 3
# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/utility.h" 1 3
# 34 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/utility.h" 3
#define _GLIBCXX_UTILITY_H 1

       
# 37 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/utility.h" 3






namespace std __attribute__ ((__visibility__ ("default")))
{



  template<typename _Tp>
    struct tuple_size;





  template<typename _Tp,
    typename _Up = typename remove_cv<_Tp>::type,
    typename = typename enable_if<is_same<_Tp, _Up>::value>::type,
    size_t = tuple_size<_Tp>::value>
    using __enable_if_has_tuple_size = _Tp;

  template<typename _Tp>
    struct tuple_size<const __enable_if_has_tuple_size<_Tp>>
    : public tuple_size<_Tp> { };

  template<typename _Tp>
    struct tuple_size<volatile __enable_if_has_tuple_size<_Tp>>
    : public tuple_size<_Tp> { };

  template<typename _Tp>
    struct tuple_size<const volatile __enable_if_has_tuple_size<_Tp>>
    : public tuple_size<_Tp> { };







  template<size_t __i, typename _Tp>
    struct tuple_element;


  template<size_t __i, typename _Tp>
    using __tuple_element_t = typename tuple_element<__i, _Tp>::type;

  template<size_t __i, typename _Tp>
    struct tuple_element<__i, const _Tp>
    {
      using type = const __tuple_element_t<__i, _Tp>;
    };

  template<size_t __i, typename _Tp>
    struct tuple_element<__i, volatile _Tp>
    {
      using type = volatile __tuple_element_t<__i, _Tp>;
    };

  template<size_t __i, typename _Tp>
    struct tuple_element<__i, const volatile _Tp>
    {
      using type = const volatile __tuple_element_t<__i, _Tp>;
    };
# 140 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/utility.h" 3
  template<size_t... _Indexes> struct _Index_tuple { };


  template<size_t _Num>
    struct _Build_index_tuple
    {
# 154 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/utility.h" 3
      using __type = _Index_tuple<__integer_pack(_Num)...>;

    };
# 227 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/utility.h" 3
  template<size_t _Np, typename... _Types>
    struct _Nth_type
    { };

  template<typename _Tp0, typename... _Rest>
    struct _Nth_type<0, _Tp0, _Rest...>
    { using type = _Tp0; };

  template<typename _Tp0, typename _Tp1, typename... _Rest>
    struct _Nth_type<1, _Tp0, _Tp1, _Rest...>
    { using type = _Tp1; };

  template<typename _Tp0, typename _Tp1, typename _Tp2, typename... _Rest>
    struct _Nth_type<2, _Tp0, _Tp1, _Tp2, _Rest...>
    { using type = _Tp2; };

  template<size_t _Np, typename _Tp0, typename _Tp1, typename _Tp2,
    typename... _Rest>



    struct _Nth_type<_Np, _Tp0, _Tp1, _Tp2, _Rest...>
    : _Nth_type<_Np - 3, _Rest...>
    { };


  template<typename _Tp0, typename _Tp1, typename... _Rest>
    struct _Nth_type<0, _Tp0, _Tp1, _Rest...>
    { using type = _Tp0; };

  template<typename _Tp0, typename _Tp1, typename _Tp2, typename... _Rest>
    struct _Nth_type<0, _Tp0, _Tp1, _Tp2, _Rest...>
    { using type = _Tp0; };

  template<typename _Tp0, typename _Tp1, typename _Tp2, typename... _Rest>
    struct _Nth_type<1, _Tp0, _Tp1, _Tp2, _Rest...>
    { using type = _Tp1; };







}
# 63 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_pair.h" 2 3






namespace std __attribute__ ((__visibility__ ("default")))
{

# 80 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_pair.h" 3
  struct piecewise_construct_t { explicit piecewise_construct_t() = default; };


  constexpr piecewise_construct_t piecewise_construct =
    piecewise_construct_t();




  template<typename...>
    class tuple;

  template<size_t...>
    struct _Index_tuple;







  template <bool, typename _T1, typename _T2>
    struct _PCC
    {
      template <typename _U1, typename _U2>
      static constexpr bool _ConstructiblePair()
      {
 return __and_<is_constructible<_T1, const _U1&>,
        is_constructible<_T2, const _U2&>>::value;
      }

      template <typename _U1, typename _U2>
      static constexpr bool _ImplicitlyConvertiblePair()
      {
 return __and_<is_convertible<const _U1&, _T1>,
        is_convertible<const _U2&, _T2>>::value;
      }

      template <typename _U1, typename _U2>
      static constexpr bool _MoveConstructiblePair()
      {
 return __and_<is_constructible<_T1, _U1&&>,
        is_constructible<_T2, _U2&&>>::value;
      }

      template <typename _U1, typename _U2>
      static constexpr bool _ImplicitlyMoveConvertiblePair()
      {
 return __and_<is_convertible<_U1&&, _T1>,
        is_convertible<_U2&&, _T2>>::value;
      }
    };

  template <typename _T1, typename _T2>
    struct _PCC<false, _T1, _T2>
    {
      template <typename _U1, typename _U2>
      static constexpr bool _ConstructiblePair()
      {
 return false;
      }

      template <typename _U1, typename _U2>
      static constexpr bool _ImplicitlyConvertiblePair()
      {
 return false;
      }

      template <typename _U1, typename _U2>
      static constexpr bool _MoveConstructiblePair()
      {
 return false;
      }

      template <typename _U1, typename _U2>
      static constexpr bool _ImplicitlyMoveConvertiblePair()
      {
 return false;
      }
    };



  template<typename _U1, typename _U2> class __pair_base
  {

    template<typename _T1, typename _T2> friend struct pair;
    __pair_base() = default;
    ~__pair_base() = default;
    __pair_base(const __pair_base&) = default;
    __pair_base& operator=(const __pair_base&) = delete;

  };
# 186 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_pair.h" 3
  template<typename _T1, typename _T2>
    struct pair
    : public __pair_base<_T1, _T2>
    {
      typedef _T1 first_type;
      typedef _T2 second_type;

      _T1 first;
      _T2 second;


      constexpr pair(const pair&) = default;
      constexpr pair(pair&&) = default;

      template<typename... _Args1, typename... _Args2>

 pair(piecewise_construct_t, tuple<_Args1...>, tuple<_Args2...>);


      void
      swap(pair& __p)
      noexcept(__and_<__is_nothrow_swappable<_T1>,
        __is_nothrow_swappable<_T2>>::value)
      {
 using std::swap;
 swap(first, __p.first);
 swap(second, __p.second);
      }
# 234 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_pair.h" 3
    private:
      template<typename... _Args1, size_t... _Indexes1,
        typename... _Args2, size_t... _Indexes2>

 pair(tuple<_Args1...>&, tuple<_Args2...>&,
      _Index_tuple<_Indexes1...>, _Index_tuple<_Indexes2...>);
    public:
# 468 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_pair.h" 3
      template <typename _U1 = _T1,
                typename _U2 = _T2,
                typename enable_if<__and_<
                                     __is_implicitly_default_constructible<_U1>,
                                     __is_implicitly_default_constructible<_U2>>
                                   ::value, bool>::type = true>
      constexpr pair()
      : first(), second() { }

      template <typename _U1 = _T1,
                typename _U2 = _T2,
                typename enable_if<__and_<
                       is_default_constructible<_U1>,
                       is_default_constructible<_U2>,
                       __not_<
                         __and_<__is_implicitly_default_constructible<_U1>,
                                __is_implicitly_default_constructible<_U2>>>>
                                   ::value, bool>::type = false>
      explicit constexpr pair()
      : first(), second() { }



      using _PCCP = _PCC<true, _T1, _T2>;



      template<typename _U1 = _T1, typename _U2=_T2, typename
        enable_if<_PCCP::template
      _ConstructiblePair<_U1, _U2>()
                  && _PCCP::template
      _ImplicitlyConvertiblePair<_U1, _U2>(),
                         bool>::type=true>
      constexpr pair(const _T1& __a, const _T2& __b)
      : first(__a), second(__b) { }


       template<typename _U1 = _T1, typename _U2=_T2, typename
  enable_if<_PCCP::template
       _ConstructiblePair<_U1, _U2>()
                   && !_PCCP::template
       _ImplicitlyConvertiblePair<_U1, _U2>(),
                         bool>::type=false>
      explicit constexpr pair(const _T1& __a, const _T2& __b)
      : first(__a), second(__b) { }



      template <typename _U1, typename _U2>
        using _PCCFP = _PCC<!is_same<_T1, _U1>::value
       || !is_same<_T2, _U2>::value,
       _T1, _T2>;


      template<typename _U1, typename _U2, typename
        enable_if<_PCCFP<_U1, _U2>::template
      _ConstructiblePair<_U1, _U2>()
                  && _PCCFP<_U1, _U2>::template
      _ImplicitlyConvertiblePair<_U1, _U2>(),
     bool>::type=true>
        constexpr pair(const pair<_U1, _U2>& __p)
        : first(__p.first), second(__p.second) { }

      template<typename _U1, typename _U2, typename
        enable_if<_PCCFP<_U1, _U2>::template
      _ConstructiblePair<_U1, _U2>()
    && !_PCCFP<_U1, _U2>::template
      _ImplicitlyConvertiblePair<_U1, _U2>(),
                         bool>::type=false>
 explicit constexpr pair(const pair<_U1, _U2>& __p)
 : first(__p.first), second(__p.second) { }



#define _GLIBCXX_DEPRECATED_PAIR_CTOR __attribute__ ((__deprecated__ ("use 'nullptr' instead of '0' to " "initialize std::pair of move-only " "type and pointer")))







    private:



      struct __zero_as_null_pointer_constant
      {
 __zero_as_null_pointer_constant(int __zero_as_null_pointer_constant::*)
 { }
 template<typename _Tp,
   typename = __enable_if_t<is_null_pointer<_Tp>::value>>
 __zero_as_null_pointer_constant(_Tp) = delete;
      };

    public:




      template<typename _U1,
        __enable_if_t<__and_<__not_<is_reference<_U1>>,
        is_pointer<_T2>,
        is_constructible<_T1, _U1>,
        __not_<is_constructible<_T1, const _U1&>>,
        is_convertible<_U1, _T1>>::value,
        bool> = true>
 __attribute__ ((__deprecated__ ("use 'nullptr' instead of '0' to " "initialize std::pair of move-only " "type and pointer")))
 constexpr
 pair(_U1&& __x, __zero_as_null_pointer_constant, ...)
 : first(std::forward<_U1>(__x)), second(nullptr) { }

      template<typename _U1,
        __enable_if_t<__and_<__not_<is_reference<_U1>>,
        is_pointer<_T2>,
        is_constructible<_T1, _U1>,
        __not_<is_constructible<_T1, const _U1&>>,
        __not_<is_convertible<_U1, _T1>>>::value,
        bool> = false>
 __attribute__ ((__deprecated__ ("use 'nullptr' instead of '0' to " "initialize std::pair of move-only " "type and pointer")))
 explicit constexpr
 pair(_U1&& __x, __zero_as_null_pointer_constant, ...)
 : first(std::forward<_U1>(__x)), second(nullptr) { }

      template<typename _U2,
        __enable_if_t<__and_<is_pointer<_T1>,
        __not_<is_reference<_U2>>,
        is_constructible<_T2, _U2>,
        __not_<is_constructible<_T2, const _U2&>>,
        is_convertible<_U2, _T2>>::value,
        bool> = true>
 __attribute__ ((__deprecated__ ("use 'nullptr' instead of '0' to " "initialize std::pair of move-only " "type and pointer")))
 constexpr
 pair(__zero_as_null_pointer_constant, _U2&& __y, ...)
 : first(nullptr), second(std::forward<_U2>(__y)) { }

      template<typename _U2,
        __enable_if_t<__and_<is_pointer<_T1>,
        __not_<is_reference<_U2>>,
        is_constructible<_T2, _U2>,
        __not_<is_constructible<_T2, const _U2&>>,
        __not_<is_convertible<_U2, _T2>>>::value,
        bool> = false>
 __attribute__ ((__deprecated__ ("use 'nullptr' instead of '0' to " "initialize std::pair of move-only " "type and pointer")))
 explicit constexpr
 pair(__zero_as_null_pointer_constant, _U2&& __y, ...)
 : first(nullptr), second(std::forward<_U2>(__y)) { }
#undef _GLIBCXX_DEPRECATED_PAIR_CTOR


      template<typename _U1, typename _U2, typename
        enable_if<_PCCP::template
      _MoveConstructiblePair<_U1, _U2>()
     && _PCCP::template
      _ImplicitlyMoveConvertiblePair<_U1, _U2>(),
                         bool>::type=true>
 constexpr pair(_U1&& __x, _U2&& __y)
 : first(std::forward<_U1>(__x)), second(std::forward<_U2>(__y)) { }

      template<typename _U1, typename _U2, typename
        enable_if<_PCCP::template
      _MoveConstructiblePair<_U1, _U2>()
     && !_PCCP::template
      _ImplicitlyMoveConvertiblePair<_U1, _U2>(),
                         bool>::type=false>
 explicit constexpr pair(_U1&& __x, _U2&& __y)
 : first(std::forward<_U1>(__x)), second(std::forward<_U2>(__y)) { }


      template<typename _U1, typename _U2, typename
        enable_if<_PCCFP<_U1, _U2>::template
      _MoveConstructiblePair<_U1, _U2>()
     && _PCCFP<_U1, _U2>::template
      _ImplicitlyMoveConvertiblePair<_U1, _U2>(),
                         bool>::type=true>
 constexpr pair(pair<_U1, _U2>&& __p)
 : first(std::forward<_U1>(__p.first)),
   second(std::forward<_U2>(__p.second)) { }

      template<typename _U1, typename _U2, typename
        enable_if<_PCCFP<_U1, _U2>::template
      _MoveConstructiblePair<_U1, _U2>()
     && !_PCCFP<_U1, _U2>::template
      _ImplicitlyMoveConvertiblePair<_U1, _U2>(),
                         bool>::type=false>
 explicit constexpr pair(pair<_U1, _U2>&& __p)
 : first(std::forward<_U1>(__p.first)),
   second(std::forward<_U2>(__p.second)) { }

      pair&
      operator=(__conditional_t<__and_<is_copy_assignable<_T1>,
           is_copy_assignable<_T2>>::value,
    const pair&, const __nonesuch&> __p)
      {
 first = __p.first;
 second = __p.second;
 return *this;
      }

      pair&
      operator=(__conditional_t<__and_<is_move_assignable<_T1>,
           is_move_assignable<_T2>>::value,
    pair&&, __nonesuch&&> __p)
      noexcept(__and_<is_nothrow_move_assignable<_T1>,
        is_nothrow_move_assignable<_T2>>::value)
      {
 first = std::forward<first_type>(__p.first);
 second = std::forward<second_type>(__p.second);
 return *this;
      }

      template<typename _U1, typename _U2>
 typename enable_if<__and_<is_assignable<_T1&, const _U1&>,
      is_assignable<_T2&, const _U2&>>::value,
      pair&>::type
 operator=(const pair<_U1, _U2>& __p)
 {
   first = __p.first;
   second = __p.second;
   return *this;
 }

      template<typename _U1, typename _U2>
 typename enable_if<__and_<is_assignable<_T1&, _U1&&>,
      is_assignable<_T2&, _U2&&>>::value,
      pair&>::type
 operator=(pair<_U1, _U2>&& __p)
 {
   first = std::forward<_U1>(__p.first);
   second = std::forward<_U2>(__p.second);
   return *this;
 }
# 719 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_pair.h" 3
    };
# 728 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_pair.h" 3
  template<typename _T1, typename _T2>
    inline constexpr bool
    operator==(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
    { return __x.first == __y.first && __x.second == __y.second; }
# 751 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_pair.h" 3
  template<typename _T1, typename _T2>
    inline constexpr bool
    operator<(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
    { return __x.first < __y.first
      || (!(__y.first < __x.first) && __x.second < __y.second); }


  template<typename _T1, typename _T2>
    inline constexpr bool
    operator!=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
    { return !(__x == __y); }


  template<typename _T1, typename _T2>
    inline constexpr bool
    operator>(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
    { return __y < __x; }


  template<typename _T1, typename _T2>
    inline constexpr bool
    operator<=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
    { return !(__y < __x); }


  template<typename _T1, typename _T2>
    inline constexpr bool
    operator>=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
    { return !(__x < __y); }
# 788 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_pair.h" 3
  template<typename _T1, typename _T2>
    inline





    void

    swap(pair<_T1, _T2>& __x, pair<_T1, _T2>& __y)
    noexcept(noexcept(__x.swap(__y)))
    { __x.swap(__y); }
# 837 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_pair.h" 3
  template<typename _T1, typename _T2>
    constexpr pair<typename __decay_and_strip<_T1>::__type,
                   typename __decay_and_strip<_T2>::__type>
    make_pair(_T1&& __x, _T2&& __y)
    {
      typedef typename __decay_and_strip<_T1>::__type __ds_type1;
      typedef typename __decay_and_strip<_T2>::__type __ds_type2;
      typedef pair<__ds_type1, __ds_type2> __pair_type;
      return __pair_type(std::forward<_T1>(__x), std::forward<_T2>(__y));
    }
# 860 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_pair.h" 3
  template<typename _T1, typename _T2>
    struct __is_tuple_like_impl<pair<_T1, _T2>> : true_type
    { };



  template<class _Tp1, class _Tp2>
    struct tuple_size<pair<_Tp1, _Tp2>>
    : public integral_constant<size_t, 2> { };


  template<class _Tp1, class _Tp2>
    struct tuple_element<0, pair<_Tp1, _Tp2>>
    { typedef _Tp1 type; };


  template<class _Tp1, class _Tp2>
    struct tuple_element<1, pair<_Tp1, _Tp2>>
    { typedef _Tp2 type; };
# 895 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_pair.h" 3
  template<size_t _Int>
    struct __pair_get;

  template<>
    struct __pair_get<0>
    {
      template<typename _Tp1, typename _Tp2>
 static constexpr _Tp1&
 __get(pair<_Tp1, _Tp2>& __pair) noexcept
 { return __pair.first; }

      template<typename _Tp1, typename _Tp2>
 static constexpr _Tp1&&
 __move_get(pair<_Tp1, _Tp2>&& __pair) noexcept
 { return std::forward<_Tp1>(__pair.first); }

      template<typename _Tp1, typename _Tp2>
 static constexpr const _Tp1&
 __const_get(const pair<_Tp1, _Tp2>& __pair) noexcept
 { return __pair.first; }

      template<typename _Tp1, typename _Tp2>
 static constexpr const _Tp1&&
 __const_move_get(const pair<_Tp1, _Tp2>&& __pair) noexcept
 { return std::forward<const _Tp1>(__pair.first); }
    };

  template<>
    struct __pair_get<1>
    {
      template<typename _Tp1, typename _Tp2>
 static constexpr _Tp2&
 __get(pair<_Tp1, _Tp2>& __pair) noexcept
 { return __pair.second; }

      template<typename _Tp1, typename _Tp2>
 static constexpr _Tp2&&
 __move_get(pair<_Tp1, _Tp2>&& __pair) noexcept
 { return std::forward<_Tp2>(__pair.second); }

      template<typename _Tp1, typename _Tp2>
 static constexpr const _Tp2&
 __const_get(const pair<_Tp1, _Tp2>& __pair) noexcept
 { return __pair.second; }

      template<typename _Tp1, typename _Tp2>
 static constexpr const _Tp2&&
 __const_move_get(const pair<_Tp1, _Tp2>&& __pair) noexcept
 { return std::forward<const _Tp2>(__pair.second); }
    };






  template<size_t _Int, class _Tp1, class _Tp2>
    constexpr typename tuple_element<_Int, pair<_Tp1, _Tp2>>::type&
    get(pair<_Tp1, _Tp2>& __in) noexcept
    { return __pair_get<_Int>::__get(__in); }

  template<size_t _Int, class _Tp1, class _Tp2>
    constexpr typename tuple_element<_Int, pair<_Tp1, _Tp2>>::type&&
    get(pair<_Tp1, _Tp2>&& __in) noexcept
    { return __pair_get<_Int>::__move_get(std::move(__in)); }

  template<size_t _Int, class _Tp1, class _Tp2>
    constexpr const typename tuple_element<_Int, pair<_Tp1, _Tp2>>::type&
    get(const pair<_Tp1, _Tp2>& __in) noexcept
    { return __pair_get<_Int>::__const_get(__in); }

  template<size_t _Int, class _Tp1, class _Tp2>
    constexpr const typename tuple_element<_Int, pair<_Tp1, _Tp2>>::type&&
    get(const pair<_Tp1, _Tp2>&& __in) noexcept
    { return __pair_get<_Int>::__const_move_get(std::move(__in)); }
# 1036 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_pair.h" 3

}
# 39 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/tuple" 2 3
# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/uses_allocator.h" 1 3
# 26 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/uses_allocator.h" 3
#define _USES_ALLOCATOR_H 1
# 35 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/uses_allocator.h" 3
namespace std __attribute__ ((__visibility__ ("default")))
{




  struct __erased_type { };




  template<typename _Alloc, typename _Tp>
    using __is_erased_or_convertible
      = __or_<is_convertible<_Alloc, _Tp>, is_same<_Tp, __erased_type>>;


  struct allocator_arg_t { explicit allocator_arg_t() = default; };

  constexpr allocator_arg_t allocator_arg =
    allocator_arg_t();

  template<typename _Tp, typename _Alloc, typename = __void_t<>>
    struct __uses_allocator_helper
    : false_type { };

  template<typename _Tp, typename _Alloc>
    struct __uses_allocator_helper<_Tp, _Alloc,
       __void_t<typename _Tp::allocator_type>>
    : __is_erased_or_convertible<_Alloc, typename _Tp::allocator_type>::type
    { };


  template<typename _Tp, typename _Alloc>
    struct uses_allocator
    : __uses_allocator_helper<_Tp, _Alloc>::type
    { };

  struct __uses_alloc_base { };

  struct __uses_alloc0 : __uses_alloc_base
  {
    struct _Sink { void operator=(const void*) { } } _M_a;
  };

  template<typename _Alloc>
    struct __uses_alloc1 : __uses_alloc_base { const _Alloc* _M_a; };

  template<typename _Alloc>
    struct __uses_alloc2 : __uses_alloc_base { const _Alloc* _M_a; };

  template<bool, typename _Tp, typename _Alloc, typename... _Args>
    struct __uses_alloc;

  template<typename _Tp, typename _Alloc, typename... _Args>
    struct __uses_alloc<true, _Tp, _Alloc, _Args...>
    : __conditional_t<
        is_constructible<_Tp, allocator_arg_t, const _Alloc&, _Args...>::value,
        __uses_alloc1<_Alloc>,
        __uses_alloc2<_Alloc>>
    {


      static_assert(__or_<
   is_constructible<_Tp, allocator_arg_t, const _Alloc&, _Args...>,
   is_constructible<_Tp, _Args..., const _Alloc&>>::value,
   "construction with an allocator must be possible"
   " if uses_allocator is true");
    };

  template<typename _Tp, typename _Alloc, typename... _Args>
    struct __uses_alloc<false, _Tp, _Alloc, _Args...>
    : __uses_alloc0 { };

  template<typename _Tp, typename _Alloc, typename... _Args>
    using __uses_alloc_t =
      __uses_alloc<uses_allocator<_Tp, _Alloc>::value, _Tp, _Alloc, _Args...>;

  template<typename _Tp, typename _Alloc, typename... _Args>
   
    inline __uses_alloc_t<_Tp, _Alloc, _Args...>
    __use_alloc(const _Alloc& __a)
    {
      __uses_alloc_t<_Tp, _Alloc, _Args...> __ret;
      __ret._M_a = std::__addressof(__a);
      return __ret;
    }

  template<typename _Tp, typename _Alloc, typename... _Args>
    void
    __use_alloc(const _Alloc&&) = delete;







  template<template<typename...> class _Predicate,
    typename _Tp, typename _Alloc, typename... _Args>
    struct __is_uses_allocator_predicate
    : __conditional_t<uses_allocator<_Tp, _Alloc>::value,
      __or_<_Predicate<_Tp, allocator_arg_t, _Alloc, _Args...>,
     _Predicate<_Tp, _Args..., _Alloc>>,
      _Predicate<_Tp, _Args...>> { };

  template<typename _Tp, typename _Alloc, typename... _Args>
    struct __is_uses_allocator_constructible
    : __is_uses_allocator_predicate<is_constructible, _Tp, _Alloc, _Args...>
    { };







  template<typename _Tp, typename _Alloc, typename... _Args>
    struct __is_nothrow_uses_allocator_constructible
    : __is_uses_allocator_predicate<is_nothrow_constructible,
        _Tp, _Alloc, _Args...>
    { };
# 165 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/uses_allocator.h" 3
  template<typename _Tp, typename... _Args>
    void __uses_allocator_construct_impl(__uses_alloc0 __a, _Tp* __ptr,
      _Args&&... __args)
    { ::new ((void*)__ptr) _Tp(std::forward<_Args>(__args)...); }

  template<typename _Tp, typename _Alloc, typename... _Args>
    void __uses_allocator_construct_impl(__uses_alloc1<_Alloc> __a, _Tp* __ptr,
      _Args&&... __args)
    {
      ::new ((void*)__ptr) _Tp(allocator_arg, *__a._M_a,
          std::forward<_Args>(__args)...);
    }

  template<typename _Tp, typename _Alloc, typename... _Args>
    void __uses_allocator_construct_impl(__uses_alloc2<_Alloc> __a, _Tp* __ptr,
      _Args&&... __args)
    { ::new ((void*)__ptr) _Tp(std::forward<_Args>(__args)..., *__a._M_a); }

  template<typename _Tp, typename _Alloc, typename... _Args>
    void __uses_allocator_construct(const _Alloc& __a, _Tp* __ptr,
        _Args&&... __args)
    {
      std::__uses_allocator_construct_impl(
   std::__use_alloc<_Tp, _Alloc, _Args...>(__a), __ptr,
   std::forward<_Args>(__args)...);
    }



}
# 40 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/tuple" 2 3

# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/invoke.h" 1 3
# 31 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/invoke.h" 3
#define _GLIBCXX_INVOKE_H 1

       
# 34 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/invoke.h" 3
# 42 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/invoke.h" 3
namespace std __attribute__ ((__visibility__ ("default")))
{

# 53 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/invoke.h" 3
  template<typename _Tp, typename _Up = typename __inv_unwrap<_Tp>::type>
    constexpr _Up&&
    __invfwd(typename remove_reference<_Tp>::type& __t) noexcept
    { return static_cast<_Up&&>(__t); }

  template<typename _Res, typename _Fn, typename... _Args>
    constexpr _Res
    __invoke_impl(__invoke_other, _Fn&& __f, _Args&&... __args)
    { return std::forward<_Fn>(__f)(std::forward<_Args>(__args)...); }

  template<typename _Res, typename _MemFun, typename _Tp, typename... _Args>
    constexpr _Res
    __invoke_impl(__invoke_memfun_ref, _MemFun&& __f, _Tp&& __t,
    _Args&&... __args)
    { return (__invfwd<_Tp>(__t).*__f)(std::forward<_Args>(__args)...); }

  template<typename _Res, typename _MemFun, typename _Tp, typename... _Args>
    constexpr _Res
    __invoke_impl(__invoke_memfun_deref, _MemFun&& __f, _Tp&& __t,
    _Args&&... __args)
    {
      return ((*std::forward<_Tp>(__t)).*__f)(std::forward<_Args>(__args)...);
    }

  template<typename _Res, typename _MemPtr, typename _Tp>
    constexpr _Res
    __invoke_impl(__invoke_memobj_ref, _MemPtr&& __f, _Tp&& __t)
    { return __invfwd<_Tp>(__t).*__f; }

  template<typename _Res, typename _MemPtr, typename _Tp>
    constexpr _Res
    __invoke_impl(__invoke_memobj_deref, _MemPtr&& __f, _Tp&& __t)
    { return (*std::forward<_Tp>(__t)).*__f; }


  template<typename _Callable, typename... _Args>
    constexpr typename __invoke_result<_Callable, _Args...>::type
    __invoke(_Callable&& __fn, _Args&&... __args)
    noexcept(__is_nothrow_invocable<_Callable, _Args...>::value)
    {
      using __result = __invoke_result<_Callable, _Args...>;
      using __type = typename __result::type;
      using __tag = typename __result::__invoke_type;
      return std::__invoke_impl<__type>(__tag{}, std::forward<_Callable>(__fn),
     std::forward<_Args>(__args)...);
    }
# 127 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/invoke.h" 3
  template<typename _Res, typename _Callable, typename... _Args>
    constexpr __enable_if_t<!is_void<_Res>::value, _Res>
    __invoke_r(_Callable&& __fn, _Args&&... __args)
    {
      using __result = __invoke_result<_Callable, _Args...>;
      using __type = typename __result::type;

      static_assert(!__reference_converts_from_temporary(_Res, __type),
      "INVOKE<R> must not create a dangling reference");

      using __tag = typename __result::__invoke_type;
      return std::__invoke_impl<__type>(__tag{}, std::forward<_Callable>(__fn),
     std::forward<_Args>(__args)...);
    }


  template<typename _Res, typename _Callable, typename... _Args>
    __enable_if_t<is_void<_Res>::value, _Res>
    __invoke_r(_Callable&& __fn, _Args&&... __args)
    {
      using __result = __invoke_result<_Callable, _Args...>;
      using __type = typename __result::type;
      using __tag = typename __result::__invoke_type;
      std::__invoke_impl<__type>(__tag{}, std::forward<_Callable>(__fn),
     std::forward<_Args>(__args)...);
    }



}
# 42 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/tuple" 2 3






namespace std __attribute__ ((__visibility__ ("default")))
{







  template<typename... _Elements>
    class tuple;

  template<typename _Tp>
    struct __is_empty_non_tuple : is_empty<_Tp> { };


  template<typename _El0, typename... _El>
    struct __is_empty_non_tuple<tuple<_El0, _El...>> : false_type { };


  template<typename _Tp>
    using __empty_not_final
    = __conditional_t<__is_final(_Tp), false_type,
        __is_empty_non_tuple<_Tp>>;

  template<size_t _Idx, typename _Head,
    bool = __empty_not_final<_Head>::value>
    struct _Head_base;


  template<size_t _Idx, typename _Head>
    struct _Head_base<_Idx, _Head, true>
    {
      constexpr _Head_base()
      : _M_head_impl() { }

      constexpr _Head_base(const _Head& __h)
      : _M_head_impl(__h) { }

      constexpr _Head_base(const _Head_base&) = default;
      constexpr _Head_base(_Head_base&&) = default;

      template<typename _UHead>
 constexpr _Head_base(_UHead&& __h)
 : _M_head_impl(std::forward<_UHead>(__h)) { }

     
      _Head_base(allocator_arg_t, __uses_alloc0)
      : _M_head_impl() { }

      template<typename _Alloc>

 _Head_base(allocator_arg_t, __uses_alloc1<_Alloc> __a)
 : _M_head_impl(allocator_arg, *__a._M_a) { }

      template<typename _Alloc>

 _Head_base(allocator_arg_t, __uses_alloc2<_Alloc> __a)
 : _M_head_impl(*__a._M_a) { }

      template<typename _UHead>

 _Head_base(__uses_alloc0, _UHead&& __uhead)
 : _M_head_impl(std::forward<_UHead>(__uhead)) { }

      template<typename _Alloc, typename _UHead>

 _Head_base(__uses_alloc1<_Alloc> __a, _UHead&& __uhead)
 : _M_head_impl(allocator_arg, *__a._M_a, std::forward<_UHead>(__uhead))
 { }

      template<typename _Alloc, typename _UHead>

 _Head_base(__uses_alloc2<_Alloc> __a, _UHead&& __uhead)
 : _M_head_impl(std::forward<_UHead>(__uhead), *__a._M_a) { }

      static constexpr _Head&
      _M_head(_Head_base& __b) noexcept { return __b._M_head_impl; }

      static constexpr const _Head&
      _M_head(const _Head_base& __b) noexcept { return __b._M_head_impl; }

      [[__no_unique_address__]] _Head _M_head_impl;
    };
# 187 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/tuple" 3
  template<size_t _Idx, typename _Head>
    struct _Head_base<_Idx, _Head, false>
    {
      constexpr _Head_base()
      : _M_head_impl() { }

      constexpr _Head_base(const _Head& __h)
      : _M_head_impl(__h) { }

      constexpr _Head_base(const _Head_base&) = default;
      constexpr _Head_base(_Head_base&&) = default;

      template<typename _UHead>
        constexpr _Head_base(_UHead&& __h)
 : _M_head_impl(std::forward<_UHead>(__h)) { }

     
      _Head_base(allocator_arg_t, __uses_alloc0)
      : _M_head_impl() { }

      template<typename _Alloc>

 _Head_base(allocator_arg_t, __uses_alloc1<_Alloc> __a)
 : _M_head_impl(allocator_arg, *__a._M_a) { }

      template<typename _Alloc>

 _Head_base(allocator_arg_t, __uses_alloc2<_Alloc> __a)
 : _M_head_impl(*__a._M_a) { }

      template<typename _UHead>

 _Head_base(__uses_alloc0, _UHead&& __uhead)
 : _M_head_impl(std::forward<_UHead>(__uhead)) { }

      template<typename _Alloc, typename _UHead>

 _Head_base(__uses_alloc1<_Alloc> __a, _UHead&& __uhead)
 : _M_head_impl(allocator_arg, *__a._M_a, std::forward<_UHead>(__uhead))
 { }

      template<typename _Alloc, typename _UHead>

 _Head_base(__uses_alloc2<_Alloc> __a, _UHead&& __uhead)
 : _M_head_impl(std::forward<_UHead>(__uhead), *__a._M_a) { }

      static constexpr _Head&
      _M_head(_Head_base& __b) noexcept { return __b._M_head_impl; }

      static constexpr const _Head&
      _M_head(const _Head_base& __b) noexcept { return __b._M_head_impl; }

      _Head _M_head_impl;
    };
# 250 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/tuple" 3
  template<size_t _Idx, typename... _Elements>
    struct _Tuple_impl;






  template<size_t _Idx, typename _Head, typename... _Tail>
    struct _Tuple_impl<_Idx, _Head, _Tail...>
    : public _Tuple_impl<_Idx + 1, _Tail...>,
      private _Head_base<_Idx, _Head>
    {
      template<size_t, typename...> friend struct _Tuple_impl;

      typedef _Tuple_impl<_Idx + 1, _Tail...> _Inherited;
      typedef _Head_base<_Idx, _Head> _Base;

      static constexpr _Head&
      _M_head(_Tuple_impl& __t) noexcept { return _Base::_M_head(__t); }

      static constexpr const _Head&
      _M_head(const _Tuple_impl& __t) noexcept { return _Base::_M_head(__t); }

      static constexpr _Inherited&
      _M_tail(_Tuple_impl& __t) noexcept { return __t; }

      static constexpr const _Inherited&
      _M_tail(const _Tuple_impl& __t) noexcept { return __t; }

      constexpr _Tuple_impl()
      : _Inherited(), _Base() { }

      explicit constexpr
      _Tuple_impl(const _Head& __head, const _Tail&... __tail)
      : _Inherited(__tail...), _Base(__head)
      { }

      template<typename _UHead, typename... _UTail,
        typename = __enable_if_t<sizeof...(_Tail) == sizeof...(_UTail)>>
 explicit constexpr
 _Tuple_impl(_UHead&& __head, _UTail&&... __tail)
 : _Inherited(std::forward<_UTail>(__tail)...),
   _Base(std::forward<_UHead>(__head))
 { }

      constexpr _Tuple_impl(const _Tuple_impl&) = default;



      _Tuple_impl& operator=(const _Tuple_impl&) = delete;

      _Tuple_impl(_Tuple_impl&&) = default;

      template<typename... _UElements>
 constexpr
 _Tuple_impl(const _Tuple_impl<_Idx, _UElements...>& __in)
 : _Inherited(_Tuple_impl<_Idx, _UElements...>::_M_tail(__in)),
   _Base(_Tuple_impl<_Idx, _UElements...>::_M_head(__in))
 { }

      template<typename _UHead, typename... _UTails>
 constexpr
 _Tuple_impl(_Tuple_impl<_Idx, _UHead, _UTails...>&& __in)
 : _Inherited(std::move
       (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_tail(__in))),
   _Base(std::forward<_UHead>
  (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_head(__in)))
 { }
# 338 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/tuple" 3
      template<typename _Alloc>

 _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a)
 : _Inherited(__tag, __a),
   _Base(__tag, __use_alloc<_Head>(__a))
 { }

      template<typename _Alloc>

 _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a,
      const _Head& __head, const _Tail&... __tail)
 : _Inherited(__tag, __a, __tail...),
   _Base(__use_alloc<_Head, _Alloc, _Head>(__a), __head)
 { }

      template<typename _Alloc, typename _UHead, typename... _UTail,
        typename = __enable_if_t<sizeof...(_Tail) == sizeof...(_UTail)>>

 _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a,
      _UHead&& __head, _UTail&&... __tail)
 : _Inherited(__tag, __a, std::forward<_UTail>(__tail)...),
   _Base(__use_alloc<_Head, _Alloc, _UHead>(__a),
  std::forward<_UHead>(__head))
 { }

      template<typename _Alloc>

 _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a,
      const _Tuple_impl& __in)
 : _Inherited(__tag, __a, _M_tail(__in)),
   _Base(__use_alloc<_Head, _Alloc, _Head>(__a), _M_head(__in))
 { }

      template<typename _Alloc>

 _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a,
      _Tuple_impl&& __in)
 : _Inherited(__tag, __a, std::move(_M_tail(__in))),
   _Base(__use_alloc<_Head, _Alloc, _Head>(__a),
  std::forward<_Head>(_M_head(__in)))
 { }

      template<typename _Alloc, typename _UHead, typename... _UTails>

 _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a,
      const _Tuple_impl<_Idx, _UHead, _UTails...>& __in)
 : _Inherited(__tag, __a,
       _Tuple_impl<_Idx, _UHead, _UTails...>::_M_tail(__in)),
   _Base(__use_alloc<_Head, _Alloc, const _UHead&>(__a),
  _Tuple_impl<_Idx, _UHead, _UTails...>::_M_head(__in))
 { }

      template<typename _Alloc, typename _UHead, typename... _UTails>

 _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a,
      _Tuple_impl<_Idx, _UHead, _UTails...>&& __in)
 : _Inherited(__tag, __a, std::move
       (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_tail(__in))),
   _Base(__use_alloc<_Head, _Alloc, _UHead>(__a),
  std::forward<_UHead>
  (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_head(__in)))
 { }
# 424 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/tuple" 3
      template<typename... _UElements>

 void
 _M_assign(const _Tuple_impl<_Idx, _UElements...>& __in)
 {
   _M_head(*this) = _Tuple_impl<_Idx, _UElements...>::_M_head(__in);
   _M_tail(*this)._M_assign(
       _Tuple_impl<_Idx, _UElements...>::_M_tail(__in));
 }

      template<typename _UHead, typename... _UTails>

 void
 _M_assign(_Tuple_impl<_Idx, _UHead, _UTails...>&& __in)
 {
   _M_head(*this) = std::forward<_UHead>
     (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_head(__in));
   _M_tail(*this)._M_assign(
       std::move(_Tuple_impl<_Idx, _UHead, _UTails...>::_M_tail(__in)));
 }
# 466 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/tuple" 3
    protected:
     
      void
      _M_swap(_Tuple_impl& __in)
      {
 using std::swap;
 swap(_M_head(*this), _M_head(__in));
 _Inherited::_M_swap(_M_tail(__in));
      }
# 485 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/tuple" 3
    };


  template<size_t _Idx, typename _Head>
    struct _Tuple_impl<_Idx, _Head>
    : private _Head_base<_Idx, _Head>
    {
      template<size_t, typename...> friend struct _Tuple_impl;

      typedef _Head_base<_Idx, _Head> _Base;

      static constexpr _Head&
      _M_head(_Tuple_impl& __t) noexcept { return _Base::_M_head(__t); }

      static constexpr const _Head&
      _M_head(const _Tuple_impl& __t) noexcept { return _Base::_M_head(__t); }

      constexpr
      _Tuple_impl()
      : _Base() { }

      explicit constexpr
      _Tuple_impl(const _Head& __head)
      : _Base(__head)
      { }

      template<typename _UHead>
 explicit constexpr
 _Tuple_impl(_UHead&& __head)
 : _Base(std::forward<_UHead>(__head))
 { }

      constexpr _Tuple_impl(const _Tuple_impl&) = default;



      _Tuple_impl& operator=(const _Tuple_impl&) = delete;




      constexpr
      _Tuple_impl(_Tuple_impl&& __in)
      noexcept(is_nothrow_move_constructible<_Head>::value)
      : _Base(static_cast<_Base&&>(__in))
      { }


      template<typename _UHead>
 constexpr
 _Tuple_impl(const _Tuple_impl<_Idx, _UHead>& __in)
 : _Base(_Tuple_impl<_Idx, _UHead>::_M_head(__in))
 { }

      template<typename _UHead>
 constexpr
 _Tuple_impl(_Tuple_impl<_Idx, _UHead>&& __in)
 : _Base(std::forward<_UHead>(_Tuple_impl<_Idx, _UHead>::_M_head(__in)))
 { }
# 559 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/tuple" 3
      template<typename _Alloc>

 _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a)
 : _Base(__tag, __use_alloc<_Head>(__a))
 { }

      template<typename _Alloc>

 _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a,
      const _Head& __head)
 : _Base(__use_alloc<_Head, _Alloc, const _Head&>(__a), __head)
 { }

      template<typename _Alloc, typename _UHead>

 _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a,
      _UHead&& __head)
 : _Base(__use_alloc<_Head, _Alloc, _UHead>(__a),
  std::forward<_UHead>(__head))
 { }

      template<typename _Alloc>

 _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a,
      const _Tuple_impl& __in)
 : _Base(__use_alloc<_Head, _Alloc, const _Head&>(__a), _M_head(__in))
 { }

      template<typename _Alloc>

 _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a,
      _Tuple_impl&& __in)
 : _Base(__use_alloc<_Head, _Alloc, _Head>(__a),
  std::forward<_Head>(_M_head(__in)))
 { }

      template<typename _Alloc, typename _UHead>

 _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a,
      const _Tuple_impl<_Idx, _UHead>& __in)
 : _Base(__use_alloc<_Head, _Alloc, const _UHead&>(__a),
  _Tuple_impl<_Idx, _UHead>::_M_head(__in))
 { }

      template<typename _Alloc, typename _UHead>

 _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a,
      _Tuple_impl<_Idx, _UHead>&& __in)
 : _Base(__use_alloc<_Head, _Alloc, _UHead>(__a),
  std::forward<_UHead>(_Tuple_impl<_Idx, _UHead>::_M_head(__in)))
 { }
# 629 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/tuple" 3
      template<typename _UHead>

 void
 _M_assign(const _Tuple_impl<_Idx, _UHead>& __in)
 {
   _M_head(*this) = _Tuple_impl<_Idx, _UHead>::_M_head(__in);
 }

      template<typename _UHead>

 void
 _M_assign(_Tuple_impl<_Idx, _UHead>&& __in)
 {
   _M_head(*this)
     = std::forward<_UHead>(_Tuple_impl<_Idx, _UHead>::_M_head(__in));
 }
# 663 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/tuple" 3
    protected:
     
      void
      _M_swap(_Tuple_impl& __in)
      {
 using std::swap;
 swap(_M_head(*this), _M_head(__in));
      }
# 680 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/tuple" 3
    };



  template<bool, typename... _Types>
    struct _TupleConstraints
    {
      template<typename... _UTypes>
 using __constructible = __and_<is_constructible<_Types, _UTypes>...>;

      template<typename... _UTypes>
 using __convertible = __and_<is_convertible<_UTypes, _Types>...>;




      template<typename... _UTypes>
 static constexpr bool __is_implicitly_constructible()
 {
   return __and_<__constructible<_UTypes...>,
   __convertible<_UTypes...>
   >::value;
 }




      template<typename... _UTypes>
 static constexpr bool __is_explicitly_constructible()
 {
   return __and_<__constructible<_UTypes...>,
   __not_<__convertible<_UTypes...>>
   >::value;
 }

      static constexpr bool __is_implicitly_default_constructible()
      {
 return __and_<std::__is_implicitly_default_constructible<_Types>...
        >::value;
      }

      static constexpr bool __is_explicitly_default_constructible()
      {
 return __and_<is_default_constructible<_Types>...,
        __not_<__and_<
   std::__is_implicitly_default_constructible<_Types>...>
        >>::value;
      }
    };



  template<typename... _Types>
    struct _TupleConstraints<false, _Types...>
    {
      template<typename... _UTypes>
 static constexpr bool __is_implicitly_constructible()
 { return false; }

      template<typename... _UTypes>
 static constexpr bool __is_explicitly_constructible()
 { return false; }
    };


  template<typename... _Elements>
    class tuple : public _Tuple_impl<0, _Elements...>
    {
      typedef _Tuple_impl<0, _Elements...> _Inherited;

      template<bool _Cond>
 using _TCC = _TupleConstraints<_Cond, _Elements...>;


      template<bool _Dummy>
 using _ImplicitDefaultCtor = __enable_if_t<
   _TCC<_Dummy>::__is_implicitly_default_constructible(),
   bool>;


      template<bool _Dummy>
 using _ExplicitDefaultCtor = __enable_if_t<
   _TCC<_Dummy>::__is_explicitly_default_constructible(),
   bool>;


      template<bool _Cond, typename... _Args>
 using _ImplicitCtor = __enable_if_t<
   _TCC<_Cond>::template __is_implicitly_constructible<_Args...>(),
   bool>;


      template<bool _Cond, typename... _Args>
 using _ExplicitCtor = __enable_if_t<
   _TCC<_Cond>::template __is_explicitly_constructible<_Args...>(),
   bool>;

      template<typename... _UElements>
 static constexpr
 __enable_if_t<sizeof...(_UElements) == sizeof...(_Elements), bool>
 __assignable()
 { return __and_<is_assignable<_Elements&, _UElements>...>::value; }


      template<typename... _UElements>
 static constexpr bool __nothrow_assignable()
 {
   return
     __and_<is_nothrow_assignable<_Elements&, _UElements>...>::value;
 }


      template<typename... _UElements>
 static constexpr bool __nothrow_constructible()
 {
   return
     __and_<is_nothrow_constructible<_Elements, _UElements>...>::value;
 }


      template<typename _Up>
 static constexpr bool __valid_args()
 {
   return sizeof...(_Elements) == 1
     && !is_same<tuple, __remove_cvref_t<_Up>>::value;
 }


      template<typename, typename, typename... _Tail>
 static constexpr bool __valid_args()
 { return (sizeof...(_Tail) + 2) == sizeof...(_Elements); }
# 821 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/tuple" 3
      template<typename _Tuple, typename = tuple,
        typename = __remove_cvref_t<_Tuple>>
 struct _UseOtherCtor
 : false_type
 { };


      template<typename _Tuple, typename _Tp, typename _Up>
 struct _UseOtherCtor<_Tuple, tuple<_Tp>, tuple<_Up>>
 : __or_<is_convertible<_Tuple, _Tp>, is_constructible<_Tp, _Tuple>>::type
 { };


      template<typename _Tuple, typename _Tp>
 struct _UseOtherCtor<_Tuple, tuple<_Tp>, tuple<_Tp>>
 : true_type
 { };




      template<typename _Tuple>
 static constexpr bool __use_other_ctor()
 { return _UseOtherCtor<_Tuple>::value; }
# 856 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/tuple" 3
    public:
      template<typename _Dummy = void,
        _ImplicitDefaultCtor<is_void<_Dummy>::value> = true>
 constexpr
 tuple()
 noexcept(__and_<is_nothrow_default_constructible<_Elements>...>::value)
 : _Inherited() { }

      template<typename _Dummy = void,
        _ExplicitDefaultCtor<is_void<_Dummy>::value> = false>
 explicit constexpr
 tuple()
 noexcept(__and_<is_nothrow_default_constructible<_Elements>...>::value)
 : _Inherited() { }

      template<bool _NotEmpty = (sizeof...(_Elements) >= 1),
        _ImplicitCtor<_NotEmpty, const _Elements&...> = true>
 constexpr
 tuple(const _Elements&... __elements)
 noexcept(__nothrow_constructible<const _Elements&...>())
 : _Inherited(__elements...) { }

      template<bool _NotEmpty = (sizeof...(_Elements) >= 1),
        _ExplicitCtor<_NotEmpty, const _Elements&...> = false>
 explicit constexpr
 tuple(const _Elements&... __elements)
 noexcept(__nothrow_constructible<const _Elements&...>())
 : _Inherited(__elements...) { }

      template<typename... _UElements,
        bool _Valid = __valid_args<_UElements...>(),
        _ImplicitCtor<_Valid, _UElements...> = true>
 constexpr
 tuple(_UElements&&... __elements)
 noexcept(__nothrow_constructible<_UElements...>())
 : _Inherited(std::forward<_UElements>(__elements)...) { }

      template<typename... _UElements,
        bool _Valid = __valid_args<_UElements...>(),
        _ExplicitCtor<_Valid, _UElements...> = false>
 explicit constexpr
 tuple(_UElements&&... __elements)
 noexcept(__nothrow_constructible<_UElements...>())
 : _Inherited(std::forward<_UElements>(__elements)...) { }

      constexpr tuple(const tuple&) = default;

      constexpr tuple(tuple&&) = default;

      template<typename... _UElements,
        bool _Valid = (sizeof...(_Elements) == sizeof...(_UElements))
      && !__use_other_ctor<const tuple<_UElements...>&>(),
        _ImplicitCtor<_Valid, const _UElements&...> = true>
 constexpr
 tuple(const tuple<_UElements...>& __in)
 noexcept(__nothrow_constructible<const _UElements&...>())
 : _Inherited(static_cast<const _Tuple_impl<0, _UElements...>&>(__in))
 { }

      template<typename... _UElements,
        bool _Valid = (sizeof...(_Elements) == sizeof...(_UElements))
      && !__use_other_ctor<const tuple<_UElements...>&>(),
        _ExplicitCtor<_Valid, const _UElements&...> = false>
 explicit constexpr
 tuple(const tuple<_UElements...>& __in)
 noexcept(__nothrow_constructible<const _UElements&...>())
 : _Inherited(static_cast<const _Tuple_impl<0, _UElements...>&>(__in))
 { }

      template<typename... _UElements,
        bool _Valid = (sizeof...(_Elements) == sizeof...(_UElements))
        && !__use_other_ctor<tuple<_UElements...>&&>(),
        _ImplicitCtor<_Valid, _UElements...> = true>
 constexpr
 tuple(tuple<_UElements...>&& __in)
 noexcept(__nothrow_constructible<_UElements...>())
 : _Inherited(static_cast<_Tuple_impl<0, _UElements...>&&>(__in)) { }

      template<typename... _UElements,
        bool _Valid = (sizeof...(_Elements) == sizeof...(_UElements))
        && !__use_other_ctor<tuple<_UElements...>&&>(),
        _ExplicitCtor<_Valid, _UElements...> = false>
 explicit constexpr
 tuple(tuple<_UElements...>&& __in)
 noexcept(__nothrow_constructible<_UElements...>())
 : _Inherited(static_cast<_Tuple_impl<0, _UElements...>&&>(__in)) { }
# 968 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/tuple" 3
      template<typename _Alloc,
        _ImplicitDefaultCtor<is_object<_Alloc>::value> = true>

 tuple(allocator_arg_t __tag, const _Alloc& __a)
 : _Inherited(__tag, __a) { }

      template<typename _Alloc, bool _NotEmpty = (sizeof...(_Elements) >= 1),
        _ImplicitCtor<_NotEmpty, const _Elements&...> = true>

 tuple(allocator_arg_t __tag, const _Alloc& __a,
       const _Elements&... __elements)
 : _Inherited(__tag, __a, __elements...) { }

      template<typename _Alloc, bool _NotEmpty = (sizeof...(_Elements) >= 1),
        _ExplicitCtor<_NotEmpty, const _Elements&...> = false>

 explicit
 tuple(allocator_arg_t __tag, const _Alloc& __a,
       const _Elements&... __elements)
 : _Inherited(__tag, __a, __elements...) { }

      template<typename _Alloc, typename... _UElements,
        bool _Valid = __valid_args<_UElements...>(),
        _ImplicitCtor<_Valid, _UElements...> = true>

 tuple(allocator_arg_t __tag, const _Alloc& __a,
       _UElements&&... __elements)
 : _Inherited(__tag, __a, std::forward<_UElements>(__elements)...)
 { }

      template<typename _Alloc, typename... _UElements,
   bool _Valid = __valid_args<_UElements...>(),
        _ExplicitCtor<_Valid, _UElements...> = false>

 explicit
 tuple(allocator_arg_t __tag, const _Alloc& __a,
       _UElements&&... __elements)
 : _Inherited(__tag, __a, std::forward<_UElements>(__elements)...)
 { }

      template<typename _Alloc>

 tuple(allocator_arg_t __tag, const _Alloc& __a, const tuple& __in)
 : _Inherited(__tag, __a, static_cast<const _Inherited&>(__in)) { }

      template<typename _Alloc>

 tuple(allocator_arg_t __tag, const _Alloc& __a, tuple&& __in)
 : _Inherited(__tag, __a, static_cast<_Inherited&&>(__in)) { }

      template<typename _Alloc, typename... _UElements,
        bool _Valid = (sizeof...(_Elements) == sizeof...(_UElements))
        && !__use_other_ctor<const tuple<_UElements...>&>(),
        _ImplicitCtor<_Valid, const _UElements&...> = true>

 tuple(allocator_arg_t __tag, const _Alloc& __a,
       const tuple<_UElements...>& __in)
 : _Inherited(__tag, __a,
              static_cast<const _Tuple_impl<0, _UElements...>&>(__in))
 { }

      template<typename _Alloc, typename... _UElements,
        bool _Valid = (sizeof...(_Elements) == sizeof...(_UElements))
        && !__use_other_ctor<const tuple<_UElements...>&>(),
        _ExplicitCtor<_Valid, const _UElements&...> = false>

 explicit
 tuple(allocator_arg_t __tag, const _Alloc& __a,
       const tuple<_UElements...>& __in)
 : _Inherited(__tag, __a,
              static_cast<const _Tuple_impl<0, _UElements...>&>(__in))
 { }

      template<typename _Alloc, typename... _UElements,
        bool _Valid = (sizeof...(_Elements) == sizeof...(_UElements))
        && !__use_other_ctor<tuple<_UElements...>&&>(),
        _ImplicitCtor<_Valid, _UElements...> = true>

 tuple(allocator_arg_t __tag, const _Alloc& __a,
       tuple<_UElements...>&& __in)
 : _Inherited(__tag, __a,
              static_cast<_Tuple_impl<0, _UElements...>&&>(__in))
 { }

      template<typename _Alloc, typename... _UElements,
        bool _Valid = (sizeof...(_Elements) == sizeof...(_UElements))
        && !__use_other_ctor<tuple<_UElements...>&&>(),
        _ExplicitCtor<_Valid, _UElements...> = false>

 explicit
 tuple(allocator_arg_t __tag, const _Alloc& __a,
       tuple<_UElements...>&& __in)
 : _Inherited(__tag, __a,
              static_cast<_Tuple_impl<0, _UElements...>&&>(__in))
 { }
# 1092 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/tuple" 3
     
      tuple&
      operator=(__conditional_t<__assignable<const _Elements&...>(),
    const tuple&,
    const __nonesuch&> __in)
      noexcept(__nothrow_assignable<const _Elements&...>())
      {
 this->_M_assign(__in);
 return *this;
      }

     
      tuple&
      operator=(__conditional_t<__assignable<_Elements...>(),
    tuple&&,
    __nonesuch&&> __in)
      noexcept(__nothrow_assignable<_Elements...>())
      {
 this->_M_assign(std::move(__in));
 return *this;
      }

      template<typename... _UElements>

 __enable_if_t<__assignable<const _UElements&...>(), tuple&>
 operator=(const tuple<_UElements...>& __in)
 noexcept(__nothrow_assignable<const _UElements&...>())
 {
   this->_M_assign(__in);
   return *this;
 }

      template<typename... _UElements>

 __enable_if_t<__assignable<_UElements...>(), tuple&>
 operator=(tuple<_UElements...>&& __in)
 noexcept(__nothrow_assignable<_UElements...>())
 {
   this->_M_assign(std::move(__in));
   return *this;
 }
# 1173 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/tuple" 3
     
      void
      swap(tuple& __in)
      noexcept(__and_<__is_nothrow_swappable<_Elements>...>::value)
      { _Inherited::_M_swap(__in); }
# 1192 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/tuple" 3
    };
# 1208 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/tuple" 3
  template<>
    class tuple<>
    {
    public:
     
      void swap(tuple&) noexcept { }





      tuple() = default;

      template<typename _Alloc>

 tuple(allocator_arg_t, const _Alloc&) noexcept { }
      template<typename _Alloc>

 tuple(allocator_arg_t, const _Alloc&, const tuple&) noexcept { }
    };



  template<typename _T1, typename _T2>
    class tuple<_T1, _T2> : public _Tuple_impl<0, _T1, _T2>
    {
      typedef _Tuple_impl<0, _T1, _T2> _Inherited;


      template<bool _Dummy, typename _U1, typename _U2>
 using _ImplicitDefaultCtor = __enable_if_t<
   _TupleConstraints<_Dummy, _U1, _U2>::
     __is_implicitly_default_constructible(),
   bool>;


      template<bool _Dummy, typename _U1, typename _U2>
 using _ExplicitDefaultCtor = __enable_if_t<
   _TupleConstraints<_Dummy, _U1, _U2>::
     __is_explicitly_default_constructible(),
   bool>;

      template<bool _Dummy>
 using _TCC = _TupleConstraints<_Dummy, _T1, _T2>;


      template<bool _Cond, typename _U1, typename _U2>
 using _ImplicitCtor = __enable_if_t<
   _TCC<_Cond>::template __is_implicitly_constructible<_U1, _U2>(),
   bool>;


      template<bool _Cond, typename _U1, typename _U2>
 using _ExplicitCtor = __enable_if_t<
   _TCC<_Cond>::template __is_explicitly_constructible<_U1, _U2>(),
   bool>;

      template<typename _U1, typename _U2>
 static constexpr bool __assignable()
 {
   return __and_<is_assignable<_T1&, _U1>,
   is_assignable<_T2&, _U2>>::value;
 }

      template<typename _U1, typename _U2>
 static constexpr bool __nothrow_assignable()
 {
   return __and_<is_nothrow_assignable<_T1&, _U1>,
   is_nothrow_assignable<_T2&, _U2>>::value;
 }

      template<typename _U1, typename _U2>
 static constexpr bool __nothrow_constructible()
 {
   return __and_<is_nothrow_constructible<_T1, _U1>,
       is_nothrow_constructible<_T2, _U2>>::value;
 }

      static constexpr bool __nothrow_default_constructible()
      {
 return __and_<is_nothrow_default_constructible<_T1>,
        is_nothrow_default_constructible<_T2>>::value;
      }

      template<typename _U1>
 static constexpr bool __is_alloc_arg()
 { return is_same<__remove_cvref_t<_U1>, allocator_arg_t>::value; }
# 1306 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/tuple" 3
    public:
      template<bool _Dummy = true,
        _ImplicitDefaultCtor<_Dummy, _T1, _T2> = true>
 constexpr
 tuple()
 noexcept(__nothrow_default_constructible())
 : _Inherited() { }

      template<bool _Dummy = true,
        _ExplicitDefaultCtor<_Dummy, _T1, _T2> = false>
 explicit constexpr
 tuple()
 noexcept(__nothrow_default_constructible())
 : _Inherited() { }

      template<bool _Dummy = true,
        _ImplicitCtor<_Dummy, const _T1&, const _T2&> = true>
 constexpr
 tuple(const _T1& __a1, const _T2& __a2)
 noexcept(__nothrow_constructible<const _T1&, const _T2&>())
 : _Inherited(__a1, __a2) { }

      template<bool _Dummy = true,
        _ExplicitCtor<_Dummy, const _T1&, const _T2&> = false>
 explicit constexpr
 tuple(const _T1& __a1, const _T2& __a2)
 noexcept(__nothrow_constructible<const _T1&, const _T2&>())
 : _Inherited(__a1, __a2) { }

      template<typename _U1, typename _U2,
        _ImplicitCtor<!__is_alloc_arg<_U1>(), _U1, _U2> = true>
 constexpr
 tuple(_U1&& __a1, _U2&& __a2)
 noexcept(__nothrow_constructible<_U1, _U2>())
 : _Inherited(std::forward<_U1>(__a1), std::forward<_U2>(__a2)) { }

      template<typename _U1, typename _U2,
        _ExplicitCtor<!__is_alloc_arg<_U1>(), _U1, _U2> = false>
 explicit constexpr
 tuple(_U1&& __a1, _U2&& __a2)
 noexcept(__nothrow_constructible<_U1, _U2>())
 : _Inherited(std::forward<_U1>(__a1), std::forward<_U2>(__a2)) { }

      constexpr tuple(const tuple&) = default;

      constexpr tuple(tuple&&) = default;

      template<typename _U1, typename _U2,
        _ImplicitCtor<true, const _U1&, const _U2&> = true>
 constexpr
 tuple(const tuple<_U1, _U2>& __in)
 noexcept(__nothrow_constructible<const _U1&, const _U2&>())
 : _Inherited(static_cast<const _Tuple_impl<0, _U1, _U2>&>(__in)) { }

      template<typename _U1, typename _U2,
        _ExplicitCtor<true, const _U1&, const _U2&> = false>
 explicit constexpr
 tuple(const tuple<_U1, _U2>& __in)
 noexcept(__nothrow_constructible<const _U1&, const _U2&>())
 : _Inherited(static_cast<const _Tuple_impl<0, _U1, _U2>&>(__in)) { }

      template<typename _U1, typename _U2,
        _ImplicitCtor<true, _U1, _U2> = true>
 constexpr
 tuple(tuple<_U1, _U2>&& __in)
 noexcept(__nothrow_constructible<_U1, _U2>())
 : _Inherited(static_cast<_Tuple_impl<0, _U1, _U2>&&>(__in)) { }

      template<typename _U1, typename _U2,
        _ExplicitCtor<true, _U1, _U2> = false>
 explicit constexpr
 tuple(tuple<_U1, _U2>&& __in)
 noexcept(__nothrow_constructible<_U1, _U2>())
 : _Inherited(static_cast<_Tuple_impl<0, _U1, _U2>&&>(__in)) { }
# 1399 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/tuple" 3
      template<typename _U1, typename _U2,
        _ImplicitCtor<true, const _U1&, const _U2&> = true>
 constexpr
 tuple(const pair<_U1, _U2>& __in)
 noexcept(__nothrow_constructible<const _U1&, const _U2&>())
 : _Inherited(__in.first, __in.second) { }

      template<typename _U1, typename _U2,
        _ExplicitCtor<true, const _U1&, const _U2&> = false>
 explicit constexpr
 tuple(const pair<_U1, _U2>& __in)
 noexcept(__nothrow_constructible<const _U1&, const _U2&>())
 : _Inherited(__in.first, __in.second) { }

      template<typename _U1, typename _U2,
        _ImplicitCtor<true, _U1, _U2> = true>
 constexpr
 tuple(pair<_U1, _U2>&& __in)
 noexcept(__nothrow_constructible<_U1, _U2>())
 : _Inherited(std::forward<_U1>(__in.first),
       std::forward<_U2>(__in.second)) { }

      template<typename _U1, typename _U2,
        _ExplicitCtor<true, _U1, _U2> = false>
 explicit constexpr
 tuple(pair<_U1, _U2>&& __in)
 noexcept(__nothrow_constructible<_U1, _U2>())
 : _Inherited(std::forward<_U1>(__in.first),
       std::forward<_U2>(__in.second)) { }
# 1450 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/tuple" 3
      template<typename _Alloc,
        _ImplicitDefaultCtor<is_object<_Alloc>::value, _T1, _T2> = true>

 tuple(allocator_arg_t __tag, const _Alloc& __a)
 : _Inherited(__tag, __a) { }

      template<typename _Alloc, bool _Dummy = true,
        _ImplicitCtor<_Dummy, const _T1&, const _T2&> = true>

 tuple(allocator_arg_t __tag, const _Alloc& __a,
       const _T1& __a1, const _T2& __a2)
 : _Inherited(__tag, __a, __a1, __a2) { }

      template<typename _Alloc, bool _Dummy = true,
        _ExplicitCtor<_Dummy, const _T1&, const _T2&> = false>
 explicit

 tuple(allocator_arg_t __tag, const _Alloc& __a,
       const _T1& __a1, const _T2& __a2)
 : _Inherited(__tag, __a, __a1, __a2) { }

      template<typename _Alloc, typename _U1, typename _U2,
        _ImplicitCtor<true, _U1, _U2> = true>

 tuple(allocator_arg_t __tag, const _Alloc& __a, _U1&& __a1, _U2&& __a2)
 : _Inherited(__tag, __a, std::forward<_U1>(__a1),
              std::forward<_U2>(__a2)) { }

      template<typename _Alloc, typename _U1, typename _U2,
        _ExplicitCtor<true, _U1, _U2> = false>
 explicit

 tuple(allocator_arg_t __tag, const _Alloc& __a,
       _U1&& __a1, _U2&& __a2)
 : _Inherited(__tag, __a, std::forward<_U1>(__a1),
              std::forward<_U2>(__a2)) { }

      template<typename _Alloc>

 tuple(allocator_arg_t __tag, const _Alloc& __a, const tuple& __in)
 : _Inherited(__tag, __a, static_cast<const _Inherited&>(__in)) { }

      template<typename _Alloc>

 tuple(allocator_arg_t __tag, const _Alloc& __a, tuple&& __in)
 : _Inherited(__tag, __a, static_cast<_Inherited&&>(__in)) { }

      template<typename _Alloc, typename _U1, typename _U2,
        _ImplicitCtor<true, const _U1&, const _U2&> = true>

 tuple(allocator_arg_t __tag, const _Alloc& __a,
       const tuple<_U1, _U2>& __in)
 : _Inherited(__tag, __a,
              static_cast<const _Tuple_impl<0, _U1, _U2>&>(__in))
 { }

      template<typename _Alloc, typename _U1, typename _U2,
        _ExplicitCtor<true, const _U1&, const _U2&> = false>
 explicit

 tuple(allocator_arg_t __tag, const _Alloc& __a,
       const tuple<_U1, _U2>& __in)
 : _Inherited(__tag, __a,
              static_cast<const _Tuple_impl<0, _U1, _U2>&>(__in))
 { }

      template<typename _Alloc, typename _U1, typename _U2,
        _ImplicitCtor<true, _U1, _U2> = true>

 tuple(allocator_arg_t __tag, const _Alloc& __a, tuple<_U1, _U2>&& __in)
 : _Inherited(__tag, __a, static_cast<_Tuple_impl<0, _U1, _U2>&&>(__in))
 { }

      template<typename _Alloc, typename _U1, typename _U2,
        _ExplicitCtor<true, _U1, _U2> = false>
 explicit

 tuple(allocator_arg_t __tag, const _Alloc& __a, tuple<_U1, _U2>&& __in)
 : _Inherited(__tag, __a, static_cast<_Tuple_impl<0, _U1, _U2>&&>(__in))
 { }
# 1553 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/tuple" 3
      template<typename _Alloc, typename _U1, typename _U2,
        _ImplicitCtor<true, const _U1&, const _U2&> = true>

 tuple(allocator_arg_t __tag, const _Alloc& __a,
       const pair<_U1, _U2>& __in)
 : _Inherited(__tag, __a, __in.first, __in.second) { }

      template<typename _Alloc, typename _U1, typename _U2,
        _ExplicitCtor<true, const _U1&, const _U2&> = false>
 explicit

 tuple(allocator_arg_t __tag, const _Alloc& __a,
       const pair<_U1, _U2>& __in)
 : _Inherited(__tag, __a, __in.first, __in.second) { }

      template<typename _Alloc, typename _U1, typename _U2,
        _ImplicitCtor<true, _U1, _U2> = true>

 tuple(allocator_arg_t __tag, const _Alloc& __a, pair<_U1, _U2>&& __in)
 : _Inherited(__tag, __a, std::forward<_U1>(__in.first),
       std::forward<_U2>(__in.second)) { }

      template<typename _Alloc, typename _U1, typename _U2,
        _ExplicitCtor<true, _U1, _U2> = false>
 explicit

 tuple(allocator_arg_t __tag, const _Alloc& __a, pair<_U1, _U2>&& __in)
 : _Inherited(__tag, __a, std::forward<_U1>(__in.first),
       std::forward<_U2>(__in.second)) { }
# 1603 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/tuple" 3
     
      tuple&
      operator=(__conditional_t<__assignable<const _T1&, const _T2&>(),
    const tuple&,
    const __nonesuch&> __in)
      noexcept(__nothrow_assignable<const _T1&, const _T2&>())
      {
 this->_M_assign(__in);
 return *this;
      }

     
      tuple&
      operator=(__conditional_t<__assignable<_T1, _T2>(),
    tuple&&,
    __nonesuch&&> __in)
      noexcept(__nothrow_assignable<_T1, _T2>())
      {
 this->_M_assign(std::move(__in));
 return *this;
      }

      template<typename _U1, typename _U2>

 __enable_if_t<__assignable<const _U1&, const _U2&>(), tuple&>
 operator=(const tuple<_U1, _U2>& __in)
 noexcept(__nothrow_assignable<const _U1&, const _U2&>())
 {
   this->_M_assign(__in);
   return *this;
 }

      template<typename _U1, typename _U2>

 __enable_if_t<__assignable<_U1, _U2>(), tuple&>
 operator=(tuple<_U1, _U2>&& __in)
 noexcept(__nothrow_assignable<_U1, _U2>())
 {
   this->_M_assign(std::move(__in));
   return *this;
 }
# 1683 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/tuple" 3
      template<typename _U1, typename _U2>

 __enable_if_t<__assignable<const _U1&, const _U2&>(), tuple&>
 operator=(const pair<_U1, _U2>& __in)
 noexcept(__nothrow_assignable<const _U1&, const _U2&>())
 {
   this->_M_head(*this) = __in.first;
   this->_M_tail(*this)._M_head(*this) = __in.second;
   return *this;
 }

      template<typename _U1, typename _U2>

 __enable_if_t<__assignable<_U1, _U2>(), tuple&>
 operator=(pair<_U1, _U2>&& __in)
 noexcept(__nothrow_assignable<_U1, _U2>())
 {
   this->_M_head(*this) = std::forward<_U1>(__in.first);
   this->_M_tail(*this)._M_head(*this) = std::forward<_U2>(__in.second);
   return *this;
 }
# 1729 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/tuple" 3
     
      void
      swap(tuple& __in)
      noexcept(__and_<__is_nothrow_swappable<_T1>,
        __is_nothrow_swappable<_T2>>::value)
      { _Inherited::_M_swap(__in); }
# 1744 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/tuple" 3
    };



  template<typename... _Elements>
    struct tuple_size<tuple<_Elements...>>
    : public integral_constant<size_t, sizeof...(_Elements)> { };
# 1763 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/tuple" 3
  template<size_t __i, typename... _Types>
    struct tuple_element<__i, tuple<_Types...>>
    {
      static_assert(__i < sizeof...(_Types), "tuple index must be in range");

      using type = typename _Nth_type<__i, _Types...>::type;
    };

  template<size_t __i, typename _Head, typename... _Tail>
    constexpr _Head&
    __get_helper(_Tuple_impl<__i, _Head, _Tail...>& __t) noexcept
    { return _Tuple_impl<__i, _Head, _Tail...>::_M_head(__t); }

  template<size_t __i, typename _Head, typename... _Tail>
    constexpr const _Head&
    __get_helper(const _Tuple_impl<__i, _Head, _Tail...>& __t) noexcept
    { return _Tuple_impl<__i, _Head, _Tail...>::_M_head(__t); }


  template<size_t __i, typename... _Types>
    __enable_if_t<(__i >= sizeof...(_Types))>
    __get_helper(const tuple<_Types...>&) = delete;


  template<size_t __i, typename... _Elements>
    constexpr __tuple_element_t<__i, tuple<_Elements...>>&
    get(tuple<_Elements...>& __t) noexcept
    { return std::__get_helper<__i>(__t); }


  template<size_t __i, typename... _Elements>
    constexpr const __tuple_element_t<__i, tuple<_Elements...>>&
    get(const tuple<_Elements...>& __t) noexcept
    { return std::__get_helper<__i>(__t); }


  template<size_t __i, typename... _Elements>
    constexpr __tuple_element_t<__i, tuple<_Elements...>>&&
    get(tuple<_Elements...>&& __t) noexcept
    {
      typedef __tuple_element_t<__i, tuple<_Elements...>> __element_type;
      return std::forward<__element_type>(std::__get_helper<__i>(__t));
    }


  template<size_t __i, typename... _Elements>
    constexpr const __tuple_element_t<__i, tuple<_Elements...>>&&
    get(const tuple<_Elements...>&& __t) noexcept
    {
      typedef __tuple_element_t<__i, tuple<_Elements...>> __element_type;
      return std::forward<const __element_type>(std::__get_helper<__i>(__t));
    }



  template<size_t __i, typename... _Elements>
    constexpr __enable_if_t<(__i >= sizeof...(_Elements))>
    get(const tuple<_Elements...>&) = delete;
# 1874 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/tuple" 3
  template<typename _Tp, typename _Up, size_t __i, size_t __size>
    struct __tuple_compare
    {
      static constexpr bool
      __eq(const _Tp& __t, const _Up& __u)
      {
 return bool(std::get<__i>(__t) == std::get<__i>(__u))
   && __tuple_compare<_Tp, _Up, __i + 1, __size>::__eq(__t, __u);
      }

      static constexpr bool
      __less(const _Tp& __t, const _Up& __u)
      {
 return bool(std::get<__i>(__t) < std::get<__i>(__u))
   || (!bool(std::get<__i>(__u) < std::get<__i>(__t))
       && __tuple_compare<_Tp, _Up, __i + 1, __size>::__less(__t, __u));
      }
    };

  template<typename _Tp, typename _Up, size_t __size>
    struct __tuple_compare<_Tp, _Up, __size, __size>
    {
      static constexpr bool
      __eq(const _Tp&, const _Up&) { return true; }

      static constexpr bool
      __less(const _Tp&, const _Up&) { return false; }
    };

  template<typename... _TElements, typename... _UElements>
    constexpr bool
    operator==(const tuple<_TElements...>& __t,
        const tuple<_UElements...>& __u)
    {
      static_assert(sizeof...(_TElements) == sizeof...(_UElements),
   "tuple objects can only be compared if they have equal sizes.");
      using __compare = __tuple_compare<tuple<_TElements...>,
     tuple<_UElements...>,
     0, sizeof...(_TElements)>;
      return __compare::__eq(__t, __u);
    }
# 1945 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/tuple" 3
  template<typename... _TElements, typename... _UElements>
    constexpr bool
    operator<(const tuple<_TElements...>& __t,
       const tuple<_UElements...>& __u)
    {
      static_assert(sizeof...(_TElements) == sizeof...(_UElements),
   "tuple objects can only be compared if they have equal sizes.");
      using __compare = __tuple_compare<tuple<_TElements...>,
     tuple<_UElements...>,
     0, sizeof...(_TElements)>;
      return __compare::__less(__t, __u);
    }

  template<typename... _TElements, typename... _UElements>
    constexpr bool
    operator!=(const tuple<_TElements...>& __t,
        const tuple<_UElements...>& __u)
    { return !(__t == __u); }

  template<typename... _TElements, typename... _UElements>
    constexpr bool
    operator>(const tuple<_TElements...>& __t,
       const tuple<_UElements...>& __u)
    { return __u < __t; }

  template<typename... _TElements, typename... _UElements>
    constexpr bool
    operator<=(const tuple<_TElements...>& __t,
        const tuple<_UElements...>& __u)
    { return !(__u < __t); }

  template<typename... _TElements, typename... _UElements>
    constexpr bool
    operator>=(const tuple<_TElements...>& __t,
        const tuple<_UElements...>& __u)
    { return !(__t < __u); }




  template<typename... _Elements>
    constexpr tuple<typename __decay_and_strip<_Elements>::__type...>
    make_tuple(_Elements&&... __args)
    {
      typedef tuple<typename __decay_and_strip<_Elements>::__type...>
 __result_type;
      return __result_type(std::forward<_Elements>(__args)...);
    }




  template<typename... _Elements>
    constexpr tuple<_Elements&&...>
    forward_as_tuple(_Elements&&... __args) noexcept
    { return tuple<_Elements&&...>(std::forward<_Elements>(__args)...); }




  template<typename _Tp, size_t _Nm> struct array;

  template<size_t _Int, typename _Tp, size_t _Nm>
    constexpr _Tp&
    get(array<_Tp, _Nm>&) noexcept;

  template<size_t _Int, typename _Tp, size_t _Nm>
    constexpr _Tp&&
    get(array<_Tp, _Nm>&&) noexcept;

  template<size_t _Int, typename _Tp, size_t _Nm>
    constexpr const _Tp&
    get(const array<_Tp, _Nm>&) noexcept;

  template<size_t _Int, typename _Tp, size_t _Nm>
    constexpr const _Tp&&
    get(const array<_Tp, _Nm>&&) noexcept;


  template<size_t, typename, typename, size_t>
    struct __make_tuple_impl;

  template<size_t _Idx, typename _Tuple, typename... _Tp, size_t _Nm>
    struct __make_tuple_impl<_Idx, tuple<_Tp...>, _Tuple, _Nm>
    : __make_tuple_impl<_Idx + 1,
   tuple<_Tp..., __tuple_element_t<_Idx, _Tuple>>,
   _Tuple, _Nm>
    { };

  template<size_t _Nm, typename _Tuple, typename... _Tp>
    struct __make_tuple_impl<_Nm, tuple<_Tp...>, _Tuple, _Nm>
    {
      typedef tuple<_Tp...> __type;
    };

  template<typename _Tuple>
    struct __do_make_tuple
    : __make_tuple_impl<0, tuple<>, _Tuple, tuple_size<_Tuple>::value>
    { };


  template<typename _Tuple>
    struct __make_tuple
    : public __do_make_tuple<__remove_cvref_t<_Tuple>>
    { };


  template<typename...>
    struct __combine_tuples;

  template<>
    struct __combine_tuples<>
    {
      typedef tuple<> __type;
    };

  template<typename... _Ts>
    struct __combine_tuples<tuple<_Ts...>>
    {
      typedef tuple<_Ts...> __type;
    };

  template<typename... _T1s, typename... _T2s, typename... _Rem>
    struct __combine_tuples<tuple<_T1s...>, tuple<_T2s...>, _Rem...>
    {
      typedef typename __combine_tuples<tuple<_T1s..., _T2s...>,
     _Rem...>::__type __type;
    };


  template<typename... _Tpls>
    struct __tuple_cat_result
    {
      typedef typename __combine_tuples
        <typename __make_tuple<_Tpls>::__type...>::__type __type;
    };



  template<typename...>
    struct __make_1st_indices;

  template<>
    struct __make_1st_indices<>
    {
      typedef _Index_tuple<> __type;
    };

  template<typename _Tp, typename... _Tpls>
    struct __make_1st_indices<_Tp, _Tpls...>
    {
      typedef typename _Build_index_tuple<tuple_size<
 typename remove_reference<_Tp>::type>::value>::__type __type;
    };




  template<typename _Ret, typename _Indices, typename... _Tpls>
    struct __tuple_concater;

  template<typename _Ret, size_t... _Is, typename _Tp, typename... _Tpls>
    struct __tuple_concater<_Ret, _Index_tuple<_Is...>, _Tp, _Tpls...>
    {
      template<typename... _Us>
        static constexpr _Ret
        _S_do(_Tp&& __tp, _Tpls&&... __tps, _Us&&... __us)
        {
   typedef typename __make_1st_indices<_Tpls...>::__type __idx;
   typedef __tuple_concater<_Ret, __idx, _Tpls...> __next;
   return __next::_S_do(std::forward<_Tpls>(__tps)...,
          std::forward<_Us>(__us)...,
          std::get<_Is>(std::forward<_Tp>(__tp))...);
 }
    };

  template<typename _Ret>
    struct __tuple_concater<_Ret, _Index_tuple<>>
    {
      template<typename... _Us>
 static constexpr _Ret
 _S_do(_Us&&... __us)
        {
   return _Ret(std::forward<_Us>(__us)...);
 }
    };

  template<typename... _Tps>
    struct __is_tuple_like_impl<tuple<_Tps...>> : true_type
    { };



  template<typename... _Tpls, typename = typename
           enable_if<__and_<__is_tuple_like<_Tpls>...>::value>::type>
    constexpr auto
    tuple_cat(_Tpls&&... __tpls)
    -> typename __tuple_cat_result<_Tpls...>::__type
    {
      typedef typename __tuple_cat_result<_Tpls...>::__type __ret;
      typedef typename __make_1st_indices<_Tpls...>::__type __idx;
      typedef __tuple_concater<__ret, __idx, _Tpls...> __concater;
      return __concater::_S_do(std::forward<_Tpls>(__tpls)...);
    }




  template<typename... _Elements>
    constexpr tuple<_Elements&...>
    tie(_Elements&... __args) noexcept
    { return tuple<_Elements&...>(__args...); }


  template<typename... _Elements>
   
    inline





    void

    swap(tuple<_Elements...>& __x, tuple<_Elements...>& __y)
    noexcept(noexcept(__x.swap(__y)))
    { __x.swap(__y); }
# 2194 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/tuple" 3
  struct _Swallow_assign
  {
    template<class _Tp>
      const _Swallow_assign&
      operator=(const _Tp&) const
      { return *this; }
  };
# 2219 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/tuple" 3
  constexpr _Swallow_assign ignore{};


  template<typename... _Types, typename _Alloc>
    struct uses_allocator<tuple<_Types...>, _Alloc> : true_type { };
# 2234 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/tuple" 3
  template<class _T1, class _T2>
    template<typename... _Args1, typename... _Args2>
     
      inline
      pair<_T1, _T2>::
      pair(piecewise_construct_t,
    tuple<_Args1...> __first, tuple<_Args2...> __second)
      : pair(__first, __second,
      typename _Build_index_tuple<sizeof...(_Args1)>::__type(),
      typename _Build_index_tuple<sizeof...(_Args2)>::__type())
      { }

  template<class _T1, class _T2>
    template<typename... _Args1, size_t... _Indexes1,
      typename... _Args2, size_t... _Indexes2>
      inline
      pair<_T1, _T2>::
      pair(tuple<_Args1...>& __tuple1, tuple<_Args2...>& __tuple2,
    _Index_tuple<_Indexes1...>, _Index_tuple<_Indexes2...>)
      : first(std::forward<_Args1>(std::get<_Indexes1>(__tuple1))...),
 second(std::forward<_Args2>(std::get<_Indexes2>(__tuple2))...)
      { }
# 2344 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/tuple" 3

}
# 54 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/functional" 2 3

# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/functional_hash.h" 1 3
# 31 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/functional_hash.h" 3
#define _FUNCTIONAL_HASH_H 1

       
# 34 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/functional_hash.h" 3


# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/hash_bytes.h" 1 3
# 31 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/hash_bytes.h" 3
#define _HASH_BYTES_H 1

       
# 34 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/hash_bytes.h" 3



namespace std
{







  size_t
  _Hash_bytes(const void* __ptr, size_t __len, size_t __seed);





  size_t
  _Fnv_hash_bytes(const void* __ptr, size_t __len, size_t __seed);


}
# 37 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/functional_hash.h" 2 3

namespace std __attribute__ ((__visibility__ ("default")))
{

# 50 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/functional_hash.h" 3
  template<typename _Result, typename _Arg>
    struct __hash_base
    {
      typedef _Result result_type ;
      typedef _Arg argument_type ;
    };


  template<typename _Tp>
    struct hash;

  template<typename _Tp, typename = void>
    struct __poison_hash
    {
      static constexpr bool __enable_hash_call = false;
    private:

      __poison_hash(__poison_hash&&);
      ~__poison_hash();
    };

  template<typename _Tp>
    struct __poison_hash<_Tp, __void_t<decltype(hash<_Tp>()(declval<_Tp>()))>>
    {
      static constexpr bool __enable_hash_call = true;
    };


  template<typename _Tp, bool = is_enum<_Tp>::value>
    struct __hash_enum
    {
    private:

      __hash_enum(__hash_enum&&);
      ~__hash_enum();
    };


  template<typename _Tp>
    struct __hash_enum<_Tp, true> : public __hash_base<size_t, _Tp>
    {
      size_t
      operator()(_Tp __val) const noexcept
      {
       using __type = typename underlying_type<_Tp>::type;
       return hash<__type>{}(static_cast<__type>(__val));
      }
    };



  template<typename _Tp>
    struct hash : __hash_enum<_Tp>
    { };


  template<typename _Tp>
    struct hash<_Tp*> : public __hash_base<size_t, _Tp*>
    {
      size_t
      operator()(_Tp* __p) const noexcept
      { return reinterpret_cast<size_t>(__p); }
    };


#define _Cxx_hashtable_define_trivial_hash(_Tp) template<> struct hash<_Tp> : public __hash_base<size_t, _Tp> { size_t operator()(_Tp __val) const noexcept { return static_cast<size_t>(__val); } };
# 125 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/functional_hash.h" 3
  template<> struct hash<bool> : public __hash_base<size_t, bool> { size_t operator()(bool __val) const noexcept { return static_cast<size_t>(__val); } };


  template<> struct hash<char> : public __hash_base<size_t, char> { size_t operator()(char __val) const noexcept { return static_cast<size_t>(__val); } };


  template<> struct hash<signed char> : public __hash_base<size_t, signed char> { size_t operator()(signed char __val) const noexcept { return static_cast<size_t>(__val); } };


  template<> struct hash<unsigned char> : public __hash_base<size_t, unsigned char> { size_t operator()(unsigned char __val) const noexcept { return static_cast<size_t>(__val); } };


  template<> struct hash<wchar_t> : public __hash_base<size_t, wchar_t> { size_t operator()(wchar_t __val) const noexcept { return static_cast<size_t>(__val); } };







  template<> struct hash<char16_t> : public __hash_base<size_t, char16_t> { size_t operator()(char16_t __val) const noexcept { return static_cast<size_t>(__val); } };


  template<> struct hash<char32_t> : public __hash_base<size_t, char32_t> { size_t operator()(char32_t __val) const noexcept { return static_cast<size_t>(__val); } };


  template<> struct hash<short> : public __hash_base<size_t, short> { size_t operator()(short __val) const noexcept { return static_cast<size_t>(__val); } };


  template<> struct hash<int> : public __hash_base<size_t, int> { size_t operator()(int __val) const noexcept { return static_cast<size_t>(__val); } };


  template<> struct hash<long> : public __hash_base<size_t, long> { size_t operator()(long __val) const noexcept { return static_cast<size_t>(__val); } };


  template<> struct hash<long long> : public __hash_base<size_t, long long> { size_t operator()(long long __val) const noexcept { return static_cast<size_t>(__val); } };


  template<> struct hash<unsigned short> : public __hash_base<size_t, unsigned short> { size_t operator()(unsigned short __val) const noexcept { return static_cast<size_t>(__val); } };


  template<> struct hash<unsigned int> : public __hash_base<size_t, unsigned int> { size_t operator()(unsigned int __val) const noexcept { return static_cast<size_t>(__val); } };


  template<> struct hash<unsigned long> : public __hash_base<size_t, unsigned long> { size_t operator()(unsigned long __val) const noexcept { return static_cast<size_t>(__val); } };


  template<> struct hash<unsigned long long> : public __hash_base<size_t, unsigned long long> { size_t operator()(unsigned long long __val) const noexcept { return static_cast<size_t>(__val); } };
# 199 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/functional_hash.h" 3
#undef _Cxx_hashtable_define_trivial_hash

  struct _Hash_impl
  {
    static size_t
    hash(const void* __ptr, size_t __clength,
  size_t __seed = static_cast<size_t>(0xc70f6907UL))
    { return _Hash_bytes(__ptr, __clength, __seed); }

    template<typename _Tp>
      static size_t
      hash(const _Tp& __val)
      { return hash(&__val, sizeof(__val)); }

    template<typename _Tp>
      static size_t
      __hash_combine(const _Tp& __val, size_t __hash)
      { return hash(&__val, sizeof(__val), __hash); }
  };


  struct _Fnv_hash_impl
  {
    static size_t
    hash(const void* __ptr, size_t __clength,
  size_t __seed = static_cast<size_t>(2166136261UL))
    { return _Fnv_hash_bytes(__ptr, __clength, __seed); }

    template<typename _Tp>
      static size_t
      hash(const _Tp& __val)
      { return hash(&__val, sizeof(__val)); }

    template<typename _Tp>
      static size_t
      __hash_combine(const _Tp& __val, size_t __hash)
      { return hash(&__val, sizeof(__val), __hash); }
  };


  template<>
    struct hash<float> : public __hash_base<size_t, float>
    {
      size_t
      operator()(float __val) const noexcept
      {

 return __val != 0.0f ? std::_Hash_impl::hash(__val) : 0;
      }
    };


  template<>
    struct hash<double> : public __hash_base<size_t, double>
    {
      size_t
      operator()(double __val) const noexcept
      {

 return __val != 0.0 ? std::_Hash_impl::hash(__val) : 0;
      }
    };


  template<>
    struct hash<long double>
    : public __hash_base<size_t, long double>
    {
      __attribute__ ((__pure__)) size_t
      operator()(long double __val) const noexcept;
    };
# 294 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/functional_hash.h" 3
  template<typename _Hash>
    struct __is_fast_hash : public std::true_type
    { };

  template<>
    struct __is_fast_hash<hash<long double>> : public std::false_type
    { };


}
# 56 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/functional" 2 3

# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/refwrap.h" 1 3
# 31 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/refwrap.h" 3
#define _GLIBCXX_REFWRAP_H 1

       
# 34 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/refwrap.h" 3







namespace std __attribute__ ((__visibility__ ("default")))
{

# 52 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/refwrap.h" 3
  template<typename _Res, typename... _ArgTypes>
    struct _Maybe_unary_or_binary_function { };


#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"


  template<typename _Res, typename _T1>
    struct _Maybe_unary_or_binary_function<_Res, _T1>
    : std::unary_function<_T1, _Res> { };


  template<typename _Res, typename _T1, typename _T2>
    struct _Maybe_unary_or_binary_function<_Res, _T1, _T2>
    : std::binary_function<_T1, _T2, _Res> { };

#pragma GCC diagnostic pop

  template<typename _Signature>
    struct _Mem_fn_traits;

  template<typename _Res, typename _Class, typename... _ArgTypes>
    struct _Mem_fn_traits_base
    {
      using __result_type = _Res;
      using __maybe_type
 = _Maybe_unary_or_binary_function<_Res, _Class*, _ArgTypes...>;
      using __arity = integral_constant<size_t, sizeof...(_ArgTypes)>;
    };

#define _GLIBCXX_MEM_FN_TRAITS2(_CV,_REF,_LVAL,_RVAL) template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) _CV _REF> : _Mem_fn_traits_base<_Res, _CV _Class, _ArgTypes...> { using __vararg = false_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) _CV _REF> : _Mem_fn_traits_base<_Res, _CV _Class, _ArgTypes...> { using __vararg = true_type; };
# 97 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/refwrap.h" 3
#define _GLIBCXX_MEM_FN_TRAITS(_REF,_LVAL,_RVAL) _GLIBCXX_MEM_FN_TRAITS2( , _REF, _LVAL, _RVAL) _GLIBCXX_MEM_FN_TRAITS2(const , _REF, _LVAL, _RVAL) _GLIBCXX_MEM_FN_TRAITS2(volatile , _REF, _LVAL, _RVAL) _GLIBCXX_MEM_FN_TRAITS2(const volatile, _REF, _LVAL, _RVAL)





template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) > : _Mem_fn_traits_base<_Res, _Class, _ArgTypes...> { using __vararg = false_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) > : _Mem_fn_traits_base<_Res, _Class, _ArgTypes...> { using __vararg = true_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) const > : _Mem_fn_traits_base<_Res, const _Class, _ArgTypes...> { using __vararg = false_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) const > : _Mem_fn_traits_base<_Res, const _Class, _ArgTypes...> { using __vararg = true_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) volatile > : _Mem_fn_traits_base<_Res, volatile _Class, _ArgTypes...> { using __vararg = false_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) volatile > : _Mem_fn_traits_base<_Res, volatile _Class, _ArgTypes...> { using __vararg = true_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) const volatile > : _Mem_fn_traits_base<_Res, const volatile _Class, _ArgTypes...> { using __vararg = false_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) const volatile > : _Mem_fn_traits_base<_Res, const volatile _Class, _ArgTypes...> { using __vararg = true_type; };
template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) &> : _Mem_fn_traits_base<_Res, _Class, _ArgTypes...> { using __vararg = false_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) &> : _Mem_fn_traits_base<_Res, _Class, _ArgTypes...> { using __vararg = true_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) const &> : _Mem_fn_traits_base<_Res, const _Class, _ArgTypes...> { using __vararg = false_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) const &> : _Mem_fn_traits_base<_Res, const _Class, _ArgTypes...> { using __vararg = true_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) volatile &> : _Mem_fn_traits_base<_Res, volatile _Class, _ArgTypes...> { using __vararg = false_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) volatile &> : _Mem_fn_traits_base<_Res, volatile _Class, _ArgTypes...> { using __vararg = true_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) const volatile &> : _Mem_fn_traits_base<_Res, const volatile _Class, _ArgTypes...> { using __vararg = false_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) const volatile &> : _Mem_fn_traits_base<_Res, const volatile _Class, _ArgTypes...> { using __vararg = true_type; };
template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) &&> : _Mem_fn_traits_base<_Res, _Class, _ArgTypes...> { using __vararg = false_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) &&> : _Mem_fn_traits_base<_Res, _Class, _ArgTypes...> { using __vararg = true_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) const &&> : _Mem_fn_traits_base<_Res, const _Class, _ArgTypes...> { using __vararg = false_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) const &&> : _Mem_fn_traits_base<_Res, const _Class, _ArgTypes...> { using __vararg = true_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) volatile &&> : _Mem_fn_traits_base<_Res, volatile _Class, _ArgTypes...> { using __vararg = false_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) volatile &&> : _Mem_fn_traits_base<_Res, volatile _Class, _ArgTypes...> { using __vararg = true_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) const volatile &&> : _Mem_fn_traits_base<_Res, const volatile _Class, _ArgTypes...> { using __vararg = false_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) const volatile &&> : _Mem_fn_traits_base<_Res, const volatile _Class, _ArgTypes...> { using __vararg = true_type; };







#undef _GLIBCXX_MEM_FN_TRAITS
#undef _GLIBCXX_MEM_FN_TRAITS2


  template<typename _Functor, typename = __void_t<>>
    struct _Maybe_get_result_type
    { };

  template<typename _Functor>
    struct _Maybe_get_result_type<_Functor,
      __void_t<typename _Functor::result_type>>
    { typedef typename _Functor::result_type result_type; };





  template<typename _Functor>
    struct _Weak_result_type_impl
    : _Maybe_get_result_type<_Functor>
    { };


  template<typename _Res, typename... _ArgTypes >
    struct _Weak_result_type_impl<_Res(_ArgTypes...) >
    { typedef _Res result_type; };


  template<typename _Res, typename... _ArgTypes >
    struct _Weak_result_type_impl<_Res(_ArgTypes......) >
    { typedef _Res result_type; };


  template<typename _Res, typename... _ArgTypes >
    struct _Weak_result_type_impl<_Res(*)(_ArgTypes...) >
    { typedef _Res result_type; };


  template<typename _Res, typename... _ArgTypes >
    struct
    _Weak_result_type_impl<_Res(*)(_ArgTypes......) >
    { typedef _Res result_type; };


  template<typename _Functor,
    bool = is_member_function_pointer<_Functor>::value>
    struct _Weak_result_type_memfun
    : _Weak_result_type_impl<_Functor>
    { };


  template<typename _MemFunPtr>
    struct _Weak_result_type_memfun<_MemFunPtr, true>
    {
      using result_type = typename _Mem_fn_traits<_MemFunPtr>::__result_type;
    };


  template<typename _Func, typename _Class>
    struct _Weak_result_type_memfun<_Func _Class::*, false>
    { };





  template<typename _Functor>
    struct _Weak_result_type
    : _Weak_result_type_memfun<typename remove_cv<_Functor>::type>
    { };



  template<typename _Tp, typename = __void_t<>>
    struct _Refwrap_base_arg1
    { };


  template<typename _Tp>
    struct _Refwrap_base_arg1<_Tp,
         __void_t<typename _Tp::argument_type>>
    {
      typedef typename _Tp::argument_type argument_type;
    };


  template<typename _Tp, typename = __void_t<>>
    struct _Refwrap_base_arg2
    { };


  template<typename _Tp>
    struct _Refwrap_base_arg2<_Tp,
         __void_t<typename _Tp::first_argument_type,
           typename _Tp::second_argument_type>>
    {
      typedef typename _Tp::first_argument_type first_argument_type;
      typedef typename _Tp::second_argument_type second_argument_type;
    };







  template<typename _Tp>
    struct _Reference_wrapper_base
    : _Weak_result_type<_Tp>, _Refwrap_base_arg1<_Tp>, _Refwrap_base_arg2<_Tp>
    { };


#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"


  template<typename _Res, typename _T1 >
    struct _Reference_wrapper_base<_Res(_T1) >
    : unary_function<_T1, _Res>
    { };

  template<typename _Res, typename _T1>
    struct _Reference_wrapper_base<_Res(_T1) const>
    : unary_function<_T1, _Res>
    { };

  template<typename _Res, typename _T1>
    struct _Reference_wrapper_base<_Res(_T1) volatile>
    : unary_function<_T1, _Res>
    { };

  template<typename _Res, typename _T1>
    struct _Reference_wrapper_base<_Res(_T1) const volatile>
    : unary_function<_T1, _Res>
    { };


  template<typename _Res, typename _T1, typename _T2 >
    struct _Reference_wrapper_base<_Res(_T1, _T2) >
    : binary_function<_T1, _T2, _Res>
    { };

  template<typename _Res, typename _T1, typename _T2>
    struct _Reference_wrapper_base<_Res(_T1, _T2) const>
    : binary_function<_T1, _T2, _Res>
    { };

  template<typename _Res, typename _T1, typename _T2>
    struct _Reference_wrapper_base<_Res(_T1, _T2) volatile>
    : binary_function<_T1, _T2, _Res>
    { };

  template<typename _Res, typename _T1, typename _T2>
    struct _Reference_wrapper_base<_Res(_T1, _T2) const volatile>
    : binary_function<_T1, _T2, _Res>
    { };


  template<typename _Res, typename _T1 >
    struct _Reference_wrapper_base<_Res(*)(_T1) >
    : unary_function<_T1, _Res>
    { };


  template<typename _Res, typename _T1, typename _T2 >
    struct _Reference_wrapper_base<_Res(*)(_T1, _T2) >
    : binary_function<_T1, _T2, _Res>
    { };

  template<typename _Tp, bool = is_member_function_pointer<_Tp>::value>
    struct _Reference_wrapper_base_memfun
    : _Reference_wrapper_base<_Tp>
    { };

  template<typename _MemFunPtr>
    struct _Reference_wrapper_base_memfun<_MemFunPtr, true>
    : _Mem_fn_traits<_MemFunPtr>::__maybe_type
    {
      using result_type = typename _Mem_fn_traits<_MemFunPtr>::__result_type;
    };
#pragma GCC diagnostic pop
# 302 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/refwrap.h" 3
  template<typename _Tp>
    class reference_wrapper



    : public _Reference_wrapper_base_memfun<typename remove_cv<_Tp>::type>

    {
      _Tp* _M_data;

     
      static _Tp* _S_fun(_Tp& __r) noexcept { return std::__addressof(__r); }

      static void _S_fun(_Tp&&) = delete;

      template<typename _Up, typename _Up2 = __remove_cvref_t<_Up>>
 using __not_same
   = typename enable_if<!is_same<reference_wrapper, _Up2>::value>::type;

    public:
      typedef _Tp type;




      template<typename _Up, typename = __not_same<_Up>, typename
  = decltype(reference_wrapper::_S_fun(std::declval<_Up>()))>

 reference_wrapper(_Up&& __uref)
 noexcept(noexcept(reference_wrapper::_S_fun(std::declval<_Up>())))
 : _M_data(reference_wrapper::_S_fun(std::forward<_Up>(__uref)))
 { }

      reference_wrapper(const reference_wrapper&) = default;

      reference_wrapper&
      operator=(const reference_wrapper&) = default;

     
      operator _Tp&() const noexcept
      { return this->get(); }

     
      _Tp&
      get() const noexcept
      { return *_M_data; }

      template<typename... _Args>

 typename __invoke_result<_Tp&, _Args...>::type
 operator()(_Args&&... __args) const
 noexcept(__is_nothrow_invocable<_Tp&, _Args...>::value)
 {




   return std::__invoke(get(), std::forward<_Args>(__args)...);
 }
    };
# 371 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/refwrap.h" 3
  template<typename _Tp>
   
    inline reference_wrapper<_Tp>
    ref(_Tp& __t) noexcept
    { return reference_wrapper<_Tp>(__t); }


  template<typename _Tp>
   
    inline reference_wrapper<const _Tp>
    cref(const _Tp& __t) noexcept
    { return reference_wrapper<const _Tp>(__t); }

  template<typename _Tp>
    void ref(const _Tp&&) = delete;

  template<typename _Tp>
    void cref(const _Tp&&) = delete;


  template<typename _Tp>
   
    inline reference_wrapper<_Tp>
    ref(reference_wrapper<_Tp> __t) noexcept
    { return __t; }


  template<typename _Tp>
   
    inline reference_wrapper<const _Tp>
    cref(reference_wrapper<_Tp> __t) noexcept
    { return { __t.get() }; }




}
# 58 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/functional" 2 3

# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/std_function.h" 1 3
# 31 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/std_function.h" 3
#define _GLIBCXX_STD_FUNCTION_H 1

       
# 34 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/std_function.h" 3





# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/new" 1 3
# 36 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/new" 3
#define _NEW 

       
# 39 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/new" 3


# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/exception.h" 1 3
# 32 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/exception.h" 3
#define __EXCEPTION_H 1

       
# 35 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/exception.h" 3



extern "C++" {

namespace std __attribute__ ((__visibility__ ("default")))
{
# 59 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/exception.h" 3
  class exception
  {
  public:
    exception() noexcept { }
    virtual ~exception() noexcept;

    exception(const exception&) = default;
    exception& operator=(const exception&) = default;
    exception(exception&&) = default;
    exception& operator=(exception&&) = default;




    virtual const char*
    what() const noexcept;
  };



}

}
# 42 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/new" 2 3

#pragma GCC visibility push(default)

extern "C++" {

namespace std
{






  class bad_alloc : public exception
  {
  public:
    bad_alloc() throw() { }


    bad_alloc(const bad_alloc&) = default;
    bad_alloc& operator=(const bad_alloc&) = default;




    virtual ~bad_alloc() throw();


    virtual const char* what() const throw();
  };


  class bad_array_new_length : public bad_alloc
  {
  public:
    bad_array_new_length() throw() { }



    virtual ~bad_array_new_length() throw();


    virtual const char* what() const throw();
  };






  struct nothrow_t
  {

    explicit nothrow_t() = default;

  };

  extern const nothrow_t nothrow;



  typedef void (*new_handler)();



  new_handler set_new_handler(new_handler) throw();



  new_handler get_new_handler() noexcept;

}
# 126 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/new" 3
 void* operator new(std::size_t)
  __attribute__((__externally_visible__));
 void* operator new[](std::size_t)
  __attribute__((__externally_visible__));
void operator delete(void*) noexcept
  __attribute__((__externally_visible__));
void operator delete[](void*) noexcept
  __attribute__((__externally_visible__));






 void* operator new(std::size_t, const std::nothrow_t&) noexcept
  __attribute__((__externally_visible__, __alloc_size__ (1), __malloc__));
 void* operator new[](std::size_t, const std::nothrow_t&) noexcept
  __attribute__((__externally_visible__, __alloc_size__ (1), __malloc__));
void operator delete(void*, const std::nothrow_t&) noexcept
  __attribute__((__externally_visible__));
void operator delete[](void*, const std::nothrow_t&) noexcept
  __attribute__((__externally_visible__));
# 174 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/new" 3
 inline void* operator new(std::size_t, void* __p) noexcept
{ return __p; }
 inline void* operator new[](std::size_t, void* __p) noexcept
{ return __p; }


inline void operator delete (void*, void*) noexcept { }
inline void operator delete[](void*, void*) noexcept { }

}
# 236 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/new" 3
#pragma GCC visibility pop
# 40 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/std_function.h" 2 3
# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/typeinfo" 1 3
# 30 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/typeinfo" 3
#define _TYPEINFO 

       
# 33 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/typeinfo" 3






#pragma GCC visibility push(default)





extern "C++" {

namespace __cxxabiv1
{
  class __class_type_info;
}
# 72 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/typeinfo" 3
#define __GXX_MERGED_TYPEINFO_NAMES 0







#define __GXX_TYPEINFO_EQUALITY_INLINE 1



namespace std
{






  class type_info
  {
  public:




    virtual ~type_info();



    const char* name() const noexcept
    { return __name[0] == '*' ? __name + 1 : __name; }



    bool before(const type_info& __arg) const noexcept;

   
    bool operator==(const type_info& __arg) const noexcept;


    bool operator!=(const type_info& __arg) const noexcept
    { return !operator==(__arg); }



    size_t hash_code() const noexcept
    {

      return _Hash_bytes(name(), __builtin_strlen(name()),
    static_cast<size_t>(0xc70f6907UL));



    }



    virtual bool __is_pointer_p() const;


    virtual bool __is_function_p() const;







    virtual bool __do_catch(const type_info *__thr_type, void **__thr_obj,
       unsigned __outer) const;


    virtual bool __do_upcast(const __cxxabiv1::__class_type_info *__target,
        void **__obj_ptr) const;

  protected:
    const char *__name;

    explicit type_info(const char *__n): __name(__n) { }

  private:


    type_info& operator=(const type_info&) = delete;
    type_info(const type_info&) = delete;
# 167 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/typeinfo" 3
  };


  inline bool
  type_info::before(const type_info& __arg) const noexcept
  {




    if (__name[0] != '*' || __arg.__name[0] != '*')
      return __builtin_strcmp (__name, __arg.__name) < 0;
# 187 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/typeinfo" 3
    return __name < __arg.__name;
  }



  inline bool
  type_info::operator==(const type_info& __arg) const noexcept
  {
    if (std::__is_constant_evaluated())
      return this == &__arg;

    if (__name == __arg.__name)
      return true;






    return __name[0] != '*' && __builtin_strcmp (__name, __arg.name()) == 0;



  }
# 220 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/typeinfo" 3
  class bad_cast : public exception
  {
  public:
    bad_cast() noexcept { }



    virtual ~bad_cast() noexcept;


    virtual const char* what() const noexcept;
  };





  class bad_typeid : public exception
  {
  public:
    bad_typeid () noexcept { }



    virtual ~bad_typeid() noexcept;


    virtual const char* what() const noexcept;
  };
}

}

#pragma GCC visibility pop
# 41 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/std_function.h" 2 3


# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/functexcept.h" 1 3
# 37 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/functexcept.h" 3
#define _FUNCTEXCEPT_H 1


# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/exception_defines.h" 1 3
# 31 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/exception_defines.h" 3
#define _EXCEPTION_DEFINES_H 1



#define __try if (true)
#define __catch(X) if (false)
#define __throw_exception_again 
# 41 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/functexcept.h" 2 3

namespace std __attribute__ ((__visibility__ ("default")))
{




  void
  __throw_bad_exception(void) __attribute__((__noreturn__));


  void
  __throw_bad_alloc(void) __attribute__((__noreturn__));

  void
  __throw_bad_array_new_length(void) __attribute__((__noreturn__));


  void
  __throw_bad_cast(void) __attribute__((__noreturn__));

  void
  __throw_bad_typeid(void) __attribute__((__noreturn__));


  void
  __throw_logic_error(const char*) __attribute__((__noreturn__));

  void
  __throw_domain_error(const char*) __attribute__((__noreturn__));

  void
  __throw_invalid_argument(const char*) __attribute__((__noreturn__));

  void
  __throw_length_error(const char*) __attribute__((__noreturn__));

  void
  __throw_out_of_range(const char*) __attribute__((__noreturn__));

  void
  __throw_out_of_range_fmt(const char*, ...) __attribute__((__noreturn__))
    __attribute__((__format__(__gnu_printf__, 1, 2)));

  void
  __throw_runtime_error(const char*) __attribute__((__noreturn__));

  void
  __throw_range_error(const char*) __attribute__((__noreturn__));

  void
  __throw_overflow_error(const char*) __attribute__((__noreturn__));

  void
  __throw_underflow_error(const char*) __attribute__((__noreturn__));


  void
  __throw_ios_failure(const char*) __attribute__((__noreturn__));

  void
  __throw_ios_failure(const char*, int) __attribute__((__noreturn__));


  void
  __throw_system_error(int) __attribute__((__noreturn__));


  void
  __throw_future_error(int) __attribute__((__noreturn__));


  void
  __throw_bad_function_call() __attribute__((__noreturn__));
# 140 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/functexcept.h" 3

}
# 44 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/std_function.h" 2 3

namespace std __attribute__ ((__visibility__ ("default")))
{







  class bad_function_call : public std::exception
  {
  public:
    virtual ~bad_function_call() noexcept;

    const char* what() const noexcept;
  };







  template<typename _Tp>
    struct __is_location_invariant
    : is_trivially_copyable<_Tp>::type
    { };

  class _Undefined_class;

  union _Nocopy_types
  {
    void* _M_object;
    const void* _M_const_object;
    void (*_M_function_pointer)();
    void (_Undefined_class::*_M_member_pointer)();
  };

  union [[gnu::may_alias]] _Any_data
  {
    void* _M_access() noexcept { return &_M_pod_data[0]; }
    const void* _M_access() const noexcept { return &_M_pod_data[0]; }

    template<typename _Tp>
      _Tp&
      _M_access() noexcept
      { return *static_cast<_Tp*>(_M_access()); }

    template<typename _Tp>
      const _Tp&
      _M_access() const noexcept
      { return *static_cast<const _Tp*>(_M_access()); }

    _Nocopy_types _M_unused;
    char _M_pod_data[sizeof(_Nocopy_types)];
  };

  enum _Manager_operation
  {
    __get_type_info,
    __get_functor_ptr,
    __clone_functor,
    __destroy_functor
  };

  template<typename _Signature>
    class function;


  class _Function_base
  {
  public:
    static const size_t _M_max_size = sizeof(_Nocopy_types);
    static const size_t _M_max_align = __alignof__(_Nocopy_types);

    template<typename _Functor>
      class _Base_manager
      {
      protected:
 static const bool __stored_locally =
 (__is_location_invariant<_Functor>::value
  && sizeof(_Functor) <= _M_max_size
  && __alignof__(_Functor) <= _M_max_align
  && (_M_max_align % __alignof__(_Functor) == 0));

 using _Local_storage = integral_constant<bool, __stored_locally>;


 static _Functor*
 _M_get_pointer(const _Any_data& __source) noexcept
 {
   if (__stored_locally)
     {
       const _Functor& __f = __source._M_access<_Functor>();
       return const_cast<_Functor*>(std::__addressof(__f));
     }
   else
     return __source._M_access<_Functor*>();
 }

      private:


 template<typename _Fn>
   static void
   _M_create(_Any_data& __dest, _Fn&& __f, true_type)
   {
     ::new (__dest._M_access()) _Functor(std::forward<_Fn>(__f));
   }


 template<typename _Fn>
   static void
   _M_create(_Any_data& __dest, _Fn&& __f, false_type)
   {
     __dest._M_access<_Functor*>()
       = new _Functor(std::forward<_Fn>(__f));
   }


 static void
 _M_destroy(_Any_data& __victim, true_type)
 {
   __victim._M_access<_Functor>().~_Functor();
 }


 static void
 _M_destroy(_Any_data& __victim, false_type)
 {
   delete __victim._M_access<_Functor*>();
 }

      public:
 static bool
 _M_manager(_Any_data& __dest, const _Any_data& __source,
     _Manager_operation __op)
 {
   switch (__op)
     {
     case __get_type_info:



       __dest._M_access<const type_info*>() = nullptr;

       break;

     case __get_functor_ptr:
       __dest._M_access<_Functor*>() = _M_get_pointer(__source);
       break;

     case __clone_functor:
       _M_init_functor(__dest,
    *const_cast<const _Functor*>(_M_get_pointer(__source)));
       break;

     case __destroy_functor:
       _M_destroy(__dest, _Local_storage());
       break;
     }
   return false;
 }

 template<typename _Fn>
   static void
   _M_init_functor(_Any_data& __functor, _Fn&& __f)
   noexcept(__and_<_Local_storage,
     is_nothrow_constructible<_Functor, _Fn>>::value)
   {
     _M_create(__functor, std::forward<_Fn>(__f), _Local_storage());
   }

 template<typename _Signature>
   static bool
   _M_not_empty_function(const function<_Signature>& __f) noexcept
   { return static_cast<bool>(__f); }

 template<typename _Tp>
   static bool
   _M_not_empty_function(_Tp* __fp) noexcept
   { return __fp != nullptr; }

 template<typename _Class, typename _Tp>
   static bool
   _M_not_empty_function(_Tp _Class::* __mp) noexcept
   { return __mp != nullptr; }

 template<typename _Tp>
   static bool
   _M_not_empty_function(const _Tp&) noexcept
   { return true; }
      };

    _Function_base() = default;

    ~_Function_base()
    {
      if (_M_manager)
 _M_manager(_M_functor, _M_functor, __destroy_functor);
    }

    bool _M_empty() const { return !_M_manager; }

    using _Manager_type
      = bool (*)(_Any_data&, const _Any_data&, _Manager_operation);

    _Any_data _M_functor{};
    _Manager_type _M_manager{};
  };

  template<typename _Signature, typename _Functor>
    class _Function_handler;

  template<typename _Res, typename _Functor, typename... _ArgTypes>
    class _Function_handler<_Res(_ArgTypes...), _Functor>
    : public _Function_base::_Base_manager<_Functor>
    {
      using _Base = _Function_base::_Base_manager<_Functor>;

    public:
      static bool
      _M_manager(_Any_data& __dest, const _Any_data& __source,
   _Manager_operation __op)
      {
 switch (__op)
   {





   case __get_functor_ptr:
     __dest._M_access<_Functor*>() = _Base::_M_get_pointer(__source);
     break;

   default:
     _Base::_M_manager(__dest, __source, __op);
   }
 return false;
      }

      static _Res
      _M_invoke(const _Any_data& __functor, _ArgTypes&&... __args)
      {
 return std::__invoke_r<_Res>(*_Base::_M_get_pointer(__functor),
         std::forward<_ArgTypes>(__args)...);
      }

      template<typename _Fn>
 static constexpr bool
 _S_nothrow_init() noexcept
 {
   return __and_<typename _Base::_Local_storage,
   is_nothrow_constructible<_Functor, _Fn>>::value;
 }
    };


  template<>
    class _Function_handler<void, void>
    {
    public:
      static bool
      _M_manager(_Any_data&, const _Any_data&, _Manager_operation)
      { return false; }
    };





  template<typename _Signature, typename _Functor,
    bool __valid = is_object<_Functor>::value>
    struct _Target_handler
    : _Function_handler<_Signature, typename remove_cv<_Functor>::type>
    { };

  template<typename _Signature, typename _Functor>
    struct _Target_handler<_Signature, _Functor, false>
    : _Function_handler<void, void>
    { };






  template<typename _Res, typename... _ArgTypes>
    class function<_Res(_ArgTypes...)>
    : public _Maybe_unary_or_binary_function<_Res, _ArgTypes...>,
      private _Function_base
    {


      template<typename _Func,
        bool _Self = is_same<__remove_cvref_t<_Func>, function>::value>
 using _Decay_t
   = typename __enable_if_t<!_Self, decay<_Func>>::type;

      template<typename _Func,
        typename _DFunc = _Decay_t<_Func>,
        typename _Res2 = __invoke_result<_DFunc&, _ArgTypes...>>
 struct _Callable
 : __is_invocable_impl<_Res2, _Res>::type
 { };

      template<typename _Cond, typename _Tp = void>
 using _Requires = __enable_if_t<_Cond::value, _Tp>;

      template<typename _Functor>
 using _Handler
   = _Function_handler<_Res(_ArgTypes...), __decay_t<_Functor>>;

    public:
      typedef _Res result_type;







      function() noexcept
      : _Function_base() { }





      function(nullptr_t) noexcept
      : _Function_base() { }
# 386 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/std_function.h" 3
      function(const function& __x)
      : _Function_base()
      {
 if (static_cast<bool>(__x))
   {
     __x._M_manager(_M_functor, __x._M_functor, __clone_functor);
     _M_invoker = __x._M_invoker;
     _M_manager = __x._M_manager;
   }
      }
# 404 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/std_function.h" 3
      function(function&& __x) noexcept
      : _Function_base(), _M_invoker(__x._M_invoker)
      {
 if (static_cast<bool>(__x))
   {
     _M_functor = __x._M_functor;
     _M_manager = __x._M_manager;
     __x._M_manager = nullptr;
     __x._M_invoker = nullptr;
   }
      }
# 433 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/std_function.h" 3
      template<typename _Functor,
        typename _Constraints = _Requires<_Callable<_Functor>>>
 function(_Functor&& __f)
 noexcept(_Handler<_Functor>::template _S_nothrow_init<_Functor>())
 : _Function_base()
 {
   static_assert(is_copy_constructible<__decay_t<_Functor>>::value,
       "std::function target must be copy-constructible");
   static_assert(is_constructible<__decay_t<_Functor>, _Functor>::value,
       "std::function target must be constructible from the "
       "constructor argument");

   using _My_handler = _Handler<_Functor>;

   if (_My_handler::_M_not_empty_function(__f))
     {
       _My_handler::_M_init_functor(_M_functor,
        std::forward<_Functor>(__f));
       _M_invoker = &_My_handler::_M_invoke;
       _M_manager = &_My_handler::_M_manager;
     }
 }
# 468 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/std_function.h" 3
      function&
      operator=(const function& __x)
      {
 function(__x).swap(*this);
 return *this;
      }
# 486 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/std_function.h" 3
      function&
      operator=(function&& __x) noexcept
      {
 function(std::move(__x)).swap(*this);
 return *this;
      }
# 500 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/std_function.h" 3
      function&
      operator=(nullptr_t) noexcept
      {
 if (_M_manager)
   {
     _M_manager(_M_functor, _M_functor, __destroy_functor);
     _M_manager = nullptr;
     _M_invoker = nullptr;
   }
 return *this;
      }
# 529 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/std_function.h" 3
      template<typename _Functor>
 _Requires<_Callable<_Functor>, function&>
 operator=(_Functor&& __f)
 noexcept(_Handler<_Functor>::template _S_nothrow_init<_Functor>())
 {
   function(std::forward<_Functor>(__f)).swap(*this);
   return *this;
 }


      template<typename _Functor>
 function&
 operator=(reference_wrapper<_Functor> __f) noexcept
 {
   function(__f).swap(*this);
   return *this;
 }
# 556 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/std_function.h" 3
      void swap(function& __x) noexcept
      {
 std::swap(_M_functor, __x._M_functor);
 std::swap(_M_manager, __x._M_manager);
 std::swap(_M_invoker, __x._M_invoker);
      }
# 573 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/std_function.h" 3
      explicit operator bool() const noexcept
      { return !_M_empty(); }
# 586 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/std_function.h" 3
      _Res
      operator()(_ArgTypes... __args) const
      {
 if (_M_empty())
   __throw_bad_function_call();
 return _M_invoker(_M_functor, std::forward<_ArgTypes>(__args)...);
      }
# 630 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/std_function.h" 3
      template<typename _Functor>
 _Functor*
 target() noexcept
 {
   const function* __const_this = this;
   const _Functor* __func = __const_this->template target<_Functor>();


   return *const_cast<_Functor**>(&__func);
 }

      template<typename _Functor>
 const _Functor*
 target() const noexcept
 {
   if (is_object<_Functor>::value)
     {


       using _Handler = _Target_handler<_Res(_ArgTypes...), _Functor>;

       if (_M_manager == &_Handler::_M_manager



   )
  {
    _Any_data __ptr;
    _M_manager(__ptr, _M_functor, __get_functor_ptr);
    return __ptr._M_access<const _Functor*>();
  }
     }
   return nullptr;
 }


    private:
      using _Invoker_type = _Res (*)(const _Any_data&, _ArgTypes&&...);
      _Invoker_type _M_invoker = nullptr;
    };
# 735 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/std_function.h" 3
  template<typename _Res, typename... _Args>
    inline bool
    operator==(const function<_Res(_Args...)>& __f, nullptr_t) noexcept
    { return !static_cast<bool>(__f); }



  template<typename _Res, typename... _Args>
    inline bool
    operator==(nullptr_t, const function<_Res(_Args...)>& __f) noexcept
    { return !static_cast<bool>(__f); }







  template<typename _Res, typename... _Args>
    inline bool
    operator!=(const function<_Res(_Args...)>& __f, nullptr_t) noexcept
    { return static_cast<bool>(__f); }


  template<typename _Res, typename... _Args>
    inline bool
    operator!=(nullptr_t, const function<_Res(_Args...)>& __f) noexcept
    { return static_cast<bool>(__f); }
# 774 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/std_function.h" 3
  template<typename _Res, typename... _Args>
    inline void
    swap(function<_Res(_Args...)>& __x, function<_Res(_Args...)>& __y) noexcept
    { __x.swap(__y); }
# 793 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/std_function.h" 3

}
# 60 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/functional" 2 3
# 79 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/functional" 3
namespace std __attribute__ ((__visibility__ ("default")))
{






  template<int _Num> struct _Placeholder { };
# 141 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/functional" 3
  template<typename _MemFunPtr,
    bool __is_mem_fn = is_member_function_pointer<_MemFunPtr>::value>
    class _Mem_fn_base
    : public _Mem_fn_traits<_MemFunPtr>::__maybe_type
    {
      using _Traits = _Mem_fn_traits<_MemFunPtr>;

      using _Arity = typename _Traits::__arity;
      using _Varargs = typename _Traits::__vararg;

      template<typename _Func, typename... _BoundArgs>
 friend struct _Bind_check_arity;

      _MemFunPtr _M_pmf;

    public:

      using result_type = typename _Traits::__result_type;

      explicit constexpr
      _Mem_fn_base(_MemFunPtr __pmf) noexcept : _M_pmf(__pmf) { }

      template<typename... _Args>

 auto
 operator()(_Args&&... __args) const
 noexcept(noexcept(
       std::__invoke(_M_pmf, std::forward<_Args>(__args)...)))
 -> decltype(std::__invoke(_M_pmf, std::forward<_Args>(__args)...))
 { return std::__invoke(_M_pmf, std::forward<_Args>(__args)...); }
    };


  template<typename _MemObjPtr>
    class _Mem_fn_base<_MemObjPtr, false>
    {
      using _Arity = integral_constant<size_t, 0>;
      using _Varargs = false_type;

      template<typename _Func, typename... _BoundArgs>
 friend struct _Bind_check_arity;

      _MemObjPtr _M_pm;

    public:
      explicit constexpr
      _Mem_fn_base(_MemObjPtr __pm) noexcept : _M_pm(__pm) { }

      template<typename _Tp>

 auto
 operator()(_Tp&& __obj) const
 noexcept(noexcept(std::__invoke(_M_pm, std::forward<_Tp>(__obj))))
 -> decltype(std::__invoke(_M_pm, std::forward<_Tp>(__obj)))
 { return std::__invoke(_M_pm, std::forward<_Tp>(__obj)); }
    };

  template<typename _MemberPointer>
    struct _Mem_fn;

  template<typename _Res, typename _Class>
    struct _Mem_fn<_Res _Class::*>
    : _Mem_fn_base<_Res _Class::*>
    {
      using _Mem_fn_base<_Res _Class::*>::_Mem_fn_base;
    };
# 234 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/functional" 3
  template<typename _Tp, typename _Class>
   
    inline _Mem_fn<_Tp _Class::*>
    mem_fn(_Tp _Class::* __pm) noexcept
    {
      return _Mem_fn<_Tp _Class::*>(__pm);
    }
# 253 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/functional" 3
  template<typename _Tp>
    struct is_bind_expression
    : public false_type { };
# 265 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/functional" 3
  template<typename _Tp>
    struct is_placeholder
    : public integral_constant<int, 0>
    { };
# 282 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/functional" 3
  namespace placeholders
  {







#define _GLIBCXX_PLACEHOLDER extern


    extern const _Placeholder<1> _1;
    extern const _Placeholder<2> _2;
    extern const _Placeholder<3> _3;
    extern const _Placeholder<4> _4;
    extern const _Placeholder<5> _5;
    extern const _Placeholder<6> _6;
    extern const _Placeholder<7> _7;
    extern const _Placeholder<8> _8;
    extern const _Placeholder<9> _9;
    extern const _Placeholder<10> _10;
    extern const _Placeholder<11> _11;
    extern const _Placeholder<12> _12;
    extern const _Placeholder<13> _13;
    extern const _Placeholder<14> _14;
    extern const _Placeholder<15> _15;
    extern const _Placeholder<16> _16;
    extern const _Placeholder<17> _17;
    extern const _Placeholder<18> _18;
    extern const _Placeholder<19> _19;
    extern const _Placeholder<20> _20;
    extern const _Placeholder<21> _21;
    extern const _Placeholder<22> _22;
    extern const _Placeholder<23> _23;
    extern const _Placeholder<24> _24;
    extern const _Placeholder<25> _25;
    extern const _Placeholder<26> _26;
    extern const _Placeholder<27> _27;
    extern const _Placeholder<28> _28;
    extern const _Placeholder<29> _29;

#undef _GLIBCXX_PLACEHOLDER
  }







  template<int _Num>
    struct is_placeholder<_Placeholder<_Num> >
    : public integral_constant<int, _Num>
    { };

  template<int _Num>
    struct is_placeholder<const _Placeholder<_Num> >
    : public integral_constant<int, _Num>
    { };




  template<std::size_t __i, typename _Tuple>
    using _Safe_tuple_element_t
      = typename enable_if<(__i < tuple_size<_Tuple>::value),
      tuple_element<__i, _Tuple>>::type::type;
# 362 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/functional" 3
  template<typename _Arg,
    bool _IsBindExp = is_bind_expression<_Arg>::value,
    bool _IsPlaceholder = (is_placeholder<_Arg>::value > 0)>
    class _Mu;






  template<typename _Tp>
    class _Mu<reference_wrapper<_Tp>, false, false>
    {
    public:




      template<typename _CVRef, typename _Tuple>

 _Tp&
 operator()(_CVRef& __arg, _Tuple&) const volatile
 { return __arg.get(); }
    };







  template<typename _Arg>
    class _Mu<_Arg, true, false>
    {
    public:
      template<typename _CVArg, typename... _Args>

 auto
 operator()(_CVArg& __arg,
     tuple<_Args...>& __tuple) const volatile
 -> decltype(__arg(declval<_Args>()...))
 {

   typedef typename _Build_index_tuple<sizeof...(_Args)>::__type
     _Indexes;
   return this->__call(__arg, __tuple, _Indexes());
 }

    private:


      template<typename _CVArg, typename... _Args, std::size_t... _Indexes>

 auto
 __call(_CVArg& __arg, tuple<_Args...>& __tuple,
        const _Index_tuple<_Indexes...>&) const volatile
 -> decltype(__arg(declval<_Args>()...))
 {
   return __arg(std::get<_Indexes>(std::move(__tuple))...);
 }
    };






  template<typename _Arg>
    class _Mu<_Arg, false, true>
    {
    public:
      template<typename _Tuple>

 _Safe_tuple_element_t<(is_placeholder<_Arg>::value - 1), _Tuple>&&
 operator()(const volatile _Arg&, _Tuple& __tuple) const volatile
 {
   return
     ::std::get<(is_placeholder<_Arg>::value - 1)>(std::move(__tuple));
 }
    };






  template<typename _Arg>
    class _Mu<_Arg, false, false>
    {
    public:
      template<typename _CVArg, typename _Tuple>

 _CVArg&&
 operator()(_CVArg&& __arg, _Tuple&) const volatile
 { return std::forward<_CVArg>(__arg); }
    };


  template<std::size_t _Ind, typename... _Tp>
    inline auto
    __volget(volatile tuple<_Tp...>& __tuple)
    -> __tuple_element_t<_Ind, tuple<_Tp...>> volatile&
    { return std::get<_Ind>(const_cast<tuple<_Tp...>&>(__tuple)); }


  template<std::size_t _Ind, typename... _Tp>
    inline auto
    __volget(const volatile tuple<_Tp...>& __tuple)
    -> __tuple_element_t<_Ind, tuple<_Tp...>> const volatile&
    { return std::get<_Ind>(const_cast<const tuple<_Tp...>&>(__tuple)); }
# 482 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/functional" 3
#define _GLIBCXX_VOLATILE_BIND 
#define _GLIBCXX_DEPR_BIND 



  template<typename _Signature>
    class _Bind;

   template<typename _Functor, typename... _Bound_args>
    class _Bind<_Functor(_Bound_args...)>
    : public _Weak_result_type<_Functor>
    {
      typedef typename _Build_index_tuple<sizeof...(_Bound_args)>::__type
 _Bound_indexes;

      _Functor _M_f;
      tuple<_Bound_args...> _M_bound_args;


      template<typename _Result, typename... _Args, std::size_t... _Indexes>

 _Result
 __call(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>)
 {
   return std::__invoke(_M_f,
       _Mu<_Bound_args>()(std::get<_Indexes>(_M_bound_args), __args)...
       );
 }


      template<typename _Result, typename... _Args, std::size_t... _Indexes>

 _Result
 __call_c(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>) const
 {
   return std::__invoke(_M_f,
       _Mu<_Bound_args>()(std::get<_Indexes>(_M_bound_args), __args)...
       );
 }



      template<typename _Result, typename... _Args, std::size_t... _Indexes>
 _Result
 __call_v(tuple<_Args...>&& __args,
   _Index_tuple<_Indexes...>) volatile
 {
   return std::__invoke(_M_f,
       _Mu<_Bound_args>()(__volget<_Indexes>(_M_bound_args), __args)...
       );
 }


      template<typename _Result, typename... _Args, std::size_t... _Indexes>
 _Result
 __call_c_v(tuple<_Args...>&& __args,
     _Index_tuple<_Indexes...>) const volatile
 {
   return std::__invoke(_M_f,
       _Mu<_Bound_args>()(__volget<_Indexes>(_M_bound_args), __args)...
       );
 }


      template<typename _BoundArg, typename _CallArgs>
 using _Mu_type = decltype(
     _Mu<typename remove_cv<_BoundArg>::type>()(
       std::declval<_BoundArg&>(), std::declval<_CallArgs&>()) );

      template<typename _Fn, typename _CallArgs, typename... _BArgs>
 using _Res_type_impl
   = typename result_of< _Fn&(_Mu_type<_BArgs, _CallArgs>&&...) >::type;

      template<typename _CallArgs>
 using _Res_type = _Res_type_impl<_Functor, _CallArgs, _Bound_args...>;

      template<typename _CallArgs>
 using __dependent = typename
   enable_if<bool(tuple_size<_CallArgs>::value+1), _Functor>::type;

      template<typename _CallArgs, template<class> class __cv_quals>
 using _Res_type_cv = _Res_type_impl<
   typename __cv_quals<__dependent<_CallArgs>>::type,
   _CallArgs,
   typename __cv_quals<_Bound_args>::type...>;

     public:
      template<typename... _Args>
 explicit
 _Bind(const _Functor& __f, _Args&&... __args)
 : _M_f(__f), _M_bound_args(std::forward<_Args>(__args)...)
 { }

      template<typename... _Args>
 explicit
 _Bind(_Functor&& __f, _Args&&... __args)
 : _M_f(std::move(__f)), _M_bound_args(std::forward<_Args>(__args)...)
 { }

      _Bind(const _Bind&) = default;
      _Bind(_Bind&&) = default;


      template<typename... _Args,
        typename _Result = _Res_type<tuple<_Args...>>>

 _Result
 operator()(_Args&&... __args)
 {
   return this->__call<_Result>(
       std::forward_as_tuple(std::forward<_Args>(__args)...),
       _Bound_indexes());
 }


      template<typename... _Args,
        typename _Result = _Res_type_cv<tuple<_Args...>, add_const>>

 _Result
 operator()(_Args&&... __args) const
 {
   return this->__call_c<_Result>(
       std::forward_as_tuple(std::forward<_Args>(__args)...),
       _Bound_indexes());
 }



      template<typename... _Args,
        typename _Result = _Res_type_cv<tuple<_Args...>, add_volatile>>

 _Result
 operator()(_Args&&... __args) volatile
 {
   return this->__call_v<_Result>(
       std::forward_as_tuple(std::forward<_Args>(__args)...),
       _Bound_indexes());
 }


      template<typename... _Args,
        typename _Result = _Res_type_cv<tuple<_Args...>, add_cv>>

 _Result
 operator()(_Args&&... __args) const volatile
 {
   return this->__call_c_v<_Result>(
       std::forward_as_tuple(std::forward<_Args>(__args)...),
       _Bound_indexes());
 }

    };


  template<typename _Result, typename _Signature>
    class _Bind_result;

  template<typename _Result, typename _Functor, typename... _Bound_args>
    class _Bind_result<_Result, _Functor(_Bound_args...)>
    {
      typedef typename _Build_index_tuple<sizeof...(_Bound_args)>::__type
 _Bound_indexes;

      _Functor _M_f;
      tuple<_Bound_args...> _M_bound_args;


      template<typename _Res, typename... _Args, std::size_t... _Indexes>

 _Res
 __call(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>)
 {
   return std::__invoke_r<_Res>(_M_f, _Mu<_Bound_args>()
        (std::get<_Indexes>(_M_bound_args), __args)...);
 }


      template<typename _Res, typename... _Args, std::size_t... _Indexes>

 _Res
 __call(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>) const
 {
   return std::__invoke_r<_Res>(_M_f, _Mu<_Bound_args>()
        (std::get<_Indexes>(_M_bound_args), __args)...);
 }



      template<typename _Res, typename... _Args, std::size_t... _Indexes>
 _Res
 __call(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>) volatile
 {
   return std::__invoke_r<_Res>(_M_f, _Mu<_Bound_args>()
        (__volget<_Indexes>(_M_bound_args), __args)...);
 }


      template<typename _Res, typename... _Args, std::size_t... _Indexes>
 _Res
 __call(tuple<_Args...>&& __args,
        _Index_tuple<_Indexes...>) const volatile
 {
   return std::__invoke_r<_Res>(_M_f, _Mu<_Bound_args>()
        (__volget<_Indexes>(_M_bound_args), __args)...);
 }


    public:
      typedef _Result result_type;

      template<typename... _Args>
 explicit
 _Bind_result(const _Functor& __f, _Args&&... __args)
 : _M_f(__f), _M_bound_args(std::forward<_Args>(__args)...)
 { }

      template<typename... _Args>
 explicit
 _Bind_result(_Functor&& __f, _Args&&... __args)
 : _M_f(std::move(__f)), _M_bound_args(std::forward<_Args>(__args)...)
 { }

      _Bind_result(const _Bind_result&) = default;
      _Bind_result(_Bind_result&&) = default;


      template<typename... _Args>

 result_type
 operator()(_Args&&... __args)
 {
   return this->__call<_Result>(
       std::forward_as_tuple(std::forward<_Args>(__args)...),
       _Bound_indexes());
 }


      template<typename... _Args>

 result_type
 operator()(_Args&&... __args) const
 {
   return this->__call<_Result>(
       std::forward_as_tuple(std::forward<_Args>(__args)...),
       _Bound_indexes());
 }



      template<typename... _Args>

 result_type
 operator()(_Args&&... __args) volatile
 {
   return this->__call<_Result>(
       std::forward_as_tuple(std::forward<_Args>(__args)...),
       _Bound_indexes());
 }


      template<typename... _Args>

 result_type
 operator()(_Args&&... __args) const volatile
 {
   return this->__call<_Result>(
       std::forward_as_tuple(std::forward<_Args>(__args)...),
       _Bound_indexes());
 }




    };

#undef _GLIBCXX_VOLATILE_BIND
#undef _GLIBCXX_DEPR_BIND





  template<typename _Signature>
    struct is_bind_expression<_Bind<_Signature> >
    : public true_type { };





  template<typename _Signature>
    struct is_bind_expression<const _Bind<_Signature> >
    : public true_type { };





  template<typename _Signature>
    struct is_bind_expression<volatile _Bind<_Signature> >
    : public true_type { };





  template<typename _Signature>
    struct is_bind_expression<const volatile _Bind<_Signature>>
    : public true_type { };





  template<typename _Result, typename _Signature>
    struct is_bind_expression<_Bind_result<_Result, _Signature>>
    : public true_type { };





  template<typename _Result, typename _Signature>
    struct is_bind_expression<const _Bind_result<_Result, _Signature>>
    : public true_type { };





  template<typename _Result, typename _Signature>
    struct is_bind_expression<volatile _Bind_result<_Result, _Signature>>
    : public true_type { };





  template<typename _Result, typename _Signature>
    struct is_bind_expression<const volatile _Bind_result<_Result, _Signature>>
    : public true_type { };

  template<typename _Func, typename... _BoundArgs>
    struct _Bind_check_arity { };

  template<typename _Ret, typename... _Args, typename... _BoundArgs>
    struct _Bind_check_arity<_Ret (*)(_Args...), _BoundArgs...>
    {
      static_assert(sizeof...(_BoundArgs) == sizeof...(_Args),
                   "Wrong number of arguments for function");
    };

  template<typename _Ret, typename... _Args, typename... _BoundArgs>
    struct _Bind_check_arity<_Ret (*)(_Args......), _BoundArgs...>
    {
      static_assert(sizeof...(_BoundArgs) >= sizeof...(_Args),
                   "Wrong number of arguments for function");
    };

  template<typename _Tp, typename _Class, typename... _BoundArgs>
    struct _Bind_check_arity<_Tp _Class::*, _BoundArgs...>
    {
      using _Arity = typename _Mem_fn<_Tp _Class::*>::_Arity;
      using _Varargs = typename _Mem_fn<_Tp _Class::*>::_Varargs;
      static_assert(_Varargs::value
      ? sizeof...(_BoundArgs) >= _Arity::value + 1
      : sizeof...(_BoundArgs) == _Arity::value + 1,
      "Wrong number of arguments for pointer-to-member");
    };




  template<typename _Tp, typename _Tp2 = typename decay<_Tp>::type>
    using __is_socketlike = __or_<is_integral<_Tp2>, is_enum<_Tp2>>;

  template<bool _SocketLike, typename _Func, typename... _BoundArgs>
    struct _Bind_helper
    : _Bind_check_arity<typename decay<_Func>::type, _BoundArgs...>
    {
      typedef typename decay<_Func>::type __func_type;
      typedef _Bind<__func_type(typename decay<_BoundArgs>::type...)> type;
    };




  template<typename _Func, typename... _BoundArgs>
    struct _Bind_helper<true, _Func, _BoundArgs...>
    { };






  template<typename _Func, typename... _BoundArgs>
    inline typename
    _Bind_helper<__is_socketlike<_Func>::value, _Func, _BoundArgs...>::type
    bind(_Func&& __f, _BoundArgs&&... __args)
    {
      typedef _Bind_helper<false, _Func, _BoundArgs...> __helper_type;
      return typename __helper_type::type(std::forward<_Func>(__f),
       std::forward<_BoundArgs>(__args)...);
    }

  template<typename _Result, typename _Func, typename... _BoundArgs>
    struct _Bindres_helper
    : _Bind_check_arity<typename decay<_Func>::type, _BoundArgs...>
    {
      typedef typename decay<_Func>::type __functor_type;
      typedef _Bind_result<_Result,
      __functor_type(typename decay<_BoundArgs>::type...)>
 type;
    };






  template<typename _Result, typename _Func, typename... _BoundArgs>
    inline
    typename _Bindres_helper<_Result, _Func, _BoundArgs...>::type
    bind(_Func&& __f, _BoundArgs&&... __args)
    {
      typedef _Bindres_helper<_Result, _Func, _BoundArgs...> __helper_type;
      return typename __helper_type::type(std::forward<_Func>(__f),
       std::forward<_BoundArgs>(__args)...);
    }
# 1457 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/functional" 3

}
# 36 "../harfbuzz-6.0.0/src/hb-cplusplus.hh" 2
# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/utility" 1 3
# 56 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/utility" 3
#define _GLIBCXX_UTILITY 1

       
# 59 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/utility" 3
# 68 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/utility" 3
# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_relops.h" 1 3
# 60 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_relops.h" 3
#define _STL_RELOPS_H 1

namespace std __attribute__ ((__visibility__ ("default")))
{


  namespace rel_ops
  {
# 86 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_relops.h" 3
    template <class _Tp>
      inline bool
      operator!=(const _Tp& __x, const _Tp& __y)
      { return !(__x == __y); }
# 99 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_relops.h" 3
    template <class _Tp>
      inline bool
      operator>(const _Tp& __x, const _Tp& __y)
      { return __y < __x; }
# 112 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_relops.h" 3
    template <class _Tp>
      inline bool
      operator<=(const _Tp& __x, const _Tp& __y)
      { return !(__y < __x); }
# 125 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_relops.h" 3
    template <class _Tp>
      inline bool
      operator>=(const _Tp& __x, const _Tp& __y)
      { return !(__x < __y); }
  }


}
# 69 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/utility" 2 3




# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/initializer_list" 1 3
# 31 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/initializer_list" 3
#define _INITIALIZER_LIST 

       
# 34 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/initializer_list" 3







namespace std __attribute__ ((__visibility__ ("default")))
{

  template<class _E>
    class initializer_list
    {
    public:
      typedef _E value_type;
      typedef const _E& reference;
      typedef const _E& const_reference;
      typedef size_t size_type;
      typedef const _E* iterator;
      typedef const _E* const_iterator;

    private:
      iterator _M_array;
      size_type _M_len;


      constexpr initializer_list(const_iterator __a, size_type __l)
      : _M_array(__a), _M_len(__l) { }

    public:
      constexpr initializer_list() noexcept
      : _M_array(0), _M_len(0) { }


      constexpr size_type
      size() const noexcept { return _M_len; }


      constexpr const_iterator
      begin() const noexcept { return _M_array; }


      constexpr const_iterator
      end() const noexcept { return begin() + size(); }
    };







  template<class _Tp>
    constexpr const _Tp*
    begin(initializer_list<_Tp> __ils) noexcept
    { return __ils.begin(); }







  template<class _Tp>
    constexpr const _Tp*
    end(initializer_list<_Tp> __ils) noexcept
    { return __ils.end(); }
}
# 74 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/utility" 2 3
# 82 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/utility" 3
namespace std __attribute__ ((__visibility__ ("default")))
{

# 220 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/utility" 3

}
# 37 "../harfbuzz-6.0.0/src/hb-cplusplus.hh" 2








# 44 "../harfbuzz-6.0.0/src/hb-cplusplus.hh"
namespace hb {


template <typename T>
struct vtable;

template <typename T>
struct shared_ptr
{
  using element_type = T;

  using v = vtable<T>;

  explicit shared_ptr (T *p = nullptr) : p (p) {}
  shared_ptr (const shared_ptr &o) : p (v::reference (o.p)) {}
  shared_ptr (shared_ptr &&o) : p (o.p) { o.p = nullptr; }
  shared_ptr& operator = (const shared_ptr &o) { if (p != o.p) { destroy (); p = o.p; reference (); } return *this; }
  shared_ptr& operator = (shared_ptr &&o) { v::destroy (p); p = o.p; o.p = nullptr; return *this; }
  ~shared_ptr () { v::destroy (p); p = nullptr; }

  T* get() const { return p; }

  void swap (shared_ptr &o) { std::swap (p, o.p); }
  friend void swap (shared_ptr &a, shared_ptr &b) { std::swap (a.p, b.p); }

  operator T * () const { return p; }
  T& operator * () const { return *get (); }
  T* operator -> () const { return get (); }
  operator bool () const { return p; }
  bool operator == (const shared_ptr &o) const { return p == o.p; }
  bool operator != (const shared_ptr &o) const { return p != o.p; }

  static T* get_empty() { return v::get_empty (); }
  T* reference() { return v::reference (p); }
  void destroy() { v::destroy (p); }
  void set_user_data (hb_user_data_key_t *key,
        void *value,
        hb_destroy_func_t destroy,
        hb_bool_t replace) { v::set_user_data (p, key, value, destroy, replace); }
  void * get_user_data (hb_user_data_key_t *key) { return v::get_user_data (p, key); }

  private:
  T *p;
};

template<typename T> struct is_shared_ptr : std::false_type {};
template<typename T> struct is_shared_ptr<shared_ptr<T>> : std::true_type {};

template <typename T>
struct unique_ptr
{
  using element_type = T;

  using v = vtable<T>;

  explicit unique_ptr (T *p = nullptr) : p (p) {}
  unique_ptr (const unique_ptr &o) = delete;
  unique_ptr (unique_ptr &&o) : p (o.p) { o.p = nullptr; }
  unique_ptr& operator = (const unique_ptr &o) = delete;
  unique_ptr& operator = (unique_ptr &&o) { v::destroy (p); p = o.p; o.p = nullptr; return *this; }
  ~unique_ptr () { v::destroy (p); p = nullptr; }

  T* get() const { return p; }
  T* release () { T* v = p; p = nullptr; return v; }

  void swap (unique_ptr &o) { std::swap (p, o.p); }
  friend void swap (unique_ptr &a, unique_ptr &b) { std::swap (a.p, b.p); }

  operator T * () const { return p; }
  T& operator * () const { return *get (); }
  T* operator -> () const { return get (); }
  operator bool () { return p; }

  private:
  T *p;
};

template<typename T> struct is_unique_ptr : std::false_type {};
template<typename T> struct is_unique_ptr<unique_ptr<T>> : std::true_type {};

template <typename T,
   T * (*_get_empty) (void),
   T * (*_reference) (T *),
   void (*_destroy) (T *),
   hb_bool_t (*_set_user_data) (T *,
           hb_user_data_key_t *,
           void *,
           hb_destroy_func_t,
           hb_bool_t),
   void * (*_get_user_data) (const T *,
        hb_user_data_key_t *)>
struct vtable_t
{
  static constexpr auto get_empty = _get_empty;
  static constexpr auto reference = _reference;
  static constexpr auto destroy = _destroy;
  static constexpr auto set_user_data = _set_user_data;
  static constexpr auto get_user_data = _get_user_data;
};

#define HB_DEFINE_VTABLE(name) template<> struct vtable<hb_ ##name ##_t> : vtable_t<hb_ ##name ##_t, &hb_ ##name ##_get_empty, &hb_ ##name ##_reference, &hb_ ##name ##_destroy, &hb_ ##name ##_set_user_data, &hb_ ##name ##_get_user_data> {}
# 154 "../harfbuzz-6.0.0/src/hb-cplusplus.hh"
template<> struct vtable<hb_buffer_t> : vtable_t<hb_buffer_t, &hb_buffer_get_empty, &hb_buffer_reference, &hb_buffer_destroy, &hb_buffer_set_user_data, &hb_buffer_get_user_data> {};
template<> struct vtable<hb_blob_t> : vtable_t<hb_blob_t, &hb_blob_get_empty, &hb_blob_reference, &hb_blob_destroy, &hb_blob_set_user_data, &hb_blob_get_user_data> {};
template<> struct vtable<hb_face_t> : vtable_t<hb_face_t, &hb_face_get_empty, &hb_face_reference, &hb_face_destroy, &hb_face_set_user_data, &hb_face_get_user_data> {};
template<> struct vtable<hb_font_t> : vtable_t<hb_font_t, &hb_font_get_empty, &hb_font_reference, &hb_font_destroy, &hb_font_set_user_data, &hb_font_get_user_data> {};
template<> struct vtable<hb_font_funcs_t> : vtable_t<hb_font_funcs_t, &hb_font_funcs_get_empty, &hb_font_funcs_reference, &hb_font_funcs_destroy, &hb_font_funcs_set_user_data, &hb_font_funcs_get_user_data> {};
template<> struct vtable<hb_map_t> : vtable_t<hb_map_t, &hb_map_get_empty, &hb_map_reference, &hb_map_destroy, &hb_map_set_user_data, &hb_map_get_user_data> {};
template<> struct vtable<hb_set_t> : vtable_t<hb_set_t, &hb_set_get_empty, &hb_set_reference, &hb_set_destroy, &hb_set_set_user_data, &hb_set_get_user_data> {};
template<> struct vtable<hb_shape_plan_t> : vtable_t<hb_shape_plan_t, &hb_shape_plan_get_empty, &hb_shape_plan_reference, &hb_shape_plan_destroy, &hb_shape_plan_set_user_data, &hb_shape_plan_get_user_data> {};
template<> struct vtable<hb_unicode_funcs_t> : vtable_t<hb_unicode_funcs_t, &hb_unicode_funcs_get_empty, &hb_unicode_funcs_reference, &hb_unicode_funcs_destroy, &hb_unicode_funcs_set_user_data, &hb_unicode_funcs_get_user_data> {};
template<> struct vtable<hb_draw_funcs_t> : vtable_t<hb_draw_funcs_t, &hb_draw_funcs_get_empty, &hb_draw_funcs_reference, &hb_draw_funcs_destroy, &hb_draw_funcs_set_user_data, &hb_draw_funcs_get_user_data> {};
template<> struct vtable<hb_paint_funcs_t> : vtable_t<hb_paint_funcs_t, &hb_paint_funcs_get_empty, &hb_paint_funcs_reference, &hb_paint_funcs_destroy, &hb_paint_funcs_set_user_data, &hb_paint_funcs_get_user_data> {};

#undef HB_DEFINE_VTABLE
# 190 "../harfbuzz-6.0.0/src/hb-cplusplus.hh"
}




namespace std {


template<typename T>
struct hash<hb::shared_ptr<T>>
{
    std::size_t operator()(const hb::shared_ptr<T>& v) const noexcept
    {
        std::size_t h = std::hash<decltype (v.get ())>{}(v.get ());
        return h;
    }
};

template<typename T>
struct hash<hb::unique_ptr<T>>
{
    std::size_t operator()(const hb::unique_ptr<T>& v) const noexcept
    {
        std::size_t h = std::hash<decltype (v.get ())>{}(v.get ());
        return h;
    }
};


}
# 477 "../harfbuzz-6.0.0/src/hb.hh" 2
# 1 "../harfbuzz-6.0.0/src/hb-meta.hh" 1
# 28 "../harfbuzz-6.0.0/src/hb-meta.hh"
#define HB_META_HH 



# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/memory" 1 3
# 45 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/memory" 3
#define _GLIBCXX_MEMORY 1

       
# 48 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/memory" 3
# 63 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/memory" 3
# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/memoryfwd.h" 1 3
# 44 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/memoryfwd.h" 3
#define _MEMORYFWD_H 1

       
# 47 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/memoryfwd.h" 3




# 50 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/memoryfwd.h" 3
namespace std __attribute__ ((__visibility__ ("default")))
{

# 64 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/memoryfwd.h" 3
  template<typename>
    class allocator;

  template<>
    class allocator<void>;




  template<typename, typename>
    struct uses_allocator;

  template<typename>
    struct allocator_traits;





}
# 64 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/memory" 2 3

# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/allocator.h" 1 3
# 44 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/allocator.h" 3
#define _ALLOCATOR_H 1

# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/c++allocator.h" 1 3
# 31 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/c++allocator.h" 3
#define _GLIBCXX_CXX_ALLOCATOR_H 1

# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/new_allocator.h" 1 3
# 31 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/new_allocator.h" 3
#define _STD_NEW_ALLOCATOR_H 1
# 41 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/new_allocator.h" 3
namespace std __attribute__ ((__visibility__ ("default")))
{

# 62 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/new_allocator.h" 3
  template<typename _Tp>
    class __new_allocator
    {
    public:
      typedef _Tp value_type;
      typedef std::size_t size_type;
      typedef std::ptrdiff_t difference_type;

      typedef _Tp* pointer;
      typedef const _Tp* const_pointer;
      typedef _Tp& reference;
      typedef const _Tp& const_reference;

      template<typename _Tp1>
 struct rebind
 { typedef __new_allocator<_Tp1> other; };





      typedef std::true_type propagate_on_container_move_assignment;


      __attribute__((__always_inline__))
     
      __new_allocator() noexcept { }

      __attribute__((__always_inline__))
     
      __new_allocator(const __new_allocator&) noexcept { }

      template<typename _Tp1>
 __attribute__((__always_inline__))

 __new_allocator(const __new_allocator<_Tp1>&) noexcept { }


      ~__new_allocator() noexcept { }

      pointer
      address(reference __x) const noexcept
      { return std::__addressof(__x); }

      const_pointer
      address(const_reference __x) const noexcept
      { return std::__addressof(__x); }






#define _GLIBCXX_OPERATOR_NEW ::operator new
#define _GLIBCXX_OPERATOR_DELETE ::operator delete




      _Tp*
      allocate(size_type __n, const void* = static_cast<const void*>(0))
      {



 static_assert(sizeof(_Tp) != 0, "cannot allocate incomplete types");


 if (__builtin_expect(__n > this->_M_max_size(), false))
   {


     if (__n > (std::size_t(-1) / sizeof(_Tp)))
       std::__throw_bad_array_new_length();
     std::__throw_bad_alloc();
   }
# 147 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/new_allocator.h" 3
 return static_cast<_Tp*>(::operator new(__n * sizeof(_Tp)));
      }


      void
      deallocate(_Tp* __p, size_type __n __attribute__ ((__unused__)))
      {



#define _GLIBCXX_SIZED_DEALLOC(p,n) (p)
# 168 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/new_allocator.h" 3
 ::operator delete((__p));
      }

#undef _GLIBCXX_SIZED_DEALLOC
#undef _GLIBCXX_OPERATOR_DELETE
#undef _GLIBCXX_OPERATOR_NEW


      __attribute__((__always_inline__))
      size_type
      max_size() const noexcept
      { return _M_max_size(); }


      template<typename _Up, typename... _Args>
 __attribute__((__always_inline__))
 void
 construct(_Up* __p, _Args&&... __args)
 noexcept(std::is_nothrow_constructible<_Up, _Args...>::value)
 { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }

      template<typename _Up>
 __attribute__((__always_inline__))
 void
 destroy(_Up* __p)
 noexcept(std::is_nothrow_destructible<_Up>::value)
 { __p->~_Up(); }
# 209 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/new_allocator.h" 3
      template<typename _Up>
 friend __attribute__((__always_inline__)) bool
 operator==(const __new_allocator&, const __new_allocator<_Up>&)
 noexcept
 { return true; }


      template<typename _Up>
 friend __attribute__((__always_inline__)) bool
 operator!=(const __new_allocator&, const __new_allocator<_Up>&)
 noexcept
 { return false; }


    private:
      __attribute__((__always_inline__))
      constexpr size_type
      _M_max_size() const noexcept
      {

 return std::size_t(0x7fffffffffffffffL) / sizeof(_Tp);



      }
    };


}
# 34 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/c++allocator.h" 2 3


namespace std
{
# 46 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/c++allocator.h" 3
  template<typename _Tp>
    using __allocator_base = __new_allocator<_Tp>;
}
# 47 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/allocator.h" 2 3





#define __cpp_lib_incomplete_container_elements 201505L

namespace std __attribute__ ((__visibility__ ("default")))
{

# 74 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/allocator.h" 3
  template<>
    class allocator<void>
    {
    public:
      typedef void value_type;
      typedef size_t size_type;
      typedef ptrdiff_t difference_type;



      typedef void* pointer;
      typedef const void* const_pointer;

      template<typename _Tp1>
 struct rebind
 { typedef allocator<_Tp1> other; };





      using propagate_on_container_move_assignment = true_type;

      using is_always_equal

 = true_type;
# 117 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/allocator.h" 3
    };
# 129 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/allocator.h" 3
  template<typename _Tp>
    class allocator : public __allocator_base<_Tp>
    {
    public:
      typedef _Tp value_type;
      typedef size_t size_type;
      typedef ptrdiff_t difference_type;



      typedef _Tp* pointer;
      typedef const _Tp* const_pointer;
      typedef _Tp& reference;
      typedef const _Tp& const_reference;

      template<typename _Tp1>
 struct rebind
 { typedef allocator<_Tp1> other; };





      using propagate_on_container_move_assignment = true_type;

      using is_always_equal

 = true_type;




      __attribute__((__always_inline__))
     
      allocator() noexcept { }

      __attribute__((__always_inline__))
     
      allocator(const allocator& __a) noexcept
      : __allocator_base<_Tp>(__a) { }



      allocator& operator=(const allocator&) = default;


      template<typename _Tp1>
 __attribute__((__always_inline__))

 allocator(const allocator<_Tp1>&) noexcept { }

      __attribute__((__always_inline__))



      ~allocator() noexcept { }
# 214 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/allocator.h" 3
      friend __attribute__((__always_inline__))
      bool
      operator==(const allocator&, const allocator&) noexcept
      { return true; }


      friend __attribute__((__always_inline__))
      bool
      operator!=(const allocator&, const allocator&) noexcept
      { return false; }



    };






  template<typename _T1, typename _T2>
    __attribute__((__always_inline__))
    inline bool
    operator==(const allocator<_T1>&, const allocator<_T2>&)
    noexcept
    { return true; }


  template<typename _T1, typename _T2>
    __attribute__((__always_inline__))
    inline bool
    operator!=(const allocator<_T1>&, const allocator<_T2>&)
    noexcept
    { return false; }






  template<typename _Tp>
    class allocator<const _Tp>
    {
    public:
      typedef _Tp value_type;
      template<typename _Up> allocator(const allocator<_Up>&) { }
    };

  template<typename _Tp>
    class allocator<volatile _Tp>
    {
    public:
      typedef _Tp value_type;
      template<typename _Up> allocator(const allocator<_Up>&) { }
    };

  template<typename _Tp>
    class allocator<const volatile _Tp>
    {
    public:
      typedef _Tp value_type;
      template<typename _Up> allocator(const allocator<_Up>&) { }
    };







  extern template class allocator<char>;
  extern template class allocator<wchar_t>;



#undef __allocator_base


}
# 66 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/memory" 2 3
# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_tempbuf.h" 1 3
# 57 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_tempbuf.h" 3
#define _STL_TEMPBUF_H 1



# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_construct.h" 1 3
# 57 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_construct.h" 3
#define _STL_CONSTRUCT_H 1



# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator_base_types.h" 1 3
# 60 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator_base_types.h" 3
#define _STL_ITERATOR_BASE_TYPES_H 1

       
# 63 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator_base_types.h" 3
# 74 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator_base_types.h" 3
namespace std __attribute__ ((__visibility__ ("default")))
{

# 93 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator_base_types.h" 3
  struct input_iterator_tag { };


  struct output_iterator_tag { };


  struct forward_iterator_tag : public input_iterator_tag { };



  struct bidirectional_iterator_tag : public forward_iterator_tag { };



  struct random_access_iterator_tag : public bidirectional_iterator_tag { };
# 125 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator_base_types.h" 3
  template<typename _Category, typename _Tp, typename _Distance = ptrdiff_t,
           typename _Pointer = _Tp*, typename _Reference = _Tp&>
    struct iterator
    {

      typedef _Category iterator_category;

      typedef _Tp value_type;

      typedef _Distance difference_type;

      typedef _Pointer pointer;

      typedef _Reference reference;
    };
# 149 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator_base_types.h" 3
  template<typename _Iterator>
    struct iterator_traits;




  template<typename _Iterator, typename = __void_t<>>
    struct __iterator_traits { };



  template<typename _Iterator>
    struct __iterator_traits<_Iterator,
        __void_t<typename _Iterator::iterator_category,
          typename _Iterator::value_type,
          typename _Iterator::difference_type,
          typename _Iterator::pointer,
          typename _Iterator::reference>>
    {
      typedef typename _Iterator::iterator_category iterator_category;
      typedef typename _Iterator::value_type value_type;
      typedef typename _Iterator::difference_type difference_type;
      typedef typename _Iterator::pointer pointer;
      typedef typename _Iterator::reference reference;
    };


  template<typename _Iterator>
    struct iterator_traits
    : public __iterator_traits<_Iterator> { };
# 209 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator_base_types.h" 3
  template<typename _Tp>
    struct iterator_traits<_Tp*>
    {
      typedef random_access_iterator_tag iterator_category;
      typedef _Tp value_type;
      typedef ptrdiff_t difference_type;
      typedef _Tp* pointer;
      typedef _Tp& reference;
    };


  template<typename _Tp>
    struct iterator_traits<const _Tp*>
    {
      typedef random_access_iterator_tag iterator_category;
      typedef _Tp value_type;
      typedef ptrdiff_t difference_type;
      typedef const _Tp* pointer;
      typedef const _Tp& reference;
    };






  template<typename _Iter>
    __attribute__((__always_inline__))
    inline constexpr
    typename iterator_traits<_Iter>::iterator_category
    __iterator_category(const _Iter&)
    { return typename iterator_traits<_Iter>::iterator_category(); }




  template<typename _Iter>
    using __iterator_category_t
      = typename iterator_traits<_Iter>::iterator_category;

  template<typename _InIter>
    using _RequireInputIter =
      __enable_if_t<is_convertible<__iterator_category_t<_InIter>,
       input_iterator_tag>::value>;

  template<typename _It,
    typename _Cat = __iterator_category_t<_It>>
    struct __is_random_access_iter
      : is_base_of<random_access_iterator_tag, _Cat>
    {
      typedef is_base_of<random_access_iterator_tag, _Cat> _Base;
      enum { __value = _Base::value };
    };








}
# 62 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_construct.h" 2 3
# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator_base_funcs.h" 1 3
# 60 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator_base_funcs.h" 3
#define _STL_ITERATOR_BASE_FUNCS_H 1

       
# 63 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator_base_funcs.h" 3

# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/concept_check.h" 1 3
# 31 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/concept_check.h" 3
#define _CONCEPT_CHECK_H 1

       
# 34 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/concept_check.h" 3
# 48 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/concept_check.h" 3
#define __glibcxx_function_requires(...) 
#define __glibcxx_class_requires(_a,_b) 
#define __glibcxx_class_requires2(_a,_b,_c) 
#define __glibcxx_class_requires3(_a,_b,_c,_d) 
#define __glibcxx_class_requires4(_a,_b,_c,_d,_e) 
# 65 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator_base_funcs.h" 2 3
# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/debug/assertions.h" 1 3
# 30 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/debug/assertions.h" 3
#define _GLIBCXX_DEBUG_ASSERTIONS_H 1




#define __glibcxx_requires_non_empty_range(_First,_Last) 
#define __glibcxx_requires_nonempty() 
#define __glibcxx_requires_subscript(_N) 
# 63 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/debug/assertions.h" 3
#define _GLIBCXX_DEBUG_ASSERT(_Condition) 
#define _GLIBCXX_DEBUG_PEDASSERT(_Condition) 
#define _GLIBCXX_DEBUG_ONLY(_Statement) 
# 66 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator_base_funcs.h" 2 3


namespace std __attribute__ ((__visibility__ ("default")))
{




  template <typename> struct _List_iterator;
  template <typename> struct _List_const_iterator;


  template<typename _InputIterator>
    inline
    typename iterator_traits<_InputIterator>::difference_type
    __distance(_InputIterator __first, _InputIterator __last,
               input_iterator_tag)
    {

     

      typename iterator_traits<_InputIterator>::difference_type __n = 0;
      while (__first != __last)
 {
   ++__first;
   ++__n;
 }
      return __n;
    }

  template<typename _RandomAccessIterator>
    __attribute__((__always_inline__))
    inline
    typename iterator_traits<_RandomAccessIterator>::difference_type
    __distance(_RandomAccessIterator __first, _RandomAccessIterator __last,
               random_access_iterator_tag)
    {

     

      return __last - __first;
    }



  template<typename _Tp>
    ptrdiff_t
    __distance(std::_List_iterator<_Tp>,
        std::_List_iterator<_Tp>,
        input_iterator_tag);

  template<typename _Tp>
    ptrdiff_t
    __distance(std::_List_const_iterator<_Tp>,
        std::_List_const_iterator<_Tp>,
        input_iterator_tag);




  template<typename _OutputIterator>
    void
    __distance(_OutputIterator, _OutputIterator, output_iterator_tag) = delete;
# 144 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator_base_funcs.h" 3
  template<typename _InputIterator>
    __attribute__((__always_inline__))
    inline
    typename iterator_traits<_InputIterator>::difference_type
    distance(_InputIterator __first, _InputIterator __last)
    {

      return std::__distance(__first, __last,
        std::__iterator_category(__first));
    }

  template<typename _InputIterator, typename _Distance>
    inline void
    __advance(_InputIterator& __i, _Distance __n, input_iterator_tag)
    {

     
      do { if (std::__is_constant_evaluated() && !bool(__n >= 0)) __builtin_unreachable(); } while (false);
      while (__n--)
 ++__i;
    }

  template<typename _BidirectionalIterator, typename _Distance>
    inline void
    __advance(_BidirectionalIterator& __i, _Distance __n,
       bidirectional_iterator_tag)
    {

     

      if (__n > 0)
        while (__n--)
   ++__i;
      else
        while (__n++)
   --__i;
    }

  template<typename _RandomAccessIterator, typename _Distance>
    inline void
    __advance(_RandomAccessIterator& __i, _Distance __n,
              random_access_iterator_tag)
    {

     

      if (__builtin_constant_p(__n) && __n == 1)
 ++__i;
      else if (__builtin_constant_p(__n) && __n == -1)
 --__i;
      else
 __i += __n;
    }



  template<typename _OutputIterator, typename _Distance>
    void
    __advance(_OutputIterator&, _Distance, output_iterator_tag) = delete;
# 217 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator_base_funcs.h" 3
  template<typename _InputIterator, typename _Distance>
    __attribute__((__always_inline__))
    inline void
    advance(_InputIterator& __i, _Distance __n)
    {

      typename iterator_traits<_InputIterator>::difference_type __d = __n;
      std::__advance(__i, __d, std::__iterator_category(__i));
    }



  template<typename _InputIterator>
    [[__gnu__::__always_inline__]]
    inline _InputIterator
    next(_InputIterator __x, typename
  iterator_traits<_InputIterator>::difference_type __n = 1)
    {

     
      std::advance(__x, __n);
      return __x;
    }

  template<typename _BidirectionalIterator>
    [[__gnu__::__always_inline__]]
    inline _BidirectionalIterator
    prev(_BidirectionalIterator __x, typename
  iterator_traits<_BidirectionalIterator>::difference_type __n = 1)
    {

     

      std::advance(__x, -__n);
      return __x;
    }




}
# 63 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_construct.h" 2 3
# 73 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_construct.h" 3
namespace std __attribute__ ((__visibility__ ("default")))
{

# 106 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_construct.h" 3
  template<typename _Tp, typename... _Args>
   
    inline void
    _Construct(_Tp* __p, _Args&&... __args)
    {
# 119 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_construct.h" 3
      ::new((void*)__p) _Tp(std::forward<_Args>(__args)...);
    }
# 132 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_construct.h" 3
  template<typename _T1>
    inline void
    _Construct_novalue(_T1* __p)
    { ::new((void*)__p) _T1; }

  template<typename _ForwardIterator>
    void
    _Destroy(_ForwardIterator __first, _ForwardIterator __last);




  template<typename _Tp>
    inline void
    _Destroy(_Tp* __pointer)
    {



      __pointer->~_Tp();

    }

  template<bool>
    struct _Destroy_aux
    {
      template<typename _ForwardIterator>
 static void
 __destroy(_ForwardIterator __first, _ForwardIterator __last)
 {
   for (; __first != __last; ++__first)
     std::_Destroy(std::__addressof(*__first));
 }
    };

  template<>
    struct _Destroy_aux<true>
    {
      template<typename _ForwardIterator>
        static void
        __destroy(_ForwardIterator, _ForwardIterator) { }
    };






  template<typename _ForwardIterator>
    inline void
    _Destroy(_ForwardIterator __first, _ForwardIterator __last)
    {
      typedef typename iterator_traits<_ForwardIterator>::value_type
                       _Value_type;


      static_assert(is_destructible<_Value_type>::value,
      "value type is destructible");





      std::_Destroy_aux<__has_trivial_destructor(_Value_type)>::
 __destroy(__first, __last);
    }

  template<bool>
    struct _Destroy_n_aux
    {
      template<typename _ForwardIterator, typename _Size>
 static _ForwardIterator
 __destroy_n(_ForwardIterator __first, _Size __count)
 {
   for (; __count > 0; (void)++__first, --__count)
     std::_Destroy(std::__addressof(*__first));
   return __first;
 }
    };

  template<>
    struct _Destroy_n_aux<true>
    {
      template<typename _ForwardIterator, typename _Size>
        static _ForwardIterator
        __destroy_n(_ForwardIterator __first, _Size __count)
 {
   std::advance(__first, __count);
   return __first;
 }
    };






  template<typename _ForwardIterator, typename _Size>
    inline _ForwardIterator
    _Destroy_n(_ForwardIterator __first, _Size __count)
    {
      typedef typename iterator_traits<_ForwardIterator>::value_type
                       _Value_type;


      static_assert(is_destructible<_Value_type>::value,
      "value type is destructible");





      return std::_Destroy_n_aux<__has_trivial_destructor(_Value_type)>::
 __destroy_n(__first, __count);
    }
# 264 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_construct.h" 3

}
# 62 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_tempbuf.h" 2 3

# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/ext/numeric_traits.h" 1 3
# 30 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/ext/numeric_traits.h" 3
#define _EXT_NUMERIC_TRAITS 1

       
# 33 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/ext/numeric_traits.h" 3




namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
{

# 50 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/ext/numeric_traits.h" 3
  template<typename _Tp>
    struct __is_integer_nonstrict
    : public std::__is_integer<_Tp>
    {
      using std::__is_integer<_Tp>::__value;


      enum { __width = __value ? sizeof(_Tp) * 8 : 0 };
    };

  template<typename _Value>
    struct __numeric_traits_integer
    {

      static_assert(__is_integer_nonstrict<_Value>::__value,
      "invalid specialization");




      static const bool __is_signed = (_Value)(-1) < 0;
      static const int __digits
 = __is_integer_nonstrict<_Value>::__width - __is_signed;


      static const _Value __max = __is_signed
 ? (((((_Value)1 << (__digits - 1)) - 1) << 1) + 1)
 : ~(_Value)0;
      static const _Value __min = __is_signed ? -__max - 1 : (_Value)0;
    };

  template<typename _Value>
    const _Value __numeric_traits_integer<_Value>::__min;

  template<typename _Value>
    const _Value __numeric_traits_integer<_Value>::__max;

  template<typename _Value>
    const bool __numeric_traits_integer<_Value>::__is_signed;

  template<typename _Value>
    const int __numeric_traits_integer<_Value>::__digits;



#define _GLIBCXX_INT_N_TRAITS(T,WIDTH) __extension__ template<> struct __is_integer_nonstrict<T> { enum { __value = 1 }; typedef std::__true_type __type; enum { __width = WIDTH }; }; __extension__ template<> struct __is_integer_nonstrict<unsigned T> { enum { __value = 1 }; typedef std::__true_type __type; enum { __width = WIDTH }; };
# 130 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/ext/numeric_traits.h" 3
  __extension__ template<> struct __is_integer_nonstrict<__int128> { enum { __value = 1 }; typedef std::__true_type __type; enum { __width = 128 }; }; __extension__ template<> struct __is_integer_nonstrict<unsigned __int128> { enum { __value = 1 }; typedef std::__true_type __type; enum { __width = 128 }; };


#undef _GLIBCXX_INT_N_TRAITS



  template<typename _Tp>
    using __int_traits = __numeric_traits_integer<_Tp>;


#define __glibcxx_floating(_Tp,_Fval,_Dval,_LDval) (std::__are_same<_Tp, float>::__value ? _Fval : std::__are_same<_Tp, double>::__value ? _Dval : _LDval)



#define __glibcxx_max_digits10(_Tp) (2 + __glibcxx_floating(_Tp, __FLT_MANT_DIG__, __DBL_MANT_DIG__, __LDBL_MANT_DIG__) * 643L / 2136)



#define __glibcxx_digits10(_Tp) __glibcxx_floating(_Tp, __FLT_DIG__, __DBL_DIG__, __LDBL_DIG__)


#define __glibcxx_max_exponent10(_Tp) __glibcxx_floating(_Tp, __FLT_MAX_10_EXP__, __DBL_MAX_10_EXP__, __LDBL_MAX_10_EXP__)




  template<typename _Value>
    struct __numeric_traits_floating
    {

      static const int __max_digits10 = (2 + (std::__are_same<_Value, float>::__value ? 24 : std::__are_same<_Value, double>::__value ? 53 : 113) * 643L / 2136);


      static const bool __is_signed = true;
      static const int __digits10 = (std::__are_same<_Value, float>::__value ? 6 : std::__are_same<_Value, double>::__value ? 15 : 33);
      static const int __max_exponent10 = (std::__are_same<_Value, float>::__value ? 38 : std::__are_same<_Value, double>::__value ? 308 : 4932);
    };

  template<typename _Value>
    const int __numeric_traits_floating<_Value>::__max_digits10;

  template<typename _Value>
    const bool __numeric_traits_floating<_Value>::__is_signed;

  template<typename _Value>
    const int __numeric_traits_floating<_Value>::__digits10;

  template<typename _Value>
    const int __numeric_traits_floating<_Value>::__max_exponent10;

#undef __glibcxx_floating
#undef __glibcxx_max_digits10
#undef __glibcxx_digits10
#undef __glibcxx_max_exponent10

  template<typename _Value>
    struct __numeric_traits
    : public __numeric_traits_integer<_Value>
    { };

  template<>
    struct __numeric_traits<float>
    : public __numeric_traits_floating<float>
    { };

  template<>
    struct __numeric_traits<double>
    : public __numeric_traits_floating<double>
    { };

  template<>
    struct __numeric_traits<long double>
    : public __numeric_traits_floating<long double>
    { };
# 238 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/ext/numeric_traits.h" 3

}
# 64 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_tempbuf.h" 2 3

namespace std __attribute__ ((__visibility__ ("default")))
{


  namespace __detail
  {
    template<typename _Tp>
      inline void
      __return_temporary_buffer(_Tp* __p,
    size_t __len __attribute__((__unused__)))
      {



 ::operator delete(__p);

      }
  }
# 101 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_tempbuf.h" 3
  template<typename _Tp>
   
    pair<_Tp*, ptrdiff_t>
    get_temporary_buffer(ptrdiff_t __len) noexcept
    {
      const ptrdiff_t __max =
 __gnu_cxx::__numeric_traits<ptrdiff_t>::__max / sizeof(_Tp);
      if (__len > __max)
 __len = __max;

      while (__len > 0)
 {
   _Tp* __tmp = static_cast<_Tp*>(::operator new(__len * sizeof(_Tp),
       std::nothrow));
   if (__tmp != 0)
     return std::pair<_Tp*, ptrdiff_t>(__tmp, __len);
   __len = __len == 1 ? 0 : ((__len + 1) / 2);
 }
      return std::pair<_Tp*, ptrdiff_t>(static_cast<_Tp*>(0), 0);
    }
# 129 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_tempbuf.h" 3
  template<typename _Tp>
    inline void
    return_temporary_buffer(_Tp* __p)
    { ::operator delete(__p); }






  template<typename _ForwardIterator, typename _Tp>
    class _Temporary_buffer
    {

     

    public:
      typedef _Tp value_type;
      typedef value_type* pointer;
      typedef pointer iterator;
      typedef ptrdiff_t size_type;

    protected:
      size_type _M_original_len;
      size_type _M_len;
      pointer _M_buffer;

    public:

      size_type
      size() const
      { return _M_len; }


      size_type
      requested_size() const
      { return _M_original_len; }


      iterator
      begin()
      { return _M_buffer; }


      iterator
      end()
      { return _M_buffer + _M_len; }





      _Temporary_buffer(_ForwardIterator __seed, size_type __original_len);

      ~_Temporary_buffer()
      {
 std::_Destroy(_M_buffer, _M_buffer + _M_len);
 std::__detail::__return_temporary_buffer(_M_buffer, _M_len);
      }

    private:

      _Temporary_buffer(const _Temporary_buffer&);

      void
      operator=(const _Temporary_buffer&);
    };


  template<bool>
    struct __uninitialized_construct_buf_dispatch
    {
      template<typename _Pointer, typename _ForwardIterator>
        static void
        __ucr(_Pointer __first, _Pointer __last,
       _ForwardIterator __seed)
        {
   if (__first == __last)
     return;

   _Pointer __cur = __first;
   if (true)
     {
       std::_Construct(std::__addressof(*__first),
         std::move(*__seed));
       _Pointer __prev = __cur;
       ++__cur;
       for(; __cur != __last; ++__cur, ++__prev)
  std::_Construct(std::__addressof(*__cur),
    std::move(*__prev));
       *__seed = std::move(*__prev);
     }
   if (false)
     {
       std::_Destroy(__first, __cur);
       ;
     }
 }
    };

  template<>
    struct __uninitialized_construct_buf_dispatch<true>
    {
      template<typename _Pointer, typename _ForwardIterator>
        static void
        __ucr(_Pointer, _Pointer, _ForwardIterator) { }
    };
# 247 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_tempbuf.h" 3
  template<typename _Pointer, typename _ForwardIterator>
    inline void
    __uninitialized_construct_buf(_Pointer __first, _Pointer __last,
      _ForwardIterator __seed)
    {
      typedef typename std::iterator_traits<_Pointer>::value_type
 _ValueType;

      std::__uninitialized_construct_buf_dispatch<
        __has_trivial_constructor(_ValueType)>::
   __ucr(__first, __last, __seed);
    }

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
  template<typename _ForwardIterator, typename _Tp>
    _Temporary_buffer<_ForwardIterator, _Tp>::
    _Temporary_buffer(_ForwardIterator __seed, size_type __original_len)
    : _M_original_len(__original_len), _M_len(0), _M_buffer(0)
    {
      std::pair<pointer, size_type> __p(
  std::get_temporary_buffer<value_type>(_M_original_len));

      if (__p.first)
 {
   if (true)
     {
       std::__uninitialized_construct_buf(__p.first, __p.first + __p.second,
       __seed);
       _M_buffer = __p.first;
       _M_len = __p.second;
     }
   if (false)
     {
       std::__detail::__return_temporary_buffer(__p.first, __p.second);
       ;
     }
 }
    }
#pragma GCC diagnostic pop


}
# 67 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/memory" 2 3


# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_uninitialized.h" 1 3
# 57 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_uninitialized.h" 3
#define _STL_UNINITIALIZED_H 1





# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algobase.h" 1 3
# 57 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algobase.h" 3
#define _STL_ALGOBASE_H 1
# 67 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algobase.h" 3
# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator.h" 1 3
# 61 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator.h" 3
#define _STL_ITERATOR_H 1





# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/ptr_traits.h" 1 3
# 31 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/ptr_traits.h" 3
#define _PTR_TRAITS_H 1
# 46 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/ptr_traits.h" 3
namespace std __attribute__ ((__visibility__ ("default")))
{




  class __undefined;



  template<typename _Tp>
    struct __get_first_arg
    { using type = __undefined; };

  template<template<typename, typename...> class _SomeTemplate, typename _Tp,
           typename... _Types>
    struct __get_first_arg<_SomeTemplate<_Tp, _Types...>>
    { using type = _Tp; };



  template<typename _Tp, typename _Up>
    struct __replace_first_arg
    { };

  template<template<typename, typename...> class _SomeTemplate, typename _Up,
           typename _Tp, typename... _Types>
    struct __replace_first_arg<_SomeTemplate<_Tp, _Types...>, _Up>
    { using type = _SomeTemplate<_Up, _Types...>; };


  template<typename _Ptr, typename = void>
    struct __ptr_traits_elem : __get_first_arg<_Ptr>
    { };







  template<typename _Ptr>
    struct __ptr_traits_elem<_Ptr, __void_t<typename _Ptr::element_type>>
    { using type = typename _Ptr::element_type; };


  template<typename _Ptr>
    using __ptr_traits_elem_t = typename __ptr_traits_elem<_Ptr>::type;




  template<typename _Ptr, typename _Elt, bool = is_void<_Elt>::value>
    struct __ptr_traits_ptr_to
    {
      using pointer = _Ptr;
      using element_type = _Elt;







      static pointer
      pointer_to(element_type& __r)





      { return pointer::pointer_to(__r); }
    };


  template<typename _Ptr, typename _Elt>
    struct __ptr_traits_ptr_to<_Ptr, _Elt, true>
    { };


  template<typename _Tp>
    struct __ptr_traits_ptr_to<_Tp*, _Tp, false>
    {
      using pointer = _Tp*;
      using element_type = _Tp;






      static pointer
      pointer_to(element_type& __r) noexcept
      { return std::addressof(__r); }
    };

  template<typename _Ptr, typename _Elt>
    struct __ptr_traits_impl : __ptr_traits_ptr_to<_Ptr, _Elt>
    {
    private:
      template<typename _Tp>
 using __diff_t = typename _Tp::difference_type;

      template<typename _Tp, typename _Up>
 using __rebind = __type_identity<typename _Tp::template rebind<_Up>>;

    public:

      using pointer = _Ptr;


      using element_type = _Elt;


      using difference_type = __detected_or_t<ptrdiff_t, __diff_t, _Ptr>;


      template<typename _Up>
 using rebind = typename __detected_or_t<__replace_first_arg<_Ptr, _Up>,
      __rebind, _Ptr, _Up>::type;
    };



  template<typename _Ptr>
    struct __ptr_traits_impl<_Ptr, __undefined>
    { };







  template<typename _Ptr>
    struct pointer_traits : __ptr_traits_impl<_Ptr, __ptr_traits_elem_t<_Ptr>>
    { };







  template<typename _Tp>
    struct pointer_traits<_Tp*> : __ptr_traits_ptr_to<_Tp*, _Tp>
    {

      typedef _Tp* pointer;

      typedef _Tp element_type;

      typedef ptrdiff_t difference_type;

      template<typename _Up> using rebind = _Up*;
    };


  template<typename _Ptr, typename _Tp>
    using __ptr_rebind = typename pointer_traits<_Ptr>::template rebind<_Tp>;

  template<typename _Tp>
    constexpr _Tp*
    __to_address(_Tp* __ptr) noexcept
    {
      static_assert(!std::is_function<_Tp>::value, "not a function pointer");
      return __ptr;
    }


  template<typename _Ptr>
    constexpr typename std::pointer_traits<_Ptr>::element_type*
    __to_address(const _Ptr& __ptr)
    { return std::__to_address(__ptr.operator->()); }
# 263 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/ptr_traits.h" 3

}
# 68 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator.h" 2 3
# 88 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator.h" 3
namespace std __attribute__ ((__visibility__ ("default")))
{

# 109 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator.h" 3
 
# 109 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator.h" 3
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
# 131 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator.h" 3
  template<typename _Iterator>
    class reverse_iterator
    : public iterator<typename iterator_traits<_Iterator>::iterator_category,
        typename iterator_traits<_Iterator>::value_type,
        typename iterator_traits<_Iterator>::difference_type,
        typename iterator_traits<_Iterator>::pointer,
                      typename iterator_traits<_Iterator>::reference>
    {
      template<typename _Iter>
 friend class reverse_iterator;
# 150 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator.h" 3
    protected:
      _Iterator current;

      typedef iterator_traits<_Iterator> __traits_type;

    public:
      typedef _Iterator iterator_type;
      typedef typename __traits_type::pointer pointer;

      typedef typename __traits_type::difference_type difference_type;
      typedef typename __traits_type::reference reference;
# 181 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator.h" 3
     
      reverse_iterator()
      noexcept(noexcept(_Iterator()))
      : current()
      { }




      explicit
      reverse_iterator(iterator_type __x)
      noexcept(noexcept(_Iterator(__x)))
      : current(__x)
      { }




     
      reverse_iterator(const reverse_iterator& __x)
      noexcept(noexcept(_Iterator(__x.current)))
      : current(__x.current)
      { }


      reverse_iterator& operator=(const reverse_iterator&) = default;






      template<typename _Iter>




        reverse_iterator(const reverse_iterator<_Iter>& __x)
 noexcept(noexcept(_Iterator(__x.current)))
 : current(__x.current)
 { }


      template<typename _Iter>





 reverse_iterator&
 operator=(const reverse_iterator<_Iter>& __x)
 noexcept(noexcept(current = __x.current))
 {
   current = __x.current;
   return *this;
 }





     
      iterator_type
      base() const
      noexcept(noexcept(_Iterator(current)))
      { return current; }
# 258 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator.h" 3
     
      reference
      operator*() const
      {
 _Iterator __tmp = current;
 return *--__tmp;
      }






     
      pointer
      operator->() const




      {


 _Iterator __tmp = current;
 --__tmp;
 return _S_to_pointer(__tmp);
      }






      reverse_iterator&
      operator++()
      {
 --current;
 return *this;
      }






      reverse_iterator
      operator++(int)
      {
 reverse_iterator __tmp = *this;
 --current;
 return __tmp;
      }






      reverse_iterator&
      operator--()
      {
 ++current;
 return *this;
      }






      reverse_iterator
      operator--(int)
      {
 reverse_iterator __tmp = *this;
 ++current;
 return __tmp;
      }






     
      reverse_iterator
      operator+(difference_type __n) const
      { return reverse_iterator(current - __n); }







      reverse_iterator&
      operator+=(difference_type __n)
      {
 current -= __n;
 return *this;
      }






     
      reverse_iterator
      operator-(difference_type __n) const
      { return reverse_iterator(current + __n); }







      reverse_iterator&
      operator-=(difference_type __n)
      {
 current += __n;
 return *this;
      }






     
      reference
      operator[](difference_type __n) const
      { return *(*this + __n); }
# 418 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator.h" 3
    private:
      template<typename _Tp>
 static _Tp*
 _S_to_pointer(_Tp* __p)
        { return __p; }

      template<typename _Tp>
 static pointer
 _S_to_pointer(_Tp __t)
        { return __t.operator->(); }
    };
# 441 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator.h" 3
  template<typename _Iterator>
   
    inline bool
    operator==(const reverse_iterator<_Iterator>& __x,
        const reverse_iterator<_Iterator>& __y)
    { return __x.base() == __y.base(); }

  template<typename _Iterator>
   
    inline bool
    operator<(const reverse_iterator<_Iterator>& __x,
       const reverse_iterator<_Iterator>& __y)
    { return __y.base() < __x.base(); }

  template<typename _Iterator>
   
    inline bool
    operator!=(const reverse_iterator<_Iterator>& __x,
        const reverse_iterator<_Iterator>& __y)
    { return !(__x == __y); }

  template<typename _Iterator>
   
    inline bool
    operator>(const reverse_iterator<_Iterator>& __x,
       const reverse_iterator<_Iterator>& __y)
    { return __y < __x; }

  template<typename _Iterator>
   
    inline bool
    operator<=(const reverse_iterator<_Iterator>& __x,
        const reverse_iterator<_Iterator>& __y)
    { return !(__y < __x); }

  template<typename _Iterator>
   
    inline bool
    operator>=(const reverse_iterator<_Iterator>& __x,
        const reverse_iterator<_Iterator>& __y)
    { return !(__x < __y); }




  template<typename _IteratorL, typename _IteratorR>
   
    inline bool
    operator==(const reverse_iterator<_IteratorL>& __x,
        const reverse_iterator<_IteratorR>& __y)
    { return __x.base() == __y.base(); }

  template<typename _IteratorL, typename _IteratorR>
   
    inline bool
    operator<(const reverse_iterator<_IteratorL>& __x,
       const reverse_iterator<_IteratorR>& __y)
    { return __x.base() > __y.base(); }

  template<typename _IteratorL, typename _IteratorR>
   
    inline bool
    operator!=(const reverse_iterator<_IteratorL>& __x,
        const reverse_iterator<_IteratorR>& __y)
    { return __x.base() != __y.base(); }

  template<typename _IteratorL, typename _IteratorR>
   
    inline bool
    operator>(const reverse_iterator<_IteratorL>& __x,
       const reverse_iterator<_IteratorR>& __y)
    { return __x.base() < __y.base(); }

  template<typename _IteratorL, typename _IteratorR>
    inline bool
    operator<=(const reverse_iterator<_IteratorL>& __x,
        const reverse_iterator<_IteratorR>& __y)
    { return __x.base() >= __y.base(); }

  template<typename _IteratorL, typename _IteratorR>
   
    inline bool
    operator>=(const reverse_iterator<_IteratorL>& __x,
        const reverse_iterator<_IteratorR>& __y)
    { return __x.base() <= __y.base(); }
# 618 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator.h" 3
  template<typename _IteratorL, typename _IteratorR>
    [[__nodiscard__]]
    inline auto
    operator-(const reverse_iterator<_IteratorL>& __x,
       const reverse_iterator<_IteratorR>& __y)
    -> decltype(__y.base() - __x.base())
    { return __y.base() - __x.base(); }


  template<typename _Iterator>
   
    inline reverse_iterator<_Iterator>
    operator+(typename reverse_iterator<_Iterator>::difference_type __n,
       const reverse_iterator<_Iterator>& __x)
    { return reverse_iterator<_Iterator>(__x.base() - __n); }



  template<typename _Iterator>
    inline reverse_iterator<_Iterator>
    __make_reverse_iterator(_Iterator __i)
    { return reverse_iterator<_Iterator>(__i); }
# 662 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator.h" 3
  template<typename _Iterator>
   
    auto
    __niter_base(reverse_iterator<_Iterator> __it)
    -> decltype(__make_reverse_iterator(__niter_base(__it.base())))
    { return __make_reverse_iterator(__niter_base(__it.base())); }

  template<typename _Iterator>
    struct __is_move_iterator<reverse_iterator<_Iterator> >
      : __is_move_iterator<_Iterator>
    { };

  template<typename _Iterator>
   
    auto
    __miter_base(reverse_iterator<_Iterator> __it)
    -> decltype(__make_reverse_iterator(__miter_base(__it.base())))
    { return __make_reverse_iterator(__miter_base(__it.base())); }
# 693 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator.h" 3
  template<typename _Container>
    class back_insert_iterator
    : public iterator<output_iterator_tag, void, void, void, void>
    {
    protected:
      _Container* container;

    public:

      typedef _Container container_type;





      explicit
      back_insert_iterator(_Container& __x)
      : container(std::__addressof(__x)) { }
# 731 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator.h" 3
     
      back_insert_iterator&
      operator=(const typename _Container::value_type& __value)
      {
 container->push_back(__value);
 return *this;
      }

     
      back_insert_iterator&
      operator=(typename _Container::value_type&& __value)
      {
 container->push_back(std::move(__value));
 return *this;
      }



     
      back_insert_iterator&
      operator*()
      { return *this; }


     
      back_insert_iterator&
      operator++()
      { return *this; }


     
      back_insert_iterator
      operator++(int)
      { return *this; }
    };
# 778 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator.h" 3
  template<typename _Container>
   
    inline back_insert_iterator<_Container>
    back_inserter(_Container& __x)
    { return back_insert_iterator<_Container>(__x); }
# 794 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator.h" 3
  template<typename _Container>
    class front_insert_iterator
    : public iterator<output_iterator_tag, void, void, void, void>
    {
    protected:
      _Container* container;

    public:

      typedef _Container container_type;





      explicit
      front_insert_iterator(_Container& __x)
      : container(std::__addressof(__x)) { }
# 832 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator.h" 3
     
      front_insert_iterator&
      operator=(const typename _Container::value_type& __value)
      {
 container->push_front(__value);
 return *this;
      }

     
      front_insert_iterator&
      operator=(typename _Container::value_type&& __value)
      {
 container->push_front(std::move(__value));
 return *this;
      }



     
      front_insert_iterator&
      operator*()
      { return *this; }


     
      front_insert_iterator&
      operator++()
      { return *this; }


     
      front_insert_iterator
      operator++(int)
      { return *this; }
    };
# 879 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator.h" 3
  template<typename _Container>
   
    inline front_insert_iterator<_Container>
    front_inserter(_Container& __x)
    { return front_insert_iterator<_Container>(__x); }
# 899 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator.h" 3
  template<typename _Container>
    class insert_iterator
    : public iterator<output_iterator_tag, void, void, void, void>
    {



      typedef typename _Container::iterator _Iter;

    protected:
      _Container* container;
      _Iter iter;

    public:

      typedef _Container container_type;
# 924 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator.h" 3
     
      insert_iterator(_Container& __x, _Iter __i)
      : container(std::__addressof(__x)), iter(__i) {}
# 960 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator.h" 3
     
      insert_iterator&
      operator=(const typename _Container::value_type& __value)
      {
 iter = container->insert(iter, __value);
 ++iter;
 return *this;
      }

     
      insert_iterator&
      operator=(typename _Container::value_type&& __value)
      {
 iter = container->insert(iter, std::move(__value));
 ++iter;
 return *this;
      }



     
      insert_iterator&
      operator*()
      { return *this; }


     
      insert_iterator&
      operator++()
      { return *this; }


     
      insert_iterator&
      operator++(int)
      { return *this; }
    };

#pragma GCC diagnostic pop
# 1019 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator.h" 3
  template<typename _Container>
   
    inline insert_iterator<_Container>
    inserter(_Container& __x, typename _Container::iterator __i)
    { return insert_iterator<_Container>(__x, __i); }





}

namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
{

# 1042 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator.h" 3
  template<typename _Iterator, typename _Container>
    class __normal_iterator
    {
    protected:
      _Iterator _M_current;

      typedef std::iterator_traits<_Iterator> __traits_type;


      template<typename _Iter>
 using __convertible_from
   = std::__enable_if_t<std::is_convertible<_Iter, _Iterator>::value>;


    public:
      typedef _Iterator iterator_type;
      typedef typename __traits_type::iterator_category iterator_category;
      typedef typename __traits_type::value_type value_type;
      typedef typename __traits_type::difference_type difference_type;
      typedef typename __traits_type::reference reference;
      typedef typename __traits_type::pointer pointer;





      constexpr __normal_iterator() noexcept
      : _M_current(_Iterator()) { }

      explicit
      __normal_iterator(const _Iterator& __i) noexcept
      : _M_current(__i) { }



      template<typename _Iter, typename = __convertible_from<_Iter>>

 __normal_iterator(const __normal_iterator<_Iter, _Container>& __i)
 noexcept
# 1090 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator.h" 3
        : _M_current(__i.base()) { }


     
      reference
      operator*() const noexcept
      { return *_M_current; }

     
      pointer
      operator->() const noexcept
      { return _M_current; }

     
      __normal_iterator&
      operator++() noexcept
      {
 ++_M_current;
 return *this;
      }

     
      __normal_iterator
      operator++(int) noexcept
      { return __normal_iterator(_M_current++); }


     
      __normal_iterator&
      operator--() noexcept
      {
 --_M_current;
 return *this;
      }

     
      __normal_iterator
      operator--(int) noexcept
      { return __normal_iterator(_M_current--); }


     
      reference
      operator[](difference_type __n) const noexcept
      { return _M_current[__n]; }

     
      __normal_iterator&
      operator+=(difference_type __n) noexcept
      { _M_current += __n; return *this; }

     
      __normal_iterator
      operator+(difference_type __n) const noexcept
      { return __normal_iterator(_M_current + __n); }

     
      __normal_iterator&
      operator-=(difference_type __n) noexcept
      { _M_current -= __n; return *this; }

     
      __normal_iterator
      operator-(difference_type __n) const noexcept
      { return __normal_iterator(_M_current - __n); }

     
      const _Iterator&
      base() const noexcept
      { return _M_current; }
    };
# 1210 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator.h" 3
  template<typename _IteratorL, typename _IteratorR, typename _Container>
   
    inline bool
    operator==(const __normal_iterator<_IteratorL, _Container>& __lhs,
        const __normal_iterator<_IteratorR, _Container>& __rhs)
    noexcept
    { return __lhs.base() == __rhs.base(); }

  template<typename _Iterator, typename _Container>
   
    inline bool
    operator==(const __normal_iterator<_Iterator, _Container>& __lhs,
        const __normal_iterator<_Iterator, _Container>& __rhs)
    noexcept
    { return __lhs.base() == __rhs.base(); }

  template<typename _IteratorL, typename _IteratorR, typename _Container>
   
    inline bool
    operator!=(const __normal_iterator<_IteratorL, _Container>& __lhs,
        const __normal_iterator<_IteratorR, _Container>& __rhs)
    noexcept
    { return __lhs.base() != __rhs.base(); }

  template<typename _Iterator, typename _Container>
   
    inline bool
    operator!=(const __normal_iterator<_Iterator, _Container>& __lhs,
        const __normal_iterator<_Iterator, _Container>& __rhs)
    noexcept
    { return __lhs.base() != __rhs.base(); }


  template<typename _IteratorL, typename _IteratorR, typename _Container>
   
    inline bool
    operator<(const __normal_iterator<_IteratorL, _Container>& __lhs,
       const __normal_iterator<_IteratorR, _Container>& __rhs)
    noexcept
    { return __lhs.base() < __rhs.base(); }

  template<typename _Iterator, typename _Container>
   
    inline bool
    operator<(const __normal_iterator<_Iterator, _Container>& __lhs,
       const __normal_iterator<_Iterator, _Container>& __rhs)
    noexcept
    { return __lhs.base() < __rhs.base(); }

  template<typename _IteratorL, typename _IteratorR, typename _Container>
   
    inline bool
    operator>(const __normal_iterator<_IteratorL, _Container>& __lhs,
       const __normal_iterator<_IteratorR, _Container>& __rhs)
    noexcept
    { return __lhs.base() > __rhs.base(); }

  template<typename _Iterator, typename _Container>
   
    inline bool
    operator>(const __normal_iterator<_Iterator, _Container>& __lhs,
       const __normal_iterator<_Iterator, _Container>& __rhs)
    noexcept
    { return __lhs.base() > __rhs.base(); }

  template<typename _IteratorL, typename _IteratorR, typename _Container>
   
    inline bool
    operator<=(const __normal_iterator<_IteratorL, _Container>& __lhs,
        const __normal_iterator<_IteratorR, _Container>& __rhs)
    noexcept
    { return __lhs.base() <= __rhs.base(); }

  template<typename _Iterator, typename _Container>
   
    inline bool
    operator<=(const __normal_iterator<_Iterator, _Container>& __lhs,
        const __normal_iterator<_Iterator, _Container>& __rhs)
    noexcept
    { return __lhs.base() <= __rhs.base(); }

  template<typename _IteratorL, typename _IteratorR, typename _Container>
   
    inline bool
    operator>=(const __normal_iterator<_IteratorL, _Container>& __lhs,
        const __normal_iterator<_IteratorR, _Container>& __rhs)
    noexcept
    { return __lhs.base() >= __rhs.base(); }

  template<typename _Iterator, typename _Container>
   
    inline bool
    operator>=(const __normal_iterator<_Iterator, _Container>& __lhs,
        const __normal_iterator<_Iterator, _Container>& __rhs)
    noexcept
    { return __lhs.base() >= __rhs.base(); }






  template<typename _IteratorL, typename _IteratorR, typename _Container>


    [[__nodiscard__]]
    inline auto
    operator-(const __normal_iterator<_IteratorL, _Container>& __lhs,
       const __normal_iterator<_IteratorR, _Container>& __rhs) noexcept
    -> decltype(__lhs.base() - __rhs.base())





    { return __lhs.base() - __rhs.base(); }

  template<typename _Iterator, typename _Container>
   
    inline typename __normal_iterator<_Iterator, _Container>::difference_type
    operator-(const __normal_iterator<_Iterator, _Container>& __lhs,
       const __normal_iterator<_Iterator, _Container>& __rhs)
    noexcept
    { return __lhs.base() - __rhs.base(); }

  template<typename _Iterator, typename _Container>
   
    inline __normal_iterator<_Iterator, _Container>
    operator+(typename __normal_iterator<_Iterator, _Container>::difference_type
       __n, const __normal_iterator<_Iterator, _Container>& __i)
    noexcept
    { return __normal_iterator<_Iterator, _Container>(__i.base() + __n); }


}

namespace std __attribute__ ((__visibility__ ("default")))
{


  template<typename _Iterator, typename _Container>
   
    _Iterator
    __niter_base(__gnu_cxx::__normal_iterator<_Iterator, _Container> __it)
    noexcept(std::is_nothrow_copy_constructible<_Iterator>::value)
    { return __it.base(); }






  template<typename _Iterator, typename _Container>
    constexpr auto
    __to_address(const __gnu_cxx::__normal_iterator<_Iterator,
          _Container>& __it) noexcept
    -> decltype(std::__to_address(__it.base()))
    { return std::__to_address(__it.base()); }
# 1417 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator.h" 3
  namespace __detail
  {
# 1433 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator.h" 3
  }
# 1444 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator.h" 3
  template<typename _Iterator>
    class move_iterator



    {
      _Iterator _M_current;

      using __traits_type = iterator_traits<_Iterator>;

      using __base_ref = typename __traits_type::reference;


      template<typename _Iter2>
 friend class move_iterator;
# 1468 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator.h" 3
    public:
      using iterator_type = _Iterator;
# 1479 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator.h" 3
      typedef typename __traits_type::iterator_category iterator_category;
      typedef typename __traits_type::value_type value_type;
      typedef typename __traits_type::difference_type difference_type;

      typedef _Iterator pointer;


      using reference
 = __conditional_t<is_reference<__base_ref>::value,
     typename remove_reference<__base_ref>::type&&,
     __base_ref>;


     
      move_iterator()
      : _M_current() { }

      explicit
      move_iterator(iterator_type __i)
      : _M_current(std::move(__i)) { }

      template<typename _Iter>




 move_iterator(const move_iterator<_Iter>& __i)
 : _M_current(__i._M_current) { }

      template<typename _Iter>





 move_iterator& operator=(const move_iterator<_Iter>& __i)
 {
   _M_current = __i._M_current;
   return *this;
 }


      [[__nodiscard__]]
      iterator_type
      base() const
      { return _M_current; }
# 1537 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator.h" 3
      [[__nodiscard__]]
      reference
      operator*() const



      { return static_cast<reference>(*_M_current); }


      [[__nodiscard__]]
      pointer
      operator->() const
      { return _M_current; }

      move_iterator&
      operator++()
      {
 ++_M_current;
 return *this;
      }

      move_iterator
      operator++(int)
      {
 move_iterator __tmp = *this;
 ++_M_current;
 return __tmp;
      }







      move_iterator&
      operator--()
      {
 --_M_current;
 return *this;
      }

      move_iterator
      operator--(int)
      {
 move_iterator __tmp = *this;
 --_M_current;
 return __tmp;
      }

      [[__nodiscard__]]
      move_iterator
      operator+(difference_type __n) const
      { return move_iterator(_M_current + __n); }

      move_iterator&
      operator+=(difference_type __n)
      {
 _M_current += __n;
 return *this;
      }

      [[__nodiscard__]]
      move_iterator
      operator-(difference_type __n) const
      { return move_iterator(_M_current - __n); }

      move_iterator&
      operator-=(difference_type __n)
      {
 _M_current -= __n;
 return *this;
      }

      [[__nodiscard__]]
      reference
      operator[](difference_type __n) const



      { return std::move(_M_current[__n]); }
# 1651 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator.h" 3
    };

  template<typename _IteratorL, typename _IteratorR>
    [[__nodiscard__]]
    inline bool
    operator==(const move_iterator<_IteratorL>& __x,
        const move_iterator<_IteratorR>& __y)



    { return __x.base() == __y.base(); }
# 1672 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator.h" 3
  template<typename _IteratorL, typename _IteratorR>
    [[__nodiscard__]]
    inline bool
    operator!=(const move_iterator<_IteratorL>& __x,
        const move_iterator<_IteratorR>& __y)
    { return !(__x == __y); }


  template<typename _IteratorL, typename _IteratorR>
    [[__nodiscard__]]
    inline bool
    operator<(const move_iterator<_IteratorL>& __x,
       const move_iterator<_IteratorR>& __y)



    { return __x.base() < __y.base(); }

  template<typename _IteratorL, typename _IteratorR>
    [[__nodiscard__]]
    inline bool
    operator<=(const move_iterator<_IteratorL>& __x,
        const move_iterator<_IteratorR>& __y)



    { return !(__y < __x); }

  template<typename _IteratorL, typename _IteratorR>
    [[__nodiscard__]]
    inline bool
    operator>(const move_iterator<_IteratorL>& __x,
       const move_iterator<_IteratorR>& __y)



    { return __y < __x; }

  template<typename _IteratorL, typename _IteratorR>
    [[__nodiscard__]]
    inline bool
    operator>=(const move_iterator<_IteratorL>& __x,
        const move_iterator<_IteratorR>& __y)



    { return !(__x < __y); }




  template<typename _Iterator>
    [[__nodiscard__]]
    inline bool
    operator==(const move_iterator<_Iterator>& __x,
        const move_iterator<_Iterator>& __y)
    { return __x.base() == __y.base(); }
# 1738 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator.h" 3
  template<typename _Iterator>
    [[__nodiscard__]]
    inline bool
    operator!=(const move_iterator<_Iterator>& __x,
        const move_iterator<_Iterator>& __y)
    { return !(__x == __y); }

  template<typename _Iterator>
    [[__nodiscard__]]
    inline bool
    operator<(const move_iterator<_Iterator>& __x,
       const move_iterator<_Iterator>& __y)
    { return __x.base() < __y.base(); }

  template<typename _Iterator>
    [[__nodiscard__]]
    inline bool
    operator<=(const move_iterator<_Iterator>& __x,
        const move_iterator<_Iterator>& __y)
    { return !(__y < __x); }

  template<typename _Iterator>
    [[__nodiscard__]]
    inline bool
    operator>(const move_iterator<_Iterator>& __x,
       const move_iterator<_Iterator>& __y)
    { return __y < __x; }

  template<typename _Iterator>
    [[__nodiscard__]]
    inline bool
    operator>=(const move_iterator<_Iterator>& __x,
        const move_iterator<_Iterator>& __y)
    { return !(__x < __y); }



  template<typename _IteratorL, typename _IteratorR>
    [[__nodiscard__]]
    inline auto
    operator-(const move_iterator<_IteratorL>& __x,
       const move_iterator<_IteratorR>& __y)
    -> decltype(__x.base() - __y.base())
    { return __x.base() - __y.base(); }

  template<typename _Iterator>
    [[__nodiscard__]]
    inline move_iterator<_Iterator>
    operator+(typename move_iterator<_Iterator>::difference_type __n,
       const move_iterator<_Iterator>& __x)
    { return __x + __n; }

  template<typename _Iterator>
    [[__nodiscard__]]
    inline move_iterator<_Iterator>
    make_move_iterator(_Iterator __i)
    { return move_iterator<_Iterator>(std::move(__i)); }

  template<typename _Iterator, typename _ReturnType
    = __conditional_t<__move_if_noexcept_cond
      <typename iterator_traits<_Iterator>::value_type>::value,
  _Iterator, move_iterator<_Iterator>>>
    inline _ReturnType
    __make_move_if_noexcept_iterator(_Iterator __i)
    { return _ReturnType(__i); }



  template<typename _Tp, typename _ReturnType
    = __conditional_t<__move_if_noexcept_cond<_Tp>::value,
        const _Tp*, move_iterator<_Tp*>>>
    inline _ReturnType
    __make_move_if_noexcept_iterator(_Tp* __i)
    { return _ReturnType(__i); }
# 2567 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator.h" 3
  template<typename _Iterator>
   
    auto
    __niter_base(move_iterator<_Iterator> __it)
    -> decltype(make_move_iterator(__niter_base(__it.base())))
    { return make_move_iterator(__niter_base(__it.base())); }

  template<typename _Iterator>
    struct __is_move_iterator<move_iterator<_Iterator> >
    {
      enum { __value = 1 };
      typedef __true_type __type;
    };

  template<typename _Iterator>
   
    auto
    __miter_base(move_iterator<_Iterator> __it)
    -> decltype(__miter_base(__it.base()))
    { return __miter_base(__it.base()); }

#define _GLIBCXX_MAKE_MOVE_ITERATOR(_Iter) std::make_move_iterator(_Iter)
#define _GLIBCXX_MAKE_MOVE_IF_NOEXCEPT_ITERATOR(_Iter) std::__make_move_if_noexcept_iterator(_Iter)
# 2615 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_iterator.h" 3

}
# 68 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algobase.h" 2 3

# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/debug/debug.h" 1 3
# 30 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/debug/debug.h" 3
#define _GLIBCXX_DEBUG_MACRO_SWITCH_H 1
# 48 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/debug/debug.h" 3
namespace std
{
  namespace __debug { }
}




namespace __gnu_debug
{
  using namespace std::__debug;

  template<typename _Ite, typename _Seq, typename _Cat>
    struct _Safe_iterator;
}



#define __glibcxx_requires_cond(_Cond,_Msg) 
#define __glibcxx_requires_valid_range(_First,_Last) 
#define __glibcxx_requires_can_increment(_First,_Size) 
#define __glibcxx_requires_can_increment_range(_First1,_Last1,_First2) 
#define __glibcxx_requires_can_decrement_range(_First1,_Last1,_First2) 
#define __glibcxx_requires_sorted(_First,_Last) 
#define __glibcxx_requires_sorted_pred(_First,_Last,_Pred) 
#define __glibcxx_requires_sorted_set(_First1,_Last1,_First2) 
#define __glibcxx_requires_sorted_set_pred(_First1,_Last1,_First2,_Pred) 
#define __glibcxx_requires_partitioned_lower(_First,_Last,_Value) 
#define __glibcxx_requires_partitioned_upper(_First,_Last,_Value) 
#define __glibcxx_requires_partitioned_lower_pred(_First,_Last,_Value,_Pred) 
#define __glibcxx_requires_partitioned_upper_pred(_First,_Last,_Value,_Pred) 
#define __glibcxx_requires_heap(_First,_Last) 
#define __glibcxx_requires_heap_pred(_First,_Last,_Pred) 
#define __glibcxx_requires_string(_String) 
#define __glibcxx_requires_string_len(_String,_Len) 
#define __glibcxx_requires_irreflexive(_First,_Last) 
#define __glibcxx_requires_irreflexive2(_First,_Last) 
#define __glibcxx_requires_irreflexive_pred(_First,_Last,_Pred) 
#define __glibcxx_requires_irreflexive_pred2(_First,_Last,_Pred) 
# 70 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algobase.h" 2 3

# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/predefined_ops.h" 1 3
# 31 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/predefined_ops.h" 3
#define _GLIBCXX_PREDEFINED_OPS_H 1



namespace __gnu_cxx
{
namespace __ops
{
  struct _Iter_less_iter
  {
    template<typename _Iterator1, typename _Iterator2>
     
      bool
      operator()(_Iterator1 __it1, _Iterator2 __it2) const
      { return *__it1 < *__it2; }
  };

 
  inline _Iter_less_iter
  __iter_less_iter()
  { return _Iter_less_iter(); }

  struct _Iter_less_val
  {

    constexpr _Iter_less_val() = default;




   
    explicit
    _Iter_less_val(_Iter_less_iter) { }

    template<typename _Iterator, typename _Value>
     
      bool
      operator()(_Iterator __it, _Value& __val) const
      { return *__it < __val; }
  };

 
  inline _Iter_less_val
  __iter_less_val()
  { return _Iter_less_val(); }

 
  inline _Iter_less_val
  __iter_comp_val(_Iter_less_iter)
  { return _Iter_less_val(); }

  struct _Val_less_iter
  {

    constexpr _Val_less_iter() = default;




   
    explicit
    _Val_less_iter(_Iter_less_iter) { }

    template<typename _Value, typename _Iterator>
     
      bool
      operator()(_Value& __val, _Iterator __it) const
      { return __val < *__it; }
  };

 
  inline _Val_less_iter
  __val_less_iter()
  { return _Val_less_iter(); }

 
  inline _Val_less_iter
  __val_comp_iter(_Iter_less_iter)
  { return _Val_less_iter(); }

  struct _Iter_equal_to_iter
  {
    template<typename _Iterator1, typename _Iterator2>
     
      bool
      operator()(_Iterator1 __it1, _Iterator2 __it2) const
      { return *__it1 == *__it2; }
  };

 
  inline _Iter_equal_to_iter
  __iter_equal_to_iter()
  { return _Iter_equal_to_iter(); }

  struct _Iter_equal_to_val
  {
    template<typename _Iterator, typename _Value>
     
      bool
      operator()(_Iterator __it, _Value& __val) const
      { return *__it == __val; }
  };

 
  inline _Iter_equal_to_val
  __iter_equal_to_val()
  { return _Iter_equal_to_val(); }

 
  inline _Iter_equal_to_val
  __iter_comp_val(_Iter_equal_to_iter)
  { return _Iter_equal_to_val(); }

  template<typename _Compare>
    struct _Iter_comp_iter
    {
      _Compare _M_comp;

      explicit
      _Iter_comp_iter(_Compare __comp)
 : _M_comp(std::move(__comp))
      { }

      template<typename _Iterator1, typename _Iterator2>
       
        bool
        operator()(_Iterator1 __it1, _Iterator2 __it2)
        { return bool(_M_comp(*__it1, *__it2)); }
    };

  template<typename _Compare>
   
    inline _Iter_comp_iter<_Compare>
    __iter_comp_iter(_Compare __comp)
    { return _Iter_comp_iter<_Compare>(std::move(__comp)); }

  template<typename _Compare>
    struct _Iter_comp_val
    {
      _Compare _M_comp;

     
      explicit
      _Iter_comp_val(_Compare __comp)
 : _M_comp(std::move(__comp))
      { }

     
      explicit
      _Iter_comp_val(const _Iter_comp_iter<_Compare>& __comp)
 : _M_comp(__comp._M_comp)
      { }


     
      explicit
      _Iter_comp_val(_Iter_comp_iter<_Compare>&& __comp)
 : _M_comp(std::move(__comp._M_comp))
      { }


      template<typename _Iterator, typename _Value>

 bool
 operator()(_Iterator __it, _Value& __val)
 { return bool(_M_comp(*__it, __val)); }
    };

  template<typename _Compare>
   
    inline _Iter_comp_val<_Compare>
    __iter_comp_val(_Compare __comp)
    { return _Iter_comp_val<_Compare>(std::move(__comp)); }

  template<typename _Compare>
   
    inline _Iter_comp_val<_Compare>
    __iter_comp_val(_Iter_comp_iter<_Compare> __comp)
    { return _Iter_comp_val<_Compare>(std::move(__comp)); }

  template<typename _Compare>
    struct _Val_comp_iter
    {
      _Compare _M_comp;

     
      explicit
      _Val_comp_iter(_Compare __comp)
 : _M_comp(std::move(__comp))
      { }

     
      explicit
      _Val_comp_iter(const _Iter_comp_iter<_Compare>& __comp)
 : _M_comp(__comp._M_comp)
      { }


     
      explicit
      _Val_comp_iter(_Iter_comp_iter<_Compare>&& __comp)
 : _M_comp(std::move(__comp._M_comp))
      { }


      template<typename _Value, typename _Iterator>

 bool
 operator()(_Value& __val, _Iterator __it)
 { return bool(_M_comp(__val, *__it)); }
    };

  template<typename _Compare>
   
    inline _Val_comp_iter<_Compare>
    __val_comp_iter(_Compare __comp)
    { return _Val_comp_iter<_Compare>(std::move(__comp)); }

  template<typename _Compare>
   
    inline _Val_comp_iter<_Compare>
    __val_comp_iter(_Iter_comp_iter<_Compare> __comp)
    { return _Val_comp_iter<_Compare>(std::move(__comp)); }

  template<typename _Value>
    struct _Iter_equals_val
    {
      _Value& _M_value;

     
      explicit
      _Iter_equals_val(_Value& __value)
 : _M_value(__value)
      { }

      template<typename _Iterator>

 bool
 operator()(_Iterator __it)
 { return *__it == _M_value; }
    };

  template<typename _Value>
   
    inline _Iter_equals_val<_Value>
    __iter_equals_val(_Value& __val)
    { return _Iter_equals_val<_Value>(__val); }

  template<typename _Iterator1>
    struct _Iter_equals_iter
    {
      _Iterator1 _M_it1;

     
      explicit
      _Iter_equals_iter(_Iterator1 __it1)
 : _M_it1(__it1)
      { }

      template<typename _Iterator2>

 bool
 operator()(_Iterator2 __it2)
 { return *__it2 == *_M_it1; }
    };

  template<typename _Iterator>
   
    inline _Iter_equals_iter<_Iterator>
    __iter_comp_iter(_Iter_equal_to_iter, _Iterator __it)
    { return _Iter_equals_iter<_Iterator>(__it); }

  template<typename _Predicate>
    struct _Iter_pred
    {
      _Predicate _M_pred;

     
      explicit
      _Iter_pred(_Predicate __pred)
 : _M_pred(std::move(__pred))
      { }

      template<typename _Iterator>

 bool
 operator()(_Iterator __it)
 { return bool(_M_pred(*__it)); }
    };

  template<typename _Predicate>
   
    inline _Iter_pred<_Predicate>
    __pred_iter(_Predicate __pred)
    { return _Iter_pred<_Predicate>(std::move(__pred)); }

  template<typename _Compare, typename _Value>
    struct _Iter_comp_to_val
    {
      _Compare _M_comp;
      _Value& _M_value;

     
      _Iter_comp_to_val(_Compare __comp, _Value& __value)
 : _M_comp(std::move(__comp)), _M_value(__value)
      { }

      template<typename _Iterator>

 bool
 operator()(_Iterator __it)
 { return bool(_M_comp(*__it, _M_value)); }
    };

  template<typename _Compare, typename _Value>
    _Iter_comp_to_val<_Compare, _Value>
   
    __iter_comp_val(_Compare __comp, _Value &__val)
    {
      return _Iter_comp_to_val<_Compare, _Value>(std::move(__comp), __val);
    }

  template<typename _Compare, typename _Iterator1>
    struct _Iter_comp_to_iter
    {
      _Compare _M_comp;
      _Iterator1 _M_it1;

     
      _Iter_comp_to_iter(_Compare __comp, _Iterator1 __it1)
 : _M_comp(std::move(__comp)), _M_it1(__it1)
      { }

      template<typename _Iterator2>

 bool
 operator()(_Iterator2 __it2)
 { return bool(_M_comp(*__it2, *_M_it1)); }
    };

  template<typename _Compare, typename _Iterator>
   
    inline _Iter_comp_to_iter<_Compare, _Iterator>
    __iter_comp_iter(_Iter_comp_iter<_Compare> __comp, _Iterator __it)
    {
      return _Iter_comp_to_iter<_Compare, _Iterator>(
   std::move(__comp._M_comp), __it);
    }

  template<typename _Predicate>
    struct _Iter_negate
    {
      _Predicate _M_pred;

     
      explicit
      _Iter_negate(_Predicate __pred)
 : _M_pred(std::move(__pred))
      { }

      template<typename _Iterator>

 bool
 operator()(_Iterator __it)
 { return !bool(_M_pred(*__it)); }
    };

  template<typename _Predicate>
   
    inline _Iter_negate<_Predicate>
    __negate(_Iter_pred<_Predicate> __pred)
    { return _Iter_negate<_Predicate>(std::move(__pred._M_pred)); }

}
}
# 72 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algobase.h" 2 3
# 82 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algobase.h" 3
namespace std __attribute__ ((__visibility__ ("default")))
{






  template<typename _Tp, typename _Up>
   
    inline int
    __memcmp(const _Tp* __first1, const _Up* __first2, size_t __num)
    {

      static_assert(sizeof(_Tp) == sizeof(_Up), "can be compared with memcmp");
# 108 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algobase.h" 3
 return __builtin_memcmp(__first1, __first2, sizeof(_Tp) * __num);
    }
# 152 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algobase.h" 3
  template<typename _ForwardIterator1, typename _ForwardIterator2>
   
    inline void
    iter_swap(_ForwardIterator1 __a, _ForwardIterator2 __b)
    {

     

     
# 185 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algobase.h" 3
      swap(*__a, *__b);

    }
# 201 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algobase.h" 3
  template<typename _ForwardIterator1, typename _ForwardIterator2>
   
    _ForwardIterator2
    swap_ranges(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
  _ForwardIterator2 __first2)
    {

     

     

      ;

      for (; __first1 != __last1; ++__first1, (void)++__first2)
 std::iter_swap(__first1, __first2);
      return __first2;
    }
# 230 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algobase.h" 3
  template<typename _Tp>
   
    inline const _Tp&
    min(const _Tp& __a, const _Tp& __b)
    {

     

      if (__b < __a)
 return __b;
      return __a;
    }
# 254 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algobase.h" 3
  template<typename _Tp>
   
    inline const _Tp&
    max(const _Tp& __a, const _Tp& __b)
    {

     

      if (__a < __b)
 return __b;
      return __a;
    }
# 278 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algobase.h" 3
  template<typename _Tp, typename _Compare>
   
    inline const _Tp&
    min(const _Tp& __a, const _Tp& __b, _Compare __comp)
    {

      if (__comp(__b, __a))
 return __b;
      return __a;
    }
# 300 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algobase.h" 3
  template<typename _Tp, typename _Compare>
   
    inline const _Tp&
    max(const _Tp& __a, const _Tp& __b, _Compare __comp)
    {

      if (__comp(__a, __b))
 return __b;
      return __a;
    }



  template<typename _Iterator>
   
    inline _Iterator
    __niter_base(_Iterator __it)
    noexcept(std::is_nothrow_copy_constructible<_Iterator>::value)
    { return __it; }

  template<typename _Ite, typename _Seq>
    _Ite
    __niter_base(const ::__gnu_debug::_Safe_iterator<_Ite, _Seq,
   std::random_access_iterator_tag>&);




  template<typename _From, typename _To>
   
    inline _From
    __niter_wrap(_From __from, _To __res)
    { return __from + (__res - std::__niter_base(__from)); }


  template<typename _Iterator>
   
    inline _Iterator
    __niter_wrap(const _Iterator&, _Iterator __res)
    { return __res; }







  template<bool _IsMove, bool _IsSimple, typename _Category>
    struct __copy_move
    {
      template<typename _II, typename _OI>

 static _OI
 __copy_m(_II __first, _II __last, _OI __result)
 {
   for (; __first != __last; ++__result, (void)++__first)
     *__result = *__first;
   return __result;
 }
    };


  template<typename _Category>
    struct __copy_move<true, false, _Category>
    {
      template<typename _II, typename _OI>

 static _OI
 __copy_m(_II __first, _II __last, _OI __result)
 {
   for (; __first != __last; ++__result, (void)++__first)
     *__result = std::move(*__first);
   return __result;
 }
    };


  template<>
    struct __copy_move<false, false, random_access_iterator_tag>
    {
      template<typename _II, typename _OI>

 static _OI
 __copy_m(_II __first, _II __last, _OI __result)
 {
   typedef typename iterator_traits<_II>::difference_type _Distance;
   for(_Distance __n = __last - __first; __n > 0; --__n)
     {
       *__result = *__first;
       ++__first;
       ++__result;
     }
   return __result;
 }
    };


  template<>
    struct __copy_move<true, false, random_access_iterator_tag>
    {
      template<typename _II, typename _OI>

 static _OI
 __copy_m(_II __first, _II __last, _OI __result)
 {
   typedef typename iterator_traits<_II>::difference_type _Distance;
   for(_Distance __n = __last - __first; __n > 0; --__n)
     {
       *__result = std::move(*__first);
       ++__first;
       ++__result;
     }
   return __result;
 }
    };


  template<bool _IsMove>
    struct __copy_move<_IsMove, true, random_access_iterator_tag>
    {
      template<typename _Tp>

 static _Tp*
 __copy_m(const _Tp* __first, const _Tp* __last, _Tp* __result)
 {

   using __assignable = __conditional_t<_IsMove,
            is_move_assignable<_Tp>,
            is_copy_assignable<_Tp>>;

   static_assert( __assignable::value, "type must be assignable" );

   const ptrdiff_t _Num = __last - __first;
   if (_Num)
     __builtin_memmove(__result, __first, sizeof(_Tp) * _Num);
   return __result + _Num;
 }
    };



  template<typename _Tp, typename _Ref, typename _Ptr>
    struct _Deque_iterator;

  struct _Bit_iterator;






  template<typename _CharT>
    struct char_traits;

  template<typename _CharT, typename _Traits>
    class istreambuf_iterator;

  template<typename _CharT, typename _Traits>
    class ostreambuf_iterator;

  template<bool _IsMove, typename _CharT>
    typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
      ostreambuf_iterator<_CharT, char_traits<_CharT> > >::__type
    __copy_move_a2(_CharT*, _CharT*,
     ostreambuf_iterator<_CharT, char_traits<_CharT> >);

  template<bool _IsMove, typename _CharT>
    typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
      ostreambuf_iterator<_CharT, char_traits<_CharT> > >::__type
    __copy_move_a2(const _CharT*, const _CharT*,
     ostreambuf_iterator<_CharT, char_traits<_CharT> >);

  template<bool _IsMove, typename _CharT>
    typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
        _CharT*>::__type
    __copy_move_a2(istreambuf_iterator<_CharT, char_traits<_CharT> >,
     istreambuf_iterator<_CharT, char_traits<_CharT> >, _CharT*);

  template<bool _IsMove, typename _CharT>
    typename __gnu_cxx::__enable_if<
      __is_char<_CharT>::__value,
      std::_Deque_iterator<_CharT, _CharT&, _CharT*> >::__type
    __copy_move_a2(
 istreambuf_iterator<_CharT, char_traits<_CharT> >,
 istreambuf_iterator<_CharT, char_traits<_CharT> >,
 std::_Deque_iterator<_CharT, _CharT&, _CharT*>);


  template<bool _IsMove, typename _II, typename _OI>
   
    inline _OI
    __copy_move_a2(_II __first, _II __last, _OI __result)
    {
      typedef typename iterator_traits<_II>::iterator_category _Category;





      return std::__copy_move<_IsMove, __memcpyable<_OI, _II>::__value,
         _Category>::__copy_m(__first, __last, __result);
    }

  template<bool _IsMove,
    typename _Tp, typename _Ref, typename _Ptr, typename _OI>
    _OI
    __copy_move_a1(std::_Deque_iterator<_Tp, _Ref, _Ptr>,
     std::_Deque_iterator<_Tp, _Ref, _Ptr>,
     _OI);

  template<bool _IsMove,
    typename _ITp, typename _IRef, typename _IPtr, typename _OTp>
    std::_Deque_iterator<_OTp, _OTp&, _OTp*>
    __copy_move_a1(std::_Deque_iterator<_ITp, _IRef, _IPtr>,
     std::_Deque_iterator<_ITp, _IRef, _IPtr>,
     std::_Deque_iterator<_OTp, _OTp&, _OTp*>);

  template<bool _IsMove, typename _II, typename _Tp>
    typename __gnu_cxx::__enable_if<
      __is_random_access_iter<_II>::__value,
      std::_Deque_iterator<_Tp, _Tp&, _Tp*> >::__type
    __copy_move_a1(_II, _II, std::_Deque_iterator<_Tp, _Tp&, _Tp*>);

  template<bool _IsMove, typename _II, typename _OI>
   
    inline _OI
    __copy_move_a1(_II __first, _II __last, _OI __result)
    { return std::__copy_move_a2<_IsMove>(__first, __last, __result); }

  template<bool _IsMove, typename _II, typename _OI>
   
    inline _OI
    __copy_move_a(_II __first, _II __last, _OI __result)
    {
      return std::__niter_wrap(__result,
  std::__copy_move_a1<_IsMove>(std::__niter_base(__first),
          std::__niter_base(__last),
          std::__niter_base(__result)));
    }

  template<bool _IsMove,
    typename _Ite, typename _Seq, typename _Cat, typename _OI>
    _OI
    __copy_move_a(const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&,
    const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&,
    _OI);

  template<bool _IsMove,
    typename _II, typename _Ite, typename _Seq, typename _Cat>
    __gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>
    __copy_move_a(_II, _II,
    const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&);

  template<bool _IsMove,
    typename _IIte, typename _ISeq, typename _ICat,
    typename _OIte, typename _OSeq, typename _OCat>
    ::__gnu_debug::_Safe_iterator<_OIte, _OSeq, _OCat>
    __copy_move_a(const ::__gnu_debug::_Safe_iterator<_IIte, _ISeq, _ICat>&,
    const ::__gnu_debug::_Safe_iterator<_IIte, _ISeq, _ICat>&,
    const ::__gnu_debug::_Safe_iterator<_OIte, _OSeq, _OCat>&);

  template<typename _InputIterator, typename _Size, typename _OutputIterator>
   
    _OutputIterator
    __copy_n_a(_InputIterator __first, _Size __n, _OutputIterator __result,
        bool)
    {
      if (__n > 0)
 {
   while (true)
     {
       *__result = *__first;
       ++__result;
       if (--__n > 0)
  ++__first;
       else
  break;
     }
 }
      return __result;
    }


  template<typename _CharT, typename _Size>
    typename __gnu_cxx::__enable_if<
      __is_char<_CharT>::__value, _CharT*>::__type
    __copy_n_a(istreambuf_iterator<_CharT, char_traits<_CharT> >,
        _Size, _CharT*, bool);

  template<typename _CharT, typename _Size>
    typename __gnu_cxx::__enable_if<
      __is_char<_CharT>::__value,
      std::_Deque_iterator<_CharT, _CharT&, _CharT*> >::__type
    __copy_n_a(istreambuf_iterator<_CharT, char_traits<_CharT> >, _Size,
        std::_Deque_iterator<_CharT, _CharT&, _CharT*>,
        bool);
# 615 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algobase.h" 3
  template<typename _II, typename _OI>
   
    inline _OI
    copy(_II __first, _II __last, _OI __result)
    {

     
     

      ;

      return std::__copy_move_a<__is_move_iterator<_II>::__value>
      (std::__miter_base(__first), std::__miter_base(__last), __result);
    }
# 648 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algobase.h" 3
  template<typename _II, typename _OI>
   
    inline _OI
    move(_II __first, _II __last, _OI __result)
    {

     
     

      ;

      return std::__copy_move_a<true>(std::__miter_base(__first),
          std::__miter_base(__last), __result);
    }

#define _GLIBCXX_MOVE3(_Tp,_Up,_Vp) std::move(_Tp, _Up, _Vp)




  template<bool _IsMove, bool _IsSimple, typename _Category>
    struct __copy_move_backward
    {
      template<typename _BI1, typename _BI2>

 static _BI2
 __copy_move_b(_BI1 __first, _BI1 __last, _BI2 __result)
 {
   while (__first != __last)
     *--__result = *--__last;
   return __result;
 }
    };


  template<typename _Category>
    struct __copy_move_backward<true, false, _Category>
    {
      template<typename _BI1, typename _BI2>

 static _BI2
 __copy_move_b(_BI1 __first, _BI1 __last, _BI2 __result)
 {
   while (__first != __last)
     *--__result = std::move(*--__last);
   return __result;
 }
    };


  template<>
    struct __copy_move_backward<false, false, random_access_iterator_tag>
    {
      template<typename _BI1, typename _BI2>

 static _BI2
 __copy_move_b(_BI1 __first, _BI1 __last, _BI2 __result)
 {
   typename iterator_traits<_BI1>::difference_type
     __n = __last - __first;
   for (; __n > 0; --__n)
     *--__result = *--__last;
   return __result;
 }
    };


  template<>
    struct __copy_move_backward<true, false, random_access_iterator_tag>
    {
      template<typename _BI1, typename _BI2>

 static _BI2
 __copy_move_b(_BI1 __first, _BI1 __last, _BI2 __result)
 {
   typename iterator_traits<_BI1>::difference_type
     __n = __last - __first;
   for (; __n > 0; --__n)
     *--__result = std::move(*--__last);
   return __result;
 }
    };


  template<bool _IsMove>
    struct __copy_move_backward<_IsMove, true, random_access_iterator_tag>
    {
      template<typename _Tp>

 static _Tp*
 __copy_move_b(const _Tp* __first, const _Tp* __last, _Tp* __result)
 {

   using __assignable = __conditional_t<_IsMove,
            is_move_assignable<_Tp>,
            is_copy_assignable<_Tp>>;

   static_assert( __assignable::value, "type must be assignable" );

   const ptrdiff_t _Num = __last - __first;
   if (_Num)
     __builtin_memmove(__result - _Num, __first, sizeof(_Tp) * _Num);
   return __result - _Num;
 }
    };

  template<bool _IsMove, typename _BI1, typename _BI2>
   
    inline _BI2
    __copy_move_backward_a2(_BI1 __first, _BI1 __last, _BI2 __result)
    {
      typedef typename iterator_traits<_BI1>::iterator_category _Category;





      return std::__copy_move_backward<_IsMove,
           __memcpyable<_BI2, _BI1>::__value,
           _Category>::__copy_move_b(__first,
         __last,
         __result);
    }

  template<bool _IsMove, typename _BI1, typename _BI2>
   
    inline _BI2
    __copy_move_backward_a1(_BI1 __first, _BI1 __last, _BI2 __result)
    { return std::__copy_move_backward_a2<_IsMove>(__first, __last, __result); }

  template<bool _IsMove,
    typename _Tp, typename _Ref, typename _Ptr, typename _OI>
    _OI
    __copy_move_backward_a1(std::_Deque_iterator<_Tp, _Ref, _Ptr>,
       std::_Deque_iterator<_Tp, _Ref, _Ptr>,
       _OI);

  template<bool _IsMove,
    typename _ITp, typename _IRef, typename _IPtr, typename _OTp>
    std::_Deque_iterator<_OTp, _OTp&, _OTp*>
    __copy_move_backward_a1(
   std::_Deque_iterator<_ITp, _IRef, _IPtr>,
   std::_Deque_iterator<_ITp, _IRef, _IPtr>,
   std::_Deque_iterator<_OTp, _OTp&, _OTp*>);

  template<bool _IsMove, typename _II, typename _Tp>
    typename __gnu_cxx::__enable_if<
      __is_random_access_iter<_II>::__value,
      std::_Deque_iterator<_Tp, _Tp&, _Tp*> >::__type
    __copy_move_backward_a1(_II, _II,
       std::_Deque_iterator<_Tp, _Tp&, _Tp*>);

  template<bool _IsMove, typename _II, typename _OI>
   
    inline _OI
    __copy_move_backward_a(_II __first, _II __last, _OI __result)
    {
      return std::__niter_wrap(__result,
  std::__copy_move_backward_a1<_IsMove>
    (std::__niter_base(__first), std::__niter_base(__last),
     std::__niter_base(__result)));
    }

  template<bool _IsMove,
    typename _Ite, typename _Seq, typename _Cat, typename _OI>
    _OI
    __copy_move_backward_a(
  const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&,
  const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&,
  _OI);

  template<bool _IsMove,
    typename _II, typename _Ite, typename _Seq, typename _Cat>
    __gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>
    __copy_move_backward_a(_II, _II,
  const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&);

  template<bool _IsMove,
    typename _IIte, typename _ISeq, typename _ICat,
    typename _OIte, typename _OSeq, typename _OCat>
    ::__gnu_debug::_Safe_iterator<_OIte, _OSeq, _OCat>
    __copy_move_backward_a(
  const ::__gnu_debug::_Safe_iterator<_IIte, _ISeq, _ICat>&,
  const ::__gnu_debug::_Safe_iterator<_IIte, _ISeq, _ICat>&,
  const ::__gnu_debug::_Safe_iterator<_OIte, _OSeq, _OCat>&);
# 852 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algobase.h" 3
  template<typename _BI1, typename _BI2>
   
    inline _BI2
    copy_backward(_BI1 __first, _BI1 __last, _BI2 __result)
    {

     
     
     

      ;

      return std::__copy_move_backward_a<__is_move_iterator<_BI1>::__value>
      (std::__miter_base(__first), std::__miter_base(__last), __result);
    }
# 887 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algobase.h" 3
  template<typename _BI1, typename _BI2>
   
    inline _BI2
    move_backward(_BI1 __first, _BI1 __last, _BI2 __result)
    {

     
     
     

      ;

      return std::__copy_move_backward_a<true>(std::__miter_base(__first),
            std::__miter_base(__last),
            __result);
    }

#define _GLIBCXX_MOVE_BACKWARD3(_Tp,_Up,_Vp) std::move_backward(_Tp, _Up, _Vp)




  template<typename _ForwardIterator, typename _Tp>
   
    inline typename
    __gnu_cxx::__enable_if<!__is_scalar<_Tp>::__value, void>::__type
    __fill_a1(_ForwardIterator __first, _ForwardIterator __last,
       const _Tp& __value)
    {
      for (; __first != __last; ++__first)
 *__first = __value;
    }

  template<typename _ForwardIterator, typename _Tp>
   
    inline typename
    __gnu_cxx::__enable_if<__is_scalar<_Tp>::__value, void>::__type
    __fill_a1(_ForwardIterator __first, _ForwardIterator __last,
       const _Tp& __value)
    {
      const _Tp __tmp = __value;
      for (; __first != __last; ++__first)
 *__first = __tmp;
    }


  template<typename _Tp>
   
    inline typename
    __gnu_cxx::__enable_if<__is_byte<_Tp>::__value, void>::__type
    __fill_a1(_Tp* __first, _Tp* __last, const _Tp& __c)
    {
      const _Tp __tmp = __c;
# 948 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algobase.h" 3
      if (const size_t __len = __last - __first)
 __builtin_memset(__first, static_cast<unsigned char>(__tmp), __len);
    }

  template<typename _Ite, typename _Cont, typename _Tp>
   
    inline void
    __fill_a1(::__gnu_cxx::__normal_iterator<_Ite, _Cont> __first,
       ::__gnu_cxx::__normal_iterator<_Ite, _Cont> __last,
       const _Tp& __value)
    { std::__fill_a1(__first.base(), __last.base(), __value); }

  template<typename _Tp, typename _VTp>
    void
    __fill_a1(const std::_Deque_iterator<_Tp, _Tp&, _Tp*>&,
       const std::_Deque_iterator<_Tp, _Tp&, _Tp*>&,
       const _VTp&);

 
  void
  __fill_a1(std::_Bit_iterator, std::_Bit_iterator,
     const bool&);

  template<typename _FIte, typename _Tp>
   
    inline void
    __fill_a(_FIte __first, _FIte __last, const _Tp& __value)
    { std::__fill_a1(__first, __last, __value); }

  template<typename _Ite, typename _Seq, typename _Cat, typename _Tp>
    void
    __fill_a(const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&,
      const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&,
      const _Tp&);
# 995 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algobase.h" 3
  template<typename _ForwardIterator, typename _Tp>
   
    inline void
    fill(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value)
    {

     

      ;

      std::__fill_a(__first, __last, __value);
    }


  inline constexpr int
  __size_to_integer(int __n) { return __n; }
  inline constexpr unsigned
  __size_to_integer(unsigned __n) { return __n; }
  inline constexpr long
  __size_to_integer(long __n) { return __n; }
  inline constexpr unsigned long
  __size_to_integer(unsigned long __n) { return __n; }
  inline constexpr long long
  __size_to_integer(long long __n) { return __n; }
  inline constexpr unsigned long long
  __size_to_integer(unsigned long long __n) { return __n; }
# 1047 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algobase.h" 3
  inline constexpr long long
  __size_to_integer(float __n) { return (long long)__n; }
  inline constexpr long long
  __size_to_integer(double __n) { return (long long)__n; }
  inline constexpr long long
  __size_to_integer(long double __n) { return (long long)__n; }





  template<typename _OutputIterator, typename _Size, typename _Tp>
   
    inline typename
    __gnu_cxx::__enable_if<!__is_scalar<_Tp>::__value, _OutputIterator>::__type
    __fill_n_a1(_OutputIterator __first, _Size __n, const _Tp& __value)
    {
      for (; __n > 0; --__n, (void) ++__first)
 *__first = __value;
      return __first;
    }

  template<typename _OutputIterator, typename _Size, typename _Tp>
   
    inline typename
    __gnu_cxx::__enable_if<__is_scalar<_Tp>::__value, _OutputIterator>::__type
    __fill_n_a1(_OutputIterator __first, _Size __n, const _Tp& __value)
    {
      const _Tp __tmp = __value;
      for (; __n > 0; --__n, (void) ++__first)
 *__first = __tmp;
      return __first;
    }

  template<typename _Ite, typename _Seq, typename _Cat, typename _Size,
    typename _Tp>
    ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>
    __fill_n_a(const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>& __first,
        _Size __n, const _Tp& __value,
        std::input_iterator_tag);

  template<typename _OutputIterator, typename _Size, typename _Tp>
   
    inline _OutputIterator
    __fill_n_a(_OutputIterator __first, _Size __n, const _Tp& __value,
        std::output_iterator_tag)
    {

      static_assert(is_integral<_Size>{}, "fill_n must pass integral size");

      return __fill_n_a1(__first, __n, __value);
    }

  template<typename _OutputIterator, typename _Size, typename _Tp>
   
    inline _OutputIterator
    __fill_n_a(_OutputIterator __first, _Size __n, const _Tp& __value,
        std::input_iterator_tag)
    {

      static_assert(is_integral<_Size>{}, "fill_n must pass integral size");

      return __fill_n_a1(__first, __n, __value);
    }

  template<typename _OutputIterator, typename _Size, typename _Tp>
   
    inline _OutputIterator
    __fill_n_a(_OutputIterator __first, _Size __n, const _Tp& __value,
        std::random_access_iterator_tag)
    {

      static_assert(is_integral<_Size>{}, "fill_n must pass integral size");

      if (__n <= 0)
 return __first;

      ;

      std::__fill_a(__first, __first + __n, __value);
      return __first + __n;
    }
# 1147 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algobase.h" 3
  template<typename _OI, typename _Size, typename _Tp>
   
    inline _OI
    fill_n(_OI __first, _Size __n, const _Tp& __value)
    {

     

      return std::__fill_n_a(__first, std::__size_to_integer(__n), __value,
          std::__iterator_category(__first));
    }

  template<bool _BoolType>
    struct __equal
    {
      template<typename _II1, typename _II2>

 static bool
 equal(_II1 __first1, _II1 __last1, _II2 __first2)
 {
   for (; __first1 != __last1; ++__first1, (void) ++__first2)
     if (!(*__first1 == *__first2))
       return false;
   return true;
 }
    };

  template<>
    struct __equal<true>
    {
      template<typename _Tp>

 static bool
 equal(const _Tp* __first1, const _Tp* __last1, const _Tp* __first2)
 {
   if (const size_t __len = (__last1 - __first1))
     return !std::__memcmp(__first1, __first2, __len);
   return true;
 }
    };

  template<typename _Tp, typename _Ref, typename _Ptr, typename _II>
    typename __gnu_cxx::__enable_if<
      __is_random_access_iter<_II>::__value, bool>::__type
    __equal_aux1(std::_Deque_iterator<_Tp, _Ref, _Ptr>,
   std::_Deque_iterator<_Tp, _Ref, _Ptr>,
   _II);

  template<typename _Tp1, typename _Ref1, typename _Ptr1,
    typename _Tp2, typename _Ref2, typename _Ptr2>
    bool
    __equal_aux1(std::_Deque_iterator<_Tp1, _Ref1, _Ptr1>,
   std::_Deque_iterator<_Tp1, _Ref1, _Ptr1>,
   std::_Deque_iterator<_Tp2, _Ref2, _Ptr2>);

  template<typename _II, typename _Tp, typename _Ref, typename _Ptr>
    typename __gnu_cxx::__enable_if<
      __is_random_access_iter<_II>::__value, bool>::__type
    __equal_aux1(_II, _II,
  std::_Deque_iterator<_Tp, _Ref, _Ptr>);

  template<typename _II1, typename _II2>
   
    inline bool
    __equal_aux1(_II1 __first1, _II1 __last1, _II2 __first2)
    {
      typedef typename iterator_traits<_II1>::value_type _ValueType1;
      const bool __simple = ((__is_integer<_ValueType1>::__value
         || __is_pointer<_ValueType1>::__value)
        && __memcmpable<_II1, _II2>::__value);
      return std::__equal<__simple>::equal(__first1, __last1, __first2);
    }

  template<typename _II1, typename _II2>
   
    inline bool
    __equal_aux(_II1 __first1, _II1 __last1, _II2 __first2)
    {
      return std::__equal_aux1(std::__niter_base(__first1),
          std::__niter_base(__last1),
          std::__niter_base(__first2));
    }

  template<typename _II1, typename _Seq1, typename _Cat1, typename _II2>
    bool
    __equal_aux(const ::__gnu_debug::_Safe_iterator<_II1, _Seq1, _Cat1>&,
  const ::__gnu_debug::_Safe_iterator<_II1, _Seq1, _Cat1>&,
  _II2);

  template<typename _II1, typename _II2, typename _Seq2, typename _Cat2>
    bool
    __equal_aux(_II1, _II1,
  const ::__gnu_debug::_Safe_iterator<_II2, _Seq2, _Cat2>&);

  template<typename _II1, typename _Seq1, typename _Cat1,
    typename _II2, typename _Seq2, typename _Cat2>
    bool
    __equal_aux(const ::__gnu_debug::_Safe_iterator<_II1, _Seq1, _Cat1>&,
  const ::__gnu_debug::_Safe_iterator<_II1, _Seq1, _Cat1>&,
  const ::__gnu_debug::_Safe_iterator<_II2, _Seq2, _Cat2>&);

  template<typename, typename>
    struct __lc_rai
    {
      template<typename _II1, typename _II2>

 static _II1
 __newlast1(_II1, _II1 __last1, _II2, _II2)
 { return __last1; }

      template<typename _II>

 static bool
 __cnd2(_II __first, _II __last)
 { return __first != __last; }
    };

  template<>
    struct __lc_rai<random_access_iterator_tag, random_access_iterator_tag>
    {
      template<typename _RAI1, typename _RAI2>

 static _RAI1
 __newlast1(_RAI1 __first1, _RAI1 __last1,
     _RAI2 __first2, _RAI2 __last2)
 {
   const typename iterator_traits<_RAI1>::difference_type
     __diff1 = __last1 - __first1;
   const typename iterator_traits<_RAI2>::difference_type
     __diff2 = __last2 - __first2;
   return __diff2 < __diff1 ? __first1 + __diff2 : __last1;
 }

      template<typename _RAI>
 static bool
 __cnd2(_RAI, _RAI)
 { return true; }
    };

  template<typename _II1, typename _II2, typename _Compare>
   
    bool
    __lexicographical_compare_impl(_II1 __first1, _II1 __last1,
       _II2 __first2, _II2 __last2,
       _Compare __comp)
    {
      typedef typename iterator_traits<_II1>::iterator_category _Category1;
      typedef typename iterator_traits<_II2>::iterator_category _Category2;
      typedef std::__lc_rai<_Category1, _Category2> __rai_type;

      __last1 = __rai_type::__newlast1(__first1, __last1, __first2, __last2);
      for (; __first1 != __last1 && __rai_type::__cnd2(__first2, __last2);
    ++__first1, (void)++__first2)
 {
   if (__comp(__first1, __first2))
     return true;
   if (__comp(__first2, __first1))
     return false;
 }
      return __first1 == __last1 && __first2 != __last2;
    }

  template<bool _BoolType>
    struct __lexicographical_compare
    {
      template<typename _II1, typename _II2>

 static bool
 __lc(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2)
 {
   using __gnu_cxx::__ops::__iter_less_iter;
   return std::__lexicographical_compare_impl(__first1, __last1,
           __first2, __last2,
           __iter_less_iter());
 }

      template<typename _II1, typename _II2>

 static int
 __3way(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2)
 {
   while (__first1 != __last1)
     {
       if (__first2 == __last2)
  return +1;
       if (*__first1 < *__first2)
  return -1;
       if (*__first2 < *__first1)
  return +1;
       ++__first1;
       ++__first2;
     }
   return int(__first2 == __last2) - 1;
 }
    };

  template<>
    struct __lexicographical_compare<true>
    {
      template<typename _Tp, typename _Up>

 static bool
 __lc(const _Tp* __first1, const _Tp* __last1,
      const _Up* __first2, const _Up* __last2)
 { return __3way(__first1, __last1, __first2, __last2) < 0; }

      template<typename _Tp, typename _Up>

 static ptrdiff_t
 __3way(const _Tp* __first1, const _Tp* __last1,
        const _Up* __first2, const _Up* __last2)
 {
   const size_t __len1 = __last1 - __first1;
   const size_t __len2 = __last2 - __first2;
   if (const size_t __len = std::min(__len1, __len2))
     if (int __result = std::__memcmp(__first1, __first2, __len))
       return __result;
   return ptrdiff_t(__len1 - __len2);
 }
    };

  template<typename _II1, typename _II2>
   
    inline bool
    __lexicographical_compare_aux1(_II1 __first1, _II1 __last1,
       _II2 __first2, _II2 __last2)
    {
      typedef typename iterator_traits<_II1>::value_type _ValueType1;
      typedef typename iterator_traits<_II2>::value_type _ValueType2;
      const bool __simple =
 (__is_memcmp_ordered_with<_ValueType1, _ValueType2>::__value
  && __is_pointer<_II1>::__value
  && __is_pointer<_II2>::__value







  );

      return std::__lexicographical_compare<__simple>::__lc(__first1, __last1,
           __first2, __last2);
    }

  template<typename _Tp1, typename _Ref1, typename _Ptr1,
    typename _Tp2>
    bool
    __lexicographical_compare_aux1(
 std::_Deque_iterator<_Tp1, _Ref1, _Ptr1>,
 std::_Deque_iterator<_Tp1, _Ref1, _Ptr1>,
 _Tp2*, _Tp2*);

  template<typename _Tp1,
    typename _Tp2, typename _Ref2, typename _Ptr2>
    bool
    __lexicographical_compare_aux1(_Tp1*, _Tp1*,
 std::_Deque_iterator<_Tp2, _Ref2, _Ptr2>,
 std::_Deque_iterator<_Tp2, _Ref2, _Ptr2>);

  template<typename _Tp1, typename _Ref1, typename _Ptr1,
    typename _Tp2, typename _Ref2, typename _Ptr2>
    bool
    __lexicographical_compare_aux1(
 std::_Deque_iterator<_Tp1, _Ref1, _Ptr1>,
 std::_Deque_iterator<_Tp1, _Ref1, _Ptr1>,
 std::_Deque_iterator<_Tp2, _Ref2, _Ptr2>,
 std::_Deque_iterator<_Tp2, _Ref2, _Ptr2>);

  template<typename _II1, typename _II2>
   
    inline bool
    __lexicographical_compare_aux(_II1 __first1, _II1 __last1,
      _II2 __first2, _II2 __last2)
    {
      return std::__lexicographical_compare_aux1(std::__niter_base(__first1),
       std::__niter_base(__last1),
       std::__niter_base(__first2),
       std::__niter_base(__last2));
    }

  template<typename _Iter1, typename _Seq1, typename _Cat1,
    typename _II2>
    bool
    __lexicographical_compare_aux(
  const ::__gnu_debug::_Safe_iterator<_Iter1, _Seq1, _Cat1>&,
  const ::__gnu_debug::_Safe_iterator<_Iter1, _Seq1, _Cat1>&,
  _II2, _II2);

  template<typename _II1,
    typename _Iter2, typename _Seq2, typename _Cat2>
    bool
    __lexicographical_compare_aux(
  _II1, _II1,
  const ::__gnu_debug::_Safe_iterator<_Iter2, _Seq2, _Cat2>&,
  const ::__gnu_debug::_Safe_iterator<_Iter2, _Seq2, _Cat2>&);

  template<typename _Iter1, typename _Seq1, typename _Cat1,
    typename _Iter2, typename _Seq2, typename _Cat2>
    bool
    __lexicographical_compare_aux(
  const ::__gnu_debug::_Safe_iterator<_Iter1, _Seq1, _Cat1>&,
  const ::__gnu_debug::_Safe_iterator<_Iter1, _Seq1, _Cat1>&,
  const ::__gnu_debug::_Safe_iterator<_Iter2, _Seq2, _Cat2>&,
  const ::__gnu_debug::_Safe_iterator<_Iter2, _Seq2, _Cat2>&);

  template<typename _ForwardIterator, typename _Tp, typename _Compare>
   
    _ForwardIterator
    __lower_bound(_ForwardIterator __first, _ForwardIterator __last,
    const _Tp& __val, _Compare __comp)
    {
      typedef typename iterator_traits<_ForwardIterator>::difference_type
 _DistanceType;

      _DistanceType __len = std::distance(__first, __last);

      while (__len > 0)
 {
   _DistanceType __half = __len >> 1;
   _ForwardIterator __middle = __first;
   std::advance(__middle, __half);
   if (__comp(__middle, __val))
     {
       __first = __middle;
       ++__first;
       __len = __len - __half - 1;
     }
   else
     __len = __half;
 }
      return __first;
    }
# 1493 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algobase.h" 3
  template<typename _ForwardIterator, typename _Tp>
   
    inline _ForwardIterator
    lower_bound(_ForwardIterator __first, _ForwardIterator __last,
  const _Tp& __val)
    {

     
     

      ;

      return std::__lower_bound(__first, __last, __val,
    __gnu_cxx::__ops::__iter_less_val());
    }



  template<typename _Tp>
    inline constexpr _Tp
    __lg(_Tp __n)
    {




      const int __sz = sizeof(+__n);
      int __w = __sz * 8 - 1;
      if (__sz == sizeof(long long))
 __w -= __builtin_clzll(+__n);
      else if (__sz == sizeof(long))
 __w -= __builtin_clzl(+__n);
      else if (__sz == sizeof(int))
 __w -= __builtin_clz(+__n);
      return __w;

    }


# 1545 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algobase.h" 3
  template<typename _II1, typename _II2>
   
    inline bool
    equal(_II1 __first1, _II1 __last1, _II2 __first2)
    {

     
     
     


      ;

      return std::__equal_aux(__first1, __last1, __first2);
    }
# 1576 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algobase.h" 3
  template<typename _IIter1, typename _IIter2, typename _BinaryPredicate>
   
    inline bool
    equal(_IIter1 __first1, _IIter1 __last1,
   _IIter2 __first2, _BinaryPredicate __binary_pred)
    {

     
     
      ;

      for (; __first1 != __last1; ++__first1, (void)++__first2)
 if (!bool(__binary_pred(*__first1, *__first2)))
   return false;
      return true;
    }



  template<typename _II1, typename _II2>
   
    inline bool
    __equal4(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2)
    {
      using _RATag = random_access_iterator_tag;
      using _Cat1 = typename iterator_traits<_II1>::iterator_category;
      using _Cat2 = typename iterator_traits<_II2>::iterator_category;
      using _RAIters = __and_<is_same<_Cat1, _RATag>, is_same<_Cat2, _RATag>>;
      if (_RAIters())
 {
   auto __d1 = std::distance(__first1, __last1);
   auto __d2 = std::distance(__first2, __last2);
   if (__d1 != __d2)
     return false;
   return std::equal(__first1, __last1, __first2);
 }

      for (; __first1 != __last1 && __first2 != __last2;
   ++__first1, (void)++__first2)
 if (!(*__first1 == *__first2))
   return false;
      return __first1 == __last1 && __first2 == __last2;
    }


  template<typename _II1, typename _II2, typename _BinaryPredicate>
   
    inline bool
    __equal4(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2,
      _BinaryPredicate __binary_pred)
    {
      using _RATag = random_access_iterator_tag;
      using _Cat1 = typename iterator_traits<_II1>::iterator_category;
      using _Cat2 = typename iterator_traits<_II2>::iterator_category;
      using _RAIters = __and_<is_same<_Cat1, _RATag>, is_same<_Cat2, _RATag>>;
      if (_RAIters())
 {
   auto __d1 = std::distance(__first1, __last1);
   auto __d2 = std::distance(__first2, __last2);
   if (__d1 != __d2)
     return false;
   return std::equal(__first1, __last1, __first2,
           __binary_pred);
 }

      for (; __first1 != __last1 && __first2 != __last2;
   ++__first1, (void)++__first2)
 if (!bool(__binary_pred(*__first1, *__first2)))
   return false;
      return __first1 == __last1 && __first2 == __last2;
    }
# 1731 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algobase.h" 3
  template<typename _II1, typename _II2>
   
    inline bool
    lexicographical_compare(_II1 __first1, _II1 __last1,
       _II2 __first2, _II2 __last2)
    {





     
     
     
     
      ;
      ;

      return std::__lexicographical_compare_aux(__first1, __last1,
      __first2, __last2);
    }
# 1766 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algobase.h" 3
  template<typename _II1, typename _II2, typename _Compare>
   
    inline bool
    lexicographical_compare(_II1 __first1, _II1 __last1,
       _II2 __first2, _II2 __last2, _Compare __comp)
    {

     
     
      ;
      ;

      return std::__lexicographical_compare_impl
 (__first1, __last1, __first2, __last2,
  __gnu_cxx::__ops::__iter_comp_iter(__comp));
    }
# 1878 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algobase.h" 3
  template<typename _InputIterator1, typename _InputIterator2,
    typename _BinaryPredicate>
   
    pair<_InputIterator1, _InputIterator2>
    __mismatch(_InputIterator1 __first1, _InputIterator1 __last1,
        _InputIterator2 __first2, _BinaryPredicate __binary_pred)
    {
      while (__first1 != __last1 && __binary_pred(__first1, __first2))
 {
   ++__first1;
   ++__first2;
 }
      return pair<_InputIterator1, _InputIterator2>(__first1, __first2);
    }
# 1906 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algobase.h" 3
  template<typename _InputIterator1, typename _InputIterator2>
   
    inline pair<_InputIterator1, _InputIterator2>
    mismatch(_InputIterator1 __first1, _InputIterator1 __last1,
      _InputIterator2 __first2)
    {

     
     
     


      ;

      return std::__mismatch(__first1, __last1, __first2,
        __gnu_cxx::__ops::__iter_equal_to_iter());
    }
# 1940 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algobase.h" 3
  template<typename _InputIterator1, typename _InputIterator2,
    typename _BinaryPredicate>
   
    inline pair<_InputIterator1, _InputIterator2>
    mismatch(_InputIterator1 __first1, _InputIterator1 __last1,
      _InputIterator2 __first2, _BinaryPredicate __binary_pred)
    {

     
     
      ;

      return std::__mismatch(__first1, __last1, __first2,
 __gnu_cxx::__ops::__iter_comp_iter(__binary_pred));
    }
# 2044 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algobase.h" 3



  template<typename _InputIterator, typename _Predicate>
   
    inline _InputIterator
    __find_if(_InputIterator __first, _InputIterator __last,
       _Predicate __pred, input_iterator_tag)
    {
      while (__first != __last && !__pred(__first))
 ++__first;
      return __first;
    }


  template<typename _RandomAccessIterator, typename _Predicate>
   
    _RandomAccessIterator
    __find_if(_RandomAccessIterator __first, _RandomAccessIterator __last,
       _Predicate __pred, random_access_iterator_tag)
    {
      typename iterator_traits<_RandomAccessIterator>::difference_type
 __trip_count = (__last - __first) >> 2;

      for (; __trip_count > 0; --__trip_count)
 {
   if (__pred(__first))
     return __first;
   ++__first;

   if (__pred(__first))
     return __first;
   ++__first;

   if (__pred(__first))
     return __first;
   ++__first;

   if (__pred(__first))
     return __first;
   ++__first;
 }

      switch (__last - __first)
 {
 case 3:
   if (__pred(__first))
     return __first;
   ++__first;

 case 2:
   if (__pred(__first))
     return __first;
   ++__first;

 case 1:
   if (__pred(__first))
     return __first;
   ++__first;

 case 0:
 default:
   return __last;
 }
    }

  template<typename _Iterator, typename _Predicate>
   
    inline _Iterator
    __find_if(_Iterator __first, _Iterator __last, _Predicate __pred)
    {
      return __find_if(__first, __last, __pred,
         std::__iterator_category(__first));
    }

  template<typename _InputIterator, typename _Predicate>
   
    typename iterator_traits<_InputIterator>::difference_type
    __count_if(_InputIterator __first, _InputIterator __last, _Predicate __pred)
    {
      typename iterator_traits<_InputIterator>::difference_type __n = 0;
      for (; __first != __last; ++__first)
 if (__pred(__first))
   ++__n;
      return __n;
    }

  template<typename _ForwardIterator, typename _Predicate>
   
    _ForwardIterator
    __remove_if(_ForwardIterator __first, _ForwardIterator __last,
  _Predicate __pred)
    {
      __first = std::__find_if(__first, __last, __pred);
      if (__first == __last)
 return __first;
      _ForwardIterator __result = __first;
      ++__first;
      for (; __first != __last; ++__first)
 if (!__pred(__first))
   {
     *__result = std::move(*__first);
     ++__result;
   }
      return __result;
    }


  template<typename _ForwardIterator1, typename _ForwardIterator2,
    typename _BinaryPredicate>
   
    bool
    __is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
       _ForwardIterator2 __first2, _BinaryPredicate __pred)
    {


      for (; __first1 != __last1; ++__first1, (void)++__first2)
 if (!__pred(__first1, __first2))
   break;

      if (__first1 == __last1)
 return true;



      _ForwardIterator2 __last2 = __first2;
      std::advance(__last2, std::distance(__first1, __last1));
      for (_ForwardIterator1 __scan = __first1; __scan != __last1; ++__scan)
 {
   if (__scan != std::__find_if(__first1, __scan,
     __gnu_cxx::__ops::__iter_comp_iter(__pred, __scan)))
     continue;

   auto __matches
     = std::__count_if(__first2, __last2,
   __gnu_cxx::__ops::__iter_comp_iter(__pred, __scan));
   if (0 == __matches ||
       std::__count_if(__scan, __last1,
   __gnu_cxx::__ops::__iter_comp_iter(__pred, __scan))
       != __matches)
     return false;
 }
      return true;
    }
# 2202 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algobase.h" 3
  template<typename _ForwardIterator1, typename _ForwardIterator2>
   
    inline bool
    is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
     _ForwardIterator2 __first2)
    {

     
     
     


      ;

      return std::__is_permutation(__first1, __last1, __first2,
       __gnu_cxx::__ops::__iter_equal_to_iter());
    }



}
# 64 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_uninitialized.h" 2 3
# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/ext/alloc_traits.h" 1 3
# 30 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/ext/alloc_traits.h" 3
#define _EXT_ALLOC_TRAITS_H 1

       
# 33 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/ext/alloc_traits.h" 3

# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/alloc_traits.h" 1 3
# 31 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/alloc_traits.h" 3
#define _ALLOC_TRAITS_H 1
# 43 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/alloc_traits.h" 3
namespace std __attribute__ ((__visibility__ ("default")))
{



#define __cpp_lib_allocator_traits_is_always_equal 201411L


  struct __allocator_traits_base
  {
    template<typename _Tp, typename _Up, typename = void>
      struct __rebind : __replace_first_arg<_Tp, _Up>
      {
 static_assert(is_same<
   typename __replace_first_arg<_Tp, typename _Tp::value_type>::type,
   _Tp>::value,
   "allocator_traits<A>::rebind_alloc<A::value_type> must be A");
      };

    template<typename _Tp, typename _Up>
      struct __rebind<_Tp, _Up,
        __void_t<typename _Tp::template rebind<_Up>::other>>
      {
 using type = typename _Tp::template rebind<_Up>::other;

 static_assert(is_same<
   typename _Tp::template rebind<typename _Tp::value_type>::other,
   _Tp>::value,
   "allocator_traits<A>::rebind_alloc<A::value_type> must be A");
      };

  protected:
    template<typename _Tp>
      using __pointer = typename _Tp::pointer;
    template<typename _Tp>
      using __c_pointer = typename _Tp::const_pointer;
    template<typename _Tp>
      using __v_pointer = typename _Tp::void_pointer;
    template<typename _Tp>
      using __cv_pointer = typename _Tp::const_void_pointer;
    template<typename _Tp>
      using __pocca = typename _Tp::propagate_on_container_copy_assignment;
    template<typename _Tp>
      using __pocma = typename _Tp::propagate_on_container_move_assignment;
    template<typename _Tp>
      using __pocs = typename _Tp::propagate_on_container_swap;
    template<typename _Tp>
      using __equal = __type_identity<typename _Tp::is_always_equal>;
  };

  template<typename _Alloc, typename _Up>
    using __alloc_rebind
      = typename __allocator_traits_base::template __rebind<_Alloc, _Up>::type;
# 104 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/alloc_traits.h" 3
  template<typename _Alloc>
    struct allocator_traits : __allocator_traits_base
    {

      typedef _Alloc allocator_type;

      typedef typename _Alloc::value_type value_type;






      using pointer = __detected_or_t<value_type*, __pointer, _Alloc>;

    private:

      template<template<typename> class _Func, typename _Tp, typename = void>
 struct _Ptr
 {
   using type = typename pointer_traits<pointer>::template rebind<_Tp>;
 };

      template<template<typename> class _Func, typename _Tp>
 struct _Ptr<_Func, _Tp, __void_t<_Func<_Alloc>>>
 {
   using type = _Func<_Alloc>;
 };


      template<typename _A2, typename _PtrT, typename = void>
 struct _Diff
 { using type = typename pointer_traits<_PtrT>::difference_type; };

      template<typename _A2, typename _PtrT>
 struct _Diff<_A2, _PtrT, __void_t<typename _A2::difference_type>>
 { using type = typename _A2::difference_type; };


      template<typename _A2, typename _DiffT, typename = void>
 struct _Size : make_unsigned<_DiffT> { };

      template<typename _A2, typename _DiffT>
 struct _Size<_A2, _DiffT, __void_t<typename _A2::size_type>>
 { using type = typename _A2::size_type; };

    public:






      using const_pointer = typename _Ptr<__c_pointer, const value_type>::type;







      using void_pointer = typename _Ptr<__v_pointer, void>::type;







      using const_void_pointer = typename _Ptr<__cv_pointer, const void>::type;







      using difference_type = typename _Diff<_Alloc, pointer>::type;







      using size_type = typename _Size<_Alloc, difference_type>::type;







      using propagate_on_container_copy_assignment
 = __detected_or_t<false_type, __pocca, _Alloc>;







      using propagate_on_container_move_assignment
 = __detected_or_t<false_type, __pocma, _Alloc>;







      using propagate_on_container_swap
 = __detected_or_t<false_type, __pocs, _Alloc>;







      using is_always_equal
 = typename __detected_or_t<is_empty<_Alloc>, __equal, _Alloc>::type;

      template<typename _Tp>
 using rebind_alloc = __alloc_rebind<_Alloc, _Tp>;
      template<typename _Tp>
 using rebind_traits = allocator_traits<rebind_alloc<_Tp>>;

    private:
      template<typename _Alloc2>
 static constexpr auto
 _S_allocate(_Alloc2& __a, size_type __n, const_void_pointer __hint, int)
 -> decltype(__a.allocate(__n, __hint))
 { return __a.allocate(__n, __hint); }

      template<typename _Alloc2>
 static constexpr pointer
 _S_allocate(_Alloc2& __a, size_type __n, const_void_pointer, ...)
 { return __a.allocate(__n); }

      template<typename _Tp, typename... _Args>
 struct __construct_helper
 {
   template<typename _Alloc2,
     typename = decltype(std::declval<_Alloc2*>()->construct(
    std::declval<_Tp*>(), std::declval<_Args>()...))>
     static true_type __test(int);

   template<typename>
     static false_type __test(...);

   using type = decltype(__test<_Alloc>(0));
 };

      template<typename _Tp, typename... _Args>
 using __has_construct
   = typename __construct_helper<_Tp, _Args...>::type;

      template<typename _Tp, typename... _Args>
 static _Require<__has_construct<_Tp, _Args...>>
 _S_construct(_Alloc& __a, _Tp* __p, _Args&&... __args)
 noexcept(noexcept(__a.construct(__p, std::forward<_Args>(__args)...)))
 { __a.construct(__p, std::forward<_Args>(__args)...); }

      template<typename _Tp, typename... _Args>
 static
 _Require<__and_<__not_<__has_construct<_Tp, _Args...>>,
          is_constructible<_Tp, _Args...>>>
 _S_construct(_Alloc&, _Tp* __p, _Args&&... __args)
 noexcept(std::is_nothrow_constructible<_Tp, _Args...>::value)
 {

   ::new((void*)__p) _Tp(std::forward<_Args>(__args)...);



 }

      template<typename _Alloc2, typename _Tp>
 static auto
 _S_destroy(_Alloc2& __a, _Tp* __p, int)
 noexcept(noexcept(__a.destroy(__p)))
 -> decltype(__a.destroy(__p))
 { __a.destroy(__p); }

      template<typename _Alloc2, typename _Tp>
 static void
 _S_destroy(_Alloc2&, _Tp* __p, ...)
 noexcept(std::is_nothrow_destructible<_Tp>::value)
 { std::_Destroy(__p); }

      template<typename _Alloc2>
 static constexpr auto
 _S_max_size(_Alloc2& __a, int)
 -> decltype(__a.max_size())
 { return __a.max_size(); }

      template<typename _Alloc2>
 static constexpr size_type
 _S_max_size(_Alloc2&, ...)
 {


   return __gnu_cxx::__numeric_traits<size_type>::__max
     / sizeof(value_type);
 }

      template<typename _Alloc2>
 static constexpr auto
 _S_select(_Alloc2& __a, int)
 -> decltype(__a.select_on_container_copy_construction())
 { return __a.select_on_container_copy_construction(); }

      template<typename _Alloc2>
 static constexpr _Alloc2
 _S_select(_Alloc2& __a, ...)
 { return __a; }

    public:
# 331 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/alloc_traits.h" 3
      static pointer
      allocate(_Alloc& __a, size_type __n)
      { return __a.allocate(__n); }
# 346 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/alloc_traits.h" 3
      static pointer
      allocate(_Alloc& __a, size_type __n, const_void_pointer __hint)
      { return _S_allocate(__a, __n, __hint, 0); }
# 358 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/alloc_traits.h" 3
      static void
      deallocate(_Alloc& __a, pointer __p, size_type __n)
      { __a.deallocate(__p, __n); }
# 373 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/alloc_traits.h" 3
      template<typename _Tp, typename... _Args>
 static auto
 construct(_Alloc& __a, _Tp* __p, _Args&&... __args)
 noexcept(noexcept(_S_construct(__a, __p,
           std::forward<_Args>(__args)...)))
 -> decltype(_S_construct(__a, __p, std::forward<_Args>(__args)...))
 { _S_construct(__a, __p, std::forward<_Args>(__args)...); }
# 389 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/alloc_traits.h" 3
      template<typename _Tp>
 static void
 destroy(_Alloc& __a, _Tp* __p)
 noexcept(noexcept(_S_destroy(__a, __p, 0)))
 { _S_destroy(__a, __p, 0); }
# 403 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/alloc_traits.h" 3
      static size_type
      max_size(const _Alloc& __a) noexcept
      { return _S_max_size(__a, 0); }
# 415 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/alloc_traits.h" 3
      static _Alloc
      select_on_container_copy_construction(const _Alloc& __rhs)
      { return _S_select(__rhs, 0); }
    };
# 427 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/alloc_traits.h" 3
  template<typename _Tp>
    struct allocator_traits<allocator<_Tp>>
    {

      using allocator_type = allocator<_Tp>;


      using value_type = _Tp;


      using pointer = _Tp*;


      using const_pointer = const _Tp*;


      using void_pointer = void*;


      using const_void_pointer = const void*;


      using difference_type = std::ptrdiff_t;


      using size_type = std::size_t;


      using propagate_on_container_copy_assignment = false_type;


      using propagate_on_container_move_assignment = true_type;


      using propagate_on_container_swap = false_type;


      using is_always_equal = true_type;

      template<typename _Up>
 using rebind_alloc = allocator<_Up>;

      template<typename _Up>
 using rebind_traits = allocator_traits<allocator<_Up>>;
# 479 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/alloc_traits.h" 3
      [[__nodiscard__,__gnu__::__always_inline__]]
      static pointer
      allocate(allocator_type& __a, size_type __n)
      { return __a.allocate(__n); }
# 494 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/alloc_traits.h" 3
      [[__nodiscard__,__gnu__::__always_inline__]]
      static pointer
      allocate(allocator_type& __a, size_type __n, const_void_pointer __hint)
      {

 return __a.allocate(__n, __hint);



      }
# 513 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/alloc_traits.h" 3
      [[__gnu__::__always_inline__]]
      static void
      deallocate(allocator_type& __a, pointer __p, size_type __n)
      { __a.deallocate(__p, __n); }
# 529 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/alloc_traits.h" 3
      template<typename _Up, typename... _Args>
 [[__gnu__::__always_inline__]]
 static void
 construct(allocator_type& __a __attribute__((__unused__)), _Up* __p,
    _Args&&... __args)
 noexcept(std::is_nothrow_constructible<_Up, _Args...>::value)
 {

   __a.construct(__p, std::forward<_Args>(__args)...);



 }
# 550 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/alloc_traits.h" 3
      template<typename _Up>
 [[__gnu__::__always_inline__]]
 static void
 destroy(allocator_type& __a __attribute__((__unused__)), _Up* __p)
 noexcept(is_nothrow_destructible<_Up>::value)
 {

   __a.destroy(__p);



 }






      [[__gnu__::__always_inline__]]
      static size_type
      max_size(const allocator_type& __a __attribute__((__unused__))) noexcept
      {

 return __a.max_size();



      }






      [[__gnu__::__always_inline__]]
      static allocator_type
      select_on_container_copy_construction(const allocator_type& __rhs)
      { return __rhs; }
    };


  template<>
    struct allocator_traits<allocator<void>>
    {

      using allocator_type = allocator<void>;


      using value_type = void;


      using pointer = void*;


      using const_pointer = const void*;


      using void_pointer = void*;


      using const_void_pointer = const void*;


      using difference_type = std::ptrdiff_t;


      using size_type = std::size_t;


      using propagate_on_container_copy_assignment = false_type;


      using propagate_on_container_move_assignment = true_type;


      using propagate_on_container_swap = false_type;


      using is_always_equal = true_type;

      template<typename _Up>
 using rebind_alloc = allocator<_Up>;

      template<typename _Up>
 using rebind_traits = allocator_traits<allocator<_Up>>;


      static void*
      allocate(allocator_type&, size_type, const void* = nullptr) = delete;


      static void
      deallocate(allocator_type&, void*, size_type) = delete;
# 655 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/alloc_traits.h" 3
      template<typename _Up, typename... _Args>
 [[__gnu__::__always_inline__]]
 static void
 construct(allocator_type&, _Up* __p, _Args&&... __args)
 noexcept(std::is_nothrow_constructible<_Up, _Args...>::value)
 { std::_Construct(__p, std::forward<_Args>(__args)...); }
# 669 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/alloc_traits.h" 3
      template<typename _Up>
 [[__gnu__::__always_inline__]]
 static void
 destroy(allocator_type&, _Up* __p)
 noexcept(is_nothrow_destructible<_Up>::value)
 { std::_Destroy(__p); }


      static size_type
      max_size(const allocator_type&) = delete;






      [[__gnu__::__always_inline__]]
      static allocator_type
      select_on_container_copy_construction(const allocator_type& __rhs)
      { return __rhs; }
    };




  template<typename _Alloc>
    [[__gnu__::__always_inline__]]
    inline void
    __do_alloc_on_copy(_Alloc& __one, const _Alloc& __two, true_type)
    { __one = __two; }

  template<typename _Alloc>
    [[__gnu__::__always_inline__]]
    inline void
    __do_alloc_on_copy(_Alloc&, const _Alloc&, false_type)
    { }


  template<typename _Alloc>
    [[__gnu__::__always_inline__]]
    inline void
    __alloc_on_copy(_Alloc& __one, const _Alloc& __two)
    {
      using __traits = allocator_traits<_Alloc>;
      using __pocca =
 typename __traits::propagate_on_container_copy_assignment::type;




      __do_alloc_on_copy(__one, __two, __pocca());

    }

  template<typename _Alloc>
    [[__gnu__::__always_inline__]]
    constexpr _Alloc
    __alloc_on_copy(const _Alloc& __a)
    {
      typedef allocator_traits<_Alloc> __traits;
      return __traits::select_on_container_copy_construction(__a);
    }


  template<typename _Alloc>
    [[__gnu__::__always_inline__]]
    inline void __do_alloc_on_move(_Alloc& __one, _Alloc& __two, true_type)
    { __one = std::move(__two); }

  template<typename _Alloc>
    [[__gnu__::__always_inline__]]
    inline void __do_alloc_on_move(_Alloc&, _Alloc&, false_type)
    { }


  template<typename _Alloc>
    [[__gnu__::__always_inline__]]
    inline void
    __alloc_on_move(_Alloc& __one, _Alloc& __two)
    {
      using __traits = allocator_traits<_Alloc>;
      using __pocma
 = typename __traits::propagate_on_container_move_assignment::type;




      __do_alloc_on_move(__one, __two, __pocma());

    }


  template<typename _Alloc>
    [[__gnu__::__always_inline__]]
    inline void __do_alloc_on_swap(_Alloc& __one, _Alloc& __two, true_type)
    {
      using std::swap;
      swap(__one, __two);
    }

  template<typename _Alloc>
    [[__gnu__::__always_inline__]]
    inline void __do_alloc_on_swap(_Alloc&, _Alloc&, false_type)
    { }


  template<typename _Alloc>
    [[__gnu__::__always_inline__]]
    inline void
    __alloc_on_swap(_Alloc& __one, _Alloc& __two)
    {
      using __traits = allocator_traits<_Alloc>;
      using __pocs = typename __traits::propagate_on_container_swap::type;







      __do_alloc_on_swap(__one, __two, __pocs());

    }

  template<typename _Alloc, typename _Tp,
    typename _ValueT = __remove_cvref_t<typename _Alloc::value_type>,
    typename = void>
    struct __is_alloc_insertable_impl
    : false_type
    { };

  template<typename _Alloc, typename _Tp, typename _ValueT>
    struct __is_alloc_insertable_impl<_Alloc, _Tp, _ValueT,
      __void_t<decltype(allocator_traits<_Alloc>::construct(
     std::declval<_Alloc&>(), std::declval<_ValueT*>(),
     std::declval<_Tp>()))>>
    : true_type
    { };




  template<typename _Alloc>
    struct __is_copy_insertable
    : __is_alloc_insertable_impl<_Alloc,
     typename _Alloc::value_type const&>::type
    { };



  template<typename _Tp>
    struct __is_copy_insertable<allocator<_Tp>>
    : is_copy_constructible<_Tp>
    { };





  template<typename _Alloc>
    struct __is_move_insertable
    : __is_alloc_insertable_impl<_Alloc, typename _Alloc::value_type>::type
    { };



  template<typename _Tp>
    struct __is_move_insertable<allocator<_Tp>>
    : is_move_constructible<_Tp>
    { };



  template<typename _Alloc, typename = void>
    struct __is_allocator : false_type { };

  template<typename _Alloc>
    struct __is_allocator<_Alloc,
      __void_t<typename _Alloc::value_type,
        decltype(std::declval<_Alloc&>().allocate(size_t{}))>>
    : true_type { };

  template<typename _Alloc>
    using _RequireAllocator
      = typename enable_if<__is_allocator<_Alloc>::value, _Alloc>::type;

  template<typename _Alloc>
    using _RequireNotAllocator
      = typename enable_if<!__is_allocator<_Alloc>::value, _Alloc>::type;
# 872 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/alloc_traits.h" 3
  template<typename _Alloc, bool = __is_empty(_Alloc)>
    struct __alloc_swap
    { static void _S_do_it(_Alloc&, _Alloc&) noexcept { } };

  template<typename _Alloc>
    struct __alloc_swap<_Alloc, false>
    {
      static void
      _S_do_it(_Alloc& __one, _Alloc& __two) noexcept
      {

 if (__one != __two)
   swap(__one, __two);
      }
    };


  template<typename _Tp, bool
    = __or_<is_copy_constructible<typename _Tp::value_type>,
            is_nothrow_move_constructible<typename _Tp::value_type>>::value>
    struct __shrink_to_fit_aux
    { static bool _S_do_it(_Tp&) noexcept { return false; } };

  template<typename _Tp>
    struct __shrink_to_fit_aux<_Tp, true>
    {
     
      static bool
      _S_do_it(_Tp& __c) noexcept
      {
# 913 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/alloc_traits.h" 3
 return false;

      }
    };
# 925 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/alloc_traits.h" 3
  template<typename _ForwardIterator, typename _Allocator>
   
    void
    _Destroy(_ForwardIterator __first, _ForwardIterator __last,
      _Allocator& __alloc)
    {
      for (; __first != __last; ++__first)



 allocator_traits<_Allocator>::destroy(__alloc,
           std::__addressof(*__first));

    }


  template<typename _ForwardIterator, typename _Tp>
    __attribute__((__always_inline__))
    inline void
    _Destroy(_ForwardIterator __first, _ForwardIterator __last,
      allocator<_Tp>&)
    {
      _Destroy(__first, __last);
    }




}
# 35 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/ext/alloc_traits.h" 2 3

namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
{






template<typename _Alloc, typename = typename _Alloc::value_type>
  struct __alloc_traits

  : std::allocator_traits<_Alloc>

  {
    typedef _Alloc allocator_type;

    typedef std::allocator_traits<_Alloc> _Base_type;
    typedef typename _Base_type::value_type value_type;
    typedef typename _Base_type::pointer pointer;
    typedef typename _Base_type::const_pointer const_pointer;
    typedef typename _Base_type::size_type size_type;
    typedef typename _Base_type::difference_type difference_type;

    typedef value_type& reference;
    typedef const value_type& const_reference;
    using _Base_type::allocate;
    using _Base_type::deallocate;
    using _Base_type::construct;
    using _Base_type::destroy;
    using _Base_type::max_size;

  private:
    template<typename _Ptr>
      using __is_custom_pointer
 = std::__and_<std::is_same<pointer, _Ptr>,
        std::__not_<std::is_pointer<_Ptr>>>;

  public:

    template<typename _Ptr, typename... _Args>
      [[__gnu__::__always_inline__]]
      static
      std::__enable_if_t<__is_custom_pointer<_Ptr>::value>
      construct(_Alloc& __a, _Ptr __p, _Args&&... __args)
      noexcept(noexcept(_Base_type::construct(__a, std::__to_address(__p),
           std::forward<_Args>(__args)...)))
      {
 _Base_type::construct(__a, std::__to_address(__p),
         std::forward<_Args>(__args)...);
      }


    template<typename _Ptr>
      [[__gnu__::__always_inline__]]
      static
      std::__enable_if_t<__is_custom_pointer<_Ptr>::value>
      destroy(_Alloc& __a, _Ptr __p)
      noexcept(noexcept(_Base_type::destroy(__a, std::__to_address(__p))))
      { _Base_type::destroy(__a, std::__to_address(__p)); }

    [[__gnu__::__always_inline__]]
    static constexpr _Alloc _S_select_on_copy(const _Alloc& __a)
    { return _Base_type::select_on_container_copy_construction(__a); }

    [[__gnu__::__always_inline__]]
    static void _S_on_swap(_Alloc& __a, _Alloc& __b)
    { std::__alloc_on_swap(__a, __b); }

    [[__gnu__::__always_inline__]]
    static constexpr bool _S_propagate_on_copy_assign()
    { return _Base_type::propagate_on_container_copy_assignment::value; }

    [[__gnu__::__always_inline__]]
    static constexpr bool _S_propagate_on_move_assign()
    { return _Base_type::propagate_on_container_move_assignment::value; }

    [[__gnu__::__always_inline__]]
    static constexpr bool _S_propagate_on_swap()
    { return _Base_type::propagate_on_container_swap::value; }

    [[__gnu__::__always_inline__]]
    static constexpr bool _S_always_equal()
    { return _Base_type::is_always_equal::value; }

    __attribute__((__always_inline__))
    static constexpr bool _S_nothrow_move()
    { return _S_propagate_on_move_assign() || _S_always_equal(); }

    template<typename _Tp>
      struct rebind
      { typedef typename _Base_type::template rebind_alloc<_Tp> other; };
# 180 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/ext/alloc_traits.h" 3
  };


}
# 65 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_uninitialized.h" 2 3





namespace std __attribute__ ((__visibility__ ("default")))
{

# 81 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_uninitialized.h" 3
  template<typename _ValueType, typename _Tp>
    constexpr bool
    __check_constructible()
    {





      static_assert(is_constructible<_ValueType, _Tp>::value,
   "result type must be constructible from input type");

      return true;
    }




#define _GLIBCXX_USE_ASSIGN_FOR_INIT(T,U) __is_trivial(T) && __is_assignable(T&, U) && std::__check_constructible<T, U>()
# 110 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_uninitialized.h" 3
  template<typename _InputIterator, typename _ForwardIterator>
   
    _ForwardIterator
    __do_uninit_copy(_InputIterator __first, _InputIterator __last,
       _ForwardIterator __result)
    {
      _ForwardIterator __cur = __result;
      if (true)
 {
   for (; __first != __last; ++__first, (void)++__cur)
     std::_Construct(std::__addressof(*__cur), *__first);
   return __cur;
 }
      if (false)
 {
   std::_Destroy(__result, __cur);
   ;
 }
    }

  template<bool _TrivialValueTypes>
    struct __uninitialized_copy
    {
      template<typename _InputIterator, typename _ForwardIterator>
        static _ForwardIterator
        __uninit_copy(_InputIterator __first, _InputIterator __last,
        _ForwardIterator __result)
 { return std::__do_uninit_copy(__first, __last, __result); }
    };

  template<>
    struct __uninitialized_copy<true>
    {
      template<typename _InputIterator, typename _ForwardIterator>
        static _ForwardIterator
        __uninit_copy(_InputIterator __first, _InputIterator __last,
        _ForwardIterator __result)
        { return std::copy(__first, __last, __result); }
    };
# 161 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_uninitialized.h" 3
  template<typename _InputIterator, typename _ForwardIterator>
    inline _ForwardIterator
    uninitialized_copy(_InputIterator __first, _InputIterator __last,
         _ForwardIterator __result)
    {
      typedef typename iterator_traits<_InputIterator>::value_type
 _ValueType1;
      typedef typename iterator_traits<_ForwardIterator>::value_type
 _ValueType2;




      const bool __can_memmove = __is_trivial(_ValueType1);




      using _From = decltype(*__first);

      const bool __assignable
 = __is_trivial(_ValueType2) && __is_assignable(_ValueType2&, _From) && std::__check_constructible<_ValueType2, _From>();

      return std::__uninitialized_copy<__can_memmove && __assignable>::
 __uninit_copy(__first, __last, __result);
    }



  template<typename _ForwardIterator, typename _Tp>
    void
    __do_uninit_fill(_ForwardIterator __first, _ForwardIterator __last,
       const _Tp& __x)
    {
      _ForwardIterator __cur = __first;
      if (true)
 {
   for (; __cur != __last; ++__cur)
     std::_Construct(std::__addressof(*__cur), __x);
 }
      if (false)
 {
   std::_Destroy(__first, __cur);
   ;
 }
    }

  template<bool _TrivialValueType>
    struct __uninitialized_fill
    {
      template<typename _ForwardIterator, typename _Tp>
        static void
        __uninit_fill(_ForwardIterator __first, _ForwardIterator __last,
        const _Tp& __x)
 { std::__do_uninit_fill(__first, __last, __x); }
    };

  template<>
    struct __uninitialized_fill<true>
    {
      template<typename _ForwardIterator, typename _Tp>
        static void
        __uninit_fill(_ForwardIterator __first, _ForwardIterator __last,
        const _Tp& __x)
        { std::fill(__first, __last, __x); }
    };
# 239 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_uninitialized.h" 3
  template<typename _ForwardIterator, typename _Tp>
    inline void
    uninitialized_fill(_ForwardIterator __first, _ForwardIterator __last,
         const _Tp& __x)
    {
      typedef typename iterator_traits<_ForwardIterator>::value_type
 _ValueType;



      const bool __can_fill
 = __is_trivial(_ValueType) && __is_assignable(_ValueType&, const _Tp&) && std::__check_constructible<_ValueType, const _Tp&>();

      std::__uninitialized_fill<__can_fill>::
 __uninit_fill(__first, __last, __x);
    }



  template<typename _ForwardIterator, typename _Size, typename _Tp>
   
    _ForwardIterator
    __do_uninit_fill_n(_ForwardIterator __first, _Size __n, const _Tp& __x)
    {
      _ForwardIterator __cur = __first;
      if (true)
 {
   for (; __n > 0; --__n, (void) ++__cur)
     std::_Construct(std::__addressof(*__cur), __x);
   return __cur;
 }
      if (false)
 {
   std::_Destroy(__first, __cur);
   ;
 }
    }

  template<bool _TrivialValueType>
    struct __uninitialized_fill_n
    {
      template<typename _ForwardIterator, typename _Size, typename _Tp>
 static _ForwardIterator
        __uninit_fill_n(_ForwardIterator __first, _Size __n,
   const _Tp& __x)
 { return std::__do_uninit_fill_n(__first, __n, __x); }
    };

  template<>
    struct __uninitialized_fill_n<true>
    {
      template<typename _ForwardIterator, typename _Size, typename _Tp>
 static _ForwardIterator
        __uninit_fill_n(_ForwardIterator __first, _Size __n,
   const _Tp& __x)
        { return std::fill_n(__first, __n, __x); }
    };
# 310 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_uninitialized.h" 3
  template<typename _ForwardIterator, typename _Size, typename _Tp>
    inline _ForwardIterator
    uninitialized_fill_n(_ForwardIterator __first, _Size __n, const _Tp& __x)
    {
      typedef typename iterator_traits<_ForwardIterator>::value_type
 _ValueType;



      const bool __can_fill
 = __is_trivial(_ValueType) && __is_assignable(_ValueType&, const _Tp&) && std::__check_constructible<_ValueType, const _Tp&>()



 && __is_integer<_Size>::__value;

      return __uninitialized_fill_n<__can_fill>::
 __uninit_fill_n(__first, __n, __x);
    }

#undef _GLIBCXX_USE_ASSIGN_FOR_INIT
# 340 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_uninitialized.h" 3
  template<typename _InputIterator, typename _ForwardIterator,
    typename _Allocator>
   
    _ForwardIterator
    __uninitialized_copy_a(_InputIterator __first, _InputIterator __last,
      _ForwardIterator __result, _Allocator& __alloc)
    {
      _ForwardIterator __cur = __result;
      if (true)
 {
   typedef __gnu_cxx::__alloc_traits<_Allocator> __traits;
   for (; __first != __last; ++__first, (void)++__cur)
     __traits::construct(__alloc, std::__addressof(*__cur), *__first);
   return __cur;
 }
      if (false)
 {
   std::_Destroy(__result, __cur, __alloc);
   ;
 }
    }


  template<typename _InputIterator, typename _ForwardIterator, typename _Tp>
   
    inline _ForwardIterator
    __uninitialized_copy_a(_InputIterator __first, _InputIterator __last,
      _ForwardIterator __result, allocator<_Tp>&)
    {




      return std::uninitialized_copy(__first, __last, __result);
    }


  template<typename _InputIterator, typename _ForwardIterator,
    typename _Allocator>
   
    inline _ForwardIterator
    __uninitialized_move_a(_InputIterator __first, _InputIterator __last,
      _ForwardIterator __result, _Allocator& __alloc)
    {
      return std::__uninitialized_copy_a(std::make_move_iterator(__first),
      std::make_move_iterator(__last),
      __result, __alloc);
    }

  template<typename _InputIterator, typename _ForwardIterator,
    typename _Allocator>
   
    inline _ForwardIterator
    __uninitialized_move_if_noexcept_a(_InputIterator __first,
           _InputIterator __last,
           _ForwardIterator __result,
           _Allocator& __alloc)
    {
      return std::__uninitialized_copy_a
 (std::__make_move_if_noexcept_iterator(__first),
  std::__make_move_if_noexcept_iterator(__last), __result, __alloc);
    }

  template<typename _ForwardIterator, typename _Tp, typename _Allocator>
   
    void
    __uninitialized_fill_a(_ForwardIterator __first, _ForwardIterator __last,
      const _Tp& __x, _Allocator& __alloc)
    {
      _ForwardIterator __cur = __first;
      if (true)
 {
   typedef __gnu_cxx::__alloc_traits<_Allocator> __traits;
   for (; __cur != __last; ++__cur)
     __traits::construct(__alloc, std::__addressof(*__cur), __x);
 }
      if (false)
 {
   std::_Destroy(__first, __cur, __alloc);
   ;
 }
    }


  template<typename _ForwardIterator, typename _Tp, typename _Tp2>
   
    inline void
    __uninitialized_fill_a(_ForwardIterator __first, _ForwardIterator __last,
      const _Tp& __x, allocator<_Tp2>&)
    {




      std::uninitialized_fill(__first, __last, __x);
    }


  template<typename _ForwardIterator, typename _Size, typename _Tp,
    typename _Allocator>
    
    _ForwardIterator
    __uninitialized_fill_n_a(_ForwardIterator __first, _Size __n,
        const _Tp& __x, _Allocator& __alloc)
    {
      _ForwardIterator __cur = __first;
      if (true)
 {
   typedef __gnu_cxx::__alloc_traits<_Allocator> __traits;
   for (; __n > 0; --__n, (void) ++__cur)
     __traits::construct(__alloc, std::__addressof(*__cur), __x);
   return __cur;
 }
      if (false)
 {
   std::_Destroy(__first, __cur, __alloc);
   ;
 }
    }


  template<typename _ForwardIterator, typename _Size, typename _Tp,
    typename _Tp2>
   
    inline _ForwardIterator
    __uninitialized_fill_n_a(_ForwardIterator __first, _Size __n,
        const _Tp& __x, allocator<_Tp2>&)
    {




      return std::uninitialized_fill_n(__first, __n, __x);
    }
# 485 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_uninitialized.h" 3
  template<typename _InputIterator1, typename _InputIterator2,
    typename _ForwardIterator, typename _Allocator>
    inline _ForwardIterator
    __uninitialized_copy_move(_InputIterator1 __first1,
         _InputIterator1 __last1,
         _InputIterator2 __first2,
         _InputIterator2 __last2,
         _ForwardIterator __result,
         _Allocator& __alloc)
    {
      _ForwardIterator __mid = std::__uninitialized_copy_a(__first1, __last1,
          __result,
          __alloc);
      if (true)
 {
   return std::__uninitialized_move_a(__first2, __last2, __mid, __alloc);
 }
      if (false)
 {
   std::_Destroy(__result, __mid, __alloc);
   ;
 }
    }





  template<typename _InputIterator1, typename _InputIterator2,
    typename _ForwardIterator, typename _Allocator>
    inline _ForwardIterator
    __uninitialized_move_copy(_InputIterator1 __first1,
         _InputIterator1 __last1,
         _InputIterator2 __first2,
         _InputIterator2 __last2,
         _ForwardIterator __result,
         _Allocator& __alloc)
    {
      _ForwardIterator __mid = std::__uninitialized_move_a(__first1, __last1,
          __result,
          __alloc);
      if (true)
 {
   return std::__uninitialized_copy_a(__first2, __last2, __mid, __alloc);
 }
      if (false)
 {
   std::_Destroy(__result, __mid, __alloc);
   ;
 }
    }




  template<typename _ForwardIterator, typename _Tp, typename _InputIterator,
    typename _Allocator>
    inline _ForwardIterator
    __uninitialized_fill_move(_ForwardIterator __result, _ForwardIterator __mid,
         const _Tp& __x, _InputIterator __first,
         _InputIterator __last, _Allocator& __alloc)
    {
      std::__uninitialized_fill_a(__result, __mid, __x, __alloc);
      if (true)
 {
   return std::__uninitialized_move_a(__first, __last, __mid, __alloc);
 }
      if (false)
 {
   std::_Destroy(__result, __mid, __alloc);
   ;
 }
    }




  template<typename _InputIterator, typename _ForwardIterator, typename _Tp,
    typename _Allocator>
    inline void
    __uninitialized_move_fill(_InputIterator __first1, _InputIterator __last1,
         _ForwardIterator __first2,
         _ForwardIterator __last2, const _Tp& __x,
         _Allocator& __alloc)
    {
      _ForwardIterator __mid2 = std::__uninitialized_move_a(__first1, __last1,
           __first2,
           __alloc);
      if (true)
 {
   std::__uninitialized_fill_a(__mid2, __last2, __x, __alloc);
 }
      if (false)
 {
   std::_Destroy(__first2, __mid2, __alloc);
   ;
 }
    }
# 592 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_uninitialized.h" 3
  template<bool _TrivialValueType>
    struct __uninitialized_default_1
    {
      template<typename _ForwardIterator>
        static void
        __uninit_default(_ForwardIterator __first, _ForwardIterator __last)
        {
   _ForwardIterator __cur = __first;
   if (true)
     {
       for (; __cur != __last; ++__cur)
  std::_Construct(std::__addressof(*__cur));
     }
   if (false)
     {
       std::_Destroy(__first, __cur);
       ;
     }
 }
    };

  template<>
    struct __uninitialized_default_1<true>
    {
      template<typename _ForwardIterator>
        static void
        __uninit_default(_ForwardIterator __first, _ForwardIterator __last)
        {
   if (__first == __last)
     return;

   typename iterator_traits<_ForwardIterator>::value_type* __val
     = std::__addressof(*__first);
   std::_Construct(__val);
   if (++__first != __last)
     std::fill(__first, __last, *__val);
 }
    };

  template<bool _TrivialValueType>
    struct __uninitialized_default_n_1
    {
      template<typename _ForwardIterator, typename _Size>

        static _ForwardIterator
        __uninit_default_n(_ForwardIterator __first, _Size __n)
        {
   _ForwardIterator __cur = __first;
   if (true)
     {
       for (; __n > 0; --__n, (void) ++__cur)
  std::_Construct(std::__addressof(*__cur));
       return __cur;
     }
   if (false)
     {
       std::_Destroy(__first, __cur);
       ;
     }
 }
    };

  template<>
    struct __uninitialized_default_n_1<true>
    {
      template<typename _ForwardIterator, typename _Size>

        static _ForwardIterator
        __uninit_default_n(_ForwardIterator __first, _Size __n)
        {
   if (__n > 0)
     {
       typename iterator_traits<_ForwardIterator>::value_type* __val
  = std::__addressof(*__first);
       std::_Construct(__val);
       ++__first;
       __first = std::fill_n(__first, __n - 1, *__val);
     }
   return __first;
 }
    };



  template<typename _ForwardIterator>
    inline void
    __uninitialized_default(_ForwardIterator __first,
       _ForwardIterator __last)
    {
      typedef typename iterator_traits<_ForwardIterator>::value_type
 _ValueType;

      const bool __assignable = is_copy_assignable<_ValueType>::value;

      std::__uninitialized_default_1<__is_trivial(_ValueType)
         && __assignable>::
 __uninit_default(__first, __last);
    }



  template<typename _ForwardIterator, typename _Size>
   
    inline _ForwardIterator
    __uninitialized_default_n(_ForwardIterator __first, _Size __n)
    {
      typedef typename iterator_traits<_ForwardIterator>::value_type
 _ValueType;

      constexpr bool __can_fill
 = __and_<is_integral<_Size>, is_copy_assignable<_ValueType>>::value;

      return __uninitialized_default_n_1<__is_trivial(_ValueType)
      && __can_fill>::
 __uninit_default_n(__first, __n);
    }





  template<typename _ForwardIterator, typename _Allocator>
    void
    __uninitialized_default_a(_ForwardIterator __first,
         _ForwardIterator __last,
         _Allocator& __alloc)
    {
      _ForwardIterator __cur = __first;
      if (true)
 {
   typedef __gnu_cxx::__alloc_traits<_Allocator> __traits;
   for (; __cur != __last; ++__cur)
     __traits::construct(__alloc, std::__addressof(*__cur));
 }
      if (false)
 {
   std::_Destroy(__first, __cur, __alloc);
   ;
 }
    }


  template<typename _ForwardIterator, typename _Tp>
    inline void
    __uninitialized_default_a(_ForwardIterator __first,
         _ForwardIterator __last,
         allocator<_Tp>&)
    { std::__uninitialized_default(__first, __last); }





  template<typename _ForwardIterator, typename _Size, typename _Allocator>
    _ForwardIterator
    __uninitialized_default_n_a(_ForwardIterator __first, _Size __n,
    _Allocator& __alloc)
    {
      _ForwardIterator __cur = __first;
      if (true)
 {
   typedef __gnu_cxx::__alloc_traits<_Allocator> __traits;
   for (; __n > 0; --__n, (void) ++__cur)
     __traits::construct(__alloc, std::__addressof(*__cur));
   return __cur;
 }
      if (false)
 {
   std::_Destroy(__first, __cur, __alloc);
   ;
 }
    }




  template<typename _ForwardIterator, typename _Size, typename _Tp>
   
    inline _ForwardIterator
    __uninitialized_default_n_a(_ForwardIterator __first, _Size __n,
    allocator<_Tp>&)
    { return std::__uninitialized_default_n(__first, __n); }


  template<bool _TrivialValueType>
    struct __uninitialized_default_novalue_1
    {
      template<typename _ForwardIterator>
 static void
 __uninit_default_novalue(_ForwardIterator __first,
     _ForwardIterator __last)
 {
   _ForwardIterator __cur = __first;
   if (true)
     {
       for (; __cur != __last; ++__cur)
  std::_Construct_novalue(std::__addressof(*__cur));
     }
   if (false)
     {
       std::_Destroy(__first, __cur);
       ;
     }
 }
    };

  template<>
    struct __uninitialized_default_novalue_1<true>
    {
      template<typename _ForwardIterator>
        static void
        __uninit_default_novalue(_ForwardIterator __first,
     _ForwardIterator __last)
 {
 }
    };

  template<bool _TrivialValueType>
    struct __uninitialized_default_novalue_n_1
    {
      template<typename _ForwardIterator, typename _Size>
 static _ForwardIterator
 __uninit_default_novalue_n(_ForwardIterator __first, _Size __n)
 {
   _ForwardIterator __cur = __first;
   if (true)
     {
       for (; __n > 0; --__n, (void) ++__cur)
  std::_Construct_novalue(std::__addressof(*__cur));
       return __cur;
     }
   if (false)
     {
       std::_Destroy(__first, __cur);
       ;
     }
 }
    };

  template<>
    struct __uninitialized_default_novalue_n_1<true>
    {
      template<typename _ForwardIterator, typename _Size>
 static _ForwardIterator
 __uninit_default_novalue_n(_ForwardIterator __first, _Size __n)
 { return std::next(__first, __n); }
    };



  template<typename _ForwardIterator>
    inline void
    __uninitialized_default_novalue(_ForwardIterator __first,
        _ForwardIterator __last)
    {
      typedef typename iterator_traits<_ForwardIterator>::value_type
 _ValueType;

      std::__uninitialized_default_novalue_1<
 is_trivially_default_constructible<_ValueType>::value>::
 __uninit_default_novalue(__first, __last);
    }



  template<typename _ForwardIterator, typename _Size>
    inline _ForwardIterator
    __uninitialized_default_novalue_n(_ForwardIterator __first, _Size __n)
    {
      typedef typename iterator_traits<_ForwardIterator>::value_type
 _ValueType;

      return __uninitialized_default_novalue_n_1<
 is_trivially_default_constructible<_ValueType>::value>::
 __uninit_default_novalue_n(__first, __n);
    }

  template<typename _InputIterator, typename _Size,
    typename _ForwardIterator>
    _ForwardIterator
    __uninitialized_copy_n(_InputIterator __first, _Size __n,
      _ForwardIterator __result, input_iterator_tag)
    {
      _ForwardIterator __cur = __result;
      if (true)
 {
   for (; __n > 0; --__n, (void) ++__first, ++__cur)
     std::_Construct(std::__addressof(*__cur), *__first);
   return __cur;
 }
      if (false)
 {
   std::_Destroy(__result, __cur);
   ;
 }
    }

  template<typename _RandomAccessIterator, typename _Size,
    typename _ForwardIterator>
    inline _ForwardIterator
    __uninitialized_copy_n(_RandomAccessIterator __first, _Size __n,
      _ForwardIterator __result,
      random_access_iterator_tag)
    { return std::uninitialized_copy(__first, __first + __n, __result); }

  template<typename _InputIterator, typename _Size,
    typename _ForwardIterator>
    pair<_InputIterator, _ForwardIterator>
    __uninitialized_copy_n_pair(_InputIterator __first, _Size __n,
      _ForwardIterator __result, input_iterator_tag)
    {
      _ForwardIterator __cur = __result;
      if (true)
 {
   for (; __n > 0; --__n, (void) ++__first, ++__cur)
     std::_Construct(std::__addressof(*__cur), *__first);
   return {__first, __cur};
 }
      if (false)
 {
   std::_Destroy(__result, __cur);
   ;
 }
    }

  template<typename _RandomAccessIterator, typename _Size,
    typename _ForwardIterator>
    inline pair<_RandomAccessIterator, _ForwardIterator>
    __uninitialized_copy_n_pair(_RandomAccessIterator __first, _Size __n,
      _ForwardIterator __result,
      random_access_iterator_tag)
    {
      auto __second_res = uninitialized_copy(__first, __first + __n, __result);
      auto __first_res = std::next(__first, __n);
      return {__first_res, __second_res};
    }
# 941 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_uninitialized.h" 3
  template<typename _InputIterator, typename _Size, typename _ForwardIterator>
    inline _ForwardIterator
    uninitialized_copy_n(_InputIterator __first, _Size __n,
    _ForwardIterator __result)
    { return std::__uninitialized_copy_n(__first, __n, __result,
      std::__iterator_category(__first)); }


  template<typename _InputIterator, typename _Size, typename _ForwardIterator>
    inline pair<_InputIterator, _ForwardIterator>
    __uninitialized_copy_n_pair(_InputIterator __first, _Size __n,
         _ForwardIterator __result)
    {
      return
 std::__uninitialized_copy_n_pair(__first, __n, __result,
      std::__iterator_category(__first));
    }
# 1061 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_uninitialized.h" 3
  template<typename _Tp, typename _Up, typename _Allocator>
   
    inline void
    __relocate_object_a(_Tp* __restrict __dest, _Up* __restrict __orig,
   _Allocator& __alloc)
    noexcept(noexcept(std::allocator_traits<_Allocator>::construct(__alloc,
    __dest, std::move(*__orig)))
      && noexcept(std::allocator_traits<_Allocator>::destroy(
       __alloc, std::__addressof(*__orig))))
    {
      typedef std::allocator_traits<_Allocator> __traits;
      __traits::construct(__alloc, __dest, std::move(*__orig));
      __traits::destroy(__alloc, std::__addressof(*__orig));
    }



  template<typename _Tp, typename = void>
    struct __is_bitwise_relocatable
    : is_trivial<_Tp> { };

  template <typename _InputIterator, typename _ForwardIterator,
     typename _Allocator>
   
    inline _ForwardIterator
    __relocate_a_1(_InputIterator __first, _InputIterator __last,
     _ForwardIterator __result, _Allocator& __alloc)
    noexcept(noexcept(std::__relocate_object_a(std::addressof(*__result),
            std::addressof(*__first),
            __alloc)))
    {
      typedef typename iterator_traits<_InputIterator>::value_type
 _ValueType;
      typedef typename iterator_traits<_ForwardIterator>::value_type
 _ValueType2;
      static_assert(std::is_same<_ValueType, _ValueType2>::value,
   "relocation is only possible for values of the same type");
      _ForwardIterator __cur = __result;
      for (; __first != __last; ++__first, (void)++__cur)
 std::__relocate_object_a(std::__addressof(*__cur),
     std::__addressof(*__first), __alloc);
      return __cur;
    }


  template <typename _Tp, typename _Up>
   
    inline __enable_if_t<std::__is_bitwise_relocatable<_Tp>::value, _Tp*>
    __relocate_a_1(_Tp* __first, _Tp* __last,
     _Tp* __result,
     [[__maybe_unused__]] allocator<_Up>& __alloc) noexcept
    {
      ptrdiff_t __count = __last - __first;
      if (__count > 0)
 {
# 1126 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_uninitialized.h" 3
   __builtin_memmove(__result, __first, __count * sizeof(_Tp));
 }
      return __result + __count;
    }


  template <typename _InputIterator, typename _ForwardIterator,
     typename _Allocator>
   
    inline _ForwardIterator
    __relocate_a(_InputIterator __first, _InputIterator __last,
   _ForwardIterator __result, _Allocator& __alloc)
    noexcept(noexcept(__relocate_a_1(std::__niter_base(__first),
         std::__niter_base(__last),
         std::__niter_base(__result), __alloc)))
    {
      return std::__relocate_a_1(std::__niter_base(__first),
     std::__niter_base(__last),
     std::__niter_base(__result), __alloc);
    }







}
# 70 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/memory" 2 3
# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_raw_storage_iter.h" 1 3
# 57 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_raw_storage_iter.h" 3
#define _STL_RAW_STORAGE_ITERATOR_H 1

namespace std __attribute__ ((__visibility__ ("default")))
{



 
# 64 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_raw_storage_iter.h" 3
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"





  template <class _OutputIterator, class _Tp>
    class raw_storage_iterator
    : public iterator<output_iterator_tag, void, void, void, void>
    {
    protected:
      _OutputIterator _M_iter;

    public:
      explicit
      raw_storage_iterator(_OutputIterator __x)
      : _M_iter(__x) {}

      raw_storage_iterator&
      operator*() { return *this; }

      raw_storage_iterator&
      operator=(const _Tp& __element)
      {
 std::_Construct(std::__addressof(*_M_iter), __element);
 return *this;
      }




      raw_storage_iterator&
      operator=(_Tp&& __element)
      {
 std::_Construct(std::__addressof(*_M_iter), std::move(__element));
 return *this;
      }


      raw_storage_iterator&
      operator++()
      {
 ++_M_iter;
 return *this;
      }

      raw_storage_iterator
      operator++(int)
      {
 raw_storage_iterator __tmp = *this;
 ++_M_iter;
 return __tmp;
      }



      _OutputIterator base() const { return _M_iter; }
    };
#pragma GCC diagnostic pop


}
# 71 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/memory" 2 3



# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/align.h" 1 3
# 31 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/align.h" 3
#define _GLIBCXX_ALIGN_H 1



# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bit" 1 3
# 30 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bit" 3
#define _GLIBCXX_BIT 1

       
# 33 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bit" 3
# 36 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/align.h" 2 3



namespace std __attribute__ ((__visibility__ ("default")))
{

# 61 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/align.h" 3
inline void*
align(size_t __align, size_t __size, void*& __ptr, size_t& __space) noexcept
{
  if (__space < __size)
    return nullptr;
  const auto __intptr = reinterpret_cast<uintptr_t>(__ptr);
  const auto __aligned = (__intptr - 1u + __align) & -__align;
  const auto __diff = __aligned - __intptr;
  if (__diff > (__space - __size))
    return nullptr;
  else
    {
      __space -= __diff;
      return __ptr = reinterpret_cast<void*>(__aligned);
    }
}
# 108 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/align.h" 3

}
# 75 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/memory" 2 3



# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/unique_ptr.h" 1 3
# 31 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/unique_ptr.h" 3
#define _UNIQUE_PTR_H 1
# 54 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/unique_ptr.h" 3
namespace std __attribute__ ((__visibility__ ("default")))
{








 
# 64 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/unique_ptr.h" 3
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
  template<typename> class auto_ptr;
#pragma GCC diagnostic pop







  template<typename _Tp>
    struct default_delete
    {

      constexpr default_delete() noexcept = default;






      template<typename _Up,
        typename = _Require<is_convertible<_Up*, _Tp*>>>

        default_delete(const default_delete<_Up>&) noexcept { }


     
      void
      operator()(_Tp* __ptr) const
      {
 static_assert(!is_void<_Tp>::value,
        "can't delete pointer to incomplete type");
 static_assert(sizeof(_Tp)>0,
        "can't delete pointer to incomplete type");
 delete __ptr;
      }
    };
# 112 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/unique_ptr.h" 3
  template<typename _Tp>
    struct default_delete<_Tp[]>
    {
    public:

      constexpr default_delete() noexcept = default;
# 128 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/unique_ptr.h" 3
      template<typename _Up,
        typename = _Require<is_convertible<_Up(*)[], _Tp(*)[]>>>

        default_delete(const default_delete<_Up[]>&) noexcept { }


      template<typename _Up>

 typename enable_if<is_convertible<_Up(*)[], _Tp(*)[]>::value>::type
 operator()(_Up* __ptr) const
 {
   static_assert(sizeof(_Tp)>0,
   "can't delete pointer to incomplete type");
   delete [] __ptr;
 }
    };




  template <typename _Tp, typename _Dp>
    class __uniq_ptr_impl
    {
      template <typename _Up, typename _Ep, typename = void>
 struct _Ptr
 {
   using type = _Up*;
 };

      template <typename _Up, typename _Ep>
 struct
 _Ptr<_Up, _Ep, __void_t<typename remove_reference<_Ep>::type::pointer>>
 {
   using type = typename remove_reference<_Ep>::type::pointer;
 };

    public:
      using _DeleterConstraint = enable_if<
        __and_<__not_<is_pointer<_Dp>>,
        is_default_constructible<_Dp>>::value>;

      using pointer = typename _Ptr<_Tp, _Dp>::type;

      static_assert( !is_rvalue_reference<_Dp>::value,
       "unique_ptr's deleter type must be a function object type"
       " or an lvalue reference type" );

      __uniq_ptr_impl() = default;
     
      __uniq_ptr_impl(pointer __p) : _M_t() { _M_ptr() = __p; }

      template<typename _Del>

 __uniq_ptr_impl(pointer __p, _Del&& __d)
 : _M_t(__p, std::forward<_Del>(__d)) { }

     
      __uniq_ptr_impl(__uniq_ptr_impl&& __u) noexcept
      : _M_t(std::move(__u._M_t))
      { __u._M_ptr() = nullptr; }

     
      __uniq_ptr_impl& operator=(__uniq_ptr_impl&& __u) noexcept
      {
 reset(__u.release());
 _M_deleter() = std::forward<_Dp>(__u._M_deleter());
 return *this;
      }

     
      pointer& _M_ptr() noexcept { return std::get<0>(_M_t); }
     
      pointer _M_ptr() const noexcept { return std::get<0>(_M_t); }
     
      _Dp& _M_deleter() noexcept { return std::get<1>(_M_t); }
     
      const _Dp& _M_deleter() const noexcept { return std::get<1>(_M_t); }

     
      void reset(pointer __p) noexcept
      {
 const pointer __old_p = _M_ptr();
 _M_ptr() = __p;
 if (__old_p)
   _M_deleter()(__old_p);
      }

     
      pointer release() noexcept
      {
 pointer __p = _M_ptr();
 _M_ptr() = nullptr;
 return __p;
      }

     
      void
      swap(__uniq_ptr_impl& __rhs) noexcept
      {
 using std::swap;
 swap(this->_M_ptr(), __rhs._M_ptr());
 swap(this->_M_deleter(), __rhs._M_deleter());
      }

    private:
      tuple<pointer, _Dp> _M_t;
    };


  template <typename _Tp, typename _Dp,
     bool = is_move_constructible<_Dp>::value,
     bool = is_move_assignable<_Dp>::value>
    struct __uniq_ptr_data : __uniq_ptr_impl<_Tp, _Dp>
    {
      using __uniq_ptr_impl<_Tp, _Dp>::__uniq_ptr_impl;
      __uniq_ptr_data(__uniq_ptr_data&&) = default;
      __uniq_ptr_data& operator=(__uniq_ptr_data&&) = default;
    };

  template <typename _Tp, typename _Dp>
    struct __uniq_ptr_data<_Tp, _Dp, true, false> : __uniq_ptr_impl<_Tp, _Dp>
    {
      using __uniq_ptr_impl<_Tp, _Dp>::__uniq_ptr_impl;
      __uniq_ptr_data(__uniq_ptr_data&&) = default;
      __uniq_ptr_data& operator=(__uniq_ptr_data&&) = delete;
    };

  template <typename _Tp, typename _Dp>
    struct __uniq_ptr_data<_Tp, _Dp, false, true> : __uniq_ptr_impl<_Tp, _Dp>
    {
      using __uniq_ptr_impl<_Tp, _Dp>::__uniq_ptr_impl;
      __uniq_ptr_data(__uniq_ptr_data&&) = delete;
      __uniq_ptr_data& operator=(__uniq_ptr_data&&) = default;
    };

  template <typename _Tp, typename _Dp>
    struct __uniq_ptr_data<_Tp, _Dp, false, false> : __uniq_ptr_impl<_Tp, _Dp>
    {
      using __uniq_ptr_impl<_Tp, _Dp>::__uniq_ptr_impl;
      __uniq_ptr_data(__uniq_ptr_data&&) = delete;
      __uniq_ptr_data& operator=(__uniq_ptr_data&&) = delete;
    };







  template <typename _Tp, typename _Dp = default_delete<_Tp>>
    class unique_ptr
    {
      template <typename _Up>
 using _DeleterConstraint =
   typename __uniq_ptr_impl<_Tp, _Up>::_DeleterConstraint::type;

      __uniq_ptr_data<_Tp, _Dp> _M_t;

    public:
      using pointer = typename __uniq_ptr_impl<_Tp, _Dp>::pointer;
      using element_type = _Tp;
      using deleter_type = _Dp;

    private:


      template<typename _Up, typename _Ep>
 using __safe_conversion_up = __and_<
   is_convertible<typename unique_ptr<_Up, _Ep>::pointer, pointer>,
   __not_<is_array<_Up>>
        >;

    public:



      template<typename _Del = _Dp, typename = _DeleterConstraint<_Del>>
 constexpr unique_ptr() noexcept
 : _M_t()
 { }







      template<typename _Del = _Dp, typename = _DeleterConstraint<_Del>>

 explicit
 unique_ptr(pointer __p) noexcept
 : _M_t(__p)
        { }
# 329 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/unique_ptr.h" 3
      template<typename _Del = deleter_type,
        typename = _Require<is_copy_constructible<_Del>>>

 unique_ptr(pointer __p, const deleter_type& __d) noexcept
 : _M_t(__p, __d) { }
# 342 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/unique_ptr.h" 3
      template<typename _Del = deleter_type,
        typename = _Require<is_move_constructible<_Del>>>

 unique_ptr(pointer __p,
     __enable_if_t<!is_lvalue_reference<_Del>::value,
     _Del&&> __d) noexcept
 : _M_t(__p, std::move(__d))
 { }

      template<typename _Del = deleter_type,
        typename _DelUnref = typename remove_reference<_Del>::type>

 unique_ptr(pointer,
     __enable_if_t<is_lvalue_reference<_Del>::value,
     _DelUnref&&>) = delete;


      template<typename _Del = _Dp, typename = _DeleterConstraint<_Del>>
 constexpr unique_ptr(nullptr_t) noexcept
 : _M_t()
 { }




      unique_ptr(unique_ptr&&) = default;







      template<typename _Up, typename _Ep, typename = _Require<
               __safe_conversion_up<_Up, _Ep>,
        __conditional_t<is_reference<_Dp>::value,
          is_same<_Ep, _Dp>,
          is_convertible<_Ep, _Dp>>>>

 unique_ptr(unique_ptr<_Up, _Ep>&& __u) noexcept
 : _M_t(__u.release(), std::forward<_Ep>(__u.get_deleter()))
 { }


#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"

      template<typename _Up, typename = _Require<
        is_convertible<_Up*, _Tp*>, is_same<_Dp, default_delete<_Tp>>>>
 unique_ptr(auto_ptr<_Up>&& __u) noexcept;
#pragma GCC diagnostic pop






      ~unique_ptr() noexcept
      {
 static_assert(__is_invocable<deleter_type&, pointer>::value,
        "unique_ptr's deleter must be invocable with a pointer");
 auto& __ptr = _M_t._M_ptr();
 if (__ptr != nullptr)
   get_deleter()(std::move(__ptr));
 __ptr = pointer();
      }







      unique_ptr& operator=(unique_ptr&&) = default;
# 424 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/unique_ptr.h" 3
      template<typename _Up, typename _Ep>

        typename enable_if< __and_<
          __safe_conversion_up<_Up, _Ep>,
          is_assignable<deleter_type&, _Ep&&>
          >::value,
          unique_ptr&>::type
 operator=(unique_ptr<_Up, _Ep>&& __u) noexcept
 {
   reset(__u.release());
   get_deleter() = std::forward<_Ep>(__u.get_deleter());
   return *this;
 }


     
      unique_ptr&
      operator=(nullptr_t) noexcept
      {
 reset();
 return *this;
      }




     
      typename add_lvalue_reference<element_type>::type
      operator*() const noexcept(noexcept(*std::declval<pointer>()))
      {
 do { if (std::__is_constant_evaluated() && !bool(get() != pointer())) __builtin_unreachable(); } while (false);
 return *get();
      }


     
      pointer
      operator->() const noexcept
      {
 ;
 return get();
      }


     
      pointer
      get() const noexcept
      { return _M_t._M_ptr(); }


     
      deleter_type&
      get_deleter() noexcept
      { return _M_t._M_deleter(); }


     
      const deleter_type&
      get_deleter() const noexcept
      { return _M_t._M_deleter(); }


     
      explicit operator bool() const noexcept
      { return get() == pointer() ? false : true; }




     
      pointer
      release() noexcept
      { return _M_t.release(); }







     
      void
      reset(pointer __p = pointer()) noexcept
      {
 static_assert(__is_invocable<deleter_type&, pointer>::value,
        "unique_ptr's deleter must be invocable with a pointer");
 _M_t.reset(std::move(__p));
      }


     
      void
      swap(unique_ptr& __u) noexcept
      {
 static_assert(__is_swappable<_Dp>::value, "deleter must be swappable");
 _M_t.swap(__u._M_t);
      }


      unique_ptr(const unique_ptr&) = delete;
      unique_ptr& operator=(const unique_ptr&) = delete;
  };
# 535 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/unique_ptr.h" 3
  template<typename _Tp, typename _Dp>
    class unique_ptr<_Tp[], _Dp>
    {
      template <typename _Up>
      using _DeleterConstraint =
 typename __uniq_ptr_impl<_Tp, _Up>::_DeleterConstraint::type;

      __uniq_ptr_data<_Tp, _Dp> _M_t;


      template<typename _Up>
 using __is_derived_Tp
   = __and_< is_base_of<_Tp, _Up>,
      __not_<is_same<__remove_cv_t<_Tp>, __remove_cv_t<_Up>>> >;

    public:
      using pointer = typename __uniq_ptr_impl<_Tp, _Dp>::pointer;
      using element_type = _Tp;
      using deleter_type = _Dp;



      template<typename _Up, typename _Ep,
               typename _UPtr = unique_ptr<_Up, _Ep>,
        typename _UP_pointer = typename _UPtr::pointer,
        typename _UP_element_type = typename _UPtr::element_type>
 using __safe_conversion_up = __and_<
          is_array<_Up>,
          is_same<pointer, element_type*>,
          is_same<_UP_pointer, _UP_element_type*>,
          is_convertible<_UP_element_type(*)[], element_type(*)[]>
        >;


      template<typename _Up>
        using __safe_conversion_raw = __and_<
          __or_<__or_<is_same<_Up, pointer>,
                      is_same<_Up, nullptr_t>>,
                __and_<is_pointer<_Up>,
                       is_same<pointer, element_type*>,
                       is_convertible<
                         typename remove_pointer<_Up>::type(*)[],
                         element_type(*)[]>
                >
          >
        >;




      template<typename _Del = _Dp, typename = _DeleterConstraint<_Del>>
 constexpr unique_ptr() noexcept
 : _M_t()
 { }
# 597 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/unique_ptr.h" 3
      template<typename _Up,
        typename _Vp = _Dp,
        typename = _DeleterConstraint<_Vp>,
        typename = typename enable_if<
                 __safe_conversion_raw<_Up>::value, bool>::type>

 explicit
 unique_ptr(_Up __p) noexcept
 : _M_t(__p)
        { }
# 616 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/unique_ptr.h" 3
      template<typename _Up, typename _Del = deleter_type,
        typename = _Require<__safe_conversion_raw<_Up>,
       is_copy_constructible<_Del>>>

 unique_ptr(_Up __p, const deleter_type& __d) noexcept
 : _M_t(__p, __d) { }
# 631 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/unique_ptr.h" 3
      template<typename _Up, typename _Del = deleter_type,
        typename = _Require<__safe_conversion_raw<_Up>,
       is_move_constructible<_Del>>>

 unique_ptr(_Up __p,
     __enable_if_t<!is_lvalue_reference<_Del>::value,
     _Del&&> __d) noexcept
 : _M_t(std::move(__p), std::move(__d))
 { }

      template<typename _Up, typename _Del = deleter_type,
        typename _DelUnref = typename remove_reference<_Del>::type,
        typename = _Require<__safe_conversion_raw<_Up>>>
 unique_ptr(_Up,
     __enable_if_t<is_lvalue_reference<_Del>::value,
     _DelUnref&&>) = delete;


      unique_ptr(unique_ptr&&) = default;


      template<typename _Del = _Dp, typename = _DeleterConstraint<_Del>>
 constexpr unique_ptr(nullptr_t) noexcept
 : _M_t()
        { }

      template<typename _Up, typename _Ep, typename = _Require<
        __safe_conversion_up<_Up, _Ep>,
        __conditional_t<is_reference<_Dp>::value,
          is_same<_Ep, _Dp>,
          is_convertible<_Ep, _Dp>>>>

 unique_ptr(unique_ptr<_Up, _Ep>&& __u) noexcept
 : _M_t(__u.release(), std::forward<_Ep>(__u.get_deleter()))
 { }





      ~unique_ptr()
      {
 auto& __ptr = _M_t._M_ptr();
 if (__ptr != nullptr)
   get_deleter()(__ptr);
 __ptr = pointer();
      }







      unique_ptr&
      operator=(unique_ptr&&) = default;
# 695 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/unique_ptr.h" 3
      template<typename _Up, typename _Ep>

 typename
 enable_if<__and_<__safe_conversion_up<_Up, _Ep>,
                         is_assignable<deleter_type&, _Ep&&>
                  >::value,
                  unique_ptr&>::type
 operator=(unique_ptr<_Up, _Ep>&& __u) noexcept
 {
   reset(__u.release());
   get_deleter() = std::forward<_Ep>(__u.get_deleter());
   return *this;
 }


     
      unique_ptr&
      operator=(nullptr_t) noexcept
      {
 reset();
 return *this;
      }




     
      typename std::add_lvalue_reference<element_type>::type
      operator[](size_t __i) const
      {
 do { if (std::__is_constant_evaluated() && !bool(get() != pointer())) __builtin_unreachable(); } while (false);
 return get()[__i];
      }


     
      pointer
      get() const noexcept
      { return _M_t._M_ptr(); }


     
      deleter_type&
      get_deleter() noexcept
      { return _M_t._M_deleter(); }


     
      const deleter_type&
      get_deleter() const noexcept
      { return _M_t._M_deleter(); }


     
      explicit operator bool() const noexcept
      { return get() == pointer() ? false : true; }




     
      pointer
      release() noexcept
      { return _M_t.release(); }







      template <typename _Up,
                typename = _Require<
                  __or_<is_same<_Up, pointer>,
                        __and_<is_same<pointer, element_type*>,
                               is_pointer<_Up>,
                               is_convertible<
                                 typename remove_pointer<_Up>::type(*)[],
                                 element_type(*)[]
                               >
                        >
                  >
               >>
     
      void
      reset(_Up __p) noexcept
      { _M_t.reset(std::move(__p)); }

     
      void reset(nullptr_t = nullptr) noexcept
      { reset(pointer()); }


     
      void
      swap(unique_ptr& __u) noexcept
      {
 static_assert(__is_swappable<_Dp>::value, "deleter must be swappable");
 _M_t.swap(__u._M_t);
      }


      unique_ptr(const unique_ptr&) = delete;
      unique_ptr& operator=(const unique_ptr&) = delete;
    };





  template<typename _Tp, typename _Dp>
    inline





    void

    swap(unique_ptr<_Tp, _Dp>& __x,
  unique_ptr<_Tp, _Dp>& __y) noexcept
    { __x.swap(__y); }
# 826 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/unique_ptr.h" 3
  template<typename _Tp, typename _Dp,
    typename _Up, typename _Ep>
   
    inline bool
    operator==(const unique_ptr<_Tp, _Dp>& __x,
        const unique_ptr<_Up, _Ep>& __y)
    { return __x.get() == __y.get(); }


  template<typename _Tp, typename _Dp>
   
    inline bool
    operator==(const unique_ptr<_Tp, _Dp>& __x, nullptr_t) noexcept
    { return !__x; }



  template<typename _Tp, typename _Dp>
   
    inline bool
    operator==(nullptr_t, const unique_ptr<_Tp, _Dp>& __x) noexcept
    { return !__x; }


  template<typename _Tp, typename _Dp,
    typename _Up, typename _Ep>
   
    inline bool
    operator!=(const unique_ptr<_Tp, _Dp>& __x,
        const unique_ptr<_Up, _Ep>& __y)
    { return __x.get() != __y.get(); }


  template<typename _Tp, typename _Dp>
   
    inline bool
    operator!=(const unique_ptr<_Tp, _Dp>& __x, nullptr_t) noexcept
    { return (bool)__x; }


  template<typename _Tp, typename _Dp>
   
    inline bool
    operator!=(nullptr_t, const unique_ptr<_Tp, _Dp>& __x) noexcept
    { return (bool)__x; }



  template<typename _Tp, typename _Dp,
    typename _Up, typename _Ep>
   
    inline bool
    operator<(const unique_ptr<_Tp, _Dp>& __x,
       const unique_ptr<_Up, _Ep>& __y)
    {
      typedef typename
 std::common_type<typename unique_ptr<_Tp, _Dp>::pointer,
                  typename unique_ptr<_Up, _Ep>::pointer>::type _CT;
      return std::less<_CT>()(__x.get(), __y.get());
    }


  template<typename _Tp, typename _Dp>
   
    inline bool
    operator<(const unique_ptr<_Tp, _Dp>& __x, nullptr_t)
    {
      return std::less<typename unique_ptr<_Tp, _Dp>::pointer>()(__x.get(),
         nullptr);
    }


  template<typename _Tp, typename _Dp>
   
    inline bool
    operator<(nullptr_t, const unique_ptr<_Tp, _Dp>& __x)
    {
      return std::less<typename unique_ptr<_Tp, _Dp>::pointer>()(nullptr,
         __x.get());
    }


  template<typename _Tp, typename _Dp,
    typename _Up, typename _Ep>
   
    inline bool
    operator<=(const unique_ptr<_Tp, _Dp>& __x,
        const unique_ptr<_Up, _Ep>& __y)
    { return !(__y < __x); }


  template<typename _Tp, typename _Dp>
   
    inline bool
    operator<=(const unique_ptr<_Tp, _Dp>& __x, nullptr_t)
    { return !(nullptr < __x); }


  template<typename _Tp, typename _Dp>
   
    inline bool
    operator<=(nullptr_t, const unique_ptr<_Tp, _Dp>& __x)
    { return !(__x < nullptr); }


  template<typename _Tp, typename _Dp,
    typename _Up, typename _Ep>
   
    inline bool
    operator>(const unique_ptr<_Tp, _Dp>& __x,
       const unique_ptr<_Up, _Ep>& __y)
    { return (__y < __x); }


  template<typename _Tp, typename _Dp>
   
    inline bool
    operator>(const unique_ptr<_Tp, _Dp>& __x, nullptr_t)
    {
      return std::less<typename unique_ptr<_Tp, _Dp>::pointer>()(nullptr,
         __x.get());
    }


  template<typename _Tp, typename _Dp>
   
    inline bool
    operator>(nullptr_t, const unique_ptr<_Tp, _Dp>& __x)
    {
      return std::less<typename unique_ptr<_Tp, _Dp>::pointer>()(__x.get(),
         nullptr);
    }


  template<typename _Tp, typename _Dp,
    typename _Up, typename _Ep>
   
    inline bool
    operator>=(const unique_ptr<_Tp, _Dp>& __x,
        const unique_ptr<_Up, _Ep>& __y)
    { return !(__x < __y); }


  template<typename _Tp, typename _Dp>
   
    inline bool
    operator>=(const unique_ptr<_Tp, _Dp>& __x, nullptr_t)
    { return !(__x < nullptr); }


  template<typename _Tp, typename _Dp>
    inline bool
    operator>=(nullptr_t, const unique_ptr<_Tp, _Dp>& __x)
    { return !(nullptr < __x); }
# 1007 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/unique_ptr.h" 3
  template<typename _Up, typename _Ptr = typename _Up::pointer,
    bool = __poison_hash<_Ptr>::__enable_hash_call>
    struct __uniq_ptr_hash

    : private __poison_hash<_Ptr>

    {
      size_t
      operator()(const _Up& __u) const
      noexcept(noexcept(std::declval<hash<_Ptr>>()(std::declval<_Ptr>())))
      { return hash<_Ptr>()(__u.get()); }
    };

  template<typename _Up, typename _Ptr>
    struct __uniq_ptr_hash<_Up, _Ptr, false>
    : private __poison_hash<_Ptr>
    { };



  template<typename _Tp, typename _Dp>
    struct hash<unique_ptr<_Tp, _Dp>>
    : public __hash_base<size_t, unique_ptr<_Tp, _Dp>>,
      public __uniq_ptr_hash<unique_ptr<_Tp, _Dp>>
    { };
# 1168 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/unique_ptr.h" 3

}
# 79 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/memory" 2 3

# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr.h" 1 3
# 50 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr.h" 3
#define _SHARED_PTR_H 1

# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/iosfwd" 1 3
# 34 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/iosfwd" 3
#define _GLIBCXX_IOSFWD 1

       
# 37 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/iosfwd" 3




# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stringfwd.h" 1 3
# 35 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stringfwd.h" 3
#define _STRINGFWD_H 1

       
# 38 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stringfwd.h" 3




namespace std __attribute__ ((__visibility__ ("default")))
{








  template<class _CharT>
    struct char_traits;

  template<> struct char_traits<char>;

  template<> struct char_traits<wchar_t>;






  template<> struct char_traits<char16_t>;
  template<> struct char_traits<char32_t>;


namespace __cxx11 {

  template<typename _CharT, typename _Traits = char_traits<_CharT>,
           typename _Alloc = allocator<_CharT> >
    class basic_string;

}


  typedef basic_string<char> string;


  typedef basic_string<wchar_t> wstring;
# 89 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stringfwd.h" 3
  typedef basic_string<char16_t> u16string;


  typedef basic_string<char32_t> u32string;





}
# 42 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/iosfwd" 2 3
# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/postypes.h" 1 3
# 36 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/postypes.h" 3
#define _GLIBCXX_POSTYPES_H 1

       
# 39 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/postypes.h" 3

# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cwchar" 1 3
# 39 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cwchar" 3
       
# 40 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cwchar" 3




# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/wchar.h" 1 3 4
# 24 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/wchar.h" 3 4
#define _WCHAR_H 1

#define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION 
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/libc-header-start.h" 1 3 4
# 31 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/libc-header-start.h" 3 4
#undef __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION





#undef __GLIBC_USE_LIB_EXT2


#define __GLIBC_USE_LIB_EXT2 1
# 67 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/libc-header-start.h" 3 4
#undef __GLIBC_USE_IEC_60559_BFP_EXT

#define __GLIBC_USE_IEC_60559_BFP_EXT 1



#undef __GLIBC_USE_IEC_60559_BFP_EXT_C2X

#define __GLIBC_USE_IEC_60559_BFP_EXT_C2X 1



#undef __GLIBC_USE_IEC_60559_EXT

#define __GLIBC_USE_IEC_60559_EXT 1
# 90 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/libc-header-start.h" 3 4
#undef __GLIBC_USE_IEC_60559_FUNCS_EXT

#define __GLIBC_USE_IEC_60559_FUNCS_EXT 1



#undef __GLIBC_USE_IEC_60559_FUNCS_EXT_C2X

#define __GLIBC_USE_IEC_60559_FUNCS_EXT_C2X 1






#undef __GLIBC_USE_IEC_60559_TYPES_EXT

#define __GLIBC_USE_IEC_60559_TYPES_EXT 1
# 28 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/wchar.h" 2 3 4


# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/floatn.h" 1 3 4







# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 1 3 4
# 21 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE 64
# 32 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE_TIME64_COMPAT32 0
# 9 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/floatn.h" 2 3 4
# 31 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/wchar.h" 2 3 4

#define __need_size_t 
#define __need_wchar_t 
#define __need_NULL 
# 1 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 1 3 4
# 158 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 3 4
#undef __need_ptrdiff_t
# 237 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 3 4
#undef __need_size_t
# 349 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 3 4
#undef __need_wchar_t
# 399 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 3 4
#undef NULL

#define NULL __null
# 410 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 3 4
#undef __need_NULL




#undef offsetof
#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
# 36 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/wchar.h" 2 3 4

#define __need___va_list 



# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/types/wint_t.h" 1 3 4

#define __wint_t_defined 1







#define _WINT_T 1
# 20 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/types/wint_t.h" 3 4
typedef unsigned int wint_t;
# 42 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/wchar.h" 2 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/types/mbstate_t.h" 1 3 4

#define __mbstate_t_defined 1



typedef __mbstate_t mbstate_t;
# 43 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/wchar.h" 2 3 4
# 54 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/wchar.h" 3 4
#define __CORRECT_ISO_CPP_WCHAR_H_PROTO 
# 64 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/wchar.h" 3 4
#define WEOF (0xffffffffu)
# 79 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/wchar.h" 3 4
extern "C" {



struct tm;



extern wchar_t *wcscpy (wchar_t *__restrict __dest,
   const wchar_t *__restrict __src)
     noexcept (true) __attribute__ ((__nonnull__ (1, 2)));


extern wchar_t *wcsncpy (wchar_t *__restrict __dest,
    const wchar_t *__restrict __src, size_t __n)
     noexcept (true) __attribute__ ((__nonnull__ (1, 2)));


extern wchar_t *wcscat (wchar_t *__restrict __dest,
   const wchar_t *__restrict __src)
     noexcept (true) __attribute__ ((__nonnull__ (1, 2)));

extern wchar_t *wcsncat (wchar_t *__restrict __dest,
    const wchar_t *__restrict __src, size_t __n)
     noexcept (true) __attribute__ ((__nonnull__ (1, 2)));


extern int wcscmp (const wchar_t *__s1, const wchar_t *__s2)
     noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));

extern int wcsncmp (const wchar_t *__s1, const wchar_t *__s2, size_t __n)
     noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));



extern int wcscasecmp (const wchar_t *__s1, const wchar_t *__s2) noexcept (true);


extern int wcsncasecmp (const wchar_t *__s1, const wchar_t *__s2,
   size_t __n) noexcept (true);



extern int wcscasecmp_l (const wchar_t *__s1, const wchar_t *__s2,
    locale_t __loc) noexcept (true);

extern int wcsncasecmp_l (const wchar_t *__s1, const wchar_t *__s2,
     size_t __n, locale_t __loc) noexcept (true);




extern int wcscoll (const wchar_t *__s1, const wchar_t *__s2) noexcept (true);



extern size_t wcsxfrm (wchar_t *__restrict __s1,
         const wchar_t *__restrict __s2, size_t __n) noexcept (true);







extern int wcscoll_l (const wchar_t *__s1, const wchar_t *__s2,
        locale_t __loc) noexcept (true);




extern size_t wcsxfrm_l (wchar_t *__s1, const wchar_t *__s2,
    size_t __n, locale_t __loc) noexcept (true);


extern wchar_t *wcsdup (const wchar_t *__s) noexcept (true)
  __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (__builtin_free, 1)));




extern "C++" wchar_t *wcschr (wchar_t *__wcs, wchar_t __wc)
     noexcept (true) __asm ("wcschr") __attribute__ ((__pure__));
extern "C++" const wchar_t *wcschr (const wchar_t *__wcs, wchar_t __wc)
     noexcept (true) __asm ("wcschr") __attribute__ ((__pure__));






extern "C++" wchar_t *wcsrchr (wchar_t *__wcs, wchar_t __wc)
     noexcept (true) __asm ("wcsrchr") __attribute__ ((__pure__));
extern "C++" const wchar_t *wcsrchr (const wchar_t *__wcs, wchar_t __wc)
     noexcept (true) __asm ("wcsrchr") __attribute__ ((__pure__));
# 182 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/wchar.h" 3 4
extern wchar_t *wcschrnul (const wchar_t *__s, wchar_t __wc)
     noexcept (true) __attribute__ ((__pure__));




extern size_t wcscspn (const wchar_t *__wcs, const wchar_t *__reject)
     noexcept (true) __attribute__ ((__pure__));


extern size_t wcsspn (const wchar_t *__wcs, const wchar_t *__accept)
     noexcept (true) __attribute__ ((__pure__));


extern "C++" wchar_t *wcspbrk (wchar_t *__wcs, const wchar_t *__accept)
     noexcept (true) __asm ("wcspbrk") __attribute__ ((__pure__));
extern "C++" const wchar_t *wcspbrk (const wchar_t *__wcs,
         const wchar_t *__accept)
     noexcept (true) __asm ("wcspbrk") __attribute__ ((__pure__));






extern "C++" wchar_t *wcsstr (wchar_t *__haystack, const wchar_t *__needle)
     noexcept (true) __asm ("wcsstr") __attribute__ ((__pure__));
extern "C++" const wchar_t *wcsstr (const wchar_t *__haystack,
        const wchar_t *__needle)
     noexcept (true) __asm ("wcsstr") __attribute__ ((__pure__));






extern wchar_t *wcstok (wchar_t *__restrict __s,
   const wchar_t *__restrict __delim,
   wchar_t **__restrict __ptr) noexcept (true);


extern size_t wcslen (const wchar_t *__s) noexcept (true) __attribute__ ((__pure__));




extern "C++" wchar_t *wcswcs (wchar_t *__haystack, const wchar_t *__needle)
     noexcept (true) __asm ("wcswcs") __attribute__ ((__pure__));
extern "C++" const wchar_t *wcswcs (const wchar_t *__haystack,
        const wchar_t *__needle)
     noexcept (true) __asm ("wcswcs") __attribute__ ((__pure__));
# 241 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/wchar.h" 3 4
extern size_t wcsnlen (const wchar_t *__s, size_t __maxlen)
     noexcept (true) __attribute__ ((__pure__));





extern "C++" wchar_t *wmemchr (wchar_t *__s, wchar_t __c, size_t __n)
     noexcept (true) __asm ("wmemchr") __attribute__ ((__pure__));
extern "C++" const wchar_t *wmemchr (const wchar_t *__s, wchar_t __c,
         size_t __n)
     noexcept (true) __asm ("wmemchr") __attribute__ ((__pure__));






extern int wmemcmp (const wchar_t *__s1, const wchar_t *__s2, size_t __n)
     noexcept (true) __attribute__ ((__pure__));


extern wchar_t *wmemcpy (wchar_t *__restrict __s1,
    const wchar_t *__restrict __s2, size_t __n) noexcept (true);



extern wchar_t *wmemmove (wchar_t *__s1, const wchar_t *__s2, size_t __n)
     noexcept (true);


extern wchar_t *wmemset (wchar_t *__s, wchar_t __c, size_t __n) noexcept (true);




extern wchar_t *wmempcpy (wchar_t *__restrict __s1,
     const wchar_t *__restrict __s2, size_t __n)
     noexcept (true);





extern wint_t btowc (int __c) noexcept (true);



extern int wctob (wint_t __c) noexcept (true);



extern int mbsinit (const mbstate_t *__ps) noexcept (true) __attribute__ ((__pure__));



extern size_t mbrtowc (wchar_t *__restrict __pwc,
         const char *__restrict __s, size_t __n,
         mbstate_t *__restrict __p) noexcept (true);


extern size_t wcrtomb (char *__restrict __s, wchar_t __wc,
         mbstate_t *__restrict __ps) noexcept (true);


extern size_t __mbrlen (const char *__restrict __s, size_t __n,
   mbstate_t *__restrict __ps) noexcept (true);
extern size_t mbrlen (const char *__restrict __s, size_t __n,
        mbstate_t *__restrict __ps) noexcept (true);







extern wint_t __btowc_alias (int __c) __asm ("btowc");
extern __inline __attribute__ ((__gnu_inline__)) wint_t
__attribute__ ((__leaf__)) btowc (int __c) noexcept (true)
{ return (__builtin_constant_p (__c) && __c >= '\0' && __c <= '\x7f'
   ? (wint_t) __c : __btowc_alias (__c)); }

extern int __wctob_alias (wint_t __c) __asm ("wctob");
extern __inline __attribute__ ((__gnu_inline__)) int
__attribute__ ((__leaf__)) wctob (wint_t __wc) noexcept (true)
{ return (__builtin_constant_p (__wc) && __wc >= L'\0' && __wc <= L'\x7f'
   ? (int) __wc : __wctob_alias (__wc)); }

extern __inline __attribute__ ((__gnu_inline__)) size_t
__attribute__ ((__leaf__)) mbrlen (const char *__restrict __s, size_t __n, mbstate_t *__restrict __ps) noexcept (true)

{ return (__ps != __null
   ? mbrtowc (__null, __s, __n, __ps) : __mbrlen (__s, __n, __null)); }




extern size_t mbsrtowcs (wchar_t *__restrict __dst,
    const char **__restrict __src, size_t __len,
    mbstate_t *__restrict __ps) noexcept (true);



extern size_t wcsrtombs (char *__restrict __dst,
    const wchar_t **__restrict __src, size_t __len,
    mbstate_t *__restrict __ps) noexcept (true);





extern size_t mbsnrtowcs (wchar_t *__restrict __dst,
     const char **__restrict __src, size_t __nmc,
     size_t __len, mbstate_t *__restrict __ps) noexcept (true);



extern size_t wcsnrtombs (char *__restrict __dst,
     const wchar_t **__restrict __src,
     size_t __nwc, size_t __len,
     mbstate_t *__restrict __ps) noexcept (true);






extern int wcwidth (wchar_t __c) noexcept (true);



extern int wcswidth (const wchar_t *__s, size_t __n) noexcept (true);





extern double wcstod (const wchar_t *__restrict __nptr,
        wchar_t **__restrict __endptr) noexcept (true);



extern float wcstof (const wchar_t *__restrict __nptr,
       wchar_t **__restrict __endptr) noexcept (true);
extern long double wcstold (const wchar_t *__restrict __nptr,
       wchar_t **__restrict __endptr) noexcept (true);
# 397 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/wchar.h" 3 4
extern _Float32 wcstof32 (const wchar_t *__restrict __nptr,
     wchar_t **__restrict __endptr) noexcept (true);



extern _Float64 wcstof64 (const wchar_t *__restrict __nptr,
     wchar_t **__restrict __endptr) noexcept (true);



extern _Float128 wcstof128 (const wchar_t *__restrict __nptr,
       wchar_t **__restrict __endptr) noexcept (true);



extern _Float32x wcstof32x (const wchar_t *__restrict __nptr,
       wchar_t **__restrict __endptr) noexcept (true);



extern _Float64x wcstof64x (const wchar_t *__restrict __nptr,
       wchar_t **__restrict __endptr) noexcept (true);
# 429 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/wchar.h" 3 4
extern long int wcstol (const wchar_t *__restrict __nptr,
   wchar_t **__restrict __endptr, int __base) noexcept (true);



extern unsigned long int wcstoul (const wchar_t *__restrict __nptr,
      wchar_t **__restrict __endptr, int __base)
     noexcept (true);




__extension__
extern long long int wcstoll (const wchar_t *__restrict __nptr,
         wchar_t **__restrict __endptr, int __base)
     noexcept (true);



__extension__
extern unsigned long long int wcstoull (const wchar_t *__restrict __nptr,
     wchar_t **__restrict __endptr,
     int __base) noexcept (true);





__extension__
extern long long int wcstoq (const wchar_t *__restrict __nptr,
        wchar_t **__restrict __endptr, int __base)
     noexcept (true);



__extension__
extern unsigned long long int wcstouq (const wchar_t *__restrict __nptr,
           wchar_t **__restrict __endptr,
           int __base) noexcept (true);






extern long int wcstol_l (const wchar_t *__restrict __nptr,
     wchar_t **__restrict __endptr, int __base,
     locale_t __loc) noexcept (true);

extern unsigned long int wcstoul_l (const wchar_t *__restrict __nptr,
        wchar_t **__restrict __endptr,
        int __base, locale_t __loc) noexcept (true);

__extension__
extern long long int wcstoll_l (const wchar_t *__restrict __nptr,
    wchar_t **__restrict __endptr,
    int __base, locale_t __loc) noexcept (true);

__extension__
extern unsigned long long int wcstoull_l (const wchar_t *__restrict __nptr,
       wchar_t **__restrict __endptr,
       int __base, locale_t __loc)
     noexcept (true);

extern double wcstod_l (const wchar_t *__restrict __nptr,
   wchar_t **__restrict __endptr, locale_t __loc)
     noexcept (true);

extern float wcstof_l (const wchar_t *__restrict __nptr,
         wchar_t **__restrict __endptr, locale_t __loc)
     noexcept (true);

extern long double wcstold_l (const wchar_t *__restrict __nptr,
         wchar_t **__restrict __endptr,
         locale_t __loc) noexcept (true);
# 512 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/wchar.h" 3 4
extern _Float32 wcstof32_l (const wchar_t *__restrict __nptr,
       wchar_t **__restrict __endptr,
       locale_t __loc) noexcept (true);



extern _Float64 wcstof64_l (const wchar_t *__restrict __nptr,
       wchar_t **__restrict __endptr,
       locale_t __loc) noexcept (true);



extern _Float128 wcstof128_l (const wchar_t *__restrict __nptr,
         wchar_t **__restrict __endptr,
         locale_t __loc) noexcept (true);



extern _Float32x wcstof32x_l (const wchar_t *__restrict __nptr,
         wchar_t **__restrict __endptr,
         locale_t __loc) noexcept (true);



extern _Float64x wcstof64x_l (const wchar_t *__restrict __nptr,
         wchar_t **__restrict __endptr,
         locale_t __loc) noexcept (true);
# 552 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/wchar.h" 3 4
extern wchar_t *wcpcpy (wchar_t *__restrict __dest,
   const wchar_t *__restrict __src) noexcept (true);



extern wchar_t *wcpncpy (wchar_t *__restrict __dest,
    const wchar_t *__restrict __src, size_t __n)
     noexcept (true);
# 581 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/wchar.h" 3 4
extern __FILE *open_wmemstream (wchar_t **__bufloc, size_t *__sizeloc) noexcept (true)
  __attribute__ ((__malloc__)) __attribute__ ((__malloc__ (fclose, 1)));





extern int fwide (__FILE *__fp, int __mode) noexcept (true);






extern int fwprintf (__FILE *__restrict __stream,
       const wchar_t *__restrict __format, ...)
                                                           ;




extern int wprintf (const wchar_t *__restrict __format, ...)
                                                           ;

extern int swprintf (wchar_t *__restrict __s, size_t __n,
       const wchar_t *__restrict __format, ...)
     noexcept (true) ;





extern int vfwprintf (__FILE *__restrict __s,
        const wchar_t *__restrict __format,
        __gnuc_va_list __arg)
                                                           ;




extern int vwprintf (const wchar_t *__restrict __format,
       __gnuc_va_list __arg)
                                                           ;


extern int vswprintf (wchar_t *__restrict __s, size_t __n,
        const wchar_t *__restrict __format,
        __gnuc_va_list __arg)
     noexcept (true) ;






extern int fwscanf (__FILE *__restrict __stream,
      const wchar_t *__restrict __format, ...)
                                                          ;




extern int wscanf (const wchar_t *__restrict __format, ...)
                                                          ;

extern int swscanf (const wchar_t *__restrict __s,
      const wchar_t *__restrict __format, ...)
     noexcept (true) ;
# 657 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/wchar.h" 3 4
extern int fwscanf (__FILE *__restrict __stream, const wchar_t *__restrict __format, ...) __asm__ ("" "__isoc99_fwscanf")


                                                          ;
extern int wscanf (const wchar_t *__restrict __format, ...) __asm__ ("" "__isoc99_wscanf")

                                                          ;
extern int swscanf (const wchar_t *__restrict __s, const wchar_t *__restrict __format, ...) noexcept (true) __asm__ ("" "__isoc99_swscanf")


                                                          ;
# 688 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/wchar.h" 3 4
extern int vfwscanf (__FILE *__restrict __s,
       const wchar_t *__restrict __format,
       __gnuc_va_list __arg)
                                                          ;




extern int vwscanf (const wchar_t *__restrict __format,
      __gnuc_va_list __arg)
                                                          ;

extern int vswscanf (const wchar_t *__restrict __s,
       const wchar_t *__restrict __format,
       __gnuc_va_list __arg)
     noexcept (true) ;







extern int vfwscanf (__FILE *__restrict __s, const wchar_t *__restrict __format, __gnuc_va_list __arg) __asm__ ("" "__isoc99_vfwscanf")


                                                          ;
extern int vwscanf (const wchar_t *__restrict __format, __gnuc_va_list __arg) __asm__ ("" "__isoc99_vwscanf")

                                                          ;
extern int vswscanf (const wchar_t *__restrict __s, const wchar_t *__restrict __format, __gnuc_va_list __arg) noexcept (true) __asm__ ("" "__isoc99_vswscanf")


                                                          ;
# 744 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/wchar.h" 3 4
extern wint_t fgetwc (__FILE *__stream);
extern wint_t getwc (__FILE *__stream);





extern wint_t getwchar (void);






extern wint_t fputwc (wchar_t __wc, __FILE *__stream);
extern wint_t putwc (wchar_t __wc, __FILE *__stream);





extern wint_t putwchar (wchar_t __wc);







extern wchar_t *fgetws (wchar_t *__restrict __ws, int __n,
   __FILE *__restrict __stream);





extern int fputws (const wchar_t *__restrict __ws,
     __FILE *__restrict __stream);






extern wint_t ungetwc (wint_t __wc, __FILE *__stream);
# 799 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/wchar.h" 3 4
extern wint_t getwc_unlocked (__FILE *__stream);
extern wint_t getwchar_unlocked (void);







extern wint_t fgetwc_unlocked (__FILE *__stream);







extern wint_t fputwc_unlocked (wchar_t __wc, __FILE *__stream);
# 825 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/wchar.h" 3 4
extern wint_t putwc_unlocked (wchar_t __wc, __FILE *__stream);
extern wint_t putwchar_unlocked (wchar_t __wc);
# 835 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/wchar.h" 3 4
extern wchar_t *fgetws_unlocked (wchar_t *__restrict __ws, int __n,
     __FILE *__restrict __stream);







extern int fputws_unlocked (const wchar_t *__restrict __ws,
       __FILE *__restrict __stream);






extern size_t wcsftime (wchar_t *__restrict __s, size_t __maxsize,
   const wchar_t *__restrict __format,
   const struct tm *__restrict __tp) noexcept (true);




extern size_t wcsftime_l (wchar_t *__restrict __s, size_t __maxsize,
     const wchar_t *__restrict __format,
     const struct tm *__restrict __tp,
     locale_t __loc) noexcept (true);





# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wchar2-decl.h" 1 3 4
# 20 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wchar2-decl.h" 3 4
#define _BITS_WCHAR2_DECL_H 1






extern wchar_t *__wmemcpy_chk (wchar_t *__restrict __s1,
          const wchar_t *__restrict __s2, size_t __n,
          size_t __ns1) noexcept (true);
extern wchar_t *__wmemmove_chk (wchar_t *__s1, const wchar_t *__s2,
    size_t __n, size_t __ns1) noexcept (true);




extern wchar_t *__wmempcpy_chk (wchar_t *__restrict __s1,
    const wchar_t *__restrict __s2, size_t __n,
    size_t __ns1) noexcept (true);




extern wchar_t *__wmemset_chk (wchar_t *__s, wchar_t __c, size_t __n,
          size_t __ns) noexcept (true);
extern wchar_t *__wcscpy_chk (wchar_t *__restrict __dest,
         const wchar_t *__restrict __src,
         size_t __n) noexcept (true);
extern wchar_t *__wcpcpy_chk (wchar_t *__restrict __dest,
         const wchar_t *__restrict __src,
         size_t __destlen) noexcept (true);
extern wchar_t *__wcsncpy_chk (wchar_t *__restrict __dest,
          const wchar_t *__restrict __src, size_t __n,
          size_t __destlen) noexcept (true);
extern wchar_t *__wcpncpy_chk (wchar_t *__restrict __dest,
          const wchar_t *__restrict __src, size_t __n,
          size_t __destlen) noexcept (true);
extern wchar_t *__wcscat_chk (wchar_t *__restrict __dest,
         const wchar_t *__restrict __src,
         size_t __destlen) noexcept (true);
extern wchar_t *__wcsncat_chk (wchar_t *__restrict __dest,
          const wchar_t *__restrict __src,
          size_t __n, size_t __destlen) noexcept (true);
extern int __swprintf_chk (wchar_t *__restrict __s, size_t __n,
      int __flag, size_t __s_len,
      const wchar_t *__restrict __format, ...)
     noexcept (true) ;
extern int __vswprintf_chk (wchar_t *__restrict __s, size_t __n,
       int __flag, size_t __s_len,
       const wchar_t *__restrict __format,
       __gnuc_va_list __arg)
     noexcept (true) ;



extern int __fwprintf_chk (__FILE *__restrict __stream, int __flag,
      const wchar_t *__restrict __format, ...);
extern int __wprintf_chk (int __flag, const wchar_t *__restrict __format,
     ...);
extern int __vfwprintf_chk (__FILE *__restrict __stream, int __flag,
       const wchar_t *__restrict __format,
       __gnuc_va_list __ap);
extern int __vwprintf_chk (int __flag, const wchar_t *__restrict __format,
      __gnuc_va_list __ap);



extern wchar_t *__fgetws_chk (wchar_t *__restrict __s, size_t __size, int __n,
         __FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));



extern wchar_t *__fgetws_unlocked_chk (wchar_t *__restrict __s, size_t __size,
           int __n, __FILE *__restrict __stream)
       __attribute__ ((__warn_unused_result__));



extern size_t __wcrtomb_chk (char *__restrict __s, wchar_t __wchar,
        mbstate_t *__restrict __p,
        size_t __buflen) noexcept (true) __attribute__ ((__warn_unused_result__));
extern size_t __mbsrtowcs_chk (wchar_t *__restrict __dst,
          const char **__restrict __src,
          size_t __len, mbstate_t *__restrict __ps,
          size_t __dstlen) noexcept (true);
extern size_t __wcsrtombs_chk (char *__restrict __dst,
          const wchar_t **__restrict __src,
          size_t __len, mbstate_t *__restrict __ps,
          size_t __dstlen) noexcept (true);



extern size_t __mbsnrtowcs_chk (wchar_t *__restrict __dst,
    const char **__restrict __src, size_t __nmc,
    size_t __len, mbstate_t *__restrict __ps,
    size_t __dstlen) noexcept (true);
extern size_t __wcsnrtombs_chk (char *__restrict __dst,
    const wchar_t **__restrict __src,
    size_t __nwc, size_t __len,
    mbstate_t *__restrict __ps, size_t __dstlen)
       noexcept (true);
# 869 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/wchar.h" 2 3 4
# 879 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/wchar.h" 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wchar2.h" 1 3 4
# 24 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wchar2.h" 3 4
extern wchar_t *__wmemcpy_alias (wchar_t *__restrict __s1, const wchar_t *__restrict __s2, size_t __n) noexcept (true) __asm__ ("" "wmemcpy")


            ;
extern wchar_t *__wmemcpy_chk_warn (wchar_t *__restrict __s1, const wchar_t *__restrict __s2, size_t __n, size_t __ns1) noexcept (true) __asm__ ("" "__wmemcpy_chk")



     __attribute__((__warning__ ("wmemcpy called with length bigger than size of destination " "buffer")))
            ;

extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t *
__attribute__ ((__leaf__)) wmemcpy (wchar_t *__restrict __s1, const wchar_t *__restrict __s2, size_t __n) noexcept (true)

{
  return (((__builtin_constant_p (__builtin_object_size (__s1, 0)) && (__builtin_object_size (__s1, 0)) == (long unsigned int) -1) || (((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((long unsigned int) (__n)) <= ((__builtin_object_size (__s1, 0))) / ((sizeof (wchar_t))))) && (((long unsigned int) (__n)) <= ((__builtin_object_size (__s1, 0))) / ((sizeof (wchar_t)))))) ? __wmemcpy_alias (__s1, __s2, __n) : ((((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((long unsigned int) (__n)) <= (__builtin_object_size (__s1, 0)) / (sizeof (wchar_t)))) && !(((long unsigned int) (__n)) <= (__builtin_object_size (__s1, 0)) / (sizeof (wchar_t)))) ? __wmemcpy_chk_warn (__s1, __s2, __n, (__builtin_object_size (__s1, 0)) / (sizeof (wchar_t))) : __wmemcpy_chk (__s1, __s2, __n, (__builtin_object_size (__s1, 0)) / (sizeof (wchar_t)))))

                       ;
}


extern wchar_t *__wmemmove_alias (wchar_t *__s1, const wchar_t *__s2, size_t __n) noexcept (true) __asm__ ("" "wmemmove")

                               ;
extern wchar_t *__wmemmove_chk_warn (wchar_t *__s1, const wchar_t *__s2, size_t __n, size_t __ns1) noexcept (true) __asm__ ("" "__wmemmove_chk")


     __attribute__((__warning__ ("wmemmove called with length bigger than size of destination " "buffer")))
            ;

extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t *
__attribute__ ((__leaf__)) wmemmove (wchar_t *__s1, const wchar_t *__s2, size_t __n) noexcept (true)
{
  return (((__builtin_constant_p (__builtin_object_size (__s1, 0)) && (__builtin_object_size (__s1, 0)) == (long unsigned int) -1) || (((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((long unsigned int) (__n)) <= ((__builtin_object_size (__s1, 0))) / ((sizeof (wchar_t))))) && (((long unsigned int) (__n)) <= ((__builtin_object_size (__s1, 0))) / ((sizeof (wchar_t)))))) ? __wmemmove_alias (__s1, __s2, __n) : ((((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((long unsigned int) (__n)) <= (__builtin_object_size (__s1, 0)) / (sizeof (wchar_t)))) && !(((long unsigned int) (__n)) <= (__builtin_object_size (__s1, 0)) / (sizeof (wchar_t)))) ? __wmemmove_chk_warn (__s1, __s2, __n, (__builtin_object_size (__s1, 0)) / (sizeof (wchar_t))) : __wmemmove_chk (__s1, __s2, __n, (__builtin_object_size (__s1, 0)) / (sizeof (wchar_t)))))

                       ;
}



extern wchar_t *__wmempcpy_alias (wchar_t *__restrict __s1, const wchar_t *__restrict __s2, size_t __n) noexcept (true) __asm__ ("" "wmempcpy")


                           ;
extern wchar_t *__wmempcpy_chk_warn (wchar_t *__restrict __s1, const wchar_t *__restrict __s2, size_t __n, size_t __ns1) noexcept (true) __asm__ ("" "__wmempcpy_chk")



     __attribute__((__warning__ ("wmempcpy called with length bigger than size of destination " "buffer")))
            ;

extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t *
__attribute__ ((__leaf__)) wmempcpy (wchar_t *__restrict __s1, const wchar_t *__restrict __s2, size_t __n) noexcept (true)

{
  return (((__builtin_constant_p (__builtin_object_size (__s1, 0)) && (__builtin_object_size (__s1, 0)) == (long unsigned int) -1) || (((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((long unsigned int) (__n)) <= ((__builtin_object_size (__s1, 0))) / ((sizeof (wchar_t))))) && (((long unsigned int) (__n)) <= ((__builtin_object_size (__s1, 0))) / ((sizeof (wchar_t)))))) ? __wmempcpy_alias (__s1, __s2, __n) : ((((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((long unsigned int) (__n)) <= (__builtin_object_size (__s1, 0)) / (sizeof (wchar_t)))) && !(((long unsigned int) (__n)) <= (__builtin_object_size (__s1, 0)) / (sizeof (wchar_t)))) ? __wmempcpy_chk_warn (__s1, __s2, __n, (__builtin_object_size (__s1, 0)) / (sizeof (wchar_t))) : __wmempcpy_chk (__s1, __s2, __n, (__builtin_object_size (__s1, 0)) / (sizeof (wchar_t)))))

                       ;
}



extern wchar_t *__wmemset_alias (wchar_t *__s, wchar_t __c, size_t __n) noexcept (true) __asm__ ("" "wmemset")
                             ;
extern wchar_t *__wmemset_chk_warn (wchar_t *__s, wchar_t __c, size_t __n, size_t __ns) noexcept (true) __asm__ ("" "__wmemset_chk")


     __attribute__((__warning__ ("wmemset called with length bigger than size of destination " "buffer")))
            ;

extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t *
__attribute__ ((__leaf__)) wmemset (wchar_t *__s, wchar_t __c, size_t __n) noexcept (true)
{
  return (((__builtin_constant_p (__builtin_object_size (__s, 0)) && (__builtin_object_size (__s, 0)) == (long unsigned int) -1) || (((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((long unsigned int) (__n)) <= ((__builtin_object_size (__s, 0))) / ((sizeof (wchar_t))))) && (((long unsigned int) (__n)) <= ((__builtin_object_size (__s, 0))) / ((sizeof (wchar_t)))))) ? __wmemset_alias (__s, __c, __n) : ((((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((long unsigned int) (__n)) <= (__builtin_object_size (__s, 0)) / (sizeof (wchar_t)))) && !(((long unsigned int) (__n)) <= (__builtin_object_size (__s, 0)) / (sizeof (wchar_t)))) ? __wmemset_chk_warn (__s, __c, __n, (__builtin_object_size (__s, 0)) / (sizeof (wchar_t))) : __wmemset_chk (__s, __c, __n, (__builtin_object_size (__s, 0)) / (sizeof (wchar_t)))))

                     ;
}


extern wchar_t *__wcscpy_alias (wchar_t *__restrict __dest, const wchar_t *__restrict __src) noexcept (true) __asm__ ("" "wcscpy")

                                              ;

extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t *
__attribute__ ((__leaf__)) wcscpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src) noexcept (true)
{
  size_t sz = __builtin_object_size (__dest, 2 > 1);
  if (sz != (size_t) -1)
    return __wcscpy_chk (__dest, __src, sz / sizeof (wchar_t));
  return __wcscpy_alias (__dest, __src);
}


extern wchar_t *__wcpcpy_alias (wchar_t *__restrict __dest, const wchar_t *__restrict __src) noexcept (true) __asm__ ("" "wcpcpy")

                                              ;

extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t *
__attribute__ ((__leaf__)) wcpcpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src) noexcept (true)
{
  size_t sz = __builtin_object_size (__dest, 2 > 1);
  if (sz != (size_t) -1)
    return __wcpcpy_chk (__dest, __src, sz / sizeof (wchar_t));
  return __wcpcpy_alias (__dest, __src);
}


extern wchar_t *__wcsncpy_alias (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n) noexcept (true) __asm__ ("" "wcsncpy")


                          ;
extern wchar_t *__wcsncpy_chk_warn (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n, size_t __destlen) noexcept (true) __asm__ ("" "__wcsncpy_chk")



     __attribute__((__warning__ ("wcsncpy called with length bigger than size of destination " "buffer")))
            ;

extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t *
__attribute__ ((__leaf__)) wcsncpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n) noexcept (true)

{
  return (((__builtin_constant_p (__builtin_object_size (__dest, 2 > 1)) && (__builtin_object_size (__dest, 2 > 1)) == (long unsigned int) -1) || (((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((long unsigned int) (__n)) <= ((__builtin_object_size (__dest, 2 > 1))) / ((sizeof (wchar_t))))) && (((long unsigned int) (__n)) <= ((__builtin_object_size (__dest, 2 > 1))) / ((sizeof (wchar_t)))))) ? __wcsncpy_alias (__dest, __src, __n) : ((((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((long unsigned int) (__n)) <= (__builtin_object_size (__dest, 2 > 1)) / (sizeof (wchar_t)))) && !(((long unsigned int) (__n)) <= (__builtin_object_size (__dest, 2 > 1)) / (sizeof (wchar_t)))) ? __wcsncpy_chk_warn (__dest, __src, __n, (__builtin_object_size (__dest, 2 > 1)) / (sizeof (wchar_t))) : __wcsncpy_chk (__dest, __src, __n, (__builtin_object_size (__dest, 2 > 1)) / (sizeof (wchar_t)))))

                          ;
}


extern wchar_t *__wcpncpy_alias (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n) noexcept (true) __asm__ ("" "wcpncpy")


                          ;
extern wchar_t *__wcpncpy_chk_warn (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n, size_t __destlen) noexcept (true) __asm__ ("" "__wcpncpy_chk")



     __attribute__((__warning__ ("wcpncpy called with length bigger than size of destination " "buffer")))
            ;

extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t *
__attribute__ ((__leaf__)) wcpncpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n) noexcept (true)

{
  return (((__builtin_constant_p (__builtin_object_size (__dest, 2 > 1)) && (__builtin_object_size (__dest, 2 > 1)) == (long unsigned int) -1) || (((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((long unsigned int) (__n)) <= ((__builtin_object_size (__dest, 2 > 1))) / ((sizeof (wchar_t))))) && (((long unsigned int) (__n)) <= ((__builtin_object_size (__dest, 2 > 1))) / ((sizeof (wchar_t)))))) ? __wcpncpy_alias (__dest, __src, __n) : ((((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((long unsigned int) (__n)) <= (__builtin_object_size (__dest, 2 > 1)) / (sizeof (wchar_t)))) && !(((long unsigned int) (__n)) <= (__builtin_object_size (__dest, 2 > 1)) / (sizeof (wchar_t)))) ? __wcpncpy_chk_warn (__dest, __src, __n, (__builtin_object_size (__dest, 2 > 1)) / (sizeof (wchar_t))) : __wcpncpy_chk (__dest, __src, __n, (__builtin_object_size (__dest, 2 > 1)) / (sizeof (wchar_t)))))

                          ;
}


extern wchar_t *__wcscat_alias (wchar_t *__restrict __dest, const wchar_t *__restrict __src) noexcept (true) __asm__ ("" "wcscat")

                                              ;

extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t *
__attribute__ ((__leaf__)) wcscat (wchar_t *__restrict __dest, const wchar_t *__restrict __src) noexcept (true)
{
  size_t sz = __builtin_object_size (__dest, 2 > 1);
  if (sz != (size_t) -1)
    return __wcscat_chk (__dest, __src, sz / sizeof (wchar_t));
  return __wcscat_alias (__dest, __src);
}


extern wchar_t *__wcsncat_alias (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n) noexcept (true) __asm__ ("" "wcsncat")


                          ;

extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t *
__attribute__ ((__leaf__)) wcsncat (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n) noexcept (true)

{
  size_t sz = __builtin_object_size (__dest, 2 > 1);
  if (sz != (size_t) -1)
    return __wcsncat_chk (__dest, __src, __n, sz / sizeof (wchar_t));
  return __wcsncat_alias (__dest, __src, __n);
}



extern int __swprintf_alias (wchar_t *__restrict __s, size_t __n, const wchar_t *__restrict __fmt, ...) noexcept (true) __asm__ ("" "swprintf")


             ;


extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
__attribute__ ((__leaf__)) swprintf (wchar_t *__restrict __s, size_t __n, const wchar_t *__restrict __fmt, ...) noexcept (true)

{
  size_t sz = __builtin_object_size (__s, 2 > 1);
  if (sz != (size_t) -1 || 2 > 1)
    return __swprintf_chk (__s, __n, 2 - 1,
      sz / sizeof (wchar_t), __fmt, __builtin_va_arg_pack ());
  return __swprintf_alias (__s, __n, __fmt, __builtin_va_arg_pack ());
}
# 230 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wchar2.h" 3 4
extern int __vswprintf_alias (wchar_t *__restrict __s, size_t __n, const wchar_t *__restrict __fmt, __gnuc_va_list __ap) noexcept (true) __asm__ ("" "vswprintf")


                                     ;

extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
__attribute__ ((__leaf__)) vswprintf (wchar_t *__restrict __s, size_t __n, const wchar_t *__restrict __fmt, __gnuc_va_list __ap) noexcept (true)

{
  size_t sz = __builtin_object_size (__s, 2 > 1);
  if (sz != (size_t) -1 || 2 > 1)
    return __vswprintf_chk (__s, __n, 2 - 1,
       sz / sizeof (wchar_t), __fmt, __ap);
  return __vswprintf_alias (__s, __n, __fmt, __ap);
}





extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
wprintf (const wchar_t *__restrict __fmt, ...)
{
  return __wprintf_chk (2 - 1, __fmt, __builtin_va_arg_pack ());
}

extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
fwprintf (__FILE *__restrict __stream, const wchar_t *__restrict __fmt, ...)
{
  return __fwprintf_chk (__stream, 2 - 1, __fmt,
    __builtin_va_arg_pack ());
}







extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
vwprintf (const wchar_t *__restrict __fmt, __gnuc_va_list __ap)
{
  return __vwprintf_chk (2 - 1, __fmt, __ap);
}

extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
vfwprintf (__FILE *__restrict __stream,
    const wchar_t *__restrict __fmt, __gnuc_va_list __ap)
{
  return __vfwprintf_chk (__stream, 2 - 1, __fmt, __ap);
}



extern wchar_t *__fgetws_alias (wchar_t *__restrict __s, int __n, __FILE *__restrict __stream) __asm__ ("" "fgetws")

                                              __attribute__ ((__warn_unused_result__));
extern wchar_t *__fgetws_chk_warn (wchar_t *__restrict __s, size_t __size, int __n, __FILE *__restrict __stream) __asm__ ("" "__fgetws_chk")


     __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("fgetws called with bigger size than length " "of destination buffer")))
                                 ;

extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) wchar_t *
fgetws (wchar_t *__restrict __s, int __n, __FILE *__restrict __stream)
{
  size_t sz = __builtin_object_size (__s, 2 > 1);
  if (((__builtin_constant_p (sz) && (sz) == (long unsigned int) -1) || (((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((long unsigned int) (__n)) <= ((sz)) / ((sizeof (wchar_t))))) && (((long unsigned int) (__n)) <= ((sz)) / ((sizeof (wchar_t)))))))
    return __fgetws_alias (__s, __n, __stream);
  if ((((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((long unsigned int) (__n)) <= (sz) / (sizeof (wchar_t)))) && !(((long unsigned int) (__n)) <= (sz) / (sizeof (wchar_t)))))
    return __fgetws_chk_warn (__s, sz / sizeof (wchar_t), __n, __stream);
  return __fgetws_chk (__s, sz / sizeof (wchar_t), __n, __stream);
}


extern wchar_t *__fgetws_unlocked_alias (wchar_t *__restrict __s, int __n, __FILE *__restrict __stream) __asm__ ("" "fgetws_unlocked")


  __attribute__ ((__warn_unused_result__));
extern wchar_t *__fgetws_unlocked_chk_warn (wchar_t *__restrict __s, size_t __size, int __n, __FILE *__restrict __stream) __asm__ ("" "__fgetws_unlocked_chk")



     __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("fgetws_unlocked called with bigger size than length " "of destination buffer")))
                                 ;

extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) wchar_t *
fgetws_unlocked (wchar_t *__restrict __s, int __n, __FILE *__restrict __stream)
{
  size_t sz = __builtin_object_size (__s, 2 > 1);
  if (((__builtin_constant_p (sz) && (sz) == (long unsigned int) -1) || (((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((long unsigned int) (__n)) <= ((sz)) / ((sizeof (wchar_t))))) && (((long unsigned int) (__n)) <= ((sz)) / ((sizeof (wchar_t)))))))
    return __fgetws_unlocked_alias (__s, __n, __stream);
  if ((((__typeof (__n)) 0 < (__typeof (__n)) -1 || (__builtin_constant_p (__n) && (__n) > 0)) && __builtin_constant_p ((((long unsigned int) (__n)) <= (sz) / (sizeof (wchar_t)))) && !(((long unsigned int) (__n)) <= (sz) / (sizeof (wchar_t)))))
    return __fgetws_unlocked_chk_warn (__s, sz / sizeof (wchar_t), __n,
           __stream);
  return __fgetws_unlocked_chk (__s, sz / sizeof (wchar_t), __n, __stream);
}



extern size_t __wcrtomb_alias (char *__restrict __s, wchar_t __wchar, mbstate_t *__restrict __ps) noexcept (true) __asm__ ("" "wcrtomb")

                                                __attribute__ ((__warn_unused_result__));

extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) size_t
__attribute__ ((__leaf__)) wcrtomb (char *__restrict __s, wchar_t __wchar, mbstate_t *__restrict __ps) noexcept (true)

{



#define __WCHAR_MB_LEN_MAX 16



  if (__builtin_object_size (__s, 2 > 1) != (size_t) -1
      && 16 > __builtin_object_size (__s, 2 > 1))
    return __wcrtomb_chk (__s, __wchar, __ps, __builtin_object_size (__s, 2 > 1));
  return __wcrtomb_alias (__s, __wchar, __ps);
}


extern size_t __mbsrtowcs_alias (wchar_t *__restrict __dst, const char **__restrict __src, size_t __len, mbstate_t *__restrict __ps) noexcept (true) __asm__ ("" "mbsrtowcs")



                   ;
extern size_t __mbsrtowcs_chk_warn (wchar_t *__restrict __dst, const char **__restrict __src, size_t __len, mbstate_t *__restrict __ps, size_t __dstlen) noexcept (true) __asm__ ("" "__mbsrtowcs_chk")




     __attribute__((__warning__ ("mbsrtowcs called with dst buffer smaller than len " "* sizeof (wchar_t)")))
                        ;

extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) size_t
__attribute__ ((__leaf__)) mbsrtowcs (wchar_t *__restrict __dst, const char **__restrict __src, size_t __len, mbstate_t *__restrict __ps) noexcept (true)

{
  return (((__builtin_constant_p (__builtin_object_size (__dst, 2 > 1)) && (__builtin_object_size (__dst, 2 > 1)) == (long unsigned int) -1) || (((__typeof (__len)) 0 < (__typeof (__len)) -1 || (__builtin_constant_p (__len) && (__len) > 0)) && __builtin_constant_p ((((long unsigned int) (__len)) <= ((__builtin_object_size (__dst, 2 > 1))) / ((sizeof (wchar_t))))) && (((long unsigned int) (__len)) <= ((__builtin_object_size (__dst, 2 > 1))) / ((sizeof (wchar_t)))))) ? __mbsrtowcs_alias (__dst, __src, __len, __ps) : ((((__typeof (__len)) 0 < (__typeof (__len)) -1 || (__builtin_constant_p (__len) && (__len) > 0)) && __builtin_constant_p ((((long unsigned int) (__len)) <= (__builtin_object_size (__dst, 2 > 1)) / (sizeof (wchar_t)))) && !(((long unsigned int) (__len)) <= (__builtin_object_size (__dst, 2 > 1)) / (sizeof (wchar_t)))) ? __mbsrtowcs_chk_warn (__dst, __src, __len, __ps, (__builtin_object_size (__dst, 2 > 1)) / (sizeof (wchar_t))) : __mbsrtowcs_chk (__dst, __src, __len, __ps, (__builtin_object_size (__dst, 2 > 1)) / (sizeof (wchar_t)))))

                                 ;
}


extern size_t __wcsrtombs_alias (char *__restrict __dst, const wchar_t **__restrict __src, size_t __len, mbstate_t *__restrict __ps) noexcept (true) __asm__ ("" "wcsrtombs")



                   ;
extern size_t __wcsrtombs_chk_warn (char *__restrict __dst, const wchar_t **__restrict __src, size_t __len, mbstate_t *__restrict __ps, size_t __dstlen) noexcept (true) __asm__ ("" "__wcsrtombs_chk")




    __attribute__((__warning__ ("wcsrtombs called with dst buffer smaller than len")));

extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) size_t
__attribute__ ((__leaf__)) wcsrtombs (char *__restrict __dst, const wchar_t **__restrict __src, size_t __len, mbstate_t *__restrict __ps) noexcept (true)

{
  return (((__builtin_constant_p (__builtin_object_size (__dst, 2 > 1)) && (__builtin_object_size (__dst, 2 > 1)) == (long unsigned int) -1) || (((__typeof (__len)) 0 < (__typeof (__len)) -1 || (__builtin_constant_p (__len) && (__len) > 0)) && __builtin_constant_p ((((long unsigned int) (__len)) <= ((__builtin_object_size (__dst, 2 > 1))) / ((sizeof (char))))) && (((long unsigned int) (__len)) <= ((__builtin_object_size (__dst, 2 > 1))) / ((sizeof (char)))))) ? __wcsrtombs_alias (__dst, __src, __len, __ps) : ((((__typeof (__len)) 0 < (__typeof (__len)) -1 || (__builtin_constant_p (__len) && (__len) > 0)) && __builtin_constant_p ((((long unsigned int) (__len)) <= (__builtin_object_size (__dst, 2 > 1)) / (sizeof (char)))) && !(((long unsigned int) (__len)) <= (__builtin_object_size (__dst, 2 > 1)) / (sizeof (char)))) ? __wcsrtombs_chk_warn (__dst, __src, __len, __ps, __builtin_object_size (__dst, 2 > 1)) : __wcsrtombs_chk (__dst, __src, __len, __ps, __builtin_object_size (__dst, 2 > 1))))

                               ;
}



extern size_t __mbsnrtowcs_alias (wchar_t *__restrict __dst, const char **__restrict __src, size_t __nmc, size_t __len, mbstate_t *__restrict __ps) noexcept (true) __asm__ ("" "mbsnrtowcs")



                    ;
extern size_t __mbsnrtowcs_chk_warn (wchar_t *__restrict __dst, const char **__restrict __src, size_t __nmc, size_t __len, mbstate_t *__restrict __ps, size_t __dstlen) noexcept (true) __asm__ ("" "__mbsnrtowcs_chk")




     __attribute__((__warning__ ("mbsnrtowcs called with dst buffer smaller than len " "* sizeof (wchar_t)")))
                        ;

extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) size_t
__attribute__ ((__leaf__)) mbsnrtowcs (wchar_t *__restrict __dst, const char **__restrict __src, size_t __nmc, size_t __len, mbstate_t *__restrict __ps) noexcept (true)

{
  return (((__builtin_constant_p (__builtin_object_size (__dst, 2 > 1)) && (__builtin_object_size (__dst, 2 > 1)) == (long unsigned int) -1) || (((__typeof (__len)) 0 < (__typeof (__len)) -1 || (__builtin_constant_p (__len) && (__len) > 0)) && __builtin_constant_p ((((long unsigned int) (__len)) <= ((__builtin_object_size (__dst, 2 > 1))) / ((sizeof (wchar_t))))) && (((long unsigned int) (__len)) <= ((__builtin_object_size (__dst, 2 > 1))) / ((sizeof (wchar_t)))))) ? __mbsnrtowcs_alias (__dst, __src, __nmc, __len, __ps) : ((((__typeof (__len)) 0 < (__typeof (__len)) -1 || (__builtin_constant_p (__len) && (__len) > 0)) && __builtin_constant_p ((((long unsigned int) (__len)) <= (__builtin_object_size (__dst, 2 > 1)) / (sizeof (wchar_t)))) && !(((long unsigned int) (__len)) <= (__builtin_object_size (__dst, 2 > 1)) / (sizeof (wchar_t)))) ? __mbsnrtowcs_chk_warn (__dst, __src, __nmc, __len, __ps, (__builtin_object_size (__dst, 2 > 1)) / (sizeof (wchar_t))) : __mbsnrtowcs_chk (__dst, __src, __nmc, __len, __ps, (__builtin_object_size (__dst, 2 > 1)) / (sizeof (wchar_t)))))

                                        ;
}


extern size_t __wcsnrtombs_alias (char *__restrict __dst, const wchar_t **__restrict __src, size_t __nwc, size_t __len, mbstate_t *__restrict __ps) noexcept (true) __asm__ ("" "wcsnrtombs")



                                                  ;
extern size_t __wcsnrtombs_chk_warn (char *__restrict __dst, const wchar_t **__restrict __src, size_t __nwc, size_t __len, mbstate_t *__restrict __ps, size_t __dstlen) noexcept (true) __asm__ ("" "__wcsnrtombs_chk")





     __attribute__((__warning__ ("wcsnrtombs called with dst buffer smaller than len")));

extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) size_t
__attribute__ ((__leaf__)) wcsnrtombs (char *__restrict __dst, const wchar_t **__restrict __src, size_t __nwc, size_t __len, mbstate_t *__restrict __ps) noexcept (true)

{
  return (((__builtin_constant_p (__builtin_object_size (__dst, 2 > 1)) && (__builtin_object_size (__dst, 2 > 1)) == (long unsigned int) -1) || (((__typeof (__len)) 0 < (__typeof (__len)) -1 || (__builtin_constant_p (__len) && (__len) > 0)) && __builtin_constant_p ((((long unsigned int) (__len)) <= ((__builtin_object_size (__dst, 2 > 1))) / ((sizeof (char))))) && (((long unsigned int) (__len)) <= ((__builtin_object_size (__dst, 2 > 1))) / ((sizeof (char)))))) ? __wcsnrtombs_alias (__dst, __src, __nwc, __len, __ps) : ((((__typeof (__len)) 0 < (__typeof (__len)) -1 || (__builtin_constant_p (__len) && (__len) > 0)) && __builtin_constant_p ((((long unsigned int) (__len)) <= (__builtin_object_size (__dst, 2 > 1)) / (sizeof (char)))) && !(((long unsigned int) (__len)) <= (__builtin_object_size (__dst, 2 > 1)) / (sizeof (char)))) ? __wcsnrtombs_chk_warn (__dst, __src, __nwc, __len, __ps, __builtin_object_size (__dst, 2 > 1)) : __wcsnrtombs_chk (__dst, __src, __nwc, __len, __ps, __builtin_object_size (__dst, 2 > 1))))

                                      ;
}
# 880 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/wchar.h" 2 3 4


}
# 45 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cwchar" 2 3



#define _GLIBCXX_CWCHAR 1
# 62 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cwchar" 3
namespace std
{
  using ::mbstate_t;
}


#undef btowc
#undef fgetwc
#undef fgetws
#undef fputwc
#undef fputws
#undef fwide
#undef fwprintf
#undef fwscanf
#undef getwc
#undef getwchar
#undef mbrlen
#undef mbrtowc
#undef mbsinit
#undef mbsrtowcs
#undef putwc
#undef putwchar
#undef swprintf
#undef swscanf
#undef ungetwc
#undef vfwprintf

#undef vfwscanf

#undef vswprintf

#undef vswscanf

#undef vwprintf

#undef vwscanf

#undef wcrtomb
#undef wcscat
#undef wcschr
#undef wcscmp
#undef wcscoll
#undef wcscpy
#undef wcscspn
#undef wcsftime
#undef wcslen
#undef wcsncat
#undef wcsncmp
#undef wcsncpy
#undef wcspbrk
#undef wcsrchr
#undef wcsrtombs
#undef wcsspn
#undef wcsstr
#undef wcstod

#undef wcstof

#undef wcstok
#undef wcstol
#undef wcstoul
#undef wcsxfrm
#undef wctob
#undef wmemchr
#undef wmemcmp
#undef wmemcpy
#undef wmemmove
#undef wmemset
#undef wprintf
#undef wscanf



extern "C++"
{
namespace std __attribute__ ((__visibility__ ("default")))
{


  using ::wint_t;

  using ::btowc;
  using ::fgetwc;
  using ::fgetws;
  using ::fputwc;
  using ::fputws;
  using ::fwide;
  using ::fwprintf;
  using ::fwscanf;
  using ::getwc;
  using ::getwchar;
  using ::mbrlen;
  using ::mbrtowc;
  using ::mbsinit;
  using ::mbsrtowcs;
  using ::putwc;
  using ::putwchar;

  using ::swprintf;

  using ::swscanf;
  using ::ungetwc;
  using ::vfwprintf;

  using ::vfwscanf;


  using ::vswprintf;


  using ::vswscanf;

  using ::vwprintf;

  using ::vwscanf;

  using ::wcrtomb;
  using ::wcscat;
  using ::wcscmp;
  using ::wcscoll;
  using ::wcscpy;
  using ::wcscspn;
  using ::wcsftime;
  using ::wcslen;
  using ::wcsncat;
  using ::wcsncmp;
  using ::wcsncpy;
  using ::wcsrtombs;
  using ::wcsspn;
  using ::wcstod;

  using ::wcstof;

  using ::wcstok;
  using ::wcstol;
  using ::wcstoul;
  using ::wcsxfrm;
  using ::wctob;
  using ::wmemcmp;
  using ::wmemcpy;
  using ::wmemmove;
  using ::wmemset;
  using ::wprintf;
  using ::wscanf;
  using ::wcschr;
  using ::wcspbrk;
  using ::wcsrchr;
  using ::wcsstr;
  using ::wmemchr;
# 234 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cwchar" 3

}
}



#undef wcstold
#undef wcstoll
#undef wcstoull

namespace __gnu_cxx
{





  using ::wcstold;
# 260 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cwchar" 3
  using ::wcstoll;
  using ::wcstoull;

}

namespace std
{
  using ::__gnu_cxx::wcstold;
  using ::__gnu_cxx::wcstoll;
  using ::__gnu_cxx::wcstoull;
}
# 280 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cwchar" 3
namespace std
{

  using std::wcstof;


  using std::vfwscanf;


  using std::vswscanf;


  using std::vwscanf;



  using std::wcstold;
  using std::wcstoll;
  using std::wcstoull;

}
# 41 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/postypes.h" 2 3

namespace std __attribute__ ((__visibility__ ("default")))
{

# 62 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/postypes.h" 3
  typedef long int streamoff;





  typedef ptrdiff_t streamsize;
# 81 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/postypes.h" 3
  template<typename _StateT>
    class fpos
    {
    private:
      streamoff _M_off;
      _StateT _M_state;

    public:




      fpos()
      : _M_off(0), _M_state() { }
# 103 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/postypes.h" 3
      fpos(streamoff __off)
      : _M_off(__off), _M_state() { }


      fpos(const fpos&) = default;
      fpos& operator=(const fpos&) = default;
      ~fpos() = default;



      operator streamoff() const { return _M_off; }


      void
      state(_StateT __st)
      { _M_state = __st; }


      _StateT
      state() const
      { return _M_state; }





      fpos&
      operator+=(streamoff __off)
      {
 _M_off += __off;
 return *this;
      }





      fpos&
      operator-=(streamoff __off)
      {
 _M_off -= __off;
 return *this;
      }







      fpos
      operator+(streamoff __off) const
      {
 fpos __pos(*this);
 __pos += __off;
 return __pos;
      }







      fpos
      operator-(streamoff __off) const
      {
 fpos __pos(*this);
 __pos -= __off;
 return __pos;
      }






      streamoff
      operator-(const fpos& __other) const
      { return _M_off - __other._M_off; }
    };






  template<typename _StateT>
    inline bool
    operator==(const fpos<_StateT>& __lhs, const fpos<_StateT>& __rhs)
    { return streamoff(__lhs) == streamoff(__rhs); }

  template<typename _StateT>
    inline bool
    operator!=(const fpos<_StateT>& __lhs, const fpos<_StateT>& __rhs)
    { return streamoff(__lhs) != streamoff(__rhs); }





  typedef fpos<mbstate_t> streampos;

  typedef fpos<mbstate_t> wstreampos;
# 215 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/postypes.h" 3
  typedef fpos<mbstate_t> u16streampos;

  typedef fpos<mbstate_t> u32streampos;



}
# 43 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/iosfwd" 2 3

namespace std __attribute__ ((__visibility__ ("default")))
{

# 76 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/iosfwd" 3
  class ios_base;

  template<typename _CharT, typename _Traits = char_traits<_CharT> >
    class basic_ios;

  template<typename _CharT, typename _Traits = char_traits<_CharT> >
    class basic_streambuf;

  template<typename _CharT, typename _Traits = char_traits<_CharT> >
    class basic_istream;

  template<typename _CharT, typename _Traits = char_traits<_CharT> >
    class basic_ostream;

  template<typename _CharT, typename _Traits = char_traits<_CharT> >
    class basic_iostream;


namespace __cxx11 {

  template<typename _CharT, typename _Traits = char_traits<_CharT>,
     typename _Alloc = allocator<_CharT> >
    class basic_stringbuf;

  template<typename _CharT, typename _Traits = char_traits<_CharT>,
    typename _Alloc = allocator<_CharT> >
    class basic_istringstream;

  template<typename _CharT, typename _Traits = char_traits<_CharT>,
    typename _Alloc = allocator<_CharT> >
    class basic_ostringstream;

  template<typename _CharT, typename _Traits = char_traits<_CharT>,
    typename _Alloc = allocator<_CharT> >
    class basic_stringstream;

}

  template<typename _CharT, typename _Traits = char_traits<_CharT> >
    class basic_filebuf;

  template<typename _CharT, typename _Traits = char_traits<_CharT> >
    class basic_ifstream;

  template<typename _CharT, typename _Traits = char_traits<_CharT> >
    class basic_ofstream;

  template<typename _CharT, typename _Traits = char_traits<_CharT> >
    class basic_fstream;

  template<typename _CharT, typename _Traits = char_traits<_CharT> >
    class istreambuf_iterator;

  template<typename _CharT, typename _Traits = char_traits<_CharT> >
    class ostreambuf_iterator;



  typedef basic_ios<char> ios;


  typedef basic_streambuf<char> streambuf;


  typedef basic_istream<char> istream;


  typedef basic_ostream<char> ostream;


  typedef basic_iostream<char> iostream;


  typedef basic_stringbuf<char> stringbuf;


  typedef basic_istringstream<char> istringstream;


  typedef basic_ostringstream<char> ostringstream;


  typedef basic_stringstream<char> stringstream;


  typedef basic_filebuf<char> filebuf;


  typedef basic_ifstream<char> ifstream;


  typedef basic_ofstream<char> ofstream;


  typedef basic_fstream<char> fstream;



  typedef basic_ios<wchar_t> wios;


  typedef basic_streambuf<wchar_t> wstreambuf;


  typedef basic_istream<wchar_t> wistream;


  typedef basic_ostream<wchar_t> wostream;


  typedef basic_iostream<wchar_t> wiostream;


  typedef basic_stringbuf<wchar_t> wstringbuf;


  typedef basic_istringstream<wchar_t> wistringstream;


  typedef basic_ostringstream<wchar_t> wostringstream;


  typedef basic_stringstream<wchar_t> wstringstream;


  typedef basic_filebuf<wchar_t> wfilebuf;


  typedef basic_ifstream<wchar_t> wifstream;


  typedef basic_ofstream<wchar_t> wofstream;


  typedef basic_fstream<wchar_t> wfstream;
# 255 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/iosfwd" 3

}
# 53 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr.h" 2 3
# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr_base.h" 1 3
# 50 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr_base.h" 3
#define _SHARED_PTR_BASE_H 1


# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/allocated_ptr.h" 1 3
# 31 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/allocated_ptr.h" 3
#define _ALLOCATED_PTR_H 1
# 40 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/allocated_ptr.h" 3
namespace std __attribute__ ((__visibility__ ("default")))
{




  template<typename _Alloc>
    struct __allocated_ptr
    {
      using pointer = typename allocator_traits<_Alloc>::pointer;
      using value_type = typename allocator_traits<_Alloc>::value_type;


      __allocated_ptr(_Alloc& __a, pointer __ptr) noexcept
      : _M_alloc(std::__addressof(__a)), _M_ptr(__ptr)
      { }


      template<typename _Ptr,
        typename _Req = _Require<is_same<_Ptr, value_type*>>>
      __allocated_ptr(_Alloc& __a, _Ptr __ptr)
      : _M_alloc(std::__addressof(__a)),
 _M_ptr(pointer_traits<pointer>::pointer_to(*__ptr))
      { }


      __allocated_ptr(__allocated_ptr&& __gd) noexcept
      : _M_alloc(__gd._M_alloc), _M_ptr(__gd._M_ptr)
      { __gd._M_ptr = nullptr; }


      ~__allocated_ptr()
      {
 if (_M_ptr != nullptr)
   std::allocator_traits<_Alloc>::deallocate(*_M_alloc, _M_ptr, 1);
      }


      __allocated_ptr&
      operator=(std::nullptr_t) noexcept
      {
 _M_ptr = nullptr;
 return *this;
      }


      value_type* get() { return std::__to_address(_M_ptr); }

    private:
      _Alloc* _M_alloc;
      pointer _M_ptr;
    };


  template<typename _Alloc>
    __allocated_ptr<_Alloc>
    __allocate_guarded(_Alloc& __a)
    {
      return { __a, std::allocator_traits<_Alloc>::allocate(__a, 1) };
    }



}
# 54 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr_base.h" 2 3






# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/ext/aligned_buffer.h" 1 3
# 30 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/ext/aligned_buffer.h" 3
#define _ALIGNED_BUFFER_H 1

       
# 33 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/ext/aligned_buffer.h" 3







namespace __gnu_cxx
{




  template<typename _Tp>
    struct __aligned_membuf
    {





      struct _Tp2 { _Tp _M_t; };

      alignas(__alignof__(_Tp2::_M_t)) unsigned char _M_storage[sizeof(_Tp)];

      __aligned_membuf() = default;


      __aligned_membuf(std::nullptr_t) { }

      void*
      _M_addr() noexcept
      { return static_cast<void*>(&_M_storage); }

      const void*
      _M_addr() const noexcept
      { return static_cast<const void*>(&_M_storage); }

      _Tp*
      _M_ptr() noexcept
      { return static_cast<_Tp*>(_M_addr()); }

      const _Tp*
      _M_ptr() const noexcept
      { return static_cast<const _Tp*>(_M_addr()); }
    };
# 89 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/ext/aligned_buffer.h" 3
  template<typename _Tp>
    struct __aligned_buffer
    : std::aligned_storage<sizeof(_Tp), __alignof__(_Tp)>
    {
      typename
 std::aligned_storage<sizeof(_Tp), __alignof__(_Tp)>::type _M_storage;

      __aligned_buffer() = default;


      __aligned_buffer(std::nullptr_t) { }

      void*
      _M_addr() noexcept
      {
        return static_cast<void*>(&_M_storage);
      }

      const void*
      _M_addr() const noexcept
      {
        return static_cast<const void*>(&_M_storage);
      }

      _Tp*
      _M_ptr() noexcept
      { return static_cast<_Tp*>(_M_addr()); }

      const _Tp*
      _M_ptr() const noexcept
      { return static_cast<const _Tp*>(_M_addr()); }
    };


}
# 61 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr_base.h" 2 3
# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/ext/atomicity.h" 1 3
# 30 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/ext/atomicity.h" 3
#define _GLIBCXX_ATOMICITY_H 1

       
# 33 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/ext/atomicity.h" 3


# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/gthr.h" 1 3
# 27 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/gthr.h" 3
#define _GLIBCXX_GCC_GTHR_H 


#pragma GCC visibility push(default)
# 148 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/gthr.h" 3
# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/gthr-default.h" 1 3
# 27 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/gthr-default.h" 3
#define _GLIBCXX_GCC_GTHR_POSIX_H 




#define __GTHREADS 1
#define __GTHREADS_CXX0X 1

# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/pthread.h" 1 3 4
# 19 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/pthread.h" 3 4
#define _PTHREAD_H 1


# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sched.h" 1 3 4
# 20 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sched.h" 3 4
#define _SCHED_H 1






#define __need_size_t 
#define __need_NULL 
# 1 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 1 3 4
# 158 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 3 4
#undef __need_ptrdiff_t
# 237 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 3 4
#undef __need_size_t
# 349 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 3 4
#undef __need_wchar_t
# 399 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 3 4
#undef NULL

#define NULL __null
# 410 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 3 4
#undef __need_NULL




#undef offsetof
#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
# 30 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sched.h" 2 3 4
# 43 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sched.h" 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/sched.h" 1 3 4
# 21 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/sched.h" 3 4
#define _BITS_SCHED_H 1






#define SCHED_OTHER 0
#define SCHED_FIFO 1
#define SCHED_RR 2

#define SCHED_BATCH 3
#define SCHED_ISO 4
#define SCHED_IDLE 5
#define SCHED_DEADLINE 6

#define SCHED_RESET_ON_FORK 0x40000000




#define CSIGNAL 0x000000ff
#define CLONE_VM 0x00000100
#define CLONE_FS 0x00000200
#define CLONE_FILES 0x00000400
#define CLONE_SIGHAND 0x00000800
#define CLONE_PIDFD 0x00001000

#define CLONE_PTRACE 0x00002000
#define CLONE_VFORK 0x00004000

#define CLONE_PARENT 0x00008000

#define CLONE_THREAD 0x00010000
#define CLONE_NEWNS 0x00020000
#define CLONE_SYSVSEM 0x00040000
#define CLONE_SETTLS 0x00080000
#define CLONE_PARENT_SETTID 0x00100000

#define CLONE_CHILD_CLEARTID 0x00200000

#define CLONE_DETACHED 0x00400000
#define CLONE_UNTRACED 0x00800000

#define CLONE_CHILD_SETTID 0x01000000

#define CLONE_NEWCGROUP 0x02000000
#define CLONE_NEWUTS 0x04000000
#define CLONE_NEWIPC 0x08000000
#define CLONE_NEWUSER 0x10000000
#define CLONE_NEWPID 0x20000000
#define CLONE_NEWNET 0x40000000
#define CLONE_IO 0x80000000



#define CLONE_NEWTIME 0x00000080


# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/types/struct_sched_param.h" 1 3 4
# 20 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/types/struct_sched_param.h" 3 4
#define _BITS_TYPES_STRUCT_SCHED_PARAM 1


struct sched_param
{
  int sched_priority;
};
# 81 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/sched.h" 2 3 4

extern "C" {



extern int clone (int (*__fn) (void *__arg), void *__child_stack,
    int __flags, void *__arg, ...) noexcept (true);


extern int unshare (int __flags) noexcept (true);


extern int sched_getcpu (void) noexcept (true);


extern int getcpu (unsigned int *, unsigned int *) noexcept (true);


extern int setns (int __fd, int __nstype) noexcept (true);


}
# 44 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sched.h" 2 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/cpu-set.h" 1 3 4
# 21 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/cpu-set.h" 3 4
#define _BITS_CPU_SET_H 1






#define __CPU_SETSIZE 1024
#define __NCPUBITS (8 * sizeof (__cpu_mask))


typedef unsigned long int __cpu_mask;


#define __CPUELT(cpu) ((cpu) / __NCPUBITS)
#define __CPUMASK(cpu) ((__cpu_mask) 1 << ((cpu) % __NCPUBITS))


typedef struct
{
  __cpu_mask __bits[1024 / (8 * sizeof (__cpu_mask))];
} cpu_set_t;



#define __CPU_ZERO_S(setsize,cpusetp) do __builtin_memset (cpusetp, '\0', setsize); while (0)
# 58 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/cpu-set.h" 3 4
#define __CPU_SET_S(cpu,setsize,cpusetp) (__extension__ ({ size_t __cpu = (cpu); __cpu / 8 < (setsize) ? (((__cpu_mask *) ((cpusetp)->__bits))[__CPUELT (__cpu)] |= __CPUMASK (__cpu)) : 0; }))






#define __CPU_CLR_S(cpu,setsize,cpusetp) (__extension__ ({ size_t __cpu = (cpu); __cpu / 8 < (setsize) ? (((__cpu_mask *) ((cpusetp)->__bits))[__CPUELT (__cpu)] &= ~__CPUMASK (__cpu)) : 0; }))






#define __CPU_ISSET_S(cpu,setsize,cpusetp) (__extension__ ({ size_t __cpu = (cpu); __cpu / 8 < (setsize) ? ((((const __cpu_mask *) ((cpusetp)->__bits))[__CPUELT (__cpu)] & __CPUMASK (__cpu))) != 0 : 0; }))







#define __CPU_COUNT_S(setsize,cpusetp) __sched_cpucount (setsize, cpusetp)



#define __CPU_EQUAL_S(setsize,cpusetp1,cpusetp2) (__builtin_memcmp (cpusetp1, cpusetp2, setsize) == 0)
# 99 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/cpu-set.h" 3 4
#define __CPU_OP_S(setsize,destset,srcset1,srcset2,op) (__extension__ ({ cpu_set_t *__dest = (destset); const __cpu_mask *__arr1 = (srcset1)->__bits; const __cpu_mask *__arr2 = (srcset2)->__bits; size_t __imax = (setsize) / sizeof (__cpu_mask); size_t __i; for (__i = 0; __i < __imax; ++__i) ((__cpu_mask *) __dest->__bits)[__i] = __arr1[__i] op __arr2[__i]; __dest; }))
# 110 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/cpu-set.h" 3 4
#define __CPU_ALLOC_SIZE(count) ((((count) + __NCPUBITS - 1) / __NCPUBITS) * sizeof (__cpu_mask))

#define __CPU_ALLOC(count) __sched_cpualloc (count)
#define __CPU_FREE(cpuset) __sched_cpufree (cpuset)

extern "C" {

extern int __sched_cpucount (size_t __setsize, const cpu_set_t *__setp)
     noexcept (true);
extern cpu_set_t *__sched_cpualloc (size_t __count) noexcept (true) __attribute__ ((__warn_unused_result__));
extern void __sched_cpufree (cpu_set_t *__set) noexcept (true);

}
# 45 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sched.h" 2 3 4


#define sched_priority sched_priority
#define __sched_priority sched_priority


extern "C" {


extern int sched_setparam (__pid_t __pid, const struct sched_param *__param)
     noexcept (true);


extern int sched_getparam (__pid_t __pid, struct sched_param *__param) noexcept (true);


extern int sched_setscheduler (__pid_t __pid, int __policy,
          const struct sched_param *__param) noexcept (true);


extern int sched_getscheduler (__pid_t __pid) noexcept (true);


extern int sched_yield (void) noexcept (true);


extern int sched_get_priority_max (int __algorithm) noexcept (true);


extern int sched_get_priority_min (int __algorithm) noexcept (true);



extern int sched_rr_get_interval (__pid_t __pid, struct timespec *__t) noexcept (true);
# 91 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sched.h" 3 4
#define CPU_SETSIZE __CPU_SETSIZE
#define CPU_SET(cpu,cpusetp) __CPU_SET_S (cpu, sizeof (cpu_set_t), cpusetp)
#define CPU_CLR(cpu,cpusetp) __CPU_CLR_S (cpu, sizeof (cpu_set_t), cpusetp)
#define CPU_ISSET(cpu,cpusetp) __CPU_ISSET_S (cpu, sizeof (cpu_set_t), cpusetp)

#define CPU_ZERO(cpusetp) __CPU_ZERO_S (sizeof (cpu_set_t), cpusetp)
#define CPU_COUNT(cpusetp) __CPU_COUNT_S (sizeof (cpu_set_t), cpusetp)

#define CPU_SET_S(cpu,setsize,cpusetp) __CPU_SET_S (cpu, setsize, cpusetp)
#define CPU_CLR_S(cpu,setsize,cpusetp) __CPU_CLR_S (cpu, setsize, cpusetp)
#define CPU_ISSET_S(cpu,setsize,cpusetp) __CPU_ISSET_S (cpu, setsize, cpusetp)

#define CPU_ZERO_S(setsize,cpusetp) __CPU_ZERO_S (setsize, cpusetp)
#define CPU_COUNT_S(setsize,cpusetp) __CPU_COUNT_S (setsize, cpusetp)

#define CPU_EQUAL(cpusetp1,cpusetp2) __CPU_EQUAL_S (sizeof (cpu_set_t), cpusetp1, cpusetp2)

#define CPU_EQUAL_S(setsize,cpusetp1,cpusetp2) __CPU_EQUAL_S (setsize, cpusetp1, cpusetp2)


#define CPU_AND(destset,srcset1,srcset2) __CPU_OP_S (sizeof (cpu_set_t), destset, srcset1, srcset2, &)

#define CPU_OR(destset,srcset1,srcset2) __CPU_OP_S (sizeof (cpu_set_t), destset, srcset1, srcset2, |)

#define CPU_XOR(destset,srcset1,srcset2) __CPU_OP_S (sizeof (cpu_set_t), destset, srcset1, srcset2, ^)

#define CPU_AND_S(setsize,destset,srcset1,srcset2) __CPU_OP_S (setsize, destset, srcset1, srcset2, &)

#define CPU_OR_S(setsize,destset,srcset1,srcset2) __CPU_OP_S (setsize, destset, srcset1, srcset2, |)

#define CPU_XOR_S(setsize,destset,srcset1,srcset2) __CPU_OP_S (setsize, destset, srcset1, srcset2, ^)


#define CPU_ALLOC_SIZE(count) __CPU_ALLOC_SIZE (count)
#define CPU_ALLOC(count) __CPU_ALLOC (count)
#define CPU_FREE(cpuset) __CPU_FREE (cpuset)



extern int sched_setaffinity (__pid_t __pid, size_t __cpusetsize,
         const cpu_set_t *__cpuset) noexcept (true);


extern int sched_getaffinity (__pid_t __pid, size_t __cpusetsize,
         cpu_set_t *__cpuset) noexcept (true);


}
# 23 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/pthread.h" 2 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/time.h" 1 3 4
# 23 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/time.h" 3 4
#define _TIME_H 1



#define __need_size_t 
#define __need_NULL 
# 1 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 1 3 4
# 158 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 3 4
#undef __need_ptrdiff_t
# 237 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 3 4
#undef __need_size_t
# 349 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 3 4
#undef __need_wchar_t
# 399 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 3 4
#undef NULL

#define NULL __null
# 410 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 3 4
#undef __need_NULL




#undef offsetof
#define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
# 30 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/time.h" 2 3 4



# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/time.h" 1 3 4
# 24 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/time.h" 3 4
#define _BITS_TIME_H 1
# 34 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/time.h" 3 4
#define CLOCKS_PER_SEC ((__clock_t) 1000000)
# 46 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/time.h" 3 4
#define CLOCK_REALTIME 0

#define CLOCK_MONOTONIC 1

#define CLOCK_PROCESS_CPUTIME_ID 2

#define CLOCK_THREAD_CPUTIME_ID 3

#define CLOCK_MONOTONIC_RAW 4

#define CLOCK_REALTIME_COARSE 5

#define CLOCK_MONOTONIC_COARSE 6

#define CLOCK_BOOTTIME 7

#define CLOCK_REALTIME_ALARM 8

#define CLOCK_BOOTTIME_ALARM 9

#define CLOCK_TAI 11


#define TIMER_ABSTIME 1



# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/timex.h" 1 3 4
# 19 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/timex.h" 3 4
#define _BITS_TIMEX_H 1






struct timex
{
# 58 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/timex.h" 3 4
  unsigned int modes;
  __syscall_slong_t offset;
  __syscall_slong_t freq;
  __syscall_slong_t maxerror;
  __syscall_slong_t esterror;
  int status;
  __syscall_slong_t constant;
  __syscall_slong_t precision;
  __syscall_slong_t tolerance;
  struct timeval time;
  __syscall_slong_t tick;
  __syscall_slong_t ppsfreq;
  __syscall_slong_t jitter;
  int shift;
  __syscall_slong_t stabil;
  __syscall_slong_t jitcnt;
  __syscall_slong_t calcnt;
  __syscall_slong_t errcnt;
  __syscall_slong_t stbcnt;

  int tai;


  int :32; int :32; int :32; int :32;
  int :32; int :32; int :32; int :32;
  int :32; int :32; int :32;

};


#define ADJ_OFFSET 0x0001
#define ADJ_FREQUENCY 0x0002
#define ADJ_MAXERROR 0x0004
#define ADJ_ESTERROR 0x0008
#define ADJ_STATUS 0x0010
#define ADJ_TIMECONST 0x0020
#define ADJ_TAI 0x0080
#define ADJ_SETOFFSET 0x0100
#define ADJ_MICRO 0x1000
#define ADJ_NANO 0x2000
#define ADJ_TICK 0x4000
#define ADJ_OFFSET_SINGLESHOT 0x8001
#define ADJ_OFFSET_SS_READ 0xa001


#define MOD_OFFSET ADJ_OFFSET
#define MOD_FREQUENCY ADJ_FREQUENCY
#define MOD_MAXERROR ADJ_MAXERROR
#define MOD_ESTERROR ADJ_ESTERROR
#define MOD_STATUS ADJ_STATUS
#define MOD_TIMECONST ADJ_TIMECONST
#define MOD_CLKB ADJ_TICK
#define MOD_CLKA ADJ_OFFSET_SINGLESHOT
#define MOD_TAI ADJ_TAI
#define MOD_MICRO ADJ_MICRO
#define MOD_NANO ADJ_NANO



#define STA_PLL 0x0001
#define STA_PPSFREQ 0x0002
#define STA_PPSTIME 0x0004
#define STA_FLL 0x0008

#define STA_INS 0x0010
#define STA_DEL 0x0020
#define STA_UNSYNC 0x0040
#define STA_FREQHOLD 0x0080

#define STA_PPSSIGNAL 0x0100
#define STA_PPSJITTER 0x0200
#define STA_PPSWANDER 0x0400
#define STA_PPSERROR 0x0800

#define STA_CLOCKERR 0x1000
#define STA_NANO 0x2000
#define STA_MODE 0x4000
#define STA_CLK 0x8000


#define STA_RONLY (STA_PPSSIGNAL | STA_PPSJITTER | STA_PPSWANDER | STA_PPSERROR | STA_CLOCKERR | STA_NANO | STA_MODE | STA_CLK)
# 74 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/time.h" 2 3 4

extern "C" {


extern int clock_adjtime (__clockid_t __clock_id, struct timex *__utx) noexcept (true) __attribute__ ((__nonnull__ (2)));
# 90 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/time.h" 3 4
}
# 34 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/time.h" 2 3 4





# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/types/struct_tm.h" 1 3 4

#define __struct_tm_defined 1




struct tm
{
  int tm_sec;
  int tm_min;
  int tm_hour;
  int tm_mday;
  int tm_mon;
  int tm_year;
  int tm_wday;
  int tm_yday;
  int tm_isdst;


  long int tm_gmtoff;
  const char *tm_zone;




};
# 40 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/time.h" 2 3 4
# 48 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/time.h" 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/types/struct_itimerspec.h" 1 3 4

#define __itimerspec_defined 1





struct itimerspec
  {
    struct timespec it_interval;
    struct timespec it_value;
  };
# 49 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/time.h" 2 3 4
struct sigevent;
# 65 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/time.h" 3 4
#define TIME_UTC 1


extern "C" {



extern clock_t clock (void) noexcept (true);



extern time_t time (time_t *__timer) noexcept (true);


extern double difftime (time_t __time1, time_t __time0)
     noexcept (true) __attribute__ ((__const__));


extern time_t mktime (struct tm *__tp) noexcept (true);
# 100 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/time.h" 3 4
extern size_t strftime (char *__restrict __s, size_t __maxsize,
   const char *__restrict __format,
   const struct tm *__restrict __tp) noexcept (true);




extern char *strptime (const char *__restrict __s,
         const char *__restrict __fmt, struct tm *__tp)
     noexcept (true);






extern size_t strftime_l (char *__restrict __s, size_t __maxsize,
     const char *__restrict __format,
     const struct tm *__restrict __tp,
     locale_t __loc) noexcept (true);



extern char *strptime_l (const char *__restrict __s,
    const char *__restrict __fmt, struct tm *__tp,
    locale_t __loc) noexcept (true);






extern struct tm *gmtime (const time_t *__timer) noexcept (true);



extern struct tm *localtime (const time_t *__timer) noexcept (true);
# 154 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/time.h" 3 4
extern struct tm *gmtime_r (const time_t *__restrict __timer,
       struct tm *__restrict __tp) noexcept (true);



extern struct tm *localtime_r (const time_t *__restrict __timer,
          struct tm *__restrict __tp) noexcept (true);
# 179 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/time.h" 3 4
extern char *asctime (const struct tm *__tp) noexcept (true);



extern char *ctime (const time_t *__timer) noexcept (true);
# 197 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/time.h" 3 4
extern char *asctime_r (const struct tm *__restrict __tp,
   char *__restrict __buf) noexcept (true);



extern char *ctime_r (const time_t *__restrict __timer,
        char *__restrict __buf) noexcept (true);
# 217 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/time.h" 3 4
extern char *__tzname[2];
extern int __daylight;
extern long int __timezone;




extern char *tzname[2];



extern void tzset (void) noexcept (true);



extern int daylight;
extern long int timezone;





#define __isleap(year) ((year) % 4 == 0 && ((year) % 100 != 0 || (year) % 400 == 0))






extern time_t timegm (struct tm *__tp) noexcept (true);
# 263 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/time.h" 3 4
extern time_t timelocal (struct tm *__tp) noexcept (true);







extern int dysize (int __year) noexcept (true) __attribute__ ((__const__));
# 281 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/time.h" 3 4
extern int nanosleep (const struct timespec *__requested_time,
        struct timespec *__remaining);


extern int clock_getres (clockid_t __clock_id, struct timespec *__res) noexcept (true);


extern int clock_gettime (clockid_t __clock_id, struct timespec *__tp)
     noexcept (true) __attribute__ ((__nonnull__ (2)));


extern int clock_settime (clockid_t __clock_id, const struct timespec *__tp)
     noexcept (true) __attribute__ ((__nonnull__ (2)));
# 323 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/time.h" 3 4
extern int clock_nanosleep (clockid_t __clock_id, int __flags,
       const struct timespec *__req,
       struct timespec *__rem);
# 338 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/time.h" 3 4
extern int clock_getcpuclockid (pid_t __pid, clockid_t *__clock_id) noexcept (true);




extern int timer_create (clockid_t __clock_id,
    struct sigevent *__restrict __evp,
    timer_t *__restrict __timerid) noexcept (true);


extern int timer_delete (timer_t __timerid) noexcept (true);



extern int timer_settime (timer_t __timerid, int __flags,
     const struct itimerspec *__restrict __value,
     struct itimerspec *__restrict __ovalue) noexcept (true);


extern int timer_gettime (timer_t __timerid, struct itimerspec *__value)
     noexcept (true);
# 376 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/time.h" 3 4
extern int timer_getoverrun (timer_t __timerid) noexcept (true);






extern int timespec_get (struct timespec *__ts, int __base)
     noexcept (true) __attribute__ ((__nonnull__ (1)));
# 399 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/time.h" 3 4
extern int timespec_getres (struct timespec *__ts, int __base)
     noexcept (true);
# 425 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/time.h" 3 4
extern int getdate_err;
# 434 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/time.h" 3 4
extern struct tm *getdate (const char *__string);
# 448 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/time.h" 3 4
extern int getdate_r (const char *__restrict __string,
        struct tm *__restrict __resbufp);


}
# 24 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/pthread.h" 2 3 4

# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/endian.h" 1 3 4







# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 1 3 4
# 21 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE 64
# 32 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE_TIME64_COMPAT32 0
# 9 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/endian.h" 2 3 4
# 26 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/pthread.h" 2 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/pthreadtypes.h" 1 3 4







# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 1 3 4
# 21 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE 64
# 32 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE_TIME64_COMPAT32 0
# 9 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/pthreadtypes.h" 2 3 4
# 27 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/pthread.h" 2 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/setjmp.h" 1 3 4







# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 1 3 4
# 21 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE 64
# 32 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE_TIME64_COMPAT32 0
# 9 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/setjmp.h" 2 3 4
# 27 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/setjmp.h" 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/setjmp-64.h" 1 3 4
# 20 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/setjmp-64.h" 3 4
#define _BITS_SETJMP_H 1
# 30 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/setjmp-64.h" 3 4
__extension__ typedef unsigned long long __jmp_buf [22];
# 28 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/setjmp.h" 2 3 4
# 28 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/pthread.h" 2 3 4
# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 1 3 4
# 21 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE 64
# 32 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE_TIME64_COMPAT32 0
# 29 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/pthread.h" 2 3 4


# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/types/struct___jmp_buf_tag.h" 1 3 4
# 20 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/types/struct___jmp_buf_tag.h" 3 4
#define __jmp_buf_tag_defined 1

# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/setjmp.h" 1 3 4







# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 1 3 4
# 21 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE 64
# 32 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/wordsize.h" 3 4
#define __WORDSIZE_TIME64_COMPAT32 0
# 9 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/setjmp.h" 2 3 4
# 23 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/bits/types/struct___jmp_buf_tag.h" 2 3 4



struct __jmp_buf_tag
  {




    __jmp_buf __jmpbuf;
    int __mask_was_saved;
    __sigset_t __saved_mask;
  };
# 32 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/pthread.h" 2 3 4





enum
{
  PTHREAD_CREATE_JOINABLE,
#define PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_JOINABLE
  PTHREAD_CREATE_DETACHED
#define PTHREAD_CREATE_DETACHED PTHREAD_CREATE_DETACHED
};



enum
{
  PTHREAD_MUTEX_TIMED_NP,
  PTHREAD_MUTEX_RECURSIVE_NP,
  PTHREAD_MUTEX_ERRORCHECK_NP,
  PTHREAD_MUTEX_ADAPTIVE_NP

  ,
  PTHREAD_MUTEX_NORMAL = PTHREAD_MUTEX_TIMED_NP,
  PTHREAD_MUTEX_RECURSIVE = PTHREAD_MUTEX_RECURSIVE_NP,
  PTHREAD_MUTEX_ERRORCHECK = PTHREAD_MUTEX_ERRORCHECK_NP,
  PTHREAD_MUTEX_DEFAULT = PTHREAD_MUTEX_NORMAL



  , PTHREAD_MUTEX_FAST_NP = PTHREAD_MUTEX_TIMED_NP

};




enum
{
  PTHREAD_MUTEX_STALLED,
  PTHREAD_MUTEX_STALLED_NP = PTHREAD_MUTEX_STALLED,
  PTHREAD_MUTEX_ROBUST,
  PTHREAD_MUTEX_ROBUST_NP = PTHREAD_MUTEX_ROBUST
};





enum
{
  PTHREAD_PRIO_NONE,
  PTHREAD_PRIO_INHERIT,
  PTHREAD_PRIO_PROTECT
};



#define PTHREAD_MUTEX_INITIALIZER { { __PTHREAD_MUTEX_INITIALIZER (PTHREAD_MUTEX_TIMED_NP) } }


#define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP { { __PTHREAD_MUTEX_INITIALIZER (PTHREAD_MUTEX_RECURSIVE_NP) } }

#define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP { { __PTHREAD_MUTEX_INITIALIZER (PTHREAD_MUTEX_ERRORCHECK_NP) } }

#define PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP { { __PTHREAD_MUTEX_INITIALIZER (PTHREAD_MUTEX_ADAPTIVE_NP) } }






enum
{
  PTHREAD_RWLOCK_PREFER_READER_NP,
  PTHREAD_RWLOCK_PREFER_WRITER_NP,
  PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP,
  PTHREAD_RWLOCK_DEFAULT_NP = PTHREAD_RWLOCK_PREFER_READER_NP
};



#define PTHREAD_RWLOCK_INITIALIZER { { __PTHREAD_RWLOCK_INITIALIZER (PTHREAD_RWLOCK_DEFAULT_NP) } }


#define PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP { { __PTHREAD_RWLOCK_INITIALIZER (PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP) } }






enum
{
  PTHREAD_INHERIT_SCHED,
#define PTHREAD_INHERIT_SCHED PTHREAD_INHERIT_SCHED
  PTHREAD_EXPLICIT_SCHED
#define PTHREAD_EXPLICIT_SCHED PTHREAD_EXPLICIT_SCHED
};



enum
{
  PTHREAD_SCOPE_SYSTEM,
#define PTHREAD_SCOPE_SYSTEM PTHREAD_SCOPE_SYSTEM
  PTHREAD_SCOPE_PROCESS
#define PTHREAD_SCOPE_PROCESS PTHREAD_SCOPE_PROCESS
};



enum
{
  PTHREAD_PROCESS_PRIVATE,
#define PTHREAD_PROCESS_PRIVATE PTHREAD_PROCESS_PRIVATE
  PTHREAD_PROCESS_SHARED
#define PTHREAD_PROCESS_SHARED PTHREAD_PROCESS_SHARED
};




#define PTHREAD_COND_INITIALIZER { { {0}, {0}, {0, 0}, {0, 0}, 0, 0, {0, 0} } }



struct _pthread_cleanup_buffer
{
  void (*__routine) (void *);
  void *__arg;
  int __canceltype;
  struct _pthread_cleanup_buffer *__prev;
};


enum
{
  PTHREAD_CANCEL_ENABLE,
#define PTHREAD_CANCEL_ENABLE PTHREAD_CANCEL_ENABLE
  PTHREAD_CANCEL_DISABLE
#define PTHREAD_CANCEL_DISABLE PTHREAD_CANCEL_DISABLE
};
enum
{
  PTHREAD_CANCEL_DEFERRED,
#define PTHREAD_CANCEL_DEFERRED PTHREAD_CANCEL_DEFERRED
  PTHREAD_CANCEL_ASYNCHRONOUS
#define PTHREAD_CANCEL_ASYNCHRONOUS PTHREAD_CANCEL_ASYNCHRONOUS
};
#define PTHREAD_CANCELED ((void *) -1)



#define PTHREAD_ONCE_INIT 0






#define PTHREAD_BARRIER_SERIAL_THREAD -1



extern "C" {




extern int pthread_create (pthread_t *__restrict __newthread,
      const pthread_attr_t *__restrict __attr,
      void *(*__start_routine) (void *),
      void *__restrict __arg) noexcept (true) __attribute__ ((__nonnull__ (1, 3)));





extern void pthread_exit (void *__retval) __attribute__ ((__noreturn__));







extern int pthread_join (pthread_t __th, void **__thread_return);




extern int pthread_tryjoin_np (pthread_t __th, void **__thread_return) noexcept (true);
# 233 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/pthread.h" 3 4
extern int pthread_timedjoin_np (pthread_t __th, void **__thread_return,
     const struct timespec *__abstime);
# 243 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/pthread.h" 3 4
extern int pthread_clockjoin_np (pthread_t __th, void **__thread_return,
                                 clockid_t __clockid,
     const struct timespec *__abstime);
# 269 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/pthread.h" 3 4
extern int pthread_detach (pthread_t __th) noexcept (true);



extern pthread_t pthread_self (void) noexcept (true) __attribute__ ((__const__));


extern int pthread_equal (pthread_t __thread1, pthread_t __thread2)
  noexcept (true) __attribute__ ((__const__));







extern int pthread_attr_init (pthread_attr_t *__attr) noexcept (true) __attribute__ ((__nonnull__ (1)));


extern int pthread_attr_destroy (pthread_attr_t *__attr)
     noexcept (true) __attribute__ ((__nonnull__ (1)));


extern int pthread_attr_getdetachstate (const pthread_attr_t *__attr,
     int *__detachstate)
     noexcept (true) __attribute__ ((__nonnull__ (1, 2)));


extern int pthread_attr_setdetachstate (pthread_attr_t *__attr,
     int __detachstate)
     noexcept (true) __attribute__ ((__nonnull__ (1)));



extern int pthread_attr_getguardsize (const pthread_attr_t *__attr,
          size_t *__guardsize)
     noexcept (true) __attribute__ ((__nonnull__ (1, 2)));


extern int pthread_attr_setguardsize (pthread_attr_t *__attr,
          size_t __guardsize)
     noexcept (true) __attribute__ ((__nonnull__ (1)));



extern int pthread_attr_getschedparam (const pthread_attr_t *__restrict __attr,
           struct sched_param *__restrict __param)
     noexcept (true) __attribute__ ((__nonnull__ (1, 2)));


extern int pthread_attr_setschedparam (pthread_attr_t *__restrict __attr,
           const struct sched_param *__restrict
           __param) noexcept (true) __attribute__ ((__nonnull__ (1, 2)));


extern int pthread_attr_getschedpolicy (const pthread_attr_t *__restrict
     __attr, int *__restrict __policy)
     noexcept (true) __attribute__ ((__nonnull__ (1, 2)));


extern int pthread_attr_setschedpolicy (pthread_attr_t *__attr, int __policy)
     noexcept (true) __attribute__ ((__nonnull__ (1)));


extern int pthread_attr_getinheritsched (const pthread_attr_t *__restrict
      __attr, int *__restrict __inherit)
     noexcept (true) __attribute__ ((__nonnull__ (1, 2)));


extern int pthread_attr_setinheritsched (pthread_attr_t *__attr,
      int __inherit)
     noexcept (true) __attribute__ ((__nonnull__ (1)));



extern int pthread_attr_getscope (const pthread_attr_t *__restrict __attr,
      int *__restrict __scope)
     noexcept (true) __attribute__ ((__nonnull__ (1, 2)));


extern int pthread_attr_setscope (pthread_attr_t *__attr, int __scope)
     noexcept (true) __attribute__ ((__nonnull__ (1)));


extern int pthread_attr_getstackaddr (const pthread_attr_t *__restrict
          __attr, void **__restrict __stackaddr)
     noexcept (true) __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__deprecated__));





extern int pthread_attr_setstackaddr (pthread_attr_t *__attr,
          void *__stackaddr)
     noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__deprecated__));


extern int pthread_attr_getstacksize (const pthread_attr_t *__restrict
          __attr, size_t *__restrict __stacksize)
     noexcept (true) __attribute__ ((__nonnull__ (1, 2)));




extern int pthread_attr_setstacksize (pthread_attr_t *__attr,
          size_t __stacksize)
     noexcept (true) __attribute__ ((__nonnull__ (1)));



extern int pthread_attr_getstack (const pthread_attr_t *__restrict __attr,
      void **__restrict __stackaddr,
      size_t *__restrict __stacksize)
     noexcept (true) __attribute__ ((__nonnull__ (1, 2, 3)));




extern int pthread_attr_setstack (pthread_attr_t *__attr, void *__stackaddr,
      size_t __stacksize) noexcept (true) __attribute__ ((__nonnull__ (1)));





extern int pthread_attr_setaffinity_np (pthread_attr_t *__attr,
     size_t __cpusetsize,
     const cpu_set_t *__cpuset)
     noexcept (true) __attribute__ ((__nonnull__ (1, 3)));



extern int pthread_attr_getaffinity_np (const pthread_attr_t *__attr,
     size_t __cpusetsize,
     cpu_set_t *__cpuset)
     noexcept (true) __attribute__ ((__nonnull__ (1, 3)));


extern int pthread_getattr_default_np (pthread_attr_t *__attr)
     noexcept (true) __attribute__ ((__nonnull__ (1)));


extern int pthread_attr_setsigmask_np (pthread_attr_t *__attr,
           const __sigset_t *sigmask);




extern int pthread_attr_getsigmask_np (const pthread_attr_t *__attr,
           __sigset_t *sigmask);



#define PTHREAD_ATTR_NO_SIGMASK_NP (-1)



extern int pthread_setattr_default_np (const pthread_attr_t *__attr)
     noexcept (true) __attribute__ ((__nonnull__ (1)));




extern int pthread_getattr_np (pthread_t __th, pthread_attr_t *__attr)
     noexcept (true) __attribute__ ((__nonnull__ (2)));







extern int pthread_setschedparam (pthread_t __target_thread, int __policy,
      const struct sched_param *__param)
     noexcept (true) __attribute__ ((__nonnull__ (3)));


extern int pthread_getschedparam (pthread_t __target_thread,
      int *__restrict __policy,
      struct sched_param *__restrict __param)
     noexcept (true) __attribute__ ((__nonnull__ (2, 3)));


extern int pthread_setschedprio (pthread_t __target_thread, int __prio)
     noexcept (true);




extern int pthread_getname_np (pthread_t __target_thread, char *__buf,
          size_t __buflen)
     noexcept (true) __attribute__ ((__nonnull__ (2)));


extern int pthread_setname_np (pthread_t __target_thread, const char *__name)
     noexcept (true) __attribute__ ((__nonnull__ (2)));





extern int pthread_getconcurrency (void) noexcept (true);


extern int pthread_setconcurrency (int __level) noexcept (true);



extern int pthread_yield (void) noexcept (true);

extern int pthread_yield (void) noexcept (true) __asm__ ("" "sched_yield")
  __attribute__ ((__deprecated__ ("pthread_yield is deprecated, use sched_yield instead")))
                                                      ;







extern int pthread_setaffinity_np (pthread_t __th, size_t __cpusetsize,
       const cpu_set_t *__cpuset)
     noexcept (true) __attribute__ ((__nonnull__ (3)));


extern int pthread_getaffinity_np (pthread_t __th, size_t __cpusetsize,
       cpu_set_t *__cpuset)
     noexcept (true) __attribute__ ((__nonnull__ (3)));
# 509 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/pthread.h" 3 4
extern int pthread_once (pthread_once_t *__once_control,
    void (*__init_routine) (void)) __attribute__ ((__nonnull__ (1, 2)));
# 521 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/pthread.h" 3 4
extern int pthread_setcancelstate (int __state, int *__oldstate);



extern int pthread_setcanceltype (int __type, int *__oldtype);


extern int pthread_cancel (pthread_t __th);




extern void pthread_testcancel (void);




struct __cancel_jmp_buf_tag
{
  __jmp_buf __cancel_jmp_buf;
  int __mask_was_saved;
};

typedef struct
{
  struct __cancel_jmp_buf_tag __cancel_jmp_buf[1];
  void *__pad[4];
} __pthread_unwind_buf_t __attribute__ ((__aligned__));



#define __cleanup_fct_attribute 




struct __pthread_cleanup_frame
{
  void (*__cancel_routine) (void *);
  void *__cancel_arg;
  int __do_it;
  int __cancel_type;
};
# 681 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/pthread.h" 3 4
#define pthread_cleanup_push(routine,arg) do { __pthread_unwind_buf_t __cancel_buf; void (*__cancel_routine) (void *) = (routine); void *__cancel_arg = (arg); int __not_first_call = __sigsetjmp_cancel (__cancel_buf.__cancel_jmp_buf, 0); if (__glibc_unlikely (__not_first_call)) { __cancel_routine (__cancel_arg); __pthread_unwind_next (&__cancel_buf); } __pthread_register_cancel (&__cancel_buf); do {
# 697 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/pthread.h" 3 4
extern void __pthread_register_cancel (__pthread_unwind_buf_t *__buf)
     ;



#define pthread_cleanup_pop(execute) do { } while (0); } while (0); __pthread_unregister_cancel (&__cancel_buf); if (execute) __cancel_routine (__cancel_arg); } while (0)






extern void __pthread_unregister_cancel (__pthread_unwind_buf_t *__buf)
  ;





#define pthread_cleanup_push_defer_np(routine,arg) do { __pthread_unwind_buf_t __cancel_buf; void (*__cancel_routine) (void *) = (routine); void *__cancel_arg = (arg); int __not_first_call = __sigsetjmp_cancel (__cancel_buf.__cancel_jmp_buf, 0); if (__glibc_unlikely (__not_first_call)) { __cancel_routine (__cancel_arg); __pthread_unwind_next (&__cancel_buf); } __pthread_register_cancel_defer (&__cancel_buf); do {
# 732 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/pthread.h" 3 4
extern void __pthread_register_cancel_defer (__pthread_unwind_buf_t *__buf)
     ;




#define pthread_cleanup_pop_restore_np(execute) do { } while (0); } while (0); __pthread_unregister_cancel_restore (&__cancel_buf); if (execute) __cancel_routine (__cancel_arg); } while (0)






extern void __pthread_unregister_cancel_restore (__pthread_unwind_buf_t *__buf)
  ;



extern void __pthread_unwind_next (__pthread_unwind_buf_t *__buf)
     __attribute__ ((__noreturn__))

     __attribute__ ((__weak__))

     ;
# 766 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/pthread.h" 3 4
extern int __sigsetjmp_cancel (struct __cancel_jmp_buf_tag __env[1], int __savemask) noexcept (true) __asm__ ("" "__sigsetjmp")


                     __attribute__ ((__returns_twice__));
# 781 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/pthread.h" 3 4
extern int pthread_mutex_init (pthread_mutex_t *__mutex,
          const pthread_mutexattr_t *__mutexattr)
     noexcept (true) __attribute__ ((__nonnull__ (1)));


extern int pthread_mutex_destroy (pthread_mutex_t *__mutex)
     noexcept (true) __attribute__ ((__nonnull__ (1)));


extern int pthread_mutex_trylock (pthread_mutex_t *__mutex)
     noexcept (true) __attribute__ ((__nonnull__ (1)));


extern int pthread_mutex_lock (pthread_mutex_t *__mutex)
     noexcept (true) __attribute__ ((__nonnull__ (1)));




extern int pthread_mutex_timedlock (pthread_mutex_t *__restrict __mutex,
        const struct timespec *__restrict
        __abstime) noexcept (true) __attribute__ ((__nonnull__ (1, 2)));
# 817 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/pthread.h" 3 4
extern int pthread_mutex_clocklock (pthread_mutex_t *__restrict __mutex,
        clockid_t __clockid,
        const struct timespec *__restrict
        __abstime) noexcept (true) __attribute__ ((__nonnull__ (1, 3)));
# 835 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/pthread.h" 3 4
extern int pthread_mutex_unlock (pthread_mutex_t *__mutex)
     noexcept (true) __attribute__ ((__nonnull__ (1)));



extern int pthread_mutex_getprioceiling (const pthread_mutex_t *
      __restrict __mutex,
      int *__restrict __prioceiling)
     noexcept (true) __attribute__ ((__nonnull__ (1, 2)));



extern int pthread_mutex_setprioceiling (pthread_mutex_t *__restrict __mutex,
      int __prioceiling,
      int *__restrict __old_ceiling)
     noexcept (true) __attribute__ ((__nonnull__ (1, 3)));




extern int pthread_mutex_consistent (pthread_mutex_t *__mutex)
     noexcept (true) __attribute__ ((__nonnull__ (1)));


extern int pthread_mutex_consistent_np (pthread_mutex_t *) noexcept (true) __asm__ ("" "pthread_mutex_consistent")
                                __attribute__ ((__nonnull__ (1)))
  __attribute__ ((__deprecated__ ("pthread_mutex_consistent_np is deprecated, use pthread_mutex_consistent")))
                                                                         ;
# 874 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/pthread.h" 3 4
extern int pthread_mutexattr_init (pthread_mutexattr_t *__attr)
     noexcept (true) __attribute__ ((__nonnull__ (1)));


extern int pthread_mutexattr_destroy (pthread_mutexattr_t *__attr)
     noexcept (true) __attribute__ ((__nonnull__ (1)));


extern int pthread_mutexattr_getpshared (const pthread_mutexattr_t *
      __restrict __attr,
      int *__restrict __pshared)
     noexcept (true) __attribute__ ((__nonnull__ (1, 2)));


extern int pthread_mutexattr_setpshared (pthread_mutexattr_t *__attr,
      int __pshared)
     noexcept (true) __attribute__ ((__nonnull__ (1)));



extern int pthread_mutexattr_gettype (const pthread_mutexattr_t *__restrict
          __attr, int *__restrict __kind)
     noexcept (true) __attribute__ ((__nonnull__ (1, 2)));




extern int pthread_mutexattr_settype (pthread_mutexattr_t *__attr, int __kind)
     noexcept (true) __attribute__ ((__nonnull__ (1)));



extern int pthread_mutexattr_getprotocol (const pthread_mutexattr_t *
       __restrict __attr,
       int *__restrict __protocol)
     noexcept (true) __attribute__ ((__nonnull__ (1, 2)));



extern int pthread_mutexattr_setprotocol (pthread_mutexattr_t *__attr,
       int __protocol)
     noexcept (true) __attribute__ ((__nonnull__ (1)));


extern int pthread_mutexattr_getprioceiling (const pthread_mutexattr_t *
          __restrict __attr,
          int *__restrict __prioceiling)
     noexcept (true) __attribute__ ((__nonnull__ (1, 2)));


extern int pthread_mutexattr_setprioceiling (pthread_mutexattr_t *__attr,
          int __prioceiling)
     noexcept (true) __attribute__ ((__nonnull__ (1)));



extern int pthread_mutexattr_getrobust (const pthread_mutexattr_t *__attr,
     int *__robustness)
     noexcept (true) __attribute__ ((__nonnull__ (1, 2)));


extern int pthread_mutexattr_getrobust_np (pthread_mutexattr_t *, int *) noexcept (true) __asm__ ("" "pthread_mutexattr_getrobust")

                                   __attribute__ ((__nonnull__ (1)))
  __attribute__ ((__deprecated__ ("pthread_mutexattr_getrobust_np is deprecated, use pthread_mutexattr_getrobust")))
                                                                               ;






extern int pthread_mutexattr_setrobust (pthread_mutexattr_t *__attr,
     int __robustness)
     noexcept (true) __attribute__ ((__nonnull__ (1)));


extern int pthread_mutexattr_setrobust_np (pthread_mutexattr_t *, int) noexcept (true) __asm__ ("" "pthread_mutexattr_setrobust")

                                   __attribute__ ((__nonnull__ (1)))
  __attribute__ ((__deprecated__ ("pthread_mutexattr_setrobust_np is deprecated, use pthread_mutexattr_setrobust")))
                                                                               ;
# 967 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/pthread.h" 3 4
extern int pthread_rwlock_init (pthread_rwlock_t *__restrict __rwlock,
    const pthread_rwlockattr_t *__restrict
    __attr) noexcept (true) __attribute__ ((__nonnull__ (1)));


extern int pthread_rwlock_destroy (pthread_rwlock_t *__rwlock)
     noexcept (true) __attribute__ ((__nonnull__ (1)));


extern int pthread_rwlock_rdlock (pthread_rwlock_t *__rwlock)
     noexcept (true) __attribute__ ((__nonnull__ (1)));


extern int pthread_rwlock_tryrdlock (pthread_rwlock_t *__rwlock)
  noexcept (true) __attribute__ ((__nonnull__ (1)));




extern int pthread_rwlock_timedrdlock (pthread_rwlock_t *__restrict __rwlock,
           const struct timespec *__restrict
           __abstime) noexcept (true) __attribute__ ((__nonnull__ (1, 2)));
# 1004 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/pthread.h" 3 4
extern int pthread_rwlock_clockrdlock (pthread_rwlock_t *__restrict __rwlock,
           clockid_t __clockid,
           const struct timespec *__restrict
           __abstime) noexcept (true) __attribute__ ((__nonnull__ (1, 3)));
# 1023 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/pthread.h" 3 4
extern int pthread_rwlock_wrlock (pthread_rwlock_t *__rwlock)
     noexcept (true) __attribute__ ((__nonnull__ (1)));


extern int pthread_rwlock_trywrlock (pthread_rwlock_t *__rwlock)
     noexcept (true) __attribute__ ((__nonnull__ (1)));




extern int pthread_rwlock_timedwrlock (pthread_rwlock_t *__restrict __rwlock,
           const struct timespec *__restrict
           __abstime) noexcept (true) __attribute__ ((__nonnull__ (1, 2)));
# 1051 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/pthread.h" 3 4
extern int pthread_rwlock_clockwrlock (pthread_rwlock_t *__restrict __rwlock,
           clockid_t __clockid,
           const struct timespec *__restrict
           __abstime) noexcept (true) __attribute__ ((__nonnull__ (1, 3)));
# 1071 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/pthread.h" 3 4
extern int pthread_rwlock_unlock (pthread_rwlock_t *__rwlock)
     noexcept (true) __attribute__ ((__nonnull__ (1)));





extern int pthread_rwlockattr_init (pthread_rwlockattr_t *__attr)
     noexcept (true) __attribute__ ((__nonnull__ (1)));


extern int pthread_rwlockattr_destroy (pthread_rwlockattr_t *__attr)
     noexcept (true) __attribute__ ((__nonnull__ (1)));


extern int pthread_rwlockattr_getpshared (const pthread_rwlockattr_t *
       __restrict __attr,
       int *__restrict __pshared)
     noexcept (true) __attribute__ ((__nonnull__ (1, 2)));


extern int pthread_rwlockattr_setpshared (pthread_rwlockattr_t *__attr,
       int __pshared)
     noexcept (true) __attribute__ ((__nonnull__ (1)));


extern int pthread_rwlockattr_getkind_np (const pthread_rwlockattr_t *
       __restrict __attr,
       int *__restrict __pref)
     noexcept (true) __attribute__ ((__nonnull__ (1, 2)));


extern int pthread_rwlockattr_setkind_np (pthread_rwlockattr_t *__attr,
       int __pref) noexcept (true) __attribute__ ((__nonnull__ (1)));







extern int pthread_cond_init (pthread_cond_t *__restrict __cond,
         const pthread_condattr_t *__restrict __cond_attr)
     noexcept (true) __attribute__ ((__nonnull__ (1)));


extern int pthread_cond_destroy (pthread_cond_t *__cond)
     noexcept (true) __attribute__ ((__nonnull__ (1)));


extern int pthread_cond_signal (pthread_cond_t *__cond)
     noexcept (true) __attribute__ ((__nonnull__ (1)));


extern int pthread_cond_broadcast (pthread_cond_t *__cond)
     noexcept (true) __attribute__ ((__nonnull__ (1)));






extern int pthread_cond_wait (pthread_cond_t *__restrict __cond,
         pthread_mutex_t *__restrict __mutex)
     __attribute__ ((__nonnull__ (1, 2)));
# 1145 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/pthread.h" 3 4
extern int pthread_cond_timedwait (pthread_cond_t *__restrict __cond,
       pthread_mutex_t *__restrict __mutex,
       const struct timespec *__restrict __abstime)
     __attribute__ ((__nonnull__ (1, 2, 3)));
# 1171 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/pthread.h" 3 4
extern int pthread_cond_clockwait (pthread_cond_t *__restrict __cond,
       pthread_mutex_t *__restrict __mutex,
       __clockid_t __clock_id,
       const struct timespec *__restrict __abstime)
     __attribute__ ((__nonnull__ (1, 2, 4)));
# 1194 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/pthread.h" 3 4
extern int pthread_condattr_init (pthread_condattr_t *__attr)
     noexcept (true) __attribute__ ((__nonnull__ (1)));


extern int pthread_condattr_destroy (pthread_condattr_t *__attr)
     noexcept (true) __attribute__ ((__nonnull__ (1)));


extern int pthread_condattr_getpshared (const pthread_condattr_t *
     __restrict __attr,
     int *__restrict __pshared)
     noexcept (true) __attribute__ ((__nonnull__ (1, 2)));


extern int pthread_condattr_setpshared (pthread_condattr_t *__attr,
     int __pshared) noexcept (true) __attribute__ ((__nonnull__ (1)));



extern int pthread_condattr_getclock (const pthread_condattr_t *
          __restrict __attr,
          __clockid_t *__restrict __clock_id)
     noexcept (true) __attribute__ ((__nonnull__ (1, 2)));


extern int pthread_condattr_setclock (pthread_condattr_t *__attr,
          __clockid_t __clock_id)
     noexcept (true) __attribute__ ((__nonnull__ (1)));
# 1230 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/pthread.h" 3 4
extern int pthread_spin_init (pthread_spinlock_t *__lock, int __pshared)
     noexcept (true) __attribute__ ((__nonnull__ (1)));


extern int pthread_spin_destroy (pthread_spinlock_t *__lock)
     noexcept (true) __attribute__ ((__nonnull__ (1)));


extern int pthread_spin_lock (pthread_spinlock_t *__lock)
     noexcept (true) __attribute__ ((__nonnull__ (1)));


extern int pthread_spin_trylock (pthread_spinlock_t *__lock)
     noexcept (true) __attribute__ ((__nonnull__ (1)));


extern int pthread_spin_unlock (pthread_spinlock_t *__lock)
     noexcept (true) __attribute__ ((__nonnull__ (1)));






extern int pthread_barrier_init (pthread_barrier_t *__restrict __barrier,
     const pthread_barrierattr_t *__restrict
     __attr, unsigned int __count)
     noexcept (true) __attribute__ ((__nonnull__ (1)));


extern int pthread_barrier_destroy (pthread_barrier_t *__barrier)
     noexcept (true) __attribute__ ((__nonnull__ (1)));


extern int pthread_barrier_wait (pthread_barrier_t *__barrier)
     noexcept (true) __attribute__ ((__nonnull__ (1)));



extern int pthread_barrierattr_init (pthread_barrierattr_t *__attr)
     noexcept (true) __attribute__ ((__nonnull__ (1)));


extern int pthread_barrierattr_destroy (pthread_barrierattr_t *__attr)
     noexcept (true) __attribute__ ((__nonnull__ (1)));


extern int pthread_barrierattr_getpshared (const pthread_barrierattr_t *
        __restrict __attr,
        int *__restrict __pshared)
     noexcept (true) __attribute__ ((__nonnull__ (1, 2)));


extern int pthread_barrierattr_setpshared (pthread_barrierattr_t *__attr,
        int __pshared)
     noexcept (true) __attribute__ ((__nonnull__ (1)));
# 1297 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/pthread.h" 3 4
extern int pthread_key_create (pthread_key_t *__key,
          void (*__destr_function) (void *))
     noexcept (true) __attribute__ ((__nonnull__ (1)));


extern int pthread_key_delete (pthread_key_t __key) noexcept (true);


extern void *pthread_getspecific (pthread_key_t __key) noexcept (true);


extern int pthread_setspecific (pthread_key_t __key,
    const void *__pointer)
  noexcept (true) __attribute__ ((__access__ (__none__, 2)));




extern int pthread_getcpuclockid (pthread_t __thread_id,
      __clockid_t *__clock_id)
     noexcept (true) __attribute__ ((__nonnull__ (2)));
# 1332 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/pthread.h" 3 4
extern int pthread_atfork (void (*__prepare) (void),
      void (*__parent) (void),
      void (*__child) (void)) noexcept (true);




extern __inline __attribute__ ((__gnu_inline__)) int
__attribute__ ((__leaf__)) pthread_equal (pthread_t __thread1, pthread_t __thread2) noexcept (true)
{
  return __thread1 == __thread2;
}


}
# 36 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/gthr-default.h" 2 3
# 47 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/gthr-default.h" 3
typedef pthread_t __gthread_t;
typedef pthread_key_t __gthread_key_t;
typedef pthread_once_t __gthread_once_t;
typedef pthread_mutex_t __gthread_mutex_t;
typedef pthread_mutex_t __gthread_recursive_mutex_t;
typedef pthread_cond_t __gthread_cond_t;
typedef struct timespec __gthread_time_t;



#define __GTHREAD_HAS_COND 1

#define __GTHREAD_MUTEX_INIT PTHREAD_MUTEX_INITIALIZER
#define __GTHREAD_MUTEX_INIT_FUNCTION __gthread_mutex_init_function
#define __GTHREAD_ONCE_INIT PTHREAD_ONCE_INIT



#define __GTHREAD_RECURSIVE_MUTEX_INIT PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP



#define __GTHREAD_COND_INIT PTHREAD_COND_INITIALIZER
#define __GTHREAD_TIME_INIT {0,0}
# 95 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/gthr-default.h" 3
#define __gthrw2(name,name2,type) 
#define __gthrw_(name) name



#define __gthrw(name) __gthrw2(__gthrw_ ## name,name,name)




































# 299 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/gthr-default.h" 3
static inline int
__gthread_active_p (void)
{
  return 1;
}
# 659 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/gthr-default.h" 3
static inline int
__gthread_create (__gthread_t *__threadid, void *(*__func) (void*),
    void *__args)
{
  return pthread_create (__threadid, __null, __func, __args);
}

static inline int
__gthread_join (__gthread_t __threadid, void **__value_ptr)
{
  return pthread_join (__threadid, __value_ptr);
}

static inline int
__gthread_detach (__gthread_t __threadid)
{
  return pthread_detach (__threadid);
}

static inline int
__gthread_equal (__gthread_t __t1, __gthread_t __t2)
{
  return pthread_equal (__t1, __t2);
}

static inline __gthread_t
__gthread_self (void)
{
  return pthread_self ();
}

static inline int
__gthread_yield (void)
{
  return sched_yield ();
}

static inline int
__gthread_once (__gthread_once_t *__once, void (*__func) (void))
{
  if (__gthread_active_p ())
    return pthread_once (__once, __func);
  else
    return -1;
}

static inline int
__gthread_key_create (__gthread_key_t *__key, void (*__dtor) (void *))
{
  return pthread_key_create (__key, __dtor);
}

static inline int
__gthread_key_delete (__gthread_key_t __key)
{
  return pthread_key_delete (__key);
}

static inline void *
__gthread_getspecific (__gthread_key_t __key)
{
  return pthread_getspecific (__key);
}

static inline int
__gthread_setspecific (__gthread_key_t __key, const void *__ptr)
{
  return pthread_setspecific (__key, __ptr);
}

static inline void
__gthread_mutex_init_function (__gthread_mutex_t *__mutex)
{
  if (__gthread_active_p ())
    pthread_mutex_init (__mutex, __null);
}

static inline int
__gthread_mutex_destroy (__gthread_mutex_t *__mutex)
{
  if (__gthread_active_p ())
    return pthread_mutex_destroy (__mutex);
  else
    return 0;
}

static inline int
__gthread_mutex_lock (__gthread_mutex_t *__mutex)
{
  if (__gthread_active_p ())
    return pthread_mutex_lock (__mutex);
  else
    return 0;
}

static inline int
__gthread_mutex_trylock (__gthread_mutex_t *__mutex)
{
  if (__gthread_active_p ())
    return pthread_mutex_trylock (__mutex);
  else
    return 0;
}


static inline int
__gthread_mutex_timedlock (__gthread_mutex_t *__mutex,
      const __gthread_time_t *__abs_timeout)
{
  if (__gthread_active_p ())
    return pthread_mutex_timedlock (__mutex, __abs_timeout);
  else
    return 0;
}


static inline int
__gthread_mutex_unlock (__gthread_mutex_t *__mutex)
{
  if (__gthread_active_p ())
    return pthread_mutex_unlock (__mutex);
  else
    return 0;
}
# 808 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/gthr-default.h" 3
static inline int
__gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *__mutex)
{
  return __gthread_mutex_lock (__mutex);
}

static inline int
__gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *__mutex)
{
  return __gthread_mutex_trylock (__mutex);
}


static inline int
__gthread_recursive_mutex_timedlock (__gthread_recursive_mutex_t *__mutex,
         const __gthread_time_t *__abs_timeout)
{
  return __gthread_mutex_timedlock (__mutex, __abs_timeout);
}


static inline int
__gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex)
{
  return __gthread_mutex_unlock (__mutex);
}

static inline int
__gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *__mutex)
{
  return __gthread_mutex_destroy (__mutex);
}
# 850 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/gthr-default.h" 3
static inline int
__gthread_cond_broadcast (__gthread_cond_t *__cond)
{
  return pthread_cond_broadcast (__cond);
}

static inline int
__gthread_cond_signal (__gthread_cond_t *__cond)
{
  return pthread_cond_signal (__cond);
}

static inline int
__gthread_cond_wait (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex)
{
  return pthread_cond_wait (__cond, __mutex);
}

static inline int
__gthread_cond_timedwait (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex,
     const __gthread_time_t *__abs_timeout)
{
  return pthread_cond_timedwait (__cond, __mutex, __abs_timeout);
}

static inline int
__gthread_cond_wait_recursive (__gthread_cond_t *__cond,
          __gthread_recursive_mutex_t *__mutex)
{
  return __gthread_cond_wait (__cond, __mutex);
}

static inline int
__gthread_cond_destroy (__gthread_cond_t* __cond)
{
  return pthread_cond_destroy (__cond);
}
# 149 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/gthr.h" 2 3


#pragma GCC visibility pop
# 36 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/ext/atomicity.h" 2 3
# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/atomic_word.h" 1 3
# 30 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/aarch64-linux-musl/bits/atomic_word.h" 3
#define _GLIBCXX_ATOMIC_WORD_H 1

typedef int _Atomic_word;



#define _GLIBCXX_READ_MEM_BARRIER __atomic_thread_fence (__ATOMIC_ACQUIRE)

#define _GLIBCXX_WRITE_MEM_BARRIER __atomic_thread_fence (__ATOMIC_RELEASE)
# 37 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/ext/atomicity.h" 2 3

# 1 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/single_threaded.h" 1 3 4
# 20 "/mnt/b/yoe/master/build/tmp/work/cortexa72-yoe-linux/harfbuzz/6.0.0-r0/recipe-sysroot/usr/include/sys/single_threaded.h" 3 4
#define _SYS_SINGLE_THREADED_H 



extern "C" {




extern char __libc_single_threaded;

}
# 39 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/ext/atomicity.h" 2 3


namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
{


  __attribute__((__always_inline__))
  inline bool
  __is_single_threaded() noexcept
  {



    return ::__libc_single_threaded;



  }






  inline _Atomic_word
  __attribute__((__always_inline__))
  __exchange_and_add(volatile _Atomic_word* __mem, int __val)
  { return __atomic_fetch_add(__mem, __val, 4); }

  inline void
  __attribute__((__always_inline__))
  __atomic_add(volatile _Atomic_word* __mem, int __val)
  { __atomic_fetch_add(__mem, __val, 4); }
# 80 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/ext/atomicity.h" 3
  inline _Atomic_word
  __attribute__((__always_inline__))
  __exchange_and_add_single(_Atomic_word* __mem, int __val)
  {
    _Atomic_word __result = *__mem;
    *__mem += __val;
    return __result;
  }

  inline void
  __attribute__((__always_inline__))
  __atomic_add_single(_Atomic_word* __mem, int __val)
  { *__mem += __val; }

  inline _Atomic_word
  __attribute__ ((__always_inline__))
  __exchange_and_add_dispatch(_Atomic_word* __mem, int __val)
  {
    if (__is_single_threaded())
      return __exchange_and_add_single(__mem, __val);
    else
      return __exchange_and_add(__mem, __val);
  }

  inline void
  __attribute__ ((__always_inline__))
  __atomic_add_dispatch(_Atomic_word* __mem, int __val)
  {
    if (__is_single_threaded())
      __atomic_add_single(__mem, __val);
    else
      __atomic_add(__mem, __val);
  }


}
# 62 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr_base.h" 2 3
# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/ext/concurrence.h" 1 3
# 30 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/ext/concurrence.h" 3
#define _CONCURRENCE_H 1

       
# 33 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/ext/concurrence.h" 3

# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/exception" 1 3
# 31 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/exception" 3
#define __EXCEPTION__ 

       
# 34 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/exception" 3




extern "C++" {

namespace std __attribute__ ((__visibility__ ("default")))
{
# 51 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/exception" 3
  class bad_exception : public exception
  {
  public:
    bad_exception() noexcept { }



    virtual ~bad_exception() noexcept;


    virtual const char*
    what() const noexcept;
  };


  typedef void (*terminate_handler) ();


  terminate_handler set_terminate(terminate_handler) noexcept;



  terminate_handler get_terminate() noexcept;




  void terminate() noexcept __attribute__ ((__noreturn__));



  typedef void (*__attribute__ ((__deprecated__)) unexpected_handler) ();





  __attribute__ ((__deprecated__))
  unexpected_handler set_unexpected(unexpected_handler) noexcept;







  __attribute__ ((__deprecated__))
  unexpected_handler get_unexpected() noexcept;







  __attribute__ ((__deprecated__))
  void unexpected() __attribute__ ((__noreturn__));
# 121 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/exception" 3
 
  bool uncaught_exception() noexcept __attribute__ ((__pure__));
# 134 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/exception" 3
}

namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
{

# 156 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/exception" 3
  void __verbose_terminate_handler();


}

}


# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/exception_ptr.h" 1 3
# 32 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/exception_ptr.h" 3
#define _EXCEPTION_PTR_H 



# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/cxxabi_init_exception.h" 1 3
# 32 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/cxxabi_init_exception.h" 3
#define _CXXABI_INIT_EXCEPTION_H 1

       
# 35 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/cxxabi_init_exception.h" 3

#pragma GCC visibility push(default)

# 1 "/mnt/b/cross/aarch64-linux-musl/tools/lib/gcc/aarch64-linux-musl/13.0.1/include/stddef.h" 1 3
# 39 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/cxxabi_init_exception.h" 2 3



#define _GLIBCXX_CDTOR_CALLABI 
#define _GLIBCXX_HAVE_CDTOR_CALLABI 0






namespace std
{
  class type_info;
}

namespace __cxxabiv1
{
  struct __cxa_refcounted_exception;

  extern "C"
    {

      void*
      __cxa_allocate_exception(size_t) noexcept;

      void
      __cxa_free_exception(void*) noexcept;


      __cxa_refcounted_exception*
      __cxa_init_primary_exception(void *object, std::type_info *tinfo,
                void ( *dest) (void *)) noexcept;

    }
}



#pragma GCC visibility pop
# 37 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/exception_ptr.h" 2 3
# 47 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/exception_ptr.h" 3
#define _GLIBCXX_EH_PTR_USED 


extern "C++" {

namespace std __attribute__ ((__visibility__ ("default")))
{
  class type_info;






  namespace __exception_ptr
  {
    class exception_ptr;
  }

  using __exception_ptr::exception_ptr;
# 75 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/exception_ptr.h" 3
  exception_ptr current_exception() noexcept;

  template<typename _Ex>
  exception_ptr make_exception_ptr(_Ex) noexcept;


  void rethrow_exception(exception_ptr) __attribute__ ((__noreturn__));

  namespace __exception_ptr
  {
    using std::rethrow_exception;
# 97 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/exception_ptr.h" 3
    class exception_ptr
    {
      void* _M_exception_object;

      explicit exception_ptr(void* __e) noexcept;

      void _M_addref() noexcept;
      void _M_release() noexcept;

      void *_M_get() const noexcept __attribute__ ((__pure__));

      friend exception_ptr std::current_exception() noexcept;
      friend void std::rethrow_exception(exception_ptr);
      template<typename _Ex>
      friend exception_ptr std::make_exception_ptr(_Ex) noexcept;

    public:
      exception_ptr() noexcept;

      exception_ptr(const exception_ptr&) noexcept;


      exception_ptr(nullptr_t) noexcept
      : _M_exception_object(nullptr)
      { }

      exception_ptr(exception_ptr&& __o) noexcept
      : _M_exception_object(__o._M_exception_object)
      { __o._M_exception_object = nullptr; }
# 135 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/exception_ptr.h" 3
      exception_ptr&
      operator=(const exception_ptr&) noexcept;


      exception_ptr&
      operator=(exception_ptr&& __o) noexcept
      {
        exception_ptr(static_cast<exception_ptr&&>(__o)).swap(*this);
        return *this;
      }


      ~exception_ptr() noexcept;

      void
      swap(exception_ptr&) noexcept;
# 162 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/exception_ptr.h" 3
      explicit operator bool() const noexcept
      { return _M_exception_object; }







      friend bool
      operator==(const exception_ptr& __x, const exception_ptr& __y)
      noexcept
      { return __x._M_exception_object == __y._M_exception_object; }

      friend bool
      operator!=(const exception_ptr& __x, const exception_ptr& __y)
      noexcept
      { return __x._M_exception_object != __y._M_exception_object; }


      const class std::type_info*
      __cxa_exception_type() const noexcept
 __attribute__ ((__pure__));
    };

   
    inline
    exception_ptr::exception_ptr() noexcept
    : _M_exception_object(0)
    { }

   
    inline
    exception_ptr::exception_ptr(const exception_ptr& __other)
    noexcept
    : _M_exception_object(__other._M_exception_object)
    {
      if (_M_exception_object)
 _M_addref();
    }

   
    inline
    exception_ptr::~exception_ptr() noexcept
    {
      if (_M_exception_object)
 _M_release();
    }

   
    inline exception_ptr&
    exception_ptr::operator=(const exception_ptr& __other) noexcept
    {
      exception_ptr(__other).swap(*this);
      return *this;
    }

   
    inline void
    exception_ptr::swap(exception_ptr &__other) noexcept
    {
      void *__tmp = _M_exception_object;
      _M_exception_object = __other._M_exception_object;
      __other._M_exception_object = __tmp;
    }


    inline void
    swap(exception_ptr& __lhs, exception_ptr& __rhs)
    { __lhs.swap(__rhs); }


    template<typename _Ex>
     
      inline void
      __dest_thunk(void* __x)
      { static_cast<_Ex*>(__x)->~_Ex(); }


  }

  using __exception_ptr::swap;
# 281 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/exception_ptr.h" 3
  template<typename _Ex>
    __attribute__ ((__always_inline__))
    inline exception_ptr
    make_exception_ptr(_Ex) noexcept
    { return exception_ptr(); }


#undef _GLIBCXX_EH_PTR_USED


}

}
# 165 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/exception" 2 3
# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/nested_exception.h" 1 3
# 31 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/nested_exception.h" 3
#define _GLIBCXX_NESTED_EXCEPTION_H 1
# 40 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/nested_exception.h" 3
extern "C++" {

namespace std __attribute__ ((__visibility__ ("default")))
{
# 59 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/nested_exception.h" 3
  class nested_exception
  {
    exception_ptr _M_ptr;

  public:

    nested_exception() noexcept : _M_ptr(current_exception()) { }

    nested_exception(const nested_exception&) noexcept = default;

    nested_exception& operator=(const nested_exception&) noexcept = default;

    virtual ~nested_exception() noexcept;


    [[noreturn]]
    void
    rethrow_nested() const
    {
      if (_M_ptr)
 rethrow_exception(_M_ptr);
      std::terminate();
    }


    exception_ptr
    nested_ptr() const noexcept
    { return _M_ptr; }
  };



  template<typename _Except>
    struct _Nested_exception : public _Except, public nested_exception
    {
      explicit _Nested_exception(const _Except& __ex)
      : _Except(__ex)
      { }

      explicit _Nested_exception(_Except&& __ex)
      : _Except(static_cast<_Except&&>(__ex))
      { }
    };





  template<typename _Tp>
    [[noreturn]]
    inline void
    __throw_with_nested_impl(_Tp&& __t, true_type)
    {
      throw _Nested_exception<__remove_cvref_t<_Tp>>{std::forward<_Tp>(__t)};
    }

  template<typename _Tp>
    [[noreturn]]
    inline void
    __throw_with_nested_impl(_Tp&& __t, false_type)
    { throw std::forward<_Tp>(__t); }
# 145 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/nested_exception.h" 3
  template<typename _Tp>
    [[noreturn]]
    inline void
    throw_with_nested(_Tp&& __t)
    {
      using _Up = typename decay<_Tp>::type;
      using _CopyConstructible
 = __and_<is_copy_constructible<_Up>, is_move_constructible<_Up>>;
      static_assert(_CopyConstructible::value,
   "throw_with_nested argument must be CopyConstructible");
# 163 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/nested_exception.h" 3
      using __nest = __and_<is_class<_Up>, __bool_constant<!__is_final(_Up)>,
       __not_<is_base_of<nested_exception, _Up>>>;
      std::__throw_with_nested_impl(std::forward<_Tp>(__t), __nest{});

    }





  template<typename _Ex>
    inline void
    __rethrow_if_nested_impl(const _Ex* __ptr, true_type)
    {
      if (auto __ne_ptr = dynamic_cast<const nested_exception*>(__ptr))
 __ne_ptr->rethrow_nested();
    }


  inline void
  __rethrow_if_nested_impl(const void*, false_type)
  { }
# 203 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/nested_exception.h" 3
  template<typename _Ex>

    [[__gnu__::__always_inline__]]

    inline void
    rethrow_if_nested(const _Ex& __ex)
    {
      const _Ex* __ptr = __builtin_addressof(__ex);






      using __cast = __and_<is_polymorphic<_Ex>,
       is_base_of<nested_exception, _Ex>,
       is_convertible<_Ex*, nested_exception*>>;

      std::__rethrow_if_nested_impl(__ptr, __cast{});
# 235 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/nested_exception.h" 3
    }


}

}
# 166 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/exception" 2 3
# 35 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/ext/concurrence.h" 2 3





namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
{







  enum _Lock_policy { _S_single, _S_mutex, _S_atomic };



  const _Lock_policy __default_lock_policy =



  _S_atomic;






  class __concurrence_lock_error : public std::exception
  {
  public:
    virtual char const*
    what() const throw()
    { return "__gnu_cxx::__concurrence_lock_error"; }
  };

  class __concurrence_unlock_error : public std::exception
  {
  public:
    virtual char const*
    what() const throw()
    { return "__gnu_cxx::__concurrence_unlock_error"; }
  };

  class __concurrence_broadcast_error : public std::exception
  {
  public:
    virtual char const*
    what() const throw()
    { return "__gnu_cxx::__concurrence_broadcast_error"; }
  };

  class __concurrence_wait_error : public std::exception
  {
  public:
    virtual char const*
    what() const throw()
    { return "__gnu_cxx::__concurrence_wait_error"; }
  };


  inline void
  __throw_concurrence_lock_error()
  { (__builtin_abort()); }

  inline void
  __throw_concurrence_unlock_error()
  { (__builtin_abort()); }


  inline void
  __throw_concurrence_broadcast_error()
  { (__builtin_abort()); }

  inline void
  __throw_concurrence_wait_error()
  { (__builtin_abort()); }


  class __mutex
  {
  private:

    __gthread_mutex_t _M_mutex = { { 0, 0, 0, 0, PTHREAD_MUTEX_TIMED_NP, 0, { 0, 0 } } };




    __mutex(const __mutex&);
    __mutex& operator=(const __mutex&);

  public:
    __mutex()
    {




    }
# 144 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/ext/concurrence.h" 3
    void lock()
    {

      if (__gthread_active_p())
 {
   if (__gthread_mutex_lock(&_M_mutex) != 0)
     __throw_concurrence_lock_error();
 }

    }

    void unlock()
    {

      if (__gthread_active_p())
 {
   if (__gthread_mutex_unlock(&_M_mutex) != 0)
     __throw_concurrence_unlock_error();
 }

    }

    __gthread_mutex_t* gthread_mutex(void)
      { return &_M_mutex; }
  };

  class __recursive_mutex
  {
  private:

    __gthread_recursive_mutex_t _M_mutex = { { 0, 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP, 0, { 0, 0 } } };




    __recursive_mutex(const __recursive_mutex&);
    __recursive_mutex& operator=(const __recursive_mutex&);

  public:
    __recursive_mutex()
    {




    }
# 199 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/ext/concurrence.h" 3
    void lock()
    {

      if (__gthread_active_p())
 {
   if (__gthread_recursive_mutex_lock(&_M_mutex) != 0)
     __throw_concurrence_lock_error();
 }

    }

    void unlock()
    {

      if (__gthread_active_p())
 {
   if (__gthread_recursive_mutex_unlock(&_M_mutex) != 0)
     __throw_concurrence_unlock_error();
 }

    }

    __gthread_recursive_mutex_t* gthread_recursive_mutex(void)
    { return &_M_mutex; }
  };




  class __scoped_lock
  {
  public:
    typedef __mutex __mutex_type;

  private:
    __mutex_type& _M_device;

    __scoped_lock(const __scoped_lock&);
    __scoped_lock& operator=(const __scoped_lock&);

  public:
    explicit __scoped_lock(__mutex_type& __name) : _M_device(__name)
    { _M_device.lock(); }

    ~__scoped_lock() throw()
    { _M_device.unlock(); }
  };


  class __cond
  {
  private:

    __gthread_cond_t _M_cond = { { {0}, {0}, {0, 0}, {0, 0}, 0, 0, {0, 0} } };




    __cond(const __cond&);
    __cond& operator=(const __cond&);

  public:
    __cond()
    {




    }
# 277 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/ext/concurrence.h" 3
    void broadcast()
    {

      if (__gthread_active_p())
 {
   if (__gthread_cond_broadcast(&_M_cond) != 0)
     __throw_concurrence_broadcast_error();
 }

    }

    void wait(__mutex *mutex)
    {

      {
   if (__gthread_cond_wait(&_M_cond, mutex->gthread_mutex()) != 0)
     __throw_concurrence_wait_error();
      }

    }

    void wait_recursive(__recursive_mutex *mutex)
    {

      {
   if (__gthread_cond_wait_recursive(&_M_cond,
         mutex->gthread_recursive_mutex())
       != 0)
     __throw_concurrence_wait_error();
      }

    }
  };



}
# 63 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr_base.h" 2 3







namespace std __attribute__ ((__visibility__ ("default")))
{



 
# 75 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr_base.h" 3
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
  template<typename> class auto_ptr;
#pragma GCC diagnostic pop






  class bad_weak_ptr : public std::exception
  {
  public:
    virtual char const* what() const noexcept;

    virtual ~bad_weak_ptr() noexcept;
  };


  inline void
  __throw_bad_weak_ptr()
  { (__builtin_abort()); }

  using __gnu_cxx::_Lock_policy;
  using __gnu_cxx::__default_lock_policy;
  using __gnu_cxx::_S_single;
  using __gnu_cxx::_S_mutex;
  using __gnu_cxx::_S_atomic;


  template<_Lock_policy _Lp>
    class _Mutex_base
    {
    protected:

      enum { _S_need_barriers = 0 };
    };

  template<>
    class _Mutex_base<_S_mutex>
    : public __gnu_cxx::__mutex
    {
    protected:



      enum { _S_need_barriers = 1 };
    };

  template<_Lock_policy _Lp = __default_lock_policy>
    class _Sp_counted_base
    : public _Mutex_base<_Lp>
    {
    public:
      _Sp_counted_base() noexcept
      : _M_use_count(1), _M_weak_count(1) { }

      virtual
      ~_Sp_counted_base() noexcept
      { }



      virtual void
      _M_dispose() noexcept = 0;


      virtual void
      _M_destroy() noexcept
      { delete this; }

      virtual void*
      _M_get_deleter(const std::type_info&) noexcept = 0;


      void
      _M_add_ref_copy()
      { __gnu_cxx::__atomic_add_dispatch(&_M_use_count, 1); }


      void
      _M_add_ref_lock()
      {
 if (!_M_add_ref_lock_nothrow())
   __throw_bad_weak_ptr();
      }


      bool
      _M_add_ref_lock_nothrow() noexcept;


      void
      _M_release() noexcept;


      void
      _M_release_last_use() noexcept
      {
 ;
 _M_dispose();




 if (_Mutex_base<_Lp>::_S_need_barriers)
   {
     __atomic_thread_fence (4);
   }


 ;
 if (__gnu_cxx::__exchange_and_add_dispatch(&_M_weak_count,
         -1) == 1)
   {
     ;
     _M_destroy();
   }
      }


      __attribute__((__noinline__))
      void
      _M_release_last_use_cold() noexcept
      { _M_release_last_use(); }


      void
      _M_weak_add_ref() noexcept
      { __gnu_cxx::__atomic_add_dispatch(&_M_weak_count, 1); }


      void
      _M_weak_release() noexcept
      {

        ;
 if (__gnu_cxx::__exchange_and_add_dispatch(&_M_weak_count, -1) == 1)
   {
            ;
     if (_Mutex_base<_Lp>::_S_need_barriers)
       {


  __atomic_thread_fence (4);
       }
     _M_destroy();
   }
      }

      long
      _M_get_use_count() const noexcept
      {


        return __atomic_load_n(&_M_use_count, 0);
      }

    private:
      _Sp_counted_base(_Sp_counted_base const&) = delete;
      _Sp_counted_base& operator=(_Sp_counted_base const&) = delete;

      _Atomic_word _M_use_count;
      _Atomic_word _M_weak_count;
    };

  template<>
    inline bool
    _Sp_counted_base<_S_single>::
    _M_add_ref_lock_nothrow() noexcept
    {
      if (_M_use_count == 0)
 return false;
      ++_M_use_count;
      return true;
    }

  template<>
    inline bool
    _Sp_counted_base<_S_mutex>::
    _M_add_ref_lock_nothrow() noexcept
    {
      __gnu_cxx::__scoped_lock sentry(*this);
      if (__gnu_cxx::__exchange_and_add_dispatch(&_M_use_count, 1) == 0)
 {
   _M_use_count = 0;
   return false;
 }
      return true;
    }

  template<>
    inline bool
    _Sp_counted_base<_S_atomic>::
    _M_add_ref_lock_nothrow() noexcept
    {

      _Atomic_word __count = _M_get_use_count();
      do
 {
   if (__count == 0)
     return false;


 }
      while (!__atomic_compare_exchange_n(&_M_use_count, &__count, __count + 1,
       true, 4,
       0));
      return true;
    }

  template<>
    inline void
    _Sp_counted_base<_S_single>::_M_add_ref_copy()
    { ++_M_use_count; }

  template<>
    inline void
    _Sp_counted_base<_S_single>::_M_release() noexcept
    {
      if (--_M_use_count == 0)
        {
          _M_dispose();
          if (--_M_weak_count == 0)
            _M_destroy();
        }
    }

  template<>
    inline void
    _Sp_counted_base<_S_mutex>::_M_release() noexcept
    {

      ;
      if (__gnu_cxx::__exchange_and_add_dispatch(&_M_use_count, -1) == 1)
 {
   _M_release_last_use();
 }
    }

  template<>
    inline void
    _Sp_counted_base<_S_atomic>::_M_release() noexcept
    {
      ;

      constexpr bool __lock_free
 = __atomic_always_lock_free(sizeof(long long), 0)
 && __atomic_always_lock_free(sizeof(_Atomic_word), 0);
      constexpr bool __double_word
 = sizeof(long long) == 2 * sizeof(_Atomic_word);


      constexpr bool __aligned = __alignof(long long) <= alignof(void*);
      if (__lock_free && __double_word && __aligned)
 {
   constexpr int __wordbits = 8 * sizeof(_Atomic_word);
   constexpr int __shiftbits = __double_word ? __wordbits : 0;
   constexpr long long __unique_ref = 1LL + (1LL << __shiftbits);
   auto __both_counts = reinterpret_cast<long long*>(&_M_use_count);

   ;
   if (__atomic_load_n(__both_counts, 2) == __unique_ref)
     {




       _M_weak_count = _M_use_count = 0;
       ;
       ;
       _M_dispose();
       _M_destroy();
       return;
     }
   if (__gnu_cxx::__exchange_and_add_dispatch(&_M_use_count, -1) == 1)
     [[__unlikely__]]
     {
       _M_release_last_use_cold();
       return;
     }
 }
      else

      if (__gnu_cxx::__exchange_and_add_dispatch(&_M_use_count, -1) == 1)
 {
   _M_release_last_use();
 }
    }

  template<>
    inline void
    _Sp_counted_base<_S_single>::_M_weak_add_ref() noexcept
    { ++_M_weak_count; }

  template<>
    inline void
    _Sp_counted_base<_S_single>::_M_weak_release() noexcept
    {
      if (--_M_weak_count == 0)
        _M_destroy();
    }

  template<>
    inline long
    _Sp_counted_base<_S_single>::_M_get_use_count() const noexcept
    { return _M_use_count; }



  template<typename _Tp, _Lock_policy _Lp = __default_lock_policy>
    class __shared_ptr;

  template<typename _Tp, _Lock_policy _Lp = __default_lock_policy>
    class __weak_ptr;

  template<typename _Tp, _Lock_policy _Lp = __default_lock_policy>
    class __enable_shared_from_this;

  template<typename _Tp>
    class shared_ptr;

  template<typename _Tp>
    class weak_ptr;

  template<typename _Tp>
    struct owner_less;

  template<typename _Tp>
    class enable_shared_from_this;

  template<_Lock_policy _Lp = __default_lock_policy>
    class __weak_count;

  template<_Lock_policy _Lp = __default_lock_policy>
    class __shared_count;







  template<typename _Ptr, _Lock_policy _Lp>
    class _Sp_counted_ptr final : public _Sp_counted_base<_Lp>
    {
    public:
      explicit
      _Sp_counted_ptr(_Ptr __p) noexcept
      : _M_ptr(__p) { }

      virtual void
      _M_dispose() noexcept
      { delete _M_ptr; }

      virtual void
      _M_destroy() noexcept
      { delete this; }

      virtual void*
      _M_get_deleter(const std::type_info&) noexcept
      { return nullptr; }

      _Sp_counted_ptr(const _Sp_counted_ptr&) = delete;
      _Sp_counted_ptr& operator=(const _Sp_counted_ptr&) = delete;

    private:
      _Ptr _M_ptr;
    };

  template<>
    inline void
    _Sp_counted_ptr<nullptr_t, _S_single>::_M_dispose() noexcept { }

  template<>
    inline void
    _Sp_counted_ptr<nullptr_t, _S_mutex>::_M_dispose() noexcept { }

  template<>
    inline void
    _Sp_counted_ptr<nullptr_t, _S_atomic>::_M_dispose() noexcept { }






  template<int _Nm, typename _Tp,
    bool __use_ebo = !__is_final(_Tp) && __is_empty(_Tp)>
    struct _Sp_ebo_helper;


  template<int _Nm, typename _Tp>
    struct _Sp_ebo_helper<_Nm, _Tp, true> : private _Tp
    {
      explicit _Sp_ebo_helper(const _Tp& __tp) : _Tp(__tp) { }
      explicit _Sp_ebo_helper(_Tp&& __tp) : _Tp(std::move(__tp)) { }

      static _Tp&
      _S_get(_Sp_ebo_helper& __eboh) { return static_cast<_Tp&>(__eboh); }
    };


  template<int _Nm, typename _Tp>
    struct _Sp_ebo_helper<_Nm, _Tp, false>
    {
      explicit _Sp_ebo_helper(const _Tp& __tp) : _M_tp(__tp) { }
      explicit _Sp_ebo_helper(_Tp&& __tp) : _M_tp(std::move(__tp)) { }

      static _Tp&
      _S_get(_Sp_ebo_helper& __eboh)
      { return __eboh._M_tp; }

    private:
      _Tp _M_tp;
    };


  template<typename _Ptr, typename _Deleter, typename _Alloc, _Lock_policy _Lp>
    class _Sp_counted_deleter final : public _Sp_counted_base<_Lp>
    {
      class _Impl : _Sp_ebo_helper<0, _Deleter>, _Sp_ebo_helper<1, _Alloc>
      {
 typedef _Sp_ebo_helper<0, _Deleter> _Del_base;
 typedef _Sp_ebo_helper<1, _Alloc> _Alloc_base;

      public:
 _Impl(_Ptr __p, _Deleter __d, const _Alloc& __a) noexcept
 : _Del_base(std::move(__d)), _Alloc_base(__a), _M_ptr(__p)
 { }

 _Deleter& _M_del() noexcept { return _Del_base::_S_get(*this); }
 _Alloc& _M_alloc() noexcept { return _Alloc_base::_S_get(*this); }

 _Ptr _M_ptr;
      };

    public:
      using __allocator_type = __alloc_rebind<_Alloc, _Sp_counted_deleter>;


      _Sp_counted_deleter(_Ptr __p, _Deleter __d) noexcept
      : _M_impl(__p, std::move(__d), _Alloc()) { }


      _Sp_counted_deleter(_Ptr __p, _Deleter __d, const _Alloc& __a) noexcept
      : _M_impl(__p, std::move(__d), __a) { }

      ~_Sp_counted_deleter() noexcept { }

      virtual void
      _M_dispose() noexcept
      { _M_impl._M_del()(_M_impl._M_ptr); }

      virtual void
      _M_destroy() noexcept
      {
 __allocator_type __a(_M_impl._M_alloc());
 __allocated_ptr<__allocator_type> __guard_ptr{ __a, this };
 this->~_Sp_counted_deleter();
      }

      virtual void*
      _M_get_deleter(const type_info& __ti [[__gnu__::__unused__]]) noexcept
      {







        return nullptr;

      }

    private:
      _Impl _M_impl;
    };



  struct _Sp_make_shared_tag
  {
  private:
    template<typename _Tp, typename _Alloc, _Lock_policy _Lp>
      friend class _Sp_counted_ptr_inplace;

    static const type_info&
    _S_ti() noexcept __attribute__ ((__visibility__ ("default")))
    {
      alignas(type_info) static constexpr char __tag[sizeof(type_info)] = { };
      return reinterpret_cast<const type_info&>(__tag);
    }

    static bool _S_eq(const type_info&) noexcept;
  };

  template<typename _Alloc>
    struct _Sp_alloc_shared_tag
    {
      const _Alloc& _M_a;
    };

  template<typename _Tp, typename _Alloc, _Lock_policy _Lp>
    class _Sp_counted_ptr_inplace final : public _Sp_counted_base<_Lp>
    {
      class _Impl : _Sp_ebo_helper<0, _Alloc>
      {
 typedef _Sp_ebo_helper<0, _Alloc> _A_base;

      public:
 explicit _Impl(_Alloc __a) noexcept : _A_base(__a) { }

 _Alloc& _M_alloc() noexcept { return _A_base::_S_get(*this); }

 __gnu_cxx::__aligned_buffer<_Tp> _M_storage;
      };

    public:
      using __allocator_type = __alloc_rebind<_Alloc, _Sp_counted_ptr_inplace>;


      template<typename... _Args>
 _Sp_counted_ptr_inplace(_Alloc __a, _Args&&... __args)
 : _M_impl(__a)
 {


   allocator_traits<_Alloc>::construct(__a, _M_ptr(),
       std::forward<_Args>(__args)...);
 }

      ~_Sp_counted_ptr_inplace() noexcept { }

      virtual void
      _M_dispose() noexcept
      {
 allocator_traits<_Alloc>::destroy(_M_impl._M_alloc(), _M_ptr());
      }


      virtual void
      _M_destroy() noexcept
      {
 __allocator_type __a(_M_impl._M_alloc());
 __allocated_ptr<__allocator_type> __guard_ptr{ __a, this };
 this->~_Sp_counted_ptr_inplace();
      }

    private:
      friend class __shared_count<_Lp>;



      virtual void*
      _M_get_deleter(const std::type_info& __ti) noexcept override
      {
 auto __ptr = const_cast<typename remove_cv<_Tp>::type*>(_M_ptr());




 if (&__ti == &_Sp_make_shared_tag::_S_ti()
     ||



     _Sp_make_shared_tag::_S_eq(__ti)

    )
   return __ptr;
 return nullptr;
      }

      _Tp* _M_ptr() noexcept { return _M_impl._M_storage._M_ptr(); }

      _Impl _M_impl;
    };
# 718 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr_base.h" 3
#define __cpp_lib_shared_ptr_arrays 201611L
# 886 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr_base.h" 3
  struct __sp_array_delete
  {
    template<typename _Yp>
      void operator()(_Yp* __p) const { delete[] __p; }
  };

  template<_Lock_policy _Lp>
    class __shared_count
    {

      template<typename _Tp>
 struct __not_alloc_shared_tag { using type = void; };

      template<typename _Tp>
 struct __not_alloc_shared_tag<_Sp_alloc_shared_tag<_Tp>> { };






    public:
      constexpr __shared_count() noexcept : _M_pi(0)
      { }

      template<typename _Ptr>
        explicit
 __shared_count(_Ptr __p) : _M_pi(0)
 {
   if (true)
     {
       _M_pi = new _Sp_counted_ptr<_Ptr, _Lp>(__p);
     }
   if (false)
     {
       delete __p;
       ;
     }
 }

      template<typename _Ptr>
 __shared_count(_Ptr __p, false_type)
 : __shared_count(__p)
 { }

      template<typename _Ptr>
 __shared_count(_Ptr __p, true_type)
 : __shared_count(__p, __sp_array_delete{}, allocator<void>())
 { }

      template<typename _Ptr, typename _Deleter,
        typename = typename __not_alloc_shared_tag<_Deleter>::type>
 __shared_count(_Ptr __p, _Deleter __d)
 : __shared_count(__p, std::move(__d), allocator<void>())
 { }

      template<typename _Ptr, typename _Deleter, typename _Alloc,
        typename = typename __not_alloc_shared_tag<_Deleter>::type>
 __shared_count(_Ptr __p, _Deleter __d, _Alloc __a) : _M_pi(0)
 {
   typedef _Sp_counted_deleter<_Ptr, _Deleter, _Alloc, _Lp> _Sp_cd_type;
   if (true)
     {
       typename _Sp_cd_type::__allocator_type __a2(__a);
       auto __guard = std::__allocate_guarded(__a2);
       _Sp_cd_type* __mem = __guard.get();
       ::new (__mem) _Sp_cd_type(__p, std::move(__d), std::move(__a));
       _M_pi = __mem;
       __guard = nullptr;
     }
   if (false)
     {
       __d(__p);
       ;
     }
 }

      template<typename _Tp, typename _Alloc, typename... _Args>
 __shared_count(_Tp*& __p, _Sp_alloc_shared_tag<_Alloc> __a,
         _Args&&... __args)
 {
   typedef _Sp_counted_ptr_inplace<_Tp, _Alloc, _Lp> _Sp_cp_type;
   typename _Sp_cp_type::__allocator_type __a2(__a._M_a);
   auto __guard = std::__allocate_guarded(__a2);
   _Sp_cp_type* __mem = __guard.get();
   auto __pi = ::new (__mem)
     _Sp_cp_type(__a._M_a, std::forward<_Args>(__args)...);
   __guard = nullptr;
   _M_pi = __pi;
   __p = __pi->_M_ptr();
 }
# 1024 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr_base.h" 3
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"

      template<typename _Tp>
        explicit
 __shared_count(std::auto_ptr<_Tp>&& __r);
#pragma GCC diagnostic pop



      template<typename _Tp, typename _Del>
        explicit
 __shared_count(std::unique_ptr<_Tp, _Del>&& __r) : _M_pi(0)
 {


   if (__r.get() == nullptr)
     return;

   using _Ptr = typename unique_ptr<_Tp, _Del>::pointer;
   using _Del2 = __conditional_t<is_reference<_Del>::value,
       reference_wrapper<typename remove_reference<_Del>::type>,
       _Del>;
   using _Sp_cd_type
     = _Sp_counted_deleter<_Ptr, _Del2, allocator<void>, _Lp>;
   using _Alloc = allocator<_Sp_cd_type>;
   using _Alloc_traits = allocator_traits<_Alloc>;
   _Alloc __a;
   _Sp_cd_type* __mem = _Alloc_traits::allocate(__a, 1);



   _Alloc_traits::construct(__a, __mem, __r.release(),
       std::forward<_Del>(__r.get_deleter()));
   _M_pi = __mem;
 }


      explicit __shared_count(const __weak_count<_Lp>& __r);


      explicit
      __shared_count(const __weak_count<_Lp>& __r, std::nothrow_t) noexcept;

      ~__shared_count() noexcept
      {
 if (_M_pi != nullptr)
   _M_pi->_M_release();
      }

      __shared_count(const __shared_count& __r) noexcept
      : _M_pi(__r._M_pi)
      {
 if (_M_pi != nullptr)
   _M_pi->_M_add_ref_copy();
      }

      __shared_count&
      operator=(const __shared_count& __r) noexcept
      {
 _Sp_counted_base<_Lp>* __tmp = __r._M_pi;
 if (__tmp != _M_pi)
   {
     if (__tmp != nullptr)
       __tmp->_M_add_ref_copy();
     if (_M_pi != nullptr)
       _M_pi->_M_release();
     _M_pi = __tmp;
   }
 return *this;
      }

      void
      _M_swap(__shared_count& __r) noexcept
      {
 _Sp_counted_base<_Lp>* __tmp = __r._M_pi;
 __r._M_pi = _M_pi;
 _M_pi = __tmp;
      }

      long
      _M_get_use_count() const noexcept
      { return _M_pi ? _M_pi->_M_get_use_count() : 0; }

      bool
      _M_unique() const noexcept
      { return this->_M_get_use_count() == 1; }

      void*
      _M_get_deleter(const std::type_info& __ti) const noexcept
      { return _M_pi ? _M_pi->_M_get_deleter(__ti) : nullptr; }

      bool
      _M_less(const __shared_count& __rhs) const noexcept
      { return std::less<_Sp_counted_base<_Lp>*>()(this->_M_pi, __rhs._M_pi); }

      bool
      _M_less(const __weak_count<_Lp>& __rhs) const noexcept
      { return std::less<_Sp_counted_base<_Lp>*>()(this->_M_pi, __rhs._M_pi); }


      friend inline bool
      operator==(const __shared_count& __a, const __shared_count& __b) noexcept
      { return __a._M_pi == __b._M_pi; }

    private:
      friend class __weak_count<_Lp>;




      _Sp_counted_base<_Lp>* _M_pi;
    };


  template<_Lock_policy _Lp>
    class __weak_count
    {
    public:
      constexpr __weak_count() noexcept : _M_pi(nullptr)
      { }

      __weak_count(const __shared_count<_Lp>& __r) noexcept
      : _M_pi(__r._M_pi)
      {
 if (_M_pi != nullptr)
   _M_pi->_M_weak_add_ref();
      }

      __weak_count(const __weak_count& __r) noexcept
      : _M_pi(__r._M_pi)
      {
 if (_M_pi != nullptr)
   _M_pi->_M_weak_add_ref();
      }

      __weak_count(__weak_count&& __r) noexcept
      : _M_pi(__r._M_pi)
      { __r._M_pi = nullptr; }

      ~__weak_count() noexcept
      {
 if (_M_pi != nullptr)
   _M_pi->_M_weak_release();
      }

      __weak_count&
      operator=(const __shared_count<_Lp>& __r) noexcept
      {
 _Sp_counted_base<_Lp>* __tmp = __r._M_pi;
 if (__tmp != nullptr)
   __tmp->_M_weak_add_ref();
 if (_M_pi != nullptr)
   _M_pi->_M_weak_release();
 _M_pi = __tmp;
 return *this;
      }

      __weak_count&
      operator=(const __weak_count& __r) noexcept
      {
 _Sp_counted_base<_Lp>* __tmp = __r._M_pi;
 if (__tmp != nullptr)
   __tmp->_M_weak_add_ref();
 if (_M_pi != nullptr)
   _M_pi->_M_weak_release();
 _M_pi = __tmp;
 return *this;
      }

      __weak_count&
      operator=(__weak_count&& __r) noexcept
      {
 if (_M_pi != nullptr)
   _M_pi->_M_weak_release();
 _M_pi = __r._M_pi;
        __r._M_pi = nullptr;
 return *this;
      }

      void
      _M_swap(__weak_count& __r) noexcept
      {
 _Sp_counted_base<_Lp>* __tmp = __r._M_pi;
 __r._M_pi = _M_pi;
 _M_pi = __tmp;
      }

      long
      _M_get_use_count() const noexcept
      { return _M_pi != nullptr ? _M_pi->_M_get_use_count() : 0; }

      bool
      _M_less(const __weak_count& __rhs) const noexcept
      { return std::less<_Sp_counted_base<_Lp>*>()(this->_M_pi, __rhs._M_pi); }

      bool
      _M_less(const __shared_count<_Lp>& __rhs) const noexcept
      { return std::less<_Sp_counted_base<_Lp>*>()(this->_M_pi, __rhs._M_pi); }


      friend inline bool
      operator==(const __weak_count& __a, const __weak_count& __b) noexcept
      { return __a._M_pi == __b._M_pi; }

    private:
      friend class __shared_count<_Lp>;




      _Sp_counted_base<_Lp>* _M_pi;
    };


  template<_Lock_policy _Lp>
    inline
    __shared_count<_Lp>::__shared_count(const __weak_count<_Lp>& __r)
    : _M_pi(__r._M_pi)
    {
      if (_M_pi == nullptr || !_M_pi->_M_add_ref_lock_nothrow())
 __throw_bad_weak_ptr();
    }


  template<_Lock_policy _Lp>
    inline
    __shared_count<_Lp>::
    __shared_count(const __weak_count<_Lp>& __r, std::nothrow_t) noexcept
    : _M_pi(__r._M_pi)
    {
      if (_M_pi && !_M_pi->_M_add_ref_lock_nothrow())
 _M_pi = nullptr;
    }





  template<typename _Yp_ptr, typename _Tp_ptr>
    struct __sp_compatible_with
    : false_type
    { };

  template<typename _Yp, typename _Tp>
    struct __sp_compatible_with<_Yp*, _Tp*>
    : is_convertible<_Yp*, _Tp*>::type
    { };

  template<typename _Up, size_t _Nm>
    struct __sp_compatible_with<_Up(*)[_Nm], _Up(*)[]>
    : true_type
    { };

  template<typename _Up, size_t _Nm>
    struct __sp_compatible_with<_Up(*)[_Nm], const _Up(*)[]>
    : true_type
    { };

  template<typename _Up, size_t _Nm>
    struct __sp_compatible_with<_Up(*)[_Nm], volatile _Up(*)[]>
    : true_type
    { };

  template<typename _Up, size_t _Nm>
    struct __sp_compatible_with<_Up(*)[_Nm], const volatile _Up(*)[]>
    : true_type
    { };


  template<typename _Up, size_t _Nm, typename _Yp, typename = void>
    struct __sp_is_constructible_arrN
    : false_type
    { };

  template<typename _Up, size_t _Nm, typename _Yp>
    struct __sp_is_constructible_arrN<_Up, _Nm, _Yp, __void_t<_Yp[_Nm]>>
    : is_convertible<_Yp(*)[_Nm], _Up(*)[_Nm]>::type
    { };


  template<typename _Up, typename _Yp, typename = void>
    struct __sp_is_constructible_arr
    : false_type
    { };

  template<typename _Up, typename _Yp>
    struct __sp_is_constructible_arr<_Up, _Yp, __void_t<_Yp[]>>
    : is_convertible<_Yp(*)[], _Up(*)[]>::type
    { };


  template<typename _Tp, typename _Yp>
    struct __sp_is_constructible;


  template<typename _Up, size_t _Nm, typename _Yp>
    struct __sp_is_constructible<_Up[_Nm], _Yp>
    : __sp_is_constructible_arrN<_Up, _Nm, _Yp>::type
    { };


  template<typename _Up, typename _Yp>
    struct __sp_is_constructible<_Up[], _Yp>
    : __sp_is_constructible_arr<_Up, _Yp>::type
    { };


  template<typename _Tp, typename _Yp>
    struct __sp_is_constructible
    : is_convertible<_Yp*, _Tp*>::type
    { };



  template<typename _Tp, _Lock_policy _Lp,
    bool = is_array<_Tp>::value, bool = is_void<_Tp>::value>
    class __shared_ptr_access
    {
    public:
      using element_type = _Tp;

      element_type&
      operator*() const noexcept
      {
 do { if (std::__is_constant_evaluated() && !bool(_M_get() != nullptr)) __builtin_unreachable(); } while (false);
 return *_M_get();
      }

      element_type*
      operator->() const noexcept
      {
 ;
 return _M_get();
      }

    private:
      element_type*
      _M_get() const noexcept
      { return static_cast<const __shared_ptr<_Tp, _Lp>*>(this)->get(); }
    };


  template<typename _Tp, _Lock_policy _Lp>
    class __shared_ptr_access<_Tp, _Lp, false, true>
    {
    public:
      using element_type = _Tp;

      element_type*
      operator->() const noexcept
      {
 auto __ptr = static_cast<const __shared_ptr<_Tp, _Lp>*>(this)->get();
 ;
 return __ptr;
      }
    };


  template<typename _Tp, _Lock_policy _Lp>
    class __shared_ptr_access<_Tp, _Lp, true, false>
    {
    public:
      using element_type = typename remove_extent<_Tp>::type;


      [[__deprecated__("shared_ptr<T[]>::operator* is absent from C++17")]]
      element_type&
      operator*() const noexcept
      {
 do { if (std::__is_constant_evaluated() && !bool(_M_get() != nullptr)) __builtin_unreachable(); } while (false);
 return *_M_get();
      }

      [[__deprecated__("shared_ptr<T[]>::operator-> is absent from C++17")]]
      element_type*
      operator->() const noexcept
      {
 ;
 return _M_get();
      }


      element_type&
      operator[](ptrdiff_t __i) const noexcept
      {
 do { if (std::__is_constant_evaluated() && !bool(_M_get() != nullptr)) __builtin_unreachable(); } while (false);
 do { if (std::__is_constant_evaluated() && !bool(!extent<_Tp>::value || __i < extent<_Tp>::value)) __builtin_unreachable(); } while (false);
 return _M_get()[__i];
      }

    private:
      element_type*
      _M_get() const noexcept
      { return static_cast<const __shared_ptr<_Tp, _Lp>*>(this)->get(); }
    };

  template<typename _Tp, _Lock_policy _Lp>
    class __shared_ptr
    : public __shared_ptr_access<_Tp, _Lp>
    {
    public:
      using element_type = typename remove_extent<_Tp>::type;

    private:

      template<typename _Yp>
 using _SafeConv
   = typename enable_if<__sp_is_constructible<_Tp, _Yp>::value>::type;


      template<typename _Yp, typename _Res = void>
 using _Compatible = typename
   enable_if<__sp_compatible_with<_Yp*, _Tp*>::value, _Res>::type;


      template<typename _Yp>
 using _Assignable = _Compatible<_Yp, __shared_ptr&>;


      template<typename _Yp, typename _Del, typename _Res = void,
        typename _Ptr = typename unique_ptr<_Yp, _Del>::pointer>
 using _UniqCompatible = __enable_if_t<__and_<
   __sp_compatible_with<_Yp*, _Tp*>,
   is_convertible<_Ptr, element_type*>,
   is_move_constructible<_Del>
   >::value, _Res>;


      template<typename _Yp, typename _Del>
 using _UniqAssignable = _UniqCompatible<_Yp, _Del, __shared_ptr&>;

    public:





      constexpr __shared_ptr() noexcept
      : _M_ptr(0), _M_refcount()
      { }

      template<typename _Yp, typename = _SafeConv<_Yp>>
 explicit
 __shared_ptr(_Yp* __p)
 : _M_ptr(__p), _M_refcount(__p, typename is_array<_Tp>::type())
 {
   static_assert( !is_void<_Yp>::value, "incomplete type" );
   static_assert( sizeof(_Yp) > 0, "incomplete type" );
   _M_enable_shared_from_this_with(__p);
 }

      template<typename _Yp, typename _Deleter, typename = _SafeConv<_Yp>>
 __shared_ptr(_Yp* __p, _Deleter __d)
 : _M_ptr(__p), _M_refcount(__p, std::move(__d))
 {
   static_assert(__is_invocable<_Deleter&, _Yp*&>::value,
       "deleter expression d(p) is well-formed");
   _M_enable_shared_from_this_with(__p);
 }

      template<typename _Yp, typename _Deleter, typename _Alloc,
        typename = _SafeConv<_Yp>>
 __shared_ptr(_Yp* __p, _Deleter __d, _Alloc __a)
 : _M_ptr(__p), _M_refcount(__p, std::move(__d), std::move(__a))
 {
   static_assert(__is_invocable<_Deleter&, _Yp*&>::value,
       "deleter expression d(p) is well-formed");
   _M_enable_shared_from_this_with(__p);
 }

      template<typename _Deleter>
 __shared_ptr(nullptr_t __p, _Deleter __d)
 : _M_ptr(0), _M_refcount(__p, std::move(__d))
 { }

      template<typename _Deleter, typename _Alloc>
        __shared_ptr(nullptr_t __p, _Deleter __d, _Alloc __a)
 : _M_ptr(0), _M_refcount(__p, std::move(__d), std::move(__a))
 { }


      template<typename _Yp>
 __shared_ptr(const __shared_ptr<_Yp, _Lp>& __r,
       element_type* __p) noexcept
 : _M_ptr(__p), _M_refcount(__r._M_refcount)
 { }


      template<typename _Yp>
 __shared_ptr(__shared_ptr<_Yp, _Lp>&& __r,
       element_type* __p) noexcept
 : _M_ptr(__p), _M_refcount()
 {
   _M_refcount._M_swap(__r._M_refcount);
   __r._M_ptr = nullptr;
 }

      __shared_ptr(const __shared_ptr&) noexcept = default;
      __shared_ptr& operator=(const __shared_ptr&) noexcept = default;
      ~__shared_ptr() = default;

      template<typename _Yp, typename = _Compatible<_Yp>>
 __shared_ptr(const __shared_ptr<_Yp, _Lp>& __r) noexcept
 : _M_ptr(__r._M_ptr), _M_refcount(__r._M_refcount)
 { }

      __shared_ptr(__shared_ptr&& __r) noexcept
      : _M_ptr(__r._M_ptr), _M_refcount()
      {
 _M_refcount._M_swap(__r._M_refcount);
 __r._M_ptr = nullptr;
      }

      template<typename _Yp, typename = _Compatible<_Yp>>
 __shared_ptr(__shared_ptr<_Yp, _Lp>&& __r) noexcept
 : _M_ptr(__r._M_ptr), _M_refcount()
 {
   _M_refcount._M_swap(__r._M_refcount);
   __r._M_ptr = nullptr;
 }

      template<typename _Yp, typename = _Compatible<_Yp>>
 explicit __shared_ptr(const __weak_ptr<_Yp, _Lp>& __r)
 : _M_refcount(__r._M_refcount)
 {


   _M_ptr = __r._M_ptr;
 }


      template<typename _Yp, typename _Del,
        typename = _UniqCompatible<_Yp, _Del>>
 __shared_ptr(unique_ptr<_Yp, _Del>&& __r)
 : _M_ptr(__r.get()), _M_refcount()
 {
   auto __raw = __to_address(__r.get());
   _M_refcount = __shared_count<_Lp>(std::move(__r));
   _M_enable_shared_from_this_with(__raw);
 }


    protected:

      template<typename _Tp1, typename _Del,
        typename enable_if<__and_<
   __not_<is_array<_Tp>>, is_array<_Tp1>,
          is_convertible<typename unique_ptr<_Tp1, _Del>::pointer, _Tp*>
        >::value, bool>::type = true>
 __shared_ptr(unique_ptr<_Tp1, _Del>&& __r, __sp_array_delete)
 : _M_ptr(__r.get()), _M_refcount()
 {
   auto __raw = __to_address(__r.get());
   _M_refcount = __shared_count<_Lp>(std::move(__r));
   _M_enable_shared_from_this_with(__raw);
 }
    public:



#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"

      template<typename _Yp, typename = _Compatible<_Yp>>
 __shared_ptr(auto_ptr<_Yp>&& __r);
#pragma GCC diagnostic pop


      constexpr __shared_ptr(nullptr_t) noexcept : __shared_ptr() { }

      template<typename _Yp>
 _Assignable<_Yp>
 operator=(const __shared_ptr<_Yp, _Lp>& __r) noexcept
 {
   _M_ptr = __r._M_ptr;
   _M_refcount = __r._M_refcount;
   return *this;
 }


#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
      template<typename _Yp>
 _Assignable<_Yp>
 operator=(auto_ptr<_Yp>&& __r)
 {
   __shared_ptr(std::move(__r)).swap(*this);
   return *this;
 }
#pragma GCC diagnostic pop


      __shared_ptr&
      operator=(__shared_ptr&& __r) noexcept
      {
 __shared_ptr(std::move(__r)).swap(*this);
 return *this;
      }

      template<class _Yp>
 _Assignable<_Yp>
 operator=(__shared_ptr<_Yp, _Lp>&& __r) noexcept
 {
   __shared_ptr(std::move(__r)).swap(*this);
   return *this;
 }

      template<typename _Yp, typename _Del>
 _UniqAssignable<_Yp, _Del>
 operator=(unique_ptr<_Yp, _Del>&& __r)
 {
   __shared_ptr(std::move(__r)).swap(*this);
   return *this;
 }

      void
      reset() noexcept
      { __shared_ptr().swap(*this); }

      template<typename _Yp>
 _SafeConv<_Yp>
 reset(_Yp* __p)
 {

   do { if (std::__is_constant_evaluated() && !bool(__p == nullptr || __p != _M_ptr)) __builtin_unreachable(); } while (false);
   __shared_ptr(__p).swap(*this);
 }

      template<typename _Yp, typename _Deleter>
 _SafeConv<_Yp>
 reset(_Yp* __p, _Deleter __d)
 { __shared_ptr(__p, std::move(__d)).swap(*this); }

      template<typename _Yp, typename _Deleter, typename _Alloc>
 _SafeConv<_Yp>
 reset(_Yp* __p, _Deleter __d, _Alloc __a)
        { __shared_ptr(__p, std::move(__d), std::move(__a)).swap(*this); }


      element_type*
      get() const noexcept
      { return _M_ptr; }


      explicit operator bool() const noexcept
      { return _M_ptr != nullptr; }


      bool
      unique() const noexcept
      { return _M_refcount._M_unique(); }


      long
      use_count() const noexcept
      { return _M_refcount._M_get_use_count(); }


      void
      swap(__shared_ptr<_Tp, _Lp>& __other) noexcept
      {
 std::swap(_M_ptr, __other._M_ptr);
 _M_refcount._M_swap(__other._M_refcount);
      }
# 1697 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr_base.h" 3
      template<typename _Tp1>
 bool
 owner_before(__shared_ptr<_Tp1, _Lp> const& __rhs) const noexcept
 { return _M_refcount._M_less(__rhs._M_refcount); }

      template<typename _Tp1>
 bool
 owner_before(__weak_ptr<_Tp1, _Lp> const& __rhs) const noexcept
 { return _M_refcount._M_less(__rhs._M_refcount); }


    protected:

      template<typename _Alloc, typename... _Args>
 __shared_ptr(_Sp_alloc_shared_tag<_Alloc> __tag, _Args&&... __args)
 : _M_ptr(), _M_refcount(_M_ptr, __tag, std::forward<_Args>(__args)...)
 { _M_enable_shared_from_this_with(_M_ptr); }

      template<typename _Tp1, _Lock_policy _Lp1, typename _Alloc,
        typename... _Args>
 friend __shared_ptr<_Tp1, _Lp1>
 __allocate_shared(const _Alloc& __a, _Args&&... __args);
# 1731 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr_base.h" 3
      __shared_ptr(const __weak_ptr<_Tp, _Lp>& __r, std::nothrow_t) noexcept
      : _M_refcount(__r._M_refcount, std::nothrow)
      {
 _M_ptr = _M_refcount._M_get_use_count() ? __r._M_ptr : nullptr;
      }

      friend class __weak_ptr<_Tp, _Lp>;

    private:

      template<typename _Yp>
 using __esft_base_t = decltype(__enable_shared_from_this_base(
       std::declval<const __shared_count<_Lp>&>(),
       std::declval<_Yp*>()));


      template<typename _Yp, typename = void>
 struct __has_esft_base
 : false_type { };

      template<typename _Yp>
 struct __has_esft_base<_Yp, __void_t<__esft_base_t<_Yp>>>
 : __not_<is_array<_Tp>> { };

      template<typename _Yp, typename _Yp2 = typename remove_cv<_Yp>::type>
 typename enable_if<__has_esft_base<_Yp2>::value>::type
 _M_enable_shared_from_this_with(_Yp* __p) noexcept
 {
   if (auto __base = __enable_shared_from_this_base(_M_refcount, __p))
     __base->_M_weak_assign(const_cast<_Yp2*>(__p), _M_refcount);
 }

      template<typename _Yp, typename _Yp2 = typename remove_cv<_Yp>::type>
 typename enable_if<!__has_esft_base<_Yp2>::value>::type
 _M_enable_shared_from_this_with(_Yp*) noexcept
 { }

      void*
      _M_get_deleter(const std::type_info& __ti) const noexcept
      { return _M_refcount._M_get_deleter(__ti); }

      template<typename _Tp1, _Lock_policy _Lp1> friend class __shared_ptr;
      template<typename _Tp1, _Lock_policy _Lp1> friend class __weak_ptr;

      template<typename _Del, typename _Tp1, _Lock_policy _Lp1>
 friend _Del* get_deleter(const __shared_ptr<_Tp1, _Lp1>&) noexcept;

      template<typename _Del, typename _Tp1>
 friend _Del* get_deleter(const shared_ptr<_Tp1>&) noexcept;





      element_type* _M_ptr;
      __shared_count<_Lp> _M_refcount;
    };



  template<typename _Tp1, typename _Tp2, _Lock_policy _Lp>
    inline bool
    operator==(const __shared_ptr<_Tp1, _Lp>& __a,
        const __shared_ptr<_Tp2, _Lp>& __b) noexcept
    { return __a.get() == __b.get(); }

  template<typename _Tp, _Lock_policy _Lp>
    inline bool
    operator==(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept
    { return !__a; }
# 1817 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr_base.h" 3
  template<typename _Tp, _Lock_policy _Lp>
    inline bool
    operator==(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept
    { return !__a; }

  template<typename _Tp1, typename _Tp2, _Lock_policy _Lp>
    inline bool
    operator!=(const __shared_ptr<_Tp1, _Lp>& __a,
        const __shared_ptr<_Tp2, _Lp>& __b) noexcept
    { return __a.get() != __b.get(); }

  template<typename _Tp, _Lock_policy _Lp>
    inline bool
    operator!=(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept
    { return (bool)__a; }

  template<typename _Tp, _Lock_policy _Lp>
    inline bool
    operator!=(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept
    { return (bool)__a; }

  template<typename _Tp, typename _Up, _Lock_policy _Lp>
    inline bool
    operator<(const __shared_ptr<_Tp, _Lp>& __a,
       const __shared_ptr<_Up, _Lp>& __b) noexcept
    {
      using _Tp_elt = typename __shared_ptr<_Tp, _Lp>::element_type;
      using _Up_elt = typename __shared_ptr<_Up, _Lp>::element_type;
      using _Vp = typename common_type<_Tp_elt*, _Up_elt*>::type;
      return less<_Vp>()(__a.get(), __b.get());
    }

  template<typename _Tp, _Lock_policy _Lp>
    inline bool
    operator<(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept
    {
      using _Tp_elt = typename __shared_ptr<_Tp, _Lp>::element_type;
      return less<_Tp_elt*>()(__a.get(), nullptr);
    }

  template<typename _Tp, _Lock_policy _Lp>
    inline bool
    operator<(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept
    {
      using _Tp_elt = typename __shared_ptr<_Tp, _Lp>::element_type;
      return less<_Tp_elt*>()(nullptr, __a.get());
    }

  template<typename _Tp1, typename _Tp2, _Lock_policy _Lp>
    inline bool
    operator<=(const __shared_ptr<_Tp1, _Lp>& __a,
        const __shared_ptr<_Tp2, _Lp>& __b) noexcept
    { return !(__b < __a); }

  template<typename _Tp, _Lock_policy _Lp>
    inline bool
    operator<=(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept
    { return !(nullptr < __a); }

  template<typename _Tp, _Lock_policy _Lp>
    inline bool
    operator<=(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept
    { return !(__a < nullptr); }

  template<typename _Tp1, typename _Tp2, _Lock_policy _Lp>
    inline bool
    operator>(const __shared_ptr<_Tp1, _Lp>& __a,
       const __shared_ptr<_Tp2, _Lp>& __b) noexcept
    { return (__b < __a); }

  template<typename _Tp, _Lock_policy _Lp>
    inline bool
    operator>(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept
    { return nullptr < __a; }

  template<typename _Tp, _Lock_policy _Lp>
    inline bool
    operator>(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept
    { return __a < nullptr; }

  template<typename _Tp1, typename _Tp2, _Lock_policy _Lp>
    inline bool
    operator>=(const __shared_ptr<_Tp1, _Lp>& __a,
        const __shared_ptr<_Tp2, _Lp>& __b) noexcept
    { return !(__a < __b); }

  template<typename _Tp, _Lock_policy _Lp>
    inline bool
    operator>=(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept
    { return !(__a < nullptr); }

  template<typename _Tp, _Lock_policy _Lp>
    inline bool
    operator>=(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept
    { return !(nullptr < __a); }



  template<typename _Tp, _Lock_policy _Lp>
    inline void
    swap(__shared_ptr<_Tp, _Lp>& __a, __shared_ptr<_Tp, _Lp>& __b) noexcept
    { __a.swap(__b); }
# 1927 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr_base.h" 3
  template<typename _Tp, typename _Tp1, _Lock_policy _Lp>
    inline __shared_ptr<_Tp, _Lp>
    static_pointer_cast(const __shared_ptr<_Tp1, _Lp>& __r) noexcept
    {
      using _Sp = __shared_ptr<_Tp, _Lp>;
      return _Sp(__r, static_cast<typename _Sp::element_type*>(__r.get()));
    }






  template<typename _Tp, typename _Tp1, _Lock_policy _Lp>
    inline __shared_ptr<_Tp, _Lp>
    const_pointer_cast(const __shared_ptr<_Tp1, _Lp>& __r) noexcept
    {
      using _Sp = __shared_ptr<_Tp, _Lp>;
      return _Sp(__r, const_cast<typename _Sp::element_type*>(__r.get()));
    }






  template<typename _Tp, typename _Tp1, _Lock_policy _Lp>
    inline __shared_ptr<_Tp, _Lp>
    dynamic_pointer_cast(const __shared_ptr<_Tp1, _Lp>& __r) noexcept
    {
      using _Sp = __shared_ptr<_Tp, _Lp>;
      if (auto* __p = dynamic_cast<typename _Sp::element_type*>(__r.get()))
 return _Sp(__r, __p);
      return _Sp();
    }
# 1973 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr_base.h" 3
  template<typename _Tp, _Lock_policy _Lp>
    class __weak_ptr
    {
      template<typename _Yp, typename _Res = void>
 using _Compatible = typename
   enable_if<__sp_compatible_with<_Yp*, _Tp*>::value, _Res>::type;


      template<typename _Yp>
 using _Assignable = _Compatible<_Yp, __weak_ptr&>;

    public:
      using element_type = typename remove_extent<_Tp>::type;

      constexpr __weak_ptr() noexcept
      : _M_ptr(nullptr), _M_refcount()
      { }

      __weak_ptr(const __weak_ptr&) noexcept = default;

      ~__weak_ptr() = default;
# 2009 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr_base.h" 3
      template<typename _Yp, typename = _Compatible<_Yp>>
 __weak_ptr(const __weak_ptr<_Yp, _Lp>& __r) noexcept
 : _M_refcount(__r._M_refcount)
        { _M_ptr = __r.lock().get(); }

      template<typename _Yp, typename = _Compatible<_Yp>>
 __weak_ptr(const __shared_ptr<_Yp, _Lp>& __r) noexcept
 : _M_ptr(__r._M_ptr), _M_refcount(__r._M_refcount)
 { }

      __weak_ptr(__weak_ptr&& __r) noexcept
      : _M_ptr(__r._M_ptr), _M_refcount(std::move(__r._M_refcount))
      { __r._M_ptr = nullptr; }

      template<typename _Yp, typename = _Compatible<_Yp>>
 __weak_ptr(__weak_ptr<_Yp, _Lp>&& __r) noexcept
 : _M_ptr(__r.lock().get()), _M_refcount(std::move(__r._M_refcount))
        { __r._M_ptr = nullptr; }

      __weak_ptr&
      operator=(const __weak_ptr& __r) noexcept = default;

      template<typename _Yp>
 _Assignable<_Yp>
 operator=(const __weak_ptr<_Yp, _Lp>& __r) noexcept
 {
   _M_ptr = __r.lock().get();
   _M_refcount = __r._M_refcount;
   return *this;
 }

      template<typename _Yp>
 _Assignable<_Yp>
 operator=(const __shared_ptr<_Yp, _Lp>& __r) noexcept
 {
   _M_ptr = __r._M_ptr;
   _M_refcount = __r._M_refcount;
   return *this;
 }

      __weak_ptr&
      operator=(__weak_ptr&& __r) noexcept
      {
 __weak_ptr(std::move(__r)).swap(*this);
 return *this;
      }

      template<typename _Yp>
 _Assignable<_Yp>
 operator=(__weak_ptr<_Yp, _Lp>&& __r) noexcept
 {
   _M_ptr = __r.lock().get();
   _M_refcount = std::move(__r._M_refcount);
   __r._M_ptr = nullptr;
   return *this;
 }

      __shared_ptr<_Tp, _Lp>
      lock() const noexcept
      { return __shared_ptr<element_type, _Lp>(*this, std::nothrow); }

      long
      use_count() const noexcept
      { return _M_refcount._M_get_use_count(); }

      bool
      expired() const noexcept
      { return _M_refcount._M_get_use_count() == 0; }

      template<typename _Tp1>
 bool
 owner_before(const __shared_ptr<_Tp1, _Lp>& __rhs) const noexcept
 { return _M_refcount._M_less(__rhs._M_refcount); }

      template<typename _Tp1>
 bool
 owner_before(const __weak_ptr<_Tp1, _Lp>& __rhs) const noexcept
 { return _M_refcount._M_less(__rhs._M_refcount); }

      void
      reset() noexcept
      { __weak_ptr().swap(*this); }

      void
      swap(__weak_ptr& __s) noexcept
      {
 std::swap(_M_ptr, __s._M_ptr);
 _M_refcount._M_swap(__s._M_refcount);
      }

    private:

      void
      _M_assign(_Tp* __ptr, const __shared_count<_Lp>& __refcount) noexcept
      {
 if (use_count() == 0)
   {
     _M_ptr = __ptr;
     _M_refcount = __refcount;
   }
      }

      template<typename _Tp1, _Lock_policy _Lp1> friend class __shared_ptr;
      template<typename _Tp1, _Lock_policy _Lp1> friend class __weak_ptr;
      friend class __enable_shared_from_this<_Tp, _Lp>;
      friend class enable_shared_from_this<_Tp>;




      element_type* _M_ptr;
      __weak_count<_Lp> _M_refcount;
    };


  template<typename _Tp, _Lock_policy _Lp>
    inline void
    swap(__weak_ptr<_Tp, _Lp>& __a, __weak_ptr<_Tp, _Lp>& __b) noexcept
    { __a.swap(__b); }

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
  template<typename _Tp, typename _Tp1>
    struct _Sp_owner_less : public binary_function<_Tp, _Tp, bool>
    {
      bool
      operator()(const _Tp& __lhs, const _Tp& __rhs) const noexcept
      { return __lhs.owner_before(__rhs); }

      bool
      operator()(const _Tp& __lhs, const _Tp1& __rhs) const noexcept
      { return __lhs.owner_before(__rhs); }

      bool
      operator()(const _Tp1& __lhs, const _Tp& __rhs) const noexcept
      { return __lhs.owner_before(__rhs); }
    };
#pragma GCC diagnostic pop

  template<>
    struct _Sp_owner_less<void, void>
    {
      template<typename _Tp, typename _Up>
 auto
 operator()(const _Tp& __lhs, const _Up& __rhs) const noexcept
 -> decltype(__lhs.owner_before(__rhs))
 { return __lhs.owner_before(__rhs); }

      using is_transparent = void;
    };

  template<typename _Tp, _Lock_policy _Lp>
    struct owner_less<__shared_ptr<_Tp, _Lp>>
    : public _Sp_owner_less<__shared_ptr<_Tp, _Lp>, __weak_ptr<_Tp, _Lp>>
    { };

  template<typename _Tp, _Lock_policy _Lp>
    struct owner_less<__weak_ptr<_Tp, _Lp>>
    : public _Sp_owner_less<__weak_ptr<_Tp, _Lp>, __shared_ptr<_Tp, _Lp>>
    { };


  template<typename _Tp, _Lock_policy _Lp>
    class __enable_shared_from_this
    {
    protected:
      constexpr __enable_shared_from_this() noexcept { }

      __enable_shared_from_this(const __enable_shared_from_this&) noexcept { }

      __enable_shared_from_this&
      operator=(const __enable_shared_from_this&) noexcept
      { return *this; }

      ~__enable_shared_from_this() { }

    public:
      __shared_ptr<_Tp, _Lp>
      shared_from_this()
      { return __shared_ptr<_Tp, _Lp>(this->_M_weak_this); }

      __shared_ptr<const _Tp, _Lp>
      shared_from_this() const
      { return __shared_ptr<const _Tp, _Lp>(this->_M_weak_this); }
# 2204 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr_base.h" 3
    private:
      template<typename _Tp1>
 void
 _M_weak_assign(_Tp1* __p, const __shared_count<_Lp>& __n) const noexcept
 { _M_weak_this._M_assign(__p, __n); }

      friend const __enable_shared_from_this*
      __enable_shared_from_this_base(const __shared_count<_Lp>&,
         const __enable_shared_from_this* __p)
      { return __p; }

      template<typename, _Lock_policy>
 friend class __shared_ptr;

      mutable __weak_ptr<_Tp, _Lp> _M_weak_this;
    };

  template<typename _Tp, _Lock_policy _Lp = __default_lock_policy,
    typename _Alloc, typename... _Args>
    inline __shared_ptr<_Tp, _Lp>
    __allocate_shared(const _Alloc& __a, _Args&&... __args)
    {
      static_assert(!is_array<_Tp>::value, "make_shared<T[]> not supported");

      return __shared_ptr<_Tp, _Lp>(_Sp_alloc_shared_tag<_Alloc>{__a},
        std::forward<_Args>(__args)...);
    }

  template<typename _Tp, _Lock_policy _Lp = __default_lock_policy,
    typename... _Args>
    inline __shared_ptr<_Tp, _Lp>
    __make_shared(_Args&&... __args)
    {
      typedef typename std::remove_const<_Tp>::type _Tp_nc;
      return std::__allocate_shared<_Tp, _Lp>(std::allocator<_Tp_nc>(),
           std::forward<_Args>(__args)...);
    }


  template<typename _Tp, _Lock_policy _Lp>
    struct hash<__shared_ptr<_Tp, _Lp>>
    : public __hash_base<size_t, __shared_ptr<_Tp, _Lp>>
    {
      size_t
      operator()(const __shared_ptr<_Tp, _Lp>& __s) const noexcept
      {
 return hash<typename __shared_ptr<_Tp, _Lp>::element_type*>()(
     __s.get());
      }
    };


}
# 54 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr.h" 2 3

namespace std __attribute__ ((__visibility__ ("default")))
{

# 68 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr.h" 3
  template<typename _Ch, typename _Tr, typename _Tp, _Lock_policy _Lp>
    inline std::basic_ostream<_Ch, _Tr>&
    operator<<(std::basic_ostream<_Ch, _Tr>& __os,
        const __shared_ptr<_Tp, _Lp>& __p)
    {
      __os << __p.get();
      return __os;
    }

  template<typename _Del, typename _Tp, _Lock_policy _Lp>
    inline _Del*
    get_deleter(const __shared_ptr<_Tp, _Lp>& __p) noexcept
    {



      return 0;

    }





  template<typename _Del, typename _Tp>
    inline _Del*
    get_deleter(const shared_ptr<_Tp>& __p) noexcept
    {



      return 0;

    }
# 111 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr.h" 3
  template<typename _Tp>
    using _NonArray = __enable_if_t<!is_array<_Tp>::value, _Tp>;
# 174 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr.h" 3
  template<typename _Tp>
    class shared_ptr : public __shared_ptr<_Tp>
    {
      template<typename... _Args>
 using _Constructible = typename enable_if<
   is_constructible<__shared_ptr<_Tp>, _Args...>::value
 >::type;

      template<typename _Arg>
 using _Assignable = typename enable_if<
   is_assignable<__shared_ptr<_Tp>&, _Arg>::value, shared_ptr&
 >::type;

    public:


      using element_type = typename __shared_ptr<_Tp>::element_type;
# 202 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr.h" 3
      constexpr shared_ptr() noexcept : __shared_ptr<_Tp>() { }

      shared_ptr(const shared_ptr&) noexcept = default;







      template<typename _Yp, typename = _Constructible<_Yp*>>
 explicit
 shared_ptr(_Yp* __p) : __shared_ptr<_Tp>(__p) { }
# 229 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr.h" 3
      template<typename _Yp, typename _Deleter,
        typename = _Constructible<_Yp*, _Deleter>>
 shared_ptr(_Yp* __p, _Deleter __d)
        : __shared_ptr<_Tp>(__p, std::move(__d)) { }
# 247 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr.h" 3
      template<typename _Deleter>
 shared_ptr(nullptr_t __p, _Deleter __d)
        : __shared_ptr<_Tp>(__p, std::move(__d)) { }
# 266 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr.h" 3
      template<typename _Yp, typename _Deleter, typename _Alloc,
        typename = _Constructible<_Yp*, _Deleter, _Alloc>>
 shared_ptr(_Yp* __p, _Deleter __d, _Alloc __a)
 : __shared_ptr<_Tp>(__p, std::move(__d), std::move(__a)) { }
# 286 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr.h" 3
      template<typename _Deleter, typename _Alloc>
 shared_ptr(nullptr_t __p, _Deleter __d, _Alloc __a)
 : __shared_ptr<_Tp>(__p, std::move(__d), std::move(__a)) { }
# 310 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr.h" 3
      template<typename _Yp>
 shared_ptr(const shared_ptr<_Yp>& __r, element_type* __p) noexcept
 : __shared_ptr<_Tp>(__r, __p) { }
# 349 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr.h" 3
      template<typename _Yp,
        typename = _Constructible<const shared_ptr<_Yp>&>>
 shared_ptr(const shared_ptr<_Yp>& __r) noexcept
        : __shared_ptr<_Tp>(__r) { }






      shared_ptr(shared_ptr&& __r) noexcept
      : __shared_ptr<_Tp>(std::move(__r)) { }






      template<typename _Yp, typename = _Constructible<shared_ptr<_Yp>>>
 shared_ptr(shared_ptr<_Yp>&& __r) noexcept
 : __shared_ptr<_Tp>(std::move(__r)) { }
# 379 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr.h" 3
      template<typename _Yp, typename = _Constructible<const weak_ptr<_Yp>&>>
 explicit shared_ptr(const weak_ptr<_Yp>& __r)
 : __shared_ptr<_Tp>(__r) { }


#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
      template<typename _Yp, typename = _Constructible<auto_ptr<_Yp>>>
 shared_ptr(auto_ptr<_Yp>&& __r);
#pragma GCC diagnostic pop




      template<typename _Yp, typename _Del,
        typename = _Constructible<unique_ptr<_Yp, _Del>>>
 shared_ptr(unique_ptr<_Yp, _Del>&& __r)
 : __shared_ptr<_Tp>(std::move(__r)) { }





      template<typename _Yp, typename _Del,
  _Constructible<unique_ptr<_Yp, _Del>, __sp_array_delete>* = 0>
 shared_ptr(unique_ptr<_Yp, _Del>&& __r)
 : __shared_ptr<_Tp>(std::move(__r), __sp_array_delete()) { }






      constexpr shared_ptr(nullptr_t) noexcept : shared_ptr() { }

      shared_ptr& operator=(const shared_ptr&) noexcept = default;

      template<typename _Yp>
 _Assignable<const shared_ptr<_Yp>&>
 operator=(const shared_ptr<_Yp>& __r) noexcept
 {
   this->__shared_ptr<_Tp>::operator=(__r);
   return *this;
 }


#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
      template<typename _Yp>
 _Assignable<auto_ptr<_Yp>>
 operator=(auto_ptr<_Yp>&& __r)
 {
   this->__shared_ptr<_Tp>::operator=(std::move(__r));
   return *this;
 }
#pragma GCC diagnostic pop


      shared_ptr&
      operator=(shared_ptr&& __r) noexcept
      {
 this->__shared_ptr<_Tp>::operator=(std::move(__r));
 return *this;
      }

      template<class _Yp>
 _Assignable<shared_ptr<_Yp>>
 operator=(shared_ptr<_Yp>&& __r) noexcept
 {
   this->__shared_ptr<_Tp>::operator=(std::move(__r));
   return *this;
 }

      template<typename _Yp, typename _Del>
 _Assignable<unique_ptr<_Yp, _Del>>
 operator=(unique_ptr<_Yp, _Del>&& __r)
 {
   this->__shared_ptr<_Tp>::operator=(std::move(__r));
   return *this;
 }

    private:

      template<typename _Alloc, typename... _Args>
 shared_ptr(_Sp_alloc_shared_tag<_Alloc> __tag, _Args&&... __args)
 : __shared_ptr<_Tp>(__tag, std::forward<_Args>(__args)...)
 { }

      template<typename _Yp, typename _Alloc, typename... _Args>
 friend shared_ptr<_NonArray<_Yp>>
 allocate_shared(const _Alloc&, _Args&&...);

      template<typename _Yp, typename... _Args>
 friend shared_ptr<_NonArray<_Yp>>
 make_shared(_Args&&...);
# 535 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr.h" 3
      shared_ptr(const weak_ptr<_Tp>& __r, std::nothrow_t) noexcept
      : __shared_ptr<_Tp>(__r, std::nothrow) { }

      friend class weak_ptr<_Tp>;
    };
# 553 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr.h" 3
  template<typename _Tp, typename _Up>
    inline bool
    operator==(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept
    { return __a.get() == __b.get(); }


  template<typename _Tp>
    inline bool
    operator==(const shared_ptr<_Tp>& __a, nullptr_t) noexcept
    { return !__a; }
# 580 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr.h" 3
  template<typename _Tp>
    inline bool
    operator==(nullptr_t, const shared_ptr<_Tp>& __a) noexcept
    { return !__a; }


  template<typename _Tp, typename _Up>
    inline bool
    operator!=(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept
    { return __a.get() != __b.get(); }


  template<typename _Tp>
    inline bool
    operator!=(const shared_ptr<_Tp>& __a, nullptr_t) noexcept
    { return (bool)__a; }


  template<typename _Tp>
    inline bool
    operator!=(nullptr_t, const shared_ptr<_Tp>& __a) noexcept
    { return (bool)__a; }


  template<typename _Tp, typename _Up>
    inline bool
    operator<(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept
    {
      using _Tp_elt = typename shared_ptr<_Tp>::element_type;
      using _Up_elt = typename shared_ptr<_Up>::element_type;
      using _Vp = typename common_type<_Tp_elt*, _Up_elt*>::type;
      return less<_Vp>()(__a.get(), __b.get());
    }


  template<typename _Tp>
    inline bool
    operator<(const shared_ptr<_Tp>& __a, nullptr_t) noexcept
    {
      using _Tp_elt = typename shared_ptr<_Tp>::element_type;
      return less<_Tp_elt*>()(__a.get(), nullptr);
    }


  template<typename _Tp>
    inline bool
    operator<(nullptr_t, const shared_ptr<_Tp>& __a) noexcept
    {
      using _Tp_elt = typename shared_ptr<_Tp>::element_type;
      return less<_Tp_elt*>()(nullptr, __a.get());
    }


  template<typename _Tp, typename _Up>
    inline bool
    operator<=(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept
    { return !(__b < __a); }


  template<typename _Tp>
    inline bool
    operator<=(const shared_ptr<_Tp>& __a, nullptr_t) noexcept
    { return !(nullptr < __a); }


  template<typename _Tp>
    inline bool
    operator<=(nullptr_t, const shared_ptr<_Tp>& __a) noexcept
    { return !(__a < nullptr); }


  template<typename _Tp, typename _Up>
    inline bool
    operator>(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept
    { return (__b < __a); }


  template<typename _Tp>
    inline bool
    operator>(const shared_ptr<_Tp>& __a, nullptr_t) noexcept
    { return nullptr < __a; }


  template<typename _Tp>
    inline bool
    operator>(nullptr_t, const shared_ptr<_Tp>& __a) noexcept
    { return __a < nullptr; }


  template<typename _Tp, typename _Up>
    inline bool
    operator>=(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept
    { return !(__a < __b); }


  template<typename _Tp>
    inline bool
    operator>=(const shared_ptr<_Tp>& __a, nullptr_t) noexcept
    { return !(__a < nullptr); }


  template<typename _Tp>
    inline bool
    operator>=(nullptr_t, const shared_ptr<_Tp>& __a) noexcept
    { return !(nullptr < __a); }





  template<typename _Tp>
    inline void
    swap(shared_ptr<_Tp>& __a, shared_ptr<_Tp>& __b) noexcept
    { __a.swap(__b); }




  template<typename _Tp, typename _Up>
    inline shared_ptr<_Tp>
    static_pointer_cast(const shared_ptr<_Up>& __r) noexcept
    {
      using _Sp = shared_ptr<_Tp>;
      return _Sp(__r, static_cast<typename _Sp::element_type*>(__r.get()));
    }


  template<typename _Tp, typename _Up>
    inline shared_ptr<_Tp>
    const_pointer_cast(const shared_ptr<_Up>& __r) noexcept
    {
      using _Sp = shared_ptr<_Tp>;
      return _Sp(__r, const_cast<typename _Sp::element_type*>(__r.get()));
    }


  template<typename _Tp, typename _Up>
    inline shared_ptr<_Tp>
    dynamic_pointer_cast(const shared_ptr<_Up>& __r) noexcept
    {
      using _Sp = shared_ptr<_Tp>;
      if (auto* __p = dynamic_cast<typename _Sp::element_type*>(__r.get()))
 return _Sp(__r, __p);
      return _Sp();
    }
# 810 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr.h" 3
  template<typename _Tp>
    class weak_ptr : public __weak_ptr<_Tp>
    {
      template<typename _Arg>
 using _Constructible = typename enable_if<
   is_constructible<__weak_ptr<_Tp>, _Arg>::value
 >::type;

      template<typename _Arg>
 using _Assignable = typename enable_if<
   is_assignable<__weak_ptr<_Tp>&, _Arg>::value, weak_ptr&
 >::type;

    public:
      constexpr weak_ptr() noexcept = default;

      template<typename _Yp,
        typename = _Constructible<const shared_ptr<_Yp>&>>
 weak_ptr(const shared_ptr<_Yp>& __r) noexcept
 : __weak_ptr<_Tp>(__r) { }

      weak_ptr(const weak_ptr&) noexcept = default;

      template<typename _Yp, typename = _Constructible<const weak_ptr<_Yp>&>>
 weak_ptr(const weak_ptr<_Yp>& __r) noexcept
 : __weak_ptr<_Tp>(__r) { }

      weak_ptr(weak_ptr&&) noexcept = default;

      template<typename _Yp, typename = _Constructible<weak_ptr<_Yp>>>
 weak_ptr(weak_ptr<_Yp>&& __r) noexcept
 : __weak_ptr<_Tp>(std::move(__r)) { }

      weak_ptr&
      operator=(const weak_ptr& __r) noexcept = default;

      template<typename _Yp>
 _Assignable<const weak_ptr<_Yp>&>
 operator=(const weak_ptr<_Yp>& __r) noexcept
 {
   this->__weak_ptr<_Tp>::operator=(__r);
   return *this;
 }

      template<typename _Yp>
 _Assignable<const shared_ptr<_Yp>&>
 operator=(const shared_ptr<_Yp>& __r) noexcept
 {
   this->__weak_ptr<_Tp>::operator=(__r);
   return *this;
 }

      weak_ptr&
      operator=(weak_ptr&& __r) noexcept = default;

      template<typename _Yp>
 _Assignable<weak_ptr<_Yp>>
 operator=(weak_ptr<_Yp>&& __r) noexcept
 {
   this->__weak_ptr<_Tp>::operator=(std::move(__r));
   return *this;
 }

      shared_ptr<_Tp>
      lock() const noexcept
      { return shared_ptr<_Tp>(*this, std::nothrow); }
    };
# 886 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr.h" 3
  template<typename _Tp>
    inline void
    swap(weak_ptr<_Tp>& __a, weak_ptr<_Tp>& __b) noexcept
    { __a.swap(__b); }



  template<typename _Tp = void>
    struct owner_less;


  template<>
    struct owner_less<void> : _Sp_owner_less<void, void>
    { };


  template<typename _Tp>
    struct owner_less<shared_ptr<_Tp>>
    : public _Sp_owner_less<shared_ptr<_Tp>, weak_ptr<_Tp>>
    { };


  template<typename _Tp>
    struct owner_less<weak_ptr<_Tp>>
    : public _Sp_owner_less<weak_ptr<_Tp>, shared_ptr<_Tp>>
    { };






  template<typename _Tp>
    class enable_shared_from_this
    {
    protected:
      constexpr enable_shared_from_this() noexcept { }

      enable_shared_from_this(const enable_shared_from_this&) noexcept { }

      enable_shared_from_this&
      operator=(const enable_shared_from_this&) noexcept
      { return *this; }

      ~enable_shared_from_this() { }

    public:
      shared_ptr<_Tp>
      shared_from_this()
      { return shared_ptr<_Tp>(this->_M_weak_this); }

      shared_ptr<const _Tp>
      shared_from_this() const
      { return shared_ptr<const _Tp>(this->_M_weak_this); }
# 957 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr.h" 3
    private:
      template<typename _Tp1>
 void
 _M_weak_assign(_Tp1* __p, const __shared_count<>& __n) const noexcept
 { _M_weak_this._M_assign(__p, __n); }


      friend const enable_shared_from_this*
      __enable_shared_from_this_base(const __shared_count<>&,
         const enable_shared_from_this* __p)
      { return __p; }

      template<typename, _Lock_policy>
 friend class __shared_ptr;

      mutable weak_ptr<_Tp> _M_weak_this;
    };
# 988 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr.h" 3
  template<typename _Tp, typename _Alloc, typename... _Args>
    inline shared_ptr<_NonArray<_Tp>>
    allocate_shared(const _Alloc& __a, _Args&&... __args)
    {
      return shared_ptr<_Tp>(_Sp_alloc_shared_tag<_Alloc>{__a},
        std::forward<_Args>(__args)...);
    }
# 1003 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr.h" 3
  template<typename _Tp, typename... _Args>
    inline shared_ptr<_NonArray<_Tp>>
    make_shared(_Args&&... __args)
    {
      using _Alloc = allocator<void>;
      _Alloc __a;
      return shared_ptr<_Tp>(_Sp_alloc_shared_tag<_Alloc>{__a},
        std::forward<_Args>(__args)...);
    }
# 1152 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr.h" 3
  template<typename _Tp>
    struct hash<shared_ptr<_Tp>>
    : public __hash_base<size_t, shared_ptr<_Tp>>
    {
      size_t
      operator()(const shared_ptr<_Tp>& __s) const noexcept
      {
 return std::hash<typename shared_ptr<_Tp>::element_type*>()(__s.get());
      }
    };
# 1187 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr.h" 3

}
# 81 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/memory" 2 3
# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr_atomic.h" 1 3
# 31 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr_atomic.h" 3
#define _SHARED_PTR_ATOMIC_H 1

# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/atomic_base.h" 1 3
# 31 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/atomic_base.h" 3
#define _GLIBCXX_ATOMIC_BASE_H 1

       
# 34 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/atomic_base.h" 3




# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/atomic_lockfree_defines.h" 1 3
# 31 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/atomic_lockfree_defines.h" 3
#define _GLIBCXX_ATOMIC_LOCK_FREE_H 1

       
# 34 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/atomic_lockfree_defines.h" 3
# 49 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/atomic_lockfree_defines.h" 3
#define ATOMIC_BOOL_LOCK_FREE __GCC_ATOMIC_BOOL_LOCK_FREE
#define ATOMIC_CHAR_LOCK_FREE __GCC_ATOMIC_CHAR_LOCK_FREE
#define ATOMIC_WCHAR_T_LOCK_FREE __GCC_ATOMIC_WCHAR_T_LOCK_FREE



#define ATOMIC_CHAR16_T_LOCK_FREE __GCC_ATOMIC_CHAR16_T_LOCK_FREE
#define ATOMIC_CHAR32_T_LOCK_FREE __GCC_ATOMIC_CHAR32_T_LOCK_FREE
#define ATOMIC_SHORT_LOCK_FREE __GCC_ATOMIC_SHORT_LOCK_FREE
#define ATOMIC_INT_LOCK_FREE __GCC_ATOMIC_INT_LOCK_FREE
#define ATOMIC_LONG_LOCK_FREE __GCC_ATOMIC_LONG_LOCK_FREE
#define ATOMIC_LLONG_LOCK_FREE __GCC_ATOMIC_LLONG_LOCK_FREE
#define ATOMIC_POINTER_LOCK_FREE __GCC_ATOMIC_POINTER_LOCK_FREE
# 39 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/atomic_base.h" 2 3







#define _GLIBCXX_ALWAYS_INLINE inline __attribute__((__always_inline__))


namespace std __attribute__ ((__visibility__ ("default")))
{

# 79 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/atomic_base.h" 3
  typedef enum memory_order
    {
      memory_order_relaxed,
      memory_order_consume,
      memory_order_acquire,
      memory_order_release,
      memory_order_acq_rel,
      memory_order_seq_cst
    } memory_order;



  enum __memory_order_modifier
    {
      __memory_order_mask = 0x0ffff,
      __memory_order_modifier_mask = 0xffff0000,
      __memory_order_hle_acquire = 0x10000,
      __memory_order_hle_release = 0x20000
    };


  constexpr memory_order
  operator|(memory_order __m, __memory_order_modifier __mod)
  {
    return memory_order(int(__m) | int(__mod));
  }

  constexpr memory_order
  operator&(memory_order __m, __memory_order_modifier __mod)
  {
    return memory_order(int(__m) & int(__mod));
  }




  constexpr memory_order
  __cmpexch_failure_order2(memory_order __m) noexcept
  {
    return __m == memory_order_acq_rel ? memory_order_acquire
      : __m == memory_order_release ? memory_order_relaxed : __m;
  }

  constexpr memory_order
  __cmpexch_failure_order(memory_order __m) noexcept
  {
    return memory_order(__cmpexch_failure_order2(__m & __memory_order_mask)
      | __memory_order_modifier(__m & __memory_order_modifier_mask));
  }

  constexpr bool
  __is_valid_cmpexch_failure_order(memory_order __m) noexcept
  {
    return (__m & __memory_order_mask) != memory_order_release
 && (__m & __memory_order_mask) != memory_order_acq_rel;
  }


  template<typename _IntTp>
    struct __atomic_base;



  inline __attribute__((__always_inline__)) void
  atomic_thread_fence(memory_order __m) noexcept
  { __atomic_thread_fence(int(__m)); }

  inline __attribute__((__always_inline__)) void
  atomic_signal_fence(memory_order __m) noexcept
  { __atomic_signal_fence(int(__m)); }


  template<typename _Tp>
    inline _Tp
    kill_dependency(_Tp __y) noexcept
    {
      _Tp __ret(__y);
      return __ret;
    }
# 167 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/atomic_base.h" 3
#define _GLIBCXX20_INIT(I) 



#define ATOMIC_VAR_INIT(_VI) { _VI }

  template<typename _Tp>
    struct atomic;

  template<typename _Tp>
    struct atomic<_Tp*>;



    typedef bool __atomic_flag_data_type;
# 198 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/atomic_base.h" 3
  extern "C" {

  struct __atomic_flag_base
  {
    __atomic_flag_data_type _M_i ;
  };

  }



#define ATOMIC_FLAG_INIT { 0 }


  struct atomic_flag : public __atomic_flag_base
  {
    atomic_flag() noexcept = default;
    ~atomic_flag() noexcept = default;
    atomic_flag(const atomic_flag&) = delete;
    atomic_flag& operator=(const atomic_flag&) = delete;
    atomic_flag& operator=(const atomic_flag&) volatile = delete;


    constexpr atomic_flag(bool __i) noexcept
      : __atomic_flag_base{ _S_init(__i) }
    { }

    inline __attribute__((__always_inline__)) bool
    test_and_set(memory_order __m = memory_order_seq_cst) noexcept
    {
      return __atomic_test_and_set (&_M_i, int(__m));
    }

    inline __attribute__((__always_inline__)) bool
    test_and_set(memory_order __m = memory_order_seq_cst) volatile noexcept
    {
      return __atomic_test_and_set (&_M_i, int(__m));
    }
# 284 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/atomic_base.h" 3
    inline __attribute__((__always_inline__)) void
    clear(memory_order __m = memory_order_seq_cst) noexcept
    {
      memory_order __b __attribute__ ((__unused__))
 = __m & __memory_order_mask;
      do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_consume)) __builtin_unreachable(); } while (false);
      do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_acquire)) __builtin_unreachable(); } while (false);
      do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_acq_rel)) __builtin_unreachable(); } while (false);

      __atomic_clear (&_M_i, int(__m));
    }

    inline __attribute__((__always_inline__)) void
    clear(memory_order __m = memory_order_seq_cst) volatile noexcept
    {
      memory_order __b __attribute__ ((__unused__))
 = __m & __memory_order_mask;
      do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_consume)) __builtin_unreachable(); } while (false);
      do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_acquire)) __builtin_unreachable(); } while (false);
      do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_acq_rel)) __builtin_unreachable(); } while (false);

      __atomic_clear (&_M_i, int(__m));
    }

  private:
    static constexpr __atomic_flag_data_type
    _S_init(bool __i)
    { return __i ? 1 : 0; }
  };
# 340 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/atomic_base.h" 3
  template<typename _ITp>
    struct __atomic_base
    {
      using value_type = _ITp;
      using difference_type = value_type;

    private:
      typedef _ITp __int_type;

      static constexpr int _S_alignment =
 sizeof(_ITp) > alignof(_ITp) ? sizeof(_ITp) : alignof(_ITp);

      alignas(_S_alignment) __int_type _M_i ;

    public:
      __atomic_base() noexcept = default;
      ~__atomic_base() noexcept = default;
      __atomic_base(const __atomic_base&) = delete;
      __atomic_base& operator=(const __atomic_base&) = delete;
      __atomic_base& operator=(const __atomic_base&) volatile = delete;


      constexpr __atomic_base(__int_type __i) noexcept : _M_i (__i) { }

      operator __int_type() const noexcept
      { return load(); }

      operator __int_type() const volatile noexcept
      { return load(); }

      __int_type
      operator=(__int_type __i) noexcept
      {
 store(__i);
 return __i;
      }

      __int_type
      operator=(__int_type __i) volatile noexcept
      {
 store(__i);
 return __i;
      }

      __int_type
      operator++(int) noexcept
      { return fetch_add(1); }

      __int_type
      operator++(int) volatile noexcept
      { return fetch_add(1); }

      __int_type
      operator--(int) noexcept
      { return fetch_sub(1); }

      __int_type
      operator--(int) volatile noexcept
      { return fetch_sub(1); }

      __int_type
      operator++() noexcept
      { return __atomic_add_fetch(&_M_i, 1, int(memory_order_seq_cst)); }

      __int_type
      operator++() volatile noexcept
      { return __atomic_add_fetch(&_M_i, 1, int(memory_order_seq_cst)); }

      __int_type
      operator--() noexcept
      { return __atomic_sub_fetch(&_M_i, 1, int(memory_order_seq_cst)); }

      __int_type
      operator--() volatile noexcept
      { return __atomic_sub_fetch(&_M_i, 1, int(memory_order_seq_cst)); }

      __int_type
      operator+=(__int_type __i) noexcept
      { return __atomic_add_fetch(&_M_i, __i, int(memory_order_seq_cst)); }

      __int_type
      operator+=(__int_type __i) volatile noexcept
      { return __atomic_add_fetch(&_M_i, __i, int(memory_order_seq_cst)); }

      __int_type
      operator-=(__int_type __i) noexcept
      { return __atomic_sub_fetch(&_M_i, __i, int(memory_order_seq_cst)); }

      __int_type
      operator-=(__int_type __i) volatile noexcept
      { return __atomic_sub_fetch(&_M_i, __i, int(memory_order_seq_cst)); }

      __int_type
      operator&=(__int_type __i) noexcept
      { return __atomic_and_fetch(&_M_i, __i, int(memory_order_seq_cst)); }

      __int_type
      operator&=(__int_type __i) volatile noexcept
      { return __atomic_and_fetch(&_M_i, __i, int(memory_order_seq_cst)); }

      __int_type
      operator|=(__int_type __i) noexcept
      { return __atomic_or_fetch(&_M_i, __i, int(memory_order_seq_cst)); }

      __int_type
      operator|=(__int_type __i) volatile noexcept
      { return __atomic_or_fetch(&_M_i, __i, int(memory_order_seq_cst)); }

      __int_type
      operator^=(__int_type __i) noexcept
      { return __atomic_xor_fetch(&_M_i, __i, int(memory_order_seq_cst)); }

      __int_type
      operator^=(__int_type __i) volatile noexcept
      { return __atomic_xor_fetch(&_M_i, __i, int(memory_order_seq_cst)); }

      bool
      is_lock_free() const noexcept
      {

 return __atomic_is_lock_free(sizeof(_M_i),
     reinterpret_cast<void *>(-_S_alignment));
      }

      bool
      is_lock_free() const volatile noexcept
      {

 return __atomic_is_lock_free(sizeof(_M_i),
     reinterpret_cast<void *>(-_S_alignment));
      }

      inline __attribute__((__always_inline__)) void
      store(__int_type __i, memory_order __m = memory_order_seq_cst) noexcept
      {
 memory_order __b __attribute__ ((__unused__))
   = __m & __memory_order_mask;
 do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_acquire)) __builtin_unreachable(); } while (false);
 do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_acq_rel)) __builtin_unreachable(); } while (false);
 do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_consume)) __builtin_unreachable(); } while (false);

 __atomic_store_n(&_M_i, __i, int(__m));
      }

      inline __attribute__((__always_inline__)) void
      store(__int_type __i,
     memory_order __m = memory_order_seq_cst) volatile noexcept
      {
 memory_order __b __attribute__ ((__unused__))
   = __m & __memory_order_mask;
 do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_acquire)) __builtin_unreachable(); } while (false);
 do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_acq_rel)) __builtin_unreachable(); } while (false);
 do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_consume)) __builtin_unreachable(); } while (false);

 __atomic_store_n(&_M_i, __i, int(__m));
      }

      inline __attribute__((__always_inline__)) __int_type
      load(memory_order __m = memory_order_seq_cst) const noexcept
      {
 memory_order __b __attribute__ ((__unused__))
   = __m & __memory_order_mask;
 do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_release)) __builtin_unreachable(); } while (false);
 do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_acq_rel)) __builtin_unreachable(); } while (false);

 return __atomic_load_n(&_M_i, int(__m));
      }

      inline __attribute__((__always_inline__)) __int_type
      load(memory_order __m = memory_order_seq_cst) const volatile noexcept
      {
 memory_order __b __attribute__ ((__unused__))
   = __m & __memory_order_mask;
 do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_release)) __builtin_unreachable(); } while (false);
 do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_acq_rel)) __builtin_unreachable(); } while (false);

 return __atomic_load_n(&_M_i, int(__m));
      }

      inline __attribute__((__always_inline__)) __int_type
      exchange(__int_type __i,
        memory_order __m = memory_order_seq_cst) noexcept
      {
 return __atomic_exchange_n(&_M_i, __i, int(__m));
      }


      inline __attribute__((__always_inline__)) __int_type
      exchange(__int_type __i,
        memory_order __m = memory_order_seq_cst) volatile noexcept
      {
 return __atomic_exchange_n(&_M_i, __i, int(__m));
      }

      inline __attribute__((__always_inline__)) bool
      compare_exchange_weak(__int_type& __i1, __int_type __i2,
       memory_order __m1, memory_order __m2) noexcept
      {
 do { if (std::__is_constant_evaluated() && !bool(__is_valid_cmpexch_failure_order(__m2))) __builtin_unreachable(); } while (false);

 return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 1,
        int(__m1), int(__m2));
      }

      inline __attribute__((__always_inline__)) bool
      compare_exchange_weak(__int_type& __i1, __int_type __i2,
       memory_order __m1,
       memory_order __m2) volatile noexcept
      {
 do { if (std::__is_constant_evaluated() && !bool(__is_valid_cmpexch_failure_order(__m2))) __builtin_unreachable(); } while (false);

 return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 1,
        int(__m1), int(__m2));
      }

      inline __attribute__((__always_inline__)) bool
      compare_exchange_weak(__int_type& __i1, __int_type __i2,
       memory_order __m = memory_order_seq_cst) noexcept
      {
 return compare_exchange_weak(__i1, __i2, __m,
         __cmpexch_failure_order(__m));
      }

      inline __attribute__((__always_inline__)) bool
      compare_exchange_weak(__int_type& __i1, __int_type __i2,
     memory_order __m = memory_order_seq_cst) volatile noexcept
      {
 return compare_exchange_weak(__i1, __i2, __m,
         __cmpexch_failure_order(__m));
      }

      inline __attribute__((__always_inline__)) bool
      compare_exchange_strong(__int_type& __i1, __int_type __i2,
         memory_order __m1, memory_order __m2) noexcept
      {
 do { if (std::__is_constant_evaluated() && !bool(__is_valid_cmpexch_failure_order(__m2))) __builtin_unreachable(); } while (false);

 return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 0,
        int(__m1), int(__m2));
      }

      inline __attribute__((__always_inline__)) bool
      compare_exchange_strong(__int_type& __i1, __int_type __i2,
         memory_order __m1,
         memory_order __m2) volatile noexcept
      {
 do { if (std::__is_constant_evaluated() && !bool(__is_valid_cmpexch_failure_order(__m2))) __builtin_unreachable(); } while (false);

 return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 0,
        int(__m1), int(__m2));
      }

      inline __attribute__((__always_inline__)) bool
      compare_exchange_strong(__int_type& __i1, __int_type __i2,
         memory_order __m = memory_order_seq_cst) noexcept
      {
 return compare_exchange_strong(__i1, __i2, __m,
           __cmpexch_failure_order(__m));
      }

      inline __attribute__((__always_inline__)) bool
      compare_exchange_strong(__int_type& __i1, __int_type __i2,
   memory_order __m = memory_order_seq_cst) volatile noexcept
      {
 return compare_exchange_strong(__i1, __i2, __m,
           __cmpexch_failure_order(__m));
      }
# 632 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/atomic_base.h" 3
      inline __attribute__((__always_inline__)) __int_type
      fetch_add(__int_type __i,
  memory_order __m = memory_order_seq_cst) noexcept
      { return __atomic_fetch_add(&_M_i, __i, int(__m)); }

      inline __attribute__((__always_inline__)) __int_type
      fetch_add(__int_type __i,
  memory_order __m = memory_order_seq_cst) volatile noexcept
      { return __atomic_fetch_add(&_M_i, __i, int(__m)); }

      inline __attribute__((__always_inline__)) __int_type
      fetch_sub(__int_type __i,
  memory_order __m = memory_order_seq_cst) noexcept
      { return __atomic_fetch_sub(&_M_i, __i, int(__m)); }

      inline __attribute__((__always_inline__)) __int_type
      fetch_sub(__int_type __i,
  memory_order __m = memory_order_seq_cst) volatile noexcept
      { return __atomic_fetch_sub(&_M_i, __i, int(__m)); }

      inline __attribute__((__always_inline__)) __int_type
      fetch_and(__int_type __i,
  memory_order __m = memory_order_seq_cst) noexcept
      { return __atomic_fetch_and(&_M_i, __i, int(__m)); }

      inline __attribute__((__always_inline__)) __int_type
      fetch_and(__int_type __i,
  memory_order __m = memory_order_seq_cst) volatile noexcept
      { return __atomic_fetch_and(&_M_i, __i, int(__m)); }

      inline __attribute__((__always_inline__)) __int_type
      fetch_or(__int_type __i,
        memory_order __m = memory_order_seq_cst) noexcept
      { return __atomic_fetch_or(&_M_i, __i, int(__m)); }

      inline __attribute__((__always_inline__)) __int_type
      fetch_or(__int_type __i,
        memory_order __m = memory_order_seq_cst) volatile noexcept
      { return __atomic_fetch_or(&_M_i, __i, int(__m)); }

      inline __attribute__((__always_inline__)) __int_type
      fetch_xor(__int_type __i,
  memory_order __m = memory_order_seq_cst) noexcept
      { return __atomic_fetch_xor(&_M_i, __i, int(__m)); }

      inline __attribute__((__always_inline__)) __int_type
      fetch_xor(__int_type __i,
  memory_order __m = memory_order_seq_cst) volatile noexcept
      { return __atomic_fetch_xor(&_M_i, __i, int(__m)); }
    };



  template<typename _PTp>
    struct __atomic_base<_PTp*>
    {
    private:
      typedef _PTp* __pointer_type;

      __pointer_type _M_p ;


      constexpr ptrdiff_t
      _M_type_size(ptrdiff_t __d) const { return __d * sizeof(_PTp); }

      constexpr ptrdiff_t
      _M_type_size(ptrdiff_t __d) const volatile { return __d * sizeof(_PTp); }

    public:
      __atomic_base() noexcept = default;
      ~__atomic_base() noexcept = default;
      __atomic_base(const __atomic_base&) = delete;
      __atomic_base& operator=(const __atomic_base&) = delete;
      __atomic_base& operator=(const __atomic_base&) volatile = delete;


      constexpr __atomic_base(__pointer_type __p) noexcept : _M_p (__p) { }

      operator __pointer_type() const noexcept
      { return load(); }

      operator __pointer_type() const volatile noexcept
      { return load(); }

      __pointer_type
      operator=(__pointer_type __p) noexcept
      {
 store(__p);
 return __p;
      }

      __pointer_type
      operator=(__pointer_type __p) volatile noexcept
      {
 store(__p);
 return __p;
      }

      __pointer_type
      operator++(int) noexcept
      { return fetch_add(1); }

      __pointer_type
      operator++(int) volatile noexcept
      { return fetch_add(1); }

      __pointer_type
      operator--(int) noexcept
      { return fetch_sub(1); }

      __pointer_type
      operator--(int) volatile noexcept
      { return fetch_sub(1); }

      __pointer_type
      operator++() noexcept
      { return __atomic_add_fetch(&_M_p, _M_type_size(1),
      int(memory_order_seq_cst)); }

      __pointer_type
      operator++() volatile noexcept
      { return __atomic_add_fetch(&_M_p, _M_type_size(1),
      int(memory_order_seq_cst)); }

      __pointer_type
      operator--() noexcept
      { return __atomic_sub_fetch(&_M_p, _M_type_size(1),
      int(memory_order_seq_cst)); }

      __pointer_type
      operator--() volatile noexcept
      { return __atomic_sub_fetch(&_M_p, _M_type_size(1),
      int(memory_order_seq_cst)); }

      __pointer_type
      operator+=(ptrdiff_t __d) noexcept
      { return __atomic_add_fetch(&_M_p, _M_type_size(__d),
      int(memory_order_seq_cst)); }

      __pointer_type
      operator+=(ptrdiff_t __d) volatile noexcept
      { return __atomic_add_fetch(&_M_p, _M_type_size(__d),
      int(memory_order_seq_cst)); }

      __pointer_type
      operator-=(ptrdiff_t __d) noexcept
      { return __atomic_sub_fetch(&_M_p, _M_type_size(__d),
      int(memory_order_seq_cst)); }

      __pointer_type
      operator-=(ptrdiff_t __d) volatile noexcept
      { return __atomic_sub_fetch(&_M_p, _M_type_size(__d),
      int(memory_order_seq_cst)); }

      bool
      is_lock_free() const noexcept
      {

 return __atomic_is_lock_free(sizeof(_M_p),
     reinterpret_cast<void *>(-__alignof(_M_p)));
      }

      bool
      is_lock_free() const volatile noexcept
      {

 return __atomic_is_lock_free(sizeof(_M_p),
     reinterpret_cast<void *>(-__alignof(_M_p)));
      }

      inline __attribute__((__always_inline__)) void
      store(__pointer_type __p,
     memory_order __m = memory_order_seq_cst) noexcept
      {
 memory_order __b __attribute__ ((__unused__))
   = __m & __memory_order_mask;

 do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_acquire)) __builtin_unreachable(); } while (false);
 do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_acq_rel)) __builtin_unreachable(); } while (false);
 do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_consume)) __builtin_unreachable(); } while (false);

 __atomic_store_n(&_M_p, __p, int(__m));
      }

      inline __attribute__((__always_inline__)) void
      store(__pointer_type __p,
     memory_order __m = memory_order_seq_cst) volatile noexcept
      {
 memory_order __b __attribute__ ((__unused__))
   = __m & __memory_order_mask;
 do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_acquire)) __builtin_unreachable(); } while (false);
 do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_acq_rel)) __builtin_unreachable(); } while (false);
 do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_consume)) __builtin_unreachable(); } while (false);

 __atomic_store_n(&_M_p, __p, int(__m));
      }

      inline __attribute__((__always_inline__)) __pointer_type
      load(memory_order __m = memory_order_seq_cst) const noexcept
      {
 memory_order __b __attribute__ ((__unused__))
   = __m & __memory_order_mask;
 do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_release)) __builtin_unreachable(); } while (false);
 do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_acq_rel)) __builtin_unreachable(); } while (false);

 return __atomic_load_n(&_M_p, int(__m));
      }

      inline __attribute__((__always_inline__)) __pointer_type
      load(memory_order __m = memory_order_seq_cst) const volatile noexcept
      {
 memory_order __b __attribute__ ((__unused__))
   = __m & __memory_order_mask;
 do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_release)) __builtin_unreachable(); } while (false);
 do { if (std::__is_constant_evaluated() && !bool(__b != memory_order_acq_rel)) __builtin_unreachable(); } while (false);

 return __atomic_load_n(&_M_p, int(__m));
      }

      inline __attribute__((__always_inline__)) __pointer_type
      exchange(__pointer_type __p,
        memory_order __m = memory_order_seq_cst) noexcept
      {
 return __atomic_exchange_n(&_M_p, __p, int(__m));
      }


      inline __attribute__((__always_inline__)) __pointer_type
      exchange(__pointer_type __p,
        memory_order __m = memory_order_seq_cst) volatile noexcept
      {
 return __atomic_exchange_n(&_M_p, __p, int(__m));
      }

      inline __attribute__((__always_inline__)) bool
      compare_exchange_weak(__pointer_type& __p1, __pointer_type __p2,
       memory_order __m1,
       memory_order __m2) noexcept
      {
 do { if (std::__is_constant_evaluated() && !bool(__is_valid_cmpexch_failure_order(__m2))) __builtin_unreachable(); } while (false);

 return __atomic_compare_exchange_n(&_M_p, &__p1, __p2, 1,
        int(__m1), int(__m2));
      }

      inline __attribute__((__always_inline__)) bool
      compare_exchange_weak(__pointer_type& __p1, __pointer_type __p2,
       memory_order __m1,
       memory_order __m2) volatile noexcept
      {
 do { if (std::__is_constant_evaluated() && !bool(__is_valid_cmpexch_failure_order(__m2))) __builtin_unreachable(); } while (false);

 return __atomic_compare_exchange_n(&_M_p, &__p1, __p2, 1,
        int(__m1), int(__m2));
      }

      inline __attribute__((__always_inline__)) bool
      compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2,
         memory_order __m1,
         memory_order __m2) noexcept
      {
 do { if (std::__is_constant_evaluated() && !bool(__is_valid_cmpexch_failure_order(__m2))) __builtin_unreachable(); } while (false);

 return __atomic_compare_exchange_n(&_M_p, &__p1, __p2, 0,
        int(__m1), int(__m2));
      }

      inline __attribute__((__always_inline__)) bool
      compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2,
         memory_order __m1,
         memory_order __m2) volatile noexcept
      {
 do { if (std::__is_constant_evaluated() && !bool(__is_valid_cmpexch_failure_order(__m2))) __builtin_unreachable(); } while (false);

 return __atomic_compare_exchange_n(&_M_p, &__p1, __p2, 0,
        int(__m1), int(__m2));
      }
# 935 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/atomic_base.h" 3
      inline __attribute__((__always_inline__)) __pointer_type
      fetch_add(ptrdiff_t __d,
  memory_order __m = memory_order_seq_cst) noexcept
      { return __atomic_fetch_add(&_M_p, _M_type_size(__d), int(__m)); }

      inline __attribute__((__always_inline__)) __pointer_type
      fetch_add(ptrdiff_t __d,
  memory_order __m = memory_order_seq_cst) volatile noexcept
      { return __atomic_fetch_add(&_M_p, _M_type_size(__d), int(__m)); }

      inline __attribute__((__always_inline__)) __pointer_type
      fetch_sub(ptrdiff_t __d,
  memory_order __m = memory_order_seq_cst) noexcept
      { return __atomic_fetch_sub(&_M_p, _M_type_size(__d), int(__m)); }

      inline __attribute__((__always_inline__)) __pointer_type
      fetch_sub(ptrdiff_t __d,
  memory_order __m = memory_order_seq_cst) volatile noexcept
      { return __atomic_fetch_sub(&_M_p, _M_type_size(__d), int(__m)); }
    };

  namespace __atomic_impl
  {


    template<typename _Tp>
      constexpr bool
      __maybe_has_padding()
      {



 return !__has_unique_object_representations(_Tp)
   && !is_same<_Tp, float>::value && !is_same<_Tp, double>::value;



      }

    template<typename _Tp>
      inline __attribute__((__always_inline__)) _Tp*
      __clear_padding(_Tp& __val) noexcept
      {
 auto* __ptr = std::__addressof(__val);

 if (__atomic_impl::__maybe_has_padding<_Tp>())
   __builtin_clear_padding(__ptr);

 return __ptr;
      }


    template<typename _Tp>
      using _Val = typename remove_volatile<_Tp>::type;

    template<typename _Tp>
      inline __attribute__((__always_inline__)) bool
      __compare_exchange(_Tp& __val, _Val<_Tp>& __e, _Val<_Tp>& __i,
    bool __is_weak,
    memory_order __s, memory_order __f) noexcept
      {
 do { if (std::__is_constant_evaluated() && !bool(__is_valid_cmpexch_failure_order(__f))) __builtin_unreachable(); } while (false);

 using _Vp = _Val<_Tp>;

 if (__atomic_impl::__maybe_has_padding<_Vp>())
   {


     alignas(_Vp) unsigned char __buf[sizeof(_Vp)];
     _Vp* __exp = ::new((void*)__buf) _Vp(__e);
     __atomic_impl::__clear_padding(*__exp);
     if (__atomic_compare_exchange(std::__addressof(__val), __exp,
       __atomic_impl::__clear_padding(__i),
       __is_weak, int(__s), int(__f)))
       return true;
     __builtin_memcpy(std::__addressof(__e), __exp, sizeof(_Vp));
     return false;
   }
 else
   return __atomic_compare_exchange(std::__addressof(__val),
        std::__addressof(__e),
        std::__addressof(__i),
        __is_weak, int(__s), int(__f));
      }
  }
# 2020 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/atomic_base.h" 3

}
# 34 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr_atomic.h" 2 3
# 51 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr_atomic.h" 3
#define _GLIBCXX_TSAN_MUTEX_DESTROY(X) 
#define _GLIBCXX_TSAN_MUTEX_TRY_LOCK(X) 
#define _GLIBCXX_TSAN_MUTEX_TRY_LOCK_FAILED(X) 
#define _GLIBCXX_TSAN_MUTEX_LOCKED(X) 
#define _GLIBCXX_TSAN_MUTEX_PRE_UNLOCK(X) 
#define _GLIBCXX_TSAN_MUTEX_POST_UNLOCK(X) 
#define _GLIBCXX_TSAN_MUTEX_PRE_SIGNAL(X) 
#define _GLIBCXX_TSAN_MUTEX_POST_SIGNAL(X) 


namespace std __attribute__ ((__visibility__ ("default")))
{

# 73 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr_atomic.h" 3
  struct _Sp_locker
  {
    _Sp_locker(const _Sp_locker&) = delete;
    _Sp_locker& operator=(const _Sp_locker&) = delete;


    explicit
    _Sp_locker(const void*) noexcept;
    _Sp_locker(const void*, const void*) noexcept;
    ~_Sp_locker();

  private:
    unsigned char _M_key1;
    unsigned char _M_key2;



  };
# 100 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr_atomic.h" 3
  template<typename _Tp, _Lock_policy _Lp>
    inline bool
    atomic_is_lock_free(const __shared_ptr<_Tp, _Lp>* __p)
    {

      return __gthread_active_p() == 0;



    }

  template<typename _Tp>
    inline bool
    atomic_is_lock_free(const shared_ptr<_Tp>* __p)
    { return std::atomic_is_lock_free<_Tp, __default_lock_policy>(__p); }
# 127 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr_atomic.h" 3
  template<typename _Tp>
    inline shared_ptr<_Tp>
    atomic_load_explicit(const shared_ptr<_Tp>* __p, memory_order)
    {
      _Sp_locker __lock{__p};
      return *__p;
    }

  template<typename _Tp>
    inline shared_ptr<_Tp>
    atomic_load(const shared_ptr<_Tp>* __p)
    { return std::atomic_load_explicit(__p, memory_order_seq_cst); }

  template<typename _Tp, _Lock_policy _Lp>
    inline __shared_ptr<_Tp, _Lp>
    atomic_load_explicit(const __shared_ptr<_Tp, _Lp>* __p, memory_order)
    {
      _Sp_locker __lock{__p};
      return *__p;
    }

  template<typename _Tp, _Lock_policy _Lp>
    inline __shared_ptr<_Tp, _Lp>
    atomic_load(const __shared_ptr<_Tp, _Lp>* __p)
    { return std::atomic_load_explicit(__p, memory_order_seq_cst); }
# 163 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr_atomic.h" 3
  template<typename _Tp>
    inline void
    atomic_store_explicit(shared_ptr<_Tp>* __p, shared_ptr<_Tp> __r,
     memory_order)
    {
      _Sp_locker __lock{__p};
      __p->swap(__r);
    }

  template<typename _Tp>
    inline void
    atomic_store(shared_ptr<_Tp>* __p, shared_ptr<_Tp> __r)
    { std::atomic_store_explicit(__p, std::move(__r), memory_order_seq_cst); }

  template<typename _Tp, _Lock_policy _Lp>
    inline void
    atomic_store_explicit(__shared_ptr<_Tp, _Lp>* __p,
     __shared_ptr<_Tp, _Lp> __r,
     memory_order)
    {
      _Sp_locker __lock{__p};
      __p->swap(__r);
    }

  template<typename _Tp, _Lock_policy _Lp>
    inline void
    atomic_store(__shared_ptr<_Tp, _Lp>* __p, __shared_ptr<_Tp, _Lp> __r)
    { std::atomic_store_explicit(__p, std::move(__r), memory_order_seq_cst); }
# 200 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr_atomic.h" 3
  template<typename _Tp>
    inline shared_ptr<_Tp>
    atomic_exchange_explicit(shared_ptr<_Tp>* __p, shared_ptr<_Tp> __r,
        memory_order)
    {
      _Sp_locker __lock{__p};
      __p->swap(__r);
      return __r;
    }

  template<typename _Tp>
    inline shared_ptr<_Tp>
    atomic_exchange(shared_ptr<_Tp>* __p, shared_ptr<_Tp> __r)
    {
      return std::atomic_exchange_explicit(__p, std::move(__r),
        memory_order_seq_cst);
    }

  template<typename _Tp, _Lock_policy _Lp>
    inline __shared_ptr<_Tp, _Lp>
    atomic_exchange_explicit(__shared_ptr<_Tp, _Lp>* __p,
        __shared_ptr<_Tp, _Lp> __r,
        memory_order)
    {
      _Sp_locker __lock{__p};
      __p->swap(__r);
      return __r;
    }

  template<typename _Tp, _Lock_policy _Lp>
    inline __shared_ptr<_Tp, _Lp>
    atomic_exchange(__shared_ptr<_Tp, _Lp>* __p, __shared_ptr<_Tp, _Lp> __r)
    {
      return std::atomic_exchange_explicit(__p, std::move(__r),
        memory_order_seq_cst);
    }
# 249 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr_atomic.h" 3
  template<typename _Tp>
    bool
    atomic_compare_exchange_strong_explicit(shared_ptr<_Tp>* __p,
         shared_ptr<_Tp>* __v,
         shared_ptr<_Tp> __w,
         memory_order,
         memory_order)
    {
      shared_ptr<_Tp> __x;
      _Sp_locker __lock{__p, __v};
      owner_less<shared_ptr<_Tp>> __less;
      if (*__p == *__v && !__less(*__p, *__v) && !__less(*__v, *__p))
 {
   __x = std::move(*__p);
   *__p = std::move(__w);
   return true;
 }
      __x = std::move(*__v);
      *__v = *__p;
      return false;
    }

  template<typename _Tp>
    inline bool
    atomic_compare_exchange_strong(shared_ptr<_Tp>* __p, shared_ptr<_Tp>* __v,
     shared_ptr<_Tp> __w)
    {
      return std::atomic_compare_exchange_strong_explicit(__p, __v,
   std::move(__w), memory_order_seq_cst, memory_order_seq_cst);
    }

  template<typename _Tp>
    inline bool
    atomic_compare_exchange_weak_explicit(shared_ptr<_Tp>* __p,
       shared_ptr<_Tp>* __v,
       shared_ptr<_Tp> __w,
       memory_order __success,
       memory_order __failure)
    {
      return std::atomic_compare_exchange_strong_explicit(__p, __v,
   std::move(__w), __success, __failure);
    }

  template<typename _Tp>
    inline bool
    atomic_compare_exchange_weak(shared_ptr<_Tp>* __p, shared_ptr<_Tp>* __v,
     shared_ptr<_Tp> __w)
    {
      return std::atomic_compare_exchange_weak_explicit(__p, __v,
   std::move(__w), memory_order_seq_cst, memory_order_seq_cst);
    }

  template<typename _Tp, _Lock_policy _Lp>
    bool
    atomic_compare_exchange_strong_explicit(__shared_ptr<_Tp, _Lp>* __p,
         __shared_ptr<_Tp, _Lp>* __v,
         __shared_ptr<_Tp, _Lp> __w,
         memory_order,
         memory_order)
    {
      __shared_ptr<_Tp, _Lp> __x;
      _Sp_locker __lock{__p, __v};
      owner_less<__shared_ptr<_Tp, _Lp>> __less;
      if (*__p == *__v && !__less(*__p, *__v) && !__less(*__v, *__p))
 {
   __x = std::move(*__p);
   *__p = std::move(__w);
   return true;
 }
      __x = std::move(*__v);
      *__v = *__p;
      return false;
    }

  template<typename _Tp, _Lock_policy _Lp>
    inline bool
    atomic_compare_exchange_strong(__shared_ptr<_Tp, _Lp>* __p,
       __shared_ptr<_Tp, _Lp>* __v,
       __shared_ptr<_Tp, _Lp> __w)
    {
      return std::atomic_compare_exchange_strong_explicit(__p, __v,
   std::move(__w), memory_order_seq_cst, memory_order_seq_cst);
    }

  template<typename _Tp, _Lock_policy _Lp>
    inline bool
    atomic_compare_exchange_weak_explicit(__shared_ptr<_Tp, _Lp>* __p,
       __shared_ptr<_Tp, _Lp>* __v,
       __shared_ptr<_Tp, _Lp> __w,
       memory_order __success,
       memory_order __failure)
    {
      return std::atomic_compare_exchange_strong_explicit(__p, __v,
   std::move(__w), __success, __failure);
    }

  template<typename _Tp, _Lock_policy _Lp>
    inline bool
    atomic_compare_exchange_weak(__shared_ptr<_Tp, _Lp>* __p,
     __shared_ptr<_Tp, _Lp>* __v,
     __shared_ptr<_Tp, _Lp> __w)
    {
      return std::atomic_compare_exchange_weak_explicit(__p, __v,
   std::move(__w), memory_order_seq_cst, memory_order_seq_cst);
    }
# 844 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/shared_ptr_atomic.h" 3

}
# 82 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/memory" 2 3




# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/backward/auto_ptr.h" 1 3
# 31 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/backward/auto_ptr.h" 3
#define _BACKWARD_AUTO_PTR_H 1




namespace std __attribute__ ((__visibility__ ("default")))
{

# 47 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/backward/auto_ptr.h" 3
  template<typename _Tp1>
    struct auto_ptr_ref
    {
      _Tp1* _M_ptr;

      explicit
      auto_ptr_ref(_Tp1* __p): _M_ptr(__p) { }
    } __attribute__ ((__deprecated__));

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
# 92 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/backward/auto_ptr.h" 3
  template<typename _Tp>
    class auto_ptr
    {
    private:
      _Tp* _M_ptr;

    public:

      typedef _Tp element_type;







      explicit
      auto_ptr(element_type* __p = 0) throw() : _M_ptr(__p) { }
# 118 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/backward/auto_ptr.h" 3
      auto_ptr(auto_ptr& __a) throw() : _M_ptr(__a.release()) { }
# 130 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/backward/auto_ptr.h" 3
      template<typename _Tp1>
        auto_ptr(auto_ptr<_Tp1>& __a) throw() : _M_ptr(__a.release()) { }
# 141 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/backward/auto_ptr.h" 3
      auto_ptr&
      operator=(auto_ptr& __a) throw()
      {
 reset(__a.release());
 return *this;
      }
# 158 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/backward/auto_ptr.h" 3
      template<typename _Tp1>
        auto_ptr&
        operator=(auto_ptr<_Tp1>& __a) throw()
        {
   reset(__a.release());
   return *this;
 }
# 176 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/backward/auto_ptr.h" 3
      ~auto_ptr() { delete _M_ptr; }
# 186 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/backward/auto_ptr.h" 3
      element_type&
      operator*() const throw()
      {
 do { if (std::__is_constant_evaluated() && !bool(_M_ptr != 0)) __builtin_unreachable(); } while (false);
 return *_M_ptr;
      }







      element_type*
      operator->() const throw()
      {
 do { if (std::__is_constant_evaluated() && !bool(_M_ptr != 0)) __builtin_unreachable(); } while (false);
 return _M_ptr;
      }
# 216 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/backward/auto_ptr.h" 3
      element_type*
      get() const throw() { return _M_ptr; }
# 230 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/backward/auto_ptr.h" 3
      element_type*
      release() throw()
      {
 element_type* __tmp = _M_ptr;
 _M_ptr = 0;
 return __tmp;
      }
# 245 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/backward/auto_ptr.h" 3
      void
      reset(element_type* __p = 0) throw()
      {
 if (__p != _M_ptr)
   {
     delete _M_ptr;
     _M_ptr = __p;
   }
      }
# 270 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/backward/auto_ptr.h" 3
      auto_ptr(auto_ptr_ref<element_type> __ref) throw()
      : _M_ptr(__ref._M_ptr) { }

      auto_ptr&
      operator=(auto_ptr_ref<element_type> __ref) throw()
      {
 if (__ref._M_ptr != this->get())
   {
     delete _M_ptr;
     _M_ptr = __ref._M_ptr;
   }
 return *this;
      }

      template<typename _Tp1>
        operator auto_ptr_ref<_Tp1>() throw()
        { return auto_ptr_ref<_Tp1>(this->release()); }

      template<typename _Tp1>
        operator auto_ptr<_Tp1>() throw()
        { return auto_ptr<_Tp1>(this->release()); }
    } __attribute__ ((__deprecated__ ("use '" "std::unique_ptr" "' instead")));



  template<>
    class auto_ptr<void>
    {
    public:
      typedef void element_type;
    } __attribute__ ((__deprecated__));



  template<_Lock_policy _Lp>
  template<typename _Tp>
    inline
    __shared_count<_Lp>::__shared_count(std::auto_ptr<_Tp>&& __r)
    : _M_pi(new _Sp_counted_ptr<_Tp*, _Lp>(__r.get()))
    { __r.release(); }

  template<typename _Tp, _Lock_policy _Lp>
  template<typename _Tp1, typename>
    inline
    __shared_ptr<_Tp, _Lp>::__shared_ptr(std::auto_ptr<_Tp1>&& __r)
    : _M_ptr(__r.get()), _M_refcount()
    {
     
      static_assert( sizeof(_Tp1) > 0, "incomplete type" );
      _Tp1* __tmp = __r.get();
      _M_refcount = __shared_count<_Lp>(std::move(__r));
      _M_enable_shared_from_this_with(__tmp);
    }

  template<typename _Tp>
  template<typename _Tp1, typename>
    inline
    shared_ptr<_Tp>::shared_ptr(std::auto_ptr<_Tp1>&& __r)
    : __shared_ptr<_Tp>(std::move(__r)) { }


  template<typename _Tp, typename _Dp>
  template<typename _Up, typename>
    inline
    unique_ptr<_Tp, _Dp>::unique_ptr(auto_ptr<_Up>&& __u) noexcept
    : _M_t(__u.release(), deleter_type()) { }


#pragma GCC diagnostic pop


}
# 87 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/memory" 2 3
# 95 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/memory" 3
namespace std __attribute__ ((__visibility__ ("default")))
{

# 113 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/memory" 3
enum class pointer_safety { relaxed, preferred, strict };


inline void
declare_reachable(void*) { }


template <typename _Tp>
  inline _Tp*
  undeclare_reachable(_Tp* __p) { return __p; }


inline void
declare_no_pointers(char*, size_t) { }


inline void
undeclare_no_pointers(char*, size_t) { }


inline pointer_safety
get_pointer_safety() noexcept { return pointer_safety::relaxed; }



}
# 33 "../harfbuzz-6.0.0/src/hb-meta.hh" 2
# 42 "../harfbuzz-6.0.0/src/hb-meta.hh"

# 42 "../harfbuzz-6.0.0/src/hb-meta.hh"
struct hb_empty_t {};


template<typename... Ts> struct _hb_void_t { typedef void type; };
template<typename... Ts> using hb_void_t = typename _hb_void_t<Ts...>::type;

template<typename Head, typename... Ts> struct _hb_head_t { typedef Head type; };
template<typename... Ts> using hb_head_t = typename _hb_head_t<Ts...>::type;

template <typename T, T v> struct hb_integral_constant { static constexpr T value = v; };
template <bool b> using hb_bool_constant = hb_integral_constant<bool, b>;
using hb_true_type = hb_bool_constant<true>;
using hb_false_type = hb_bool_constant<false>;


template <bool cond> struct static_assert_expr;
template <> struct static_assert_expr<true> : hb_false_type {};
#define static_assert_expr(C) static_assert_expr<C>::value



template <bool B, typename T = void> struct hb_enable_if {};
template <typename T> struct hb_enable_if<true, T> { typedef T type; };
#define hb_enable_if(Cond) typename hb_enable_if<(Cond)>::type* = nullptr

#define hb_requires(Cond) hb_enable_if((Cond))

template <typename T, typename T2> struct hb_is_same : hb_false_type {};
template <typename T> struct hb_is_same<T, T> : hb_true_type {};
#define hb_is_same(T,T2) hb_is_same<T, T2>::value



#define HB_RETURN(Ret,E) -> hb_head_t<Ret, decltype ((E))> { return (E); }
#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
#define HB_VOID_RETURN(E) -> hb_void_t<decltype ((E))> { (E); }

template <unsigned Pri> struct hb_priority : hb_priority<Pri - 1> {};
template <> struct hb_priority<0> {};
#define hb_prioritize hb_priority<16> ()

#define HB_FUNCOBJ(x) static_const x HB_UNUSED


template <typename T> struct hb_type_identity_t { typedef T type; };
template <typename T> using hb_type_identity = typename hb_type_identity_t<T>::type;

template <typename T> static inline T hb_declval ();
#define hb_declval(T) (hb_declval<T> ())

template <typename T> struct hb_match_const : hb_type_identity_t<T>, hb_false_type {};
template <typename T> struct hb_match_const<const T> : hb_type_identity_t<T>, hb_true_type {};
template <typename T> using hb_remove_const = typename hb_match_const<T>::type;

template <typename T> struct hb_match_reference : hb_type_identity_t<T>, hb_false_type {};
template <typename T> struct hb_match_reference<T &> : hb_type_identity_t<T>, hb_true_type {};
template <typename T> struct hb_match_reference<T &&> : hb_type_identity_t<T>, hb_true_type {};
template <typename T> using hb_remove_reference = typename hb_match_reference<T>::type;
template <typename T> auto _hb_try_add_lvalue_reference (hb_priority<1>) -> hb_type_identity<T&>;
template <typename T> auto _hb_try_add_lvalue_reference (hb_priority<0>) -> hb_type_identity<T>;
template <typename T> using hb_add_lvalue_reference = decltype (_hb_try_add_lvalue_reference<T> (hb_priority<16> ()));
template <typename T> auto _hb_try_add_rvalue_reference (hb_priority<1>) -> hb_type_identity<T&&>;
template <typename T> auto _hb_try_add_rvalue_reference (hb_priority<0>) -> hb_type_identity<T>;
template <typename T> using hb_add_rvalue_reference = decltype (_hb_try_add_rvalue_reference<T> (hb_priority<16> ()));

template <typename T> struct hb_match_pointer : hb_type_identity_t<T>, hb_false_type {};
template <typename T> struct hb_match_pointer<T *> : hb_type_identity_t<T>, hb_true_type {};
template <typename T> using hb_remove_pointer = typename hb_match_pointer<T>::type;
template <typename T> auto _hb_try_add_pointer (hb_priority<1>) -> hb_type_identity<hb_remove_reference<T>*>;
template <typename T> auto _hb_try_add_pointer (hb_priority<1>) -> hb_type_identity<T>;
template <typename T> using hb_add_pointer = decltype (_hb_try_add_pointer<T> (hb_priority<16> ()));


template <typename T> using hb_decay = typename std::decay<T>::type;

#define hb_is_convertible(From,To) std::is_convertible<From, To>::value

template <typename From, typename To>
using hb_is_cr_convertible = hb_bool_constant<
  hb_is_same<hb_decay<From>, hb_decay<To> >::value &&
  (!std::is_const<From>::value || std::is_const<To>::value) &&
  (!std::is_reference<To>::value || std::is_const<To>::value || std::is_reference<To>::value)
>;
#define hb_is_cr_convertible(From,To) hb_is_cr_convertible<From, To>::value


struct
{
  template <typename T> constexpr auto
  operator () (T&& v) const -> decltype ((std::forward<T> (v))) { return (std::forward<T> (v)); }

  template <typename T> constexpr auto
  operator () (T *v) const -> decltype ((*v)) { return (*v); }

  template <typename T> constexpr auto
  operator () (const hb::shared_ptr<T>& v) const -> decltype ((*v)) { return (*v); }

  template <typename T> constexpr auto
  operator () (hb::shared_ptr<T>& v) const -> decltype ((*v)) { return (*v); }

  template <typename T> constexpr auto
  operator () (const hb::unique_ptr<T>& v) const -> decltype ((*v)) { return (*v); }

  template <typename T> constexpr auto
  operator () (hb::unique_ptr<T>& v) const -> decltype ((*v)) { return (*v); }
}
static const hb_deref __attribute__((unused));

template <typename T>
struct hb_reference_wrapper
{
  hb_reference_wrapper (T v) : v (v) {}
  bool operator == (const hb_reference_wrapper& o) const { return v == o.v; }
  bool operator != (const hb_reference_wrapper& o) const { return v != o.v; }
  operator T () const { return v; }
  T get () const { return v; }
  T v;
};
template <typename T>
struct hb_reference_wrapper<T&>
{
  hb_reference_wrapper (T& v) : v (std::addressof (v)) {}
  bool operator == (const hb_reference_wrapper& o) const { return v == o.v; }
  bool operator != (const hb_reference_wrapper& o) const { return v != o.v; }
  operator T& () const { return *v; }
  T& get () const { return *v; }
  T* v;
};




template <typename T> struct hb_int_min;
template <> struct hb_int_min<char> : hb_integral_constant<char, 
# 175 "../harfbuzz-6.0.0/src/hb-meta.hh" 3 4
                                                                    0
# 175 "../harfbuzz-6.0.0/src/hb-meta.hh"
                                                                            > {};
template <> struct hb_int_min<signed char> : hb_integral_constant<signed char, 
# 176 "../harfbuzz-6.0.0/src/hb-meta.hh" 3 4
                                                                                (-0x7f - 1)
# 176 "../harfbuzz-6.0.0/src/hb-meta.hh"
                                                                                         > {};
template <> struct hb_int_min<unsigned char> : hb_integral_constant<unsigned char, 0> {};
template <> struct hb_int_min<signed short> : hb_integral_constant<signed short, 
# 178 "../harfbuzz-6.0.0/src/hb-meta.hh" 3 4
                                                                                  (-0x7fff - 1)
# 178 "../harfbuzz-6.0.0/src/hb-meta.hh"
                                                                                          > {};
template <> struct hb_int_min<unsigned short> : hb_integral_constant<unsigned short, 0> {};
template <> struct hb_int_min<signed int> : hb_integral_constant<signed int, 
# 180 "../harfbuzz-6.0.0/src/hb-meta.hh" 3 4
                                                                              (-0x7fffffff - 1)
# 180 "../harfbuzz-6.0.0/src/hb-meta.hh"
                                                                                     > {};
template <> struct hb_int_min<unsigned int> : hb_integral_constant<unsigned int, 0> {};
template <> struct hb_int_min<signed long> : hb_integral_constant<signed long, 
# 182 "../harfbuzz-6.0.0/src/hb-meta.hh" 3 4
                                                                                (-0x7fffffffffffffffL - 1L)
# 182 "../harfbuzz-6.0.0/src/hb-meta.hh"
                                                                                        > {};
template <> struct hb_int_min<unsigned long> : hb_integral_constant<unsigned long, 0> {};
template <> struct hb_int_min<signed long long> : hb_integral_constant<signed long long, 
# 184 "../harfbuzz-6.0.0/src/hb-meta.hh" 3 4
                                                                                         (-0x7fffffffffffffffLL -1)
# 184 "../harfbuzz-6.0.0/src/hb-meta.hh"
                                                                                                  > {};
template <> struct hb_int_min<unsigned long long> : hb_integral_constant<unsigned long long, 0> {};
template <typename T> struct hb_int_min<T *> : hb_integral_constant<T *, nullptr> {};
#define hb_int_min(T) hb_int_min<T>::value
template <typename T> struct hb_int_max;
template <> struct hb_int_max<char> : hb_integral_constant<char, 
# 189 "../harfbuzz-6.0.0/src/hb-meta.hh" 3 4
                                                                    (0x7f * 2 + 1)
# 189 "../harfbuzz-6.0.0/src/hb-meta.hh"
                                                                            > {};
template <> struct hb_int_max<signed char> : hb_integral_constant<signed char, 0x7f
# 190 "../harfbuzz-6.0.0/src/hb-meta.hh"
                                                                                         > {};
template <> struct hb_int_max<unsigned char> : hb_integral_constant<unsigned char, 
# 191 "../harfbuzz-6.0.0/src/hb-meta.hh" 3 4
                                                                                    (0x7f * 2 + 1)
# 191 "../harfbuzz-6.0.0/src/hb-meta.hh"
                                                                                             > {};
template <> struct hb_int_max<signed short> : hb_integral_constant<signed short, 0x7fff
# 192 "../harfbuzz-6.0.0/src/hb-meta.hh"
                                                                                          > {};
template <> struct hb_int_max<unsigned short> : hb_integral_constant<unsigned short, 
# 193 "../harfbuzz-6.0.0/src/hb-meta.hh" 3 4
                                                                                      (0x7fff * 2 + 1)
# 193 "../harfbuzz-6.0.0/src/hb-meta.hh"
                                                                                               > {};
template <> struct hb_int_max<signed int> : hb_integral_constant<signed int, 0x7fffffff
# 194 "../harfbuzz-6.0.0/src/hb-meta.hh"
                                                                                     > {};
template <> struct hb_int_max<unsigned int> : hb_integral_constant<unsigned int, 
# 195 "../harfbuzz-6.0.0/src/hb-meta.hh" 3 4
                                                                                  (0x7fffffff * 2U + 1U)
# 195 "../harfbuzz-6.0.0/src/hb-meta.hh"
                                                                                          > {};
template <> struct hb_int_max<signed long> : hb_integral_constant<signed long, 0x7fffffffffffffffL
# 196 "../harfbuzz-6.0.0/src/hb-meta.hh"
                                                                                        > {};
template <> struct hb_int_max<unsigned long> : hb_integral_constant<unsigned long, 
# 197 "../harfbuzz-6.0.0/src/hb-meta.hh" 3 4
                                                                                    (0x7fffffffffffffffL * 2UL + 1UL)
# 197 "../harfbuzz-6.0.0/src/hb-meta.hh"
                                                                                             > {};
template <> struct hb_int_max<signed long long> : hb_integral_constant<signed long long, 0x7fffffffffffffffLL
# 198 "../harfbuzz-6.0.0/src/hb-meta.hh"
                                                                                                  > {};
template <> struct hb_int_max<unsigned long long> : hb_integral_constant<unsigned long long, 
# 199 "../harfbuzz-6.0.0/src/hb-meta.hh" 3 4
                                                                                            (0x7fffffffffffffffLL * 2ULL + 1)
# 199 "../harfbuzz-6.0.0/src/hb-meta.hh"
                                                                                                      > {};
#define hb_int_max(T) hb_int_max<T>::value
# 209 "../harfbuzz-6.0.0/src/hb-meta.hh"
#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
#define hb_is_trivially_copy_assignable(T) std::is_trivially_copy_assignable<T>::value
#define hb_is_trivially_constructible(T) std::is_trivially_constructible<T>::value
#define hb_is_trivially_copy_constructible(T) std::is_trivially_copy_constructible<T>::value
#define hb_is_trivially_destructible(T) std::is_trivially_destructible<T>::value




#define HB_DELETE_COPY_ASSIGN(TypeName) TypeName(const TypeName&) = delete; void operator=(const TypeName&) = delete


#define HB_DELETE_CREATE_COPY_ASSIGN(TypeName) TypeName() = delete; TypeName(const TypeName&) = delete; void operator=(const TypeName&) = delete
# 230 "../harfbuzz-6.0.0/src/hb-meta.hh"
template <typename T, typename>
struct _hb_unwrap_type : hb_type_identity_t<T> {};
template <typename T>
struct _hb_unwrap_type<T, hb_void_t<typename T::type>> : _hb_unwrap_type<typename T::type, void> {};
template <typename T>
using hb_unwrap_type = _hb_unwrap_type<T, void>;
#define hb_unwrap_type(T) typename hb_unwrap_type<T>::type
# 478 "../harfbuzz-6.0.0/src/hb.hh" 2
# 1 "../harfbuzz-6.0.0/src/hb-mutex.hh" 1
# 33 "../harfbuzz-6.0.0/src/hb-mutex.hh"
#define HB_MUTEX_HH 
# 53 "../harfbuzz-6.0.0/src/hb-mutex.hh"
typedef pthread_mutex_t hb_mutex_impl_t;
#define hb_mutex_impl_init(M) pthread_mutex_init (M, nullptr)
#define hb_mutex_impl_lock(M) pthread_mutex_lock (M)
#define hb_mutex_impl_unlock(M) pthread_mutex_unlock (M)
#define hb_mutex_impl_finish(M) pthread_mutex_destroy (M)
# 95 "../harfbuzz-6.0.0/src/hb-mutex.hh"
struct hb_mutex_t
{

  alignas(hb_mutex_impl_t) char m[sizeof (hb_mutex_impl_t)];

  hb_mutex_t () { init (); }
  ~hb_mutex_t () { fini (); }

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wcast-align"
  void init () { pthread_mutex_init ((hb_mutex_impl_t *) m, nullptr); }
  void lock () { pthread_mutex_lock ((hb_mutex_impl_t *) m); }
  void unlock () { pthread_mutex_unlock ((hb_mutex_impl_t *) m); }
  void fini () { pthread_mutex_destroy ((hb_mutex_impl_t *) m); }
#pragma GCC diagnostic pop
};

struct hb_lock_t
{
  hb_lock_t (hb_mutex_t &mutex_) : mutex (&mutex_) { mutex->lock (); }
  hb_lock_t (hb_mutex_t *mutex_) : mutex (mutex_) { if (mutex) mutex->lock (); }
  ~hb_lock_t () { if (mutex) mutex->unlock (); }
  private:
  hb_mutex_t *mutex;
};
# 479 "../harfbuzz-6.0.0/src/hb.hh" 2
# 1 "../harfbuzz-6.0.0/src/hb-number.hh" 1
# 27 "../harfbuzz-6.0.0/src/hb-number.hh"
#define HB_NUMBER_HH 

__attribute__((__visibility__("hidden"))) bool
hb_parse_int (const char **pp, const char *end, int *pv,
       bool whole_buffer = false);

__attribute__((__visibility__("hidden"))) bool
hb_parse_uint (const char **pp, const char *end, unsigned int *pv,
        bool whole_buffer = false, int base = 10);

__attribute__((__visibility__("hidden"))) bool
hb_parse_double (const char **pp, const char *end, double *pv,
   bool whole_buffer = false);
# 480 "../harfbuzz-6.0.0/src/hb.hh" 2
# 1 "../harfbuzz-6.0.0/src/hb-atomic.hh" 1
# 33 "../harfbuzz-6.0.0/src/hb-atomic.hh"
#define HB_ATOMIC_HH 
# 57 "../harfbuzz-6.0.0/src/hb-atomic.hh"
#define _hb_memory_barrier() __sync_synchronize ()

#define hb_atomic_int_impl_add(AI,V) __atomic_fetch_add ((AI), (V), __ATOMIC_ACQ_REL)
#define hb_atomic_int_impl_set_relaxed(AI,V) __atomic_store_n ((AI), (V), __ATOMIC_RELAXED)
#define hb_atomic_int_impl_set(AI,V) __atomic_store_n ((AI), (V), __ATOMIC_RELEASE)
#define hb_atomic_int_impl_get_relaxed(AI) __atomic_load_n ((AI), __ATOMIC_RELAXED)
#define hb_atomic_int_impl_get(AI) __atomic_load_n ((AI), __ATOMIC_ACQUIRE)

#define hb_atomic_ptr_impl_set_relaxed(P,V) __atomic_store_n ((P), (V), __ATOMIC_RELAXED)
#define hb_atomic_ptr_impl_get_relaxed(P) __atomic_load_n ((P), __ATOMIC_RELAXED)
#define hb_atomic_ptr_impl_get(P) __atomic_load_n ((P), __ATOMIC_ACQUIRE)
static inline bool
_hb_atomic_ptr_impl_cmplexch (const void **P, const void *O_, const void *N)
{
  const void *O = O_;
  return __atomic_compare_exchange_n ((void **) P, (void **) &O, (void *) N, true, 4, 0);
}
#define hb_atomic_ptr_impl_cmpexch(P,O,N) _hb_atomic_ptr_impl_cmplexch ((const void **) (P), (O), (N))
# 118 "../harfbuzz-6.0.0/src/hb-atomic.hh"
# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/atomic" 1 3
# 33 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/atomic" 3
#define _GLIBCXX_ATOMIC 1

       
# 36 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/atomic" 3








# 43 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/atomic" 3
namespace std __attribute__ ((__visibility__ ("default")))
{

# 56 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/atomic" 3
  template<typename _Tp>
    struct atomic;



  template<>
  struct atomic<bool>
  {
    using value_type = bool;

  private:
    __atomic_base<bool> _M_base;

  public:
    atomic() noexcept = default;
    ~atomic() noexcept = default;
    atomic(const atomic&) = delete;
    atomic& operator=(const atomic&) = delete;
    atomic& operator=(const atomic&) volatile = delete;

    constexpr atomic(bool __i) noexcept : _M_base(__i) { }

    bool
    operator=(bool __i) noexcept
    { return _M_base.operator=(__i); }

    bool
    operator=(bool __i) volatile noexcept
    { return _M_base.operator=(__i); }

    operator bool() const noexcept
    { return _M_base.load(); }

    operator bool() const volatile noexcept
    { return _M_base.load(); }

    bool
    is_lock_free() const noexcept { return _M_base.is_lock_free(); }

    bool
    is_lock_free() const volatile noexcept { return _M_base.is_lock_free(); }





    void
    store(bool __i, memory_order __m = memory_order_seq_cst) noexcept
    { _M_base.store(__i, __m); }

    void
    store(bool __i, memory_order __m = memory_order_seq_cst) volatile noexcept
    { _M_base.store(__i, __m); }

    bool
    load(memory_order __m = memory_order_seq_cst) const noexcept
    { return _M_base.load(__m); }

    bool
    load(memory_order __m = memory_order_seq_cst) const volatile noexcept
    { return _M_base.load(__m); }

    bool
    exchange(bool __i, memory_order __m = memory_order_seq_cst) noexcept
    { return _M_base.exchange(__i, __m); }

    bool
    exchange(bool __i,
      memory_order __m = memory_order_seq_cst) volatile noexcept
    { return _M_base.exchange(__i, __m); }

    bool
    compare_exchange_weak(bool& __i1, bool __i2, memory_order __m1,
     memory_order __m2) noexcept
    { return _M_base.compare_exchange_weak(__i1, __i2, __m1, __m2); }

    bool
    compare_exchange_weak(bool& __i1, bool __i2, memory_order __m1,
     memory_order __m2) volatile noexcept
    { return _M_base.compare_exchange_weak(__i1, __i2, __m1, __m2); }

    bool
    compare_exchange_weak(bool& __i1, bool __i2,
     memory_order __m = memory_order_seq_cst) noexcept
    { return _M_base.compare_exchange_weak(__i1, __i2, __m); }

    bool
    compare_exchange_weak(bool& __i1, bool __i2,
       memory_order __m = memory_order_seq_cst) volatile noexcept
    { return _M_base.compare_exchange_weak(__i1, __i2, __m); }

    bool
    compare_exchange_strong(bool& __i1, bool __i2, memory_order __m1,
       memory_order __m2) noexcept
    { return _M_base.compare_exchange_strong(__i1, __i2, __m1, __m2); }

    bool
    compare_exchange_strong(bool& __i1, bool __i2, memory_order __m1,
       memory_order __m2) volatile noexcept
    { return _M_base.compare_exchange_strong(__i1, __i2, __m1, __m2); }

    bool
    compare_exchange_strong(bool& __i1, bool __i2,
       memory_order __m = memory_order_seq_cst) noexcept
    { return _M_base.compare_exchange_strong(__i1, __i2, __m); }

    bool
    compare_exchange_strong(bool& __i1, bool __i2,
      memory_order __m = memory_order_seq_cst) volatile noexcept
    { return _M_base.compare_exchange_strong(__i1, __i2, __m); }
# 182 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/atomic" 3
  };





#define _GLIBCXX20_INIT(I) 
# 197 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/atomic" 3
  template<typename _Tp>
    struct atomic
    {
      using value_type = _Tp;

    private:

      static constexpr int _S_min_alignment
 = (sizeof(_Tp) & (sizeof(_Tp) - 1)) || sizeof(_Tp) > 16
 ? 0 : sizeof(_Tp);

      static constexpr int _S_alignment
        = _S_min_alignment > alignof(_Tp) ? _S_min_alignment : alignof(_Tp);

      alignas(_S_alignment) _Tp _M_i ;

      static_assert(__is_trivially_copyable(_Tp),
      "std::atomic requires a trivially copyable type");

      static_assert(sizeof(_Tp) > 0,
      "Incomplete or zero-sized types are not supported");
# 226 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/atomic" 3
    public:
      atomic() = default;
      ~atomic() noexcept = default;
      atomic(const atomic&) = delete;
      atomic& operator=(const atomic&) = delete;
      atomic& operator=(const atomic&) volatile = delete;

      constexpr atomic(_Tp __i) noexcept : _M_i(__i)
      {




      }

      operator _Tp() const noexcept
      { return load(); }

      operator _Tp() const volatile noexcept
      { return load(); }

      _Tp
      operator=(_Tp __i) noexcept
      { store(__i); return __i; }

      _Tp
      operator=(_Tp __i) volatile noexcept
      { store(__i); return __i; }

      bool
      is_lock_free() const noexcept
      {

 return __atomic_is_lock_free(sizeof(_M_i),
     reinterpret_cast<void *>(-_S_alignment));
      }

      bool
      is_lock_free() const volatile noexcept
      {

 return __atomic_is_lock_free(sizeof(_M_i),
     reinterpret_cast<void *>(-_S_alignment));
      }






      void
      store(_Tp __i, memory_order __m = memory_order_seq_cst) noexcept
      {
 __atomic_store(std::__addressof(_M_i),
         __atomic_impl::__clear_padding(__i),
         int(__m));
      }

      void
      store(_Tp __i, memory_order __m = memory_order_seq_cst) volatile noexcept
      {
 __atomic_store(std::__addressof(_M_i),
         __atomic_impl::__clear_padding(__i),
         int(__m));
      }

      _Tp
      load(memory_order __m = memory_order_seq_cst) const noexcept
      {
 alignas(_Tp) unsigned char __buf[sizeof(_Tp)];
 _Tp* __ptr = reinterpret_cast<_Tp*>(__buf);
 __atomic_load(std::__addressof(_M_i), __ptr, int(__m));
 return *__ptr;
      }

      _Tp
      load(memory_order __m = memory_order_seq_cst) const volatile noexcept
      {
        alignas(_Tp) unsigned char __buf[sizeof(_Tp)];
 _Tp* __ptr = reinterpret_cast<_Tp*>(__buf);
 __atomic_load(std::__addressof(_M_i), __ptr, int(__m));
 return *__ptr;
      }

      _Tp
      exchange(_Tp __i, memory_order __m = memory_order_seq_cst) noexcept
      {
        alignas(_Tp) unsigned char __buf[sizeof(_Tp)];
 _Tp* __ptr = reinterpret_cast<_Tp*>(__buf);
 __atomic_exchange(std::__addressof(_M_i),
     __atomic_impl::__clear_padding(__i),
     __ptr, int(__m));
 return *__ptr;
      }

      _Tp
      exchange(_Tp __i,
        memory_order __m = memory_order_seq_cst) volatile noexcept
      {
        alignas(_Tp) unsigned char __buf[sizeof(_Tp)];
 _Tp* __ptr = reinterpret_cast<_Tp*>(__buf);
 __atomic_exchange(std::__addressof(_M_i),
     __atomic_impl::__clear_padding(__i),
     __ptr, int(__m));
 return *__ptr;
      }

      bool
      compare_exchange_weak(_Tp& __e, _Tp __i, memory_order __s,
       memory_order __f) noexcept
      {
 return __atomic_impl::__compare_exchange(_M_i, __e, __i, true,
       __s, __f);
      }

      bool
      compare_exchange_weak(_Tp& __e, _Tp __i, memory_order __s,
       memory_order __f) volatile noexcept
      {
 return __atomic_impl::__compare_exchange(_M_i, __e, __i, true,
       __s, __f);
      }

      bool
      compare_exchange_weak(_Tp& __e, _Tp __i,
       memory_order __m = memory_order_seq_cst) noexcept
      { return compare_exchange_weak(__e, __i, __m,
                                     __cmpexch_failure_order(__m)); }

      bool
      compare_exchange_weak(_Tp& __e, _Tp __i,
       memory_order __m = memory_order_seq_cst) volatile noexcept
      { return compare_exchange_weak(__e, __i, __m,
                                     __cmpexch_failure_order(__m)); }

      bool
      compare_exchange_strong(_Tp& __e, _Tp __i, memory_order __s,
         memory_order __f) noexcept
      {
 return __atomic_impl::__compare_exchange(_M_i, __e, __i, false,
       __s, __f);
      }

      bool
      compare_exchange_strong(_Tp& __e, _Tp __i, memory_order __s,
         memory_order __f) volatile noexcept
      {
 return __atomic_impl::__compare_exchange(_M_i, __e, __i, false,
       __s, __f);
      }

      bool
      compare_exchange_strong(_Tp& __e, _Tp __i,
          memory_order __m = memory_order_seq_cst) noexcept
      { return compare_exchange_strong(__e, __i, __m,
                                       __cmpexch_failure_order(__m)); }

      bool
      compare_exchange_strong(_Tp& __e, _Tp __i,
       memory_order __m = memory_order_seq_cst) volatile noexcept
      { return compare_exchange_strong(__e, __i, __m,
                                       __cmpexch_failure_order(__m)); }
# 408 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/atomic" 3
    };
#undef _GLIBCXX20_INIT


  template<typename _Tp>
    struct atomic<_Tp*>
    {
      using value_type = _Tp*;
      using difference_type = ptrdiff_t;

      typedef _Tp* __pointer_type;
      typedef __atomic_base<_Tp*> __base_type;
      __base_type _M_b;

      atomic() noexcept = default;
      ~atomic() noexcept = default;
      atomic(const atomic&) = delete;
      atomic& operator=(const atomic&) = delete;
      atomic& operator=(const atomic&) volatile = delete;

      constexpr atomic(__pointer_type __p) noexcept : _M_b(__p) { }

      operator __pointer_type() const noexcept
      { return __pointer_type(_M_b); }

      operator __pointer_type() const volatile noexcept
      { return __pointer_type(_M_b); }

      __pointer_type
      operator=(__pointer_type __p) noexcept
      { return _M_b.operator=(__p); }

      __pointer_type
      operator=(__pointer_type __p) volatile noexcept
      { return _M_b.operator=(__p); }

      __pointer_type
      operator++(int) noexcept
      {



 return _M_b++;
      }

      __pointer_type
      operator++(int) volatile noexcept
      {



 return _M_b++;
      }

      __pointer_type
      operator--(int) noexcept
      {



 return _M_b--;
      }

      __pointer_type
      operator--(int) volatile noexcept
      {



 return _M_b--;
      }

      __pointer_type
      operator++() noexcept
      {



 return ++_M_b;
      }

      __pointer_type
      operator++() volatile noexcept
      {



 return ++_M_b;
      }

      __pointer_type
      operator--() noexcept
      {



 return --_M_b;
      }

      __pointer_type
      operator--() volatile noexcept
      {



 return --_M_b;
      }

      __pointer_type
      operator+=(ptrdiff_t __d) noexcept
      {



 return _M_b.operator+=(__d);
      }

      __pointer_type
      operator+=(ptrdiff_t __d) volatile noexcept
      {



 return _M_b.operator+=(__d);
      }

      __pointer_type
      operator-=(ptrdiff_t __d) noexcept
      {



 return _M_b.operator-=(__d);
      }

      __pointer_type
      operator-=(ptrdiff_t __d) volatile noexcept
      {



 return _M_b.operator-=(__d);
      }

      bool
      is_lock_free() const noexcept
      { return _M_b.is_lock_free(); }

      bool
      is_lock_free() const volatile noexcept
      { return _M_b.is_lock_free(); }






      void
      store(__pointer_type __p,
     memory_order __m = memory_order_seq_cst) noexcept
      { return _M_b.store(__p, __m); }

      void
      store(__pointer_type __p,
     memory_order __m = memory_order_seq_cst) volatile noexcept
      { return _M_b.store(__p, __m); }

      __pointer_type
      load(memory_order __m = memory_order_seq_cst) const noexcept
      { return _M_b.load(__m); }

      __pointer_type
      load(memory_order __m = memory_order_seq_cst) const volatile noexcept
      { return _M_b.load(__m); }

      __pointer_type
      exchange(__pointer_type __p,
        memory_order __m = memory_order_seq_cst) noexcept
      { return _M_b.exchange(__p, __m); }

      __pointer_type
      exchange(__pointer_type __p,
        memory_order __m = memory_order_seq_cst) volatile noexcept
      { return _M_b.exchange(__p, __m); }

      bool
      compare_exchange_weak(__pointer_type& __p1, __pointer_type __p2,
       memory_order __m1, memory_order __m2) noexcept
      { return _M_b.compare_exchange_weak(__p1, __p2, __m1, __m2); }

      bool
      compare_exchange_weak(__pointer_type& __p1, __pointer_type __p2,
       memory_order __m1,
       memory_order __m2) volatile noexcept
      { return _M_b.compare_exchange_weak(__p1, __p2, __m1, __m2); }

      bool
      compare_exchange_weak(__pointer_type& __p1, __pointer_type __p2,
       memory_order __m = memory_order_seq_cst) noexcept
      {
 return compare_exchange_weak(__p1, __p2, __m,
         __cmpexch_failure_order(__m));
      }

      bool
      compare_exchange_weak(__pointer_type& __p1, __pointer_type __p2,
      memory_order __m = memory_order_seq_cst) volatile noexcept
      {
 return compare_exchange_weak(__p1, __p2, __m,
         __cmpexch_failure_order(__m));
      }

      bool
      compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2,
         memory_order __m1, memory_order __m2) noexcept
      { return _M_b.compare_exchange_strong(__p1, __p2, __m1, __m2); }

      bool
      compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2,
         memory_order __m1,
         memory_order __m2) volatile noexcept
      { return _M_b.compare_exchange_strong(__p1, __p2, __m1, __m2); }

      bool
      compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2,
         memory_order __m = memory_order_seq_cst) noexcept
      {
 return _M_b.compare_exchange_strong(__p1, __p2, __m,
         __cmpexch_failure_order(__m));
      }

      bool
      compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2,
      memory_order __m = memory_order_seq_cst) volatile noexcept
      {
 return _M_b.compare_exchange_strong(__p1, __p2, __m,
         __cmpexch_failure_order(__m));
      }
# 663 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/atomic" 3
      __pointer_type
      fetch_add(ptrdiff_t __d,
  memory_order __m = memory_order_seq_cst) noexcept
      {



 return _M_b.fetch_add(__d, __m);
      }

      __pointer_type
      fetch_add(ptrdiff_t __d,
  memory_order __m = memory_order_seq_cst) volatile noexcept
      {



 return _M_b.fetch_add(__d, __m);
      }

      __pointer_type
      fetch_sub(ptrdiff_t __d,
  memory_order __m = memory_order_seq_cst) noexcept
      {



 return _M_b.fetch_sub(__d, __m);
      }

      __pointer_type
      fetch_sub(ptrdiff_t __d,
  memory_order __m = memory_order_seq_cst) volatile noexcept
      {



 return _M_b.fetch_sub(__d, __m);
      }
    };



  template<>
    struct atomic<char> : __atomic_base<char>
    {
      typedef char __integral_type;
      typedef __atomic_base<char> __base_type;

      atomic() noexcept = default;
      ~atomic() noexcept = default;
      atomic(const atomic&) = delete;
      atomic& operator=(const atomic&) = delete;
      atomic& operator=(const atomic&) volatile = delete;

      constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }

      using __base_type::operator __integral_type;
      using __base_type::operator=;




    };


  template<>
    struct atomic<signed char> : __atomic_base<signed char>
    {
      typedef signed char __integral_type;
      typedef __atomic_base<signed char> __base_type;

      atomic() noexcept= default;
      ~atomic() noexcept = default;
      atomic(const atomic&) = delete;
      atomic& operator=(const atomic&) = delete;
      atomic& operator=(const atomic&) volatile = delete;

      constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }

      using __base_type::operator __integral_type;
      using __base_type::operator=;




    };


  template<>
    struct atomic<unsigned char> : __atomic_base<unsigned char>
    {
      typedef unsigned char __integral_type;
      typedef __atomic_base<unsigned char> __base_type;

      atomic() noexcept= default;
      ~atomic() noexcept = default;
      atomic(const atomic&) = delete;
      atomic& operator=(const atomic&) = delete;
      atomic& operator=(const atomic&) volatile = delete;

      constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }

      using __base_type::operator __integral_type;
      using __base_type::operator=;




    };


  template<>
    struct atomic<short> : __atomic_base<short>
    {
      typedef short __integral_type;
      typedef __atomic_base<short> __base_type;

      atomic() noexcept = default;
      ~atomic() noexcept = default;
      atomic(const atomic&) = delete;
      atomic& operator=(const atomic&) = delete;
      atomic& operator=(const atomic&) volatile = delete;

      constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }

      using __base_type::operator __integral_type;
      using __base_type::operator=;




    };


  template<>
    struct atomic<unsigned short> : __atomic_base<unsigned short>
    {
      typedef unsigned short __integral_type;
      typedef __atomic_base<unsigned short> __base_type;

      atomic() noexcept = default;
      ~atomic() noexcept = default;
      atomic(const atomic&) = delete;
      atomic& operator=(const atomic&) = delete;
      atomic& operator=(const atomic&) volatile = delete;

      constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }

      using __base_type::operator __integral_type;
      using __base_type::operator=;




    };


  template<>
    struct atomic<int> : __atomic_base<int>
    {
      typedef int __integral_type;
      typedef __atomic_base<int> __base_type;

      atomic() noexcept = default;
      ~atomic() noexcept = default;
      atomic(const atomic&) = delete;
      atomic& operator=(const atomic&) = delete;
      atomic& operator=(const atomic&) volatile = delete;

      constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }

      using __base_type::operator __integral_type;
      using __base_type::operator=;




    };


  template<>
    struct atomic<unsigned int> : __atomic_base<unsigned int>
    {
      typedef unsigned int __integral_type;
      typedef __atomic_base<unsigned int> __base_type;

      atomic() noexcept = default;
      ~atomic() noexcept = default;
      atomic(const atomic&) = delete;
      atomic& operator=(const atomic&) = delete;
      atomic& operator=(const atomic&) volatile = delete;

      constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }

      using __base_type::operator __integral_type;
      using __base_type::operator=;




    };


  template<>
    struct atomic<long> : __atomic_base<long>
    {
      typedef long __integral_type;
      typedef __atomic_base<long> __base_type;

      atomic() noexcept = default;
      ~atomic() noexcept = default;
      atomic(const atomic&) = delete;
      atomic& operator=(const atomic&) = delete;
      atomic& operator=(const atomic&) volatile = delete;

      constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }

      using __base_type::operator __integral_type;
      using __base_type::operator=;




    };


  template<>
    struct atomic<unsigned long> : __atomic_base<unsigned long>
    {
      typedef unsigned long __integral_type;
      typedef __atomic_base<unsigned long> __base_type;

      atomic() noexcept = default;
      ~atomic() noexcept = default;
      atomic(const atomic&) = delete;
      atomic& operator=(const atomic&) = delete;
      atomic& operator=(const atomic&) volatile = delete;

      constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }

      using __base_type::operator __integral_type;
      using __base_type::operator=;




    };


  template<>
    struct atomic<long long> : __atomic_base<long long>
    {
      typedef long long __integral_type;
      typedef __atomic_base<long long> __base_type;

      atomic() noexcept = default;
      ~atomic() noexcept = default;
      atomic(const atomic&) = delete;
      atomic& operator=(const atomic&) = delete;
      atomic& operator=(const atomic&) volatile = delete;

      constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }

      using __base_type::operator __integral_type;
      using __base_type::operator=;




    };


  template<>
    struct atomic<unsigned long long> : __atomic_base<unsigned long long>
    {
      typedef unsigned long long __integral_type;
      typedef __atomic_base<unsigned long long> __base_type;

      atomic() noexcept = default;
      ~atomic() noexcept = default;
      atomic(const atomic&) = delete;
      atomic& operator=(const atomic&) = delete;
      atomic& operator=(const atomic&) volatile = delete;

      constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }

      using __base_type::operator __integral_type;
      using __base_type::operator=;




    };


  template<>
    struct atomic<wchar_t> : __atomic_base<wchar_t>
    {
      typedef wchar_t __integral_type;
      typedef __atomic_base<wchar_t> __base_type;

      atomic() noexcept = default;
      ~atomic() noexcept = default;
      atomic(const atomic&) = delete;
      atomic& operator=(const atomic&) = delete;
      atomic& operator=(const atomic&) volatile = delete;

      constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }

      using __base_type::operator __integral_type;
      using __base_type::operator=;




    };
# 1008 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/atomic" 3
  template<>
    struct atomic<char16_t> : __atomic_base<char16_t>
    {
      typedef char16_t __integral_type;
      typedef __atomic_base<char16_t> __base_type;

      atomic() noexcept = default;
      ~atomic() noexcept = default;
      atomic(const atomic&) = delete;
      atomic& operator=(const atomic&) = delete;
      atomic& operator=(const atomic&) volatile = delete;

      constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }

      using __base_type::operator __integral_type;
      using __base_type::operator=;





    };


  template<>
    struct atomic<char32_t> : __atomic_base<char32_t>
    {
      typedef char32_t __integral_type;
      typedef __atomic_base<char32_t> __base_type;

      atomic() noexcept = default;
      ~atomic() noexcept = default;
      atomic(const atomic&) = delete;
      atomic& operator=(const atomic&) = delete;
      atomic& operator=(const atomic&) volatile = delete;

      constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }

      using __base_type::operator __integral_type;
      using __base_type::operator=;





    };



  typedef atomic<bool> atomic_bool;


  typedef atomic<char> atomic_char;


  typedef atomic<signed char> atomic_schar;


  typedef atomic<unsigned char> atomic_uchar;


  typedef atomic<short> atomic_short;


  typedef atomic<unsigned short> atomic_ushort;


  typedef atomic<int> atomic_int;


  typedef atomic<unsigned int> atomic_uint;


  typedef atomic<long> atomic_long;


  typedef atomic<unsigned long> atomic_ulong;


  typedef atomic<long long> atomic_llong;


  typedef atomic<unsigned long long> atomic_ullong;


  typedef atomic<wchar_t> atomic_wchar_t;







  typedef atomic<char16_t> atomic_char16_t;


  typedef atomic<char32_t> atomic_char32_t;






  typedef atomic<int8_t> atomic_int8_t;


  typedef atomic<uint8_t> atomic_uint8_t;


  typedef atomic<int16_t> atomic_int16_t;


  typedef atomic<uint16_t> atomic_uint16_t;


  typedef atomic<int32_t> atomic_int32_t;


  typedef atomic<uint32_t> atomic_uint32_t;


  typedef atomic<int64_t> atomic_int64_t;


  typedef atomic<uint64_t> atomic_uint64_t;



  typedef atomic<int_least8_t> atomic_int_least8_t;


  typedef atomic<uint_least8_t> atomic_uint_least8_t;


  typedef atomic<int_least16_t> atomic_int_least16_t;


  typedef atomic<uint_least16_t> atomic_uint_least16_t;


  typedef atomic<int_least32_t> atomic_int_least32_t;


  typedef atomic<uint_least32_t> atomic_uint_least32_t;


  typedef atomic<int_least64_t> atomic_int_least64_t;


  typedef atomic<uint_least64_t> atomic_uint_least64_t;



  typedef atomic<int_fast8_t> atomic_int_fast8_t;


  typedef atomic<uint_fast8_t> atomic_uint_fast8_t;


  typedef atomic<int_fast16_t> atomic_int_fast16_t;


  typedef atomic<uint_fast16_t> atomic_uint_fast16_t;


  typedef atomic<int_fast32_t> atomic_int_fast32_t;


  typedef atomic<uint_fast32_t> atomic_uint_fast32_t;


  typedef atomic<int_fast64_t> atomic_int_fast64_t;


  typedef atomic<uint_fast64_t> atomic_uint_fast64_t;




  typedef atomic<intptr_t> atomic_intptr_t;


  typedef atomic<uintptr_t> atomic_uintptr_t;


  typedef atomic<size_t> atomic_size_t;


  typedef atomic<ptrdiff_t> atomic_ptrdiff_t;



  typedef atomic<intmax_t> atomic_intmax_t;


  typedef atomic<uintmax_t> atomic_uintmax_t;



  inline bool
  atomic_flag_test_and_set_explicit(atomic_flag* __a,
        memory_order __m) noexcept
  { return __a->test_and_set(__m); }

  inline bool
  atomic_flag_test_and_set_explicit(volatile atomic_flag* __a,
        memory_order __m) noexcept
  { return __a->test_and_set(__m); }

  inline void
  atomic_flag_clear_explicit(atomic_flag* __a, memory_order __m) noexcept
  { __a->clear(__m); }

  inline void
  atomic_flag_clear_explicit(volatile atomic_flag* __a,
        memory_order __m) noexcept
  { __a->clear(__m); }

  inline bool
  atomic_flag_test_and_set(atomic_flag* __a) noexcept
  { return atomic_flag_test_and_set_explicit(__a, memory_order_seq_cst); }

  inline bool
  atomic_flag_test_and_set(volatile atomic_flag* __a) noexcept
  { return atomic_flag_test_and_set_explicit(__a, memory_order_seq_cst); }

  inline void
  atomic_flag_clear(atomic_flag* __a) noexcept
  { atomic_flag_clear_explicit(__a, memory_order_seq_cst); }

  inline void
  atomic_flag_clear(volatile atomic_flag* __a) noexcept
  { atomic_flag_clear_explicit(__a, memory_order_seq_cst); }




  template<typename _Tp>
    using __atomic_val_t = __type_identity_t<_Tp>;
  template<typename _Tp>
    using __atomic_diff_t = typename atomic<_Tp>::difference_type;




  template<typename _ITp>
    inline bool
    atomic_is_lock_free(const atomic<_ITp>* __a) noexcept
    { return __a->is_lock_free(); }

  template<typename _ITp>
    inline bool
    atomic_is_lock_free(const volatile atomic<_ITp>* __a) noexcept
    { return __a->is_lock_free(); }

  template<typename _ITp>
    inline void
    atomic_init(atomic<_ITp>* __a, __atomic_val_t<_ITp> __i) noexcept
    { __a->store(__i, memory_order_relaxed); }

  template<typename _ITp>
    inline void
    atomic_init(volatile atomic<_ITp>* __a, __atomic_val_t<_ITp> __i) noexcept
    { __a->store(__i, memory_order_relaxed); }

  template<typename _ITp>
    inline void
    atomic_store_explicit(atomic<_ITp>* __a, __atomic_val_t<_ITp> __i,
     memory_order __m) noexcept
    { __a->store(__i, __m); }

  template<typename _ITp>
    inline void
    atomic_store_explicit(volatile atomic<_ITp>* __a, __atomic_val_t<_ITp> __i,
     memory_order __m) noexcept
    { __a->store(__i, __m); }

  template<typename _ITp>
    inline _ITp
    atomic_load_explicit(const atomic<_ITp>* __a, memory_order __m) noexcept
    { return __a->load(__m); }

  template<typename _ITp>
    inline _ITp
    atomic_load_explicit(const volatile atomic<_ITp>* __a,
    memory_order __m) noexcept
    { return __a->load(__m); }

  template<typename _ITp>
    inline _ITp
    atomic_exchange_explicit(atomic<_ITp>* __a, __atomic_val_t<_ITp> __i,
        memory_order __m) noexcept
    { return __a->exchange(__i, __m); }

  template<typename _ITp>
    inline _ITp
    atomic_exchange_explicit(volatile atomic<_ITp>* __a,
        __atomic_val_t<_ITp> __i,
        memory_order __m) noexcept
    { return __a->exchange(__i, __m); }

  template<typename _ITp>
    inline bool
    atomic_compare_exchange_weak_explicit(atomic<_ITp>* __a,
       __atomic_val_t<_ITp>* __i1,
       __atomic_val_t<_ITp> __i2,
       memory_order __m1,
       memory_order __m2) noexcept
    { return __a->compare_exchange_weak(*__i1, __i2, __m1, __m2); }

  template<typename _ITp>
    inline bool
    atomic_compare_exchange_weak_explicit(volatile atomic<_ITp>* __a,
       __atomic_val_t<_ITp>* __i1,
       __atomic_val_t<_ITp> __i2,
       memory_order __m1,
       memory_order __m2) noexcept
    { return __a->compare_exchange_weak(*__i1, __i2, __m1, __m2); }

  template<typename _ITp>
    inline bool
    atomic_compare_exchange_strong_explicit(atomic<_ITp>* __a,
         __atomic_val_t<_ITp>* __i1,
         __atomic_val_t<_ITp> __i2,
         memory_order __m1,
         memory_order __m2) noexcept
    { return __a->compare_exchange_strong(*__i1, __i2, __m1, __m2); }

  template<typename _ITp>
    inline bool
    atomic_compare_exchange_strong_explicit(volatile atomic<_ITp>* __a,
         __atomic_val_t<_ITp>* __i1,
         __atomic_val_t<_ITp> __i2,
         memory_order __m1,
         memory_order __m2) noexcept
    { return __a->compare_exchange_strong(*__i1, __i2, __m1, __m2); }


  template<typename _ITp>
    inline void
    atomic_store(atomic<_ITp>* __a, __atomic_val_t<_ITp> __i) noexcept
    { atomic_store_explicit(__a, __i, memory_order_seq_cst); }

  template<typename _ITp>
    inline void
    atomic_store(volatile atomic<_ITp>* __a, __atomic_val_t<_ITp> __i) noexcept
    { atomic_store_explicit(__a, __i, memory_order_seq_cst); }

  template<typename _ITp>
    inline _ITp
    atomic_load(const atomic<_ITp>* __a) noexcept
    { return atomic_load_explicit(__a, memory_order_seq_cst); }

  template<typename _ITp>
    inline _ITp
    atomic_load(const volatile atomic<_ITp>* __a) noexcept
    { return atomic_load_explicit(__a, memory_order_seq_cst); }

  template<typename _ITp>
    inline _ITp
    atomic_exchange(atomic<_ITp>* __a, __atomic_val_t<_ITp> __i) noexcept
    { return atomic_exchange_explicit(__a, __i, memory_order_seq_cst); }

  template<typename _ITp>
    inline _ITp
    atomic_exchange(volatile atomic<_ITp>* __a,
      __atomic_val_t<_ITp> __i) noexcept
    { return atomic_exchange_explicit(__a, __i, memory_order_seq_cst); }

  template<typename _ITp>
    inline bool
    atomic_compare_exchange_weak(atomic<_ITp>* __a,
     __atomic_val_t<_ITp>* __i1,
     __atomic_val_t<_ITp> __i2) noexcept
    {
      return atomic_compare_exchange_weak_explicit(__a, __i1, __i2,
         memory_order_seq_cst,
         memory_order_seq_cst);
    }

  template<typename _ITp>
    inline bool
    atomic_compare_exchange_weak(volatile atomic<_ITp>* __a,
     __atomic_val_t<_ITp>* __i1,
     __atomic_val_t<_ITp> __i2) noexcept
    {
      return atomic_compare_exchange_weak_explicit(__a, __i1, __i2,
         memory_order_seq_cst,
         memory_order_seq_cst);
    }

  template<typename _ITp>
    inline bool
    atomic_compare_exchange_strong(atomic<_ITp>* __a,
       __atomic_val_t<_ITp>* __i1,
       __atomic_val_t<_ITp> __i2) noexcept
    {
      return atomic_compare_exchange_strong_explicit(__a, __i1, __i2,
           memory_order_seq_cst,
           memory_order_seq_cst);
    }

  template<typename _ITp>
    inline bool
    atomic_compare_exchange_strong(volatile atomic<_ITp>* __a,
       __atomic_val_t<_ITp>* __i1,
       __atomic_val_t<_ITp> __i2) noexcept
    {
      return atomic_compare_exchange_strong_explicit(__a, __i1, __i2,
           memory_order_seq_cst,
           memory_order_seq_cst);
    }
# 1451 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/atomic" 3
  template<typename _ITp>
    inline _ITp
    atomic_fetch_add_explicit(atomic<_ITp>* __a,
         __atomic_diff_t<_ITp> __i,
         memory_order __m) noexcept
    { return __a->fetch_add(__i, __m); }

  template<typename _ITp>
    inline _ITp
    atomic_fetch_add_explicit(volatile atomic<_ITp>* __a,
         __atomic_diff_t<_ITp> __i,
         memory_order __m) noexcept
    { return __a->fetch_add(__i, __m); }

  template<typename _ITp>
    inline _ITp
    atomic_fetch_sub_explicit(atomic<_ITp>* __a,
         __atomic_diff_t<_ITp> __i,
         memory_order __m) noexcept
    { return __a->fetch_sub(__i, __m); }

  template<typename _ITp>
    inline _ITp
    atomic_fetch_sub_explicit(volatile atomic<_ITp>* __a,
         __atomic_diff_t<_ITp> __i,
         memory_order __m) noexcept
    { return __a->fetch_sub(__i, __m); }

  template<typename _ITp>
    inline _ITp
    atomic_fetch_and_explicit(__atomic_base<_ITp>* __a,
         __atomic_val_t<_ITp> __i,
         memory_order __m) noexcept
    { return __a->fetch_and(__i, __m); }

  template<typename _ITp>
    inline _ITp
    atomic_fetch_and_explicit(volatile __atomic_base<_ITp>* __a,
         __atomic_val_t<_ITp> __i,
         memory_order __m) noexcept
    { return __a->fetch_and(__i, __m); }

  template<typename _ITp>
    inline _ITp
    atomic_fetch_or_explicit(__atomic_base<_ITp>* __a,
        __atomic_val_t<_ITp> __i,
        memory_order __m) noexcept
    { return __a->fetch_or(__i, __m); }

  template<typename _ITp>
    inline _ITp
    atomic_fetch_or_explicit(volatile __atomic_base<_ITp>* __a,
        __atomic_val_t<_ITp> __i,
        memory_order __m) noexcept
    { return __a->fetch_or(__i, __m); }

  template<typename _ITp>
    inline _ITp
    atomic_fetch_xor_explicit(__atomic_base<_ITp>* __a,
         __atomic_val_t<_ITp> __i,
         memory_order __m) noexcept
    { return __a->fetch_xor(__i, __m); }

  template<typename _ITp>
    inline _ITp
    atomic_fetch_xor_explicit(volatile __atomic_base<_ITp>* __a,
         __atomic_val_t<_ITp> __i,
         memory_order __m) noexcept
    { return __a->fetch_xor(__i, __m); }

  template<typename _ITp>
    inline _ITp
    atomic_fetch_add(atomic<_ITp>* __a,
       __atomic_diff_t<_ITp> __i) noexcept
    { return atomic_fetch_add_explicit(__a, __i, memory_order_seq_cst); }

  template<typename _ITp>
    inline _ITp
    atomic_fetch_add(volatile atomic<_ITp>* __a,
       __atomic_diff_t<_ITp> __i) noexcept
    { return atomic_fetch_add_explicit(__a, __i, memory_order_seq_cst); }

  template<typename _ITp>
    inline _ITp
    atomic_fetch_sub(atomic<_ITp>* __a,
       __atomic_diff_t<_ITp> __i) noexcept
    { return atomic_fetch_sub_explicit(__a, __i, memory_order_seq_cst); }

  template<typename _ITp>
    inline _ITp
    atomic_fetch_sub(volatile atomic<_ITp>* __a,
       __atomic_diff_t<_ITp> __i) noexcept
    { return atomic_fetch_sub_explicit(__a, __i, memory_order_seq_cst); }

  template<typename _ITp>
    inline _ITp
    atomic_fetch_and(__atomic_base<_ITp>* __a,
       __atomic_val_t<_ITp> __i) noexcept
    { return atomic_fetch_and_explicit(__a, __i, memory_order_seq_cst); }

  template<typename _ITp>
    inline _ITp
    atomic_fetch_and(volatile __atomic_base<_ITp>* __a,
       __atomic_val_t<_ITp> __i) noexcept
    { return atomic_fetch_and_explicit(__a, __i, memory_order_seq_cst); }

  template<typename _ITp>
    inline _ITp
    atomic_fetch_or(__atomic_base<_ITp>* __a,
      __atomic_val_t<_ITp> __i) noexcept
    { return atomic_fetch_or_explicit(__a, __i, memory_order_seq_cst); }

  template<typename _ITp>
    inline _ITp
    atomic_fetch_or(volatile __atomic_base<_ITp>* __a,
      __atomic_val_t<_ITp> __i) noexcept
    { return atomic_fetch_or_explicit(__a, __i, memory_order_seq_cst); }

  template<typename _ITp>
    inline _ITp
    atomic_fetch_xor(__atomic_base<_ITp>* __a,
       __atomic_val_t<_ITp> __i) noexcept
    { return atomic_fetch_xor_explicit(__a, __i, memory_order_seq_cst); }

  template<typename _ITp>
    inline _ITp
    atomic_fetch_xor(volatile __atomic_base<_ITp>* __a,
       __atomic_val_t<_ITp> __i) noexcept
    { return atomic_fetch_xor_explicit(__a, __i, memory_order_seq_cst); }
# 1751 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/atomic" 3

}
# 119 "../harfbuzz-6.0.0/src/hb-atomic.hh" 2
#define _hb_compiler_memory_r_barrier() std::atomic_signal_fence (std::memory_order_acquire)
# 128 "../harfbuzz-6.0.0/src/hb-atomic.hh"
#define _hb_memory_r_barrier() _hb_memory_barrier ()


#define _hb_memory_w_barrier() _hb_memory_barrier ()
# 159 "../harfbuzz-6.0.0/src/hb-atomic.hh"

# 159 "../harfbuzz-6.0.0/src/hb-atomic.hh"
struct hb_atomic_short_t
{
  hb_atomic_short_t () = default;
  constexpr hb_atomic_short_t (short v) : v (v) {}

  hb_atomic_short_t& operator = (short v_) { set_relaxed (v_); return *this; }
  operator short () const { return get_relaxed (); }

  void set_relaxed (short v_) { __atomic_store_n ((&v), (v_), 0); }
  void set_release (short v_) { __atomic_store_n ((&v), (v_), 3); }
  short get_relaxed () const { return __atomic_load_n ((&v), 0); }
  short get_acquire () const { return __atomic_load_n ((&v), 2); }
  short inc () { return __atomic_fetch_add ((&v), (1), 4); }
  short dec () { return __atomic_fetch_add ((&v), (-1), 4); }

  short v = 0;
};

struct hb_atomic_int_t
{
  hb_atomic_int_t () = default;
  constexpr hb_atomic_int_t (int v) : v (v) {}

  hb_atomic_int_t& operator = (int v_) { set_relaxed (v_); return *this; }
  operator int () const { return get_relaxed (); }

  void set_relaxed (int v_) { __atomic_store_n ((&v), (v_), 0); }
  void set_release (int v_) { __atomic_store_n ((&v), (v_), 3); }
  int get_relaxed () const { return __atomic_load_n ((&v), 0); }
  int get_acquire () const { return __atomic_load_n ((&v), 2); }
  int inc () { return __atomic_fetch_add ((&v), (1), 4); }
  int dec () { return __atomic_fetch_add ((&v), (-1), 4); }

  int v = 0;
};

template <typename P>
struct hb_atomic_ptr_t
{
  typedef hb_remove_pointer<P> T;

  hb_atomic_ptr_t () = default;
  constexpr hb_atomic_ptr_t (T* v) : v (v) {}

  void init (T* v_ = nullptr) { set_relaxed (v_); }
  void set_relaxed (T* v_) { __atomic_store_n ((&v), (v_), 0); }
  T *get_relaxed () const { return (T *) __atomic_load_n ((&v), 0); }
  T *get_acquire () const { return (T *) __atomic_load_n (((void **) &v), 2); }
  bool cmpexch (const T *old, T *new_) const { return _hb_atomic_ptr_impl_cmplexch ((const void **) ((void **) &v), ((void *) old), ((void *) new_)); }

  T * operator -> () const { return get_acquire (); }
  template <typename C> operator C * () const { return get_acquire (); }

  T *v = nullptr;
};
# 481 "../harfbuzz-6.0.0/src/hb.hh" 2
# 1 "../harfbuzz-6.0.0/src/hb-null.hh" 1
# 28 "../harfbuzz-6.0.0/src/hb-null.hh"
#define HB_NULL_HH 
# 40 "../harfbuzz-6.0.0/src/hb-null.hh"
#define HB_NULL_POOL_SIZE 448

template <typename T, typename>
struct _hb_has_min_size : hb_false_type {};
template <typename T>
struct _hb_has_min_size<T, hb_void_t<decltype (T::min_size)>>
 : hb_true_type {};
template <typename T>
using hb_has_min_size = _hb_has_min_size<T, void>;
#define hb_has_min_size(T) hb_has_min_size<T>::value

template <typename T, typename>
struct _hb_has_null_size : hb_false_type {};
template <typename T>
struct _hb_has_null_size<T, hb_void_t<decltype (T::null_size)>>
 : hb_true_type {};
template <typename T>
using hb_has_null_size = _hb_has_null_size<T, void>;
#define hb_has_null_size(T) hb_has_null_size<T>::value
# 70 "../harfbuzz-6.0.0/src/hb-null.hh"
template <typename T, typename>
struct _hb_null_size : hb_integral_constant<unsigned, sizeof (T)> {};
template <typename T>
struct _hb_null_size<T, hb_void_t<decltype (T::min_size)>>
 : hb_integral_constant<unsigned,
          (sizeof (T) > T::null_size ? sizeof (T) : T::null_size)> {};
template <typename T>
using hb_null_size = _hb_null_size<T, void>;
#define hb_null_size(T) hb_null_size<T>::value






template <typename T, typename>
struct _hb_static_size : hb_integral_constant<unsigned, sizeof (T)> {};
template <typename T>
struct _hb_static_size<T, hb_void_t<decltype (T::min_size)>> : hb_integral_constant<unsigned, T::static_size> {};
template <typename T>
using hb_static_size = _hb_static_size<T, void>;
#define hb_static_size(T) hb_static_size<T>::value

template <typename T, typename>
struct _hb_min_size : hb_integral_constant<unsigned, sizeof (T)> {};
template <typename T>
struct _hb_min_size<T, hb_void_t<decltype (T::min_size)>> : hb_integral_constant<unsigned, T::min_size> {};
template <typename T>
using hb_min_size = _hb_min_size<T, void>;
#define hb_min_size(T) hb_min_size<T>::value






extern __attribute__((__visibility__("hidden")))
uint64_t const _hb_NullPool[(448 + sizeof (uint64_t) - 1) / sizeof (uint64_t)];


template <typename Type>
struct Null {
  static Type const & get_null ()
  {
    static_assert (hb_null_size<Type>::value <= 448, "Increase HB_NULL_POOL_SIZE.");
    return *reinterpret_cast<Type const *> (_hb_NullPool);
  }
};
template <typename QType>
struct NullHelper
{
  typedef hb_remove_const<hb_remove_reference<QType>> Type;
  static const Type & get_null () { return Null<Type>::get_null (); }
};
#define Null(Type) NullHelper<Type>::get_null ()


#define DECLARE_NULL_NAMESPACE_BYTES(Namespace,Type) } extern HB_INTERNAL const unsigned char _hb_Null_ ##Namespace ##_ ##Type[hb_null_size (Namespace::Type)]; template <> struct Null<Namespace::Type> { static Namespace::Type const & get_null () { return *reinterpret_cast<const Namespace::Type *> (_hb_Null_ ##Namespace ##_ ##Type); } }; namespace Namespace { static_assert (true, "")
# 138 "../harfbuzz-6.0.0/src/hb-null.hh"
#define DECLARE_NULL_NAMESPACE_BYTES_TEMPLATE1(Namespace,Type,Size) } extern HB_INTERNAL const unsigned char _hb_Null_ ##Namespace ##_ ##Type[Size]; template <typename Spec> struct Null<Namespace::Type<Spec>> { static Namespace::Type<Spec> const & get_null () { return *reinterpret_cast<const Namespace::Type<Spec> *> (_hb_Null_ ##Namespace ##_ ##Type); } }; namespace Namespace { static_assert (true, "")
# 149 "../harfbuzz-6.0.0/src/hb-null.hh"
#define DEFINE_NULL_NAMESPACE_BYTES(Namespace,Type) const unsigned char _hb_Null_ ##Namespace ##_ ##Type[sizeof (_hb_Null_ ##Namespace ##_ ##Type)]



#define DECLARE_NULL_INSTANCE(Type) extern HB_INTERNAL const Type _hb_Null_ ##Type; template <> struct Null<Type> { static Type const & get_null () { return _hb_Null_ ##Type; } }; static_assert (true, "")
# 162 "../harfbuzz-6.0.0/src/hb-null.hh"
#define DEFINE_NULL_INSTANCE(Type) const Type _hb_Null_ ##Type
# 171 "../harfbuzz-6.0.0/src/hb-null.hh"
extern __attribute__((__visibility__("hidden")))
                 uint64_t _hb_CrapPool[(448 + sizeof (uint64_t) - 1) / sizeof (uint64_t)];


template <typename Type>
static inline Type& Crap () {
  static_assert (hb_null_size<Type>::value <= 448, "Increase HB_NULL_POOL_SIZE.");
  Type *obj = reinterpret_cast<Type *> (_hb_CrapPool);
  memcpy (obj, &NullHelper<Type>::get_null (), sizeof (*obj));
  return *obj;
}
template <typename QType>
struct CrapHelper
{
  typedef hb_remove_const<hb_remove_reference<QType>> Type;
  static Type & get_crap () { return Crap<Type> (); }
};
#define Crap(Type) CrapHelper<Type>::get_crap ()

template <typename Type>
struct CrapOrNullHelper {
  static Type & get () { return CrapHelper<Type>::get_crap (); }
};
template <typename Type>
struct CrapOrNullHelper<const Type> {
  static const Type & get () { return NullHelper<Type>::get_null (); }
};
#define CrapOrNull(Type) CrapOrNullHelper<Type>::get ()






template <typename P>
struct hb_nonnull_ptr_t
{
  typedef hb_remove_pointer<P> T;

  hb_nonnull_ptr_t (T *v_ = nullptr) : v (v_) {}
  T * operator = (T *v_) { return v = v_; }
  T * operator -> () const { return get (); }
  T & operator * () const { return *get (); }
  T ** operator & () const { return &v; }

  template <typename C> operator const C * () const { return get (); }
  operator const char * () const { return (const char *) get (); }
  T * get () const { return v ? v : const_cast<T *> (&NullHelper<T>::get_null ()); }
  T * get_raw () const { return v; }

  private:
  T *v;
};
# 482 "../harfbuzz-6.0.0/src/hb.hh" 2
# 1 "../harfbuzz-6.0.0/src/hb-algs.hh" 1
# 30 "../harfbuzz-6.0.0/src/hb-algs.hh"
#define HB_ALGS_HH 






# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/algorithm" 1 3
# 56 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/algorithm" 3
#define _GLIBCXX_ALGORITHM 1

       
# 59 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/algorithm" 3


# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 1 3
# 57 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
#define _STL_ALGO_H 1

# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/algorithmfwd.h" 1 3
# 31 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/algorithmfwd.h" 3
#define _GLIBCXX_ALGORITHMFWD_H 1

       
# 34 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/algorithmfwd.h" 3
# 42 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/algorithmfwd.h" 3

# 42 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/algorithmfwd.h" 3
namespace std __attribute__ ((__visibility__ ("default")))
{

# 199 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/algorithmfwd.h" 3
  template<typename _IIter, typename _Predicate>
   
    bool
    all_of(_IIter, _IIter, _Predicate);

  template<typename _IIter, typename _Predicate>
   
    bool
    any_of(_IIter, _IIter, _Predicate);


  template<typename _FIter, typename _Tp>
   
    bool
    binary_search(_FIter, _FIter, const _Tp&);

  template<typename _FIter, typename _Tp, typename _Compare>
   
    bool
    binary_search(_FIter, _FIter, const _Tp&, _Compare);
# 232 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/algorithmfwd.h" 3
  template<typename _IIter, typename _OIter>
   
    _OIter
    copy(_IIter, _IIter, _OIter);

  template<typename _BIter1, typename _BIter2>
   
    _BIter2
    copy_backward(_BIter1, _BIter1, _BIter2);


  template<typename _IIter, typename _OIter, typename _Predicate>
   
    _OIter
    copy_if(_IIter, _IIter, _OIter, _Predicate);

  template<typename _IIter, typename _Size, typename _OIter>
   
    _OIter
    copy_n(_IIter, _Size, _OIter);





  template<typename _FIter, typename _Tp>
   
    pair<_FIter, _FIter>
    equal_range(_FIter, _FIter, const _Tp&);

  template<typename _FIter, typename _Tp, typename _Compare>
   
    pair<_FIter, _FIter>
    equal_range(_FIter, _FIter, const _Tp&, _Compare);

  template<typename _FIter, typename _Tp>
   
    void
    fill(_FIter, _FIter, const _Tp&);

  template<typename _OIter, typename _Size, typename _Tp>
   
    _OIter
    fill_n(_OIter, _Size, const _Tp&);



  template<typename _FIter1, typename _FIter2>
   
    _FIter1
    find_end(_FIter1, _FIter1, _FIter2, _FIter2);

  template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
   
    _FIter1
    find_end(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);





  template<typename _IIter, typename _Predicate>
   
    _IIter
    find_if_not(_IIter, _IIter, _Predicate);






  template<typename _IIter1, typename _IIter2>
   
    bool
    includes(_IIter1, _IIter1, _IIter2, _IIter2);

  template<typename _IIter1, typename _IIter2, typename _Compare>
   
    bool
    includes(_IIter1, _IIter1, _IIter2, _IIter2, _Compare);

  template<typename _BIter>
    void
    inplace_merge(_BIter, _BIter, _BIter);

  template<typename _BIter, typename _Compare>
    void
    inplace_merge(_BIter, _BIter, _BIter, _Compare);


  template<typename _RAIter>
   
    bool
    is_heap(_RAIter, _RAIter);

  template<typename _RAIter, typename _Compare>
   
    bool
    is_heap(_RAIter, _RAIter, _Compare);

  template<typename _RAIter>
   
    _RAIter
    is_heap_until(_RAIter, _RAIter);

  template<typename _RAIter, typename _Compare>
   
    _RAIter
    is_heap_until(_RAIter, _RAIter, _Compare);

  template<typename _IIter, typename _Predicate>
   
    bool
    is_partitioned(_IIter, _IIter, _Predicate);

  template<typename _FIter1, typename _FIter2>
   
    bool
    is_permutation(_FIter1, _FIter1, _FIter2);

  template<typename _FIter1, typename _FIter2,
    typename _BinaryPredicate>
   
    bool
    is_permutation(_FIter1, _FIter1, _FIter2, _BinaryPredicate);

  template<typename _FIter>
   
    bool
    is_sorted(_FIter, _FIter);

  template<typename _FIter, typename _Compare>
   
    bool
    is_sorted(_FIter, _FIter, _Compare);

  template<typename _FIter>
   
    _FIter
    is_sorted_until(_FIter, _FIter);

  template<typename _FIter, typename _Compare>
   
    _FIter
    is_sorted_until(_FIter, _FIter, _Compare);


  template<typename _FIter1, typename _FIter2>
   
    void
    iter_swap(_FIter1, _FIter2);

  template<typename _FIter, typename _Tp>
   
    _FIter
    lower_bound(_FIter, _FIter, const _Tp&);

  template<typename _FIter, typename _Tp, typename _Compare>
   
    _FIter
    lower_bound(_FIter, _FIter, const _Tp&, _Compare);

  template<typename _RAIter>
   
    void
    make_heap(_RAIter, _RAIter);

  template<typename _RAIter, typename _Compare>
   
    void
    make_heap(_RAIter, _RAIter, _Compare);

  template<typename _Tp>
   
    const _Tp&
    max(const _Tp&, const _Tp&);

  template<typename _Tp, typename _Compare>
   
    const _Tp&
    max(const _Tp&, const _Tp&, _Compare);




  template<typename _Tp>
   
    const _Tp&
    min(const _Tp&, const _Tp&);

  template<typename _Tp, typename _Compare>
   
    const _Tp&
    min(const _Tp&, const _Tp&, _Compare);




  template<typename _Tp>
   
    pair<const _Tp&, const _Tp&>
    minmax(const _Tp&, const _Tp&);

  template<typename _Tp, typename _Compare>
   
    pair<const _Tp&, const _Tp&>
    minmax(const _Tp&, const _Tp&, _Compare);

  template<typename _FIter>
   
    pair<_FIter, _FIter>
    minmax_element(_FIter, _FIter);

  template<typename _FIter, typename _Compare>
   
    pair<_FIter, _FIter>
    minmax_element(_FIter, _FIter, _Compare);

  template<typename _Tp>
   
    _Tp
    min(initializer_list<_Tp>);

  template<typename _Tp, typename _Compare>
   
    _Tp
    min(initializer_list<_Tp>, _Compare);

  template<typename _Tp>
   
    _Tp
    max(initializer_list<_Tp>);

  template<typename _Tp, typename _Compare>
   
    _Tp
    max(initializer_list<_Tp>, _Compare);

  template<typename _Tp>
   
    pair<_Tp, _Tp>
    minmax(initializer_list<_Tp>);

  template<typename _Tp, typename _Compare>
   
    pair<_Tp, _Tp>
    minmax(initializer_list<_Tp>, _Compare);




  template<typename _BIter>
   
    bool
    next_permutation(_BIter, _BIter);

  template<typename _BIter, typename _Compare>
   
    bool
    next_permutation(_BIter, _BIter, _Compare);


  template<typename _IIter, typename _Predicate>
   
    bool
    none_of(_IIter, _IIter, _Predicate);





  template<typename _IIter, typename _RAIter>
   
    _RAIter
    partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter);

  template<typename _IIter, typename _RAIter, typename _Compare>
   
    _RAIter
    partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter, _Compare);




  template<typename _IIter, typename _OIter1,
    typename _OIter2, typename _Predicate>
   
    pair<_OIter1, _OIter2>
    partition_copy(_IIter, _IIter, _OIter1, _OIter2, _Predicate);

  template<typename _FIter, typename _Predicate>
   
    _FIter
    partition_point(_FIter, _FIter, _Predicate);


  template<typename _RAIter>
   
    void
    pop_heap(_RAIter, _RAIter);

  template<typename _RAIter, typename _Compare>
   
    void
    pop_heap(_RAIter, _RAIter, _Compare);

  template<typename _BIter>
   
    bool
    prev_permutation(_BIter, _BIter);

  template<typename _BIter, typename _Compare>
   
    bool
    prev_permutation(_BIter, _BIter, _Compare);

  template<typename _RAIter>
   
    void
    push_heap(_RAIter, _RAIter);

  template<typename _RAIter, typename _Compare>
   
    void
    push_heap(_RAIter, _RAIter, _Compare);



  template<typename _FIter, typename _Tp>
   
    _FIter
    remove(_FIter, _FIter, const _Tp&);

  template<typename _FIter, typename _Predicate>
   
    _FIter
    remove_if(_FIter, _FIter, _Predicate);

  template<typename _IIter, typename _OIter, typename _Tp>
   
    _OIter
    remove_copy(_IIter, _IIter, _OIter, const _Tp&);

  template<typename _IIter, typename _OIter, typename _Predicate>
   
    _OIter
    remove_copy_if(_IIter, _IIter, _OIter, _Predicate);



  template<typename _IIter, typename _OIter, typename _Tp>
   
    _OIter
    replace_copy(_IIter, _IIter, _OIter, const _Tp&, const _Tp&);

  template<typename _Iter, typename _OIter, typename _Predicate, typename _Tp>
   
    _OIter
    replace_copy_if(_Iter, _Iter, _OIter, _Predicate, const _Tp&);



  template<typename _BIter>
   
    void
    reverse(_BIter, _BIter);

  template<typename _BIter, typename _OIter>
   
    _OIter
    reverse_copy(_BIter, _BIter, _OIter);

inline namespace _V2 {

  template<typename _FIter>
   
    _FIter
    rotate(_FIter, _FIter, _FIter);

}

  template<typename _FIter, typename _OIter>
   
    _OIter
    rotate_copy(_FIter, _FIter, _FIter, _OIter);
# 626 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/algorithmfwd.h" 3
  template<typename _RAIter, typename _UGenerator>
    void
    shuffle(_RAIter, _RAIter, _UGenerator&&);


  template<typename _RAIter>
   
    void
    sort_heap(_RAIter, _RAIter);

  template<typename _RAIter, typename _Compare>
   
    void
    sort_heap(_RAIter, _RAIter, _Compare);


  template<typename _BIter, typename _Predicate>
    _BIter
    stable_partition(_BIter, _BIter, _Predicate);
# 661 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/algorithmfwd.h" 3
  template<typename _FIter1, typename _FIter2>
   
    _FIter2
    swap_ranges(_FIter1, _FIter1, _FIter2);



  template<typename _FIter>
   
    _FIter
    unique(_FIter, _FIter);

  template<typename _FIter, typename _BinaryPredicate>
   
    _FIter
    unique(_FIter, _FIter, _BinaryPredicate);



  template<typename _FIter, typename _Tp>
   
    _FIter
    upper_bound(_FIter, _FIter, const _Tp&);

  template<typename _FIter, typename _Tp, typename _Compare>
   
    _FIter
    upper_bound(_FIter, _FIter, const _Tp&, _Compare);



  template<typename _FIter>
   
    _FIter
    adjacent_find(_FIter, _FIter);

  template<typename _FIter, typename _BinaryPredicate>
   
    _FIter
    adjacent_find(_FIter, _FIter, _BinaryPredicate);

  template<typename _IIter, typename _Tp>
   
    typename iterator_traits<_IIter>::difference_type
    count(_IIter, _IIter, const _Tp&);

  template<typename _IIter, typename _Predicate>
   
    typename iterator_traits<_IIter>::difference_type
    count_if(_IIter, _IIter, _Predicate);

  template<typename _IIter1, typename _IIter2>
   
    bool
    equal(_IIter1, _IIter1, _IIter2);

  template<typename _IIter1, typename _IIter2, typename _BinaryPredicate>
   
    bool
    equal(_IIter1, _IIter1, _IIter2, _BinaryPredicate);

  template<typename _IIter, typename _Tp>
   
    _IIter
    find(_IIter, _IIter, const _Tp&);

  template<typename _FIter1, typename _FIter2>
   
    _FIter1
    find_first_of(_FIter1, _FIter1, _FIter2, _FIter2);

  template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
   
    _FIter1
    find_first_of(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);

  template<typename _IIter, typename _Predicate>
   
    _IIter
    find_if(_IIter, _IIter, _Predicate);

  template<typename _IIter, typename _Funct>
   
    _Funct
    for_each(_IIter, _IIter, _Funct);

  template<typename _FIter, typename _Generator>
   
    void
    generate(_FIter, _FIter, _Generator);

  template<typename _OIter, typename _Size, typename _Generator>
   
    _OIter
    generate_n(_OIter, _Size, _Generator);

  template<typename _IIter1, typename _IIter2>
   
    bool
    lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2);

  template<typename _IIter1, typename _IIter2, typename _Compare>
   
    bool
    lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2, _Compare);

  template<typename _FIter>
   
    _FIter
    max_element(_FIter, _FIter);

  template<typename _FIter, typename _Compare>
   
    _FIter
    max_element(_FIter, _FIter, _Compare);

  template<typename _IIter1, typename _IIter2, typename _OIter>
   
    _OIter
    merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);

  template<typename _IIter1, typename _IIter2, typename _OIter,
    typename _Compare>
   
    _OIter
    merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);

  template<typename _FIter>
   
    _FIter
    min_element(_FIter, _FIter);

  template<typename _FIter, typename _Compare>
   
    _FIter
    min_element(_FIter, _FIter, _Compare);

  template<typename _IIter1, typename _IIter2>
   
    pair<_IIter1, _IIter2>
    mismatch(_IIter1, _IIter1, _IIter2);

  template<typename _IIter1, typename _IIter2, typename _BinaryPredicate>
   
    pair<_IIter1, _IIter2>
    mismatch(_IIter1, _IIter1, _IIter2, _BinaryPredicate);

  template<typename _RAIter>
   
    void
    nth_element(_RAIter, _RAIter, _RAIter);

  template<typename _RAIter, typename _Compare>
   
    void
    nth_element(_RAIter, _RAIter, _RAIter, _Compare);

  template<typename _RAIter>
   
    void
    partial_sort(_RAIter, _RAIter, _RAIter);

  template<typename _RAIter, typename _Compare>
   
    void
    partial_sort(_RAIter, _RAIter, _RAIter, _Compare);

  template<typename _BIter, typename _Predicate>
   
    _BIter
    partition(_BIter, _BIter, _Predicate);


  template<typename _RAIter>
    void
    random_shuffle(_RAIter, _RAIter);

  template<typename _RAIter, typename _Generator>
    void
    random_shuffle(_RAIter, _RAIter,

     _Generator&&);





  template<typename _FIter, typename _Tp>
   
    void
    replace(_FIter, _FIter, const _Tp&, const _Tp&);

  template<typename _FIter, typename _Predicate, typename _Tp>
   
    void
    replace_if(_FIter, _FIter, _Predicate, const _Tp&);

  template<typename _FIter1, typename _FIter2>
   
    _FIter1
    search(_FIter1, _FIter1, _FIter2, _FIter2);

  template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
   
    _FIter1
    search(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);

  template<typename _FIter, typename _Size, typename _Tp>
   
    _FIter
    search_n(_FIter, _FIter, _Size, const _Tp&);

  template<typename _FIter, typename _Size, typename _Tp,
    typename _BinaryPredicate>
   
    _FIter
    search_n(_FIter, _FIter, _Size, const _Tp&, _BinaryPredicate);

  template<typename _IIter1, typename _IIter2, typename _OIter>
   
    _OIter
    set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);

  template<typename _IIter1, typename _IIter2, typename _OIter,
    typename _Compare>
   
    _OIter
    set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);

  template<typename _IIter1, typename _IIter2, typename _OIter>
   
    _OIter
    set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);

  template<typename _IIter1, typename _IIter2, typename _OIter,
    typename _Compare>
   
    _OIter
    set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);

  template<typename _IIter1, typename _IIter2, typename _OIter>
   
    _OIter
    set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);

  template<typename _IIter1, typename _IIter2, typename _OIter,
    typename _Compare>
   
    _OIter
    set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2,
        _OIter, _Compare);

  template<typename _IIter1, typename _IIter2, typename _OIter>
   
    _OIter
    set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);

  template<typename _IIter1, typename _IIter2, typename _OIter,
    typename _Compare>
   
    _OIter
    set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);

  template<typename _RAIter>
   
    void
    sort(_RAIter, _RAIter);

  template<typename _RAIter, typename _Compare>
   
    void
    sort(_RAIter, _RAIter, _Compare);

  template<typename _RAIter>
    void
    stable_sort(_RAIter, _RAIter);

  template<typename _RAIter, typename _Compare>
    void
    stable_sort(_RAIter, _RAIter, _Compare);

  template<typename _IIter, typename _OIter, typename _UnaryOperation>
   
    _OIter
    transform(_IIter, _IIter, _OIter, _UnaryOperation);

  template<typename _IIter1, typename _IIter2, typename _OIter,
    typename _BinaryOperation>
   
    _OIter
    transform(_IIter1, _IIter1, _IIter2, _OIter, _BinaryOperation);

  template<typename _IIter, typename _OIter>
   
    _OIter
    unique_copy(_IIter, _IIter, _OIter);

  template<typename _IIter, typename _OIter, typename _BinaryPredicate>
   
    _OIter
    unique_copy(_IIter, _IIter, _OIter, _BinaryPredicate);



}
# 60 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 2 3

# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_heap.h" 1 3
# 56 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_heap.h" 3
#define _STL_HEAP_H 1






namespace std __attribute__ ((__visibility__ ("default")))
{







  template<typename _RandomAccessIterator, typename _Distance,
    typename _Compare>
   
    _Distance
    __is_heap_until(_RandomAccessIterator __first, _Distance __n,
      _Compare& __comp)
    {
      _Distance __parent = 0;
      for (_Distance __child = 1; __child < __n; ++__child)
 {
   if (__comp(__first + __parent, __first + __child))
     return __child;
   if ((__child & 1) == 0)
     ++__parent;
 }
      return __n;
    }



  template<typename _RandomAccessIterator, typename _Distance>
   
    inline bool
    __is_heap(_RandomAccessIterator __first, _Distance __n)
    {
      __gnu_cxx::__ops::_Iter_less_iter __comp;
      return std::__is_heap_until(__first, __n, __comp) == __n;
    }

  template<typename _RandomAccessIterator, typename _Compare,
    typename _Distance>
   
    inline bool
    __is_heap(_RandomAccessIterator __first, _Compare __comp, _Distance __n)
    {
      typedef __decltype(__comp) _Cmp;
      __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(std::move(__comp));
      return std::__is_heap_until(__first, __n, __cmp) == __n;
    }

  template<typename _RandomAccessIterator>
   
    inline bool
    __is_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
    { return std::__is_heap(__first, std::distance(__first, __last)); }

  template<typename _RandomAccessIterator, typename _Compare>
   
    inline bool
    __is_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
       _Compare __comp)
    {
      return std::__is_heap(__first, std::move(__comp),
       std::distance(__first, __last));
    }




  template<typename _RandomAccessIterator, typename _Distance, typename _Tp,
    typename _Compare>
   
    void
    __push_heap(_RandomAccessIterator __first,
  _Distance __holeIndex, _Distance __topIndex, _Tp __value,
  _Compare& __comp)
    {
      _Distance __parent = (__holeIndex - 1) / 2;
      while (__holeIndex > __topIndex && __comp(__first + __parent, __value))
 {
   *(__first + __holeIndex) = std::move(*(__first + __parent));
   __holeIndex = __parent;
   __parent = (__holeIndex - 1) / 2;
 }
      *(__first + __holeIndex) = std::move(__value);
    }
# 159 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_heap.h" 3
  template<typename _RandomAccessIterator>
   
    inline void
    push_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
    {
      typedef typename iterator_traits<_RandomAccessIterator>::value_type
   _ValueType;
      typedef typename iterator_traits<_RandomAccessIterator>::difference_type
   _DistanceType;


     

     
      ;
      ;
      ;

      __gnu_cxx::__ops::_Iter_less_val __comp;
      _ValueType __value = std::move(*(__last - 1));
      std::__push_heap(__first, _DistanceType((__last - __first) - 1),
         _DistanceType(0), std::move(__value), __comp);
    }
# 195 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_heap.h" 3
  template<typename _RandomAccessIterator, typename _Compare>
   
    inline void
    push_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
       _Compare __comp)
    {
      typedef typename iterator_traits<_RandomAccessIterator>::value_type
   _ValueType;
      typedef typename iterator_traits<_RandomAccessIterator>::difference_type
   _DistanceType;


     

      ;
      ;
      ;

      __decltype(__gnu_cxx::__ops::__iter_comp_val(std::move(__comp)))
 __cmp(std::move(__comp));
      _ValueType __value = std::move(*(__last - 1));
      std::__push_heap(__first, _DistanceType((__last - __first) - 1),
         _DistanceType(0), std::move(__value), __cmp);
    }

  template<typename _RandomAccessIterator, typename _Distance,
    typename _Tp, typename _Compare>
   
    void
    __adjust_heap(_RandomAccessIterator __first, _Distance __holeIndex,
    _Distance __len, _Tp __value, _Compare __comp)
    {
      const _Distance __topIndex = __holeIndex;
      _Distance __secondChild = __holeIndex;
      while (__secondChild < (__len - 1) / 2)
 {
   __secondChild = 2 * (__secondChild + 1);
   if (__comp(__first + __secondChild,
       __first + (__secondChild - 1)))
     __secondChild--;
   *(__first + __holeIndex) = std::move(*(__first + __secondChild));
   __holeIndex = __secondChild;
 }
      if ((__len & 1) == 0 && __secondChild == (__len - 2) / 2)
 {
   __secondChild = 2 * (__secondChild + 1);
   *(__first + __holeIndex) = std::move(*(__first + (__secondChild - 1)))
                                  ;
   __holeIndex = __secondChild - 1;
 }
      __decltype(__gnu_cxx::__ops::__iter_comp_val(std::move(__comp)))
 __cmp(std::move(__comp));
      std::__push_heap(__first, __holeIndex, __topIndex,
         std::move(__value), __cmp);
    }

  template<typename _RandomAccessIterator, typename _Compare>
   
    inline void
    __pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
        _RandomAccessIterator __result, _Compare& __comp)
    {
      typedef typename iterator_traits<_RandomAccessIterator>::value_type
 _ValueType;
      typedef typename iterator_traits<_RandomAccessIterator>::difference_type
 _DistanceType;

      _ValueType __value = std::move(*__result);
      *__result = std::move(*__first);
      std::__adjust_heap(__first, _DistanceType(0),
    _DistanceType(__last - __first),
    std::move(__value), __comp);
    }
# 280 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_heap.h" 3
  template<typename _RandomAccessIterator>
   
    inline void
    pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
    {

     

     

      ;
      ;
      ;
      ;

      if (__last - __first > 1)
 {
   --__last;
   __gnu_cxx::__ops::_Iter_less_iter __comp;
   std::__pop_heap(__first, __last, __last, __comp);
 }
    }
# 314 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_heap.h" 3
  template<typename _RandomAccessIterator, typename _Compare>
   
    inline void
    pop_heap(_RandomAccessIterator __first,
      _RandomAccessIterator __last, _Compare __comp)
    {

     

      ;
      ;
      ;
      ;

      if (__last - __first > 1)
 {
   typedef __decltype(__comp) _Cmp;
   __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(std::move(__comp));
   --__last;
   std::__pop_heap(__first, __last, __last, __cmp);
 }
    }

  template<typename _RandomAccessIterator, typename _Compare>
   
    void
    __make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
  _Compare& __comp)
    {
      typedef typename iterator_traits<_RandomAccessIterator>::value_type
   _ValueType;
      typedef typename iterator_traits<_RandomAccessIterator>::difference_type
   _DistanceType;

      if (__last - __first < 2)
 return;

      const _DistanceType __len = __last - __first;
      _DistanceType __parent = (__len - 2) / 2;
      while (true)
 {
   _ValueType __value = std::move(*(__first + __parent));
   std::__adjust_heap(__first, __parent, __len, std::move(__value),
        __comp);
   if (__parent == 0)
     return;
   __parent--;
 }
    }
# 372 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_heap.h" 3
  template<typename _RandomAccessIterator>
   
    inline void
    make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
    {

     

     

      ;
      ;

      __gnu_cxx::__ops::_Iter_less_iter __comp;
      std::__make_heap(__first, __last, __comp);
    }
# 399 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_heap.h" 3
  template<typename _RandomAccessIterator, typename _Compare>
   
    inline void
    make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
       _Compare __comp)
    {

     

      ;
      ;

      typedef __decltype(__comp) _Cmp;
      __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(std::move(__comp));
      std::__make_heap(__first, __last, __cmp);
    }

  template<typename _RandomAccessIterator, typename _Compare>
   
    void
    __sort_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
  _Compare& __comp)
    {
      while (__last - __first > 1)
 {
   --__last;
   std::__pop_heap(__first, __last, __last, __comp);
 }
    }
# 437 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_heap.h" 3
  template<typename _RandomAccessIterator>
   
    inline void
    sort_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
    {

     

     

      ;
      ;
      ;

      __gnu_cxx::__ops::_Iter_less_iter __comp;
      std::__sort_heap(__first, __last, __comp);
    }
# 465 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_heap.h" 3
  template<typename _RandomAccessIterator, typename _Compare>
   
    inline void
    sort_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
       _Compare __comp)
    {

     

      ;
      ;
      ;

      typedef __decltype(__comp) _Cmp;
      __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(std::move(__comp));
      std::__sort_heap(__first, __last, __cmp);
    }
# 494 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_heap.h" 3
  template<typename _RandomAccessIterator>
   
    inline _RandomAccessIterator
    is_heap_until(_RandomAccessIterator __first, _RandomAccessIterator __last)
    {

     

     

      ;
      ;

      __gnu_cxx::__ops::_Iter_less_iter __comp;
      return __first +
 std::__is_heap_until(__first, std::distance(__first, __last), __comp);
    }
# 523 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_heap.h" 3
  template<typename _RandomAccessIterator, typename _Compare>
   
    inline _RandomAccessIterator
    is_heap_until(_RandomAccessIterator __first, _RandomAccessIterator __last,
    _Compare __comp)
    {

     

      ;
      ;

      typedef __decltype(__comp) _Cmp;
      __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(std::move(__comp));
      return __first
 + std::__is_heap_until(__first, std::distance(__first, __last), __cmp);
    }
# 548 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_heap.h" 3
  template<typename _RandomAccessIterator>
   
    inline bool
    is_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
    { return std::is_heap_until(__first, __last) == __last; }
# 562 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_heap.h" 3
  template<typename _RandomAccessIterator, typename _Compare>
   
    inline bool
    is_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
     _Compare __comp)
    {

     

      ;
      ;

      const auto __dist = std::distance(__first, __last);
      typedef __decltype(__comp) _Cmp;
      __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(std::move(__comp));
      return std::__is_heap_until(__first, __dist, __cmp) == __dist;
    }



}
# 62 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 2 3



# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/uniform_int_dist.h" 1 3
# 32 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/uniform_int_dist.h" 3
#define _GLIBCXX_BITS_UNIFORM_INT_DIST_H 
# 41 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/uniform_int_dist.h" 3
namespace std __attribute__ ((__visibility__ ("default")))
{

# 58 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/uniform_int_dist.h" 3
  namespace __detail
  {



    template<typename _Tp>
      constexpr bool
      _Power_of_2(_Tp __x)
      {
 return ((__x - 1) & __x) == 0;
      }
  }






  template<typename _IntType = int>
    class uniform_int_distribution
    {
      static_assert(std::is_integral<_IntType>::value,
      "template argument must be an integral type");

    public:

      typedef _IntType result_type;

      struct param_type
      {
 typedef uniform_int_distribution<_IntType> distribution_type;

 param_type() : param_type(0) { }

 explicit
 param_type(_IntType __a,
     _IntType __b = __gnu_cxx::__int_traits<_IntType>::__max)
 : _M_a(__a), _M_b(__b)
 {
   do { if (std::__is_constant_evaluated() && !bool(_M_a <= _M_b)) __builtin_unreachable(); } while (false);
 }

 result_type
 a() const
 { return _M_a; }

 result_type
 b() const
 { return _M_b; }

 friend bool
 operator==(const param_type& __p1, const param_type& __p2)
 { return __p1._M_a == __p2._M_a && __p1._M_b == __p2._M_b; }

 friend bool
 operator!=(const param_type& __p1, const param_type& __p2)
 { return !(__p1 == __p2); }

      private:
 _IntType _M_a;
 _IntType _M_b;
      };

    public:



      uniform_int_distribution() : uniform_int_distribution(0) { }




      explicit
      uniform_int_distribution(_IntType __a,
          _IntType __b
     = __gnu_cxx::__int_traits<_IntType>::__max)
      : _M_param(__a, __b)
      { }

      explicit
      uniform_int_distribution(const param_type& __p)
      : _M_param(__p)
      { }






      void
      reset() { }

      result_type
      a() const
      { return _M_param.a(); }

      result_type
      b() const
      { return _M_param.b(); }




      param_type
      param() const
      { return _M_param; }





      void
      param(const param_type& __param)
      { _M_param = __param; }




      result_type
      min() const
      { return this->a(); }




      result_type
      max() const
      { return this->b(); }




      template<typename _UniformRandomBitGenerator>
 result_type
 operator()(_UniformRandomBitGenerator& __urng)
        { return this->operator()(__urng, _M_param); }

      template<typename _UniformRandomBitGenerator>
 result_type
 operator()(_UniformRandomBitGenerator& __urng,
     const param_type& __p);

      template<typename _ForwardIterator,
        typename _UniformRandomBitGenerator>
 void
 __generate(_ForwardIterator __f, _ForwardIterator __t,
     _UniformRandomBitGenerator& __urng)
 { this->__generate(__f, __t, __urng, _M_param); }

      template<typename _ForwardIterator,
        typename _UniformRandomBitGenerator>
 void
 __generate(_ForwardIterator __f, _ForwardIterator __t,
     _UniformRandomBitGenerator& __urng,
     const param_type& __p)
 { this->__generate_impl(__f, __t, __urng, __p); }

      template<typename _UniformRandomBitGenerator>
 void
 __generate(result_type* __f, result_type* __t,
     _UniformRandomBitGenerator& __urng,
     const param_type& __p)
 { this->__generate_impl(__f, __t, __urng, __p); }





      friend bool
      operator==(const uniform_int_distribution& __d1,
   const uniform_int_distribution& __d2)
      { return __d1._M_param == __d2._M_param; }

    private:
      template<typename _ForwardIterator,
        typename _UniformRandomBitGenerator>
 void
 __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
   _UniformRandomBitGenerator& __urng,
   const param_type& __p);

      param_type _M_param;




      template<typename _Wp, typename _Urbg, typename _Up>
 static _Up
 _S_nd(_Urbg& __g, _Up __range)
 {
   using _Up_traits = __gnu_cxx::__int_traits<_Up>;
   using _Wp_traits = __gnu_cxx::__int_traits<_Wp>;
   static_assert(!_Up_traits::__is_signed, "U must be unsigned");
   static_assert(!_Wp_traits::__is_signed, "W must be unsigned");
   static_assert(_Wp_traits::__digits == (2 * _Up_traits::__digits),
   "W must be twice as wide as U");




   _Wp __product = _Wp(__g()) * _Wp(__range);
   _Up __low = _Up(__product);
   if (__low < __range)
     {
       _Up __threshold = -__range % __range;
       while (__low < __threshold)
  {
    __product = _Wp(__g()) * _Wp(__range);
    __low = _Up(__product);
  }
     }
   return __product >> _Up_traits::__digits;
 }
    };

  template<typename _IntType>
    template<typename _UniformRandomBitGenerator>
      typename uniform_int_distribution<_IntType>::result_type
      uniform_int_distribution<_IntType>::
      operator()(_UniformRandomBitGenerator& __urng,
   const param_type& __param)
      {
 typedef typename _UniformRandomBitGenerator::result_type _Gresult_type;
 typedef typename make_unsigned<result_type>::type __utype;
 typedef typename common_type<_Gresult_type, __utype>::type __uctype;

 constexpr __uctype __urngmin = _UniformRandomBitGenerator::min();
 constexpr __uctype __urngmax = _UniformRandomBitGenerator::max();
 static_assert( __urngmin < __urngmax,
     "Uniform random bit generator must define min() < max()");
 constexpr __uctype __urngrange = __urngmax - __urngmin;

 const __uctype __urange
   = __uctype(__param.b()) - __uctype(__param.a());

 __uctype __ret;
 if (__urngrange > __urange)
   {


     const __uctype __uerange = __urange + 1;



     if (__urngrange == 0xffffffffffffffffUL)
       {


  long unsigned int __u64erange = __uerange;
  __ret = __extension__ _S_nd<unsigned __int128>(__urng,
              __u64erange);
       }
     else

     if (__urngrange == 0xffffffffU)
       {


  unsigned int __u32erange = __uerange;
  __ret = _S_nd<long unsigned int>(__urng, __u32erange);
       }
     else

       {

  const __uctype __scaling = __urngrange / __uerange;
  const __uctype __past = __uerange * __scaling;
  do
    __ret = __uctype(__urng()) - __urngmin;
  while (__ret >= __past);
  __ret /= __scaling;
       }
   }
 else if (__urngrange < __urange)
   {
# 348 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/uniform_int_dist.h" 3
     __uctype __tmp;
     do
       {
  const __uctype __uerngrange = __urngrange + 1;
  __tmp = (__uerngrange * operator()
    (__urng, param_type(0, __urange / __uerngrange)));
  __ret = __tmp + (__uctype(__urng()) - __urngmin);
       }
     while (__ret > __urange || __ret < __tmp);
   }
 else
   __ret = __uctype(__urng()) - __urngmin;

 return __ret + __param.a();
      }


  template<typename _IntType>
    template<typename _ForwardIterator,
      typename _UniformRandomBitGenerator>
      void
      uniform_int_distribution<_IntType>::
      __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
        _UniformRandomBitGenerator& __urng,
        const param_type& __param)
      {

 typedef typename _UniformRandomBitGenerator::result_type _Gresult_type;
 typedef typename make_unsigned<result_type>::type __utype;
 typedef typename common_type<_Gresult_type, __utype>::type __uctype;

 static_assert( __urng.min() < __urng.max(),
     "Uniform random bit generator must define min() < max()");

 constexpr __uctype __urngmin = __urng.min();
 constexpr __uctype __urngmax = __urng.max();
 constexpr __uctype __urngrange = __urngmax - __urngmin;
 const __uctype __urange
   = __uctype(__param.b()) - __uctype(__param.a());

 __uctype __ret;

 if (__urngrange > __urange)
   {
     if (__detail::_Power_of_2(__urngrange + 1)
  && __detail::_Power_of_2(__urange + 1))
       {
  while (__f != __t)
    {
      __ret = __uctype(__urng()) - __urngmin;
      *__f++ = (__ret & __urange) + __param.a();
    }
       }
     else
       {

  const __uctype __uerange = __urange + 1;
  const __uctype __scaling = __urngrange / __uerange;
  const __uctype __past = __uerange * __scaling;
  while (__f != __t)
    {
      do
        __ret = __uctype(__urng()) - __urngmin;
      while (__ret >= __past);
      *__f++ = __ret / __scaling + __param.a();
    }
       }
   }
 else if (__urngrange < __urange)
   {
# 433 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/uniform_int_dist.h" 3
     __uctype __tmp;
     while (__f != __t)
       {
  do
    {
      constexpr __uctype __uerngrange = __urngrange + 1;
      __tmp = (__uerngrange * operator()
        (__urng, param_type(0, __urange / __uerngrange)));
      __ret = __tmp + (__uctype(__urng()) - __urngmin);
    }
  while (__ret > __urange || __ret < __tmp);
  *__f++ = __ret;
       }
   }
 else
   while (__f != __t)
     *__f++ = __uctype(__urng()) - __urngmin + __param.a();
      }




}
# 66 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 2 3





# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cstdlib" 1 3
# 39 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cstdlib" 3
       
# 40 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cstdlib" 3
# 72 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 2 3





namespace std __attribute__ ((__visibility__ ("default")))
{



  template<typename _Iterator, typename _Compare>
   
    void
    __move_median_to_first(_Iterator __result,_Iterator __a, _Iterator __b,
      _Iterator __c, _Compare __comp)
    {
      if (__comp(__a, __b))
 {
   if (__comp(__b, __c))
     std::iter_swap(__result, __b);
   else if (__comp(__a, __c))
     std::iter_swap(__result, __c);
   else
     std::iter_swap(__result, __a);
 }
      else if (__comp(__a, __c))
 std::iter_swap(__result, __a);
      else if (__comp(__b, __c))
 std::iter_swap(__result, __c);
      else
 std::iter_swap(__result, __b);
    }


  template<typename _InputIterator, typename _Predicate>
   
    inline _InputIterator
    __find_if_not(_InputIterator __first, _InputIterator __last,
    _Predicate __pred)
    {
      return std::__find_if(__first, __last,
       __gnu_cxx::__ops::__negate(__pred),
       std::__iterator_category(__first));
    }




  template<typename _InputIterator, typename _Predicate, typename _Distance>
   
    _InputIterator
    __find_if_not_n(_InputIterator __first, _Distance& __len, _Predicate __pred)
    {
      for (; __len; --__len, (void) ++__first)
 if (!__pred(__first))
   break;
      return __first;
    }
# 144 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _ForwardIterator1, typename _ForwardIterator2,
    typename _BinaryPredicate>
   
    _ForwardIterator1
    __search(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
      _ForwardIterator2 __first2, _ForwardIterator2 __last2,
      _BinaryPredicate __predicate)
    {

      if (__first1 == __last1 || __first2 == __last2)
 return __first1;


      _ForwardIterator2 __p1(__first2);
      if (++__p1 == __last2)
 return std::__find_if(__first1, __last1,
  __gnu_cxx::__ops::__iter_comp_iter(__predicate, __first2));


      _ForwardIterator1 __current = __first1;

      for (;;)
 {
   __first1 =
     std::__find_if(__first1, __last1,
  __gnu_cxx::__ops::__iter_comp_iter(__predicate, __first2));

   if (__first1 == __last1)
     return __last1;

   _ForwardIterator2 __p = __p1;
   __current = __first1;
   if (++__current == __last1)
     return __last1;

   while (__predicate(__current, __p))
     {
       if (++__p == __last2)
  return __first1;
       if (++__current == __last1)
  return __last1;
     }
   ++__first1;
 }
      return __first1;
    }






  template<typename _ForwardIterator, typename _Integer,
    typename _UnaryPredicate>
   
    _ForwardIterator
    __search_n_aux(_ForwardIterator __first, _ForwardIterator __last,
     _Integer __count, _UnaryPredicate __unary_pred,
     std::forward_iterator_tag)
    {
      __first = std::__find_if(__first, __last, __unary_pred);
      while (__first != __last)
 {
   typename iterator_traits<_ForwardIterator>::difference_type
     __n = __count;
   _ForwardIterator __i = __first;
   ++__i;
   while (__i != __last && __n != 1 && __unary_pred(__i))
     {
       ++__i;
       --__n;
     }
   if (__n == 1)
     return __first;
   if (__i == __last)
     return __last;
   __first = std::__find_if(++__i, __last, __unary_pred);
 }
      return __last;
    }





  template<typename _RandomAccessIter, typename _Integer,
    typename _UnaryPredicate>
   
    _RandomAccessIter
    __search_n_aux(_RandomAccessIter __first, _RandomAccessIter __last,
     _Integer __count, _UnaryPredicate __unary_pred,
     std::random_access_iterator_tag)
    {
      typedef typename std::iterator_traits<_RandomAccessIter>::difference_type
 _DistanceType;

      _DistanceType __tailSize = __last - __first;
      _DistanceType __remainder = __count;

      while (__remainder <= __tailSize)
 {
   __first += __remainder;
   __tailSize -= __remainder;


   _RandomAccessIter __backTrack = __first;
   while (__unary_pred(--__backTrack))
     {
       if (--__remainder == 0)
  return (__first - __count);
     }
   __remainder = __count + 1 - (__first - __backTrack);
 }
      return __last;
    }

  template<typename _ForwardIterator, typename _Integer,
    typename _UnaryPredicate>
   
    _ForwardIterator
    __search_n(_ForwardIterator __first, _ForwardIterator __last,
        _Integer __count,
        _UnaryPredicate __unary_pred)
    {
      if (__count <= 0)
 return __first;

      if (__count == 1)
 return std::__find_if(__first, __last, __unary_pred);

      return std::__search_n_aux(__first, __last, __count, __unary_pred,
     std::__iterator_category(__first));
    }


  template<typename _ForwardIterator1, typename _ForwardIterator2,
    typename _BinaryPredicate>
   
    _ForwardIterator1
    __find_end(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
        _ForwardIterator2 __first2, _ForwardIterator2 __last2,
        forward_iterator_tag, forward_iterator_tag,
        _BinaryPredicate __comp)
    {
      if (__first2 == __last2)
 return __last1;

      _ForwardIterator1 __result = __last1;
      while (1)
 {
   _ForwardIterator1 __new_result
     = std::__search(__first1, __last1, __first2, __last2, __comp);
   if (__new_result == __last1)
     return __result;
   else
     {
       __result = __new_result;
       __first1 = __new_result;
       ++__first1;
     }
 }
    }


  template<typename _BidirectionalIterator1, typename _BidirectionalIterator2,
    typename _BinaryPredicate>
   
    _BidirectionalIterator1
    __find_end(_BidirectionalIterator1 __first1,
        _BidirectionalIterator1 __last1,
        _BidirectionalIterator2 __first2,
        _BidirectionalIterator2 __last2,
        bidirectional_iterator_tag, bidirectional_iterator_tag,
        _BinaryPredicate __comp)
    {

     

     


      typedef reverse_iterator<_BidirectionalIterator1> _RevIterator1;
      typedef reverse_iterator<_BidirectionalIterator2> _RevIterator2;

      _RevIterator1 __rlast1(__first1);
      _RevIterator2 __rlast2(__first2);
      _RevIterator1 __rresult = std::__search(_RevIterator1(__last1), __rlast1,
           _RevIterator2(__last2), __rlast2,
           __comp);

      if (__rresult == __rlast1)
 return __last1;
      else
 {
   _BidirectionalIterator1 __result = __rresult.base();
   std::advance(__result, -std::distance(__first2, __last2));
   return __result;
 }
    }
# 370 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _ForwardIterator1, typename _ForwardIterator2>
   
    inline _ForwardIterator1
    find_end(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
      _ForwardIterator2 __first2, _ForwardIterator2 __last2)
    {

     
     
     


      ;
      ;

      return std::__find_end(__first1, __last1, __first2, __last2,
        std::__iterator_category(__first1),
        std::__iterator_category(__first2),
        __gnu_cxx::__ops::__iter_equal_to_iter());
    }
# 419 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _ForwardIterator1, typename _ForwardIterator2,
    typename _BinaryPredicate>
   
    inline _ForwardIterator1
    find_end(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
      _ForwardIterator2 __first2, _ForwardIterator2 __last2,
      _BinaryPredicate __comp)
    {

     
     
     


      ;
      ;

      return std::__find_end(__first1, __last1, __first2, __last2,
        std::__iterator_category(__first1),
        std::__iterator_category(__first2),
        __gnu_cxx::__ops::__iter_comp_iter(__comp));
    }
# 455 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _InputIterator, typename _Predicate>
   
    inline bool
    all_of(_InputIterator __first, _InputIterator __last, _Predicate __pred)
    { return __last == std::find_if_not(__first, __last, __pred); }
# 473 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _InputIterator, typename _Predicate>
   
    inline bool
    none_of(_InputIterator __first, _InputIterator __last, _Predicate __pred)
    { return __last == std::find_if(__first, __last, __pred); }
# 492 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _InputIterator, typename _Predicate>
   
    inline bool
    any_of(_InputIterator __first, _InputIterator __last, _Predicate __pred)
    { return !std::none_of(__first, __last, __pred); }
# 508 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _InputIterator, typename _Predicate>
   
    inline _InputIterator
    find_if_not(_InputIterator __first, _InputIterator __last,
  _Predicate __pred)
    {

     
     

      ;
      return std::__find_if_not(__first, __last,
    __gnu_cxx::__ops::__pred_iter(__pred));
    }
# 533 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _InputIterator, typename _Predicate>
   
    inline bool
    is_partitioned(_InputIterator __first, _InputIterator __last,
     _Predicate __pred)
    {
      __first = std::find_if_not(__first, __last, __pred);
      if (__first == __last)
 return true;
      ++__first;
      return std::none_of(__first, __last, __pred);
    }
# 555 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _ForwardIterator, typename _Predicate>
   
    _ForwardIterator
    partition_point(_ForwardIterator __first, _ForwardIterator __last,
      _Predicate __pred)
    {

     
     



      ;

      typedef typename iterator_traits<_ForwardIterator>::difference_type
 _DistanceType;

      _DistanceType __len = std::distance(__first, __last);

      while (__len > 0)
 {
   _DistanceType __half = __len >> 1;
   _ForwardIterator __middle = __first;
   std::advance(__middle, __half);
   if (__pred(*__middle))
     {
       __first = __middle;
       ++__first;
       __len = __len - __half - 1;
     }
   else
     __len = __half;
 }
      return __first;
    }


  template<typename _InputIterator, typename _OutputIterator,
    typename _Predicate>
   
    _OutputIterator
    __remove_copy_if(_InputIterator __first, _InputIterator __last,
       _OutputIterator __result, _Predicate __pred)
    {
      for (; __first != __last; ++__first)
 if (!__pred(__first))
   {
     *__result = *__first;
     ++__result;
   }
      return __result;
    }
# 622 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _InputIterator, typename _OutputIterator, typename _Tp>
   
    inline _OutputIterator
    remove_copy(_InputIterator __first, _InputIterator __last,
  _OutputIterator __result, const _Tp& __value)
    {

     
     

     

      ;

      return std::__remove_copy_if(__first, __last, __result,
 __gnu_cxx::__ops::__iter_equals_val(__value));
    }
# 655 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _InputIterator, typename _OutputIterator,
    typename _Predicate>
   
    inline _OutputIterator
    remove_copy_if(_InputIterator __first, _InputIterator __last,
     _OutputIterator __result, _Predicate __pred)
    {

     
     

     

      ;

      return std::__remove_copy_if(__first, __last, __result,
       __gnu_cxx::__ops::__pred_iter(__pred));
    }
# 690 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _InputIterator, typename _OutputIterator,
    typename _Predicate>
   
    _OutputIterator
    copy_if(_InputIterator __first, _InputIterator __last,
     _OutputIterator __result, _Predicate __pred)
    {

     
     

     

      ;

      for (; __first != __last; ++__first)
 if (__pred(*__first))
   {
     *__result = *__first;
     ++__result;
   }
      return __result;
    }

  template<typename _InputIterator, typename _Size, typename _OutputIterator>
   
    _OutputIterator
    __copy_n(_InputIterator __first, _Size __n,
      _OutputIterator __result, input_iterator_tag)
    {
      return std::__niter_wrap(__result,
          __copy_n_a(__first, __n,
       std::__niter_base(__result), true));
    }

  template<typename _RandomAccessIterator, typename _Size,
    typename _OutputIterator>
   
    inline _OutputIterator
    __copy_n(_RandomAccessIterator __first, _Size __n,
      _OutputIterator __result, random_access_iterator_tag)
    { return std::copy(__first, __first + __n, __result); }
# 746 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _InputIterator, typename _Size, typename _OutputIterator>
   
    inline _OutputIterator
    copy_n(_InputIterator __first, _Size __n, _OutputIterator __result)
    {

     
     


      const auto __n2 = std::__size_to_integer(__n);
      if (__n2 <= 0)
 return __result;

      ;
      ;

      return std::__copy_n(__first, __n2, __result,
      std::__iterator_category(__first));
    }
# 782 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _InputIterator, typename _OutputIterator1,
    typename _OutputIterator2, typename _Predicate>
   
    pair<_OutputIterator1, _OutputIterator2>
    partition_copy(_InputIterator __first, _InputIterator __last,
     _OutputIterator1 __out_true, _OutputIterator2 __out_false,
     _Predicate __pred)
    {

     
     

     

     

      ;

      for (; __first != __last; ++__first)
 if (__pred(*__first))
   {
     *__out_true = *__first;
     ++__out_true;
   }
 else
   {
     *__out_false = *__first;
     ++__out_false;
   }

      return pair<_OutputIterator1, _OutputIterator2>(__out_true, __out_false);
    }
# 833 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _ForwardIterator, typename _Tp>
   
    inline _ForwardIterator
    remove(_ForwardIterator __first, _ForwardIterator __last,
    const _Tp& __value)
    {

     

     

      ;

      return std::__remove_if(__first, __last,
  __gnu_cxx::__ops::__iter_equals_val(__value));
    }
# 867 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _ForwardIterator, typename _Predicate>
   
    inline _ForwardIterator
    remove_if(_ForwardIterator __first, _ForwardIterator __last,
       _Predicate __pred)
    {

     

     

      ;

      return std::__remove_if(__first, __last,
         __gnu_cxx::__ops::__pred_iter(__pred));
    }

  template<typename _ForwardIterator, typename _BinaryPredicate>
   
    _ForwardIterator
    __adjacent_find(_ForwardIterator __first, _ForwardIterator __last,
      _BinaryPredicate __binary_pred)
    {
      if (__first == __last)
 return __last;
      _ForwardIterator __next = __first;
      while (++__next != __last)
 {
   if (__binary_pred(__first, __next))
     return __first;
   __first = __next;
 }
      return __last;
    }

  template<typename _ForwardIterator, typename _BinaryPredicate>
   
    _ForwardIterator
    __unique(_ForwardIterator __first, _ForwardIterator __last,
      _BinaryPredicate __binary_pred)
    {

      __first = std::__adjacent_find(__first, __last, __binary_pred);
      if (__first == __last)
 return __last;


      _ForwardIterator __dest = __first;
      ++__first;
      while (++__first != __last)
 if (!__binary_pred(__dest, __first))
   *++__dest = std::move(*__first);
      return ++__dest;
    }
# 936 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _ForwardIterator>
   
    inline _ForwardIterator
    unique(_ForwardIterator __first, _ForwardIterator __last)
    {

     

     

      ;

      return std::__unique(__first, __last,
      __gnu_cxx::__ops::__iter_equal_to_iter());
    }
# 967 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _ForwardIterator, typename _BinaryPredicate>
   
    inline _ForwardIterator
    unique(_ForwardIterator __first, _ForwardIterator __last,
    _BinaryPredicate __binary_pred)
    {

     

     


      ;

      return std::__unique(__first, __last,
      __gnu_cxx::__ops::__iter_comp_iter(__binary_pred));
    }







  template<typename _ForwardIterator, typename _OutputIterator,
    typename _BinaryPredicate>
   
    _OutputIterator
    __unique_copy(_ForwardIterator __first, _ForwardIterator __last,
    _OutputIterator __result, _BinaryPredicate __binary_pred,
    forward_iterator_tag, output_iterator_tag)
    {

     



      _ForwardIterator __next = __first;
      *__result = *__first;
      while (++__next != __last)
 if (!__binary_pred(__first, __next))
   {
     __first = __next;
     *++__result = *__first;
   }
      return ++__result;
    }







  template<typename _InputIterator, typename _OutputIterator,
    typename _BinaryPredicate>
   
    _OutputIterator
    __unique_copy(_InputIterator __first, _InputIterator __last,
    _OutputIterator __result, _BinaryPredicate __binary_pred,
    input_iterator_tag, output_iterator_tag)
    {

     



      typename iterator_traits<_InputIterator>::value_type __value = *__first;
      __decltype(__gnu_cxx::__ops::__iter_comp_val(__binary_pred))
 __rebound_pred
 = __gnu_cxx::__ops::__iter_comp_val(__binary_pred);
      *__result = __value;
      while (++__first != __last)
 if (!__rebound_pred(__first, __value))
   {
     __value = *__first;
     *++__result = __value;
   }
      return ++__result;
    }







  template<typename _InputIterator, typename _ForwardIterator,
    typename _BinaryPredicate>
   
    _ForwardIterator
    __unique_copy(_InputIterator __first, _InputIterator __last,
    _ForwardIterator __result, _BinaryPredicate __binary_pred,
    input_iterator_tag, forward_iterator_tag)
    {

     


      *__result = *__first;
      while (++__first != __last)
 if (!__binary_pred(__result, __first))
   *++__result = *__first;
      return ++__result;
    }






  template<typename _BidirectionalIterator>
   
    void
    __reverse(_BidirectionalIterator __first, _BidirectionalIterator __last,
       bidirectional_iterator_tag)
    {
      while (true)
 if (__first == __last || __first == --__last)
   return;
 else
   {
     std::iter_swap(__first, __last);
     ++__first;
   }
    }






  template<typename _RandomAccessIterator>
   
    void
    __reverse(_RandomAccessIterator __first, _RandomAccessIterator __last,
       random_access_iterator_tag)
    {
      if (__first == __last)
 return;
      --__last;
      while (__first < __last)
 {
   std::iter_swap(__first, __last);
   ++__first;
   --__last;
 }
    }
# 1128 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _BidirectionalIterator>
   
    inline void
    reverse(_BidirectionalIterator __first, _BidirectionalIterator __last)
    {

     

      ;
      std::__reverse(__first, __last, std::__iterator_category(__first));
    }
# 1156 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _BidirectionalIterator, typename _OutputIterator>
   
    _OutputIterator
    reverse_copy(_BidirectionalIterator __first, _BidirectionalIterator __last,
   _OutputIterator __result)
    {

     

     

      ;

      while (__first != __last)
 {
   --__last;
   *__result = *__last;
   ++__result;
 }
      return __result;
    }





  template<typename _EuclideanRingElement>
   
    _EuclideanRingElement
    __gcd(_EuclideanRingElement __m, _EuclideanRingElement __n)
    {
      while (__n != 0)
 {
   _EuclideanRingElement __t = __m % __n;
   __m = __n;
   __n = __t;
 }
      return __m;
    }

inline namespace _V2 {


  template<typename _ForwardIterator>
   
    _ForwardIterator
    __rotate(_ForwardIterator __first,
      _ForwardIterator __middle,
      _ForwardIterator __last,
      forward_iterator_tag)
    {
      if (__first == __middle)
 return __last;
      else if (__last == __middle)
 return __first;

      _ForwardIterator __first2 = __middle;
      do
 {
   std::iter_swap(__first, __first2);
   ++__first;
   ++__first2;
   if (__first == __middle)
     __middle = __first2;
 }
      while (__first2 != __last);

      _ForwardIterator __ret = __first;

      __first2 = __middle;

      while (__first2 != __last)
 {
   std::iter_swap(__first, __first2);
   ++__first;
   ++__first2;
   if (__first == __middle)
     __middle = __first2;
   else if (__first2 == __last)
     __first2 = __middle;
 }
      return __ret;
    }


  template<typename _BidirectionalIterator>
   
    _BidirectionalIterator
    __rotate(_BidirectionalIterator __first,
      _BidirectionalIterator __middle,
      _BidirectionalIterator __last,
       bidirectional_iterator_tag)
    {

     


      if (__first == __middle)
 return __last;
      else if (__last == __middle)
 return __first;

      std::__reverse(__first, __middle, bidirectional_iterator_tag());
      std::__reverse(__middle, __last, bidirectional_iterator_tag());

      while (__first != __middle && __middle != __last)
 {
   std::iter_swap(__first, --__last);
   ++__first;
 }

      if (__first == __middle)
 {
   std::__reverse(__middle, __last, bidirectional_iterator_tag());
   return __last;
 }
      else
 {
   std::__reverse(__first, __middle, bidirectional_iterator_tag());
   return __first;
 }
    }


  template<typename _RandomAccessIterator>
   
    _RandomAccessIterator
    __rotate(_RandomAccessIterator __first,
      _RandomAccessIterator __middle,
      _RandomAccessIterator __last,
      random_access_iterator_tag)
    {

     


      if (__first == __middle)
 return __last;
      else if (__last == __middle)
 return __first;

      typedef typename iterator_traits<_RandomAccessIterator>::difference_type
 _Distance;
      typedef typename iterator_traits<_RandomAccessIterator>::value_type
 _ValueType;

      _Distance __n = __last - __first;
      _Distance __k = __middle - __first;

      if (__k == __n - __k)
 {
   std::swap_ranges(__first, __middle, __middle);
   return __middle;
 }

      _RandomAccessIterator __p = __first;
      _RandomAccessIterator __ret = __first + (__last - __middle);

      for (;;)
 {
   if (__k < __n - __k)
     {
       if (__is_pod(_ValueType) && __k == 1)
  {
    _ValueType __t = std::move(*__p);
    std::move(__p + 1, __p + __n, __p);
    *(__p + __n - 1) = std::move(__t);
    return __ret;
  }
       _RandomAccessIterator __q = __p + __k;
       for (_Distance __i = 0; __i < __n - __k; ++ __i)
  {
    std::iter_swap(__p, __q);
    ++__p;
    ++__q;
  }
       __n %= __k;
       if (__n == 0)
  return __ret;
       std::swap(__n, __k);
       __k = __n - __k;
     }
   else
     {
       __k = __n - __k;
       if (__is_pod(_ValueType) && __k == 1)
  {
    _ValueType __t = std::move(*(__p + __n - 1));
    std::move_backward(__p, __p + __n - 1, __p + __n);
    *__p = std::move(__t);
    return __ret;
  }
       _RandomAccessIterator __q = __p + __n;
       __p = __q - __k;
       for (_Distance __i = 0; __i < __n - __k; ++ __i)
  {
    --__p;
    --__q;
    std::iter_swap(__p, __q);
  }
       __n %= __k;
       if (__n == 0)
  return __ret;
       std::swap(__n, __k);
     }
 }
    }
# 1387 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _ForwardIterator>
   
    inline _ForwardIterator
    rotate(_ForwardIterator __first, _ForwardIterator __middle,
    _ForwardIterator __last)
    {

     

      ;
      ;

      return std::__rotate(__first, __middle, __last,
      std::__iterator_category(__first));
    }

}
# 1425 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _ForwardIterator, typename _OutputIterator>
   
    inline _OutputIterator
    rotate_copy(_ForwardIterator __first, _ForwardIterator __middle,
  _ForwardIterator __last, _OutputIterator __result)
    {

     
     

      ;
      ;

      return std::copy(__first, __middle,
         std::copy(__middle, __last, __result));
    }


  template<typename _ForwardIterator, typename _Predicate>
   
    _ForwardIterator
    __partition(_ForwardIterator __first, _ForwardIterator __last,
  _Predicate __pred, forward_iterator_tag)
    {
      if (__first == __last)
 return __first;

      while (__pred(*__first))
 if (++__first == __last)
   return __first;

      _ForwardIterator __next = __first;

      while (++__next != __last)
 if (__pred(*__next))
   {
     std::iter_swap(__first, __next);
     ++__first;
   }

      return __first;
    }


  template<typename _BidirectionalIterator, typename _Predicate>
   
    _BidirectionalIterator
    __partition(_BidirectionalIterator __first, _BidirectionalIterator __last,
  _Predicate __pred, bidirectional_iterator_tag)
    {
      while (true)
 {
   while (true)
     if (__first == __last)
       return __first;
     else if (__pred(*__first))
       ++__first;
     else
       break;
   --__last;
   while (true)
     if (__first == __last)
       return __first;
     else if (!bool(__pred(*__last)))
       --__last;
     else
       break;
   std::iter_swap(__first, __last);
   ++__first;
 }
    }
# 1506 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _ForwardIterator, typename _Pointer, typename _Predicate,
    typename _Distance>
    _ForwardIterator
    __stable_partition_adaptive(_ForwardIterator __first,
    _ForwardIterator __last,
    _Predicate __pred, _Distance __len,
    _Pointer __buffer,
    _Distance __buffer_size)
    {
      if (__len == 1)
 return __first;

      if (__len <= __buffer_size)
 {
   _ForwardIterator __result1 = __first;
   _Pointer __result2 = __buffer;




   *__result2 = std::move(*__first);
   ++__result2;
   ++__first;
   for (; __first != __last; ++__first)
     if (__pred(__first))
       {
  *__result1 = std::move(*__first);
  ++__result1;
       }
     else
       {
  *__result2 = std::move(*__first);
  ++__result2;
       }

   std::move(__buffer, __result2, __result1);
   return __result1;
 }

      _ForwardIterator __middle = __first;
      std::advance(__middle, __len / 2);
      _ForwardIterator __left_split =
 std::__stable_partition_adaptive(__first, __middle, __pred,
      __len / 2, __buffer,
      __buffer_size);



      _Distance __right_len = __len - __len / 2;
      _ForwardIterator __right_split =
 std::__find_if_not_n(__middle, __right_len, __pred);

      if (__right_len)
 __right_split =
   std::__stable_partition_adaptive(__right_split, __last, __pred,
        __right_len,
        __buffer, __buffer_size);

      return std::rotate(__left_split, __middle, __right_split);
    }

  template<typename _ForwardIterator, typename _Predicate>
    _ForwardIterator
    __stable_partition(_ForwardIterator __first, _ForwardIterator __last,
         _Predicate __pred)
    {
      __first = std::__find_if_not(__first, __last, __pred);

      if (__first == __last)
 return __first;

      typedef typename iterator_traits<_ForwardIterator>::value_type
 _ValueType;
      typedef typename iterator_traits<_ForwardIterator>::difference_type
 _DistanceType;

      _Temporary_buffer<_ForwardIterator, _ValueType>
 __buf(__first, std::distance(__first, __last));
      return
 std::__stable_partition_adaptive(__first, __last, __pred,
      _DistanceType(__buf.requested_size()),
      __buf.begin(),
      _DistanceType(__buf.size()));
    }
# 1608 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _ForwardIterator, typename _Predicate>
    inline _ForwardIterator
    stable_partition(_ForwardIterator __first, _ForwardIterator __last,
       _Predicate __pred)
    {

     

     

      ;

      return std::__stable_partition(__first, __last,
         __gnu_cxx::__ops::__pred_iter(__pred));
    }





  template<typename _RandomAccessIterator, typename _Compare>
   
    void
    __heap_select(_RandomAccessIterator __first,
    _RandomAccessIterator __middle,
    _RandomAccessIterator __last, _Compare __comp)
    {
      std::__make_heap(__first, __middle, __comp);
      for (_RandomAccessIterator __i = __middle; __i < __last; ++__i)
 if (__comp(__i, __first))
   std::__pop_heap(__first, __middle, __i, __comp);
    }



  template<typename _InputIterator, typename _RandomAccessIterator,
    typename _Compare>
   
    _RandomAccessIterator
    __partial_sort_copy(_InputIterator __first, _InputIterator __last,
   _RandomAccessIterator __result_first,
   _RandomAccessIterator __result_last,
   _Compare __comp)
    {
      typedef typename iterator_traits<_InputIterator>::value_type
 _InputValueType;
      typedef iterator_traits<_RandomAccessIterator> _RItTraits;
      typedef typename _RItTraits::difference_type _DistanceType;

      if (__result_first == __result_last)
 return __result_last;
      _RandomAccessIterator __result_real_last = __result_first;
      while (__first != __last && __result_real_last != __result_last)
 {
   *__result_real_last = *__first;
   ++__result_real_last;
   ++__first;
 }

      std::__make_heap(__result_first, __result_real_last, __comp);
      while (__first != __last)
 {
   if (__comp(__first, __result_first))
     std::__adjust_heap(__result_first, _DistanceType(0),
          _DistanceType(__result_real_last
          - __result_first),
          _InputValueType(*__first), __comp);
   ++__first;
 }
      std::__sort_heap(__result_first, __result_real_last, __comp);
      return __result_real_last;
    }
# 1701 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _InputIterator, typename _RandomAccessIterator>
   
    inline _RandomAccessIterator
    partial_sort_copy(_InputIterator __first, _InputIterator __last,
        _RandomAccessIterator __result_first,
        _RandomAccessIterator __result_last)
    {
# 1716 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
     
     

     

     
      ;
      ;
      ;

      return std::__partial_sort_copy(__first, __last,
          __result_first, __result_last,
          __gnu_cxx::__ops::__iter_less_iter());
    }
# 1751 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _InputIterator, typename _RandomAccessIterator,
    typename _Compare>
   
    inline _RandomAccessIterator
    partial_sort_copy(_InputIterator __first, _InputIterator __last,
        _RandomAccessIterator __result_first,
        _RandomAccessIterator __result_last,
        _Compare __comp)
    {
# 1768 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
     
     

     

     

     

      ;
      ;
      ;

      return std::__partial_sort_copy(__first, __last,
          __result_first, __result_last,
    __gnu_cxx::__ops::__iter_comp_iter(__comp));
    }




  template<typename _RandomAccessIterator, typename _Compare>
   
    void
    __unguarded_linear_insert(_RandomAccessIterator __last,
         _Compare __comp)
    {
      typename iterator_traits<_RandomAccessIterator>::value_type
 __val = std::move(*__last);
      _RandomAccessIterator __next = __last;
      --__next;
      while (__comp(__val, __next))
 {
   *__last = std::move(*__next);
   __last = __next;
   --__next;
 }
      *__last = std::move(__val);
    }


  template<typename _RandomAccessIterator, typename _Compare>
   
    void
    __insertion_sort(_RandomAccessIterator __first,
       _RandomAccessIterator __last, _Compare __comp)
    {
      if (__first == __last) return;

      for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i)
 {
   if (__comp(__i, __first))
     {
       typename iterator_traits<_RandomAccessIterator>::value_type
  __val = std::move(*__i);
       std::move_backward(__first, __i, __i + 1);
       *__first = std::move(__val);
     }
   else
     std::__unguarded_linear_insert(__i,
    __gnu_cxx::__ops::__val_comp_iter(__comp));
 }
    }


  template<typename _RandomAccessIterator, typename _Compare>
   
    inline void
    __unguarded_insertion_sort(_RandomAccessIterator __first,
          _RandomAccessIterator __last, _Compare __comp)
    {
      for (_RandomAccessIterator __i = __first; __i != __last; ++__i)
 std::__unguarded_linear_insert(__i,
    __gnu_cxx::__ops::__val_comp_iter(__comp));
    }





  enum { _S_threshold = 16 };


  template<typename _RandomAccessIterator, typename _Compare>
   
    void
    __final_insertion_sort(_RandomAccessIterator __first,
      _RandomAccessIterator __last, _Compare __comp)
    {
      if (__last - __first > int(_S_threshold))
 {
   std::__insertion_sort(__first, __first + int(_S_threshold), __comp);
   std::__unguarded_insertion_sort(__first + int(_S_threshold), __last,
       __comp);
 }
      else
 std::__insertion_sort(__first, __last, __comp);
    }


  template<typename _RandomAccessIterator, typename _Compare>
   
    _RandomAccessIterator
    __unguarded_partition(_RandomAccessIterator __first,
     _RandomAccessIterator __last,
     _RandomAccessIterator __pivot, _Compare __comp)
    {
      while (true)
 {
   while (__comp(__first, __pivot))
     ++__first;
   --__last;
   while (__comp(__pivot, __last))
     --__last;
   if (!(__first < __last))
     return __first;
   std::iter_swap(__first, __last);
   ++__first;
 }
    }


  template<typename _RandomAccessIterator, typename _Compare>
   
    inline _RandomAccessIterator
    __unguarded_partition_pivot(_RandomAccessIterator __first,
    _RandomAccessIterator __last, _Compare __comp)
    {
      _RandomAccessIterator __mid = __first + (__last - __first) / 2;
      std::__move_median_to_first(__first, __first + 1, __mid, __last - 1,
      __comp);
      return std::__unguarded_partition(__first + 1, __last, __first, __comp);
    }

  template<typename _RandomAccessIterator, typename _Compare>
   
    inline void
    __partial_sort(_RandomAccessIterator __first,
     _RandomAccessIterator __middle,
     _RandomAccessIterator __last,
     _Compare __comp)
    {
      std::__heap_select(__first, __middle, __last, __comp);
      std::__sort_heap(__first, __middle, __comp);
    }


  template<typename _RandomAccessIterator, typename _Size, typename _Compare>
   
    void
    __introsort_loop(_RandomAccessIterator __first,
       _RandomAccessIterator __last,
       _Size __depth_limit, _Compare __comp)
    {
      while (__last - __first > int(_S_threshold))
 {
   if (__depth_limit == 0)
     {
       std::__partial_sort(__first, __last, __last, __comp);
       return;
     }
   --__depth_limit;
   _RandomAccessIterator __cut =
     std::__unguarded_partition_pivot(__first, __last, __comp);
   std::__introsort_loop(__cut, __last, __depth_limit, __comp);
   __last = __cut;
 }
    }



  template<typename _RandomAccessIterator, typename _Compare>
   
    inline void
    __sort(_RandomAccessIterator __first, _RandomAccessIterator __last,
    _Compare __comp)
    {
      if (__first != __last)
 {
   std::__introsort_loop(__first, __last,
    std::__lg(__last - __first) * 2,
    __comp);
   std::__final_insertion_sort(__first, __last, __comp);
 }
    }

  template<typename _RandomAccessIterator, typename _Size, typename _Compare>
   
    void
    __introselect(_RandomAccessIterator __first, _RandomAccessIterator __nth,
    _RandomAccessIterator __last, _Size __depth_limit,
    _Compare __comp)
    {
      while (__last - __first > 3)
 {
   if (__depth_limit == 0)
     {
       std::__heap_select(__first, __nth + 1, __last, __comp);

       std::iter_swap(__first, __nth);
       return;
     }
   --__depth_limit;
   _RandomAccessIterator __cut =
     std::__unguarded_partition_pivot(__first, __last, __comp);
   if (__cut <= __nth)
     __first = __cut;
   else
     __last = __cut;
 }
      std::__insertion_sort(__first, __last, __comp);
    }
# 2002 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _ForwardIterator, typename _Tp, typename _Compare>
   
    inline _ForwardIterator
    lower_bound(_ForwardIterator __first, _ForwardIterator __last,
  const _Tp& __val, _Compare __comp)
    {

     
     

     
                    ;

      return std::__lower_bound(__first, __last, __val,
    __gnu_cxx::__ops::__iter_comp_val(__comp));
    }

  template<typename _ForwardIterator, typename _Tp, typename _Compare>
   
    _ForwardIterator
    __upper_bound(_ForwardIterator __first, _ForwardIterator __last,
    const _Tp& __val, _Compare __comp)
    {
      typedef typename iterator_traits<_ForwardIterator>::difference_type
 _DistanceType;

      _DistanceType __len = std::distance(__first, __last);

      while (__len > 0)
 {
   _DistanceType __half = __len >> 1;
   _ForwardIterator __middle = __first;
   std::advance(__middle, __half);
   if (__comp(__val, __middle))
     __len = __half;
   else
     {
       __first = __middle;
       ++__first;
       __len = __len - __half - 1;
     }
 }
      return __first;
    }
# 2058 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _ForwardIterator, typename _Tp>
   
    inline _ForwardIterator
    upper_bound(_ForwardIterator __first, _ForwardIterator __last,
  const _Tp& __val)
    {

     
     

      ;

      return std::__upper_bound(__first, __last, __val,
    __gnu_cxx::__ops::__val_less_iter());
    }
# 2089 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _ForwardIterator, typename _Tp, typename _Compare>
   
    inline _ForwardIterator
    upper_bound(_ForwardIterator __first, _ForwardIterator __last,
  const _Tp& __val, _Compare __comp)
    {

     
     

     
                    ;

      return std::__upper_bound(__first, __last, __val,
    __gnu_cxx::__ops::__val_comp_iter(__comp));
    }

  template<typename _ForwardIterator, typename _Tp,
    typename _CompareItTp, typename _CompareTpIt>
   
    pair<_ForwardIterator, _ForwardIterator>
    __equal_range(_ForwardIterator __first, _ForwardIterator __last,
    const _Tp& __val,
    _CompareItTp __comp_it_val, _CompareTpIt __comp_val_it)
    {
      typedef typename iterator_traits<_ForwardIterator>::difference_type
 _DistanceType;

      _DistanceType __len = std::distance(__first, __last);

      while (__len > 0)
 {
   _DistanceType __half = __len >> 1;
   _ForwardIterator __middle = __first;
   std::advance(__middle, __half);
   if (__comp_it_val(__middle, __val))
     {
       __first = __middle;
       ++__first;
       __len = __len - __half - 1;
     }
   else if (__comp_val_it(__val, __middle))
     __len = __half;
   else
     {
       _ForwardIterator __left
  = std::__lower_bound(__first, __middle, __val, __comp_it_val);
       std::advance(__first, __len);
       _ForwardIterator __right
  = std::__upper_bound(++__middle, __first, __val, __comp_val_it);
       return pair<_ForwardIterator, _ForwardIterator>(__left, __right);
     }
 }
      return pair<_ForwardIterator, _ForwardIterator>(__first, __first);
    }
# 2162 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _ForwardIterator, typename _Tp>
   
    inline pair<_ForwardIterator, _ForwardIterator>
    equal_range(_ForwardIterator __first, _ForwardIterator __last,
  const _Tp& __val)
    {

     
     

     

      ;
      ;

      return std::__equal_range(__first, __last, __val,
    __gnu_cxx::__ops::__iter_less_val(),
    __gnu_cxx::__ops::__val_less_iter());
    }
# 2199 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _ForwardIterator, typename _Tp, typename _Compare>
   
    inline pair<_ForwardIterator, _ForwardIterator>
    equal_range(_ForwardIterator __first, _ForwardIterator __last,
  const _Tp& __val, _Compare __comp)
    {

     
     

     

     
                    ;
     
                    ;

      return std::__equal_range(__first, __last, __val,
    __gnu_cxx::__ops::__iter_comp_val(__comp),
    __gnu_cxx::__ops::__val_comp_iter(__comp));
    }
# 2233 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _ForwardIterator, typename _Tp>
   
    bool
    binary_search(_ForwardIterator __first, _ForwardIterator __last,
    const _Tp& __val)
    {

     
     

      ;
      ;

      _ForwardIterator __i
 = std::__lower_bound(__first, __last, __val,
        __gnu_cxx::__ops::__iter_less_val());
      return __i != __last && !(__val < *__i);
    }
# 2267 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _ForwardIterator, typename _Tp, typename _Compare>
   
    bool
    binary_search(_ForwardIterator __first, _ForwardIterator __last,
    const _Tp& __val, _Compare __comp)
    {

     
     

     
                    ;
     
                    ;

      _ForwardIterator __i
 = std::__lower_bound(__first, __last, __val,
        __gnu_cxx::__ops::__iter_comp_val(__comp));
      return __i != __last && !bool(__comp(__val, *__i));
    }




  template<typename _InputIterator1, typename _InputIterator2,
    typename _OutputIterator, typename _Compare>
    void
    __move_merge_adaptive(_InputIterator1 __first1, _InputIterator1 __last1,
     _InputIterator2 __first2, _InputIterator2 __last2,
     _OutputIterator __result, _Compare __comp)
    {
      while (__first1 != __last1 && __first2 != __last2)
 {
   if (__comp(__first2, __first1))
     {
       *__result = std::move(*__first2);
       ++__first2;
     }
   else
     {
       *__result = std::move(*__first1);
       ++__first1;
     }
   ++__result;
 }
      if (__first1 != __last1)
 std::move(__first1, __last1, __result);
    }


  template<typename _BidirectionalIterator1, typename _BidirectionalIterator2,
    typename _BidirectionalIterator3, typename _Compare>
    void
    __move_merge_adaptive_backward(_BidirectionalIterator1 __first1,
       _BidirectionalIterator1 __last1,
       _BidirectionalIterator2 __first2,
       _BidirectionalIterator2 __last2,
       _BidirectionalIterator3 __result,
       _Compare __comp)
    {
      if (__first1 == __last1)
 {
   std::move_backward(__first2, __last2, __result);
   return;
 }
      else if (__first2 == __last2)
 return;

      --__last1;
      --__last2;
      while (true)
 {
   if (__comp(__last2, __last1))
     {
       *--__result = std::move(*__last1);
       if (__first1 == __last1)
  {
    std::move_backward(__first2, ++__last2, __result);
    return;
  }
       --__last1;
     }
   else
     {
       *--__result = std::move(*__last2);
       if (__first2 == __last2)
  return;
       --__last2;
     }
 }
    }


  template<typename _BidirectionalIterator1, typename _BidirectionalIterator2,
    typename _Distance>
    _BidirectionalIterator1
    __rotate_adaptive(_BidirectionalIterator1 __first,
        _BidirectionalIterator1 __middle,
        _BidirectionalIterator1 __last,
        _Distance __len1, _Distance __len2,
        _BidirectionalIterator2 __buffer,
        _Distance __buffer_size)
    {
      _BidirectionalIterator2 __buffer_end;
      if (__len1 > __len2 && __len2 <= __buffer_size)
 {
   if (__len2)
     {
       __buffer_end = std::move(__middle, __last, __buffer);
       std::move_backward(__first, __middle, __last);
       return std::move(__buffer, __buffer_end, __first);
     }
   else
     return __first;
 }
      else if (__len1 <= __buffer_size)
 {
   if (__len1)
     {
       __buffer_end = std::move(__first, __middle, __buffer);
       std::move(__middle, __last, __first);
       return std::move_backward(__buffer, __buffer_end, __last);
     }
   else
     return __last;
 }
      else
 return std::rotate(__first, __middle, __last);
    }


  template<typename _BidirectionalIterator, typename _Distance,
    typename _Pointer, typename _Compare>
    void
    __merge_adaptive(_BidirectionalIterator __first,
       _BidirectionalIterator __middle,
       _BidirectionalIterator __last,
       _Distance __len1, _Distance __len2,
       _Pointer __buffer, _Compare __comp)
    {
      if (__len1 <= __len2)
 {
   _Pointer __buffer_end = std::move(__first, __middle, __buffer);
   std::__move_merge_adaptive(__buffer, __buffer_end, __middle, __last,
         __first, __comp);
 }
      else
 {
   _Pointer __buffer_end = std::move(__middle, __last, __buffer);
   std::__move_merge_adaptive_backward(__first, __middle, __buffer,
           __buffer_end, __last, __comp);
 }
    }

  template<typename _BidirectionalIterator, typename _Distance,
    typename _Pointer, typename _Compare>
    void
    __merge_adaptive_resize(_BidirectionalIterator __first,
       _BidirectionalIterator __middle,
       _BidirectionalIterator __last,
       _Distance __len1, _Distance __len2,
       _Pointer __buffer, _Distance __buffer_size,
       _Compare __comp)
    {
      if (__len1 <= __buffer_size || __len2 <= __buffer_size)
 std::__merge_adaptive(__first, __middle, __last,
         __len1, __len2, __buffer, __comp);
      else
 {
   _BidirectionalIterator __first_cut = __first;
   _BidirectionalIterator __second_cut = __middle;
   _Distance __len11 = 0;
   _Distance __len22 = 0;
   if (__len1 > __len2)
     {
       __len11 = __len1 / 2;
       std::advance(__first_cut, __len11);
       __second_cut
  = std::__lower_bound(__middle, __last, *__first_cut,
         __gnu_cxx::__ops::__iter_comp_val(__comp));
       __len22 = std::distance(__middle, __second_cut);
     }
   else
     {
       __len22 = __len2 / 2;
       std::advance(__second_cut, __len22);
       __first_cut
  = std::__upper_bound(__first, __middle, *__second_cut,
         __gnu_cxx::__ops::__val_comp_iter(__comp));
       __len11 = std::distance(__first, __first_cut);
     }

   _BidirectionalIterator __new_middle
     = std::__rotate_adaptive(__first_cut, __middle, __second_cut,
         _Distance(__len1 - __len11), __len22,
         __buffer, __buffer_size);
   std::__merge_adaptive_resize(__first, __first_cut, __new_middle,
           __len11, __len22,
           __buffer, __buffer_size, __comp);
   std::__merge_adaptive_resize(__new_middle, __second_cut, __last,
           _Distance(__len1 - __len11),
           _Distance(__len2 - __len22),
           __buffer, __buffer_size, __comp);
 }
    }


  template<typename _BidirectionalIterator, typename _Distance,
    typename _Compare>
    void
    __merge_without_buffer(_BidirectionalIterator __first,
      _BidirectionalIterator __middle,
      _BidirectionalIterator __last,
      _Distance __len1, _Distance __len2,
      _Compare __comp)
    {
      if (__len1 == 0 || __len2 == 0)
 return;

      if (__len1 + __len2 == 2)
 {
   if (__comp(__middle, __first))
     std::iter_swap(__first, __middle);
   return;
 }

      _BidirectionalIterator __first_cut = __first;
      _BidirectionalIterator __second_cut = __middle;
      _Distance __len11 = 0;
      _Distance __len22 = 0;
      if (__len1 > __len2)
 {
   __len11 = __len1 / 2;
   std::advance(__first_cut, __len11);
   __second_cut
     = std::__lower_bound(__middle, __last, *__first_cut,
     __gnu_cxx::__ops::__iter_comp_val(__comp));
   __len22 = std::distance(__middle, __second_cut);
 }
      else
 {
   __len22 = __len2 / 2;
   std::advance(__second_cut, __len22);
   __first_cut
     = std::__upper_bound(__first, __middle, *__second_cut,
     __gnu_cxx::__ops::__val_comp_iter(__comp));
   __len11 = std::distance(__first, __first_cut);
 }

      _BidirectionalIterator __new_middle
 = std::rotate(__first_cut, __middle, __second_cut);
      std::__merge_without_buffer(__first, __first_cut, __new_middle,
      __len11, __len22, __comp);
      std::__merge_without_buffer(__new_middle, __second_cut, __last,
      __len1 - __len11, __len2 - __len22, __comp);
    }

  template<typename _BidirectionalIterator, typename _Compare>
    void
    __inplace_merge(_BidirectionalIterator __first,
      _BidirectionalIterator __middle,
      _BidirectionalIterator __last,
      _Compare __comp)
    {
      typedef typename iterator_traits<_BidirectionalIterator>::value_type
   _ValueType;
      typedef typename iterator_traits<_BidirectionalIterator>::difference_type
   _DistanceType;

      if (__first == __middle || __middle == __last)
 return;

      const _DistanceType __len1 = std::distance(__first, __middle);
      const _DistanceType __len2 = std::distance(__middle, __last);


      typedef _Temporary_buffer<_BidirectionalIterator, _ValueType> _TmpBuf;


      _TmpBuf __buf(__first, std::min(__len1, __len2));

      if (__builtin_expect(__buf.size() == __buf.requested_size(), true))
 std::__merge_adaptive
   (__first, __middle, __last, __len1, __len2, __buf.begin(), __comp);
      else if (__builtin_expect(__buf.begin() == 0, false))
 std::__merge_without_buffer
   (__first, __middle, __last, __len1, __len2, __comp);
      else
 std::__merge_adaptive_resize
   (__first, __middle, __last, __len1, __len2, __buf.begin(),
    _DistanceType(__buf.size()), __comp);




    }
# 2582 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _BidirectionalIterator>
    inline void
    inplace_merge(_BidirectionalIterator __first,
    _BidirectionalIterator __middle,
    _BidirectionalIterator __last)
    {

     

     

      ;
      ;
      ;

      std::__inplace_merge(__first, __middle, __last,
      __gnu_cxx::__ops::__iter_less_iter());
    }
# 2623 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _BidirectionalIterator, typename _Compare>
    inline void
    inplace_merge(_BidirectionalIterator __first,
    _BidirectionalIterator __middle,
    _BidirectionalIterator __last,
    _Compare __comp)
    {

     

     


      ;
      ;
      ;

      std::__inplace_merge(__first, __middle, __last,
      __gnu_cxx::__ops::__iter_comp_iter(__comp));
    }



  template<typename _InputIterator, typename _OutputIterator,
    typename _Compare>
    _OutputIterator
    __move_merge(_InputIterator __first1, _InputIterator __last1,
   _InputIterator __first2, _InputIterator __last2,
   _OutputIterator __result, _Compare __comp)
    {
      while (__first1 != __last1 && __first2 != __last2)
 {
   if (__comp(__first2, __first1))
     {
       *__result = std::move(*__first2);
       ++__first2;
     }
   else
     {
       *__result = std::move(*__first1);
       ++__first1;
     }
   ++__result;
 }
      return std::move(__first2, __last2, std::move(__first1, __last1, __result))

                  ;
    }

  template<typename _RandomAccessIterator1, typename _RandomAccessIterator2,
    typename _Distance, typename _Compare>
    void
    __merge_sort_loop(_RandomAccessIterator1 __first,
        _RandomAccessIterator1 __last,
        _RandomAccessIterator2 __result, _Distance __step_size,
        _Compare __comp)
    {
      const _Distance __two_step = 2 * __step_size;

      while (__last - __first >= __two_step)
 {
   __result = std::__move_merge(__first, __first + __step_size,
           __first + __step_size,
           __first + __two_step,
           __result, __comp);
   __first += __two_step;
 }
      __step_size = std::min(_Distance(__last - __first), __step_size);

      std::__move_merge(__first, __first + __step_size,
   __first + __step_size, __last, __result, __comp);
    }

  template<typename _RandomAccessIterator, typename _Distance,
    typename _Compare>
   
    void
    __chunk_insertion_sort(_RandomAccessIterator __first,
      _RandomAccessIterator __last,
      _Distance __chunk_size, _Compare __comp)
    {
      while (__last - __first >= __chunk_size)
 {
   std::__insertion_sort(__first, __first + __chunk_size, __comp);
   __first += __chunk_size;
 }
      std::__insertion_sort(__first, __last, __comp);
    }

  enum { _S_chunk_size = 7 };

  template<typename _RandomAccessIterator, typename _Pointer, typename _Compare>
    void
    __merge_sort_with_buffer(_RandomAccessIterator __first,
        _RandomAccessIterator __last,
        _Pointer __buffer, _Compare __comp)
    {
      typedef typename iterator_traits<_RandomAccessIterator>::difference_type
 _Distance;

      const _Distance __len = __last - __first;
      const _Pointer __buffer_last = __buffer + __len;

      _Distance __step_size = _S_chunk_size;
      std::__chunk_insertion_sort(__first, __last, __step_size, __comp);

      while (__step_size < __len)
 {
   std::__merge_sort_loop(__first, __last, __buffer,
     __step_size, __comp);
   __step_size *= 2;
   std::__merge_sort_loop(__buffer, __buffer_last, __first,
     __step_size, __comp);
   __step_size *= 2;
 }
    }

  template<typename _RandomAccessIterator, typename _Pointer, typename _Compare>
    void
    __stable_sort_adaptive(_RandomAccessIterator __first,
      _RandomAccessIterator __middle,
      _RandomAccessIterator __last,
      _Pointer __buffer, _Compare __comp)
    {
      std::__merge_sort_with_buffer(__first, __middle, __buffer, __comp);
      std::__merge_sort_with_buffer(__middle, __last, __buffer, __comp);

      std::__merge_adaptive(__first, __middle, __last,
       __middle - __first, __last - __middle,
       __buffer, __comp);
    }

  template<typename _RandomAccessIterator, typename _Pointer,
    typename _Distance, typename _Compare>
    void
    __stable_sort_adaptive_resize(_RandomAccessIterator __first,
      _RandomAccessIterator __last,
      _Pointer __buffer, _Distance __buffer_size,
      _Compare __comp)
    {
      const _Distance __len = (__last - __first + 1) / 2;
      const _RandomAccessIterator __middle = __first + __len;
      if (__len > __buffer_size)
 {
   std::__stable_sort_adaptive_resize(__first, __middle, __buffer,
          __buffer_size, __comp);
   std::__stable_sort_adaptive_resize(__middle, __last, __buffer,
          __buffer_size, __comp);
   std::__merge_adaptive_resize(__first, __middle, __last,
           _Distance(__middle - __first),
           _Distance(__last - __middle),
           __buffer, __buffer_size,
           __comp);
 }
      else
 std::__stable_sort_adaptive(__first, __middle, __last,
        __buffer, __comp);
    }


  template<typename _RandomAccessIterator, typename _Compare>
    void
    __inplace_stable_sort(_RandomAccessIterator __first,
     _RandomAccessIterator __last, _Compare __comp)
    {
      if (__last - __first < 15)
 {
   std::__insertion_sort(__first, __last, __comp);
   return;
 }
      _RandomAccessIterator __middle = __first + (__last - __first) / 2;
      std::__inplace_stable_sort(__first, __middle, __comp);
      std::__inplace_stable_sort(__middle, __last, __comp);
      std::__merge_without_buffer(__first, __middle, __last,
      __middle - __first,
      __last - __middle,
      __comp);
    }
# 2809 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _InputIterator1, typename _InputIterator2,
    typename _Compare>
   
    bool
    __includes(_InputIterator1 __first1, _InputIterator1 __last1,
        _InputIterator2 __first2, _InputIterator2 __last2,
        _Compare __comp)
    {
      while (__first1 != __last1 && __first2 != __last2)
 {
   if (__comp(__first2, __first1))
     return false;
   if (!__comp(__first1, __first2))
     ++__first2;
   ++__first1;
 }

      return __first2 == __last2;
    }
# 2847 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _InputIterator1, typename _InputIterator2>
   
    inline bool
    includes(_InputIterator1 __first1, _InputIterator1 __last1,
      _InputIterator2 __first2, _InputIterator2 __last2)
    {

     
     
     


     


      ;
      ;
      ;
      ;

      return std::__includes(__first1, __last1, __first2, __last2,
        __gnu_cxx::__ops::__iter_less_iter());
    }
# 2892 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _InputIterator1, typename _InputIterator2,
    typename _Compare>
   
    inline bool
    includes(_InputIterator1 __first1, _InputIterator1 __last1,
      _InputIterator2 __first2, _InputIterator2 __last2,
      _Compare __comp)
    {

     
     
     


     


      ;
      ;
      ;
      ;

      return std::__includes(__first1, __last1, __first2, __last2,
        __gnu_cxx::__ops::__iter_comp_iter(__comp));
    }
# 2928 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _BidirectionalIterator, typename _Compare>
   
    bool
    __next_permutation(_BidirectionalIterator __first,
         _BidirectionalIterator __last, _Compare __comp)
    {
      if (__first == __last)
 return false;
      _BidirectionalIterator __i = __first;
      ++__i;
      if (__i == __last)
 return false;
      __i = __last;
      --__i;

      for(;;)
 {
   _BidirectionalIterator __ii = __i;
   --__i;
   if (__comp(__i, __ii))
     {
       _BidirectionalIterator __j = __last;
       while (!__comp(__i, --__j))
  {}
       std::iter_swap(__i, __j);
       std::__reverse(__ii, __last,
        std::__iterator_category(__first));
       return true;
     }
   if (__i == __first)
     {
       std::__reverse(__first, __last,
        std::__iterator_category(__first));
       return false;
     }
 }
    }
# 2978 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _BidirectionalIterator>
   
    inline bool
    next_permutation(_BidirectionalIterator __first,
       _BidirectionalIterator __last)
    {

     

     

      ;
      ;

      return std::__next_permutation
 (__first, __last, __gnu_cxx::__ops::__iter_less_iter());
    }
# 3011 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _BidirectionalIterator, typename _Compare>
   
    inline bool
    next_permutation(_BidirectionalIterator __first,
       _BidirectionalIterator __last, _Compare __comp)
    {

     

     


      ;
      ;

      return std::__next_permutation
 (__first, __last, __gnu_cxx::__ops::__iter_comp_iter(__comp));
    }

  template<typename _BidirectionalIterator, typename _Compare>
   
    bool
    __prev_permutation(_BidirectionalIterator __first,
         _BidirectionalIterator __last, _Compare __comp)
    {
      if (__first == __last)
 return false;
      _BidirectionalIterator __i = __first;
      ++__i;
      if (__i == __last)
 return false;
      __i = __last;
      --__i;

      for(;;)
 {
   _BidirectionalIterator __ii = __i;
   --__i;
   if (__comp(__ii, __i))
     {
       _BidirectionalIterator __j = __last;
       while (!__comp(--__j, __i))
  {}
       std::iter_swap(__i, __j);
       std::__reverse(__ii, __last,
        std::__iterator_category(__first));
       return true;
     }
   if (__i == __first)
     {
       std::__reverse(__first, __last,
        std::__iterator_category(__first));
       return false;
     }
 }
    }
# 3081 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _BidirectionalIterator>
   
    inline bool
    prev_permutation(_BidirectionalIterator __first,
       _BidirectionalIterator __last)
    {

     

     

      ;
      ;

      return std::__prev_permutation(__first, __last,
         __gnu_cxx::__ops::__iter_less_iter());
    }
# 3114 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _BidirectionalIterator, typename _Compare>
   
    inline bool
    prev_permutation(_BidirectionalIterator __first,
       _BidirectionalIterator __last, _Compare __comp)
    {

     

     


      ;
      ;

      return std::__prev_permutation(__first, __last,
    __gnu_cxx::__ops::__iter_comp_iter(__comp));
    }




  template<typename _InputIterator, typename _OutputIterator,
    typename _Predicate, typename _Tp>
   
    _OutputIterator
    __replace_copy_if(_InputIterator __first, _InputIterator __last,
        _OutputIterator __result,
        _Predicate __pred, const _Tp& __new_value)
    {
      for (; __first != __last; ++__first, (void)++__result)
 if (__pred(__first))
   *__result = __new_value;
 else
   *__result = *__first;
      return __result;
    }
# 3166 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _InputIterator, typename _OutputIterator, typename _Tp>
   
    inline _OutputIterator
    replace_copy(_InputIterator __first, _InputIterator __last,
   _OutputIterator __result,
   const _Tp& __old_value, const _Tp& __new_value)
    {

     
     

     

      ;

      return std::__replace_copy_if(__first, __last, __result,
   __gnu_cxx::__ops::__iter_equals_val(__old_value),
           __new_value);
    }
# 3201 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _InputIterator, typename _OutputIterator,
    typename _Predicate, typename _Tp>
   
    inline _OutputIterator
    replace_copy_if(_InputIterator __first, _InputIterator __last,
      _OutputIterator __result,
      _Predicate __pred, const _Tp& __new_value)
    {

     
     

     

      ;

      return std::__replace_copy_if(__first, __last, __result,
    __gnu_cxx::__ops::__pred_iter(__pred),
           __new_value);
    }
# 3230 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _ForwardIterator>
   
    inline bool
    is_sorted(_ForwardIterator __first, _ForwardIterator __last)
    { return std::is_sorted_until(__first, __last) == __last; }
# 3245 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _ForwardIterator, typename _Compare>
   
    inline bool
    is_sorted(_ForwardIterator __first, _ForwardIterator __last,
       _Compare __comp)
    { return std::is_sorted_until(__first, __last, __comp) == __last; }

  template<typename _ForwardIterator, typename _Compare>
   
    _ForwardIterator
    __is_sorted_until(_ForwardIterator __first, _ForwardIterator __last,
        _Compare __comp)
    {
      if (__first == __last)
 return __last;

      _ForwardIterator __next = __first;
      for (++__next; __next != __last; __first = __next, (void)++__next)
 if (__comp(__next, __first))
   return __next;
      return __next;
    }
# 3276 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _ForwardIterator>
   
    inline _ForwardIterator
    is_sorted_until(_ForwardIterator __first, _ForwardIterator __last)
    {

     
     

      ;
      ;

      return std::__is_sorted_until(__first, __last,
        __gnu_cxx::__ops::__iter_less_iter());
    }
# 3301 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _ForwardIterator, typename _Compare>
   
    inline _ForwardIterator
    is_sorted_until(_ForwardIterator __first, _ForwardIterator __last,
      _Compare __comp)
    {

     
     


      ;
      ;

      return std::__is_sorted_until(__first, __last,
        __gnu_cxx::__ops::__iter_comp_iter(__comp));
    }
# 3327 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _Tp>
   
    inline pair<const _Tp&, const _Tp&>
    minmax(const _Tp& __a, const _Tp& __b)
    {

     

      return __b < __a ? pair<const _Tp&, const _Tp&>(__b, __a)
         : pair<const _Tp&, const _Tp&>(__a, __b);
    }
# 3348 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _Tp, typename _Compare>
   
    inline pair<const _Tp&, const _Tp&>
    minmax(const _Tp& __a, const _Tp& __b, _Compare __comp)
    {
      return __comp(__b, __a) ? pair<const _Tp&, const _Tp&>(__b, __a)
         : pair<const _Tp&, const _Tp&>(__a, __b);
    }

  template<typename _ForwardIterator, typename _Compare>
   
    pair<_ForwardIterator, _ForwardIterator>
    __minmax_element(_ForwardIterator __first, _ForwardIterator __last,
       _Compare __comp)
    {
      _ForwardIterator __next = __first;
      if (__first == __last
   || ++__next == __last)
 return std::make_pair(__first, __first);

      _ForwardIterator __min{}, __max{};
      if (__comp(__next, __first))
 {
   __min = __next;
   __max = __first;
 }
      else
 {
   __min = __first;
   __max = __next;
 }

      __first = __next;
      ++__first;

      while (__first != __last)
 {
   __next = __first;
   if (++__next == __last)
     {
       if (__comp(__first, __min))
  __min = __first;
       else if (!__comp(__first, __max))
  __max = __first;
       break;
     }

   if (__comp(__next, __first))
     {
       if (__comp(__next, __min))
  __min = __next;
       if (!__comp(__first, __max))
  __max = __first;
     }
   else
     {
       if (__comp(__first, __min))
  __min = __first;
       if (!__comp(__next, __max))
  __max = __next;
     }

   __first = __next;
   ++__first;
 }

      return std::make_pair(__min, __max);
    }
# 3428 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _ForwardIterator>
   
    inline pair<_ForwardIterator, _ForwardIterator>
    minmax_element(_ForwardIterator __first, _ForwardIterator __last)
    {

     
     

      ;
      ;

      return std::__minmax_element(__first, __last,
       __gnu_cxx::__ops::__iter_less_iter());
    }
# 3456 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _ForwardIterator, typename _Compare>
   
    inline pair<_ForwardIterator, _ForwardIterator>
    minmax_element(_ForwardIterator __first, _ForwardIterator __last,
     _Compare __comp)
    {

     
     


      ;
      ;

      return std::__minmax_element(__first, __last,
       __gnu_cxx::__ops::__iter_comp_iter(__comp));
    }

  template<typename _Tp>
   
    inline pair<_Tp, _Tp>
    minmax(initializer_list<_Tp> __l)
    {
      ;
      pair<const _Tp*, const _Tp*> __p =
 std::__minmax_element(__l.begin(), __l.end(),
         __gnu_cxx::__ops::__iter_less_iter());
      return std::make_pair(*__p.first, *__p.second);
    }

  template<typename _Tp, typename _Compare>
   
    inline pair<_Tp, _Tp>
    minmax(initializer_list<_Tp> __l, _Compare __comp)
    {
      ;
      pair<const _Tp*, const _Tp*> __p =
 std::__minmax_element(__l.begin(), __l.end(),
         __gnu_cxx::__ops::__iter_comp_iter(__comp));
      return std::make_pair(*__p.first, *__p.second);
    }
# 3512 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _ForwardIterator1, typename _ForwardIterator2,
    typename _BinaryPredicate>
   
    inline bool
    is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
     _ForwardIterator2 __first2, _BinaryPredicate __pred)
    {

     
     
     


      ;

      return std::__is_permutation(__first1, __last1, __first2,
       __gnu_cxx::__ops::__iter_comp_iter(__pred));
    }
# 3717 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _IntType, typename _UniformRandomBitGenerator>
    pair<_IntType, _IntType>
    __gen_two_uniform_ints(_IntType __b0, _IntType __b1,
      _UniformRandomBitGenerator&& __g)
    {
      _IntType __x
 = uniform_int_distribution<_IntType>{0, (__b0 * __b1) - 1}(__g);
      return std::make_pair(__x / __b1, __x % __b1);
    }
# 3739 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _RandomAccessIterator,
    typename _UniformRandomNumberGenerator>
    void
    shuffle(_RandomAccessIterator __first, _RandomAccessIterator __last,
     _UniformRandomNumberGenerator&& __g)
    {

     

      ;

      if (__first == __last)
 return;

      typedef typename iterator_traits<_RandomAccessIterator>::difference_type
 _DistanceType;

      typedef typename std::make_unsigned<_DistanceType>::type __ud_type;
      typedef typename std::uniform_int_distribution<__ud_type> __distr_type;
      typedef typename __distr_type::param_type __p_type;

      typedef typename remove_reference<_UniformRandomNumberGenerator>::type
 _Gen;
      typedef typename common_type<typename _Gen::result_type, __ud_type>::type
 __uc_type;

      const __uc_type __urngrange = __g.max() - __g.min();
      const __uc_type __urange = __uc_type(__last - __first);

      if (__urngrange / __urange >= __urange)

      {
 _RandomAccessIterator __i = __first + 1;





 if ((__urange % 2) == 0)
 {
   __distr_type __d{0, 1};
   std::iter_swap(__i++, __first + __d(__g));
 }





 while (__i != __last)
 {
   const __uc_type __swap_range = __uc_type(__i - __first) + 1;

   const pair<__uc_type, __uc_type> __pospos =
     __gen_two_uniform_ints(__swap_range, __swap_range + 1, __g);

   std::iter_swap(__i++, __first + __pospos.first);
   std::iter_swap(__i++, __first + __pospos.second);
 }

 return;
      }

      __distr_type __d;

      for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i)
 std::iter_swap(__i, __first + __d(__g, __p_type(0, __i - __first)));
    }





# 3824 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _InputIterator, typename _Function>
   
    _Function
    for_each(_InputIterator __first, _InputIterator __last, _Function __f)
    {

     
      ;
      for (; __first != __last; ++__first)
 __f(*__first);
      return __f;
    }
# 3886 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _InputIterator, typename _Tp>
   
    inline _InputIterator
    find(_InputIterator __first, _InputIterator __last,
  const _Tp& __val)
    {

     
     

      ;
      return std::__find_if(__first, __last,
       __gnu_cxx::__ops::__iter_equals_val(__val));
    }
# 3911 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _InputIterator, typename _Predicate>
   
    inline _InputIterator
    find_if(_InputIterator __first, _InputIterator __last,
     _Predicate __pred)
    {

     
     

      ;

      return std::__find_if(__first, __last,
       __gnu_cxx::__ops::__pred_iter(__pred));
    }
# 3943 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _InputIterator, typename _ForwardIterator>
   
    _InputIterator
    find_first_of(_InputIterator __first1, _InputIterator __last1,
    _ForwardIterator __first2, _ForwardIterator __last2)
    {

     
     
     


      ;
      ;

      for (; __first1 != __last1; ++__first1)
 for (_ForwardIterator __iter = __first2; __iter != __last2; ++__iter)
   if (*__first1 == *__iter)
     return __first1;
      return __last1;
    }
# 3984 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _InputIterator, typename _ForwardIterator,
    typename _BinaryPredicate>
   
    _InputIterator
    find_first_of(_InputIterator __first1, _InputIterator __last1,
    _ForwardIterator __first2, _ForwardIterator __last2,
    _BinaryPredicate __comp)
    {

     
     
     


      ;
      ;

      for (; __first1 != __last1; ++__first1)
 for (_ForwardIterator __iter = __first2; __iter != __last2; ++__iter)
   if (__comp(*__first1, *__iter))
     return __first1;
      return __last1;
    }
# 4017 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _ForwardIterator>
   
    inline _ForwardIterator
    adjacent_find(_ForwardIterator __first, _ForwardIterator __last)
    {

     
     

      ;

      return std::__adjacent_find(__first, __last,
      __gnu_cxx::__ops::__iter_equal_to_iter());
    }
# 4043 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _ForwardIterator, typename _BinaryPredicate>
   
    inline _ForwardIterator
    adjacent_find(_ForwardIterator __first, _ForwardIterator __last,
    _BinaryPredicate __binary_pred)
    {

     
     


      ;

      return std::__adjacent_find(__first, __last,
   __gnu_cxx::__ops::__iter_comp_iter(__binary_pred));
    }
# 4069 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _InputIterator, typename _Tp>
   
    inline typename iterator_traits<_InputIterator>::difference_type
    count(_InputIterator __first, _InputIterator __last, const _Tp& __value)
    {

     
     

      ;

      return std::__count_if(__first, __last,
        __gnu_cxx::__ops::__iter_equals_val(__value));
    }
# 4093 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _InputIterator, typename _Predicate>
   
    inline typename iterator_traits<_InputIterator>::difference_type
    count_if(_InputIterator __first, _InputIterator __last, _Predicate __pred)
    {

     
     

      ;

      return std::__count_if(__first, __last,
        __gnu_cxx::__ops::__pred_iter(__pred));
    }
# 4134 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _ForwardIterator1, typename _ForwardIterator2>
   
    inline _ForwardIterator1
    search(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
    _ForwardIterator2 __first2, _ForwardIterator2 __last2)
    {

     
     
     


      ;
      ;

      return std::__search(__first1, __last1, __first2, __last2,
      __gnu_cxx::__ops::__iter_equal_to_iter());
    }
# 4174 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _ForwardIterator1, typename _ForwardIterator2,
    typename _BinaryPredicate>
   
    inline _ForwardIterator1
    search(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
    _ForwardIterator2 __first2, _ForwardIterator2 __last2,
    _BinaryPredicate __predicate)
    {

     
     
     


      ;
      ;

      return std::__search(__first1, __last1, __first2, __last2,
      __gnu_cxx::__ops::__iter_comp_iter(__predicate));
    }
# 4210 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _ForwardIterator, typename _Integer, typename _Tp>
   
    inline _ForwardIterator
    search_n(_ForwardIterator __first, _ForwardIterator __last,
      _Integer __count, const _Tp& __val)
    {

     
     

      ;

      return std::__search_n(__first, __last, __count,
        __gnu_cxx::__ops::__iter_equals_val(__val));
    }
# 4244 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _ForwardIterator, typename _Integer, typename _Tp,
    typename _BinaryPredicate>
   
    inline _ForwardIterator
    search_n(_ForwardIterator __first, _ForwardIterator __last,
      _Integer __count, const _Tp& __val,
      _BinaryPredicate __binary_pred)
    {

     
     

      ;

      return std::__search_n(__first, __last, __count,
  __gnu_cxx::__ops::__iter_comp_val(__binary_pred, __val));
    }
# 4294 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _InputIterator, typename _OutputIterator,
    typename _UnaryOperation>
   
    _OutputIterator
    transform(_InputIterator __first, _InputIterator __last,
       _OutputIterator __result, _UnaryOperation __unary_op)
    {

     
     


      ;

      for (; __first != __last; ++__first, (void)++__result)
 *__result = __unary_op(*__first);
      return __result;
    }
# 4332 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _InputIterator1, typename _InputIterator2,
    typename _OutputIterator, typename _BinaryOperation>
   
    _OutputIterator
    transform(_InputIterator1 __first1, _InputIterator1 __last1,
       _InputIterator2 __first2, _OutputIterator __result,
       _BinaryOperation __binary_op)
    {

     
     
     


      ;

      for (; __first1 != __last1; ++__first1, (void)++__first2, ++__result)
 *__result = __binary_op(*__first1, *__first2);
      return __result;
    }
# 4366 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _ForwardIterator, typename _Tp>
   
    void
    replace(_ForwardIterator __first, _ForwardIterator __last,
     const _Tp& __old_value, const _Tp& __new_value)
    {

     

     

     

      ;

      for (; __first != __last; ++__first)
 if (*__first == __old_value)
   *__first = __new_value;
    }
# 4399 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _ForwardIterator, typename _Predicate, typename _Tp>
   
    void
    replace_if(_ForwardIterator __first, _ForwardIterator __last,
        _Predicate __pred, const _Tp& __new_value)
    {

     

     

     

      ;

      for (; __first != __last; ++__first)
 if (__pred(*__first))
   *__first = __new_value;
    }
# 4431 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _ForwardIterator, typename _Generator>
   
    void
    generate(_ForwardIterator __first, _ForwardIterator __last,
      _Generator __gen)
    {

     
     

      ;

      for (; __first != __last; ++__first)
 *__first = __gen();
    }
# 4464 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _OutputIterator, typename _Size, typename _Generator>
   
    _OutputIterator
    generate_n(_OutputIterator __first, _Size __n, _Generator __gen)
    {

     



      typedef __decltype(std::__size_to_integer(__n)) _IntSize;
      for (_IntSize __niter = std::__size_to_integer(__n);
    __niter > 0; --__niter, (void) ++__first)
 *__first = __gen();
      return __first;
    }
# 4499 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _InputIterator, typename _OutputIterator>
   
    inline _OutputIterator
    unique_copy(_InputIterator __first, _InputIterator __last,
  _OutputIterator __result)
    {

     
     

     

      ;

      if (__first == __last)
 return __result;
      return std::__unique_copy(__first, __last, __result,
    __gnu_cxx::__ops::__iter_equal_to_iter(),
    std::__iterator_category(__first),
    std::__iterator_category(__result));
    }
# 4539 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _InputIterator, typename _OutputIterator,
    typename _BinaryPredicate>
   
    inline _OutputIterator
    unique_copy(_InputIterator __first, _InputIterator __last,
  _OutputIterator __result,
  _BinaryPredicate __binary_pred)
    {

     
     

      ;

      if (__first == __last)
 return __result;
      return std::__unique_copy(__first, __last, __result,
   __gnu_cxx::__ops::__iter_comp_iter(__binary_pred),
    std::__iterator_category(__first),
    std::__iterator_category(__result));
    }
# 4578 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _RandomAccessIterator>
   
    inline void
    random_shuffle(_RandomAccessIterator __first, _RandomAccessIterator __last)
    {

     

      ;

      if (__first != __last)
 for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i)
   {

     _RandomAccessIterator __j = __first
     + std::rand() % ((__i - __first) + 1);
     if (__i != __j)
       std::iter_swap(__i, __j);
   }
    }
# 4617 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _RandomAccessIterator, typename _RandomNumberGenerator>
   
    void
    random_shuffle(_RandomAccessIterator __first, _RandomAccessIterator __last,

     _RandomNumberGenerator&& __rand)



    {

     

      ;

      if (__first == __last)
 return;
      for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i)
 {
   _RandomAccessIterator __j = __first + __rand((__i - __first) + 1);
   if (__i != __j)
     std::iter_swap(__i, __j);
 }
    }
# 4659 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _ForwardIterator, typename _Predicate>
   
    inline _ForwardIterator
    partition(_ForwardIterator __first, _ForwardIterator __last,
       _Predicate __pred)
    {

     

     

      ;

      return std::__partition(__first, __last, __pred,
         std::__iterator_category(__first));
    }
# 4694 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _RandomAccessIterator>
   
    inline void
    partial_sort(_RandomAccessIterator __first,
   _RandomAccessIterator __middle,
   _RandomAccessIterator __last)
    {

     

     

      ;
      ;
      ;

      std::__partial_sort(__first, __middle, __last,
     __gnu_cxx::__ops::__iter_less_iter());
    }
# 4733 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _RandomAccessIterator, typename _Compare>
   
    inline void
    partial_sort(_RandomAccessIterator __first,
   _RandomAccessIterator __middle,
   _RandomAccessIterator __last,
   _Compare __comp)
    {

     

     


      ;
      ;
      ;

      std::__partial_sort(__first, __middle, __last,
     __gnu_cxx::__ops::__iter_comp_iter(__comp));
    }
# 4770 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _RandomAccessIterator>
   
    inline void
    nth_element(_RandomAccessIterator __first, _RandomAccessIterator __nth,
  _RandomAccessIterator __last)
    {

     

     

      ;
      ;
      ;

      if (__first == __last || __nth == __last)
 return;

      std::__introselect(__first, __nth, __last,
    std::__lg(__last - __first) * 2,
    __gnu_cxx::__ops::__iter_less_iter());
    }
# 4810 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _RandomAccessIterator, typename _Compare>
   
    inline void
    nth_element(_RandomAccessIterator __first, _RandomAccessIterator __nth,
  _RandomAccessIterator __last, _Compare __comp)
    {

     

     


      ;
      ;
      ;

      if (__first == __last || __nth == __last)
 return;

      std::__introselect(__first, __nth, __last,
    std::__lg(__last - __first) * 2,
    __gnu_cxx::__ops::__iter_comp_iter(__comp));
    }
# 4848 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _RandomAccessIterator>
   
    inline void
    sort(_RandomAccessIterator __first, _RandomAccessIterator __last)
    {

     

     

      ;
      ;

      std::__sort(__first, __last, __gnu_cxx::__ops::__iter_less_iter());
    }
# 4879 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _RandomAccessIterator, typename _Compare>
   
    inline void
    sort(_RandomAccessIterator __first, _RandomAccessIterator __last,
  _Compare __comp)
    {

     

     


      ;
      ;

      std::__sort(__first, __last, __gnu_cxx::__ops::__iter_comp_iter(__comp));
    }

  template<typename _InputIterator1, typename _InputIterator2,
    typename _OutputIterator, typename _Compare>
   
    _OutputIterator
    __merge(_InputIterator1 __first1, _InputIterator1 __last1,
     _InputIterator2 __first2, _InputIterator2 __last2,
     _OutputIterator __result, _Compare __comp)
    {
      while (__first1 != __last1 && __first2 != __last2)
 {
   if (__comp(__first2, __first1))
     {
       *__result = *__first2;
       ++__first2;
     }
   else
     {
       *__result = *__first1;
       ++__first1;
     }
   ++__result;
 }
      return std::copy(__first2, __last2,
         std::copy(__first1, __last1, __result));
    }
# 4942 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _InputIterator1, typename _InputIterator2,
    typename _OutputIterator>
   
    inline _OutputIterator
    merge(_InputIterator1 __first1, _InputIterator1 __last1,
   _InputIterator2 __first2, _InputIterator2 __last2,
   _OutputIterator __result)
    {

     
     
     

     

     


      ;
      ;
      ;
      ;

      return std::__merge(__first1, __last1,
         __first2, __last2, __result,
         __gnu_cxx::__ops::__iter_less_iter());
    }
# 4993 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _InputIterator1, typename _InputIterator2,
    typename _OutputIterator, typename _Compare>
   
    inline _OutputIterator
    merge(_InputIterator1 __first1, _InputIterator1 __last1,
   _InputIterator2 __first2, _InputIterator2 __last2,
   _OutputIterator __result, _Compare __comp)
    {

     
     
     

     

     


      ;
      ;
      ;
      ;

      return std::__merge(__first1, __last1,
    __first2, __last2, __result,
    __gnu_cxx::__ops::__iter_comp_iter(__comp));
    }

  template<typename _RandomAccessIterator, typename _Compare>
    inline void
    __stable_sort(_RandomAccessIterator __first, _RandomAccessIterator __last,
    _Compare __comp)
    {
      typedef typename iterator_traits<_RandomAccessIterator>::value_type
 _ValueType;
      typedef typename iterator_traits<_RandomAccessIterator>::difference_type
 _DistanceType;

      if (__first == __last)
 return;


      typedef _Temporary_buffer<_RandomAccessIterator, _ValueType> _TmpBuf;


      _TmpBuf __buf(__first, (__last - __first + 1) / 2);

      if (__builtin_expect(__buf.requested_size() == __buf.size(), true))
 std::__stable_sort_adaptive(__first,
        __first + _DistanceType(__buf.size()),
        __last, __buf.begin(), __comp);
      else if (__builtin_expect(__buf.begin() == 0, false))
 std::__inplace_stable_sort(__first, __last, __comp);
      else
 std::__stable_sort_adaptive_resize(__first, __last, __buf.begin(),
        _DistanceType(__buf.size()), __comp);



    }
# 5071 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _RandomAccessIterator>
    inline void
    stable_sort(_RandomAccessIterator __first, _RandomAccessIterator __last)
    {

     

     

      ;
      ;

      std::__stable_sort(__first, __last,
        __gnu_cxx::__ops::__iter_less_iter());
    }
# 5105 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _RandomAccessIterator, typename _Compare>
    inline void
    stable_sort(_RandomAccessIterator __first, _RandomAccessIterator __last,
  _Compare __comp)
    {

     

     


      ;
      ;

      std::__stable_sort(__first, __last,
        __gnu_cxx::__ops::__iter_comp_iter(__comp));
    }

  template<typename _InputIterator1, typename _InputIterator2,
    typename _OutputIterator,
    typename _Compare>
   
    _OutputIterator
    __set_union(_InputIterator1 __first1, _InputIterator1 __last1,
  _InputIterator2 __first2, _InputIterator2 __last2,
  _OutputIterator __result, _Compare __comp)
    {
      while (__first1 != __last1 && __first2 != __last2)
 {
   if (__comp(__first1, __first2))
     {
       *__result = *__first1;
       ++__first1;
     }
   else if (__comp(__first2, __first1))
     {
       *__result = *__first2;
       ++__first2;
     }
   else
     {
       *__result = *__first1;
       ++__first1;
       ++__first2;
     }
   ++__result;
 }
      return std::copy(__first2, __last2,
         std::copy(__first1, __last1, __result));
    }
# 5175 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _InputIterator1, typename _InputIterator2,
    typename _OutputIterator>
   
    inline _OutputIterator
    set_union(_InputIterator1 __first1, _InputIterator1 __last1,
       _InputIterator2 __first2, _InputIterator2 __last2,
       _OutputIterator __result)
    {

     
     
     

     

     


     


      ;
      ;
      ;
      ;

      return std::__set_union(__first1, __last1,
    __first2, __last2, __result,
    __gnu_cxx::__ops::__iter_less_iter());
    }
# 5226 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _InputIterator1, typename _InputIterator2,
    typename _OutputIterator, typename _Compare>
   
    inline _OutputIterator
    set_union(_InputIterator1 __first1, _InputIterator1 __last1,
       _InputIterator2 __first2, _InputIterator2 __last2,
       _OutputIterator __result, _Compare __comp)
    {

     
     
     

     

     


     


      ;
      ;
      ;
      ;

      return std::__set_union(__first1, __last1,
    __first2, __last2, __result,
    __gnu_cxx::__ops::__iter_comp_iter(__comp));
    }

  template<typename _InputIterator1, typename _InputIterator2,
    typename _OutputIterator,
    typename _Compare>
   
    _OutputIterator
    __set_intersection(_InputIterator1 __first1, _InputIterator1 __last1,
         _InputIterator2 __first2, _InputIterator2 __last2,
         _OutputIterator __result, _Compare __comp)
    {
      while (__first1 != __last1 && __first2 != __last2)
 if (__comp(__first1, __first2))
   ++__first1;
 else if (__comp(__first2, __first1))
   ++__first2;
 else
   {
     *__result = *__first1;
     ++__first1;
     ++__first2;
     ++__result;
   }
      return __result;
    }
# 5299 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _InputIterator1, typename _InputIterator2,
    typename _OutputIterator>
   
    inline _OutputIterator
    set_intersection(_InputIterator1 __first1, _InputIterator1 __last1,
       _InputIterator2 __first2, _InputIterator2 __last2,
       _OutputIterator __result)
    {

     
     
     

     


     


      ;
      ;
      ;
      ;

      return std::__set_intersection(__first1, __last1,
         __first2, __last2, __result,
         __gnu_cxx::__ops::__iter_less_iter());
    }
# 5349 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _InputIterator1, typename _InputIterator2,
    typename _OutputIterator, typename _Compare>
   
    inline _OutputIterator
    set_intersection(_InputIterator1 __first1, _InputIterator1 __last1,
       _InputIterator2 __first2, _InputIterator2 __last2,
       _OutputIterator __result, _Compare __comp)
    {

     
     
     

     


     


      ;
      ;
      ;
      ;

      return std::__set_intersection(__first1, __last1,
    __first2, __last2, __result,
    __gnu_cxx::__ops::__iter_comp_iter(__comp));
    }

  template<typename _InputIterator1, typename _InputIterator2,
    typename _OutputIterator,
    typename _Compare>
   
    _OutputIterator
    __set_difference(_InputIterator1 __first1, _InputIterator1 __last1,
       _InputIterator2 __first2, _InputIterator2 __last2,
       _OutputIterator __result, _Compare __comp)
    {
      while (__first1 != __last1 && __first2 != __last2)
 if (__comp(__first1, __first2))
   {
     *__result = *__first1;
     ++__first1;
     ++__result;
   }
 else if (__comp(__first2, __first1))
   ++__first2;
 else
   {
     ++__first1;
     ++__first2;
   }
      return std::copy(__first1, __last1, __result);
    }
# 5424 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _InputIterator1, typename _InputIterator2,
    typename _OutputIterator>
   
    inline _OutputIterator
    set_difference(_InputIterator1 __first1, _InputIterator1 __last1,
     _InputIterator2 __first2, _InputIterator2 __last2,
     _OutputIterator __result)
    {

     
     
     

     


     


      ;
      ;
      ;
      ;

      return std::__set_difference(__first1, __last1,
       __first2, __last2, __result,
       __gnu_cxx::__ops::__iter_less_iter());
    }
# 5476 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _InputIterator1, typename _InputIterator2,
    typename _OutputIterator, typename _Compare>
   
    inline _OutputIterator
    set_difference(_InputIterator1 __first1, _InputIterator1 __last1,
     _InputIterator2 __first2, _InputIterator2 __last2,
     _OutputIterator __result, _Compare __comp)
    {

     
     
     

     


     


      ;
      ;
      ;
      ;

      return std::__set_difference(__first1, __last1,
       __first2, __last2, __result,
       __gnu_cxx::__ops::__iter_comp_iter(__comp));
    }

  template<typename _InputIterator1, typename _InputIterator2,
    typename _OutputIterator,
    typename _Compare>
   
    _OutputIterator
    __set_symmetric_difference(_InputIterator1 __first1,
          _InputIterator1 __last1,
          _InputIterator2 __first2,
          _InputIterator2 __last2,
          _OutputIterator __result,
          _Compare __comp)
    {
      while (__first1 != __last1 && __first2 != __last2)
 if (__comp(__first1, __first2))
   {
     *__result = *__first1;
     ++__first1;
     ++__result;
   }
 else if (__comp(__first2, __first1))
   {
     *__result = *__first2;
     ++__first2;
     ++__result;
   }
 else
   {
     ++__first1;
     ++__first2;
   }
      return std::copy(__first2, __last2,
         std::copy(__first1, __last1, __result));
    }
# 5557 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _InputIterator1, typename _InputIterator2,
    typename _OutputIterator>
   
    inline _OutputIterator
    set_symmetric_difference(_InputIterator1 __first1, _InputIterator1 __last1,
        _InputIterator2 __first2, _InputIterator2 __last2,
        _OutputIterator __result)
    {

     
     
     

     

     


     


      ;
      ;
      ;
      ;

      return std::__set_symmetric_difference(__first1, __last1,
     __first2, __last2, __result,
     __gnu_cxx::__ops::__iter_less_iter());
    }
# 5609 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _InputIterator1, typename _InputIterator2,
    typename _OutputIterator, typename _Compare>
   
    inline _OutputIterator
    set_symmetric_difference(_InputIterator1 __first1, _InputIterator1 __last1,
        _InputIterator2 __first2, _InputIterator2 __last2,
        _OutputIterator __result,
        _Compare __comp)
    {

     
     
     

     

     


     


      ;
      ;
      ;
      ;

      return std::__set_symmetric_difference(__first1, __last1,
    __first2, __last2, __result,
    __gnu_cxx::__ops::__iter_comp_iter(__comp));
    }

  template<typename _ForwardIterator, typename _Compare>
   
    _ForwardIterator
    __min_element(_ForwardIterator __first, _ForwardIterator __last,
    _Compare __comp)
    {
      if (__first == __last)
 return __first;
      _ForwardIterator __result = __first;
      while (++__first != __last)
 if (__comp(__first, __result))
   __result = __first;
      return __result;
    }
# 5663 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _ForwardIterator>
   
    _ForwardIterator
    inline min_element(_ForwardIterator __first, _ForwardIterator __last)
    {

     
     

      ;
      ;

      return std::__min_element(__first, __last,
    __gnu_cxx::__ops::__iter_less_iter());
    }
# 5688 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _ForwardIterator, typename _Compare>
   
    inline _ForwardIterator
    min_element(_ForwardIterator __first, _ForwardIterator __last,
  _Compare __comp)
    {

     
     


      ;
      ;

      return std::__min_element(__first, __last,
    __gnu_cxx::__ops::__iter_comp_iter(__comp));
    }

  template<typename _ForwardIterator, typename _Compare>
   
    _ForwardIterator
    __max_element(_ForwardIterator __first, _ForwardIterator __last,
    _Compare __comp)
    {
      if (__first == __last) return __first;
      _ForwardIterator __result = __first;
      while (++__first != __last)
 if (__comp(__result, __first))
   __result = __first;
      return __result;
    }
# 5727 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _ForwardIterator>
   
    inline _ForwardIterator
    max_element(_ForwardIterator __first, _ForwardIterator __last)
    {

     
     

      ;
      ;

      return std::__max_element(__first, __last,
    __gnu_cxx::__ops::__iter_less_iter());
    }
# 5752 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3
  template<typename _ForwardIterator, typename _Compare>
   
    inline _ForwardIterator
    max_element(_ForwardIterator __first, _ForwardIterator __last,
  _Compare __comp)
    {

     
     


      ;
      ;

      return std::__max_element(__first, __last,
    __gnu_cxx::__ops::__iter_comp_iter(__comp));
    }



  template<typename _Tp>
   
    inline _Tp
    min(initializer_list<_Tp> __l)
    {
      ;
      return *std::__min_element(__l.begin(), __l.end(),
   __gnu_cxx::__ops::__iter_less_iter());
    }

  template<typename _Tp, typename _Compare>
   
    inline _Tp
    min(initializer_list<_Tp> __l, _Compare __comp)
    {
      ;
      return *std::__min_element(__l.begin(), __l.end(),
   __gnu_cxx::__ops::__iter_comp_iter(__comp));
    }

  template<typename _Tp>
   
    inline _Tp
    max(initializer_list<_Tp> __l)
    {
      ;
      return *std::__max_element(__l.begin(), __l.end(),
   __gnu_cxx::__ops::__iter_less_iter());
    }

  template<typename _Tp, typename _Compare>
   
    inline _Tp
    max(initializer_list<_Tp> __l, _Compare __comp)
    {
      ;
      return *std::__max_element(__l.begin(), __l.end(),
   __gnu_cxx::__ops::__iter_comp_iter(__comp));
    }
# 5941 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/bits/stl_algo.h" 3


}
# 62 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/algorithm" 2 3
# 38 "../harfbuzz-6.0.0/src/hb-algs.hh" 2
# 57 "../harfbuzz-6.0.0/src/hb-algs.hh"
#define HB_MARK_AS_FLAG_T(T) extern "C++" { static inline constexpr T operator | (T l, T r) { return T ((unsigned) l | (unsigned) r); } static inline constexpr T operator & (T l, T r) { return T ((unsigned) l & (unsigned) r); } static inline constexpr T operator ^ (T l, T r) { return T ((unsigned) l ^ (unsigned) r); } static inline constexpr unsigned operator ~ (T r) { return (~(unsigned) r); } static inline T& operator |= (T &l, T r) { l = l | r; return l; } static inline T& operator &= (T& l, T r) { l = l & r; return l; } static inline T& operator ^= (T& l, T r) { l = l ^ r; return l; } } static_assert (true, "")
# 73 "../harfbuzz-6.0.0/src/hb-algs.hh"
#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
#define FLAG_UNSAFE(x) ((unsigned)(x) < 32 ? (((uint32_t) 1U) << (unsigned)(x)) : 0)
#define FLAG_RANGE(x,y) (static_assert_expr ((x) < (y)) + FLAG(y+1) - FLAG(x))
#define FLAG64(x) (static_assert_expr ((unsigned)(x) < 64) + (((uint64_t) 1ULL) << (unsigned)(x)))
#define FLAG64_UNSAFE(x) ((unsigned)(x) < 64 ? (((uint64_t) 1ULL) << (unsigned)(x)) : 0)








# 85 "../harfbuzz-6.0.0/src/hb-algs.hh"
static inline constexpr uint16_t hb_uint16_swap (uint16_t v)
{ return (v >> 8) | (v << 8); }
static inline constexpr uint32_t hb_uint32_swap (uint32_t v)
{ return (hb_uint16_swap (v) << 16) | hb_uint16_swap (v >> 16); }

template <typename Type, int Bytes = sizeof (Type)>
struct BEInt;
template <typename Type>
struct BEInt<Type, 1>
{
  public:
  BEInt () = default;
  constexpr BEInt (Type V) : v {uint8_t (V)} {}
  constexpr operator Type () const { return v; }
  private: uint8_t v;
};
template <typename Type>
struct BEInt<Type, 2>
{
  public:
  BEInt () = default;
  constexpr BEInt (Type V) : v {uint8_t ((V >> 8) & 0xFF),
           uint8_t ((V ) & 0xFF)} {}

  struct __attribute__((packed)) packed_uint16_t { uint16_t v; };
  constexpr operator Type () const
  {







    return __builtin_bswap16 (((packed_uint16_t *) v)->v);







  }
  private: uint8_t v[2];
};
template <typename Type>
struct BEInt<Type, 3>
{
  static_assert (!std::is_signed<Type>::value, "");
  public:
  BEInt () = default;
  constexpr BEInt (Type V) : v {uint8_t ((V >> 16) & 0xFF),
    uint8_t ((V >> 8) & 0xFF),
    uint8_t ((V ) & 0xFF)} {}

  constexpr operator Type () const { return (v[0] << 16)
       + (v[1] << 8)
       + (v[2] ); }
  private: uint8_t v[3];
};
template <typename Type>
struct BEInt<Type, 4>
{
  public:
  BEInt () = default;
  constexpr BEInt (Type V) : v {uint8_t ((V >> 24) & 0xFF),
           uint8_t ((V >> 16) & 0xFF),
           uint8_t ((V >> 8) & 0xFF),
           uint8_t ((V ) & 0xFF)} {}

  struct __attribute__((packed)) packed_uint32_t { uint32_t v; };
  constexpr operator Type () const {







    return __builtin_bswap32 (((packed_uint32_t *) v)->v);
# 174 "../harfbuzz-6.0.0/src/hb-algs.hh"
  }
  private: uint8_t v[4];
};




static inline float
_hb_roundf (float x) { return floorf (x + .5f); }
#define roundf(x) _hb_roundf(x)




#define HB_CODEPOINT_ENCODE3(x,y,z) (((uint64_t) (x) << 42) | ((uint64_t) (y) << 21) | (uint64_t) (z))
#define HB_CODEPOINT_DECODE3_1(v) ((hb_codepoint_t) ((v) >> 42))
#define HB_CODEPOINT_DECODE3_2(v) ((hb_codepoint_t) ((v) >> 21) & 0x1FFFFFu)
#define HB_CODEPOINT_DECODE3_3(v) ((hb_codepoint_t) (v) & 0x1FFFFFu)


#define HB_CODEPOINT_ENCODE3_11_7_14(x,y,z) (((uint32_t) ((x) & 0x07FFu) << 21) | (((uint32_t) (y) & 0x007Fu) << 14) | (uint32_t) ((z) & 0x3FFFu))
#define HB_CODEPOINT_DECODE3_11_7_14_1(v) ((hb_codepoint_t) ((v) >> 21))
#define HB_CODEPOINT_DECODE3_11_7_14_2(v) ((hb_codepoint_t) (((v) >> 14) & 0x007Fu) | 0x0300)
#define HB_CODEPOINT_DECODE3_11_7_14_3(v) ((hb_codepoint_t) (v) & 0x3FFFu)


struct
{

  template <typename T> constexpr auto
  operator () (T&& v) const -> decltype ((std::forward<T> (v))) { return (std::forward<T> (v)); }
}
static const hb_identity __attribute__((unused));
struct
{

  template <typename T> constexpr T&
  operator () (T& v) const { return v; }

  template <typename T> constexpr hb_remove_reference<T>
  operator () (T&& v) const { return v; }
}
static const hb_lidentity __attribute__((unused));
struct
{

  template <typename T> constexpr hb_remove_reference<T>
  operator () (T&& v) const { return v; }
}
static const hb_ridentity __attribute__((unused));

struct
{
  template <typename T> constexpr bool
  operator () (T&& v) const { return bool (std::forward<T> (v)); }
}
static const hb_bool __attribute__((unused));

struct
{
  private:

  template <typename T> constexpr auto
  impl (const T& v, hb_priority<1>) const -> hb_head_t<uint32_t, decltype ((hb_deref (v).hash ()))> { return (hb_deref (v).hash ()); }

  template <typename T> constexpr auto
  impl (const T& v, hb_priority<0>) const -> hb_head_t<uint32_t, decltype ((std::hash<hb_decay<decltype (hb_deref (v))>>{} (hb_deref (v))))> { return (std::hash<hb_decay<decltype (hb_deref (v))>>{} (hb_deref (v))); }

  public:

  template <typename T> constexpr auto
  operator () (const T& v) const -> hb_head_t<uint32_t, decltype ((impl (v, hb_priority<16> ())))> { return (impl (v, hb_priority<16> ())); }
}
static const hb_hash __attribute__((unused));


struct
{
  private:


  template <typename Appl, typename T, typename ...Ts> auto
  impl (Appl&& a, hb_priority<2>, T &&v, Ts&&... ds) const -> decltype (((hb_deref (std::forward<T> (v)).*std::forward<Appl> (a)) (std::forward<Ts> (ds)...))) { return ((hb_deref (std::forward<T> (v)).*std::forward<Appl> (a)) (std::forward<Ts> (ds)...)); }



  template <typename Appl, typename T> auto
  impl (Appl&& a, hb_priority<1>, T &&v) const -> decltype (((hb_deref (std::forward<T> (v))).*std::forward<Appl> (a))) { return ((hb_deref (std::forward<T> (v))).*std::forward<Appl> (a)); }



  template <typename Appl, typename ...Ts> auto
  impl (Appl&& a, hb_priority<0>, Ts&&... ds) const -> decltype ((hb_deref (std::forward<Appl> (a)) (std::forward<Ts> (ds)...))) { return (hb_deref (std::forward<Appl> (a)) (std::forward<Ts> (ds)...)); }


  public:

  template <typename Appl, typename ...Ts> auto
  operator () (Appl&& a, Ts&&... ds) const -> decltype ((impl (std::forward<Appl> (a), hb_priority<16> (), std::forward<Ts> (ds)...))) { return (impl (std::forward<Appl> (a), hb_priority<16> (), std::forward<Ts> (ds)...)); }





}
static const hb_invoke __attribute__((unused));

template <unsigned Pos, typename Appl, typename V>
struct hb_partial_t
{
  hb_partial_t (Appl a, V v) : a (a), v (v) {}

  static_assert (Pos > 0, "");

  template <typename ...Ts,
     unsigned P = Pos,
     typename hb_enable_if<(P == 1)>::type* = nullptr> auto
  operator () (Ts&& ...ds) -> decltype (hb_invoke ((hb_declval<Appl> ()),
         (hb_declval<V> ()),
         (hb_declval<Ts> ())...))
  {
    return hb_invoke (std::forward<Appl> (a),
        std::forward<V> (v),
        std::forward<Ts> (ds)...);
  }
  template <typename T0, typename ...Ts,
     unsigned P = Pos,
     typename hb_enable_if<(P == 2)>::type* = nullptr> auto
  operator () (T0&& d0, Ts&& ...ds) -> decltype (hb_invoke ((hb_declval<Appl> ()),
           (hb_declval<T0> ()),
           (hb_declval<V> ()),
           (hb_declval<Ts> ())...))
  {
    return hb_invoke (std::forward<Appl> (a),
        std::forward<T0> (d0),
        std::forward<V> (v),
        std::forward<Ts> (ds)...);
  }

  private:
  hb_reference_wrapper<Appl> a;
  V v;
};
template <unsigned Pos=1, typename Appl, typename V>
auto hb_partial (Appl&& a, V&& v) -> decltype ((( hb_partial_t<Pos, Appl, V> (a, v) ))) { return (( hb_partial_t<Pos, Appl, V> (a, v) )); }
# 348 "../harfbuzz-6.0.0/src/hb-algs.hh"
#define HB_PARTIALIZE(Pos) template <typename _T> auto operator () (_T&& _v) const HB_AUTO_RETURN (hb_partial<Pos> (+this, std::forward<_T> (_v))) static_assert (true, "")







struct
{
  private:

  template <typename Pred, typename Val> auto
  impl (Pred&& p, Val &&v, hb_priority<1>) const -> decltype ((hb_deref (std::forward<Pred> (p)).has (std::forward<Val> (v)))) { return (hb_deref (std::forward<Pred> (p)).has (std::forward<Val> (v))); }




  template <typename Pred, typename Val> auto
  impl (Pred&& p, Val &&v, hb_priority<0>) const -> decltype ((hb_invoke (std::forward<Pred> (p), std::forward<Val> (v)))) { return (hb_invoke (std::forward<Pred> (p), std::forward<Val> (v))); }





  public:

  template <typename Pred, typename Val> auto
  operator () (Pred&& p, Val &&v) const -> hb_head_t<bool, decltype ((impl (std::forward<Pred> (p), std::forward<Val> (v), hb_priority<16> ())))> { return (impl (std::forward<Pred> (p), std::forward<Val> (v), hb_priority<16> ())); }




}
static const hb_has __attribute__((unused));

struct
{
  private:

  template <typename Pred, typename Val> auto
  impl (Pred&& p, Val &&v, hb_priority<1>) const -> decltype ((hb_has (std::forward<Pred> (p), std::forward<Val> (v)))) { return (hb_has (std::forward<Pred> (p), std::forward<Val> (v))); }





  template <typename Pred, typename Val> auto
  impl (Pred&& p, Val &&v, hb_priority<0>) const -> decltype ((std::forward<Pred> (p) == std::forward<Val> (v))) { return (std::forward<Pred> (p) == std::forward<Val> (v)); }




  public:

  template <typename Pred, typename Val> auto
  operator () (Pred&& p, Val &&v) const -> hb_head_t<bool, decltype ((impl (std::forward<Pred> (p), std::forward<Val> (v), hb_priority<16> ())))> { return (impl (std::forward<Pred> (p), std::forward<Val> (v), hb_priority<16> ())); }




}
static const hb_match __attribute__((unused));

struct
{
  private:

  template <typename Proj, typename Val> auto
  impl (Proj&& f, Val &&v, hb_priority<2>) const -> decltype ((hb_deref (std::forward<Proj> (f)).get (std::forward<Val> (v)))) { return (hb_deref (std::forward<Proj> (f)).get (std::forward<Val> (v))); }




  template <typename Proj, typename Val> auto
  impl (Proj&& f, Val &&v, hb_priority<1>) const -> decltype ((hb_invoke (std::forward<Proj> (f), std::forward<Val> (v)))) { return (hb_invoke (std::forward<Proj> (f), std::forward<Val> (v))); }





  template <typename Proj, typename Val> auto
  impl (Proj&& f, Val &&v, hb_priority<0>) const -> decltype ((std::forward<Proj> (f)[std::forward<Val> (v)])) { return (std::forward<Proj> (f)[std::forward<Val> (v)]); }




  public:

  template <typename Proj, typename Val> auto
  operator () (Proj&& f, Val &&v) const -> decltype ((impl (std::forward<Proj> (f), std::forward<Val> (v), hb_priority<16> ()))) { return (impl (std::forward<Proj> (f), std::forward<Val> (v), hb_priority<16> ())); }





}
static const hb_get __attribute__((unused));

struct
{
  private:

  template <typename T1, typename T2> auto
  impl (T1&& v1, T2 &&v2, hb_priority<3>) const -> decltype ((std::forward<T2> (v2).cmp (std::forward<T1> (v1)) == 0)) { return (std::forward<T2> (v2).cmp (std::forward<T1> (v1)) == 0); }




  template <typename T1, typename T2> auto
  impl (T1&& v1, T2 &&v2, hb_priority<2>) const -> decltype ((std::forward<T1> (v1).cmp (std::forward<T2> (v2)) == 0)) { return (std::forward<T1> (v1).cmp (std::forward<T2> (v2)) == 0); }




  template <typename T1, typename T2> auto
  impl (T1&& v1, T2 &&v2, hb_priority<1>) const -> decltype ((std::forward<T1> (v1) == std::forward<T2> (v2))) { return (std::forward<T1> (v1) == std::forward<T2> (v2)); }




  template <typename T1, typename T2> auto
  impl (T1&& v1, T2 &&v2, hb_priority<0>) const -> decltype ((std::forward<T2> (v2) == std::forward<T1> (v1))) { return (std::forward<T2> (v2) == std::forward<T1> (v1)); }




  public:

  template <typename T1, typename T2> auto
  operator () (T1&& v1, T2 &&v2) const -> decltype ((impl (std::forward<T1> (v1), std::forward<T2> (v2), hb_priority<16> ()))) { return (impl (std::forward<T1> (v1), std::forward<T2> (v2), hb_priority<16> ())); }





}
static const hb_equal __attribute__((unused));

struct
{
  template <typename T> void
  operator () (T& a, T& b) const
  {
    using std::swap;
    swap (a, b);
  }
}
static const hb_swap __attribute__((unused));


template <typename T1, typename T2>
struct hb_pair_t
{
  typedef T1 first_t;
  typedef T2 second_t;
  typedef hb_pair_t<T1, T2> pair_t;

  template <typename U1 = T1, typename U2 = T2,
     typename hb_enable_if<(std::is_default_constructible<U1>::value && std::is_default_constructible<U2>::value)>::type* = nullptr
                                              >
  hb_pair_t () : first (), second () {}
  hb_pair_t (T1 a, T2 b) : first (std::forward<T1> (a)), second (std::forward<T2> (b)) {}

  template <typename Q1, typename Q2,
     typename hb_enable_if<(std::is_convertible<T1, Q1>::value && std::is_convertible<T2, Q2>::value)>::type* = nullptr
                                >
  operator hb_pair_t<Q1, Q2> () { return hb_pair_t<Q1, Q2> (first, second); }

  hb_pair_t<T1, T2> reverse () const
  { return hb_pair_t<T1, T2> (second, first); }

  bool operator == (const pair_t& o) const { return first == o.first && second == o.second; }
  bool operator != (const pair_t& o) const { return !(*this == o); }
  bool operator < (const pair_t& o) const { return first < o.first || (first == o.first && second < o.second); }
  bool operator >= (const pair_t& o) const { return !(*this < o); }
  bool operator > (const pair_t& o) const { return first > o.first || (first == o.first && second > o.second); }
  bool operator <= (const pair_t& o) const { return !(*this > o); }

  static int cmp (const void *pa, const void *pb)
  {
    pair_t *a = (pair_t *) pa;
    pair_t *b = (pair_t *) pb;

    if (a->first < b->first) return -1;
    if (a->first > b->first) return +1;
    if (a->second < b->second) return -1;
    if (a->second > b->second) return +1;
    return 0;
  }

  friend void swap (hb_pair_t& a, hb_pair_t& b)
  {
    hb_swap (a.first, b.first);
    hb_swap (a.second, b.second);
  }


  T1 first;
  T2 second;
};
template <typename T1, typename T2> static inline hb_pair_t<T1, T2>
hb_pair (T1&& a, T2&& b) { return hb_pair_t<T1, T2> (a, b); }

struct
{
  template <typename Pair> constexpr typename Pair::first_t
  operator () (const Pair& pair) const { return pair.first; }
}
static const hb_first __attribute__((unused));

struct
{
  template <typename Pair> constexpr typename Pair::second_t
  operator () (const Pair& pair) const { return pair.second; }
}
static const hb_second __attribute__((unused));





struct
{
  template <typename T, typename T2> constexpr auto
  operator () (T&& a, T2&& b) const -> decltype ((a <= b ? a : b)) { return (a <= b ? a : b); }

}
static const hb_min __attribute__((unused));
struct
{
  template <typename T, typename T2> constexpr auto
  operator () (T&& a, T2&& b) const -> decltype ((a >= b ? a : b)) { return (a >= b ? a : b); }

}
static const hb_max __attribute__((unused));
struct
{
  template <typename T, typename T2, typename T3> constexpr auto
  operator () (T&& x, T2&& min, T3&& max) const -> decltype ((hb_min (hb_max (std::forward<T> (x), std::forward<T2> (min)), std::forward<T3> (max)))) { return (hb_min (hb_max (std::forward<T> (x), std::forward<T2> (min)), std::forward<T3> (max))); }

}
static const hb_clamp __attribute__((unused));






template <typename T>
static inline unsigned int
hb_popcount (T v)
{

  if (sizeof (T) <= sizeof (unsigned int))
    return __builtin_popcount (v);

  if (sizeof (T) <= sizeof (unsigned long))
    return __builtin_popcountl (v);

  if (sizeof (T) <= sizeof (unsigned long long))
    return __builtin_popcountll (v);


  if (sizeof (T) <= 4)
  {

    uint32_t y;
    y = (v >> 1) &033333333333;
    y = v - y - ((y >>1) & 033333333333);
    return (((y + (y >> 3)) & 030707070707) % 077);
  }

  if (sizeof (T) == 8)
  {
    unsigned int shift = 32;
    return hb_popcount<uint32_t> ((uint32_t) v) + hb_popcount ((uint32_t) (v >> shift));
  }

  if (sizeof (T) == 16)
  {
    unsigned int shift = 64;
    return hb_popcount<uint64_t> ((uint64_t) v) + hb_popcount ((uint64_t) (v >> shift));
  }

  
# 633 "../harfbuzz-6.0.0/src/hb-algs.hh" 3 4
 (static_cast <bool> (
# 633 "../harfbuzz-6.0.0/src/hb-algs.hh"
 0
# 633 "../harfbuzz-6.0.0/src/hb-algs.hh" 3 4
 ) ? void (0) : __assert_fail (
# 633 "../harfbuzz-6.0.0/src/hb-algs.hh"
 "0"
# 633 "../harfbuzz-6.0.0/src/hb-algs.hh" 3 4
 , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-algs.hh", 633, __extension__ __PRETTY_FUNCTION__))
# 633 "../harfbuzz-6.0.0/src/hb-algs.hh"
           ;
  return 0;
}


template <typename T>
static inline unsigned int
hb_bit_storage (T v)
{
  if ((__builtin_expect (!!(!v), 0))) return 0;


  if (sizeof (T) <= sizeof (unsigned int))
    return sizeof (unsigned int) * 8 - __builtin_clz (v);

  if (sizeof (T) <= sizeof (unsigned long))
    return sizeof (unsigned long) * 8 - __builtin_clzl (v);

  if (sizeof (T) <= sizeof (unsigned long long))
    return sizeof (unsigned long long) * 8 - __builtin_clzll (v);
# 672 "../harfbuzz-6.0.0/src/hb-algs.hh"
  if (sizeof (T) <= 4)
  {

    const unsigned int b[] = {0x2, 0xC, 0xF0, 0xFF00, 0xFFFF0000};
    const unsigned int S[] = {1, 2, 4, 8, 16};
    unsigned int r = 0;
    for (int i = 4; i >= 0; i--)
      if (v & b[i])
      {
 v >>= S[i];
 r |= S[i];
      }
    return r + 1;
  }
  if (sizeof (T) <= 8)
  {

    const uint64_t b[] = {0x2ULL, 0xCULL, 0xF0ULL, 0xFF00ULL, 0xFFFF0000ULL, 0xFFFFFFFF00000000ULL};
    const unsigned int S[] = {1, 2, 4, 8, 16, 32};
    unsigned int r = 0;
    for (int i = 5; i >= 0; i--)
      if (v & b[i])
      {
 v >>= S[i];
 r |= S[i];
      }
    return r + 1;
  }
  if (sizeof (T) == 16)
  {
    unsigned int shift = 64;
    return (v >> shift) ? hb_bit_storage<uint64_t> ((uint64_t) (v >> shift)) + shift :
     hb_bit_storage<uint64_t> ((uint64_t) v);
  }

  
# 707 "../harfbuzz-6.0.0/src/hb-algs.hh" 3 4
 (static_cast <bool> (
# 707 "../harfbuzz-6.0.0/src/hb-algs.hh"
 0
# 707 "../harfbuzz-6.0.0/src/hb-algs.hh" 3 4
 ) ? void (0) : __assert_fail (
# 707 "../harfbuzz-6.0.0/src/hb-algs.hh"
 "0"
# 707 "../harfbuzz-6.0.0/src/hb-algs.hh" 3 4
 , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-algs.hh", 707, __extension__ __PRETTY_FUNCTION__))
# 707 "../harfbuzz-6.0.0/src/hb-algs.hh"
           ;
  return 0;
}


template <typename T>
static inline unsigned int
hb_ctz (T v)
{
  if ((__builtin_expect (!!(!v), 0))) return 8 * sizeof (T);


  if (sizeof (T) <= sizeof (unsigned int))
    return __builtin_ctz (v);

  if (sizeof (T) <= sizeof (unsigned long))
    return __builtin_ctzl (v);

  if (sizeof (T) <= sizeof (unsigned long long))
    return __builtin_ctzll (v);
# 746 "../harfbuzz-6.0.0/src/hb-algs.hh"
  if (sizeof (T) <= 4)
  {

    unsigned int c = 32;
    v &= - (int32_t) v;
    if (v) c--;
    if (v & 0x0000FFFF) c -= 16;
    if (v & 0x00FF00FF) c -= 8;
    if (v & 0x0F0F0F0F) c -= 4;
    if (v & 0x33333333) c -= 2;
    if (v & 0x55555555) c -= 1;
    return c;
  }
  if (sizeof (T) <= 8)
  {

    unsigned int c = 64;
    v &= - (int64_t) (v);
    if (v) c--;
    if (v & 0x00000000FFFFFFFFULL) c -= 32;
    if (v & 0x0000FFFF0000FFFFULL) c -= 16;
    if (v & 0x00FF00FF00FF00FFULL) c -= 8;
    if (v & 0x0F0F0F0F0F0F0F0FULL) c -= 4;
    if (v & 0x3333333333333333ULL) c -= 2;
    if (v & 0x5555555555555555ULL) c -= 1;
    return c;
  }
  if (sizeof (T) == 16)
  {
    unsigned int shift = 64;
    return (uint64_t) v ? hb_bit_storage<uint64_t> ((uint64_t) v) :
     hb_bit_storage<uint64_t> ((uint64_t) (v >> shift)) + shift;
  }

  
# 780 "../harfbuzz-6.0.0/src/hb-algs.hh" 3 4
 (static_cast <bool> (
# 780 "../harfbuzz-6.0.0/src/hb-algs.hh"
 0
# 780 "../harfbuzz-6.0.0/src/hb-algs.hh" 3 4
 ) ? void (0) : __assert_fail (
# 780 "../harfbuzz-6.0.0/src/hb-algs.hh"
 "0"
# 780 "../harfbuzz-6.0.0/src/hb-algs.hh" 3 4
 , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-algs.hh", 780, __extension__ __PRETTY_FUNCTION__))
# 780 "../harfbuzz-6.0.0/src/hb-algs.hh"
           ;
  return 0;
}







static inline bool ISALPHA (unsigned char c)
{ return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'); }
static inline bool ISALNUM (unsigned char c)
{ return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9'); }
static inline bool ISSPACE (unsigned char c)
{ return c == ' ' || c =='\f'|| c =='\n'|| c =='\r'|| c =='\t'|| c =='\v'; }
static inline unsigned char TOUPPER (unsigned char c)
{ return (c >= 'a' && c <= 'z') ? c - 'a' + 'A' : c; }
static inline unsigned char TOLOWER (unsigned char c)
{ return (c >= 'A' && c <= 'Z') ? c - 'A' + 'a' : c; }
static inline bool ISHEX (unsigned char c)
{ return (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F'); }
static inline unsigned char TOHEX (uint8_t c)
{ return (c & 0xF) <= 9 ? (c & 0xF) + '0' : (c & 0xF) + 'a' - 10; }
static inline uint8_t FROMHEX (unsigned char c)
{ return (c >= '0' && c <= '9') ? c - '0' : TOLOWER (c) - 'a' + 10; }

static inline unsigned int DIV_CEIL (const unsigned int a, unsigned int b)
{ return (a + (b - 1)) / b; }


#undef ARRAY_LENGTH
template <typename Type, unsigned int n>
static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; }

#define ARRAY_LENGTH_CONST(__array) ((signed int) (sizeof (__array) / sizeof (__array[0])))


static inline void *
hb_memcpy (void *__restrict dst, const void *__restrict src, size_t len)
{

  if ((__builtin_expect (!!(!len), 0))) return dst;
  return memcpy (dst, src, len);
}

static inline int
hb_memcmp (const void *a, const void *b, unsigned int len)
{



  if ((__builtin_expect (!!(!len), 0))) return 0;
  return memcmp (a, b, len);
}

static inline void *
hb_memset (void *s, int c, unsigned int n)
{

  if ((__builtin_expect (!!(!n), 0))) return 0;
  return memset (s, c, n);
}

static inline unsigned int
hb_ceil_to_4 (unsigned int v)
{
  return ((v - 1) | 3) + 1;
}

template <typename T> static inline bool
hb_in_range (T u, T lo, T hi)
{
  static_assert (!std::is_signed<T>::value, "");



  return (T)(u - lo) <= (T)(hi - lo);
}
template <typename T> static inline bool
hb_in_ranges (T u, T lo1, T hi1)
{
  return hb_in_range (u, lo1, hi1);
}
template <typename T, typename ...Ts> static inline bool
hb_in_ranges (T u, T lo1, T hi1, Ts... ds)
{
  return hb_in_range<T> (u, lo1, hi1) || hb_in_ranges<T> (u, ds...);
}






static inline bool
hb_unsigned_mul_overflows (unsigned int count, unsigned int size, unsigned *result = nullptr)
{

  unsigned stack_result;
  if (!result)
    result = &stack_result;
  return __builtin_mul_overflow (count, size, result);


  if (result)
    *result = count * size;
  return (size > 0) && (count >= ((unsigned int) -1) / size);
}






template <typename K, typename V, typename ...Ts>
static int
_hb_cmp_method (const void *pkey, const void *pval, Ts... ds)
{
  const K& key = * (const K*) pkey;
  const V& val = * (const V*) pval;

  return val.cmp (key, ds...);
}

template <typename V, typename K, typename ...Ts>
static inline bool
hb_bsearch_impl (unsigned *pos,
   const K& key,
   V* base, size_t nmemb, size_t stride,
   int (*compar)(const void *_key, const void *_item, Ts... _ds),
   Ts... ds)
{


  int min = 0, max = (int) nmemb - 1;
  while (min <= max)
  {
    int mid = ((unsigned int) min + (unsigned int) max) / 2;
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wcast-align"
    V* p = (V*) (((const char *) base) + (mid * stride));
#pragma GCC diagnostic pop
    int c = compar ((const void *) std::addressof (key), (const void *) p, ds...);
    if (c < 0)
      max = mid - 1;
    else if (c > 0)
      min = mid + 1;
    else
    {
      *pos = mid;
      return true;
    }
  }
  *pos = min;
  return false;
}

template <typename V, typename K>
static inline V*
hb_bsearch (const K& key, V* base,
     size_t nmemb, size_t stride = sizeof (V),
     int (*compar)(const void *_key, const void *_item) = _hb_cmp_method<K, V>)
{
  unsigned pos;
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wcast-align"
  return hb_bsearch_impl (&pos, key, base, nmemb, stride, compar) ?
  (V*) (((const char *) base) + (pos * stride)) : nullptr;
#pragma GCC diagnostic pop
}
template <typename V, typename K, typename ...Ts>
static inline V*
hb_bsearch (const K& key, V* base,
     size_t nmemb, size_t stride,
     int (*compar)(const void *_key, const void *_item, Ts... _ds),
     Ts... ds)
{
  unsigned pos;
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wcast-align"
  return hb_bsearch_impl (&pos, key, base, nmemb, stride, compar, ds...) ?
  (V*) (((const char *) base) + (pos * stride)) : nullptr;
#pragma GCC diagnostic pop
}
# 987 "../harfbuzz-6.0.0/src/hb-algs.hh"
#define SORT_R_SWAP(a,b,tmp) ((void) ((tmp) = (a)), (void) ((a) = (b)), (b) = (tmp))



static inline void sort_r_swap(char *__restrict a, char *__restrict b,
                               size_t w)
{
  char tmp, *end = a+w;
  for(; a < end; a++, b++) { ((void) ((tmp) = (*a)), (void) ((*a) = (*b)), (*b) = (tmp)); }
}




template <typename ...Ts>
static inline int sort_r_cmpswap(char *__restrict a,
                                 char *__restrict b, size_t w,
                                 int (*compar)(const void *_a,
                                               const void *_b,
                                               Ts... _ds),
                                 Ts... ds)
{
  if(compar(a, b, ds...) > 0) {
    sort_r_swap(a, b, w);
    return 1;
  }
  return 0;
}
# 1024 "../harfbuzz-6.0.0/src/hb-algs.hh"
static inline void sort_r_swap_blocks(char *ptr, size_t na, size_t nb)
{
  if(na > 0 && nb > 0) {
    if(na > nb) { sort_r_swap(ptr, ptr+na, nb); }
    else { sort_r_swap(ptr, ptr+nb, na); }
  }
}



template <typename ...Ts>
static inline void sort_r_simple(void *base, size_t nel, size_t w,
                                 int (*compar)(const void *_a,
                                               const void *_b,
                                               Ts... _ds),
                                 Ts... ds)
{
  char *b = (char *)base, *end = b + nel*w;




  if(nel < 10) {

    char *pi, *pj;
    for(pi = b+w; pi < end; pi += w) {
      for(pj = pi; pj > b && sort_r_cmpswap(pj-w,pj,w,compar,ds...); pj -= w) {}
    }
  }
  else
  {


    int cmp;
    char *pl, *ple, *pr, *pre, *pivot;
    char *last = b+w*(nel-1), *tmp;





    char *l[3];
    l[0] = b + w;
    l[1] = b+w*(nel/2);
    l[2] = last - w;



    if(compar(l[0],l[1],ds...) > 0) { ((void) ((tmp) = (l[0])), (void) ((l[0]) = (l[1])), (l[1]) = (tmp)); }
    if(compar(l[1],l[2],ds...) > 0) {
      ((void) ((tmp) = (l[1])), (void) ((l[1]) = (l[2])), (l[2]) = (tmp));
      if(compar(l[0],l[1],ds...) > 0) { ((void) ((tmp) = (l[0])), (void) ((l[0]) = (l[1])), (l[1]) = (tmp)); }
    }


    if(l[1] != last) { sort_r_swap(l[1], last, w); }
# 1092 "../harfbuzz-6.0.0/src/hb-algs.hh"
    pivot = last;
    ple = pl = b;
    pre = pr = last;
# 1105 "../harfbuzz-6.0.0/src/hb-algs.hh"
    while(pl < pr) {


      for(; pl < pr; pl += w) {
        cmp = compar(pl, pivot, ds...);
        if(cmp > 0) { break; }
        else if(cmp == 0) {
          if(ple < pl) { sort_r_swap(ple, pl, w); }
          ple += w;
        }
      }

      if(pl >= pr) { break; }


      for(; pl < pr; ) {
        pr -= w;
        cmp = compar(pr, pivot, ds...);
        if(cmp == 0) {
          pre -= w;
          if(pr < pre) { sort_r_swap(pr, pre, w); }
        }
        else if(cmp < 0) {
          if(pl < pr) { sort_r_swap(pl, pr, w); }
          pl += w;
          break;
        }
      }
    }

    pl = pr;







    sort_r_swap_blocks(b, ple-b, pl-ple);
    sort_r_swap_blocks(pr, pre-pr, end-pre);




    sort_r_simple(b, (pl-ple)/w, w, compar, ds...);
    sort_r_simple(end-(pre-pr), (pre-pr)/w, w, compar, ds...);
  }
}

static inline void
hb_qsort (void *base, size_t nel, size_t width,
   int (*compar)(const void *_a, const void *_b))
{



  sort_r_simple (base, nel, width, compar);

}

static inline void
hb_qsort (void *base, size_t nel, size_t width,
   int (*compar)(const void *_a, const void *_b, void *_arg),
   void *arg)
{



  sort_r_simple (base, nel, width, compar, arg);

}


template <typename T, typename T2, typename T3 = int> static inline void
hb_stable_sort (T *array, unsigned int len, int(*compar)(const T2 *, const T2 *), T3 *array2 = nullptr)
{
  static_assert (std::is_trivially_copy_assignable<T>::value, "");
  static_assert (std::is_trivially_copy_assignable<T3>::value, "");

  for (unsigned int i = 1; i < len; i++)
  {
    unsigned int j = i;
    while (j && compar (&array[j - 1], &array[i]) > 0)
      j--;
    if (i == j)
      continue;

    {
      T t = array[i];
      memmove (&array[j + 1], &array[j], (i - j) * sizeof (T));
      array[j] = t;
    }
    if (array2)
    {
      T3 t = array2[i];
      memmove (&array2[j + 1], &array2[j], (i - j) * sizeof (T3));
      array2[j] = t;
    }
  }
}

static inline hb_bool_t
hb_codepoint_parse (const char *s, unsigned int len, int base, hb_codepoint_t *out)
{
  unsigned int v;
  const char *p = s;
  const char *end = p + len;
  if ((__builtin_expect (!!(!hb_parse_uint (&p, end, &v, true , base)), 0)))
    return false;

  *out = v;
  return true;
}




struct
{ template <typename _T> auto operator () (_T&& _v) const -> decltype ((hb_partial<2> (+this, std::forward<_T> (_v)))) { return (hb_partial<2> (+this, std::forward<_T> (_v))); } static_assert (true, "");
  template <typename T> constexpr auto
  operator () (const T &a, const T &b) const -> decltype ((a & b)) { return (a & b); }
}
static const hb_bitwise_and __attribute__((unused));
struct
{ template <typename _T> auto operator () (_T&& _v) const -> decltype ((hb_partial<2> (+this, std::forward<_T> (_v)))) { return (hb_partial<2> (+this, std::forward<_T> (_v))); } static_assert (true, "");
  template <typename T> constexpr auto
  operator () (const T &a, const T &b) const -> decltype ((a | b)) { return (a | b); }
}
static const hb_bitwise_or __attribute__((unused));
struct
{ template <typename _T> auto operator () (_T&& _v) const -> decltype ((hb_partial<2> (+this, std::forward<_T> (_v)))) { return (hb_partial<2> (+this, std::forward<_T> (_v))); } static_assert (true, "");
  template <typename T> constexpr auto
  operator () (const T &a, const T &b) const -> decltype ((a ^ b)) { return (a ^ b); }
}
static const hb_bitwise_xor __attribute__((unused));
struct
{ template <typename _T> auto operator () (_T&& _v) const -> decltype ((hb_partial<2> (+this, std::forward<_T> (_v)))) { return (hb_partial<2> (+this, std::forward<_T> (_v))); } static_assert (true, "");
  template <typename T> constexpr auto
  operator () (const T &a, const T &b) const -> decltype ((~a & b)) { return (~a & b); }
}
static const hb_bitwise_lt __attribute__((unused));
struct
{ template <typename _T> auto operator () (_T&& _v) const -> decltype ((hb_partial<2> (+this, std::forward<_T> (_v)))) { return (hb_partial<2> (+this, std::forward<_T> (_v))); } static_assert (true, "");
  template <typename T> constexpr auto
  operator () (const T &a, const T &b) const -> decltype ((a & ~b)) { return (a & ~b); }
}
static const hb_bitwise_gt __attribute__((unused));
struct
{ template <typename _T> auto operator () (_T&& _v) const -> decltype ((hb_partial<2> (+this, std::forward<_T> (_v)))) { return (hb_partial<2> (+this, std::forward<_T> (_v))); } static_assert (true, "");
  template <typename T> constexpr auto
  operator () (const T &a, const T &b) const -> decltype ((~a | b)) { return (~a | b); }
}
static const hb_bitwise_le __attribute__((unused));
struct
{ template <typename _T> auto operator () (_T&& _v) const -> decltype ((hb_partial<2> (+this, std::forward<_T> (_v)))) { return (hb_partial<2> (+this, std::forward<_T> (_v))); } static_assert (true, "");
  template <typename T> constexpr auto
  operator () (const T &a, const T &b) const -> decltype ((a | ~b)) { return (a | ~b); }
}
static const hb_bitwise_ge __attribute__((unused));
struct
{
  template <typename T> constexpr auto
  operator () (const T &a) const -> decltype ((~a)) { return (~a); }
}
static const hb_bitwise_neg __attribute__((unused));

struct
{ template <typename _T> auto operator () (_T&& _v) const -> decltype ((hb_partial<2> (+this, std::forward<_T> (_v)))) { return (hb_partial<2> (+this, std::forward<_T> (_v))); } static_assert (true, "");
  template <typename T, typename T2> constexpr auto
  operator () (const T &a, const T2 &b) const -> decltype ((a + b)) { return (a + b); }
}
static const hb_add __attribute__((unused));
struct
{ template <typename _T> auto operator () (_T&& _v) const -> decltype ((hb_partial<2> (+this, std::forward<_T> (_v)))) { return (hb_partial<2> (+this, std::forward<_T> (_v))); } static_assert (true, "");
  template <typename T, typename T2> constexpr auto
  operator () (const T &a, const T2 &b) const -> decltype ((a - b)) { return (a - b); }
}
static const hb_sub __attribute__((unused));
struct
{ template <typename _T> auto operator () (_T&& _v) const -> decltype ((hb_partial<2> (+this, std::forward<_T> (_v)))) { return (hb_partial<2> (+this, std::forward<_T> (_v))); } static_assert (true, "");
  template <typename T, typename T2> constexpr auto
  operator () (const T &a, const T2 &b) const -> decltype ((b - a)) { return (b - a); }
}
static const hb_rsub __attribute__((unused));
struct
{ template <typename _T> auto operator () (_T&& _v) const -> decltype ((hb_partial<2> (+this, std::forward<_T> (_v)))) { return (hb_partial<2> (+this, std::forward<_T> (_v))); } static_assert (true, "");
  template <typename T, typename T2> constexpr auto
  operator () (const T &a, const T2 &b) const -> decltype ((a * b)) { return (a * b); }
}
static const hb_mul __attribute__((unused));
struct
{ template <typename _T> auto operator () (_T&& _v) const -> decltype ((hb_partial<2> (+this, std::forward<_T> (_v)))) { return (hb_partial<2> (+this, std::forward<_T> (_v))); } static_assert (true, "");
  template <typename T, typename T2> constexpr auto
  operator () (const T &a, const T2 &b) const -> decltype ((a / b)) { return (a / b); }
}
static const hb_div __attribute__((unused));
struct
{ template <typename _T> auto operator () (_T&& _v) const -> decltype ((hb_partial<2> (+this, std::forward<_T> (_v)))) { return (hb_partial<2> (+this, std::forward<_T> (_v))); } static_assert (true, "");
  template <typename T, typename T2> constexpr auto
  operator () (const T &a, const T2 &b) const -> decltype ((a % b)) { return (a % b); }
}
static const hb_mod __attribute__((unused));
struct
{
  template <typename T> constexpr auto
  operator () (const T &a) const -> decltype ((+a)) { return (+a); }
}
static const hb_pos __attribute__((unused));
struct
{
  template <typename T> constexpr auto
  operator () (const T &a) const -> decltype ((-a)) { return (-a); }
}
static const hb_neg __attribute__((unused));
struct
{
  template <typename T> constexpr auto
  operator () (T &a) const -> decltype ((++a)) { return (++a); }
}
static const hb_inc __attribute__((unused));
struct
{
  template <typename T> constexpr auto
  operator () (T &a) const -> decltype ((--a)) { return (--a); }
}
static const hb_dec __attribute__((unused));
# 483 "../harfbuzz-6.0.0/src/hb.hh" 2
# 1 "../harfbuzz-6.0.0/src/hb-iter.hh" 1
# 30 "../harfbuzz-6.0.0/src/hb-iter.hh"
#define HB_ITER_HH 
# 58 "../harfbuzz-6.0.0/src/hb-iter.hh"
template <typename iter_t, typename Item = typename iter_t::__item_t__>
struct hb_iter_t
{
  typedef Item item_t;
  constexpr unsigned get_item_size () const { return hb_static_size<Item>::value; }
  static constexpr bool is_iterator = true;
  static constexpr bool is_random_access_iterator = false;
  static constexpr bool is_sorted_iterator = false;

  private:

  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
 iter_t* thiz () { return static_cast< iter_t *> (this); }
  public:


  iter_t iter () const { return *thiz(); }
  iter_t operator + () const { return *thiz(); }
  iter_t _begin () const { return *thiz(); }
  iter_t begin () const { return _begin (); }
  iter_t _end () const { return thiz()->__end__ (); }
  iter_t end () const { return _end (); }
  explicit operator bool () const { return thiz()->__more__ (); }
  unsigned len () const { return thiz()->__len__ (); }


  template <typename T = item_t,
     typename hb_enable_if<(std::is_reference<T>::value)>::type* = nullptr>
  hb_remove_reference<item_t>* operator -> () const { return std::addressof (**thiz()); }
  item_t operator * () const { return thiz()->__item__ (); }
  item_t operator * () { return thiz()->__item__ (); }
  item_t operator [] (unsigned i) const { return thiz()->__item_at__ (i); }
  item_t operator [] (unsigned i) { return thiz()->__item_at__ (i); }
  iter_t& operator += (unsigned count) & { thiz()->__forward__ (count); return *thiz(); }
  iter_t operator += (unsigned count) && { thiz()->__forward__ (count); return *thiz(); }
  iter_t& operator ++ () & { thiz()->__next__ (); return *thiz(); }
  iter_t operator ++ () && { thiz()->__next__ (); return *thiz(); }
  iter_t& operator -= (unsigned count) & { thiz()->__rewind__ (count); return *thiz(); }
  iter_t operator -= (unsigned count) && { thiz()->__rewind__ (count); return *thiz(); }
  iter_t& operator -- () & { thiz()->__prev__ (); return *thiz(); }
  iter_t operator -- () && { thiz()->__prev__ (); return *thiz(); }
  iter_t operator + (unsigned count) const { auto c = thiz()->iter (); c += count; return c; }
  friend iter_t operator + (unsigned count, const iter_t &it) { return it + count; }
  iter_t operator ++ (int) { iter_t c (*thiz()); ++*thiz(); return c; }
  iter_t operator - (unsigned count) const { auto c = thiz()->iter (); c -= count; return c; }
  iter_t operator -- (int) { iter_t c (*thiz()); --*thiz(); return c; }
  template <typename T>
  iter_t& operator >> (T &v) & { v = **thiz(); ++*thiz(); return *thiz(); }
  template <typename T>
  iter_t operator >> (T &v) && { v = **thiz(); ++*thiz(); return *thiz(); }
  template <typename T>
  iter_t& operator << (const T v) & { **thiz() = v; ++*thiz(); return *thiz(); }
  template <typename T>
  iter_t operator << (const T v) && { **thiz() = v; ++*thiz(); return *thiz(); }

  protected:
  hb_iter_t () = default;
  hb_iter_t (const hb_iter_t &o __attribute__((unused))) = default;
  hb_iter_t (hb_iter_t &&o __attribute__((unused))) = default;
  hb_iter_t& operator = (const hb_iter_t &o __attribute__((unused))) = default;
  hb_iter_t& operator = (hb_iter_t &&o __attribute__((unused))) = default;
};

#define HB_ITER_USING(Name) using item_t = typename Name::item_t; using Name::_begin; using Name::begin; using Name::_end; using Name::end; using Name::get_item_size; using Name::is_iterator; using Name::iter; using Name::operator bool; using Name::len; using Name::operator ->; using Name::operator *; using Name::operator []; using Name::operator +=; using Name::operator ++; using Name::operator -=; using Name::operator --; using Name::operator +; using Name::operator -; using Name::operator >>; using Name::operator <<; static_assert (true, "")
# 146 "../harfbuzz-6.0.0/src/hb-iter.hh"
template <typename Iterable>
using hb_iter_type = decltype (hb_deref ((hb_declval<Iterable> ())).iter ());
template <typename Iterable>
using hb_item_type = decltype (*hb_deref ((hb_declval<Iterable> ())).iter ());


template <typename> struct hb_array_t;
template <typename> struct hb_sorted_array_t;

struct
{
  template <typename T> hb_iter_type<T>
  operator () (T&& c) const
  { return hb_deref (std::forward<T> (c)).iter (); }



  template <typename Type> inline hb_array_t<Type>
  operator () (Type *array, unsigned int length) const
  { return hb_array_t<Type> (array, length); }

  template <typename Type, unsigned int length> hb_array_t<Type>
  operator () (Type (&array)[length]) const
  { return hb_array_t<Type> (array, length); }

}
static const hb_iter __attribute__((unused));
struct
{
  template <typename T> auto
  impl (T&& c, hb_priority<1>) const -> hb_head_t<unsigned, decltype ((c.len ()))> { return (c.len ()); }

  template <typename T> auto
  impl (T&& c, hb_priority<0>) const -> hb_head_t<unsigned, decltype ((c.len))> { return (c.len); }

  public:

  template <typename T> auto
  operator () (T&& c) const -> hb_head_t<unsigned, decltype ((impl (std::forward<T> (c), hb_priority<16> ())))> { return (impl (std::forward<T> (c), hb_priority<16> ())); }
}
static const hb_len __attribute__((unused));


template <typename iter_t, typename item_t = typename iter_t::__item_t__>
struct hb_iter_fallback_mixin_t
{
  private:

  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
 iter_t* thiz () { return static_cast< iter_t *> (this); }
  public:


  item_t __item__ () const { return (*thiz())[0]; }
  item_t __item_at__ (unsigned i) const { return *(*thiz() + i); }


  bool __more__ () const { return bool (thiz()->len ()); }
  unsigned __len__ () const
  { iter_t c (*thiz()); unsigned l = 0; while (c) { c++; l++; } return l; }


  void __next__ () { *thiz() += 1; }
  void __forward__ (unsigned n) { while (*thiz() && n--) ++*thiz(); }


  void __prev__ () { *thiz() -= 1; }
  void __rewind__ (unsigned n) { while (*thiz() && n--) --*thiz(); }



  iter_t __end__ () const
  {
    if (thiz()->is_random_access_iterator)
      return *thiz() + thiz()->len ();

    auto it = *thiz();
    while (it) ++it;
    return it;
  }

  protected:
  hb_iter_fallback_mixin_t () = default;
  hb_iter_fallback_mixin_t (const hb_iter_fallback_mixin_t &o __attribute__((unused))) = default;
  hb_iter_fallback_mixin_t (hb_iter_fallback_mixin_t &&o __attribute__((unused))) = default;
  hb_iter_fallback_mixin_t& operator = (const hb_iter_fallback_mixin_t &o __attribute__((unused))) = default;
  hb_iter_fallback_mixin_t& operator = (hb_iter_fallback_mixin_t &&o __attribute__((unused))) = default;
};

template <typename iter_t, typename item_t = typename iter_t::__item_t__>
struct hb_iter_with_fallback_t :
  hb_iter_t<iter_t, item_t>,
  hb_iter_fallback_mixin_t<iter_t, item_t>
{
  protected:
  hb_iter_with_fallback_t () = default;
  hb_iter_with_fallback_t (const hb_iter_with_fallback_t &o __attribute__((unused))) = default;
  hb_iter_with_fallback_t (hb_iter_with_fallback_t &&o __attribute__((unused))) = default;
  hb_iter_with_fallback_t& operator = (const hb_iter_with_fallback_t &o __attribute__((unused))) = default;
  hb_iter_with_fallback_t& operator = (hb_iter_with_fallback_t &&o __attribute__((unused))) = default;
};







template<typename Iter, typename Item>
struct hb_is_iterator_of
{
  template <typename Item2 = Item>
  static hb_true_type impl (hb_priority<2>, hb_iter_t<Iter, hb_type_identity<Item2>> *);
  static hb_false_type impl (hb_priority<0>, const void *);

  public:
  static constexpr bool value = decltype (impl (hb_priority<16> (), (hb_declval<Iter*> ())))::value;
};
#define hb_is_iterator_of(Iter,Item) hb_is_iterator_of<Iter, Item>::value
#define hb_is_iterator(Iter) hb_is_iterator_of (Iter, typename Iter::item_t)
#define hb_is_sorted_iterator_of(Iter,Item) (hb_is_iterator_of<Iter, Item>::value && Iter::is_sorted_iterator)
#define hb_is_sorted_iterator(Iter) hb_is_sorted_iterator_of (Iter, typename Iter::item_t)



template <typename T>
struct hb_is_iterable
{
  private:

  template <typename U>
  static auto impl (hb_priority<1>) -> decltype ((hb_declval<U> ()).iter (), hb_true_type ());

  template <typename>
  static hb_false_type impl (hb_priority<0>);

  public:
  static constexpr bool value = decltype (impl<T> (hb_priority<16> ()))::value;
};
#define hb_is_iterable(Iterable) hb_is_iterable<Iterable>::value



template<typename Iter, typename Item>
struct hb_is_source_of
{
  private:
  template <typename Iter2 = Iter,
     typename hb_enable_if<(std::is_convertible<typename Iter2::item_t, hb_add_lvalue_reference<const Item> >::value)>::type* = nullptr>
  static hb_true_type impl (hb_priority<2>);
  template <typename Iter2 = Iter>
  static auto impl (hb_priority<1>) -> decltype ((hb_declval<Iter2> ()) >> (hb_declval<Item &> ()), hb_true_type ());
  static hb_false_type impl (hb_priority<0>);

  public:
  static constexpr bool value = decltype (impl (hb_priority<16> ()))::value;
};
#define hb_is_source_of(Iter,Item) hb_is_source_of<Iter, Item>::value

template<typename Iter, typename Item>
struct hb_is_sink_of
{
  private:
  template <typename Iter2 = Iter,
     typename hb_enable_if<(std::is_convertible<typename Iter2::item_t, hb_add_lvalue_reference<Item> >::value)>::type* = nullptr>
  static hb_true_type impl (hb_priority<2>);
  template <typename Iter2 = Iter>
  static auto impl (hb_priority<1>) -> decltype ((hb_declval<Iter2> ()) << (hb_declval<Item> ()), hb_true_type ());
  static hb_false_type impl (hb_priority<0>);

  public:
  static constexpr bool value = decltype (impl (hb_priority<16> ()))::value;
};
#define hb_is_sink_of(Iter,Item) hb_is_sink_of<Iter, Item>::value


#define hb_is_sorted_source_of(Iter,Item) (hb_is_source_of(Iter, Item) && Iter::is_sorted_iterator)





template <typename Iterable,
   typename hb_enable_if<((hb_is_iterable<Iterable>::value))>::type* = nullptr>
static inline auto begin (Iterable&& iterable) -> decltype ((hb_iter (iterable).begin ())) { return (hb_iter (iterable).begin ()); }

template <typename Iterable,
   typename hb_enable_if<((hb_is_iterable<Iterable>::value))>::type* = nullptr>
static inline auto end (Iterable&& iterable) -> decltype ((hb_iter (iterable).end ())) { return (hb_iter (iterable).end ()); }



namespace OT {

template <typename Iterable,
   typename hb_enable_if<((hb_is_iterable<Iterable>::value))>::type* = nullptr>
static inline auto begin (Iterable&& iterable) -> decltype ((hb_iter (iterable).begin ())) { return (hb_iter (iterable).begin ()); }

template <typename Iterable,
   typename hb_enable_if<((hb_is_iterable<Iterable>::value))>::type* = nullptr>
static inline auto end (Iterable&& iterable) -> decltype ((hb_iter (iterable).end ())) { return (hb_iter (iterable).end ()); }

}






template <typename Lhs, typename Rhs,
   typename hb_enable_if<((hb_is_iterator_of<Lhs, typename Lhs::item_t>::value))>::type* = nullptr>
static inline auto
operator | (Lhs&& lhs, Rhs&& rhs) -> decltype ((std::forward<Rhs> (rhs) (std::forward<Lhs> (lhs)))) { return (std::forward<Rhs> (rhs) (std::forward<Lhs> (lhs))); }



enum class hb_function_sortedness_t {
  NOT_SORTED,
  RETAINS_SORTING,
  SORTED,
};

template <typename Iter, typename Proj, hb_function_sortedness_t Sorted,
  typename hb_enable_if<((hb_is_iterator_of<Iter, typename Iter::item_t>::value))>::type* = nullptr>
struct hb_map_iter_t :
  hb_iter_t<hb_map_iter_t<Iter, Proj, Sorted>,
     decltype (hb_get ((hb_declval<Proj> ()), *(hb_declval<Iter> ())))>
{
  hb_map_iter_t (const Iter& it, Proj f_) : it (it), f (f_) {}

  typedef decltype (hb_get ((hb_declval<Proj> ()), *(hb_declval<Iter> ()))) __item_t__;
  static constexpr bool is_random_access_iterator = Iter::is_random_access_iterator;
  static constexpr bool is_sorted_iterator =
    Sorted == hb_function_sortedness_t::SORTED ? true :
    Sorted == hb_function_sortedness_t::RETAINS_SORTING ? Iter::is_sorted_iterator :
    false;
  __item_t__ __item__ () const { return hb_get (f.get (), *it); }
  __item_t__ __item_at__ (unsigned i) const { return hb_get (f.get (), it[i]); }
  bool __more__ () const { return bool (it); }
  unsigned __len__ () const { return it.len (); }
  void __next__ () { ++it; }
  void __forward__ (unsigned n) { it += n; }
  void __prev__ () { --it; }
  void __rewind__ (unsigned n) { it -= n; }
  hb_map_iter_t __end__ () const { return hb_map_iter_t (it._end (), f); }
  bool operator != (const hb_map_iter_t& o) const
  { return it != o.it; }

  private:
  Iter it;
  hb_reference_wrapper<Proj> f;
};

template <typename Proj, hb_function_sortedness_t Sorted>
struct hb_map_iter_factory_t
{
  hb_map_iter_factory_t (Proj f) : f (f) {}

  template <typename Iter,
     typename hb_enable_if<((hb_is_iterator_of<Iter, typename Iter::item_t>::value))>::type* = nullptr>
  hb_map_iter_t<Iter, Proj, Sorted>
  operator () (Iter it)
  { return hb_map_iter_t<Iter, Proj, Sorted> (it, f); }

  private:
  Proj f;
};
struct
{
  template <typename Proj>
  hb_map_iter_factory_t<Proj, hb_function_sortedness_t::NOT_SORTED>
  operator () (Proj&& f) const
  { return hb_map_iter_factory_t<Proj, hb_function_sortedness_t::NOT_SORTED> (f); }
}
static const hb_map __attribute__((unused));
struct
{
  template <typename Proj>
  hb_map_iter_factory_t<Proj, hb_function_sortedness_t::RETAINS_SORTING>
  operator () (Proj&& f) const
  { return hb_map_iter_factory_t<Proj, hb_function_sortedness_t::RETAINS_SORTING> (f); }
}
static const hb_map_retains_sorting __attribute__((unused));
struct
{
  template <typename Proj>
  hb_map_iter_factory_t<Proj, hb_function_sortedness_t::SORTED>
  operator () (Proj&& f) const
  { return hb_map_iter_factory_t<Proj, hb_function_sortedness_t::SORTED> (f); }
}
static const hb_map_sorted __attribute__((unused));

template <typename Iter, typename Pred, typename Proj,
  typename hb_enable_if<((hb_is_iterator_of<Iter, typename Iter::item_t>::value))>::type* = nullptr>
struct hb_filter_iter_t :
  hb_iter_with_fallback_t<hb_filter_iter_t<Iter, Pred, Proj>,
     typename Iter::item_t>
{
  hb_filter_iter_t (const Iter& it_, Pred p_, Proj f_) : it (it_), p (p_), f (f_)
  { while (it && !hb_has (p.get (), hb_get (f.get (), *it))) ++it; }

  typedef typename Iter::item_t __item_t__;
  static constexpr bool is_sorted_iterator = Iter::is_sorted_iterator;
  __item_t__ __item__ () const { return *it; }
  bool __more__ () const { return bool (it); }
  void __next__ () { do ++it; while (it && !hb_has (p.get (), hb_get (f.get (), *it))); }
  void __prev__ () { do --it; while (it && !hb_has (p.get (), hb_get (f.get (), *it))); }
  hb_filter_iter_t __end__ () const { return hb_filter_iter_t (it._end (), p, f); }
  bool operator != (const hb_filter_iter_t& o) const
  { return it != o.it; }

  private:
  Iter it;
  hb_reference_wrapper<Pred> p;
  hb_reference_wrapper<Proj> f;
};
template <typename Pred, typename Proj>
struct hb_filter_iter_factory_t
{
  hb_filter_iter_factory_t (Pred p, Proj f) : p (p), f (f) {}

  template <typename Iter,
     typename hb_enable_if<((hb_is_iterator_of<Iter, typename Iter::item_t>::value))>::type* = nullptr>
  hb_filter_iter_t<Iter, Pred, Proj>
  operator () (Iter it)
  { return hb_filter_iter_t<Iter, Pred, Proj> (it, p, f); }

  private:
  Pred p;
  Proj f;
};
struct
{
  template <typename Pred = decltype ((hb_identity)),
     typename Proj = decltype ((hb_identity))>
  hb_filter_iter_factory_t<Pred, Proj>
  operator () (Pred&& p = hb_identity, Proj&& f = hb_identity) const
  { return hb_filter_iter_factory_t<Pred, Proj> (p, f); }
}
static const hb_filter __attribute__((unused));

template <typename Redu, typename InitT>
struct hb_reduce_t
{
  hb_reduce_t (Redu r, InitT init_value) : r (r), init_value (init_value) {}

  template <typename Iter,
     typename hb_enable_if<((hb_is_iterator_of<Iter, typename Iter::item_t>::value))>::type* = nullptr,
     typename AccuT = hb_decay<decltype ((hb_declval<Redu> ()) ((hb_declval<InitT> ()), (hb_declval<typename Iter::item_t> ())))>>
  AccuT
  operator () (Iter it)
  {
    AccuT value = init_value;
    for (; it; ++it)
      value = r (value, *it);
    return value;
  }

  private:
  Redu r;
  InitT init_value;
};
struct
{
  template <typename Redu, typename InitT>
  hb_reduce_t<Redu, InitT>
  operator () (Redu&& r, InitT init_value) const
  { return hb_reduce_t<Redu, InitT> (r, init_value); }
}
static const hb_reduce __attribute__((unused));




template <typename A, typename B>
struct hb_zip_iter_t :
  hb_iter_t<hb_zip_iter_t<A, B>,
     hb_pair_t<typename A::item_t, typename B::item_t>>
{
  hb_zip_iter_t () {}
  hb_zip_iter_t (const A& a, const B& b) : a (a), b (b) {}

  typedef hb_pair_t<typename A::item_t, typename B::item_t> __item_t__;
  static constexpr bool is_random_access_iterator =
    A::is_random_access_iterator &&
    B::is_random_access_iterator;
# 556 "../harfbuzz-6.0.0/src/hb-iter.hh"
  static constexpr bool is_sorted_iterator = A::is_sorted_iterator;

  __item_t__ __item__ () const { return __item_t__ (*a, *b); }
  __item_t__ __item_at__ (unsigned i) const { return __item_t__ (a[i], b[i]); }
  bool __more__ () const { return bool (a) && bool (b); }
  unsigned __len__ () const { return hb_min (a.len (), b.len ()); }
  void __next__ () { ++a; ++b; }
  void __forward__ (unsigned n) { a += n; b += n; }
  void __prev__ () { --a; --b; }
  void __rewind__ (unsigned n) { a -= n; b -= n; }
  hb_zip_iter_t __end__ () const { return hb_zip_iter_t (a._end (), b._end ()); }


  bool operator != (const hb_zip_iter_t& o) const
  { return a != o.a && b != o.b; }

  private:
  A a;
  B b;
};
struct
{ template <typename _T> auto operator () (_T&& _v) const -> decltype ((hb_partial<2> (+this, std::forward<_T> (_v)))) { return (hb_partial<2> (+this, std::forward<_T> (_v))); } static_assert (true, "");
  template <typename A, typename B,
     typename hb_enable_if<((hb_is_iterable<A>::value && hb_is_iterable<B>::value))>::type* = nullptr>
  hb_zip_iter_t<hb_iter_type<A>, hb_iter_type<B>>
  operator () (A&& a, B&& b) const
  { return hb_zip_iter_t<hb_iter_type<A>, hb_iter_type<B>> (hb_iter (a), hb_iter (b)); }
}
static const hb_zip __attribute__((unused));



template <typename A, typename B>
struct hb_concat_iter_t :
    hb_iter_t<hb_concat_iter_t<A, B>, typename A::item_t>
{
  hb_concat_iter_t () {}
  hb_concat_iter_t (A& a, B& b) : a (a), b (b) {}
  hb_concat_iter_t (const A& a, const B& b) : a (a), b (b) {}


  typedef typename A::item_t __item_t__;
  static constexpr bool is_random_access_iterator =
    A::is_random_access_iterator &&
    B::is_random_access_iterator;
  static constexpr bool is_sorted_iterator = false;

  __item_t__ __item__ () const
  {
    if (!a)
      return *b;
    return *a;
  }

  __item_t__ __item_at__ (unsigned i) const
  {
    unsigned a_len = a.len ();
    if (i < a_len)
      return a[i];
    return b[i - a_len];
  }

  bool __more__ () const { return bool (a) || bool (b); }

  unsigned __len__ () const { return a.len () + b.len (); }

  void __next__ ()
  {
    if (a)
      ++a;
    else
      ++b;
  }

  void __forward__ (unsigned n)
  {
    if (!n) return;
    if (!is_random_access_iterator) {
      while (n-- && *this) {
        (*this)++;
      }
      return;
    }

    unsigned a_len = a.len ();
    if (n > a_len) {
      n -= a_len;
      a.__forward__ (a_len);
      b.__forward__ (n);
    } else {
      a.__forward__ (n);
    }
  }

  hb_concat_iter_t __end__ () const { return hb_concat_iter_t (a._end (), b._end ()); }
  bool operator != (const hb_concat_iter_t& o) const
  {
    return a != o.a
        || b != o.b;
  }

  private:
  A a;
  B b;
};
struct
{ template <typename _T> auto operator () (_T&& _v) const -> decltype ((hb_partial<2> (+this, std::forward<_T> (_v)))) { return (hb_partial<2> (+this, std::forward<_T> (_v))); } static_assert (true, "");
  template <typename A, typename B,
     typename hb_enable_if<((hb_is_iterable<A>::value && hb_is_iterable<B>::value))>::type* = nullptr>
  hb_concat_iter_t<hb_iter_type<A>, hb_iter_type<B>>
  operator () (A&& a, B&& b) const
  { return hb_concat_iter_t<hb_iter_type<A>, hb_iter_type<B>> (hb_iter (a), hb_iter (b)); }
}
static const hb_concat __attribute__((unused));



template <typename Appl>
struct hb_apply_t
{
  hb_apply_t (Appl a) : a (a) {}

  template <typename Iter,
     typename hb_enable_if<((hb_is_iterator_of<Iter, typename Iter::item_t>::value))>::type* = nullptr>
  void operator () (Iter it)
  {
    for (; it; ++it)
      (void) hb_invoke (a, *it);
  }

  private:
  Appl a;
};
struct
{
  template <typename Appl> hb_apply_t<Appl>
  operator () (Appl&& a) const
  { return hb_apply_t<Appl> (a); }

  template <typename Appl> hb_apply_t<Appl&>
  operator () (Appl *a) const
  { return hb_apply_t<Appl&> (*a); }
}
static const hb_apply __attribute__((unused));



template <typename T, typename S>
struct hb_range_iter_t :
  hb_iter_t<hb_range_iter_t<T, S>, T>
{
  hb_range_iter_t (T start, T end_, S step) : v (start), end_ (end_for (start, end_, step)), step (step) {}

  typedef T __item_t__;
  static constexpr bool is_random_access_iterator = true;
  static constexpr bool is_sorted_iterator = true;
  __item_t__ __item__ () const { return hb_ridentity (v); }
  __item_t__ __item_at__ (unsigned j) const { return v + j * step; }
  bool __more__ () const { return v != end_; }
  unsigned __len__ () const { return !step ? 
# 715 "../harfbuzz-6.0.0/src/hb-iter.hh" 3 4
                                            (0x7fffffff * 2U + 1U) 
# 715 "../harfbuzz-6.0.0/src/hb-iter.hh"
                                                     : (end_ - v) / step; }
  void __next__ () { v += step; }
  void __forward__ (unsigned n) { v += n * step; }
  void __prev__ () { v -= step; }
  void __rewind__ (unsigned n) { v -= n * step; }
  hb_range_iter_t __end__ () const { return hb_range_iter_t (end_, end_, step); }
  bool operator != (const hb_range_iter_t& o) const
  { return v != o.v; }

  private:
  static inline T end_for (T start, T end_, S step)
  {
    if (!step)
      return end_;
    auto res = (end_ - start) % step;
    if (!res)
      return end_;
    end_ += step - res;
    return end_;
  }

  private:
  T v;
  T end_;
  S step;
};
struct
{
  template <typename T = unsigned> hb_range_iter_t<T, unsigned>
  operator () (T end = (unsigned) -1) const
  { return hb_range_iter_t<T, unsigned> (0, end, 1u); }

  template <typename T, typename S = unsigned> hb_range_iter_t<T, S>
  operator () (T start, T end, S step = 1u) const
  { return hb_range_iter_t<T, S> (start, end, step); }
}
static const hb_range __attribute__((unused));

template <typename T, typename S>
struct hb_iota_iter_t :
  hb_iter_with_fallback_t<hb_iota_iter_t<T, S>, T>
{
  hb_iota_iter_t (T start, S step) : v (start), step (step) {}

  private:

  template <typename S2 = S>
  auto
  inc (hb_type_identity<S2> s, hb_priority<1>)
    -> hb_void_t<decltype (hb_invoke (std::forward<S2> (s), hb_declval<T&> ()))>
  { v = hb_invoke (std::forward<S2> (s), v); }

  void
  inc (S s, hb_priority<0>)
  { v += s; }

  public:

  typedef T __item_t__;
  static constexpr bool is_random_access_iterator = true;
  static constexpr bool is_sorted_iterator = true;
  __item_t__ __item__ () const { return hb_ridentity (v); }
  bool __more__ () const { return true; }
  unsigned __len__ () const { return 
# 778 "../harfbuzz-6.0.0/src/hb-iter.hh" 3 4
                                    (0x7fffffff * 2U + 1U)
# 778 "../harfbuzz-6.0.0/src/hb-iter.hh"
                                            ; }
  void __next__ () { inc (step, hb_priority<16> ()); }
  void __prev__ () { v -= step; }
  hb_iota_iter_t __end__ () const { return *this; }
  bool operator != (const hb_iota_iter_t& o) const { return true; }

  private:
  T v;
  S step;
};
struct
{
  template <typename T = unsigned, typename S = unsigned> hb_iota_iter_t<T, S>
  operator () (T start = 0u, S step = 1u) const
  { return hb_iota_iter_t<T, S> (start, step); }
}
static const hb_iota __attribute__((unused));

template <typename T>
struct hb_repeat_iter_t :
  hb_iter_t<hb_repeat_iter_t<T>, T>
{
  hb_repeat_iter_t (T value) : v (value) {}

  typedef T __item_t__;
  static constexpr bool is_random_access_iterator = true;
  static constexpr bool is_sorted_iterator = true;
  __item_t__ __item__ () const { return v; }
  __item_t__ __item_at__ (unsigned j) const { return v; }
  bool __more__ () const { return true; }
  unsigned __len__ () const { return 
# 808 "../harfbuzz-6.0.0/src/hb-iter.hh" 3 4
                                    (0x7fffffff * 2U + 1U)
# 808 "../harfbuzz-6.0.0/src/hb-iter.hh"
                                            ; }
  void __next__ () {}
  void __forward__ (unsigned) {}
  void __prev__ () {}
  void __rewind__ (unsigned) {}
  hb_repeat_iter_t __end__ () const { return *this; }
  bool operator != (const hb_repeat_iter_t& o) const { return true; }

  private:
  T v;
};
struct
{
  template <typename T> hb_repeat_iter_t<T>
  operator () (T value) const
  { return hb_repeat_iter_t<T> (value); }
}
static const hb_repeat __attribute__((unused));



struct
{
  template <typename Iterable,
     typename Index = unsigned,
     typename hb_enable_if<((hb_is_iterable<Iterable>::value))>::type* = nullptr>
  auto operator () (Iterable&& it, Index start = 0u) const -> decltype ((hb_zip (hb_iota (start), it))) { return (hb_zip (hb_iota (start), it)); }

}
static const hb_enumerate __attribute__((unused));

struct
{ template <typename _T> auto operator () (_T&& _v) const -> decltype ((hb_partial<2> (+this, std::forward<_T> (_v)))) { return (hb_partial<2> (+this, std::forward<_T> (_v))); } static_assert (true, "");
  template <typename Iterable,
     typename hb_enable_if<((hb_is_iterable<Iterable>::value))>::type* = nullptr>
  auto operator () (Iterable&& it, unsigned count) const -> decltype ((hb_zip (hb_range (count), it) | hb_map (hb_second))) { return (hb_zip (hb_range (count), it) | hb_map (hb_second)); }




  template <typename Type> inline hb_array_t<Type>
  operator () (hb_array_t<Type> array, unsigned count) const
  { return array.sub_array (0, count); }

  template <typename Type> inline hb_sorted_array_t<Type>
  operator () (hb_sorted_array_t<Type> array, unsigned count) const
  { return array.sub_array (0, count); }
}
static const hb_take __attribute__((unused));

struct
{ template <typename _T> auto operator () (_T&& _v) const -> decltype ((hb_partial<2> (+this, std::forward<_T> (_v)))) { return (hb_partial<2> (+this, std::forward<_T> (_v))); } static_assert (true, "");
  template <typename Iter,
     typename hb_enable_if<((hb_is_iterator_of<Iter, typename Iter::item_t>::value))>::type* = nullptr>
  auto operator () (Iter it, unsigned count) const -> decltype ((+ hb_iota (it, hb_add (count)) | hb_map (hb_take (count)) | hb_take ((hb_len (it) + count - 1) / count))) { return (+ hb_iota (it, hb_add (count)) | hb_map (hb_take (count)) | hb_take ((hb_len (it) + count - 1) / count)); }





}
static const hb_chop __attribute__((unused));



template <typename Sink>
struct hb_sink_t
{
  hb_sink_t (Sink s) : s (s) {}

  template <typename Iter,
     typename hb_enable_if<((hb_is_iterator_of<Iter, typename Iter::item_t>::value))>::type* = nullptr>
  void operator () (Iter it)
  {
    for (; it; ++it)
      s << *it;
  }

  private:
  Sink s;
};
struct
{
  template <typename Sink> hb_sink_t<Sink>
  operator () (Sink&& s) const
  { return hb_sink_t<Sink> (s); }

  template <typename Sink> hb_sink_t<Sink&>
  operator () (Sink *s) const
  { return hb_sink_t<Sink&> (*s); }
}
static const hb_sink __attribute__((unused));



struct
{
  template <typename Iter,
     typename hb_enable_if<((hb_is_iterator_of<Iter, typename Iter::item_t>::value))>::type* = nullptr>
  void operator () (Iter it) const
  {
    for (; it; ++it)
      (void) *it;
  }
}
static const hb_drain __attribute__((unused));



template <typename Sink1, typename Sink2>
struct hb_unzip_t
{
  hb_unzip_t (Sink1 s1, Sink2 s2) : s1 (s1), s2 (s2) {}

  template <typename Iter,
     typename hb_enable_if<((hb_is_iterator_of<Iter, typename Iter::item_t>::value))>::type* = nullptr>
  void operator () (Iter it)
  {
    for (; it; ++it)
    {
      const auto &v = *it;
      s1 << v.first;
      s2 << v.second;
    }
  }

  private:
  Sink1 s1;
  Sink2 s2;
};
struct
{
  template <typename Sink1, typename Sink2> hb_unzip_t<Sink1, Sink2>
  operator () (Sink1&& s1, Sink2&& s2) const
  { return hb_unzip_t<Sink1, Sink2> (s1, s2); }

  template <typename Sink1, typename Sink2> hb_unzip_t<Sink1&, Sink2&>
  operator () (Sink1 *s1, Sink2 *s2) const
  { return hb_unzip_t<Sink1&, Sink2&> (*s1, *s2); }
}
static const hb_unzip __attribute__((unused));




struct
{
  template <typename Iterable,
     typename Pred = decltype ((hb_identity)),
     typename Proj = decltype ((hb_identity)),
     typename hb_enable_if<((hb_is_iterable<Iterable>::value))>::type* = nullptr>
  bool operator () (Iterable&& c,
      Pred&& p = hb_identity,
      Proj&& f = hb_identity) const
  {
    for (auto it = hb_iter (c); it; ++it)
      if (!hb_match (std::forward<Pred> (p), hb_get (std::forward<Proj> (f), *it)))
 return false;
    return true;
  }
}
static const hb_all __attribute__((unused));
struct
{
  template <typename Iterable,
     typename Pred = decltype ((hb_identity)),
     typename Proj = decltype ((hb_identity)),
     typename hb_enable_if<((hb_is_iterable<Iterable>::value))>::type* = nullptr>
  bool operator () (Iterable&& c,
      Pred&& p = hb_identity,
      Proj&& f = hb_identity) const
  {
    for (auto it = hb_iter (c); it; ++it)
      if (hb_match (std::forward<Pred> (p), hb_get (std::forward<Proj> (f), *it)))
 return true;
    return false;
  }
}
static const hb_any __attribute__((unused));
struct
{
  template <typename Iterable,
     typename Pred = decltype ((hb_identity)),
     typename Proj = decltype ((hb_identity)),
     typename hb_enable_if<((hb_is_iterable<Iterable>::value))>::type* = nullptr>
  bool operator () (Iterable&& c,
      Pred&& p = hb_identity,
      Proj&& f = hb_identity) const
  {
    for (auto it = hb_iter (c); it; ++it)
      if (hb_match (std::forward<Pred> (p), hb_get (std::forward<Proj> (f), *it)))
 return false;
    return true;
  }
}
static const hb_none __attribute__((unused));





template <typename C, typename V,
   typename hb_enable_if<((hb_is_iterable<C>::value))>::type* = nullptr>
inline void
hb_fill (C&& c, const V &v)
{
  for (auto i = hb_iter (c); i; i++)
    *i = v;
}

template <typename S, typename D>
inline void
hb_copy (S&& is, D&& id)
{
  hb_iter (is) | hb_sink (id);
}
# 484 "../harfbuzz-6.0.0/src/hb.hh" 2
# 1 "../harfbuzz-6.0.0/src/hb-debug.hh" 1
# 28 "../harfbuzz-6.0.0/src/hb-debug.hh"
#define HB_DEBUG_HH 







#define HB_DEBUG 0







struct hb_options_t
{
  bool unused : 1;
  bool initialized : 1;
  bool uniscribe_bug_compatible : 1;
};

union hb_options_union_t {
  int i;
  hb_options_t opts;
};
static_assert ((sizeof (hb_atomic_int_t) >= sizeof (hb_options_union_t)), "");

__attribute__((__visibility__("hidden"))) void
_hb_options_init ();

extern __attribute__((__visibility__("hidden"))) hb_atomic_int_t _hb_options;

static inline hb_options_t
hb_options ()
{




  hb_options_union_t u;
  u.i = _hb_options;

  if ((__builtin_expect (!!(!u.i), 0)))
  {
    _hb_options_init ();
    u.i = _hb_options;
  }

  return u.opts;
}






static inline bool
_hb_debug (unsigned int level,
    unsigned int max_level)
{
  return level < max_level;
}

#define DEBUG_LEVEL_ENABLED(WHAT,LEVEL) (_hb_debug ((LEVEL), HB_DEBUG_ ##WHAT))
#define DEBUG_ENABLED(WHAT) (DEBUG_LEVEL_ENABLED (WHAT, 0))

static inline void
_hb_print_func (const char *func)
{
  if (func)
  {
    unsigned int func_len = strlen (func);

    if (0 == strncmp (func, "static ", 7))
      func += 7;

    if (0 == strncmp (func, "typename ", 9))
      func += 9;

    const char *space = strchr (func, ' ');
    if (space)
      func = space + 1;

    const char *paren = strchr (func, '(');
    if (paren)
      func_len = paren - func;
    fprintf (
# 116 "../harfbuzz-6.0.0/src/hb-debug.hh" 3 4
            stderr
# 116 "../harfbuzz-6.0.0/src/hb-debug.hh"
                  , "%.*s", (int) func_len, func);
  }
}

template <int max_level> static inline void
_hb_debug_msg_va (const char *what,
    const void *obj,
    const char *func,
    bool indented,
    unsigned int level,
    int level_dir,
    const char *message,
    va_list ap) __attribute__((__format__ (__printf__, 7, 0)));
template <int max_level> static inline void
_hb_debug_msg_va (const char *what,
    const void *obj,
    const char *func,
    bool indented,
    unsigned int level,
    int level_dir,
    const char *message,
    va_list ap)
{
  if (!_hb_debug (level, max_level))
    return;

  fprintf (
# 142 "../harfbuzz-6.0.0/src/hb-debug.hh" 3 4
          stderr
# 142 "../harfbuzz-6.0.0/src/hb-debug.hh"
                , "%-10s", what ? what : "");

  if (obj)
    fprintf (
# 145 "../harfbuzz-6.0.0/src/hb-debug.hh" 3 4
            stderr
# 145 "../harfbuzz-6.0.0/src/hb-debug.hh"
                  , "(%*p) ", (int) (2 * sizeof (void *)), obj);
  else
    fprintf (
# 147 "../harfbuzz-6.0.0/src/hb-debug.hh" 3 4
            stderr
# 147 "../harfbuzz-6.0.0/src/hb-debug.hh"
                  , " %*s  ", (int) (2 * sizeof (void *)), "");

  if (indented) {
#define VBAR "\342\224\202"
#define VRBAR "\342\224\234"
#define DLBAR "\342\225\256"
#define ULBAR "\342\225\257"
#define LBAR "\342\225\264"
    static const char bars[] =
      "\342\224\202" "\342\224\202" "\342\224\202" "\342\224\202" "\342\224\202" "\342\224\202" "\342\224\202" "\342\224\202" "\342\224\202" "\342\224\202"
      "\342\224\202" "\342\224\202" "\342\224\202" "\342\224\202" "\342\224\202" "\342\224\202" "\342\224\202" "\342\224\202" "\342\224\202" "\342\224\202"
      "\342\224\202" "\342\224\202" "\342\224\202" "\342\224\202" "\342\224\202" "\342\224\202" "\342\224\202" "\342\224\202" "\342\224\202" "\342\224\202"
      "\342\224\202" "\342\224\202" "\342\224\202" "\342\224\202" "\342\224\202" "\342\224\202" "\342\224\202" "\342\224\202" "\342\224\202" "\342\224\202"
      "\342\224\202" "\342\224\202" "\342\224\202" "\342\224\202" "\342\224\202" "\342\224\202" "\342\224\202" "\342\224\202" "\342\224\202" "\342\224\202";
    fprintf (
# 161 "../harfbuzz-6.0.0/src/hb-debug.hh" 3 4
            stderr
# 161 "../harfbuzz-6.0.0/src/hb-debug.hh"
                  , "%2u %s" "\342\224\234" "%s",
      level,
      bars + sizeof (bars) - 1 - hb_min ((unsigned int) sizeof (bars) - 1, (unsigned int) (sizeof ("\342\224\202") - 1) * level),
      level_dir ? (level_dir > 0 ? "\342\225\256" : "\342\225\257") : "\342\225\264");
  } else
    fprintf (
# 166 "../harfbuzz-6.0.0/src/hb-debug.hh" 3 4
            stderr
# 166 "../harfbuzz-6.0.0/src/hb-debug.hh"
                  , "   " "\342\224\234" "\342\225\264");

  _hb_print_func (func);

  if (message)
  {
    fprintf (
# 172 "../harfbuzz-6.0.0/src/hb-debug.hh" 3 4
            stderr
# 172 "../harfbuzz-6.0.0/src/hb-debug.hh"
                  , ": ");
    vfprintf (
# 173 "../harfbuzz-6.0.0/src/hb-debug.hh" 3 4
             stderr
# 173 "../harfbuzz-6.0.0/src/hb-debug.hh"
                   , message, ap);
  }

  fprintf (
# 176 "../harfbuzz-6.0.0/src/hb-debug.hh" 3 4
          stderr
# 176 "../harfbuzz-6.0.0/src/hb-debug.hh"
                , "\n");
}
template <> inline void __attribute__((__format__ (__printf__, 7, 0)))
_hb_debug_msg_va<0> (const char *what __attribute__((unused)),
       const void *obj __attribute__((unused)),
       const char *func __attribute__((unused)),
       bool indented __attribute__((unused)),
       unsigned int level __attribute__((unused)),
       int level_dir __attribute__((unused)),
       const char *message __attribute__((unused)),
       va_list ap __attribute__((unused))) {}

template <int max_level> static inline void
_hb_debug_msg (const char *what,
        const void *obj,
        const char *func,
        bool indented,
        unsigned int level,
        int level_dir,
        const char *message,
        ...) __attribute__((__format__ (__printf__, 7, 8)));
template <int max_level> static inline void __attribute__((__format__ (__printf__, 7, 8)))
_hb_debug_msg (const char *what,
        const void *obj,
        const char *func,
        bool indented,
        unsigned int level,
        int level_dir,
        const char *message,
        ...)
{
  va_list ap;
  
# 208 "../harfbuzz-6.0.0/src/hb-debug.hh" 3
 __builtin_va_start(
# 208 "../harfbuzz-6.0.0/src/hb-debug.hh"
 ap
# 208 "../harfbuzz-6.0.0/src/hb-debug.hh" 3
 ,
# 208 "../harfbuzz-6.0.0/src/hb-debug.hh"
 message
# 208 "../harfbuzz-6.0.0/src/hb-debug.hh" 3
 )
# 208 "../harfbuzz-6.0.0/src/hb-debug.hh"
                       ;
  _hb_debug_msg_va<max_level> (what, obj, func, indented, level, level_dir, message, ap);
  
# 210 "../harfbuzz-6.0.0/src/hb-debug.hh" 3
 __builtin_va_end(
# 210 "../harfbuzz-6.0.0/src/hb-debug.hh"
 ap
# 210 "../harfbuzz-6.0.0/src/hb-debug.hh" 3
 )
# 210 "../harfbuzz-6.0.0/src/hb-debug.hh"
            ;
}
template <> inline void
_hb_debug_msg<0> (const char *what __attribute__((unused)),
    const void *obj __attribute__((unused)),
    const char *func __attribute__((unused)),
    bool indented __attribute__((unused)),
    unsigned int level __attribute__((unused)),
    int level_dir __attribute__((unused)),
    const char *message __attribute__((unused)),
    ...) __attribute__((__format__ (__printf__, 7, 8)));
template <> inline void __attribute__((__format__ (__printf__, 7, 8)))
_hb_debug_msg<0> (const char *what __attribute__((unused)),
    const void *obj __attribute__((unused)),
    const char *func __attribute__((unused)),
    bool indented __attribute__((unused)),
    unsigned int level __attribute__((unused)),
    int level_dir __attribute__((unused)),
    const char *message __attribute__((unused)),
    ...) {}

#define DEBUG_MSG_LEVEL(WHAT,OBJ,LEVEL,LEVEL_DIR,...) _hb_debug_msg<HB_DEBUG_ ##WHAT> (#WHAT, (OBJ), nullptr, true, (LEVEL), (LEVEL_DIR), __VA_ARGS__)
#define DEBUG_MSG(WHAT,OBJ,...) _hb_debug_msg<HB_DEBUG_ ##WHAT> (#WHAT, (OBJ), nullptr, false, 0, 0, __VA_ARGS__)
#define DEBUG_MSG_FUNC(WHAT,OBJ,...) _hb_debug_msg<HB_DEBUG_ ##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)






template <typename T>
struct hb_printer_t {
  const char *print (const T&) { return "something"; }
};

template <>
struct hb_printer_t<bool> {
  const char *print (bool v) { return v ? "true" : "false"; }
};

template <>
struct hb_printer_t<hb_empty_t> {
  const char *print (hb_empty_t) { return ""; }
};






template <typename T>
static inline void _hb_warn_no_return (bool returned)
{
  if ((__builtin_expect (!!(!returned), 0))) {
    fprintf (
# 264 "../harfbuzz-6.0.0/src/hb-debug.hh" 3 4
            stderr
# 264 "../harfbuzz-6.0.0/src/hb-debug.hh"
                  , "OUCH, returned with no call to return_trace().  This is a bug, please report.\n");
  }
}
template <>
           inline void _hb_warn_no_return<hb_empty_t> (bool returned __attribute__((unused)))
{}

template <int max_level, typename ret_t>
struct hb_auto_trace_t
{
  explicit inline hb_auto_trace_t (unsigned int *plevel_,
       const char *what_,
       const void *obj_,
       const char *func,
       const char *message,
       ...) __attribute__((__format__ (__printf__, 6, 7)))
       : plevel (plevel_), what (what_), obj (obj_), returned (false)
  {
    if (plevel) ++*plevel;

    va_list ap;
    
# 285 "../harfbuzz-6.0.0/src/hb-debug.hh" 3
   __builtin_va_start(
# 285 "../harfbuzz-6.0.0/src/hb-debug.hh"
   ap
# 285 "../harfbuzz-6.0.0/src/hb-debug.hh" 3
   ,
# 285 "../harfbuzz-6.0.0/src/hb-debug.hh"
   message
# 285 "../harfbuzz-6.0.0/src/hb-debug.hh" 3
   )
# 285 "../harfbuzz-6.0.0/src/hb-debug.hh"
                         ;
    _hb_debug_msg_va<max_level> (what, obj, func, true, plevel ? *plevel : 0, +1, message, ap);
    
# 287 "../harfbuzz-6.0.0/src/hb-debug.hh" 3
   __builtin_va_end(
# 287 "../harfbuzz-6.0.0/src/hb-debug.hh"
   ap
# 287 "../harfbuzz-6.0.0/src/hb-debug.hh" 3
   )
# 287 "../harfbuzz-6.0.0/src/hb-debug.hh"
              ;
  }
  ~hb_auto_trace_t ()
  {
    _hb_warn_no_return<ret_t> (returned);
    if (!returned) {
      _hb_debug_msg<max_level> (what, obj, nullptr, true, plevel ? *plevel : 1, -1, " ");
    }
    if (plevel) --*plevel;
  }

  template <typename T>
  T ret (T&& v,
  const char *func = "",
  unsigned int line = 0)
  {
    if ((__builtin_expect (!!(returned), 0))) {
      fprintf (
# 304 "../harfbuzz-6.0.0/src/hb-debug.hh" 3 4
              stderr
# 304 "../harfbuzz-6.0.0/src/hb-debug.hh"
                    , "OUCH, double calls to return_trace().  This is a bug, please report.\n");
      return std::forward<T> (v);
    }

    _hb_debug_msg<max_level> (what, obj, func, true, plevel ? *plevel : 1, -1,
         "return %s (line %u)",
         hb_printer_t<hb_decay<decltype (v)>>().print (v), line);
    if (plevel) --*plevel;
    plevel = nullptr;
    returned = true;
    return std::forward<T> (v);
  }

  private:
  unsigned int *plevel;
  const char *what;
  const void *obj;
  bool returned;
};
template <typename ret_t>
struct hb_auto_trace_t<0, ret_t>
{
  explicit inline hb_auto_trace_t (unsigned int *plevel_,
       const char *what_,
       const void *obj_,
       const char *func,
       const char *message,
       ...) __attribute__((__format__ (__printf__, 6, 7))) {}

  template <typename T>
  T ret (T&& v,
  const char *func __attribute__((unused)) = nullptr,
  unsigned int line __attribute__((unused)) = 0) { return std::forward<T> (v); }
};



template <typename ret_t>
struct hb_no_trace_t {
  template <typename T>
  T ret (T&& v,
  const char *func __attribute__((unused)) = nullptr,
  unsigned int line __attribute__((unused)) = 0) { return std::forward<T> (v); }
};

#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)







#define HB_DEBUG_ARABIC (HB_DEBUG+0)



#define HB_DEBUG_BLOB (HB_DEBUG+0)



#define HB_DEBUG_CORETEXT (HB_DEBUG+0)



#define HB_DEBUG_DIRECTWRITE (HB_DEBUG+0)



#define HB_DEBUG_FT (HB_DEBUG+0)



#define HB_DEBUG_OBJECT (HB_DEBUG+0)



#define HB_DEBUG_SHAPE_PLAN (HB_DEBUG+0)



#define HB_DEBUG_UNISCRIBE (HB_DEBUG+0)







#define HB_DEBUG_APPLY (HB_DEBUG+0)
# 402 "../harfbuzz-6.0.0/src/hb-debug.hh"
#define TRACE_APPLY(this) hb_no_trace_t<bool> trace



#define HB_DEBUG_SANITIZE (HB_DEBUG+0)







#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace



#define HB_DEBUG_SERIALIZE (HB_DEBUG+0)







#define TRACE_SERIALIZE(this) hb_no_trace_t<bool> trace



#define HB_DEBUG_SUBSET (HB_DEBUG+0)







#define TRACE_SUBSET(this) hb_no_trace_t<bool> trace



#define HB_DEBUG_SUBSET_REPACK (HB_DEBUG+0)



#define HB_DEBUG_DISPATCH ( HB_DEBUG_APPLY + HB_DEBUG_SANITIZE + HB_DEBUG_SERIALIZE + HB_DEBUG_SUBSET + 0)
# 459 "../harfbuzz-6.0.0/src/hb-debug.hh"
#define TRACE_DISPATCH(this,format) hb_no_trace_t<typename context_t::return_t> trace




#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
# 485 "../harfbuzz-6.0.0/src/hb.hh" 2
# 1 "../harfbuzz-6.0.0/src/hb-array.hh" 1
# 28 "../harfbuzz-6.0.0/src/hb-array.hh"
#define HB_ARRAY_HH 







template <typename Type>
struct hb_sorted_array_t;

enum hb_not_found_t
{
  HB_NOT_FOUND_DONT_STORE,
  HB_NOT_FOUND_STORE,
  HB_NOT_FOUND_STORE_CLOSEST,
};


template <typename Type>
struct hb_array_t : hb_iter_with_fallback_t<hb_array_t<Type>, Type&>
{



  hb_array_t () = default;
  hb_array_t (const hb_array_t&) = default;
  ~hb_array_t () = default;
  hb_array_t& operator= (const hb_array_t&) = default;
  hb_array_t& operator= (hb_array_t&&) = default;

  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
  template <unsigned int length_>
  constexpr hb_array_t (Type (&array_)[length_]) : hb_array_t (array_, length_) {}

  template <typename U,
     typename hb_enable_if<(hb_is_cr_convertible<U, Type>::value)>::type* = nullptr>
  constexpr hb_array_t (const hb_array_t<U> &o) :
    hb_iter_with_fallback_t<hb_array_t, Type&> (),
    arrayZ (o.arrayZ), length (o.length), backwards_length (o.backwards_length) {}
  template <typename U,
     typename hb_enable_if<(hb_is_cr_convertible<U, Type>::value)>::type* = nullptr>
  hb_array_t& operator = (const hb_array_t<U> &o)
  { arrayZ = o.arrayZ; length = o.length; backwards_length = o.backwards_length; return *this; }




  typedef Type& __item_t__;
  static constexpr bool is_random_access_iterator = true;
  Type& __item_at__ (unsigned i) const
  {
    if ((__builtin_expect (!!(i >= length), 0))) return CrapOrNullHelper<Type>::get ();
    return arrayZ[i];
  }
  void __forward__ (unsigned n)
  {
    if ((__builtin_expect (!!(n > length), 0)))
      n = length;
    length -= n;
    backwards_length += n;
    arrayZ += n;
  }
  void __rewind__ (unsigned n)
  {
    if ((__builtin_expect (!!(n > backwards_length), 0)))
      n = backwards_length;
    length += n;
    backwards_length -= n;
    arrayZ -= n;
  }
  unsigned __len__ () const { return length; }







  bool operator != (const hb_array_t& o) const
  { return this->arrayZ != o.arrayZ || this->length != o.length; }


  Type *begin () const { return arrayZ; }
  Type *end () const { return arrayZ + length; }




  Type * operator & () const { return arrayZ; }
  operator hb_array_t<const Type> () { return hb_array_t<const Type> (arrayZ, length); }
  template <typename T> operator T * () const { return arrayZ; }

  __attribute__((__visibility__("hidden"))) bool operator == (const hb_array_t &o) const;

  uint32_t hash () const
  {
    uint32_t current = 0;
    for (auto &v : *this)
      current = current * 31 + hb_hash (v);
    return current;
  }






  int cmp (const hb_array_t &a) const
  {
    if (length != a.length)
      return (int) a.length - (int) length;
    return hb_memcmp (a.arrayZ, arrayZ, get_size ());
  }
  __attribute__((__visibility__("hidden"))) static int cmp (const void *pa, const void *pb)
  {
    hb_array_t *a = (hb_array_t *) pa;
    hb_array_t *b = (hb_array_t *) pb;
    return b->cmp (*a);
  }

  template <typename T>
  Type *lsearch (const T &x, Type *not_found = nullptr)
  {
    unsigned i;
    return lfind (x, &i) ? &this->arrayZ[i] : not_found;
  }
  template <typename T>
  const Type *lsearch (const T &x, const Type *not_found = nullptr) const
  {
    unsigned i;
    return lfind (x, &i) ? &this->arrayZ[i] : not_found;
  }
  template <typename T>
  bool lfind (const T &x, unsigned *pos = nullptr,
       hb_not_found_t not_found = HB_NOT_FOUND_DONT_STORE,
       unsigned int to_store = (unsigned int) -1) const
  {
    for (unsigned i = 0; i < length; ++i)
      if (hb_equal (x, this->arrayZ[i]))
      {
 if (pos)
   *pos = i;
 return true;
      }

    if (pos)
    {
      switch (not_found)
      {
 case HB_NOT_FOUND_DONT_STORE:
   break;

 case HB_NOT_FOUND_STORE:
   *pos = to_store;
   break;

 case HB_NOT_FOUND_STORE_CLOSEST:
   *pos = length;
   break;
      }
    }
    return false;
  }

  hb_sorted_array_t<Type> qsort (int (*cmp_)(const void*, const void*))
  {

    if ((__builtin_expect (!!(length), 1)))
      hb_qsort (arrayZ, length, this->get_item_size (), cmp_);
    return hb_sorted_array_t<Type> (*this);
  }
  hb_sorted_array_t<Type> qsort ()
  {

    if ((__builtin_expect (!!(length), 1)))
      hb_qsort (arrayZ, length, this->get_item_size (), Type::cmp);
    return hb_sorted_array_t<Type> (*this);
  }





  unsigned int get_size () const { return length * this->get_item_size (); }




  void reverse (unsigned start = 0, unsigned end = -1)
  {
    start = hb_min (start, length);
    end = hb_min (end, length);

    if (end < start + 2)
      return;

    for (unsigned lhs = start, rhs = end - 1; lhs < rhs; lhs++, rhs--)
      hb_swap (arrayZ[rhs], arrayZ[lhs]);
  }

  hb_array_t sub_array (unsigned int start_offset = 0, unsigned int *seg_count = nullptr ) const
  {
    if (!start_offset && !seg_count)
      return *this;

    unsigned int count = length;
    if ((__builtin_expect (!!(start_offset > count), 0)))
      count = 0;
    else
      count -= start_offset;
    if (seg_count)
      count = *seg_count = hb_min (count, *seg_count);
    return hb_array_t (arrayZ + start_offset, count);
  }
  hb_array_t sub_array (unsigned int start_offset, unsigned int seg_count) const
  { return sub_array (start_offset, &seg_count); }

  hb_array_t truncate (unsigned length) const { return sub_array (0, length); }

  template <typename T,
     unsigned P = sizeof (Type),
     typename hb_enable_if<(P == 1)>::type* = nullptr>
  const T *as () const
  { return length < hb_min_size<T>::value ? &NullHelper<T>::get_null () : reinterpret_cast<const T *> (arrayZ); }

  template <typename T,
     unsigned P = sizeof (Type),
     typename hb_enable_if<(P == 1)>::type* = nullptr>
  bool check_range (const T *p, unsigned int size = T::static_size) const
  {
    return arrayZ <= ((const char *) p)
 && ((const char *) p) <= arrayZ + length
 && (unsigned int) (arrayZ + length - (const char *) p) >= size;
  }


  void fini ()
  { free ((void *) arrayZ); arrayZ = nullptr; length = 0; }

  template <typename hb_serialize_context_t,
     typename U = Type,
     typename hb_enable_if<(!(sizeof (U) < sizeof (long long) && std::is_trivially_copy_assignable<hb_decay<Type> >::value))>::type* = nullptr>
  hb_array_t copy (hb_serialize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    auto* out = c->start_embed (arrayZ);
    if ((__builtin_expect (!!(!c->extend_size (out, get_size (), false)), 0))) return trace.ret (hb_array_t (), __PRETTY_FUNCTION__, 275);
    for (unsigned i = 0; i < length; i++)
      out[i] = arrayZ[i];
    return trace.ret (hb_array_t (out, length), __PRETTY_FUNCTION__, 278);
  }

  template <typename hb_serialize_context_t,
     typename U = Type,
     typename hb_enable_if<(sizeof (U) < sizeof (long long) && std::is_trivially_copy_assignable<hb_decay<Type> >::value)>::type* = nullptr>
  hb_array_t copy (hb_serialize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    auto* out = c->start_embed (arrayZ);
    if ((__builtin_expect (!!(!c->extend_size (out, get_size (), false)), 0))) return trace.ret (hb_array_t (), __PRETTY_FUNCTION__, 288);
    hb_memcpy (out, arrayZ, get_size ());
    return trace.ret (hb_array_t (out, length), __PRETTY_FUNCTION__, 290);
  }

  template <typename hb_sanitize_context_t>
  bool sanitize (hb_sanitize_context_t *c) const
  { return c->check_array (arrayZ, length); }





  public:
  Type *arrayZ = nullptr;
  unsigned int length = 0;
  unsigned int backwards_length = 0;
};
template <typename T> inline hb_array_t<T>
hb_array (T *array, unsigned int length)
{ return hb_array_t<T> (array, length); }
template <typename T, unsigned int length_> inline hb_array_t<T>
hb_array (T (&array_)[length_])
{ return hb_array_t<T> (array_); }

template <typename Type>
struct hb_sorted_array_t :
 hb_array_t<Type>,
 hb_iter_t<hb_sorted_array_t<Type>, Type&>
{
  typedef hb_iter_t<hb_sorted_array_t, Type&> iter_base_t;
  using item_t = typename iter_base_t::item_t; using iter_base_t::_begin; using iter_base_t::begin; using iter_base_t::_end; using iter_base_t::end; using iter_base_t::get_item_size; using iter_base_t::is_iterator; using iter_base_t::iter; using iter_base_t::operator bool; using iter_base_t::len; using iter_base_t::operator ->; using iter_base_t::operator *; using iter_base_t::operator []; using iter_base_t::operator +=; using iter_base_t::operator ++; using iter_base_t::operator -=; using iter_base_t::operator --; using iter_base_t::operator +; using iter_base_t::operator -; using iter_base_t::operator >>; using iter_base_t::operator <<; static_assert (true, "");
  static constexpr bool is_random_access_iterator = true;
  static constexpr bool is_sorted_iterator = true;

  hb_sorted_array_t () = default;
  hb_sorted_array_t (const hb_sorted_array_t&) = default;
  ~hb_sorted_array_t () = default;
  hb_sorted_array_t& operator= (const hb_sorted_array_t&) = default;
  hb_sorted_array_t& operator= (hb_sorted_array_t&&) = default;

  constexpr hb_sorted_array_t (Type *array_, unsigned int length_) : hb_array_t<Type> (array_, length_) {}
  template <unsigned int length_>
  constexpr hb_sorted_array_t (Type (&array_)[length_]) : hb_array_t<Type> (array_) {}

  template <typename U,
     typename hb_enable_if<(hb_is_cr_convertible<U, Type>::value)>::type* = nullptr>
  constexpr hb_sorted_array_t (const hb_array_t<U> &o) :
    hb_array_t<Type> (o),
    hb_iter_t<hb_sorted_array_t, Type&> () {}
  template <typename U,
     typename hb_enable_if<(hb_is_cr_convertible<U, Type>::value)>::type* = nullptr>
  hb_sorted_array_t& operator = (const hb_array_t<U> &o)
  { hb_array_t<Type> (*this) = o; return *this; }




  bool operator != (const hb_sorted_array_t& o) const
  { return this->arrayZ != o.arrayZ || this->length != o.length; }


  Type *begin () const { return this->arrayZ; }
  Type *end () const { return this->arrayZ + this->length; }


  hb_sorted_array_t sub_array (unsigned int start_offset, unsigned int *seg_count ) const
  { return hb_sorted_array_t (((const hb_array_t<Type> *) (this))->sub_array (start_offset, seg_count)); }
  hb_sorted_array_t sub_array (unsigned int start_offset, unsigned int seg_count) const
  { return sub_array (start_offset, &seg_count); }

  hb_sorted_array_t truncate (unsigned length) const { return sub_array (0, length); }

  template <typename T>
  Type *bsearch (const T &x, Type *not_found = nullptr)
  {
    unsigned int i;
    return bfind (x, &i) ? &this->arrayZ[i] : not_found;
  }
  template <typename T>
  const Type *bsearch (const T &x, const Type *not_found = nullptr) const
  {
    unsigned int i;
    return bfind (x, &i) ? &this->arrayZ[i] : not_found;
  }
  template <typename T>
  bool bfind (const T &x, unsigned int *i = nullptr,
       hb_not_found_t not_found = HB_NOT_FOUND_DONT_STORE,
       unsigned int to_store = (unsigned int) -1) const
  {
    unsigned pos;

    if (bsearch_impl (x, &pos))
    {
      if (i)
 *i = pos;
      return true;
    }

    if (i)
    {
      switch (not_found)
      {
 case HB_NOT_FOUND_DONT_STORE:
   break;

 case HB_NOT_FOUND_STORE:
   *i = to_store;
   break;

 case HB_NOT_FOUND_STORE_CLOSEST:
   *i = pos;
   break;
      }
    }
    return false;
  }
  template <typename T, typename ...Ts>
  bool bsearch_impl (const T &x, unsigned *pos, Ts... ds) const
  {
    return hb_bsearch_impl (pos,
       x,
       this->arrayZ,
       this->length,
       sizeof (Type),
       _hb_cmp_method<T, Type, Ts...>,
       std::forward<Ts> (ds)...);
  }
};
template <typename T> inline hb_sorted_array_t<T>
hb_sorted_array (T *array, unsigned int length)
{ return hb_sorted_array_t<T> (array, length); }
template <typename T, unsigned int length_> inline hb_sorted_array_t<T>
hb_sorted_array (T (&array_)[length_])
{ return hb_sorted_array_t<T> (array_); }

template <typename T>
inline bool hb_array_t<T>::operator == (const hb_array_t<T> &o) const
{
  if (o.length != this->length) return false;
  for (unsigned int i = 0; i < this->length; i++) {
    if (this->arrayZ[i] != o.arrayZ[i]) return false;
  }
  return true;
}
template <>
inline bool hb_array_t<const char>::operator == (const hb_array_t<const char> &o) const
{
  if (o.length != this->length) return false;
  return 0 == hb_memcmp (arrayZ, o.arrayZ, length);
}
template <>
inline bool hb_array_t<const unsigned char>::operator == (const hb_array_t<const unsigned char> &o) const
{
  if (o.length != this->length) return false;
  return 0 == hb_memcmp (arrayZ, o.arrayZ, length);
}




template <>
inline uint32_t hb_array_t<const char>::hash () const
{
  uint32_t current = 0;
  unsigned i = 0;



  struct __attribute__((packed)) packed_uint32_t { uint32_t v; };
  for (; i + 4 <= this->length; i += 4)
    current = current * 31 + hb_hash ((uint32_t) ((packed_uint32_t *) &this->arrayZ[i])->v);


  for (; i < this->length; i++)
    current = current * 31 + hb_hash (this->arrayZ[i]);
  return current;
}

template <>
inline uint32_t hb_array_t<const unsigned char>::hash () const
{
  uint32_t current = 0;
  unsigned i = 0;



  struct __attribute__((packed)) packed_uint32_t { uint32_t v; };
  for (; i + 4 <= this->length; i += 4)
    current = current * 31 + hb_hash ((uint32_t) ((packed_uint32_t *) &this->arrayZ[i])->v);


  for (; i < this->length; i++)
    current = current * 31 + hb_hash (this->arrayZ[i]);
  return current;
}


typedef hb_array_t<const char> hb_bytes_t;
typedef hb_array_t<const unsigned char> hb_ubytes_t;
# 486 "../harfbuzz-6.0.0/src/hb.hh" 2
# 1 "../harfbuzz-6.0.0/src/hb-vector.hh" 1
# 28 "../harfbuzz-6.0.0/src/hb-vector.hh"
#define HB_VECTOR_HH 







template <typename Type,
   bool sorted=false>
struct hb_vector_t
{
  typedef Type item_t;
  static constexpr unsigned item_size = hb_static_size<Type>::value;
  using array_t = typename std::conditional<sorted, hb_sorted_array_t<Type>, hb_array_t<Type>>::type;
  using c_array_t = typename std::conditional<sorted, hb_sorted_array_t<const Type>, hb_array_t<const Type>>::type;

  hb_vector_t () = default;
  hb_vector_t (std::initializer_list<Type> lst) : hb_vector_t ()
  {
    alloc (lst.size (), true);
    for (auto&& item : lst)
      push (item);
  }
  template <typename Iterable,
     typename hb_enable_if<((hb_is_iterable<Iterable>::value))>::type* = nullptr>
  hb_vector_t (const Iterable &o) : hb_vector_t ()
  {
    auto iter = hb_iter (o);
    if (iter.is_random_access_iterator)
      alloc (hb_len (iter), true);
    hb_copy (iter, *this);
  }
  hb_vector_t (const hb_vector_t &o) : hb_vector_t ()
  {
    alloc (o.length, true);
    if ((__builtin_expect (!!(in_error ()), 0))) return;
    copy_vector (o);
  }
  hb_vector_t (hb_vector_t &&o)
  {
    allocated = o.allocated;
    length = o.length;
    arrayZ = o.arrayZ;
    o.init ();
  }
  ~hb_vector_t () { fini (); }

  public:
  int allocated = 0;
  unsigned int length = 0;
  public:
  Type *arrayZ = nullptr;

  void init ()
  {
    allocated = length = 0;
    arrayZ = nullptr;
  }
  void init0 ()
  {
  }

  void fini ()
  {
    shrink_vector (0);
    free (arrayZ);
    init ();
  }

  void reset ()
  {
    if ((__builtin_expect (!!(in_error ()), 0)))




      allocated = length;
    resize (0);
  }

  friend void swap (hb_vector_t& a, hb_vector_t& b)
  {
    hb_swap (a.allocated, b.allocated);
    hb_swap (a.length, b.length);
    hb_swap (a.arrayZ, b.arrayZ);
  }

  hb_vector_t& operator = (const hb_vector_t &o)
  {
    reset ();
    alloc (o.length, true);
    if ((__builtin_expect (!!(in_error ()), 0))) return *this;

    copy_vector (o);

    return *this;
  }
  hb_vector_t& operator = (hb_vector_t &&o)
  {
    hb_swap (*this, o);
    return *this;
  }

  hb_bytes_t as_bytes () const
  { return hb_bytes_t ((const char *) arrayZ, get_size ()); }

  bool operator == (const hb_vector_t &o) const { return as_array () == o.as_array (); }
  bool operator != (const hb_vector_t &o) const { return !(*this == o); }
  uint32_t hash () const { return as_array ().hash (); }

  Type& operator [] (int i_)
  {
    unsigned int i = (unsigned int) i_;
    if ((__builtin_expect (!!(i >= length), 0)))
      return CrapHelper<Type>::get_crap ();
    return arrayZ[i];
  }
  const Type& operator [] (int i_) const
  {
    unsigned int i = (unsigned int) i_;
    if ((__builtin_expect (!!(i >= length), 0)))
      return NullHelper<Type>::get_null ();
    return arrayZ[i];
  }

  Type& tail () { return (*this)[length - 1]; }
  const Type& tail () const { return (*this)[length - 1]; }

  explicit operator bool () const { return length; }
  unsigned get_size () const { return length * item_size; }


  template <typename T>
  hb_vector_t& operator << (T&& v) { push (std::forward<T> (v)); return *this; }

  array_t as_array () { return hb_array (arrayZ, length); }
  c_array_t as_array () const { return hb_array (arrayZ, length); }


  typedef c_array_t iter_t;
  typedef array_t writer_t;
    iter_t iter () const { return as_array (); }
  writer_t writer () { return as_array (); }
  operator iter_t () const { return iter (); }
  operator writer_t () { return writer (); }


  Type *begin () const { return arrayZ; }
  Type *end () const { return arrayZ + length; }


  hb_sorted_array_t<Type> as_sorted_array ()
  { return hb_sorted_array (arrayZ, length); }
  hb_sorted_array_t<const Type> as_sorted_array () const
  { return hb_sorted_array (arrayZ, length); }

  template <typename T> explicit operator T * () { return arrayZ; }
  template <typename T> explicit operator const T * () const { return arrayZ; }

  Type * operator + (unsigned int i) { return arrayZ + i; }
  const Type * operator + (unsigned int i) const { return arrayZ + i; }

  Type *push ()
  {
    if ((__builtin_expect (!!(!resize (length + 1)), 0)))
      return &CrapHelper<Type>::get_crap ();
    return std::addressof (arrayZ[length - 1]);
  }
  template <typename T,
     typename T2 = Type,
     typename hb_enable_if<(!std::is_copy_constructible<T2>::value && std::is_copy_assignable<T>::value)>::type* = nullptr
                                       >
  Type *push (T&& v)
  {
    Type *p = push ();
    if (p == &CrapHelper<Type>::get_crap ())



      return p;
    *p = std::forward<T> (v);
    return p;
  }
  template <typename T,
     typename T2 = Type,
     typename hb_enable_if<(std::is_copy_constructible<T2>::value)>::type* = nullptr>
  Type *push (T&& v)
  {
    if ((__builtin_expect (!!(!alloc (length + 1)), 0)))



      return &CrapHelper<Type>::get_crap ();


    length++;
    Type *p = std::addressof (arrayZ[length - 1]);
    return new (p) Type (std::forward<T> (v));
  }

  bool in_error () const { return allocated < 0; }

  template <typename T = Type,
     typename hb_enable_if<(std::is_trivially_copy_assignable<T>::value)>::type* = nullptr>
  Type *
  realloc_vector (unsigned new_allocated)
  {
    if (!new_allocated)
    {
      free (arrayZ);
      return nullptr;
    }
    return (Type *) realloc (arrayZ, new_allocated * sizeof (Type));
  }
  template <typename T = Type,
     typename hb_enable_if<(!std::is_trivially_copy_assignable<T>::value)>::type* = nullptr>
  Type *
  realloc_vector (unsigned new_allocated)
  {
    if (!new_allocated)
    {
      free (arrayZ);
      return nullptr;
    }
    Type *new_array = (Type *) malloc (new_allocated * sizeof (Type));
    if ((__builtin_expect (!!(new_array), 1)))
    {
      for (unsigned i = 0; i < length; i++)
      {
 new (std::addressof (new_array[i])) Type ();
 new_array[i] = std::move (arrayZ[i]);
 arrayZ[i].~Type ();
      }
      free (arrayZ);
    }
    return new_array;
  }

  template <typename T = Type,
     typename hb_enable_if<(std::is_trivially_constructible<T>::value)>::type* = nullptr>
  void
  grow_vector (unsigned size)
  {
    memset (arrayZ + length, 0, (size - length) * sizeof (*arrayZ));
    length = size;
  }
  template <typename T = Type,
     typename hb_enable_if<(!std::is_trivially_constructible<T>::value)>::type* = nullptr>
  void
  grow_vector (unsigned size)
  {
    while (length < size)
    {
      length++;
      new (std::addressof (arrayZ[length - 1])) Type ();
    }
  }

  template <typename T = Type,
     typename hb_enable_if<(std::is_trivially_copyable<T>::value)>::type* = nullptr>
  void
  copy_vector (const hb_vector_t &other)
  {
    length = other.length;

    if (sizeof (T) >= sizeof (long long))

      for (unsigned i = 0; i < length; i++)
 arrayZ[i] = other.arrayZ[i];
    else

       hb_memcpy ((void *) arrayZ, (const void *) other.arrayZ, length * item_size);
  }
  template <typename T = Type,
     typename hb_enable_if<(!std::is_trivially_copyable<T>::value && std::is_copy_constructible<T>::value)>::type* = nullptr
                                           >
  void
  copy_vector (const hb_vector_t &other)
  {
    length = 0;
    while (length < other.length)
    {
      length++;
      new (std::addressof (arrayZ[length - 1])) Type (other.arrayZ[length - 1]);
    }
  }
  template <typename T = Type,
     typename hb_enable_if<(!std::is_trivially_copyable<T>::value && !std::is_copy_constructible<T>::value && std::is_default_constructible<T>::value && std::is_copy_assignable<T>::value)>::type* = nullptr


                                       >
  void
  copy_vector (const hb_vector_t &other)
  {
    length = 0;
    while (length < other.length)
    {
      length++;
      new (std::addressof (arrayZ[length - 1])) Type ();
      arrayZ[length - 1] = other.arrayZ[length - 1];
    }
  }

  void
  shrink_vector (unsigned size)
  {
    while ((unsigned) length > size)
    {
      arrayZ[(unsigned) length - 1].~Type ();
      length--;
    }
  }

  void
  shift_down_vector (unsigned i)
  {
    for (; i < length; i++)
      arrayZ[i - 1] = std::move (arrayZ[i]);
  }


  bool alloc (unsigned int size, bool exact=false)
  {
    if ((__builtin_expect (!!(in_error ()), 0)))
      return false;

    unsigned int new_allocated;
    if (exact)
    {

      size = hb_max (size, length);
      if (size <= (unsigned) allocated &&
   size >= (unsigned) allocated >> 2)
 return true;

      new_allocated = size;
    }
    else
    {
      if ((__builtin_expect (!!(size <= (unsigned) allocated), 1)))
 return true;

      new_allocated = allocated;
      while (size > new_allocated)
 new_allocated += (new_allocated >> 1) + 8;
    }




    bool overflows =
      (int) in_error () ||
      (new_allocated < size) ||
      hb_unsigned_mul_overflows (new_allocated, sizeof (Type));

    if ((__builtin_expect (!!(overflows), 0)))
    {
      allocated = -1;
      return false;
    }

    Type *new_array = realloc_vector (new_allocated);

    if ((__builtin_expect (!!(new_allocated && !new_array), 0)))
    {
      if (new_allocated <= (unsigned) allocated)
        return true;

      allocated = -1;
      return false;
    }

    arrayZ = new_array;
    allocated = new_allocated;

    return true;
  }

  bool resize (int size_, bool initialize = true, bool exact = false)
  {
    unsigned int size = size_ < 0 ? 0u : (unsigned int) size_;
    if (!alloc (size, exact))
      return false;

    if (size > length)
    {
      if (initialize)
 grow_vector (size);
    }
    else if (size < length)
    {
      if (initialize)
 shrink_vector (size);
    }

    length = size;
    return true;
  }
  bool resize_exact (int size_, bool initialize = true)
  {
    return resize (size_, initialize, true);
  }

  Type pop ()
  {
    if (!length) return NullHelper<Type>::get_null ();
    Type v {std::move (arrayZ[length - 1])};
    arrayZ[length - 1].~Type ();
    length--;
    return v;
  }

  void remove_ordered (unsigned int i)
  {
    if ((__builtin_expect (!!(i >= length), 0)))
      return;
    shift_down_vector (i + 1);
    arrayZ[length - 1].~Type ();
    length--;
  }

  template <bool Sorted = sorted,
     typename hb_enable_if<(!Sorted)>::type* = nullptr>
  void remove_unordered (unsigned int i)
  {
    if ((__builtin_expect (!!(i >= length), 0)))
      return;
    if (i != length - 1)
      arrayZ[i] = std::move (arrayZ[length - 1]);
    arrayZ[length - 1].~Type ();
    length--;
  }

  void shrink (int size_)
  {
    unsigned int size = size_ < 0 ? 0u : (unsigned int) size_;
    if (size >= length)
      return;

    shrink_vector (size);

    alloc (size, true);
  }



  void qsort (int (*cmp)(const void*, const void*) = Type::cmp)
  { as_array ().qsort (cmp); }


  template <typename T>
  Type *lsearch (const T &x, Type *not_found = nullptr)
  { return as_array ().lsearch (x, not_found); }
  template <typename T>
  const Type *lsearch (const T &x, const Type *not_found = nullptr) const
  { return as_array ().lsearch (x, not_found); }
  template <typename T>
  bool lfind (const T &x, unsigned *pos = nullptr) const
  { return as_array ().lfind (x, pos); }


  template <typename T,
     bool Sorted=sorted, typename hb_enable_if<(Sorted)>::type* = nullptr>
  Type *bsearch (const T &x, Type *not_found = nullptr)
  { return as_array ().bsearch (x, not_found); }
  template <typename T,
     bool Sorted=sorted, typename hb_enable_if<(Sorted)>::type* = nullptr>
  const Type *bsearch (const T &x, const Type *not_found = nullptr) const
  { return as_array ().bsearch (x, not_found); }
  template <typename T,
     bool Sorted=sorted, typename hb_enable_if<(Sorted)>::type* = nullptr>
  bool bfind (const T &x, unsigned int *i = nullptr,
       hb_not_found_t not_found = HB_NOT_FOUND_DONT_STORE,
       unsigned int to_store = (unsigned int) -1) const
  { return as_array ().bfind (x, i, not_found, to_store); }
};

template <typename Type>
using hb_sorted_vector_t = hb_vector_t<Type, true>;
# 487 "../harfbuzz-6.0.0/src/hb.hh" 2
# 1 "../harfbuzz-6.0.0/src/hb-object.hh" 1
# 33 "../harfbuzz-6.0.0/src/hb-object.hh"
#define HB_OBJECT_HH 
# 45 "../harfbuzz-6.0.0/src/hb-object.hh"
template <typename item_t, typename lock_t>
struct hb_lockable_set_t
{
  hb_vector_t<item_t> items;

  void init () { items.init (); }

  template <typename T>
  item_t *replace_or_insert (T v, lock_t &l, bool replace)
  {
    l.lock ();
    item_t *item = items.lsearch (v);
    if (item) {
      if (replace) {
 item_t old = *item;
 *item = v;
 l.unlock ();
 old.fini ();
      }
      else {
 item = nullptr;
 l.unlock ();
      }
    } else {
      item = items.push (v);
      l.unlock ();
    }
    return items.in_error () ? nullptr : item;
  }

  template <typename T>
  void remove (T v, lock_t &l)
  {
    l.lock ();
    item_t *item = items.lsearch (v);
    if (item)
    {
      item_t old = *item;
      *item = std::move (items.tail ());
      items.pop ();
      l.unlock ();
      old.fini ();
    } else {
      l.unlock ();
    }
  }

  template <typename T>
  bool find (T v, item_t *i, lock_t &l)
  {
    l.lock ();
    item_t *item = items.lsearch (v);
    if (item)
      *i = *item;
    l.unlock ();
    return !!item;
  }

  template <typename T>
  item_t *find_or_insert (T v, lock_t &l)
  {
    l.lock ();
    item_t *item = items.find (v);
    if (!item) {
      item = items.push (v);
    }
    l.unlock ();
    return item;
  }

  void fini (lock_t &l)
  {
    if (!items.length)
    {

      items.fini ();
      return;
    }
    l.lock ();
    while (items.length)
    {
      item_t old = items.tail ();
      items.pop ();
      l.unlock ();
      old.fini ();
      l.lock ();
    }
    items.fini ();
    l.unlock ();
  }

};






struct hb_reference_count_t
{
  mutable hb_atomic_int_t ref_count;

  void init (int v = 1) { ref_count = v; }
  int get_relaxed () const { return ref_count; }
  int inc () const { return ref_count.inc (); }
  int dec () const { return ref_count.dec (); }
  void fini () { ref_count = -0x0000DEAD; }

  bool is_inert () const { return !ref_count; }
  bool is_valid () const { return ref_count > 0; }
};




struct hb_user_data_array_t
{
  struct hb_user_data_item_t {
    hb_user_data_key_t *key;
    void *data;
    hb_destroy_func_t destroy;

    bool operator == (const hb_user_data_key_t *other_key) const { return key == other_key; }
    bool operator == (const hb_user_data_item_t &other) const { return key == other.key; }

    void fini () { if (destroy) destroy (data); }
  };

  hb_mutex_t lock;
  hb_lockable_set_t<hb_user_data_item_t, hb_mutex_t> items;

  void init () { lock.init (); items.init (); }

  void fini () { items.fini (lock); lock.fini (); }

  bool set (hb_user_data_key_t *key,
     void * data,
     hb_destroy_func_t destroy,
     hb_bool_t replace)
  {
    if (!key)
      return false;

    if (replace) {
      if (!data && !destroy) {
 items.remove (key, lock);
 return true;
      }
    }
    hb_user_data_item_t item = {key, data, destroy};
    bool ret = !!items.replace_or_insert (item, lock, (bool) replace);

    return ret;
  }

  void *get (hb_user_data_key_t *key)
  {
    hb_user_data_item_t item = {nullptr, nullptr, nullptr};

    return items.find (key, &item, lock) ? item.data : nullptr;
  }
};






struct hb_object_header_t
{
  hb_reference_count_t ref_count;
  mutable hb_atomic_int_t writable = 0;
  hb_atomic_ptr_t<hb_user_data_array_t> user_data;

  bool is_inert () const { return !ref_count.get_relaxed (); }
};
#define HB_OBJECT_HEADER_STATIC {}






template <typename Type>
static inline void hb_object_trace (const Type *obj, const char *function)
{
  _hb_debug_msg<(0 +0)> ("OBJECT", ((void *) obj), nullptr, false, 0, 0, "%s refcount=%d", function, obj ? obj->header.ref_count.get_relaxed () : 0)


                                                     ;
}

template <typename Type, typename ...Ts>
static inline Type *hb_object_create (Ts... ds)
{
  Type *obj = (Type *) calloc (1, sizeof (Type));

  if ((__builtin_expect (!!(!obj), 0)))
    return obj;

  new (obj) Type (std::forward<Ts> (ds)...);

  hb_object_init (obj);
  hb_object_trace (obj, __PRETTY_FUNCTION__);

  return obj;
}
template <typename Type>
static inline void hb_object_init (Type *obj)
{
  obj->header.ref_count.init ();
  obj->header.writable = true;
  obj->header.user_data.init ();
}
template <typename Type>
static inline bool hb_object_is_valid (const Type *obj)
{
  return (__builtin_expect (!!(obj->header.ref_count.is_valid ()), 1));
}
template <typename Type>
static inline bool hb_object_is_immutable (const Type *obj)
{
  return !obj->header.writable;
}
template <typename Type>
static inline void hb_object_make_immutable (const Type *obj)
{
  obj->header.writable = false;
}
template <typename Type>
static inline Type *hb_object_reference (Type *obj)
{
  hb_object_trace (obj, __PRETTY_FUNCTION__);
  if ((__builtin_expect (!!(!obj || obj->header.is_inert ()), 0)))
    return obj;
  
# 280 "../harfbuzz-6.0.0/src/hb-object.hh" 3 4
 (static_cast <bool> (
# 280 "../harfbuzz-6.0.0/src/hb-object.hh"
 hb_object_is_valid (obj)
# 280 "../harfbuzz-6.0.0/src/hb-object.hh" 3 4
 ) ? void (0) : __assert_fail (
# 280 "../harfbuzz-6.0.0/src/hb-object.hh"
 "hb_object_is_valid (obj)"
# 280 "../harfbuzz-6.0.0/src/hb-object.hh" 3 4
 , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-object.hh", 280, __extension__ __PRETTY_FUNCTION__))
# 280 "../harfbuzz-6.0.0/src/hb-object.hh"
                                  ;
  obj->header.ref_count.inc ();
  return obj;
}
template <typename Type>
static inline bool hb_object_destroy (Type *obj)
{
  hb_object_trace (obj, __PRETTY_FUNCTION__);
  if ((__builtin_expect (!!(!obj || obj->header.is_inert ()), 0)))
    return false;
  
# 290 "../harfbuzz-6.0.0/src/hb-object.hh" 3 4
 (static_cast <bool> (
# 290 "../harfbuzz-6.0.0/src/hb-object.hh"
 hb_object_is_valid (obj)
# 290 "../harfbuzz-6.0.0/src/hb-object.hh" 3 4
 ) ? void (0) : __assert_fail (
# 290 "../harfbuzz-6.0.0/src/hb-object.hh"
 "hb_object_is_valid (obj)"
# 290 "../harfbuzz-6.0.0/src/hb-object.hh" 3 4
 , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-object.hh", 290, __extension__ __PRETTY_FUNCTION__))
# 290 "../harfbuzz-6.0.0/src/hb-object.hh"
                                  ;
  if (obj->header.ref_count.dec () != 1)
    return false;

  hb_object_fini (obj);

  if (!std::is_trivially_destructible<Type>::value)
    obj->~Type ();

  return true;
}
template <typename Type>
static inline void hb_object_fini (Type *obj)
{
  obj->header.ref_count.fini ();
  hb_user_data_array_t *user_data = obj->header.user_data.get_acquire ();
  if (user_data)
  {
    user_data->fini ();
    free (user_data);
    obj->header.user_data.set_relaxed (nullptr);
  }
}
template <typename Type>
static inline bool hb_object_set_user_data (Type *obj,
         hb_user_data_key_t *key,
         void * data,
         hb_destroy_func_t destroy,
         hb_bool_t replace)
{
  if ((__builtin_expect (!!(!obj || obj->header.is_inert ()), 0)))
    return false;
  
# 322 "../harfbuzz-6.0.0/src/hb-object.hh" 3 4
 (static_cast <bool> (
# 322 "../harfbuzz-6.0.0/src/hb-object.hh"
 hb_object_is_valid (obj)
# 322 "../harfbuzz-6.0.0/src/hb-object.hh" 3 4
 ) ? void (0) : __assert_fail (
# 322 "../harfbuzz-6.0.0/src/hb-object.hh"
 "hb_object_is_valid (obj)"
# 322 "../harfbuzz-6.0.0/src/hb-object.hh" 3 4
 , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-object.hh", 322, __extension__ __PRETTY_FUNCTION__))
# 322 "../harfbuzz-6.0.0/src/hb-object.hh"
                                  ;

retry:
  hb_user_data_array_t *user_data = obj->header.user_data.get_acquire ();
  if ((__builtin_expect (!!(!user_data), 0)))
  {
    user_data = (hb_user_data_array_t *) calloc (sizeof (hb_user_data_array_t), 1);
    if ((__builtin_expect (!!(!user_data), 0)))
      return false;
    user_data->init ();
    if ((__builtin_expect (!!(!obj->header.user_data.cmpexch (nullptr, user_data)), 0)))
    {
      user_data->fini ();
      free (user_data);
      goto retry;
    }
  }

  return user_data->set (key, data, destroy, replace);
}

template <typename Type>
static inline void *hb_object_get_user_data (Type *obj,
          hb_user_data_key_t *key)
{
  if ((__builtin_expect (!!(!obj || obj->header.is_inert ()), 0)))
    return nullptr;
  
# 349 "../harfbuzz-6.0.0/src/hb-object.hh" 3 4
 (static_cast <bool> (
# 349 "../harfbuzz-6.0.0/src/hb-object.hh"
 hb_object_is_valid (obj)
# 349 "../harfbuzz-6.0.0/src/hb-object.hh" 3 4
 ) ? void (0) : __assert_fail (
# 349 "../harfbuzz-6.0.0/src/hb-object.hh"
 "hb_object_is_valid (obj)"
# 349 "../harfbuzz-6.0.0/src/hb-object.hh" 3 4
 , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-object.hh", 349, __extension__ __PRETTY_FUNCTION__))
# 349 "../harfbuzz-6.0.0/src/hb-object.hh"
                                  ;
  hb_user_data_array_t *user_data = obj->header.user_data.get_acquire ();
  if (!user_data)
    return nullptr;
  return user_data->get (key);
}
# 488 "../harfbuzz-6.0.0/src/hb.hh" 2
# 29 "../harfbuzz-6.0.0/src/hb-aat-layout.cc" 2

# 1 "../harfbuzz-6.0.0/src/hb-aat-layout.hh" 1
# 28 "../harfbuzz-6.0.0/src/hb-aat-layout.hh"
#define HB_AAT_LAYOUT_HH 



# 1 "../harfbuzz-6.0.0/src/hb-ot-shape.hh" 1
# 28 "../harfbuzz-6.0.0/src/hb-ot-shape.hh"
#define HB_OT_SHAPE_HH 



# 1 "../harfbuzz-6.0.0/src/hb-ot-map.hh" 1
# 30 "../harfbuzz-6.0.0/src/hb-ot-map.hh"
#define HB_OT_MAP_HH 

# 1 "../harfbuzz-6.0.0/src/hb-buffer.hh" 1
# 31 "../harfbuzz-6.0.0/src/hb-buffer.hh"
#define HB_BUFFER_HH 


# 1 "../harfbuzz-6.0.0/src/hb-unicode.hh" 1
# 32 "../harfbuzz-6.0.0/src/hb-unicode.hh"
#define HB_UNICODE_HH 




extern __attribute__((__visibility__("hidden"))) const uint8_t _hb_modified_combining_class[256];





#define HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS HB_UNICODE_FUNC_IMPLEMENT (combining_class) HB_IF_NOT_DEPRECATED (HB_UNICODE_FUNC_IMPLEMENT (eastasian_width)) HB_UNICODE_FUNC_IMPLEMENT (general_category) HB_UNICODE_FUNC_IMPLEMENT (mirroring) HB_UNICODE_FUNC_IMPLEMENT (script) HB_UNICODE_FUNC_IMPLEMENT (compose) HB_UNICODE_FUNC_IMPLEMENT (decompose) HB_IF_NOT_DEPRECATED (HB_UNICODE_FUNC_IMPLEMENT (decompose_compatibility))
# 55 "../harfbuzz-6.0.0/src/hb-unicode.hh"
#define HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS_SIMPLE HB_UNICODE_FUNC_IMPLEMENT (hb_unicode_combining_class_t, combining_class) HB_IF_NOT_DEPRECATED (HB_UNICODE_FUNC_IMPLEMENT (unsigned int, eastasian_width)) HB_UNICODE_FUNC_IMPLEMENT (hb_unicode_general_category_t, general_category) HB_UNICODE_FUNC_IMPLEMENT (hb_codepoint_t, mirroring) HB_UNICODE_FUNC_IMPLEMENT (hb_script_t, script)







struct hb_unicode_funcs_t
{
  hb_object_header_t header;

  hb_unicode_funcs_t *parent;

#define HB_UNICODE_FUNC_IMPLEMENT(return_type,name) return_type name (hb_codepoint_t unicode) { return func.name (this, unicode, user_data.name); }

hb_unicode_combining_class_t combining_class (hb_codepoint_t unicode) { return func.combining_class (this, unicode, user_data.combining_class); } unsigned int eastasian_width (hb_codepoint_t unicode) { return func.eastasian_width (this, unicode, user_data.eastasian_width); } hb_unicode_general_category_t general_category (hb_codepoint_t unicode) { return func.general_category (this, unicode, user_data.general_category); } hb_codepoint_t mirroring (hb_codepoint_t unicode) { return func.mirroring (this, unicode, user_data.mirroring); } hb_script_t script (hb_codepoint_t unicode) { return func.script (this, unicode, user_data.script); }
#undef HB_UNICODE_FUNC_IMPLEMENT

  hb_bool_t compose (hb_codepoint_t a, hb_codepoint_t b,
       hb_codepoint_t *ab)
  {
    *ab = 0;
    if ((__builtin_expect (!!(!a || !b), 0))) return false;
    return func.compose (this, a, b, ab, user_data.compose);
  }

  hb_bool_t decompose (hb_codepoint_t ab,
         hb_codepoint_t *a, hb_codepoint_t *b)
  {
    *a = ab; *b = 0;
    return func.decompose (this, ab, a, b, user_data.decompose);
  }

  unsigned int decompose_compatibility (hb_codepoint_t u,
     hb_codepoint_t *decomposed)
  {



    unsigned int ret = func.decompose_compatibility (this, u, decomposed, user_data.decompose_compatibility);

    if (ret == 1 && u == decomposed[0]) {
      decomposed[0] = 0;
      return 0;
    }
    decomposed[ret] = 0;
    return ret;
  }

  unsigned int
  modified_combining_class (hb_codepoint_t u)
  {

    if ((__builtin_expect (!!(u == 0x1A60u), 0))) return 254;

    if ((__builtin_expect (!!(u == 0x0FC6u), 0))) return 254;

    if ((__builtin_expect (!!(u == 0x0F39u), 0))) return 127;

    return _hb_modified_combining_class[combining_class (u)];
  }

  static hb_bool_t
  is_variation_selector (hb_codepoint_t unicode)
  {


    return (__builtin_expect (!!(hb_in_ranges<hb_codepoint_t> (unicode, 0xFE00u, 0xFE0Fu, 0xE0100u, 0xE01EFu)), 0))

                             ;
  }
# 166 "../harfbuzz-6.0.0/src/hb-unicode.hh"
  static hb_bool_t
  is_default_ignorable (hb_codepoint_t ch)
  {
    hb_codepoint_t plane = ch >> 16;
    if ((__builtin_expect (!!(plane == 0), 1)))
    {

      hb_codepoint_t page = ch >> 8;
      switch (page) {
 case 0x00: return (__builtin_expect (!!(ch == 0x00ADu), 0));
 case 0x03: return (__builtin_expect (!!(ch == 0x034Fu), 0));
 case 0x06: return (__builtin_expect (!!(ch == 0x061Cu), 0));
 case 0x17: return hb_in_range<hb_codepoint_t> (ch, 0x17B4u, 0x17B5u);
 case 0x18: return hb_in_range<hb_codepoint_t> (ch, 0x180Bu, 0x180Eu);
 case 0x20: return hb_in_ranges<hb_codepoint_t> (ch, 0x200Bu, 0x200Fu,
         0x202Au, 0x202Eu,
         0x2060u, 0x206Fu);
 case 0xFE: return hb_in_range<hb_codepoint_t> (ch, 0xFE00u, 0xFE0Fu) || ch == 0xFEFFu;
 case 0xFF: return hb_in_range<hb_codepoint_t> (ch, 0xFFF0u, 0xFFF8u);
 default: return false;
      }
    }
    else
    {

      switch (plane) {
 case 0x01: return hb_in_range<hb_codepoint_t> (ch, 0x1D173u, 0x1D17Au);
 case 0x0E: return hb_in_range<hb_codepoint_t> (ch, 0xE0000u, 0xE0FFFu);
 default: return false;
      }
    }
  }





  enum space_t {
    NOT_SPACE = 0,
    SPACE_EM = 1,
    SPACE_EM_2 = 2,
    SPACE_EM_3 = 3,
    SPACE_EM_4 = 4,
    SPACE_EM_5 = 5,
    SPACE_EM_6 = 6,
    SPACE_EM_16 = 16,
    SPACE_4_EM_18,
    SPACE,
    SPACE_FIGURE,
    SPACE_PUNCTUATION,
    SPACE_NARROW,
  };
  static space_t
  space_fallback_type (hb_codepoint_t u)
  {
    switch (u)
    {

      default: return NOT_SPACE;
      case 0x0020u: return SPACE;
      case 0x00A0u: return SPACE;
      case 0x2000u: return SPACE_EM_2;
      case 0x2001u: return SPACE_EM;
      case 0x2002u: return SPACE_EM_2;
      case 0x2003u: return SPACE_EM;
      case 0x2004u: return SPACE_EM_3;
      case 0x2005u: return SPACE_EM_4;
      case 0x2006u: return SPACE_EM_6;
      case 0x2007u: return SPACE_FIGURE;
      case 0x2008u: return SPACE_PUNCTUATION;
      case 0x2009u: return SPACE_EM_5;
      case 0x200Au: return SPACE_EM_16;
      case 0x202Fu: return SPACE_NARROW;
      case 0x205Fu: return SPACE_4_EM_18;
      case 0x3000u: return SPACE_EM;
    }
  }

  struct {
#define HB_UNICODE_FUNC_IMPLEMENT(name) hb_unicode_ ##name ##_func_t name;
    hb_unicode_combining_class_func_t combining_class; hb_unicode_eastasian_width_func_t eastasian_width; hb_unicode_general_category_func_t general_category; hb_unicode_mirroring_func_t mirroring; hb_unicode_script_func_t script; hb_unicode_compose_func_t compose; hb_unicode_decompose_func_t decompose; hb_unicode_decompose_compatibility_func_t decompose_compatibility;
#undef HB_UNICODE_FUNC_IMPLEMENT
  } func;

  struct {
#define HB_UNICODE_FUNC_IMPLEMENT(name) void *name;
    void *combining_class; void *eastasian_width; void *general_category; void *mirroring; void *script; void *compose; void *decompose; void *decompose_compatibility;
#undef HB_UNICODE_FUNC_IMPLEMENT
  } user_data;

  struct {
#define HB_UNICODE_FUNC_IMPLEMENT(name) hb_destroy_func_t name;
    hb_destroy_func_t combining_class; hb_destroy_func_t eastasian_width; hb_destroy_func_t general_category; hb_destroy_func_t mirroring; hb_destroy_func_t script; hb_destroy_func_t compose; hb_destroy_func_t decompose; hb_destroy_func_t decompose_compatibility;
#undef HB_UNICODE_FUNC_IMPLEMENT
  } destroy;
};
extern __attribute__((__visibility__("hidden"))) const hb_unicode_funcs_t _hb_Null_hb_unicode_funcs_t; template <> struct Null<hb_unicode_funcs_t> { static hb_unicode_funcs_t const & get_null () { return _hb_Null_hb_unicode_funcs_t; } }; static_assert (true, "");
# 282 "../harfbuzz-6.0.0/src/hb-unicode.hh"
#define HB_MODIFIED_COMBINING_CLASS_CCC10 22
#define HB_MODIFIED_COMBINING_CLASS_CCC11 15
#define HB_MODIFIED_COMBINING_CLASS_CCC12 16
#define HB_MODIFIED_COMBINING_CLASS_CCC13 17
#define HB_MODIFIED_COMBINING_CLASS_CCC14 23
#define HB_MODIFIED_COMBINING_CLASS_CCC15 18
#define HB_MODIFIED_COMBINING_CLASS_CCC16 19
#define HB_MODIFIED_COMBINING_CLASS_CCC17 20
#define HB_MODIFIED_COMBINING_CLASS_CCC18 21
#define HB_MODIFIED_COMBINING_CLASS_CCC19 14
#define HB_MODIFIED_COMBINING_CLASS_CCC20 24
#define HB_MODIFIED_COMBINING_CLASS_CCC21 12
#define HB_MODIFIED_COMBINING_CLASS_CCC22 25
#define HB_MODIFIED_COMBINING_CLASS_CCC23 13
#define HB_MODIFIED_COMBINING_CLASS_CCC24 10
#define HB_MODIFIED_COMBINING_CLASS_CCC25 11
#define HB_MODIFIED_COMBINING_CLASS_CCC26 26
# 307 "../harfbuzz-6.0.0/src/hb-unicode.hh"
#define HB_MODIFIED_COMBINING_CLASS_CCC27 28
#define HB_MODIFIED_COMBINING_CLASS_CCC28 29
#define HB_MODIFIED_COMBINING_CLASS_CCC29 30
#define HB_MODIFIED_COMBINING_CLASS_CCC30 31
#define HB_MODIFIED_COMBINING_CLASS_CCC31 32
#define HB_MODIFIED_COMBINING_CLASS_CCC32 33
#define HB_MODIFIED_COMBINING_CLASS_CCC33 27
#define HB_MODIFIED_COMBINING_CLASS_CCC34 34
#define HB_MODIFIED_COMBINING_CLASS_CCC35 35


#define HB_MODIFIED_COMBINING_CLASS_CCC36 36
# 327 "../harfbuzz-6.0.0/src/hb-unicode.hh"
#define HB_MODIFIED_COMBINING_CLASS_CCC84 4
#define HB_MODIFIED_COMBINING_CLASS_CCC91 5







#define HB_MODIFIED_COMBINING_CLASS_CCC103 3
#define HB_MODIFIED_COMBINING_CLASS_CCC107 107


#define HB_MODIFIED_COMBINING_CLASS_CCC118 118
#define HB_MODIFIED_COMBINING_CLASS_CCC122 122






#define HB_MODIFIED_COMBINING_CLASS_CCC129 129
#define HB_MODIFIED_COMBINING_CLASS_CCC130 132
#define HB_MODIFIED_COMBINING_CLASS_CCC132 131



#define HB_UNICODE_GENERAL_CATEGORY_IS_MARK(gen_cat) (FLAG_UNSAFE (gen_cat) & (FLAG (HB_UNICODE_GENERAL_CATEGORY_SPACING_MARK) | FLAG (HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK) | FLAG (HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK)))





#define HB_UNICODE_GENERAL_CATEGORY_IS_LETTER(gen_cat) (FLAG_UNSAFE (gen_cat) & (FLAG (HB_UNICODE_GENERAL_CATEGORY_LOWERCASE_LETTER) | FLAG (HB_UNICODE_GENERAL_CATEGORY_MODIFIER_LETTER) | FLAG (HB_UNICODE_GENERAL_CATEGORY_OTHER_LETTER) | FLAG (HB_UNICODE_GENERAL_CATEGORY_TITLECASE_LETTER) | FLAG (HB_UNICODE_GENERAL_CATEGORY_UPPERCASE_LETTER)))
# 372 "../harfbuzz-6.0.0/src/hb-unicode.hh"
struct hb_unicode_range_t
{
  static int
  cmp (const void *_key, const void *_item)
  {
    hb_codepoint_t cp = *((hb_codepoint_t *) _key);
    const hb_unicode_range_t *range = (hb_unicode_range_t *) _item;

    if (cp < range->start)
      return -1;
    else if (cp <= range->end)
      return 0;
    else
      return +1;
  }

  hb_codepoint_t start;
  hb_codepoint_t end;
};





__attribute__((__visibility__("hidden"))) bool
_hb_unicode_is_emoji_Extended_Pictographic (hb_codepoint_t cp);


extern "C" __attribute__((__visibility__("hidden"))) hb_unicode_funcs_t *hb_ucd_get_unicode_funcs ();
# 35 "../harfbuzz-6.0.0/src/hb-buffer.hh" 2
# 1 "../harfbuzz-6.0.0/src/hb-set-digest.hh" 1
# 28 "../harfbuzz-6.0.0/src/hb-set-digest.hh"
#define HB_SET_DIGEST_HH 


# 1 "../harfbuzz-6.0.0/src/hb-machinery.hh" 1
# 30 "../harfbuzz-6.0.0/src/hb-machinery.hh"
#define HB_MACHINERY_HH 


# 1 "../harfbuzz-6.0.0/src/hb-blob.hh" 1
# 30 "../harfbuzz-6.0.0/src/hb-blob.hh"
#define HB_BLOB_HH 
# 39 "../harfbuzz-6.0.0/src/hb-blob.hh"
struct hb_blob_t
{
  ~hb_blob_t () { destroy_user_data (); }

  void destroy_user_data ()
  {
    if (destroy)
    {
      destroy (user_data);
      user_data = nullptr;
      destroy = nullptr;
    }
  }

  __attribute__((__visibility__("hidden"))) bool try_make_writable ();
  __attribute__((__visibility__("hidden"))) bool try_make_writable_inplace ();
  __attribute__((__visibility__("hidden"))) bool try_make_writable_inplace_unix ();

  hb_bytes_t as_bytes () const { return hb_bytes_t (data, length); }
  template <typename Type>
  const Type* as () const { return as_bytes ().as<Type> (); }

  public:
  hb_object_header_t header;

  const char *data = nullptr;
  unsigned int length = 0;
  hb_memory_mode_t mode = (hb_memory_mode_t) 0;

  void *user_data = nullptr;
  hb_destroy_func_t destroy = nullptr;
};






template <typename P>
struct hb_blob_ptr_t
{
  typedef hb_remove_pointer<P> T;

  hb_blob_ptr_t (hb_blob_t *b_ = nullptr) : b (b_) {}
  hb_blob_t * operator = (hb_blob_t *b_) { return b = b_; }
  const T * operator -> () const { return get (); }
  const T & operator * () const { return *get (); }
  template <typename C> operator const C * () const { return get (); }
  operator const char * () const { return (const char *) get (); }
  const T * get () const { return b->as<T> (); }
  hb_blob_t * get_blob () const { return b.get_raw (); }
  unsigned int get_length () const { return b.get ()->length; }
  void destroy () { hb_blob_destroy (b.get_raw ()); b = nullptr; }

  private:
  hb_nonnull_ptr_t<hb_blob_t> b;
};
# 34 "../harfbuzz-6.0.0/src/hb-machinery.hh" 2

# 1 "../harfbuzz-6.0.0/src/hb-dispatch.hh" 1
# 30 "../harfbuzz-6.0.0/src/hb-dispatch.hh"
#define HB_DISPATCH_HH 







template <typename Context, typename Return=hb_empty_t, unsigned int MaxDebugDepth=0>
struct hb_dispatch_context_t
{
  private:

  const Context* thiz () const { return static_cast<const Context *> (this); }
 Context* thiz () { return static_cast< Context *> (this); }
  public:
  const char *get_name () { return "UNKNOWN"; }
  static constexpr unsigned max_debug_depth = MaxDebugDepth;
  typedef Return return_t;
  template <typename T, typename F>
  bool may_dispatch (const T *obj __attribute__((unused)), const F *format __attribute__((unused))) { return true; }
  template <typename T, typename ...Ts>
  return_t dispatch (const T &obj, Ts&&... ds)
  { return obj.dispatch (thiz (), std::forward<Ts> (ds)...); }
  static return_t no_dispatch_return_value () { return Context::default_return_value (); }
  static bool stop_sublookup_iteration (const return_t r __attribute__((unused))) { return false; }
  unsigned debug_depth = 0;
};
# 36 "../harfbuzz-6.0.0/src/hb-machinery.hh" 2
# 1 "../harfbuzz-6.0.0/src/hb-sanitize.hh" 1
# 30 "../harfbuzz-6.0.0/src/hb-sanitize.hh"
#define HB_SANITIZE_HH 
# 105 "../harfbuzz-6.0.0/src/hb-sanitize.hh"
#define HB_SANITIZE_MAX_EDITS 32


#define HB_SANITIZE_MAX_OPS_FACTOR 64


#define HB_SANITIZE_MAX_OPS_MIN 16384


#define HB_SANITIZE_MAX_OPS_MAX 0x3FFFFFFF


#define HB_SANITIZE_MAX_SUBTABLES 0x4000


struct hb_sanitize_context_t :
       hb_dispatch_context_t<hb_sanitize_context_t, bool, (0 +0)>
{
  hb_sanitize_context_t () :
 start (nullptr), end (nullptr),
 max_ops (0), max_subtables (0),
        recursion_depth (0),
 writable (false), edit_count (0),
 blob (nullptr),
 num_glyphs (65536),
 num_glyphs_set (false) {}

  const char *get_name () { return "SANITIZE"; }
  template <typename T, typename F>
  bool may_dispatch (const T *obj __attribute__((unused)), const F *format)
  { return format->sanitize (this); }
  static return_t default_return_value () { return true; }
  static return_t no_dispatch_return_value () { return false; }
  bool stop_sublookup_iteration (const return_t r) const { return !r; }

  bool visit_subtables (unsigned count)
  {
    max_subtables += count;
    return max_subtables < 0x4000;
  }

  private:
  template <typename T, typename ...Ts> auto
  _dispatch (const T &obj, hb_priority<1>, Ts&&... ds) -> decltype ((obj.sanitize (this, std::forward<Ts> (ds)...))) { return (obj.sanitize (this, std::forward<Ts> (ds)...)); }

  template <typename T, typename ...Ts> auto
  _dispatch (const T &obj, hb_priority<0>, Ts&&... ds) -> decltype ((obj.dispatch (this, std::forward<Ts> (ds)...))) { return (obj.dispatch (this, std::forward<Ts> (ds)...)); }

  public:
  template <typename T, typename ...Ts> auto
  dispatch (const T &obj, Ts&&... ds) -> decltype ((_dispatch (obj, hb_priority<16> (), std::forward<Ts> (ds)...))) { return (_dispatch (obj, hb_priority<16> (), std::forward<Ts> (ds)...)); }



  void init (hb_blob_t *b)
  {
    this->blob = hb_blob_reference (b);
    this->writable = false;
  }

  void set_num_glyphs (unsigned int num_glyphs_)
  {
    num_glyphs = num_glyphs_;
    num_glyphs_set = true;
  }
  unsigned int get_num_glyphs () { return num_glyphs; }

  void set_max_ops (int max_ops_) { max_ops = max_ops_; }

  template <typename T>
  void set_object (const T *obj)
  {
    reset_object ();

    if (!obj) return;

    const char *obj_start = (const char *) obj;
    if ((__builtin_expect (!!(obj_start < this->start || this->end <= obj_start), 0)))
      this->start = this->end = nullptr;
    else
    {
      this->start = obj_start;
      this->end = obj_start + hb_min (size_t (this->end - obj_start), obj->get_size ());
    }
  }

  void reset_object ()
  {
    this->start = this->blob->data;
    this->end = this->start + this->blob->length;
    
# 195 "../harfbuzz-6.0.0/src/hb-sanitize.hh" 3 4
   (static_cast <bool> (
# 195 "../harfbuzz-6.0.0/src/hb-sanitize.hh"
   this->start <= this->end
# 195 "../harfbuzz-6.0.0/src/hb-sanitize.hh" 3 4
   ) ? void (0) : __assert_fail (
# 195 "../harfbuzz-6.0.0/src/hb-sanitize.hh"
   "this->start <= this->end"
# 195 "../harfbuzz-6.0.0/src/hb-sanitize.hh" 3 4
   , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-sanitize.hh", 195, __extension__ __PRETTY_FUNCTION__))
# 195 "../harfbuzz-6.0.0/src/hb-sanitize.hh"
                                    ;
  }

  void start_processing ()
  {
    reset_object ();
    unsigned m;
    if ((__builtin_expect (!!(hb_unsigned_mul_overflows (this->end - this->start, 64, &m)), 0)))
      this->max_ops = 0x3FFFFFFF;
    else
      this->max_ops = hb_clamp (m,
    (unsigned) 16384,
    (unsigned) 0x3FFFFFFF);
    this->edit_count = 0;
    this->debug_depth = 0;
    this->recursion_depth = 0;

    _hb_debug_msg<(0 +0)> ("SANITIZE", (start), nullptr, true, (0), (+1), "start [%p..%p] (%lu bytes)", this->start, this->end, (unsigned long) (this->end - this->start))


                                                 ;
  }

  void end_processing ()
  {
    _hb_debug_msg<(0 +0)> ("SANITIZE", (this->start), nullptr, true, (0), (-1), "end [%p..%p] %u edit requests", this->start, this->end, this->edit_count)

                                                ;

    hb_blob_destroy (this->blob);
    this->blob = nullptr;
    this->start = this->end = nullptr;
  }

  unsigned get_edit_count () { return edit_count; }

  bool check_range (const void *base,
      unsigned int len) const
  {
    const char *p = (const char *) base;
    bool ok = !len ||
       (this->start <= p &&
        p <= this->end &&
        (unsigned int) (this->end - p) >= len &&
        (this->max_ops -= len) > 0);

    _hb_debug_msg<(0 +0)> ("SANITIZE", (p), nullptr, true, (this->debug_depth+1), (0), "check_range [%p..%p]" " (%u bytes) in [%p..%p] -> %s", p, p + len, len, this->start, this->end, ok ? "OK" : "OUT-OF-RANGE")




                                  ;

    return (__builtin_expect (!!(ok), 1));
  }

  template <typename T>
  bool check_range (const T *base,
      unsigned int a,
      unsigned int b) const
  {
    unsigned m;
    return !hb_unsigned_mul_overflows (a, b, &m) &&
    this->check_range (base, m);
  }

  template <typename T>
  bool check_range (const T *base,
      unsigned int a,
      unsigned int b,
      unsigned int c) const
  {
    unsigned m;
    return !hb_unsigned_mul_overflows (a, b, &m) &&
    this->check_range (base, m, c);
  }

  template <typename T>
  bool check_array (const T *base, unsigned int len) const
  {
    return this->check_range (base, len, hb_static_size<T>::value);
  }

  template <typename T>
  bool check_array (const T *base,
      unsigned int a,
      unsigned int b) const
  {
    return this->check_range (base, a, b, hb_static_size<T>::value);
  }

  bool check_start_recursion (int max_depth)
  {
    if ((__builtin_expect (!!(recursion_depth >= max_depth), 0))) return false;
    return ++recursion_depth;
  }

  bool end_recursion (bool result)
  {
    recursion_depth--;
    return result;
  }

  template <typename Type>
  bool check_struct (const Type *obj) const
  { return (__builtin_expect (!!(this->check_range (obj, obj->min_size)), 1)); }

  bool may_edit (const void *base, unsigned int len)
  {
    if (this->edit_count >= 32)
      return false;

    const char *p = (const char *) base;
    this->edit_count++;

    _hb_debug_msg<(0 +0)> ("SANITIZE", (p), nullptr, true, (this->debug_depth+1), (0), "may_edit(%u) [%p..%p] (%u bytes) in [%p..%p] -> %s", this->edit_count, p, p + len, len, this->start, this->end, this->writable ? "GRANTED" : "DENIED")




                                             ;

    return this->writable;
  }

  template <typename Type, typename ValueType>
  bool try_set (const Type *obj, const ValueType &v)
  {
    if (this->may_edit (obj, hb_static_size<Type>::value))
    {
      * const_cast<Type *> (obj) = v;
      return true;
    }
    return false;
  }

  template <typename Type>
  hb_blob_t *sanitize_blob (hb_blob_t *blob)
  {
    bool sane;

    init (blob);

  retry:
    _hb_debug_msg<(0 +0)> ("SANITIZE", (start), __PRETTY_FUNCTION__, false, 0, 0, "start");

    start_processing ();

    if ((__builtin_expect (!!(!start), 0)))
    {
      end_processing ();
      return blob;
    }

    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));

    sane = t->sanitize (this);
    if (sane)
    {
      if (edit_count)
      {
 _hb_debug_msg<(0 +0)> ("SANITIZE", (start), __PRETTY_FUNCTION__, false, 0, 0, "passed first round with %u edits; going for second round", edit_count);


 edit_count = 0;
 sane = t->sanitize (this);
 if (edit_count) {
   _hb_debug_msg<(0 +0)> ("SANITIZE", (start), __PRETTY_FUNCTION__, false, 0, 0, "requested %u edits in second round; FAILLING", edit_count);
   sane = false;
 }
      }
    }
    else
    {
      if (edit_count && !writable) {
 start = hb_blob_get_data_writable (blob, nullptr);
 end = start + blob->length;

 if (start)
 {
   writable = true;

   _hb_debug_msg<(0 +0)> ("SANITIZE", (start), __PRETTY_FUNCTION__, false, 0, 0, "retry");
   goto retry;
 }
      }
    }

    end_processing ();

    _hb_debug_msg<(0 +0)> ("SANITIZE", (start), __PRETTY_FUNCTION__, false, 0, 0, sane ? "PASSED" : "FAILED");
    if (sane)
    {
      hb_blob_make_immutable (blob);
      return blob;
    }
    else
    {
      hb_blob_destroy (blob);
      return hb_blob_get_empty ();
    }
  }

  template <typename Type>
  hb_blob_t *reference_table (const hb_face_t *face, hb_tag_t tableTag = Type::tableTag)
  {
    if (!num_glyphs_set)
      set_num_glyphs (hb_face_get_glyph_count (face));
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
  }

  const char *start, *end;
  mutable int max_ops, max_subtables;
  private:
  int recursion_depth;
  bool writable;
  unsigned int edit_count;
  hb_blob_t *blob;
  unsigned int num_glyphs;
  bool num_glyphs_set;
};

struct hb_sanitize_with_object_t
{
  template <typename T>
  hb_sanitize_with_object_t (hb_sanitize_context_t *c, const T& obj) : c (c)
  { c->set_object (obj); }
  ~hb_sanitize_with_object_t ()
  { c->reset_object (); }

  private:
  hb_sanitize_context_t *c;
};
# 37 "../harfbuzz-6.0.0/src/hb-machinery.hh" 2
# 45 "../harfbuzz-6.0.0/src/hb-machinery.hh"
template<typename Type>
static inline const Type& StructAtOffset(const void *P, unsigned int offset)
{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
template<typename Type>
static inline Type& StructAtOffset(void *P, unsigned int offset)
{ return * reinterpret_cast<Type*> ((char *) P + offset); }
template<typename Type>
static inline const Type& StructAtOffsetUnaligned(const void *P, unsigned int offset)
{
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wcast-align"
  return * reinterpret_cast<const Type*> ((const char *) P + offset);
#pragma GCC diagnostic pop
}
template<typename Type>
static inline Type& StructAtOffsetUnaligned(void *P, unsigned int offset)
{
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wcast-align"
  return * reinterpret_cast<Type*> ((char *) P + offset);
#pragma GCC diagnostic pop
}



template<typename Type, typename TObject>
static inline const Type& StructAfter(const TObject &X)
{ return StructAtOffset<Type>(&X, X.get_size()); }
template<typename Type, typename TObject>
static inline Type& StructAfter(TObject &X)
{ return StructAtOffset<Type>(&X, X.get_size()); }
# 84 "../harfbuzz-6.0.0/src/hb-machinery.hh"
#define HB_VAR_ARRAY 1



#define _DEFINE_INSTANCE_ASSERTION1(_line,_assertion) void _instance_assertion_on_line_ ##_line () const { static_assert ((_assertion), ""); }


#define _DEFINE_INSTANCE_ASSERTION0(_line,_assertion) _DEFINE_INSTANCE_ASSERTION1 (_line, _assertion)
#define DEFINE_INSTANCE_ASSERTION(_assertion) _DEFINE_INSTANCE_ASSERTION0 (__LINE__, _assertion)


#define _DEFINE_COMPILES_ASSERTION1(_line,_code) void _compiles_assertion_on_line_ ##_line () const { _code; }


#define _DEFINE_COMPILES_ASSERTION0(_line,_code) _DEFINE_COMPILES_ASSERTION1 (_line, _code)
#define DEFINE_COMPILES_ASSERTION(_code) _DEFINE_COMPILES_ASSERTION0 (__LINE__, _code)


#define DEFINE_SIZE_STATIC(size) DEFINE_INSTANCE_ASSERTION (sizeof (*this) == (size)) unsigned int get_size () const { return (size); } static constexpr unsigned null_size = (size); static constexpr unsigned min_size = (size); static constexpr unsigned static_size = (size)






#define DEFINE_SIZE_UNION(size,_member) DEFINE_COMPILES_ASSERTION ((void) this->u._member.static_size) DEFINE_INSTANCE_ASSERTION (sizeof(this->u._member) == (size)) static constexpr unsigned null_size = (size); static constexpr unsigned min_size = (size)





#define DEFINE_SIZE_MIN(size) DEFINE_INSTANCE_ASSERTION (sizeof (*this) >= (size)) static constexpr unsigned null_size = (size); static constexpr unsigned min_size = (size)




#define DEFINE_SIZE_UNBOUNDED(size) DEFINE_INSTANCE_ASSERTION (sizeof (*this) >= (size)) static constexpr unsigned min_size = (size)



#define DEFINE_SIZE_ARRAY(size,array) DEFINE_COMPILES_ASSERTION ((void) (array)[0].static_size) DEFINE_INSTANCE_ASSERTION (sizeof (*this) == (size) + (HB_VAR_ARRAY+0) * sizeof ((array)[0])) static constexpr unsigned null_size = (size); static constexpr unsigned min_size = (size)





#define DEFINE_SIZE_ARRAY_SIZED(size,array) unsigned int get_size () const { return (size - (array).min_size + (array).get_size ()); } DEFINE_SIZE_ARRAY(size, array)
# 147 "../harfbuzz-6.0.0/src/hb-machinery.hh"
template <typename Data, unsigned int WheresData>
struct hb_data_wrapper_t
{
  static_assert (WheresData > 0, "");

  Data * get_data () const
  { return *(((Data **) (void *) this) - WheresData); }

  bool is_inert () const { return !get_data (); }

  template <typename Stored, typename Subclass>
  Stored * call_create () const { return Subclass::create (get_data ()); }
};
template <>
struct hb_data_wrapper_t<void, 0>
{
  bool is_inert () const { return false; }

  template <typename Stored, typename Funcs>
  Stored * call_create () const { return Funcs::create (); }
};

template <typename T1, typename T2> struct hb_non_void_t { typedef T1 value; };
template <typename T2> struct hb_non_void_t<void, T2> { typedef T2 value; };

template <typename Returned,
   typename Subclass = void,
   typename Data = void,
   unsigned int WheresData = 0,
   typename Stored = Returned>
struct hb_lazy_loader_t : hb_data_wrapper_t<Data, WheresData>
{
  typedef typename hb_non_void_t<Subclass,
     hb_lazy_loader_t<Returned,Subclass,Data,WheresData,Stored>
    >::value Funcs;

  void init0 () {}
  void init () { instance.set_relaxed (nullptr); }
  void fini () { do_destroy (instance.get_acquire ()); init (); }

  void free_instance ()
  {
  retry:
    Stored *p = instance.get_acquire ();
    if ((__builtin_expect (!!(p && !cmpexch (p, nullptr)), 0)))
      goto retry;
    do_destroy (p);
  }

  static void do_destroy (Stored *p)
  {
    if (p && p != const_cast<Stored *> (Funcs::get_null ()))
      Funcs::destroy (p);
  }

  const Returned * operator -> () const { return get (); }
  template <typename U = Returned, typename hb_enable_if<(!hb_is_same<U, void>::value)>::type* = nullptr>
  const U & operator * () const { return *get (); }
  explicit operator bool () const
  { return get_stored () != Funcs::get_null (); }
  template <typename C> operator const C * () const { return get (); }

  Stored * get_stored () const
  {
  retry:
    Stored *p = this->instance.get_acquire ();
    if ((__builtin_expect (!!(!p), 0)))
    {
      if ((__builtin_expect (!!(this->is_inert ()), 0)))
 return const_cast<Stored *> (Funcs::get_null ());

      p = this->template call_create<Stored, Funcs> ();
      if ((__builtin_expect (!!(!p), 0)))
 p = const_cast<Stored *> (Funcs::get_null ());

      if ((__builtin_expect (!!(!cmpexch (nullptr, p)), 0)))
      {
 do_destroy (p);
 goto retry;
      }
    }
    return p;
  }
  Stored * get_stored_relaxed () const
  {
    return this->instance.get_relaxed ();
  }

  bool cmpexch (Stored *current, Stored *value) const
  {


    return this->instance.cmpexch (current, value);
  }

  const Returned * get () const { return Funcs::convert (get_stored ()); }
  const Returned * get_relaxed () const { return Funcs::convert (get_stored_relaxed ()); }
  Returned * get_unconst () const { return const_cast<Returned *> (Funcs::convert (get_stored ())); }


  static Returned* convert (Stored *p) { return p; }


  static const Stored* get_null () { return &NullHelper<Stored>::get_null (); }
  static Stored *create (Data *data)
  {
    Stored *p = (Stored *) calloc (1, sizeof (Stored));
    if ((__builtin_expect (!!(p), 1)))
      p = new (p) Stored (data);
    return p;
  }
  static Stored *create ()
  {
    Stored *p = (Stored *) calloc (1, sizeof (Stored));
    if ((__builtin_expect (!!(p), 1)))
      p = new (p) Stored ();
    return p;
  }
  static void destroy (Stored *p)
  {
    p->~Stored ();
    free (p);
  }

  private:

  hb_atomic_ptr_t<Stored *> instance;
};



template <typename T, unsigned int WheresFace>
struct hb_face_lazy_loader_t : hb_lazy_loader_t<T,
      hb_face_lazy_loader_t<T, WheresFace>,
      hb_face_t, WheresFace> {};

template <typename T, unsigned int WheresFace, bool core=false>
struct hb_table_lazy_loader_t : hb_lazy_loader_t<T,
       hb_table_lazy_loader_t<T, WheresFace, core>,
       hb_face_t, WheresFace,
       hb_blob_t>
{
  static hb_blob_t *create (hb_face_t *face)
  {
    auto c = hb_sanitize_context_t ();
    if (core)
      c.set_num_glyphs (0);
    return c.reference_table<T> (face);
  }
  static void destroy (hb_blob_t *p) { hb_blob_destroy (p); }

  static const hb_blob_t *get_null ()
  { return hb_blob_get_empty (); }

  static const T* convert (const hb_blob_t *blob)
  { return blob->as<T> (); }

  hb_blob_t* get_blob () const { return this->get_stored (); }
};

#define HB_DEFINE_TYPE_FUNCS_LAZY_LOADER_T(Type) template <typename Subclass> struct hb_ ##Type ##_funcs_lazy_loader_t : hb_lazy_loader_t<hb_ ##Type ##_funcs_t, Subclass> { static void destroy (hb_ ##Type ##_funcs_t *p) { hb_ ##Type ##_funcs_destroy (p); } static const hb_ ##Type ##_funcs_t *get_null () { return hb_ ##Type ##_funcs_get_empty (); } }
# 317 "../harfbuzz-6.0.0/src/hb-machinery.hh"
template <typename Subclass> struct hb_font_funcs_lazy_loader_t : hb_lazy_loader_t<hb_font_funcs_t, Subclass> { static void destroy (hb_font_funcs_t *p) { hb_font_funcs_destroy (p); } static const hb_font_funcs_t *get_null () { return hb_font_funcs_get_empty (); } };
template <typename Subclass> struct hb_unicode_funcs_lazy_loader_t : hb_lazy_loader_t<hb_unicode_funcs_t, Subclass> { static void destroy (hb_unicode_funcs_t *p) { hb_unicode_funcs_destroy (p); } static const hb_unicode_funcs_t *get_null () { return hb_unicode_funcs_get_empty (); } };
template <typename Subclass> struct hb_draw_funcs_lazy_loader_t : hb_lazy_loader_t<hb_draw_funcs_t, Subclass> { static void destroy (hb_draw_funcs_t *p) { hb_draw_funcs_destroy (p); } static const hb_draw_funcs_t *get_null () { return hb_draw_funcs_get_empty (); } };
template <typename Subclass> struct hb_paint_funcs_lazy_loader_t : hb_lazy_loader_t<hb_paint_funcs_t, Subclass> { static void destroy (hb_paint_funcs_t *p) { hb_paint_funcs_destroy (p); } static const hb_paint_funcs_t *get_null () { return hb_paint_funcs_get_empty (); } };

#undef HB_DEFINE_TYPE_FUNCS_LAZY_LOADER_T
# 32 "../harfbuzz-6.0.0/src/hb-set-digest.hh" 2
# 61 "../harfbuzz-6.0.0/src/hb-set-digest.hh"
template <typename mask_t, unsigned int shift>
struct hb_set_digest_bits_pattern_t
{
  static constexpr unsigned mask_bytes = sizeof (mask_t);
  static constexpr unsigned mask_bits = sizeof (mask_t) * 8;
  static constexpr unsigned num_bits = 0
         + (mask_bytes >= 1 ? 3 : 0)
         + (mask_bytes >= 2 ? 1 : 0)
         + (mask_bytes >= 4 ? 1 : 0)
         + (mask_bytes >= 8 ? 1 : 0)
         + (mask_bytes >= 16? 1 : 0)
         + 0;

  static_assert ((shift < sizeof (hb_codepoint_t) * 8), "");
  static_assert ((shift + num_bits <= sizeof (hb_codepoint_t) * 8), "");

  void init () { mask = 0; }

  void add (const hb_set_digest_bits_pattern_t &o) { mask |= o.mask; }

  void add (hb_codepoint_t g) { mask |= mask_for (g); }

  bool add_range (hb_codepoint_t a, hb_codepoint_t b)
  {
    if ((b >> shift) - (a >> shift) >= mask_bits - 1)
      mask = (mask_t) -1;
    else {
      mask_t ma = mask_for (a);
      mask_t mb = mask_for (b);
      mask |= mb + (mb - ma) - (mb < ma);
    }
    return true;
  }

  template <typename T>
  void add_array (const T *array, unsigned int count, unsigned int stride=sizeof(T))
  {
    for (unsigned int i = 0; i < count; i++)
    {
      add (*array);
      array = &StructAtOffsetUnaligned<T> ((const void *) array, stride);
    }
  }
  template <typename T>
  void add_array (const hb_array_t<const T>& arr) { add_array (&arr, arr.len ()); }
  template <typename T>
  bool add_sorted_array (const T *array, unsigned int count, unsigned int stride=sizeof(T))
  {
    add_array (array, count, stride);
    return true;
  }
  template <typename T>
  bool add_sorted_array (const hb_sorted_array_t<const T>& arr) { return add_sorted_array (&arr, arr.len ()); }

  bool may_have (const hb_set_digest_bits_pattern_t &o) const
  { return mask & o.mask; }

  bool may_have (hb_codepoint_t g) const
  { return mask & mask_for (g); }

  private:

  static mask_t mask_for (hb_codepoint_t g)
  { return ((mask_t) 1) << ((g >> shift) & (mask_bits - 1)); }
  mask_t mask;
};

template <typename head_t, typename tail_t>
struct hb_set_digest_combiner_t
{
  void init ()
  {
    head.init ();
    tail.init ();
  }

  void add (const hb_set_digest_combiner_t &o)
  {
    head.add (o.head);
    tail.add (o.tail);
  }

  void add (hb_codepoint_t g)
  {
    head.add (g);
    tail.add (g);
  }

  bool add_range (hb_codepoint_t a, hb_codepoint_t b)
  {
    return head.add_range (a, b) &&
    tail.add_range (a, b);
  }
  template <typename T>
  void add_array (const T *array, unsigned int count, unsigned int stride=sizeof(T))
  {
    head.add_array (array, count, stride);
    tail.add_array (array, count, stride);
  }
  template <typename T>
  void add_array (const hb_array_t<const T>& arr) { add_array (&arr, arr.len ()); }
  template <typename T>
  bool add_sorted_array (const T *array, unsigned int count, unsigned int stride=sizeof(T))
  {
    return head.add_sorted_array (array, count, stride) &&
    tail.add_sorted_array (array, count, stride);
  }
  template <typename T>
  bool add_sorted_array (const hb_sorted_array_t<const T>& arr) { return add_sorted_array (&arr, arr.len ()); }

  bool may_have (const hb_set_digest_combiner_t &o) const
  {
    return head.may_have (o.head) && tail.may_have (o.tail);
  }

  bool may_have (hb_codepoint_t g) const
  {
    return head.may_have (g) && tail.may_have (g);
  }

  private:
  head_t head;
  tail_t tail;
};
# 194 "../harfbuzz-6.0.0/src/hb-set-digest.hh"
using hb_set_digest_t =
  hb_set_digest_combiner_t
  <
    hb_set_digest_bits_pattern_t<unsigned long, 4>,
    hb_set_digest_combiner_t
    <
      hb_set_digest_bits_pattern_t<unsigned long, 0>,
      hb_set_digest_bits_pattern_t<unsigned long, 9>
    >
  >
;
# 36 "../harfbuzz-6.0.0/src/hb-buffer.hh" 2


static_assert ((sizeof (hb_glyph_info_t) == 20), "");
static_assert ((sizeof (hb_glyph_info_t) == sizeof (hb_glyph_position_t)), "");

extern "C++" { static inline constexpr hb_glyph_flags_t operator | (hb_glyph_flags_t l, hb_glyph_flags_t r) { return hb_glyph_flags_t ((unsigned) l | (unsigned) r); } static inline constexpr hb_glyph_flags_t operator & (hb_glyph_flags_t l, hb_glyph_flags_t r) { return hb_glyph_flags_t ((unsigned) l & (unsigned) r); } static inline constexpr hb_glyph_flags_t operator ^ (hb_glyph_flags_t l, hb_glyph_flags_t r) { return hb_glyph_flags_t ((unsigned) l ^ (unsigned) r); } static inline constexpr unsigned operator ~ (hb_glyph_flags_t r) { return (~(unsigned) r); } static inline hb_glyph_flags_t& operator |= (hb_glyph_flags_t &l, hb_glyph_flags_t r) { l = l | r; return l; } static inline hb_glyph_flags_t& operator &= (hb_glyph_flags_t& l, hb_glyph_flags_t r) { l = l & r; return l; } static inline hb_glyph_flags_t& operator ^= (hb_glyph_flags_t& l, hb_glyph_flags_t r) { l = l ^ r; return l; } } static_assert (true, "");
extern "C++" { static inline constexpr hb_buffer_flags_t operator | (hb_buffer_flags_t l, hb_buffer_flags_t r) { return hb_buffer_flags_t ((unsigned) l | (unsigned) r); } static inline constexpr hb_buffer_flags_t operator & (hb_buffer_flags_t l, hb_buffer_flags_t r) { return hb_buffer_flags_t ((unsigned) l & (unsigned) r); } static inline constexpr hb_buffer_flags_t operator ^ (hb_buffer_flags_t l, hb_buffer_flags_t r) { return hb_buffer_flags_t ((unsigned) l ^ (unsigned) r); } static inline constexpr unsigned operator ~ (hb_buffer_flags_t r) { return (~(unsigned) r); } static inline hb_buffer_flags_t& operator |= (hb_buffer_flags_t &l, hb_buffer_flags_t r) { l = l | r; return l; } static inline hb_buffer_flags_t& operator &= (hb_buffer_flags_t& l, hb_buffer_flags_t r) { l = l & r; return l; } static inline hb_buffer_flags_t& operator ^= (hb_buffer_flags_t& l, hb_buffer_flags_t r) { l = l ^ r; return l; } } static_assert (true, "");
extern "C++" { static inline constexpr hb_buffer_serialize_flags_t operator | (hb_buffer_serialize_flags_t l, hb_buffer_serialize_flags_t r) { return hb_buffer_serialize_flags_t ((unsigned) l | (unsigned) r); } static inline constexpr hb_buffer_serialize_flags_t operator & (hb_buffer_serialize_flags_t l, hb_buffer_serialize_flags_t r) { return hb_buffer_serialize_flags_t ((unsigned) l & (unsigned) r); } static inline constexpr hb_buffer_serialize_flags_t operator ^ (hb_buffer_serialize_flags_t l, hb_buffer_serialize_flags_t r) { return hb_buffer_serialize_flags_t ((unsigned) l ^ (unsigned) r); } static inline constexpr unsigned operator ~ (hb_buffer_serialize_flags_t r) { return (~(unsigned) r); } static inline hb_buffer_serialize_flags_t& operator |= (hb_buffer_serialize_flags_t &l, hb_buffer_serialize_flags_t r) { l = l | r; return l; } static inline hb_buffer_serialize_flags_t& operator &= (hb_buffer_serialize_flags_t& l, hb_buffer_serialize_flags_t r) { l = l & r; return l; } static inline hb_buffer_serialize_flags_t& operator ^= (hb_buffer_serialize_flags_t& l, hb_buffer_serialize_flags_t r) { l = l ^ r; return l; } } static_assert (true, "");
extern "C++" { static inline constexpr hb_buffer_diff_flags_t operator | (hb_buffer_diff_flags_t l, hb_buffer_diff_flags_t r) { return hb_buffer_diff_flags_t ((unsigned) l | (unsigned) r); } static inline constexpr hb_buffer_diff_flags_t operator & (hb_buffer_diff_flags_t l, hb_buffer_diff_flags_t r) { return hb_buffer_diff_flags_t ((unsigned) l & (unsigned) r); } static inline constexpr hb_buffer_diff_flags_t operator ^ (hb_buffer_diff_flags_t l, hb_buffer_diff_flags_t r) { return hb_buffer_diff_flags_t ((unsigned) l ^ (unsigned) r); } static inline constexpr unsigned operator ~ (hb_buffer_diff_flags_t r) { return (~(unsigned) r); } static inline hb_buffer_diff_flags_t& operator |= (hb_buffer_diff_flags_t &l, hb_buffer_diff_flags_t r) { l = l | r; return l; } static inline hb_buffer_diff_flags_t& operator &= (hb_buffer_diff_flags_t& l, hb_buffer_diff_flags_t r) { l = l & r; return l; } static inline hb_buffer_diff_flags_t& operator ^= (hb_buffer_diff_flags_t& l, hb_buffer_diff_flags_t r) { l = l ^ r; return l; } } static_assert (true, "");

enum hb_buffer_scratch_flags_t {
  HB_BUFFER_SCRATCH_FLAG_DEFAULT = 0x00000000u,
  HB_BUFFER_SCRATCH_FLAG_HAS_NON_ASCII = 0x00000001u,
  HB_BUFFER_SCRATCH_FLAG_HAS_DEFAULT_IGNORABLES = 0x00000002u,
  HB_BUFFER_SCRATCH_FLAG_HAS_SPACE_FALLBACK = 0x00000004u,
  HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT = 0x00000008u,
  HB_BUFFER_SCRATCH_FLAG_HAS_CGJ = 0x00000010u,
  HB_BUFFER_SCRATCH_FLAG_HAS_GLYPH_FLAGS = 0x00000020u,
  HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE = 0x00000040u,


  HB_BUFFER_SCRATCH_FLAG_SHAPER0 = 0x01000000u,
  HB_BUFFER_SCRATCH_FLAG_SHAPER1 = 0x02000000u,
  HB_BUFFER_SCRATCH_FLAG_SHAPER2 = 0x04000000u,
  HB_BUFFER_SCRATCH_FLAG_SHAPER3 = 0x08000000u,
};
extern "C++" { static inline constexpr hb_buffer_scratch_flags_t operator | (hb_buffer_scratch_flags_t l, hb_buffer_scratch_flags_t r) { return hb_buffer_scratch_flags_t ((unsigned) l | (unsigned) r); } static inline constexpr hb_buffer_scratch_flags_t operator & (hb_buffer_scratch_flags_t l, hb_buffer_scratch_flags_t r) { return hb_buffer_scratch_flags_t ((unsigned) l & (unsigned) r); } static inline constexpr hb_buffer_scratch_flags_t operator ^ (hb_buffer_scratch_flags_t l, hb_buffer_scratch_flags_t r) { return hb_buffer_scratch_flags_t ((unsigned) l ^ (unsigned) r); } static inline constexpr unsigned operator ~ (hb_buffer_scratch_flags_t r) { return (~(unsigned) r); } static inline hb_buffer_scratch_flags_t& operator |= (hb_buffer_scratch_flags_t &l, hb_buffer_scratch_flags_t r) { l = l | r; return l; } static inline hb_buffer_scratch_flags_t& operator &= (hb_buffer_scratch_flags_t& l, hb_buffer_scratch_flags_t r) { l = l & r; return l; } static inline hb_buffer_scratch_flags_t& operator ^= (hb_buffer_scratch_flags_t& l, hb_buffer_scratch_flags_t r) { l = l ^ r; return l; } } static_assert (true, "");






struct hb_buffer_t
{
  hb_object_header_t header;





  hb_unicode_funcs_t *unicode;
  hb_buffer_flags_t flags;
  hb_buffer_cluster_level_t cluster_level;
  hb_codepoint_t replacement;
  hb_codepoint_t invisible;
  hb_codepoint_t not_found;





  hb_buffer_content_type_t content_type;
  hb_segment_properties_t props;

  bool successful;
  bool shaping_failed;
  bool have_output;
  bool have_positions;

  unsigned int idx;
  unsigned int len;
  unsigned int out_len;

  unsigned int allocated;
  hb_glyph_info_t *info;
  hb_glyph_info_t *out_info;
  hb_glyph_position_t *pos;




  static constexpr unsigned CONTEXT_LENGTH = 5u;
  hb_codepoint_t context[2][CONTEXT_LENGTH];
  unsigned int context_len[2];






  uint8_t allocated_var_bits;
  uint8_t serial;
  hb_buffer_scratch_flags_t scratch_flags;
  unsigned int max_len;
  int max_ops;
# 130 "../harfbuzz-6.0.0/src/hb-buffer.hh"
  hb_buffer_message_func_t message_func;
  void *message_data;
  hb_destroy_func_t message_destroy;
  unsigned message_depth;
# 142 "../harfbuzz-6.0.0/src/hb-buffer.hh"
  __attribute__((warn_unused_result)) bool in_error () const { return !successful; }

  void allocate_var (unsigned int start, unsigned int count)
  {
    unsigned int end = start + count;
    
# 147 "../harfbuzz-6.0.0/src/hb-buffer.hh" 3 4
   (static_cast <bool> (
# 147 "../harfbuzz-6.0.0/src/hb-buffer.hh"
   end <= 8
# 147 "../harfbuzz-6.0.0/src/hb-buffer.hh" 3 4
   ) ? void (0) : __assert_fail (
# 147 "../harfbuzz-6.0.0/src/hb-buffer.hh"
   "end <= 8"
# 147 "../harfbuzz-6.0.0/src/hb-buffer.hh" 3 4
   , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-buffer.hh", 147, __extension__ __PRETTY_FUNCTION__))
# 147 "../harfbuzz-6.0.0/src/hb-buffer.hh"
                    ;
    unsigned int bits = (1u<<end) - (1u<<start);
    
# 149 "../harfbuzz-6.0.0/src/hb-buffer.hh" 3 4
   (static_cast <bool> (
# 149 "../harfbuzz-6.0.0/src/hb-buffer.hh"
   0 == (allocated_var_bits & bits)
# 149 "../harfbuzz-6.0.0/src/hb-buffer.hh" 3 4
   ) ? void (0) : __assert_fail (
# 149 "../harfbuzz-6.0.0/src/hb-buffer.hh"
   "0 == (allocated_var_bits & bits)"
# 149 "../harfbuzz-6.0.0/src/hb-buffer.hh" 3 4
   , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-buffer.hh", 149, __extension__ __PRETTY_FUNCTION__))
# 149 "../harfbuzz-6.0.0/src/hb-buffer.hh"
                                            ;
    allocated_var_bits |= bits;
  }
  bool try_allocate_var (unsigned int start, unsigned int count)
  {
    unsigned int end = start + count;
    
# 155 "../harfbuzz-6.0.0/src/hb-buffer.hh" 3 4
   (static_cast <bool> (
# 155 "../harfbuzz-6.0.0/src/hb-buffer.hh"
   end <= 8
# 155 "../harfbuzz-6.0.0/src/hb-buffer.hh" 3 4
   ) ? void (0) : __assert_fail (
# 155 "../harfbuzz-6.0.0/src/hb-buffer.hh"
   "end <= 8"
# 155 "../harfbuzz-6.0.0/src/hb-buffer.hh" 3 4
   , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-buffer.hh", 155, __extension__ __PRETTY_FUNCTION__))
# 155 "../harfbuzz-6.0.0/src/hb-buffer.hh"
                    ;
    unsigned int bits = (1u<<end) - (1u<<start);
    if (allocated_var_bits & bits)
      return false;
    allocated_var_bits |= bits;
    return true;
  }
  void deallocate_var (unsigned int start, unsigned int count)
  {
    unsigned int end = start + count;
    
# 165 "../harfbuzz-6.0.0/src/hb-buffer.hh" 3 4
   (static_cast <bool> (
# 165 "../harfbuzz-6.0.0/src/hb-buffer.hh"
   end <= 8
# 165 "../harfbuzz-6.0.0/src/hb-buffer.hh" 3 4
   ) ? void (0) : __assert_fail (
# 165 "../harfbuzz-6.0.0/src/hb-buffer.hh"
   "end <= 8"
# 165 "../harfbuzz-6.0.0/src/hb-buffer.hh" 3 4
   , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-buffer.hh", 165, __extension__ __PRETTY_FUNCTION__))
# 165 "../harfbuzz-6.0.0/src/hb-buffer.hh"
                    ;
    unsigned int bits = (1u<<end) - (1u<<start);
    
# 167 "../harfbuzz-6.0.0/src/hb-buffer.hh" 3 4
   (static_cast <bool> (
# 167 "../harfbuzz-6.0.0/src/hb-buffer.hh"
   bits == (allocated_var_bits & bits)
# 167 "../harfbuzz-6.0.0/src/hb-buffer.hh" 3 4
   ) ? void (0) : __assert_fail (
# 167 "../harfbuzz-6.0.0/src/hb-buffer.hh"
   "bits == (allocated_var_bits & bits)"
# 167 "../harfbuzz-6.0.0/src/hb-buffer.hh" 3 4
   , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-buffer.hh", 167, __extension__ __PRETTY_FUNCTION__))
# 167 "../harfbuzz-6.0.0/src/hb-buffer.hh"
                                               ;
    allocated_var_bits &= ~bits;
  }
  void assert_var (unsigned int start, unsigned int count)
  {
    unsigned int end = start + count;
    
# 173 "../harfbuzz-6.0.0/src/hb-buffer.hh" 3 4
   (static_cast <bool> (
# 173 "../harfbuzz-6.0.0/src/hb-buffer.hh"
   end <= 8
# 173 "../harfbuzz-6.0.0/src/hb-buffer.hh" 3 4
   ) ? void (0) : __assert_fail (
# 173 "../harfbuzz-6.0.0/src/hb-buffer.hh"
   "end <= 8"
# 173 "../harfbuzz-6.0.0/src/hb-buffer.hh" 3 4
   , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-buffer.hh", 173, __extension__ __PRETTY_FUNCTION__))
# 173 "../harfbuzz-6.0.0/src/hb-buffer.hh"
                    ;
    __attribute__((unused)) unsigned int bits = (1u<<end) - (1u<<start);
    
# 175 "../harfbuzz-6.0.0/src/hb-buffer.hh" 3 4
   (static_cast <bool> (
# 175 "../harfbuzz-6.0.0/src/hb-buffer.hh"
   bits == (allocated_var_bits & bits)
# 175 "../harfbuzz-6.0.0/src/hb-buffer.hh" 3 4
   ) ? void (0) : __assert_fail (
# 175 "../harfbuzz-6.0.0/src/hb-buffer.hh"
   "bits == (allocated_var_bits & bits)"
# 175 "../harfbuzz-6.0.0/src/hb-buffer.hh" 3 4
   , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-buffer.hh", 175, __extension__ __PRETTY_FUNCTION__))
# 175 "../harfbuzz-6.0.0/src/hb-buffer.hh"
                                               ;
  }
  void deallocate_var_all ()
  {
    allocated_var_bits = 0;
  }

  hb_glyph_info_t &cur (unsigned int i = 0) { return info[idx + i]; }
  hb_glyph_info_t cur (unsigned int i = 0) const { return info[idx + i]; }

  hb_glyph_position_t &cur_pos (unsigned int i = 0) { return pos[idx + i]; }
  hb_glyph_position_t cur_pos (unsigned int i = 0) const { return pos[idx + i]; }

  hb_glyph_info_t &prev () { return out_info[out_len ? out_len - 1 : 0]; }
  hb_glyph_info_t prev () const { return out_info[out_len ? out_len - 1 : 0]; }

  hb_set_digest_t digest () const
  {
    hb_set_digest_t d;
    d.init ();
    d.add_array (&info[0].codepoint, len, sizeof (info[0]));
    return d;
  }

  __attribute__((__visibility__("hidden"))) void similar (const hb_buffer_t &src);
  __attribute__((__visibility__("hidden"))) void reset ();
  __attribute__((__visibility__("hidden"))) void clear ();


  __attribute__((__visibility__("hidden"))) void enter ();
  __attribute__((__visibility__("hidden"))) void leave ();


  __attribute__((__visibility__("hidden")))

  bool verify (hb_buffer_t *text_buffer,
        hb_font_t *font,
        const hb_feature_t *features,
        unsigned int num_features,
        const char * const *shapers)

  ;




  unsigned int backtrack_len () const { return have_output ? out_len : idx; }
  unsigned int lookahead_len () const { return len - idx; }
  uint8_t next_serial () { return ++serial ? serial : ++serial; }

  __attribute__((__visibility__("hidden"))) void add (hb_codepoint_t codepoint,
   unsigned int cluster);
  __attribute__((__visibility__("hidden"))) void add_info (const hb_glyph_info_t &glyph_info);

  void reverse_range (unsigned start, unsigned end)
  {
    hb_array_t<hb_glyph_info_t> (info, len).reverse (start, end);
    if (have_positions)
      hb_array_t<hb_glyph_position_t> (pos, len).reverse (start, end);
  }
  void reverse () { reverse_range (0, len); }

  template <typename FuncType>
  void reverse_groups (const FuncType& group,
         bool merge_clusters = false)
  {
    if ((__builtin_expect (!!(!len), 0)))
      return;

    unsigned start = 0;
    unsigned i;
    for (i = 1; i < len; i++)
    {
      if (!group (info[i - 1], info[i]))
      {
 if (merge_clusters)
   this->merge_clusters (start, i);
 reverse_range (start, i);
 start = i;
      }
    }
    if (merge_clusters)
      this->merge_clusters (start, i);
    reverse_range (start, i);

    reverse ();
  }

  template <typename FuncType>
  unsigned group_end (unsigned start, const FuncType& group) const
  {
    while (++start < len && group (info[start - 1], info[start]))
      ;

    return start;
  }

  static bool _cluster_group_func (const hb_glyph_info_t& a,
       const hb_glyph_info_t& b)
  { return a.cluster == b.cluster; }

  void reverse_clusters () { reverse_groups (_cluster_group_func); }

  __attribute__((__visibility__("hidden"))) void guess_segment_properties ();

  __attribute__((__visibility__("hidden"))) bool sync ();
  __attribute__((__visibility__("hidden"))) int sync_so_far ();
  __attribute__((__visibility__("hidden"))) void clear_output ();
  __attribute__((__visibility__("hidden"))) void clear_positions ();

  template <typename T>
  __attribute__((warn_unused_result)) bool replace_glyphs (unsigned int num_in,
        unsigned int num_out,
        const T *glyph_data)
  {
    if ((__builtin_expect (!!(!make_room_for (num_in, num_out)), 0))) return false;

    
# 292 "../harfbuzz-6.0.0/src/hb-buffer.hh" 3 4
   (static_cast <bool> (
# 292 "../harfbuzz-6.0.0/src/hb-buffer.hh"
   idx + num_in <= len
# 292 "../harfbuzz-6.0.0/src/hb-buffer.hh" 3 4
   ) ? void (0) : __assert_fail (
# 292 "../harfbuzz-6.0.0/src/hb-buffer.hh"
   "idx + num_in <= len"
# 292 "../harfbuzz-6.0.0/src/hb-buffer.hh" 3 4
   , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-buffer.hh", 292, __extension__ __PRETTY_FUNCTION__))
# 292 "../harfbuzz-6.0.0/src/hb-buffer.hh"
                               ;

    merge_clusters (idx, idx + num_in);

    hb_glyph_info_t &orig_info = idx < len ? cur() : prev();

    hb_glyph_info_t *pinfo = &out_info[out_len];
    for (unsigned int i = 0; i < num_out; i++)
    {
      *pinfo = orig_info;
      pinfo->codepoint = glyph_data[i];
      pinfo++;
    }

    idx += num_in;
    out_len += num_out;
    return true;
  }

  __attribute__((warn_unused_result)) bool replace_glyph (hb_codepoint_t glyph_index)
  { return replace_glyphs (1, 1, &glyph_index); }


  __attribute__((warn_unused_result)) bool output_glyph (hb_codepoint_t glyph_index)
  { return replace_glyphs (0, 1, &glyph_index); }

  __attribute__((warn_unused_result)) bool output_info (const hb_glyph_info_t &glyph_info)
  {
    if ((__builtin_expect (!!(!make_room_for (0, 1)), 0))) return false;

    out_info[out_len] = glyph_info;

    out_len++;
    return true;
  }

  __attribute__((warn_unused_result)) bool copy_glyph ()
  {


    return output_info (hb_glyph_info_t (cur()));
  }



  __attribute__((warn_unused_result)) bool next_glyph ()
  {
    if (have_output)
    {
      if (out_info != info || out_len != idx)
      {
 if ((__builtin_expect (!!(!make_room_for (1, 1)), 0))) return false;
 out_info[out_len] = info[idx];
      }
      out_len++;
    }

    idx++;
    return true;
  }


  __attribute__((warn_unused_result)) bool next_glyphs (unsigned int n)
  {
    if (have_output)
    {
      if (out_info != info || out_len != idx)
      {
 if ((__builtin_expect (!!(!make_room_for (n, n)), 0))) return false;
 memmove (out_info + out_len, info + idx, n * sizeof (out_info[0]));
      }
      out_len += n;
    }

    idx += n;
    return true;
  }

  void skip_glyph () { idx++; }
  void reset_masks (hb_mask_t mask)
  {
    for (unsigned int j = 0; j < len; j++)
      info[j].mask = mask;
  }
  void add_masks (hb_mask_t mask)
  {
    for (unsigned int j = 0; j < len; j++)
      info[j].mask |= mask;
  }
  __attribute__((__visibility__("hidden"))) void set_masks (hb_mask_t value, hb_mask_t mask,
         unsigned int cluster_start, unsigned int cluster_end);

  void merge_clusters (unsigned int start, unsigned int end)
  {
    if (end - start < 2)
      return;
    merge_clusters_impl (start, end);
  }
  __attribute__((__visibility__("hidden"))) void merge_clusters_impl (unsigned int start, unsigned int end);
  __attribute__((__visibility__("hidden"))) void merge_out_clusters (unsigned int start, unsigned int end);

  __attribute__((__visibility__("hidden"))) void delete_glyph ();
  __attribute__((__visibility__("hidden"))) void delete_glyphs_inplace (bool (*filter) (const hb_glyph_info_t *info));






  void _set_glyph_flags (hb_mask_t mask,
    unsigned start = 0,
    unsigned end = (unsigned) -1,
    bool interior = false,
    bool from_out_buffer = false)
  {
    end = hb_min (end, len);

    if (interior && !from_out_buffer && end - start < 2)
      return;

    scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_GLYPH_FLAGS;

    if (!from_out_buffer || !have_output)
    {
      if (!interior)
      {
 for (unsigned i = start; i < end; i++)
   info[i].mask |= mask;
      }
      else
      {
 unsigned cluster = _infos_find_min_cluster (info, start, end);
 _infos_set_glyph_flags (info, start, end, cluster, mask);
      }
    }
    else
    {
      
# 429 "../harfbuzz-6.0.0/src/hb-buffer.hh" 3 4
     (static_cast <bool> (
# 429 "../harfbuzz-6.0.0/src/hb-buffer.hh"
     start <= out_len
# 429 "../harfbuzz-6.0.0/src/hb-buffer.hh" 3 4
     ) ? void (0) : __assert_fail (
# 429 "../harfbuzz-6.0.0/src/hb-buffer.hh"
     "start <= out_len"
# 429 "../harfbuzz-6.0.0/src/hb-buffer.hh" 3 4
     , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-buffer.hh", 429, __extension__ __PRETTY_FUNCTION__))
# 429 "../harfbuzz-6.0.0/src/hb-buffer.hh"
                              ;
      
# 430 "../harfbuzz-6.0.0/src/hb-buffer.hh" 3 4
     (static_cast <bool> (
# 430 "../harfbuzz-6.0.0/src/hb-buffer.hh"
     idx <= end
# 430 "../harfbuzz-6.0.0/src/hb-buffer.hh" 3 4
     ) ? void (0) : __assert_fail (
# 430 "../harfbuzz-6.0.0/src/hb-buffer.hh"
     "idx <= end"
# 430 "../harfbuzz-6.0.0/src/hb-buffer.hh" 3 4
     , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-buffer.hh", 430, __extension__ __PRETTY_FUNCTION__))
# 430 "../harfbuzz-6.0.0/src/hb-buffer.hh"
                        ;

      if (!interior)
      {
 for (unsigned i = start; i < out_len; i++)
   out_info[i].mask |= mask;
 for (unsigned i = idx; i < end; i++)
   info[i].mask |= mask;
      }
      else
      {
 unsigned cluster = _infos_find_min_cluster (info, idx, end);
 cluster = _infos_find_min_cluster (out_info, start, out_len, cluster);

 _infos_set_glyph_flags (out_info, start, out_len, cluster, mask);
 _infos_set_glyph_flags (info, idx, end, cluster, mask);
      }
    }
  }

  void unsafe_to_break (unsigned int start = 0, unsigned int end = -1)
  {
    _set_glyph_flags (HB_GLYPH_FLAG_UNSAFE_TO_BREAK | HB_GLYPH_FLAG_UNSAFE_TO_CONCAT,
        start, end,
        true);
  }
  void safe_to_insert_tatweel (unsigned int start = 0, unsigned int end = -1)
  {
    if ((flags & HB_BUFFER_FLAG_PRODUCE_SAFE_TO_INSERT_TATWEEL) == 0)
    {
      unsafe_to_break (start, end);
      return;
    }
    _set_glyph_flags (HB_GLYPH_FLAG_SAFE_TO_INSERT_TATWEEL,
        start, end,
        true);
  }
  void unsafe_to_concat (unsigned int start = 0, unsigned int end = -1)
  {
    if ((__builtin_expect (!!((flags & HB_BUFFER_FLAG_PRODUCE_UNSAFE_TO_CONCAT) == 0), 1)))
      return;
    _set_glyph_flags (HB_GLYPH_FLAG_UNSAFE_TO_CONCAT,
        start, end,
        true);
  }
  void unsafe_to_break_from_outbuffer (unsigned int start = 0, unsigned int end = -1)
  {
    _set_glyph_flags (HB_GLYPH_FLAG_UNSAFE_TO_BREAK | HB_GLYPH_FLAG_UNSAFE_TO_CONCAT,
        start, end,
        true, true);
  }
  void unsafe_to_concat_from_outbuffer (unsigned int start = 0, unsigned int end = -1)
  {
    if ((__builtin_expect (!!((flags & HB_BUFFER_FLAG_PRODUCE_UNSAFE_TO_CONCAT) == 0), 1)))
      return;
    _set_glyph_flags (HB_GLYPH_FLAG_UNSAFE_TO_CONCAT,
        start, end,
        false, true);
  }



  __attribute__((warn_unused_result)) __attribute__((__visibility__("hidden"))) bool move_to (unsigned int i);

  __attribute__((warn_unused_result)) __attribute__((__visibility__("hidden"))) bool enlarge (unsigned int size);

  __attribute__((warn_unused_result)) bool ensure (unsigned int size)
  { return (__builtin_expect (!!(!size || size < allocated), 1)) ? true : enlarge (size); }

  __attribute__((warn_unused_result)) bool ensure_inplace (unsigned int size)
  { return (__builtin_expect (!!(!size || size < allocated), 1)); }

  void assert_glyphs ()
  {
    
# 504 "../harfbuzz-6.0.0/src/hb-buffer.hh" 3 4
   (static_cast <bool> (
# 504 "../harfbuzz-6.0.0/src/hb-buffer.hh"
   (content_type == HB_BUFFER_CONTENT_TYPE_GLYPHS) || (!len && (content_type == HB_BUFFER_CONTENT_TYPE_INVALID))
# 504 "../harfbuzz-6.0.0/src/hb-buffer.hh" 3 4
   ) ? void (0) : __assert_fail (
# 504 "../harfbuzz-6.0.0/src/hb-buffer.hh"
   "(content_type == HB_BUFFER_CONTENT_TYPE_GLYPHS) || (!len && (content_type == HB_BUFFER_CONTENT_TYPE_INVALID))"
# 504 "../harfbuzz-6.0.0/src/hb-buffer.hh" 3 4
   , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-buffer.hh", 504, __extension__ __PRETTY_FUNCTION__))
                                                                
# 505 "../harfbuzz-6.0.0/src/hb-buffer.hh"
                                                               ;
  }
  void assert_unicode ()
  {
    
# 509 "../harfbuzz-6.0.0/src/hb-buffer.hh" 3 4
   (static_cast <bool> (
# 509 "../harfbuzz-6.0.0/src/hb-buffer.hh"
   (content_type == HB_BUFFER_CONTENT_TYPE_UNICODE) || (!len && (content_type == HB_BUFFER_CONTENT_TYPE_INVALID))
# 509 "../harfbuzz-6.0.0/src/hb-buffer.hh" 3 4
   ) ? void (0) : __assert_fail (
# 509 "../harfbuzz-6.0.0/src/hb-buffer.hh"
   "(content_type == HB_BUFFER_CONTENT_TYPE_UNICODE) || (!len && (content_type == HB_BUFFER_CONTENT_TYPE_INVALID))"
# 509 "../harfbuzz-6.0.0/src/hb-buffer.hh" 3 4
   , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-buffer.hh", 509, __extension__ __PRETTY_FUNCTION__))
                                                                
# 510 "../harfbuzz-6.0.0/src/hb-buffer.hh"
                                                               ;
  }
  __attribute__((warn_unused_result)) bool ensure_glyphs ()
  {
    if ((__builtin_expect (!!(content_type != HB_BUFFER_CONTENT_TYPE_GLYPHS), 0)))
    {
      if (content_type != HB_BUFFER_CONTENT_TYPE_INVALID)
 return false;
      
# 518 "../harfbuzz-6.0.0/src/hb-buffer.hh" 3 4
     (static_cast <bool> (
# 518 "../harfbuzz-6.0.0/src/hb-buffer.hh"
     len == 0
# 518 "../harfbuzz-6.0.0/src/hb-buffer.hh" 3 4
     ) ? void (0) : __assert_fail (
# 518 "../harfbuzz-6.0.0/src/hb-buffer.hh"
     "len == 0"
# 518 "../harfbuzz-6.0.0/src/hb-buffer.hh" 3 4
     , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-buffer.hh", 518, __extension__ __PRETTY_FUNCTION__))
# 518 "../harfbuzz-6.0.0/src/hb-buffer.hh"
                      ;
      content_type = HB_BUFFER_CONTENT_TYPE_GLYPHS;
    }
    return true;
  }
  __attribute__((warn_unused_result)) bool ensure_unicode ()
  {
    if ((__builtin_expect (!!(content_type != HB_BUFFER_CONTENT_TYPE_UNICODE), 0)))
    {
      if (content_type != HB_BUFFER_CONTENT_TYPE_INVALID)
 return false;
      
# 529 "../harfbuzz-6.0.0/src/hb-buffer.hh" 3 4
     (static_cast <bool> (
# 529 "../harfbuzz-6.0.0/src/hb-buffer.hh"
     len == 0
# 529 "../harfbuzz-6.0.0/src/hb-buffer.hh" 3 4
     ) ? void (0) : __assert_fail (
# 529 "../harfbuzz-6.0.0/src/hb-buffer.hh"
     "len == 0"
# 529 "../harfbuzz-6.0.0/src/hb-buffer.hh" 3 4
     , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-buffer.hh", 529, __extension__ __PRETTY_FUNCTION__))
# 529 "../harfbuzz-6.0.0/src/hb-buffer.hh"
                      ;
      content_type = HB_BUFFER_CONTENT_TYPE_UNICODE;
    }
    return true;
  }

  __attribute__((warn_unused_result)) __attribute__((__visibility__("hidden"))) bool make_room_for (unsigned int num_in, unsigned int num_out);
  __attribute__((warn_unused_result)) __attribute__((__visibility__("hidden"))) bool shift_forward (unsigned int count);

  typedef long scratch_buffer_t;
  __attribute__((__visibility__("hidden"))) scratch_buffer_t *get_scratch_buffer (unsigned int *size);

  void clear_context (unsigned int side) { context_len[side] = 0; }

  __attribute__((__visibility__("hidden"))) void sort (unsigned int start, unsigned int end, int(*compar)(const hb_glyph_info_t *, const hb_glyph_info_t *));

  bool messaging ()
  {



    return (__builtin_expect (!!(message_func), 0));

  }
  bool message (hb_font_t *font, const char *fmt, ...) __attribute__((__format__ (__printf__, 3, 4)))
  {



    if ((__builtin_expect (!!(!messaging ()), 1)))
      return true;

    va_list ap;
    
# 562 "../harfbuzz-6.0.0/src/hb-buffer.hh" 3
   __builtin_va_start(
# 562 "../harfbuzz-6.0.0/src/hb-buffer.hh"
   ap
# 562 "../harfbuzz-6.0.0/src/hb-buffer.hh" 3
   ,
# 562 "../harfbuzz-6.0.0/src/hb-buffer.hh"
   fmt
# 562 "../harfbuzz-6.0.0/src/hb-buffer.hh" 3
   )
# 562 "../harfbuzz-6.0.0/src/hb-buffer.hh"
                     ;
    bool ret = message_impl (font, fmt, ap);
    
# 564 "../harfbuzz-6.0.0/src/hb-buffer.hh" 3
   __builtin_va_end(
# 564 "../harfbuzz-6.0.0/src/hb-buffer.hh"
   ap
# 564 "../harfbuzz-6.0.0/src/hb-buffer.hh" 3
   )
# 564 "../harfbuzz-6.0.0/src/hb-buffer.hh"
              ;

    return ret;

  }
  __attribute__((__visibility__("hidden"))) bool message_impl (hb_font_t *font, const char *fmt, va_list ap) __attribute__((__format__ (__printf__, 3, 0)));

  static void
  set_cluster (hb_glyph_info_t &inf, unsigned int cluster, unsigned int mask = 0)
  {
    if (inf.cluster != cluster)
      inf.mask = (inf.mask & ~HB_GLYPH_FLAG_DEFINED) | (mask & HB_GLYPH_FLAG_DEFINED);
    inf.cluster = cluster;
  }
  void
  _infos_set_glyph_flags (hb_glyph_info_t *infos,
     unsigned int start, unsigned int end,
     unsigned int cluster,
     hb_mask_t mask)
  {
    for (unsigned int i = start; i < end; i++)
      if (cluster != infos[i].cluster)
      {
 scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_GLYPH_FLAGS;
 infos[i].mask |= mask;
      }
  }
  static unsigned
  _infos_find_min_cluster (const hb_glyph_info_t *infos,
      unsigned start, unsigned end,
      unsigned cluster = 
# 594 "../harfbuzz-6.0.0/src/hb-buffer.hh" 3 4
                        (0x7fffffff * 2U + 1U)
# 594 "../harfbuzz-6.0.0/src/hb-buffer.hh"
                                )
  {
    for (unsigned int i = start; i < end; i++)
      cluster = hb_min (cluster, infos[i].cluster);
    return cluster;
  }

  void clear_glyph_flags (hb_mask_t mask = 0)
  {
    for (unsigned int i = 0; i < len; i++)
      info[i].mask = (info[i].mask & ~HB_GLYPH_FLAG_DEFINED) | (mask & HB_GLYPH_FLAG_DEFINED);
  }
};
extern __attribute__((__visibility__("hidden"))) const hb_buffer_t _hb_Null_hb_buffer_t; template <> struct Null<hb_buffer_t> { static hb_buffer_t const & get_null () { return _hb_Null_hb_buffer_t; } }; static_assert (true, "");


#define foreach_group(buffer,start,end,group_func) for (unsigned int _count = buffer->len, start = 0, end = _count ? buffer->group_end (0, group_func) : 0; start < _count; start = end, end = buffer->group_end (start, group_func))






#define foreach_cluster(buffer,start,end) foreach_group (buffer, start, end, hb_buffer_t::_cluster_group_func)



#define HB_BUFFER_XALLOCATE_VAR(b,func,var) b->func (offsetof (hb_glyph_info_t, var) - offsetof(hb_glyph_info_t, var1), sizeof (b->info[0].var))


#define HB_BUFFER_ALLOCATE_VAR(b,var) HB_BUFFER_XALLOCATE_VAR (b, allocate_var, var ())
#define HB_BUFFER_TRY_ALLOCATE_VAR(b,var) HB_BUFFER_XALLOCATE_VAR (b, try_allocate_var, var ())
#define HB_BUFFER_DEALLOCATE_VAR(b,var) HB_BUFFER_XALLOCATE_VAR (b, deallocate_var, var ())
#define HB_BUFFER_ASSERT_VAR(b,var) HB_BUFFER_XALLOCATE_VAR (b, assert_var, var ())
# 33 "../harfbuzz-6.0.0/src/hb-ot-map.hh" 2


#define HB_OT_MAP_MAX_BITS 8u
#define HB_OT_MAP_MAX_VALUE ((1u << HB_OT_MAP_MAX_BITS) - 1u)

struct hb_ot_shape_plan_t;

static const hb_tag_t table_tags[2] = {((hb_tag_t)((((uint32_t)('G')&0xFF)<<24)|(((uint32_t)('S')&0xFF)<<16)|(((uint32_t)('U')&0xFF)<<8)|((uint32_t)('B')&0xFF))), ((hb_tag_t)((((uint32_t)('G')&0xFF)<<24)|(((uint32_t)('P')&0xFF)<<16)|(((uint32_t)('O')&0xFF)<<8)|((uint32_t)('S')&0xFF)))};

struct hb_ot_map_t
{
  friend struct hb_ot_map_builder_t;

  public:

  struct feature_map_t {
    hb_tag_t tag;
    unsigned int index[2];
    unsigned int stage[2];
    unsigned int shift;
    hb_mask_t mask;
    hb_mask_t _1_mask;
    unsigned int needs_fallback : 1;
    unsigned int auto_zwnj : 1;
    unsigned int auto_zwj : 1;
    unsigned int random : 1;
    unsigned int per_syllable : 1;

    int cmp (const hb_tag_t tag_) const
    { return tag_ < tag ? -1 : tag_ > tag ? 1 : 0; }
  };

  struct lookup_map_t {
    unsigned short index;
    unsigned short auto_zwnj : 1;
    unsigned short auto_zwj : 1;
    unsigned short random : 1;
    unsigned short per_syllable : 1;
    hb_mask_t mask;
    hb_tag_t feature_tag;

    __attribute__((__visibility__("hidden"))) static int cmp (const void *pa, const void *pb)
    {
      const lookup_map_t *a = (const lookup_map_t *) pa;
      const lookup_map_t *b = (const lookup_map_t *) pb;
      return a->index < b->index ? -1 : a->index > b->index ? 1 : 0;
    }
  };



  typedef bool (*pause_func_t) (const struct hb_ot_shape_plan_t *plan, hb_font_t *font, hb_buffer_t *buffer);

  struct stage_map_t {
    unsigned int last_lookup;
    pause_func_t pause_func;
  };

  void init ()
  {
    hb_memset (this, 0, sizeof (*this));

    features.init0 ();
    for (unsigned int table_index = 0; table_index < 2; table_index++)
    {
      lookups[table_index].init0 ();
      stages[table_index].init0 ();
    }
  }
  void fini ()
  {
    features.fini ();
    for (unsigned int table_index = 0; table_index < 2; table_index++)
    {
      lookups[table_index].fini ();
      stages[table_index].fini ();
    }
  }

  hb_mask_t get_global_mask () const { return global_mask; }

  hb_mask_t get_mask (hb_tag_t feature_tag, unsigned int *shift = nullptr) const
  {
    const feature_map_t *map = features.bsearch (feature_tag);
    if (shift) *shift = map ? map->shift : 0;
    return map ? map->mask : 0;
  }

  bool needs_fallback (hb_tag_t feature_tag) const
  {
    const feature_map_t *map = features.bsearch (feature_tag);
    return map ? map->needs_fallback : false;
  }

  hb_mask_t get_1_mask (hb_tag_t feature_tag) const
  {
    const feature_map_t *map = features.bsearch (feature_tag);
    return map ? map->_1_mask : 0;
  }

  unsigned int get_feature_index (unsigned int table_index, hb_tag_t feature_tag) const
  {
    const feature_map_t *map = features.bsearch (feature_tag);
    return map ? map->index[table_index] : 0xFFFFu;
  }

  unsigned int get_feature_stage (unsigned int table_index, hb_tag_t feature_tag) const
  {
    const feature_map_t *map = features.bsearch (feature_tag);
    return map ? map->stage[table_index] : 
# 142 "../harfbuzz-6.0.0/src/hb-ot-map.hh" 3 4
                                          (0x7fffffff * 2U + 1U)
# 142 "../harfbuzz-6.0.0/src/hb-ot-map.hh"
                                                  ;
  }

  hb_array_t<const hb_ot_map_t::lookup_map_t>
  get_stage_lookups (unsigned int table_index, unsigned int stage) const
  {
    if ((__builtin_expect (!!(stage > stages[table_index].length), 0)))
      return hb_array<const hb_ot_map_t::lookup_map_t> (nullptr, 0);

    unsigned int start = stage ? stages[table_index][stage - 1].last_lookup : 0;
    unsigned int end = stage < stages[table_index].length ? stages[table_index][stage].last_lookup : lookups[table_index].length;
    return lookups[table_index].as_array ().sub_array (start, end - start);
  }

  __attribute__((__visibility__("hidden"))) void collect_lookups (unsigned int table_index, hb_set_t *lookups) const;
  template <typename Proxy>
  __attribute__((__visibility__("hidden"))) void apply (const Proxy &proxy,
     const struct hb_ot_shape_plan_t *plan, hb_font_t *font, hb_buffer_t *buffer) const;
  __attribute__((__visibility__("hidden"))) void substitute (const struct hb_ot_shape_plan_t *plan, hb_font_t *font, hb_buffer_t *buffer) const;
  __attribute__((__visibility__("hidden"))) void position (const struct hb_ot_shape_plan_t *plan, hb_font_t *font, hb_buffer_t *buffer) const;

  public:
  hb_tag_t chosen_script[2];
  bool found_script[2];

  private:

  hb_mask_t global_mask = 0;

  hb_sorted_vector_t<feature_map_t> features;
  hb_vector_t<lookup_map_t> lookups[2];
  hb_vector_t<stage_map_t> stages[2];
};

enum hb_ot_map_feature_flags_t
{
  F_NONE = 0x0000u,
  F_GLOBAL = 0x0001u,
  F_HAS_FALLBACK = 0x0002u,
  F_MANUAL_ZWNJ = 0x0004u,
  F_MANUAL_ZWJ = 0x0008u,
  F_MANUAL_JOINERS = F_MANUAL_ZWNJ | F_MANUAL_ZWJ,
  F_GLOBAL_MANUAL_JOINERS= F_GLOBAL | F_MANUAL_JOINERS,
  F_GLOBAL_HAS_FALLBACK = F_GLOBAL | F_HAS_FALLBACK,
  F_GLOBAL_SEARCH = 0x0010u,
  F_RANDOM = 0x0020u,
  F_PER_SYLLABLE = 0x0040u
};
extern "C++" { static inline constexpr hb_ot_map_feature_flags_t operator | (hb_ot_map_feature_flags_t l, hb_ot_map_feature_flags_t r) { return hb_ot_map_feature_flags_t ((unsigned) l | (unsigned) r); } static inline constexpr hb_ot_map_feature_flags_t operator & (hb_ot_map_feature_flags_t l, hb_ot_map_feature_flags_t r) { return hb_ot_map_feature_flags_t ((unsigned) l & (unsigned) r); } static inline constexpr hb_ot_map_feature_flags_t operator ^ (hb_ot_map_feature_flags_t l, hb_ot_map_feature_flags_t r) { return hb_ot_map_feature_flags_t ((unsigned) l ^ (unsigned) r); } static inline constexpr unsigned operator ~ (hb_ot_map_feature_flags_t r) { return (~(unsigned) r); } static inline hb_ot_map_feature_flags_t& operator |= (hb_ot_map_feature_flags_t &l, hb_ot_map_feature_flags_t r) { l = l | r; return l; } static inline hb_ot_map_feature_flags_t& operator &= (hb_ot_map_feature_flags_t& l, hb_ot_map_feature_flags_t r) { l = l & r; return l; } static inline hb_ot_map_feature_flags_t& operator ^= (hb_ot_map_feature_flags_t& l, hb_ot_map_feature_flags_t r) { l = l ^ r; return l; } } static_assert (true, "");


struct hb_ot_map_feature_t
{
  hb_tag_t tag;
  hb_ot_map_feature_flags_t flags;
};

struct hb_ot_shape_plan_key_t;

struct hb_ot_map_builder_t
{
  public:

  __attribute__((__visibility__("hidden"))) hb_ot_map_builder_t (hb_face_t *face_,
       const hb_segment_properties_t &props_);

  __attribute__((__visibility__("hidden"))) ~hb_ot_map_builder_t ();

  __attribute__((__visibility__("hidden"))) void add_feature (hb_tag_t tag,
    hb_ot_map_feature_flags_t flags=F_NONE,
    unsigned int value=1);

  __attribute__((__visibility__("hidden"))) bool has_feature (hb_tag_t tag);

  void add_feature (const hb_ot_map_feature_t &feat)
  { add_feature (feat.tag, feat.flags); }

  void enable_feature (hb_tag_t tag,
         hb_ot_map_feature_flags_t flags=F_NONE,
         unsigned int value=1)
  { add_feature (tag, F_GLOBAL | flags, value); }

  void disable_feature (hb_tag_t tag)
  { add_feature (tag, F_GLOBAL, 0); }

  void add_gsub_pause (hb_ot_map_t::pause_func_t pause_func)
  { add_pause (0, pause_func); }
  void add_gpos_pause (hb_ot_map_t::pause_func_t pause_func)
  { add_pause (1, pause_func); }

  __attribute__((__visibility__("hidden"))) void compile (hb_ot_map_t &m,
       const hb_ot_shape_plan_key_t &key);

  private:

  __attribute__((__visibility__("hidden"))) void add_lookups (hb_ot_map_t &m,
    unsigned int table_index,
    unsigned int feature_index,
    unsigned int variations_index,
    hb_mask_t mask,
    bool auto_zwnj = true,
    bool auto_zwj = true,
    bool random = false,
    bool per_syllable = false,
    hb_tag_t feature_tag = ((hb_tag_t)((((uint32_t)(' ')&0xFF)<<24)|(((uint32_t)(' ')&0xFF)<<16)|(((uint32_t)(' ')&0xFF)<<8)|((uint32_t)(' ')&0xFF))));

  struct feature_info_t {
    hb_tag_t tag;
    unsigned int seq;
    unsigned int max_value;
    hb_ot_map_feature_flags_t flags;
    unsigned int default_value;
    unsigned int stage[2];

    __attribute__((__visibility__("hidden"))) static int cmp (const void *pa, const void *pb)
    {
      const feature_info_t *a = (const feature_info_t *) pa;
      const feature_info_t *b = (const feature_info_t *) pb;
      return (a->tag != b->tag) ? (a->tag < b->tag ? -1 : 1) :
      (a->seq < b->seq ? -1 : a->seq > b->seq ? 1 : 0);
    }
  };

  struct stage_info_t {
    unsigned int index;
    hb_ot_map_t::pause_func_t pause_func;
  };

  __attribute__((__visibility__("hidden"))) void add_pause (unsigned int table_index, hb_ot_map_t::pause_func_t pause_func);

  public:

  hb_face_t *face;
  hb_segment_properties_t props;

  hb_tag_t chosen_script[2];
  bool found_script[2];
  unsigned int script_index[2], language_index[2];

  private:

  unsigned int current_stage[2];
  hb_vector_t<feature_info_t> feature_infos;
  hb_vector_t<stage_info_t> stages[2];
};
# 33 "../harfbuzz-6.0.0/src/hb-ot-shape.hh" 2
# 1 "../harfbuzz-6.0.0/src/hb-aat-map.hh" 1
# 28 "../harfbuzz-6.0.0/src/hb-aat-map.hh"
#define HB_AAT_MAP_HH 




struct hb_aat_map_t
{
  friend struct hb_aat_map_builder_t;

  public:
  struct range_flags_t
  {
    hb_mask_t flags;
    unsigned cluster_first;
    unsigned cluster_last;
  };

  public:
  hb_vector_t<hb_sorted_vector_t<range_flags_t>> chain_flags;
};

struct hb_aat_map_builder_t
{
  public:

  __attribute__((__visibility__("hidden"))) hb_aat_map_builder_t (hb_face_t *face_,
        const hb_segment_properties_t props_) :
          face (face_),
          props (props_) {}

  __attribute__((__visibility__("hidden"))) void add_feature (const hb_feature_t &feature);

  __attribute__((__visibility__("hidden"))) void compile (hb_aat_map_t &m);

  public:
  struct feature_info_t
  {
    hb_aat_layout_feature_type_t type;
    hb_aat_layout_feature_selector_t setting;
    bool is_exclusive;
    unsigned seq;

    __attribute__((__visibility__("hidden"))) static int cmp (const void *pa, const void *pb)
    {
      const feature_info_t *a = (const feature_info_t *) pa;
      const feature_info_t *b = (const feature_info_t *) pb;
      if (a->type != b->type) return (a->type < b->type ? -1 : 1);
      if (!a->is_exclusive &&
   (a->setting & ~1) != (b->setting & ~1)) return (a->setting < b->setting ? -1 : 1);
     return (a->seq < b->seq ? -1 : a->seq > b->seq ? 1 : 0);
    }


    int cmp (const feature_info_t& f) const
    {
      return (f.type != type) ? (f.type < type ? -1 : 1) :
      (f.setting != setting) ? (f.setting < setting ? -1 : 1) : 0;
    }
  };

  struct feature_range_t
  {
    feature_info_t info;
    unsigned start;
    unsigned end;
  };

  private:
  struct feature_event_t
  {
    unsigned int index;
    bool start;
    feature_info_t feature;

    __attribute__((__visibility__("hidden"))) static int cmp (const void *pa, const void *pb) {
      const feature_event_t *a = (const feature_event_t *) pa;
      const feature_event_t *b = (const feature_event_t *) pb;
      return a->index < b->index ? -1 : a->index > b->index ? 1 :
      a->start < b->start ? -1 : a->start > b->start ? 1 :
      feature_info_t::cmp (&a->feature, &b->feature);
    }
  };

  public:
  hb_face_t *face;
  hb_segment_properties_t props;

  public:
  hb_sorted_vector_t<feature_range_t> features;
  hb_sorted_vector_t<feature_info_t> current_features;
  unsigned range_first = 0;
  unsigned range_last = ((unsigned int) -1);
};
# 34 "../harfbuzz-6.0.0/src/hb-ot-shape.hh" 2


struct hb_ot_shape_plan_key_t
{
  unsigned int variations_index[2];

  void init (hb_face_t *face,
      const int *coords,
      unsigned num_coords)
  {
    for (unsigned int table_index = 0; table_index < 2; table_index++)
      hb_ot_layout_table_find_feature_variations (face,
        table_tags[table_index],
        coords,
        num_coords,
        &variations_index[table_index]);
  }

  bool equal (const hb_ot_shape_plan_key_t *other)
  {
    return 0 == hb_memcmp (this, other, sizeof (*this));
  }
};


struct hb_shape_plan_key_t;

struct hb_ot_shape_plan_t
{
  ~hb_ot_shape_plan_t () { fini (); }

  hb_segment_properties_t props;
  const struct hb_ot_shaper_t *shaper;
  hb_ot_map_t map;
  const void *data;

  hb_mask_t frac_mask, numr_mask, dnom_mask;





  hb_mask_t rtlm_mask;

  hb_mask_t kern_mask;




  hb_mask_t trak_mask;





  bool requested_kerning : 1;




  bool requested_tracking : 1;




  bool has_frac : 1;



  bool has_vert : 1;
  bool has_gpos_mark : 1;
  bool zero_marks : 1;
  bool fallback_glyph_classes : 1;
  bool fallback_mark_positioning : 1;
  bool adjust_mark_positioning_when_zeroing : 1;

  bool apply_gpos : 1;

  bool apply_kern : 1;



  bool apply_fallback_kern : 1;

  bool apply_kerx : 1;
  bool apply_morx : 1;
  bool apply_trak : 1;






  void collect_lookups (hb_tag_t table_tag, hb_set_t *lookups) const
  {
    unsigned int table_index;
    switch (table_tag) {
      case ((hb_tag_t)((((uint32_t)('G')&0xFF)<<24)|(((uint32_t)('S')&0xFF)<<16)|(((uint32_t)('U')&0xFF)<<8)|((uint32_t)('B')&0xFF))): table_index = 0; break;
      case ((hb_tag_t)((((uint32_t)('G')&0xFF)<<24)|(((uint32_t)('P')&0xFF)<<16)|(((uint32_t)('O')&0xFF)<<8)|((uint32_t)('S')&0xFF))): table_index = 1; break;
      default: return;
    }
    map.collect_lookups (table_index, lookups);
  }

  __attribute__((__visibility__("hidden"))) bool init0 (hb_face_t *face,
     const hb_shape_plan_key_t *key);
  __attribute__((__visibility__("hidden"))) void fini ();

  __attribute__((__visibility__("hidden"))) void substitute (hb_font_t *font, hb_buffer_t *buffer) const;
  __attribute__((__visibility__("hidden"))) void position (hb_font_t *font, hb_buffer_t *buffer) const;
};

struct hb_shape_plan_t;

struct hb_ot_shape_planner_t
{

  hb_face_t *face;
  hb_segment_properties_t props;
  hb_ot_map_builder_t map;

  bool apply_morx : 1;



  bool script_zero_marks : 1;
  bool script_fallback_mark_positioning : 1;
  const struct hb_ot_shaper_t *shaper;

  __attribute__((__visibility__("hidden"))) hb_ot_shape_planner_t (hb_face_t *face,
         const hb_segment_properties_t &props);

  __attribute__((__visibility__("hidden"))) void compile (hb_ot_shape_plan_t &plan,
       const hb_ot_shape_plan_key_t &key);
};
# 33 "../harfbuzz-6.0.0/src/hb-aat-layout.hh" 2
# 1 "../harfbuzz-6.0.0/src/hb-aat-ltag-table.hh" 1
# 26 "../harfbuzz-6.0.0/src/hb-aat-ltag-table.hh"
#define HB_AAT_LTAG_TABLE_HH 

# 1 "../harfbuzz-6.0.0/src/hb-open-type.hh" 1
# 30 "../harfbuzz-6.0.0/src/hb-open-type.hh"
#define HB_OPEN_TYPE_HH 



# 1 "../harfbuzz-6.0.0/src/hb-face.hh" 1
# 30 "../harfbuzz-6.0.0/src/hb-face.hh"
#define HB_FACE_HH 



# 1 "../harfbuzz-6.0.0/src/hb-shaper.hh" 1
# 28 "../harfbuzz-6.0.0/src/hb-shaper.hh"
#define HB_SHAPER_HH 




typedef hb_bool_t hb_shape_func_t (hb_shape_plan_t *shape_plan,
       hb_font_t *font,
       hb_buffer_t *buffer,
       const hb_feature_t *features,
       unsigned int num_features);

#define HB_SHAPER_IMPLEMENT(name) extern "C" HB_INTERNAL hb_shape_func_t _hb_ ##name ##_shape;

# 1 "../harfbuzz-6.0.0/src/hb-shaper-list.hh" 1
# 28 "../harfbuzz-6.0.0/src/hb-shaper-list.hh"
#define HB_SHAPER_LIST_HH 
# 42 "../harfbuzz-6.0.0/src/hb-shaper-list.hh"
extern "C" __attribute__((__visibility__("hidden"))) hb_shape_func_t _hb_ot_shape;
# 56 "../harfbuzz-6.0.0/src/hb-shaper-list.hh"
extern "C" __attribute__((__visibility__("hidden"))) hb_shape_func_t _hb_fallback_shape;
# 42 "../harfbuzz-6.0.0/src/hb-shaper.hh" 2
#undef HB_SHAPER_IMPLEMENT

struct hb_shaper_entry_t {
  char name[16];
  hb_shape_func_t *func;
};

__attribute__((__visibility__("hidden"))) const hb_shaper_entry_t *
_hb_shapers_get ();


template <typename Data, unsigned int WheresData, typename T>
struct hb_shaper_lazy_loader_t;

#define HB_SHAPER_ORDER(Shaper) HB_PASTE (HB_SHAPER_ORDER_, Shaper)

enum hb_shaper_order_t
{
  _HB_SHAPER_ORDER_ORDER_ZERO,
#define HB_SHAPER_IMPLEMENT(Shaper) HB_SHAPER_ORDER (Shaper),

# 1 "../harfbuzz-6.0.0/src/hb-shaper-list.hh" 1
# 42 "../harfbuzz-6.0.0/src/hb-shaper-list.hh"
HB_SHAPER_ORDER_ot,
# 56 "../harfbuzz-6.0.0/src/hb-shaper-list.hh"
HB_SHAPER_ORDER_fallback,
# 64 "../harfbuzz-6.0.0/src/hb-shaper.hh" 2
#undef HB_SHAPER_IMPLEMENT
  _HB_SHAPERS_COUNT_PLUS_ONE,
  HB_SHAPERS_COUNT = _HB_SHAPERS_COUNT_PLUS_ONE - 1,
};

template <enum hb_shaper_order_t order, typename Object> struct hb_shaper_object_data_type_t;

#define HB_SHAPER_DATA_SUCCEEDED ((void *) +1)
#define HB_SHAPER_DATA_TYPE(shaper,object) hb_ ##shaper ##_ ##object ##_data_t
#define HB_SHAPER_DATA_CREATE_FUNC(shaper,object) _hb_ ##shaper ##_shaper_ ##object ##_data_create
#define HB_SHAPER_DATA_DESTROY_FUNC(shaper,object) _hb_ ##shaper ##_shaper_ ##object ##_data_destroy

#define HB_SHAPER_DATA_INSTANTIATE_SHAPERS(shaper,object) struct HB_SHAPER_DATA_TYPE (shaper, object); extern "C" HB_INTERNAL HB_SHAPER_DATA_TYPE (shaper, object) * HB_SHAPER_DATA_CREATE_FUNC (shaper, object) (hb_ ##object ##_t *object); extern "C" HB_INTERNAL void HB_SHAPER_DATA_DESTROY_FUNC (shaper, object) (HB_SHAPER_DATA_TYPE (shaper, object) *shaper ##_ ##object); template <> struct hb_shaper_object_data_type_t<HB_SHAPER_ORDER (shaper), hb_ ##object ##_t> { typedef HB_SHAPER_DATA_TYPE(shaper, object) value; }; template <unsigned int WheresData> struct hb_shaper_lazy_loader_t<hb_ ##object ##_t, WheresData, HB_SHAPER_DATA_TYPE(shaper, object)> : hb_lazy_loader_t<HB_SHAPER_DATA_TYPE(shaper, object), hb_shaper_lazy_loader_t<hb_ ##object ##_t, WheresData, HB_SHAPER_DATA_TYPE(shaper, object)>, hb_ ##object ##_t, WheresData> { typedef HB_SHAPER_DATA_TYPE(shaper, object) Type; static Type* create (hb_ ##object ##_t *data) { return HB_SHAPER_DATA_CREATE_FUNC (shaper, object) (data); } static Type *get_null () { return nullptr; } static void destroy (Type *p) { HB_SHAPER_DATA_DESTROY_FUNC (shaper, object) (p); } }; static_assert (true, "")
# 108 "../harfbuzz-6.0.0/src/hb-shaper.hh"
template <typename Object>
struct hb_shaper_object_dataset_t
{
  void init0 (Object *parent_data)
  {
    this->parent_data = parent_data;
#define HB_SHAPER_IMPLEMENT(shaper) shaper.init0 ();
# 1 "../harfbuzz-6.0.0/src/hb-shaper-list.hh" 1
# 42 "../harfbuzz-6.0.0/src/hb-shaper-list.hh"
ot.init0 ();
# 56 "../harfbuzz-6.0.0/src/hb-shaper-list.hh"
fallback.init0 ();
# 116 "../harfbuzz-6.0.0/src/hb-shaper.hh" 2
#undef HB_SHAPER_IMPLEMENT
  }
  void fini ()
  {
#define HB_SHAPER_IMPLEMENT(shaper) shaper.fini ();
# 1 "../harfbuzz-6.0.0/src/hb-shaper-list.hh" 1
# 42 "../harfbuzz-6.0.0/src/hb-shaper-list.hh"
ot.fini ();
# 56 "../harfbuzz-6.0.0/src/hb-shaper-list.hh"
fallback.fini ();
# 122 "../harfbuzz-6.0.0/src/hb-shaper.hh" 2
#undef HB_SHAPER_IMPLEMENT
  }

  Object *parent_data;
#define HB_SHAPER_IMPLEMENT(shaper) hb_shaper_lazy_loader_t<Object, HB_SHAPER_ORDER(shaper), typename hb_shaper_object_data_type_t<HB_SHAPER_ORDER(shaper), Object>::value > shaper;



# 1 "../harfbuzz-6.0.0/src/hb-shaper-list.hh" 1
# 42 "../harfbuzz-6.0.0/src/hb-shaper-list.hh"
hb_shaper_lazy_loader_t<Object, HB_SHAPER_ORDER_ot, typename hb_shaper_object_data_type_t<HB_SHAPER_ORDER_ot, Object>::value > ot;
# 56 "../harfbuzz-6.0.0/src/hb-shaper-list.hh"
hb_shaper_lazy_loader_t<Object, HB_SHAPER_ORDER_fallback, typename hb_shaper_object_data_type_t<HB_SHAPER_ORDER_fallback, Object>::value > fallback;
# 131 "../harfbuzz-6.0.0/src/hb-shaper.hh" 2
#undef HB_SHAPER_IMPLEMENT
};
# 35 "../harfbuzz-6.0.0/src/hb-face.hh" 2
# 1 "../harfbuzz-6.0.0/src/hb-shape-plan.hh" 1
# 28 "../harfbuzz-6.0.0/src/hb-shape-plan.hh"
#define HB_SHAPE_PLAN_HH 






struct hb_shape_plan_key_t
{
  hb_segment_properties_t props;

  const hb_feature_t *user_features;
  unsigned int num_user_features;


  hb_ot_shape_plan_key_t ot;


  hb_shape_func_t *shaper_func;
  const char *shaper_name;

  __attribute__((__visibility__("hidden"))) bool init (bool copy,
    hb_face_t *face,
    const hb_segment_properties_t *props,
    const hb_feature_t *user_features,
    unsigned int num_user_features,
    const int *coords,
    unsigned int num_coords,
    const char * const *shaper_list);

  __attribute__((__visibility__("hidden"))) void fini () { free ((void *) user_features); user_features = nullptr; }

  __attribute__((__visibility__("hidden"))) bool user_features_match (const hb_shape_plan_key_t *other);

  __attribute__((__visibility__("hidden"))) bool equal (const hb_shape_plan_key_t *other);
};

struct hb_shape_plan_t
{
  ~hb_shape_plan_t () { key.fini (); }
  hb_object_header_t header;
  hb_face_t *face_unsafe;
  hb_shape_plan_key_t key;

  hb_ot_shape_plan_t ot;

};
# 36 "../harfbuzz-6.0.0/src/hb-face.hh" 2
# 1 "../harfbuzz-6.0.0/src/hb-ot-face.hh" 1
# 30 "../harfbuzz-6.0.0/src/hb-ot-face.hh"
#define HB_OT_FACE_HH 
# 42 "../harfbuzz-6.0.0/src/hb-ot-face.hh"
#define HB_OT_TABLE(Namespace,Type) namespace Namespace { struct Type; }
#define HB_OT_ACCELERATOR(Namespace,Type) HB_OT_TABLE (Namespace, Type ##_accelerator_t)
# 1 "../harfbuzz-6.0.0/src/hb-ot-face-table-list.hh" 1
# 32 "../harfbuzz-6.0.0/src/hb-ot-face-table-list.hh"
#define HB_OT_FACE_TABLE_LIST_HH 



#define HB_OT_CORE_TABLE(Namespace,Type) HB_OT_TABLE (Namespace, Type)
#define _HB_OT_CORE_TABLE_UNDEF 
# 54 "../harfbuzz-6.0.0/src/hb-ot-face-table-list.hh"
namespace OT { struct head; }
namespace OT { struct maxp; }

namespace OT { struct cmap_accelerator_t; }

namespace OT { struct hhea; }
namespace OT { struct hmtx_accelerator_t; }
namespace OT { struct OS2; }

namespace OT { struct post_accelerator_t; }


namespace OT { struct name_accelerator_t; }


namespace OT { struct STAT; }


namespace OT { struct meta_accelerator_t; }




namespace OT { struct vhea; }
namespace OT { struct vmtx_accelerator_t; }
namespace OT { struct VORG; }



namespace OT { struct loca; }
namespace OT { struct glyf_accelerator_t; }



namespace OT { struct cff1_accelerator_t; }
namespace OT { struct cff2_accelerator_t; }




namespace OT { struct fvar; }
namespace OT { struct avar; }
namespace OT { struct gvar_accelerator_t; }
namespace OT { struct MVAR; }




namespace OT { struct kern; }




namespace OT { struct GDEF_accelerator_t; }
namespace OT { struct GSUB_accelerator_t; }
namespace OT { struct GPOS_accelerator_t; }





namespace OT { struct BASE; }




namespace AAT { struct morx; }
namespace AAT { struct mort; }
namespace AAT { struct kerx; }
namespace AAT { struct ankr; }
namespace AAT { struct trak; }
namespace AAT { struct ltag; }
namespace AAT { struct feat; }





namespace OT { struct COLR; }
namespace OT { struct CPAL; }
namespace OT { struct CBDT_accelerator_t; }
namespace OT { struct sbix_accelerator_t; }
namespace OT { struct SVG_accelerator_t; }




namespace OT { struct MATH; }
# 150 "../harfbuzz-6.0.0/src/hb-ot-face-table-list.hh"
#undef HB_OT_CORE_TABLE
# 45 "../harfbuzz-6.0.0/src/hb-ot-face.hh" 2
#undef HB_OT_ACCELERATOR
#undef HB_OT_TABLE

struct hb_ot_face_t
{
  __attribute__((__visibility__("hidden"))) void init0 (hb_face_t *face);
  __attribute__((__visibility__("hidden"))) void fini ();

#define HB_OT_TABLE_ORDER(Namespace,Type) HB_PASTE (ORDER_, HB_PASTE (Namespace, HB_PASTE (_, Type)))

  enum order_t
  {
    ORDER_ZERO,
#define HB_OT_TABLE(Namespace,Type) HB_OT_TABLE_ORDER (Namespace, Type),
# 1 "../harfbuzz-6.0.0/src/hb-ot-face-table-list.hh" 1
# 36 "../harfbuzz-6.0.0/src/hb-ot-face-table-list.hh"
#define HB_OT_CORE_TABLE(Namespace,Type) HB_OT_TABLE (Namespace, Type)
#define _HB_OT_CORE_TABLE_UNDEF 



#define HB_OT_ACCELERATOR(Namespace,Type) HB_OT_TABLE (Namespace, Type)
#define _HB_OT_ACCELERATOR_UNDEF 
# 54 "../harfbuzz-6.0.0/src/hb-ot-face-table-list.hh"
ORDER_OT_head,
ORDER_OT_maxp,

ORDER_OT_cmap,

ORDER_OT_hhea,
ORDER_OT_hmtx,
ORDER_OT_OS2,

ORDER_OT_post,


ORDER_OT_name,


ORDER_OT_STAT,


ORDER_OT_meta,




ORDER_OT_vhea,
ORDER_OT_vmtx,
ORDER_OT_VORG,



ORDER_OT_loca,
ORDER_OT_glyf,



ORDER_OT_cff1,
ORDER_OT_cff2,




ORDER_OT_fvar,
ORDER_OT_avar,
ORDER_OT_gvar,
ORDER_OT_MVAR,




ORDER_OT_kern,




ORDER_OT_GDEF,
ORDER_OT_GSUB,
ORDER_OT_GPOS,





ORDER_OT_BASE,




ORDER_AAT_morx,
ORDER_AAT_mort,
ORDER_AAT_kerx,
ORDER_AAT_ankr,
ORDER_AAT_trak,
ORDER_AAT_ltag,
ORDER_AAT_feat,





ORDER_OT_COLR,
ORDER_OT_CPAL,
ORDER_OT_CBDT,
ORDER_OT_sbix,
ORDER_OT_SVG,




ORDER_OT_MATH,




#undef HB_OT_ACCELERATOR



#undef HB_OT_CORE_TABLE
# 60 "../harfbuzz-6.0.0/src/hb-ot-face.hh" 2
#undef HB_OT_TABLE
  };

  hb_face_t *face;
#define HB_OT_TABLE(Namespace,Type) hb_table_lazy_loader_t<Namespace::Type, HB_OT_TABLE_ORDER (Namespace, Type)> Type;

#define HB_OT_CORE_TABLE(Namespace,Type) hb_table_lazy_loader_t<Namespace::Type, HB_OT_TABLE_ORDER (Namespace, Type), true> Type;

#define HB_OT_ACCELERATOR(Namespace,Type) hb_face_lazy_loader_t<Namespace::Type ##_accelerator_t, HB_OT_TABLE_ORDER (Namespace, Type)> Type;

# 1 "../harfbuzz-6.0.0/src/hb-ot-face-table-list.hh" 1
# 54 "../harfbuzz-6.0.0/src/hb-ot-face-table-list.hh"
hb_table_lazy_loader_t<OT::head, ORDER_OT_head, true> head;
hb_table_lazy_loader_t<OT::maxp, ORDER_OT_maxp, true> maxp;

hb_face_lazy_loader_t<OT::cmap_accelerator_t, ORDER_OT_cmap> cmap;

hb_table_lazy_loader_t<OT::hhea, ORDER_OT_hhea, true> hhea;
hb_face_lazy_loader_t<OT::hmtx_accelerator_t, ORDER_OT_hmtx> hmtx;
hb_table_lazy_loader_t<OT::OS2, ORDER_OT_OS2, true> OS2;

hb_face_lazy_loader_t<OT::post_accelerator_t, ORDER_OT_post> post;


hb_face_lazy_loader_t<OT::name_accelerator_t, ORDER_OT_name> name;


hb_table_lazy_loader_t<OT::STAT, ORDER_OT_STAT, true> STAT;


hb_face_lazy_loader_t<OT::meta_accelerator_t, ORDER_OT_meta> meta;




hb_table_lazy_loader_t<OT::vhea, ORDER_OT_vhea, true> vhea;
hb_face_lazy_loader_t<OT::vmtx_accelerator_t, ORDER_OT_vmtx> vmtx;
hb_table_lazy_loader_t<OT::VORG, ORDER_OT_VORG, true> VORG;



hb_table_lazy_loader_t<OT::loca, ORDER_OT_loca, true> loca;
hb_face_lazy_loader_t<OT::glyf_accelerator_t, ORDER_OT_glyf> glyf;



hb_face_lazy_loader_t<OT::cff1_accelerator_t, ORDER_OT_cff1> cff1;
hb_face_lazy_loader_t<OT::cff2_accelerator_t, ORDER_OT_cff2> cff2;




hb_table_lazy_loader_t<OT::fvar, ORDER_OT_fvar, true> fvar;
hb_table_lazy_loader_t<OT::avar, ORDER_OT_avar, true> avar;
hb_face_lazy_loader_t<OT::gvar_accelerator_t, ORDER_OT_gvar> gvar;
hb_table_lazy_loader_t<OT::MVAR, ORDER_OT_MVAR, true> MVAR;




hb_table_lazy_loader_t<OT::kern, ORDER_OT_kern, true> kern;




hb_face_lazy_loader_t<OT::GDEF_accelerator_t, ORDER_OT_GDEF> GDEF;
hb_face_lazy_loader_t<OT::GSUB_accelerator_t, ORDER_OT_GSUB> GSUB;
hb_face_lazy_loader_t<OT::GPOS_accelerator_t, ORDER_OT_GPOS> GPOS;





hb_table_lazy_loader_t<OT::BASE, ORDER_OT_BASE, true> BASE;




hb_table_lazy_loader_t<AAT::morx, ORDER_AAT_morx> morx;
hb_table_lazy_loader_t<AAT::mort, ORDER_AAT_mort> mort;
hb_table_lazy_loader_t<AAT::kerx, ORDER_AAT_kerx> kerx;
hb_table_lazy_loader_t<AAT::ankr, ORDER_AAT_ankr> ankr;
hb_table_lazy_loader_t<AAT::trak, ORDER_AAT_trak> trak;
hb_table_lazy_loader_t<AAT::ltag, ORDER_AAT_ltag> ltag;
hb_table_lazy_loader_t<AAT::feat, ORDER_AAT_feat> feat;





hb_table_lazy_loader_t<OT::COLR, ORDER_OT_COLR, true> COLR;
hb_table_lazy_loader_t<OT::CPAL, ORDER_OT_CPAL, true> CPAL;
hb_face_lazy_loader_t<OT::CBDT_accelerator_t, ORDER_OT_CBDT> CBDT;
hb_face_lazy_loader_t<OT::sbix_accelerator_t, ORDER_OT_sbix> sbix;
hb_face_lazy_loader_t<OT::SVG_accelerator_t, ORDER_OT_SVG> SVG;




hb_table_lazy_loader_t<OT::MATH, ORDER_OT_MATH, true> MATH;




#undef HB_OT_ACCELERATOR



#undef HB_OT_CORE_TABLE
# 71 "../harfbuzz-6.0.0/src/hb-ot-face.hh" 2
#undef HB_OT_ACCELERATOR
#undef HB_OT_CORE_TABLE
#undef HB_OT_TABLE
};
# 37 "../harfbuzz-6.0.0/src/hb-face.hh" 2






#define HB_SHAPER_IMPLEMENT(shaper) HB_SHAPER_DATA_INSTANTIATE_SHAPERS(shaper, face);
# 1 "../harfbuzz-6.0.0/src/hb-shaper-list.hh" 1
# 42 "../harfbuzz-6.0.0/src/hb-shaper-list.hh"
struct hb_ot_face_data_t; extern "C" __attribute__((__visibility__("hidden"))) hb_ot_face_data_t * _hb_ot_shaper_face_data_create (hb_face_t *face); extern "C" __attribute__((__visibility__("hidden"))) void _hb_ot_shaper_face_data_destroy (hb_ot_face_data_t *ot_face); template <> struct hb_shaper_object_data_type_t<HB_SHAPER_ORDER_ot, hb_face_t> { typedef hb_ot_face_data_t value; }; template <unsigned int WheresData> struct hb_shaper_lazy_loader_t<hb_face_t, WheresData, hb_ot_face_data_t> : hb_lazy_loader_t<hb_ot_face_data_t, hb_shaper_lazy_loader_t<hb_face_t, WheresData, hb_ot_face_data_t>, hb_face_t, WheresData> { typedef hb_ot_face_data_t Type; static Type* create (hb_face_t *data) { return _hb_ot_shaper_face_data_create (data); } static Type *get_null () { return nullptr; } static void destroy (Type *p) { _hb_ot_shaper_face_data_destroy (p); } }; static_assert (true, "");
# 56 "../harfbuzz-6.0.0/src/hb-shaper-list.hh"
struct hb_fallback_face_data_t; extern "C" __attribute__((__visibility__("hidden"))) hb_fallback_face_data_t * _hb_fallback_shaper_face_data_create (hb_face_t *face); extern "C" __attribute__((__visibility__("hidden"))) void _hb_fallback_shaper_face_data_destroy (hb_fallback_face_data_t *fallback_face); template <> struct hb_shaper_object_data_type_t<HB_SHAPER_ORDER_fallback, hb_face_t> { typedef hb_fallback_face_data_t value; }; template <unsigned int WheresData> struct hb_shaper_lazy_loader_t<hb_face_t, WheresData, hb_fallback_face_data_t> : hb_lazy_loader_t<hb_fallback_face_data_t, hb_shaper_lazy_loader_t<hb_face_t, WheresData, hb_fallback_face_data_t>, hb_face_t, WheresData> { typedef hb_fallback_face_data_t Type; static Type* create (hb_face_t *data) { return _hb_fallback_shaper_face_data_create (data); } static Type *get_null () { return nullptr; } static void destroy (Type *p) { _hb_fallback_shaper_face_data_destroy (p); } }; static_assert (true, "");
# 45 "../harfbuzz-6.0.0/src/hb-face.hh" 2
#undef HB_SHAPER_IMPLEMENT

struct hb_face_t
{
  hb_object_header_t header;

  hb_reference_table_func_t reference_table_func;
  void *user_data;
  hb_destroy_func_t destroy;

  unsigned int index;
  mutable hb_atomic_int_t upem;
  mutable hb_atomic_int_t num_glyphs;

  hb_shaper_object_dataset_t<hb_face_t> data;
  hb_ot_face_t table;


  struct plan_node_t
  {
    hb_shape_plan_t *shape_plan;
    plan_node_t *next;
  };

  hb_atomic_ptr_t<plan_node_t> shape_plans;


  hb_blob_t *reference_table (hb_tag_t tag) const
  {
    hb_blob_t *blob;

    if ((__builtin_expect (!!(!reference_table_func), 0)))
      return hb_blob_get_empty ();

    blob = reference_table_func ( const_cast<hb_face_t *> (this), tag, user_data);
    if ((__builtin_expect (!!(!blob), 0)))
      return hb_blob_get_empty ();

    return blob;
  }

  unsigned int get_upem () const
  {
    unsigned int ret = upem;
    if ((__builtin_expect (!!(!ret), 0)))
    {
      return load_upem ();
    }
    return ret;
  }

  unsigned int get_num_glyphs () const
  {
    unsigned int ret = num_glyphs;
    if ((__builtin_expect (!!(ret == 
# 99 "../harfbuzz-6.0.0/src/hb-face.hh" 3 4
       (0x7fffffff * 2U + 1U)
# 99 "../harfbuzz-6.0.0/src/hb-face.hh"
       ), 0)))
      return load_num_glyphs ();
    return ret;
  }

  private:
  __attribute__((__visibility__("hidden"))) unsigned int load_upem () const;
  __attribute__((__visibility__("hidden"))) unsigned int load_num_glyphs () const;
};
extern __attribute__((__visibility__("hidden"))) const hb_face_t _hb_Null_hb_face_t; template <> struct Null<hb_face_t> { static hb_face_t const & get_null () { return _hb_Null_hb_face_t; } }; static_assert (true, "");
# 35 "../harfbuzz-6.0.0/src/hb-open-type.hh" 2


# 1 "../harfbuzz-6.0.0/src/hb-subset.hh" 1
# 28 "../harfbuzz-6.0.0/src/hb-subset.hh"
#define HB_SUBSET_HH 




# 1 "../harfbuzz-6.0.0/src/hb-subset.h" 1
# 28 "../harfbuzz-6.0.0/src/hb-subset.h"
#define HB_SUBSET_H 




extern "C" {







typedef struct hb_subset_input_t hb_subset_input_t;
# 50 "../harfbuzz-6.0.0/src/hb-subset.h"
typedef struct hb_subset_plan_t hb_subset_plan_t;
# 87 "../harfbuzz-6.0.0/src/hb-subset.h"
typedef enum {
  HB_SUBSET_FLAGS_DEFAULT = 0x00000000u,
  HB_SUBSET_FLAGS_NO_HINTING = 0x00000001u,
  HB_SUBSET_FLAGS_RETAIN_GIDS = 0x00000002u,
  HB_SUBSET_FLAGS_DESUBROUTINIZE = 0x00000004u,
  HB_SUBSET_FLAGS_NAME_LEGACY = 0x00000008u,
  HB_SUBSET_FLAGS_SET_OVERLAPS_FLAG = 0x00000010u,
  HB_SUBSET_FLAGS_PASSTHROUGH_UNRECOGNIZED = 0x00000020u,
  HB_SUBSET_FLAGS_NOTDEF_OUTLINE = 0x00000040u,
  HB_SUBSET_FLAGS_GLYPH_NAMES = 0x00000080u,
  HB_SUBSET_FLAGS_NO_PRUNE_UNICODE_RANGES = 0x00000100u,


} hb_subset_flags_t;
# 121 "../harfbuzz-6.0.0/src/hb-subset.h"
typedef enum {
  HB_SUBSET_SETS_GLYPH_INDEX = 0,
  HB_SUBSET_SETS_UNICODE,
  HB_SUBSET_SETS_NO_SUBSET_TABLE_TAG,
  HB_SUBSET_SETS_DROP_TABLE_TAG,
  HB_SUBSET_SETS_NAME_ID,
  HB_SUBSET_SETS_NAME_LANG_ID,
  HB_SUBSET_SETS_LAYOUT_FEATURE_TAG,
  HB_SUBSET_SETS_LAYOUT_SCRIPT_TAG,
} hb_subset_sets_t;

extern hb_subset_input_t *
hb_subset_input_create_or_fail (void);

extern hb_subset_input_t *
hb_subset_input_reference (hb_subset_input_t *input);

extern void
hb_subset_input_destroy (hb_subset_input_t *input);

extern hb_bool_t
hb_subset_input_set_user_data (hb_subset_input_t *input,
          hb_user_data_key_t *key,
          void * data,
          hb_destroy_func_t destroy,
          hb_bool_t replace);

extern void *
hb_subset_input_get_user_data (const hb_subset_input_t *input,
          hb_user_data_key_t *key);

extern void
hb_subset_input_keep_everything (hb_subset_input_t *input);

extern hb_set_t *
hb_subset_input_unicode_set (hb_subset_input_t *input);

extern hb_set_t *
hb_subset_input_glyph_set (hb_subset_input_t *input);

extern hb_set_t *
hb_subset_input_set (hb_subset_input_t *input, hb_subset_sets_t set_type);

extern hb_subset_flags_t
hb_subset_input_get_flags (hb_subset_input_t *input);

extern void
hb_subset_input_set_flags (hb_subset_input_t *input,
      unsigned value);

extern hb_bool_t
hb_subset_input_pin_axis_to_default (hb_subset_input_t *input,
         hb_face_t *face,
         hb_tag_t axis_tag);

extern hb_bool_t
hb_subset_input_pin_axis_location (hb_subset_input_t *input,
       hb_face_t *face,
       hb_tag_t axis_tag,
       float axis_value);
# 194 "../harfbuzz-6.0.0/src/hb-subset.h"
extern hb_face_t *
hb_subset_preprocess (hb_face_t *source);

extern hb_face_t *
hb_subset_or_fail (hb_face_t *source, const hb_subset_input_t *input);

extern hb_face_t *
hb_subset_plan_execute_or_fail (hb_subset_plan_t *plan);

extern hb_subset_plan_t *
hb_subset_plan_create_or_fail (hb_face_t *face,
                               const hb_subset_input_t *input);

extern void
hb_subset_plan_destroy (hb_subset_plan_t *plan);

extern hb_map_t *
hb_subset_plan_old_to_new_glyph_mapping (const hb_subset_plan_t *plan);

extern hb_map_t *
hb_subset_plan_new_to_old_glyph_mapping (const hb_subset_plan_t *plan);

extern hb_map_t *
hb_subset_plan_unicode_to_old_glyph_mapping (const hb_subset_plan_t *plan);


extern hb_subset_plan_t *
hb_subset_plan_reference (hb_subset_plan_t *plan);

extern hb_bool_t
hb_subset_plan_set_user_data (hb_subset_plan_t *plan,
                              hb_user_data_key_t *key,
                              void *data,
                              hb_destroy_func_t destroy,
                              hb_bool_t replace);

extern void *
hb_subset_plan_get_user_data (const hb_subset_plan_t *plan,
                              hb_user_data_key_t *key);


}
# 34 "../harfbuzz-6.0.0/src/hb-subset.hh" 2


# 1 "../harfbuzz-6.0.0/src/hb-serialize.hh" 1
# 32 "../harfbuzz-6.0.0/src/hb-serialize.hh"
#define HB_SERIALIZE_HH 



# 1 "../harfbuzz-6.0.0/src/hb-map.hh" 1
# 28 "../harfbuzz-6.0.0/src/hb-map.hh"
#define HB_MAP_HH 



# 1 "../harfbuzz-6.0.0/src/hb-set.hh" 1
# 29 "../harfbuzz-6.0.0/src/hb-set.hh"
#define HB_SET_HH 


# 1 "../harfbuzz-6.0.0/src/hb-bit-set-invertible.hh" 1
# 29 "../harfbuzz-6.0.0/src/hb-bit-set-invertible.hh"
#define HB_BIT_SET_INVERTIBLE_HH 


# 1 "../harfbuzz-6.0.0/src/hb-bit-set.hh" 1
# 29 "../harfbuzz-6.0.0/src/hb-bit-set.hh"
#define HB_BIT_SET_HH 


# 1 "../harfbuzz-6.0.0/src/hb-bit-page.hh" 1
# 29 "../harfbuzz-6.0.0/src/hb-bit-page.hh"
#define HB_BIT_PAGE_HH 
# 39 "../harfbuzz-6.0.0/src/hb-bit-page.hh"
template <typename elt_t, unsigned int byte_size>
struct hb_vector_size_t
{
  elt_t& operator [] (unsigned int i) { return v[i]; }
  const elt_t& operator [] (unsigned int i) const { return v[i]; }

  void init0 ()
  {
    for (unsigned int i = 0; i < ARRAY_LENGTH (v); i++)
      v[i] = 0;
  }
  void init1 ()
  {
    for (unsigned int i = 0; i < ARRAY_LENGTH (v); i++)
      v[i] = (elt_t) -1;
  }

  template <typename Op>
  hb_vector_size_t process (const Op& op) const
  {
    hb_vector_size_t r;
    for (unsigned int i = 0; i < ARRAY_LENGTH (v); i++)
      r.v[i] = op (v[i]);
    return r;
  }
  template <typename Op>
  hb_vector_size_t process (const Op& op, const hb_vector_size_t &o) const
  {
    hb_vector_size_t r;
    for (unsigned int i = 0; i < ARRAY_LENGTH (v); i++)
      r.v[i] = op (v[i], o.v[i]);
    return r;
  }
  hb_vector_size_t operator | (const hb_vector_size_t &o) const
  { return process (hb_bitwise_or, o); }
  hb_vector_size_t operator & (const hb_vector_size_t &o) const
  { return process (hb_bitwise_and, o); }
  hb_vector_size_t operator ^ (const hb_vector_size_t &o) const
  { return process (hb_bitwise_xor, o); }
  hb_vector_size_t operator ~ () const
  { return process (hb_bitwise_neg); }

  hb_array_t<const elt_t> iter () const
  { return hb_array (v); }

  private:
  static_assert (0 == byte_size % sizeof (elt_t), "");
  elt_t v[byte_size / sizeof (elt_t)];
};


struct hb_bit_page_t
{
  void init0 () { v.init0 (); }
  void init1 () { v.init1 (); }

  static inline constexpr unsigned len ()
  { return ((signed int) (sizeof (v) / sizeof (v[0]))); }

  bool is_empty () const
  {
    return
    + hb_iter (v)
    | hb_none
    ;
  }
  uint32_t hash () const
  {
    return
    + hb_iter (v)
    | hb_reduce ([] (uint32_t h, const elt_t &_) { return h * 31 + hb_hash (_); }, (uint32_t) 0u)
    ;
  }

  void add (hb_codepoint_t g) { elt (g) |= mask (g); }
  void del (hb_codepoint_t g) { elt (g) &= ~mask (g); }
  void set (hb_codepoint_t g, bool value) { if (value) add (g); else del (g); }
  bool get (hb_codepoint_t g) const { return elt (g) & mask (g); }

  void add_range (hb_codepoint_t a, hb_codepoint_t b)
  {
    elt_t *la = &elt (a);
    elt_t *lb = &elt (b);
    if (la == lb)
      *la |= (mask (b) << 1) - mask(a);
    else
    {
      *la |= ~(mask (a) - 1);
      la++;

      hb_memset (la, 0xff, (char *) lb - (char *) la);

      *lb |= ((mask (b) << 1) - 1);
    }
  }
  void del_range (hb_codepoint_t a, hb_codepoint_t b)
  {
    elt_t *la = &elt (a);
    elt_t *lb = &elt (b);
    if (la == lb)
      *la &= ~((mask (b) << 1) - mask(a));
    else
    {
      *la &= mask (a) - 1;
      la++;

      hb_memset (la, 0, (char *) lb - (char *) la);

      *lb &= ~((mask (b) << 1) - 1);
    }
  }
  void set_range (hb_codepoint_t a, hb_codepoint_t b, bool v)
  { if (v) add_range (a, b); else del_range (a, b); }




  unsigned int write (uint32_t base,
        unsigned int start_value,
        hb_codepoint_t *p,
        unsigned int size) const
  {
    unsigned int start_v = start_value / ELT_BITS;
    unsigned int start_bit = start_value & ELT_MASK;
    unsigned int count = 0;
    for (unsigned i = start_v; i < len () && count < size; i++)
    {
      elt_t bits = v[i];
      uint32_t v_base = base | (i * ELT_BITS);
      for (unsigned int j = start_bit; j < ELT_BITS && count < size; j++)
      {
 if ((elt_t(1) << j) & bits) {
   *p++ = v_base | j;
   count++;
 }
      }
      start_bit = 0;
    }
    return count;
  }







  unsigned int write_inverted (uint32_t base,
          unsigned int start_value,
          hb_codepoint_t *p,
          unsigned int size,
          hb_codepoint_t *next_value) const
  {
    unsigned int start_v = start_value / ELT_BITS;
    unsigned int start_bit = start_value & ELT_MASK;
    unsigned int count = 0;
    for (unsigned i = start_v; i < len () && count < size; i++)
    {
      elt_t bits = v[i];
      uint32_t v_offset = i * ELT_BITS;
      for (unsigned int j = start_bit; j < ELT_BITS && count < size; j++)
      {
 if ((elt_t(1) << j) & bits)
 {
   hb_codepoint_t value = base | v_offset | j;

   for (hb_codepoint_t k = *next_value; k < value && count < size; k++)
   {
     *p++ = k;
     count++;
   }

   *next_value = value + 1;
 }
      }
      start_bit = 0;
    }
    return count;
  }

  bool is_equal (const hb_bit_page_t &other) const
  {
    for (unsigned i = 0; i < len (); i++)
      if (v[i] != other.v[i])
 return false;
    return true;
  }
  bool is_subset (const hb_bit_page_t &larger_page) const
  {
    for (unsigned i = 0; i < len (); i++)
      if (~larger_page.v[i] & v[i])
 return false;
    return true;
  }

  unsigned int get_population () const
  {
    return
    + hb_iter (v)
    | hb_reduce ([] (unsigned pop, const elt_t &_) { return pop + hb_popcount (_); }, 0u)
    ;
  }

  bool next (hb_codepoint_t *codepoint) const
  {
    unsigned int m = (*codepoint + 1) & MASK;
    if (!m)
    {
      *codepoint = INVALID;
      return false;
    }
    unsigned int i = m / ELT_BITS;
    unsigned int j = m & ELT_MASK;

    const elt_t vv = v[i] & ~((elt_t (1) << j) - 1);
    for (const elt_t *p = &vv; i < len (); p = &v[++i])
      if (*p)
      {
 *codepoint = i * ELT_BITS + elt_get_min (*p);
 return true;
      }

    *codepoint = INVALID;
    return false;
  }
  bool previous (hb_codepoint_t *codepoint) const
  {
    unsigned int m = (*codepoint - 1) & MASK;
    if (m == MASK)
    {
      *codepoint = INVALID;
      return false;
    }
    unsigned int i = m / ELT_BITS;
    unsigned int j = m & ELT_MASK;


    const elt_t mask = j < 8 * sizeof (elt_t) - 1 ?
         ((elt_t (1) << (j + 1)) - 1) :
         (elt_t) -1;
    const elt_t vv = v[i] & mask;
    const elt_t *p = &vv;
    while (true)
    {
      if (*p)
      {
 *codepoint = i * ELT_BITS + elt_get_max (*p);
 return true;
      }
      if ((int) i <= 0) break;
      p = &v[--i];
    }

    *codepoint = INVALID;
    return false;
  }
  hb_codepoint_t get_min () const
  {
    for (unsigned int i = 0; i < len (); i++)
      if (v[i])
 return i * ELT_BITS + elt_get_min (v[i]);
    return INVALID;
  }
  hb_codepoint_t get_max () const
  {
    for (int i = len () - 1; i >= 0; i--)
      if (v[i])
 return i * ELT_BITS + elt_get_max (v[i]);
    return 0;
  }

  static constexpr hb_codepoint_t INVALID = ((hb_codepoint_t) -1);

  typedef unsigned long long elt_t;
  static constexpr unsigned PAGE_BITS_LOG_2 = 9;
  static constexpr unsigned PAGE_BITS = 1 << PAGE_BITS_LOG_2;
  static_assert (1 << PAGE_BITS_LOG_2 == PAGE_BITS, "");
  static_assert ((PAGE_BITS & ((PAGE_BITS) - 1)) == 0, "");
  static constexpr unsigned PAGE_BITMASK = PAGE_BITS - 1;

  static unsigned int elt_get_min (const elt_t &elt) { return hb_ctz (elt); }
  static unsigned int elt_get_max (const elt_t &elt) { return hb_bit_storage (elt) - 1; }

  typedef hb_vector_size_t<elt_t, PAGE_BITS / 8> vector_t;

  static constexpr unsigned ELT_BITS = sizeof (elt_t) * 8;
  static constexpr unsigned ELT_MASK = ELT_BITS - 1;

  static constexpr unsigned BITS = sizeof (vector_t) * 8;
  static constexpr unsigned MASK = BITS - 1;
  static_assert ((unsigned) PAGE_BITS == (unsigned) BITS, "");

  elt_t &elt (hb_codepoint_t g) { return v[(g & MASK) / ELT_BITS]; }
  const elt_t& elt (hb_codepoint_t g) const { return v[(g & MASK) / ELT_BITS]; }
  static constexpr elt_t mask (hb_codepoint_t g) { return elt_t (1) << (g & ELT_MASK); }

  vector_t v;
};
static_assert (hb_bit_page_t::PAGE_BITS == sizeof (hb_bit_page_t) * 8, "");
# 33 "../harfbuzz-6.0.0/src/hb-bit-set.hh" 2



struct hb_bit_set_t
{
  hb_bit_set_t () = default;
  ~hb_bit_set_t () = default;

  hb_bit_set_t (const hb_bit_set_t& other) : hb_bit_set_t () { set (other, true); }
  hb_bit_set_t ( hb_bit_set_t&& other) : hb_bit_set_t () { hb_swap (*this, other); }
  hb_bit_set_t& operator= (const hb_bit_set_t& other) { set (other); return *this; }
  hb_bit_set_t& operator= (hb_bit_set_t&& other) { hb_swap (*this, other); return *this; }
  friend void swap (hb_bit_set_t &a, hb_bit_set_t &b)
  {
    if ((__builtin_expect (!!(!a.successful || !b.successful), 1)))
      return;
    hb_swap (a.population, b.population);
    hb_swap (a.last_page_lookup, b.last_page_lookup);
    hb_swap (a.page_map, b.page_map);
    hb_swap (a.pages, b.pages);
  }

  void init ()
  {
    successful = true;
    population = 0;
    last_page_lookup = 0;
    page_map.init ();
    pages.init ();
  }
  void fini ()
  {
    page_map.fini ();
    pages.fini ();
  }

  using page_t = hb_bit_page_t;
  struct page_map_t
  {
    int cmp (const page_map_t &o) const { return cmp (o.major); }
    int cmp (uint32_t o_major) const { return (int) o_major - (int) major; }

    uint32_t major;
    uint32_t index;
  };

  bool successful = true;
  mutable unsigned int population = 0;
  mutable hb_atomic_int_t last_page_lookup = 0;
  hb_sorted_vector_t<page_map_t> page_map;
  hb_vector_t<page_t> pages;

  void err () { if (successful) successful = false; }
  bool in_error () const { return !successful; }

  bool resize (unsigned int count, bool clear = true, bool exact_size = false)
  {
    if ((__builtin_expect (!!(!successful), 0))) return false;

    if (pages.length == 0 && count == 1)
      exact_size = true;

    if ((__builtin_expect (!!(!pages.resize (count, clear, exact_size) || !page_map.resize (count, clear, exact_size)), 0)))
    {
      pages.resize (page_map.length, clear, exact_size);
      successful = false;
      return false;
    }
    return true;
  }

  void alloc (unsigned sz)
  {
    sz >>= (page_t::PAGE_BITS_LOG_2 - 1);
    pages.alloc (sz);
    page_map.alloc (sz);
  }

  void reset ()
  {
    successful = true;
    clear ();
  }

  void clear ()
  {
    resize (0);
    if ((__builtin_expect (!!(successful), 1)))
      population = 0;
  }
  bool is_empty () const
  {
    unsigned int count = pages.length;
    for (unsigned int i = 0; i < count; i++)
      if (!pages[i].is_empty ())
 return false;
    return true;
  }
  explicit operator bool () const { return !is_empty (); }

  uint32_t hash () const
  {
    uint32_t h = 0;
    for (auto &map : page_map)
      h = h * 31 + hb_hash (map.major) + hb_hash (pages[map.index]);
    return h;
  }

  private:
  void dirty () { population = 
# 142 "../harfbuzz-6.0.0/src/hb-bit-set.hh" 3 4
                              (0x7fffffff * 2U + 1U)
# 142 "../harfbuzz-6.0.0/src/hb-bit-set.hh"
                                      ; }
  public:

  void add (hb_codepoint_t g)
  {
    if ((__builtin_expect (!!(!successful), 0))) return;
    if ((__builtin_expect (!!(g == INVALID), 0))) return;
    dirty ();
    page_t *page = page_for (g, true); if ((__builtin_expect (!!(!page), 0))) return;
    page->add (g);
  }
  bool add_range (hb_codepoint_t a, hb_codepoint_t b)
  {
    if ((__builtin_expect (!!(!successful), 0))) return true;
    if ((__builtin_expect (!!(a > b || a == INVALID || b == INVALID), 0))) return false;
    dirty ();
    unsigned int ma = get_major (a);
    unsigned int mb = get_major (b);
    if (ma == mb)
    {
      page_t *page = page_for (a, true); if ((__builtin_expect (!!(!page), 0))) return false;
      page->add_range (a, b);
    }
    else
    {
      page_t *page = page_for (a, true); if ((__builtin_expect (!!(!page), 0))) return false;
      page->add_range (a, major_start (ma + 1) - 1);

      for (unsigned int m = ma + 1; m < mb; m++)
      {
 page = page_for (major_start (m), true); if ((__builtin_expect (!!(!page), 0))) return false;
 page->init1 ();
      }

      page = page_for (b, true); if ((__builtin_expect (!!(!page), 0))) return false;
      page->add_range (major_start (mb), b);
    }
    return true;
  }

  template <typename T>
  void set_array (bool v, const T *array, unsigned int count, unsigned int stride=sizeof(T))
  {
    if ((__builtin_expect (!!(!successful), 0))) return;
    if (!count) return;
    dirty ();
    hb_codepoint_t g = *array;
    while (count)
    {
      unsigned int m = get_major (g);
      page_t *page = page_for (g, v); if ((__builtin_expect (!!(v && !page), 0))) return;
      unsigned int start = major_start (m);
      unsigned int end = major_start (m + 1);
      do
      {
        if (v || page)
   page->set (g, v);

 array = &StructAtOffsetUnaligned<T> (array, stride);
 count--;
      }
      while (count && (g = *array, start <= g && g < end));
    }
  }

  template <typename T>
  void add_array (const T *array, unsigned int count, unsigned int stride=sizeof(T))
  { set_array (true, array, count, stride); }
  template <typename T>
  void add_array (const hb_array_t<const T>& arr) { add_array (&arr, arr.len ()); }

  template <typename T>
  void del_array (const T *array, unsigned int count, unsigned int stride=sizeof(T))
  { set_array (false, array, count, stride); }
  template <typename T>
  void del_array (const hb_array_t<const T>& arr) { del_array (&arr, arr.len ()); }



  template <typename T>
  bool set_sorted_array (bool v, const T *array, unsigned int count, unsigned int stride=sizeof(T))
  {
    if ((__builtin_expect (!!(!successful), 0))) return true;
    if ((__builtin_expect (!!(!count), 0))) return true;
    dirty ();
    hb_codepoint_t g = *array;
    hb_codepoint_t last_g = g;
    while (count)
    {
      unsigned int m = get_major (g);
      page_t *page = page_for (g, v); if ((__builtin_expect (!!(v && !page), 0))) return false;
      unsigned int end = major_start (m + 1);
      do
      {


 if (g < last_g) return false;
 last_g = g;

        if (v || page)
   page->add (g);

 array = &StructAtOffsetUnaligned<T> (array, stride);
 count--;
      }
      while (count && (g = *array, g < end));
    }
    return true;
  }

  template <typename T>
  bool add_sorted_array (const T *array, unsigned int count, unsigned int stride=sizeof(T))
  { return set_sorted_array (true, array, count, stride); }
  template <typename T>
  bool add_sorted_array (const hb_sorted_array_t<const T>& arr) { return add_sorted_array (&arr, arr.len ()); }

  template <typename T>
  bool del_sorted_array (const T *array, unsigned int count, unsigned int stride=sizeof(T))
  { return set_sorted_array (false, array, count, stride); }
  template <typename T>
  bool del_sorted_array (const hb_sorted_array_t<const T>& arr) { return del_sorted_array (&arr, arr.len ()); }

  void del (hb_codepoint_t g)
  {
    if ((__builtin_expect (!!(!successful), 0))) return;
    page_t *page = page_for (g);
    if (!page)
      return;
    dirty ();
    page->del (g);
  }

  private:
  void del_pages (int ds, int de)
  {
    if (ds <= de)
    {


      hb_vector_t<unsigned> compact_workspace;
      if ((__builtin_expect (!!(!allocate_compact_workspace (compact_workspace)), 0))) return;

      unsigned int write_index = 0;
      for (unsigned int i = 0; i < page_map.length; i++)
      {
 int m = (int) page_map[i].major;
 if (m < ds || de < m)
   page_map[write_index++] = page_map[i];
      }
      compact (compact_workspace, write_index);
      resize (write_index);
    }
  }


  public:
  void del_range (hb_codepoint_t a, hb_codepoint_t b)
  {
    if ((__builtin_expect (!!(!successful), 0))) return;
    if ((__builtin_expect (!!(a > b || a == INVALID), 0))) return;
    dirty ();
    unsigned int ma = get_major (a);
    unsigned int mb = get_major (b);

    int ds = (a == major_start (ma))? (int) ma: (int) (ma + 1);
    int de = (b + 1 == major_start (mb + 1))? (int) mb: ((int) mb - 1);
    if (ds > de || (int) ma < ds)
    {
      page_t *page = page_for (a);
      if (page)
      {
 if (ma == mb)
   page->del_range (a, b);
 else
   page->del_range (a, major_start (ma + 1) - 1);
      }
    }
    if (de < (int) mb && ma != mb)
    {
      page_t *page = page_for (b);
      if (page)
 page->del_range (major_start (mb), b);
    }
    del_pages (ds, de);
  }

  bool get (hb_codepoint_t g) const
  {
    const page_t *page = page_for (g);
    if (!page)
      return false;
    return page->get (g);
  }


  bool operator [] (hb_codepoint_t k) const { return get (k); }
  bool has (hb_codepoint_t k) const { return (*this)[k]; }

  bool operator () (hb_codepoint_t k) const { return has (k); }


  hb_bit_set_t& operator << (hb_codepoint_t v)
  { add (v); return *this; }
  hb_bit_set_t& operator << (const hb_pair_t<hb_codepoint_t, hb_codepoint_t>& range)
  { add_range (range.first, range.second); return *this; }

  bool intersects (hb_codepoint_t first, hb_codepoint_t last) const
  {
    hb_codepoint_t c = first - 1;
    return next (&c) && c <= last;
  }
  void set (const hb_bit_set_t &other, bool exact_size = false)
  {
    if ((__builtin_expect (!!(!successful), 0))) return;
    unsigned int count = other.pages.length;
    if ((__builtin_expect (!!(!resize (count, false, exact_size)), 0)))
      return;
    population = other.population;

    page_map = other.page_map;
    pages = other.pages;
  }

  bool is_equal (const hb_bit_set_t &other) const
  {
    if (has_population () && other.has_population () &&
 population != other.population)
      return false;

    unsigned int na = pages.length;
    unsigned int nb = other.pages.length;

    unsigned int a = 0, b = 0;
    for (; a < na && b < nb; )
    {
      if (page_at (a).is_empty ()) { a++; continue; }
      if (other.page_at (b).is_empty ()) { b++; continue; }
      if (page_map[a].major != other.page_map[b].major ||
   !page_at (a).is_equal (other.page_at (b)))
 return false;
      a++;
      b++;
    }
    for (; a < na; a++)
      if (!page_at (a).is_empty ()) { return false; }
    for (; b < nb; b++)
      if (!other.page_at (b).is_empty ()) { return false; }

    return true;
  }

  bool is_subset (const hb_bit_set_t &larger_set) const
  {
    if (has_population () && larger_set.has_population () &&
 population > larger_set.population)
      return false;

    uint32_t spi = 0;
    for (uint32_t lpi = 0; spi < page_map.length && lpi < larger_set.page_map.length; lpi++)
    {
      uint32_t spm = page_map[spi].major;
      uint32_t lpm = larger_set.page_map[lpi].major;
      auto sp = page_at (spi);
      auto lp = larger_set.page_at (lpi);

      if (spm < lpm && !sp.is_empty ())
        return false;

      if (lpm < spm)
        continue;

      if (!sp.is_subset (lp))
        return false;

      spi++;
    }

    while (spi < page_map.length)
      if (!page_at (spi++).is_empty ())
        return false;

    return true;
  }

  private:
  bool allocate_compact_workspace (hb_vector_t<unsigned>& workspace)
  {
    if ((__builtin_expect (!!(!workspace.resize_exact (pages.length)), 0)))
    {
      successful = false;
      return false;
    }

    return true;
  }





  void compact (hb_vector_t<unsigned>& workspace,
                unsigned int length)
  {
    
# 445 "../harfbuzz-6.0.0/src/hb-bit-set.hh" 3 4
   (static_cast <bool> (
# 445 "../harfbuzz-6.0.0/src/hb-bit-set.hh"
   workspace.length == pages.length
# 445 "../harfbuzz-6.0.0/src/hb-bit-set.hh" 3 4
   ) ? void (0) : __assert_fail (
# 445 "../harfbuzz-6.0.0/src/hb-bit-set.hh"
   "workspace.length == pages.length"
# 445 "../harfbuzz-6.0.0/src/hb-bit-set.hh" 3 4
   , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-bit-set.hh", 445, __extension__ __PRETTY_FUNCTION__))
# 445 "../harfbuzz-6.0.0/src/hb-bit-set.hh"
                                           ;
    hb_vector_t<unsigned>& old_index_to_page_map_index = workspace;

    hb_fill (old_index_to_page_map_index.writer(), 0xFFFFFFFF);
    for (unsigned i = 0; i < length; i++)
      old_index_to_page_map_index[page_map[i].index] = i;

    compact_pages (old_index_to_page_map_index);
  }
  void compact_pages (const hb_vector_t<unsigned>& old_index_to_page_map_index)
  {
    unsigned int write_index = 0;
    for (unsigned int i = 0; i < pages.length; i++)
    {
      if (old_index_to_page_map_index[i] == 0xFFFFFFFF) continue;

      if (write_index < i)
 pages[write_index] = pages[i];

      page_map[old_index_to_page_map_index[i]].index = write_index;
      write_index++;
    }
  }
  public:

  void process_ (hb_bit_page_t::vector_t (*op) (const hb_bit_page_t::vector_t &, const hb_bit_page_t::vector_t &),
   bool passthru_left, bool passthru_right,
   const hb_bit_set_t &other)
  {
    if ((__builtin_expect (!!(!successful), 0))) return;

    dirty ();

    unsigned int na = pages.length;
    unsigned int nb = other.pages.length;
    unsigned int next_page = na;

    unsigned int count = 0, newCount = 0;
    unsigned int a = 0, b = 0;
    unsigned int write_index = 0;



    hb_vector_t<unsigned> compact_workspace;
    if (!passthru_left && (__builtin_expect (!!(!allocate_compact_workspace (compact_workspace)), 0))) return;

    for (; a < na && b < nb; )
    {
      if (page_map[a].major == other.page_map[b].major)
      {
 if (!passthru_left)
 {




   if (write_index < a)
     page_map[write_index] = page_map[a];
   write_index++;
 }

 count++;
 a++;
 b++;
      }
      else if (page_map[a].major < other.page_map[b].major)
      {
 if (passthru_left)
   count++;
 a++;
      }
      else
      {
 if (passthru_right)
   count++;
 b++;
      }
    }
    if (passthru_left)
      count += na - a;
    if (passthru_right)
      count += nb - b;

    if (!passthru_left)
    {
      na = write_index;
      next_page = write_index;
      compact (compact_workspace, write_index);
    }

    if ((__builtin_expect (!!(!resize (count)), 0)))
      return;

    newCount = count;


    a = na;
    b = nb;
    for (; a && b; )
    {
      if (page_map.arrayZ[a - 1].major == other.page_map.arrayZ[b - 1].major)
      {
 a--;
 b--;
 count--;
 page_map.arrayZ[count] = page_map.arrayZ[a];
 page_at (count).v = op (page_at (a).v, other.page_at (b).v);
      }
      else if (page_map.arrayZ[a - 1].major > other.page_map.arrayZ[b - 1].major)
      {
 a--;
 if (passthru_left)
 {
   count--;
   page_map.arrayZ[count] = page_map.arrayZ[a];
 }
      }
      else
      {
 b--;
 if (passthru_right)
 {
   count--;
   page_map.arrayZ[count].major = other.page_map.arrayZ[b].major;
   page_map.arrayZ[count].index = next_page++;
   page_at (count).v = other.page_at (b).v;
 }
      }
    }
    if (passthru_left)
      while (a)
      {
 a--;
 count--;
 page_map.arrayZ[count] = page_map.arrayZ[a];
      }
    if (passthru_right)
      while (b)
      {
 b--;
 count--;
 page_map.arrayZ[count].major = other.page_map.arrayZ[b].major;
 page_map.arrayZ[count].index = next_page++;
 page_at (count).v = other.page_at (b).v;
      }
    
# 590 "../harfbuzz-6.0.0/src/hb-bit-set.hh" 3 4
   (static_cast <bool> (
# 590 "../harfbuzz-6.0.0/src/hb-bit-set.hh"
   !count
# 590 "../harfbuzz-6.0.0/src/hb-bit-set.hh" 3 4
   ) ? void (0) : __assert_fail (
# 590 "../harfbuzz-6.0.0/src/hb-bit-set.hh"
   "!count"
# 590 "../harfbuzz-6.0.0/src/hb-bit-set.hh" 3 4
   , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-bit-set.hh", 590, __extension__ __PRETTY_FUNCTION__))
# 590 "../harfbuzz-6.0.0/src/hb-bit-set.hh"
                  ;
    resize (newCount);
  }
  template <typename Op>
  static hb_bit_page_t::vector_t
  op_ (const hb_bit_page_t::vector_t &a, const hb_bit_page_t::vector_t &b)
  { return Op{} (a, b); }
  template <typename Op>
  void process (const Op& op, const hb_bit_set_t &other)
  {
    process_ (op_<Op>, op (1, 0), op (0, 1), other);
  }

  void union_ (const hb_bit_set_t &other) { process (hb_bitwise_or, other); }
  void intersect (const hb_bit_set_t &other) { process (hb_bitwise_and, other); }
  void subtract (const hb_bit_set_t &other) { process (hb_bitwise_gt, other); }
  void symmetric_difference (const hb_bit_set_t &other) { process (hb_bitwise_xor, other); }

  bool next (hb_codepoint_t *codepoint) const
  {
    if ((__builtin_expect (!!(*codepoint == INVALID), 0))) {
      *codepoint = get_min ();
      return *codepoint != INVALID;
    }

    const auto* page_map_array = page_map.arrayZ;
    unsigned int major = get_major (*codepoint);
    unsigned int i = last_page_lookup;

    if ((__builtin_expect (!!(i >= page_map.length || page_map_array[i].major != major), 0)))
    {
      page_map.bfind (major, &i, HB_NOT_FOUND_STORE_CLOSEST);
      if (i >= page_map.length) {
        *codepoint = INVALID;
        return false;
      }
    }

    const auto* pages_array = pages.arrayZ;
    const page_map_t &current = page_map_array[i];
    if ((__builtin_expect (!!(current.major == major), 1)))
    {
      if (pages_array[current.index].next (codepoint))
      {
        *codepoint += current.major * page_t::PAGE_BITS;
        last_page_lookup = i;
        return true;
      }
      i++;
    }

    for (; i < page_map.length; i++)
    {
      const page_map_t &current = page_map_array[i];
      hb_codepoint_t m = pages_array[current.index].get_min ();
      if (m != INVALID)
      {
 *codepoint = current.major * page_t::PAGE_BITS + m;
        last_page_lookup = i;
 return true;
      }
    }
    last_page_lookup = 0;
    *codepoint = INVALID;
    return false;
  }
  bool previous (hb_codepoint_t *codepoint) const
  {
    if ((__builtin_expect (!!(*codepoint == INVALID), 0))) {
      *codepoint = get_max ();
      return *codepoint != INVALID;
    }

    page_map_t map = {get_major (*codepoint), 0};
    unsigned int i;
    page_map.bfind (map, &i, HB_NOT_FOUND_STORE_CLOSEST);
    if (i < page_map.length && page_map.arrayZ[i].major == map.major)
    {
      if (pages[page_map.arrayZ[i].index].previous (codepoint))
      {
 *codepoint += page_map.arrayZ[i].major * page_t::PAGE_BITS;
 return true;
      }
    }
    i--;
    for (; (int) i >= 0; i--)
    {
      hb_codepoint_t m = pages.arrayZ[page_map.arrayZ[i].index].get_max ();
      if (m != INVALID)
      {
 *codepoint = page_map.arrayZ[i].major * page_t::PAGE_BITS + m;
 return true;
      }
    }
    *codepoint = INVALID;
    return false;
  }
  bool next_range (hb_codepoint_t *first, hb_codepoint_t *last) const
  {
    hb_codepoint_t i;

    i = *last;
    if (!next (&i))
    {
      *last = *first = INVALID;
      return false;
    }


    *last = *first = i;
    while (next (&i) && i == *last + 1)
      (*last)++;

    return true;
  }
  bool previous_range (hb_codepoint_t *first, hb_codepoint_t *last) const
  {
    hb_codepoint_t i;

    i = *first;
    if (!previous (&i))
    {
      *last = *first = INVALID;
      return false;
    }


    *last = *first = i;
    while (previous (&i) && i == *first - 1)
      (*first)--;

    return true;
  }

  unsigned int next_many (hb_codepoint_t codepoint,
     hb_codepoint_t *out,
     unsigned int size) const
  {

    unsigned int start_page = 0;
    unsigned int start_page_value = 0;
    if ((__builtin_expect (!!(codepoint != INVALID), 0)))
    {
      const auto* page_map_array = page_map.arrayZ;
      unsigned int major = get_major (codepoint);
      unsigned int i = last_page_lookup;
      if ((__builtin_expect (!!(i >= page_map.length || page_map_array[i].major != major), 0)))
      {
 page_map.bfind (major, &i, HB_NOT_FOUND_STORE_CLOSEST);
 if (i >= page_map.length)
   return 0;
      }
      start_page = i;
      start_page_value = page_remainder (codepoint + 1);
      if ((__builtin_expect (!!(start_page_value == 0), 0)))
      {

        start_page++;
        start_page_value = 0;
      }
    }

    unsigned int initial_size = size;
    for (unsigned int i = start_page; i < page_map.length && size; i++)
    {
      uint32_t base = major_start (page_map[i].major);
      unsigned int n = pages[page_map[i].index].write (base, start_page_value, out, size);
      out += n;
      size -= n;
      start_page_value = 0;
    }
    return initial_size - size;
  }

  unsigned int next_many_inverted (hb_codepoint_t codepoint,
       hb_codepoint_t *out,
       unsigned int size) const
  {
    unsigned int initial_size = size;

    unsigned int start_page = 0;
    unsigned int start_page_value = 0;
    if ((__builtin_expect (!!(codepoint != INVALID), 0)))
    {
      const auto* page_map_array = page_map.arrayZ;
      unsigned int major = get_major (codepoint);
      unsigned int i = last_page_lookup;
      if ((__builtin_expect (!!(i >= page_map.length || page_map_array[i].major != major), 0)))
      {
        page_map.bfind(major, &i, HB_NOT_FOUND_STORE_CLOSEST);
        if ((__builtin_expect (!!(i >= page_map.length), 0)))
        {

          while (++codepoint != INVALID && size)
          {
            *out++ = codepoint;
            size--;
          }
          return initial_size - size;
        }
      }
      start_page = i;
      start_page_value = page_remainder (codepoint + 1);
      if ((__builtin_expect (!!(start_page_value == 0), 0)))
      {

        start_page++;
        start_page_value = 0;
      }
    }

    hb_codepoint_t next_value = codepoint + 1;
    for (unsigned int i=start_page; i<page_map.length && size; i++)
    {
      uint32_t base = major_start (page_map[i].major);
      unsigned int n = pages[page_map[i].index].write_inverted (base, start_page_value, out, size, &next_value);
      out += n;
      size -= n;
      start_page_value = 0;
    }
    while (next_value < ((hb_codepoint_t) -1) && size) {
      *out++ = next_value++;
      size--;
    }
    return initial_size - size;
  }

  bool has_population () const { return population != 
# 817 "../harfbuzz-6.0.0/src/hb-bit-set.hh" 3 4
                                                     (0x7fffffff * 2U + 1U)
# 817 "../harfbuzz-6.0.0/src/hb-bit-set.hh"
                                                             ; }
  unsigned int get_population () const
  {
    if (has_population ())
      return population;

    unsigned int pop = 0;
    unsigned int count = pages.length;
    for (unsigned int i = 0; i < count; i++)
      pop += pages[i].get_population ();

    population = pop;
    return pop;
  }
  hb_codepoint_t get_min () const
  {
    unsigned count = pages.length;
    for (unsigned i = 0; i < count; i++)
    {
      const auto& map = page_map[i];
      const auto& page = pages[map.index];

      if (!page.is_empty ())
 return map.major * page_t::PAGE_BITS + page.get_min ();
    }
    return INVALID;
  }
  hb_codepoint_t get_max () const
  {
    unsigned count = pages.length;
    for (signed i = count - 1; i >= 0; i--)
    {
      const auto& map = page_map[(unsigned) i];
      const auto& page = pages[map.index];

      if (!page.is_empty ())
 return map.major * page_t::PAGE_BITS + page.get_max ();
    }
    return INVALID;
  }

  static constexpr hb_codepoint_t INVALID = page_t::INVALID;




  struct iter_t : hb_iter_with_fallback_t<iter_t, hb_codepoint_t>
  {
    static constexpr bool is_sorted_iterator = true;
    iter_t (const hb_bit_set_t &s_ = NullHelper<hb_bit_set_t>::get_null (),
     bool init = true) : s (&s_), v (INVALID), l(0)
    {
      if (init)
      {
 l = s->get_population () + 1;
 __next__ ();
      }
    }

    typedef hb_codepoint_t __item_t__;
    hb_codepoint_t __item__ () const { return v; }
    bool __more__ () const { return v != INVALID; }
    void __next__ () { s->next (&v); if (l) l--; }
    void __prev__ () { s->previous (&v); }
    unsigned __len__ () const { return l; }
    iter_t end () const { return iter_t (*s, false); }
    bool operator != (const iter_t& o) const
    { return s != o.s || v != o.v; }

    protected:
    const hb_bit_set_t *s;
    hb_codepoint_t v;
    unsigned l;
  };
  iter_t iter () const { return iter_t (*this); }
  operator iter_t () const { return iter (); }

  protected:

  page_t *page_for (hb_codepoint_t g, bool insert = false)
  {
    unsigned major = get_major (g);




    unsigned i = last_page_lookup;
    if ((__builtin_expect (!!(i < page_map.length), 1)))
    {
      auto &cached_page = page_map.arrayZ[i];
      if (cached_page.major == major)
 return &pages.arrayZ[cached_page.index];
    }

    page_map_t map = {major, pages.length};
    if (!page_map.bfind (map, &i, HB_NOT_FOUND_STORE_CLOSEST))
    {
      if (!insert)
        return nullptr;

      if ((__builtin_expect (!!(!resize (pages.length + 1)), 0)))
 return nullptr;

      pages.arrayZ[map.index].init0 ();
      memmove (page_map.arrayZ + i + 1,
        page_map.arrayZ + i,
        (page_map.length - 1 - i) * page_map.item_size);
      page_map[i] = map;
    }

    last_page_lookup = i;
    return &pages.arrayZ[page_map.arrayZ[i].index];
  }
  const page_t *page_for (hb_codepoint_t g) const
  {
    unsigned major = get_major (g);




    unsigned i = last_page_lookup;
    if ((__builtin_expect (!!(i < page_map.length), 1)))
    {
      auto &cached_page = page_map.arrayZ[i];
      if (cached_page.major == major)
 return &pages.arrayZ[cached_page.index];
    }

    page_map_t key = {major};
    if (!page_map.bfind (key, &i))
      return nullptr;

    last_page_lookup = i;
    return &pages.arrayZ[page_map[i].index];
  }
  page_t &page_at (unsigned int i)
  {
    
# 954 "../harfbuzz-6.0.0/src/hb-bit-set.hh" 3 4
   (static_cast <bool> (
# 954 "../harfbuzz-6.0.0/src/hb-bit-set.hh"
   i < page_map.length
# 954 "../harfbuzz-6.0.0/src/hb-bit-set.hh" 3 4
   ) ? void (0) : __assert_fail (
# 954 "../harfbuzz-6.0.0/src/hb-bit-set.hh"
   "i < page_map.length"
# 954 "../harfbuzz-6.0.0/src/hb-bit-set.hh" 3 4
   , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-bit-set.hh", 954, __extension__ __PRETTY_FUNCTION__))
# 954 "../harfbuzz-6.0.0/src/hb-bit-set.hh"
                               ;
    return pages.arrayZ[page_map.arrayZ[i].index];
  }
  const page_t &page_at (unsigned int i) const
  {
    
# 959 "../harfbuzz-6.0.0/src/hb-bit-set.hh" 3 4
   (static_cast <bool> (
# 959 "../harfbuzz-6.0.0/src/hb-bit-set.hh"
   i < page_map.length
# 959 "../harfbuzz-6.0.0/src/hb-bit-set.hh" 3 4
   ) ? void (0) : __assert_fail (
# 959 "../harfbuzz-6.0.0/src/hb-bit-set.hh"
   "i < page_map.length"
# 959 "../harfbuzz-6.0.0/src/hb-bit-set.hh" 3 4
   , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-bit-set.hh", 959, __extension__ __PRETTY_FUNCTION__))
# 959 "../harfbuzz-6.0.0/src/hb-bit-set.hh"
                               ;
    return pages.arrayZ[page_map.arrayZ[i].index];
  }
  unsigned int get_major (hb_codepoint_t g) const { return g >> page_t::PAGE_BITS_LOG_2; }
  unsigned int page_remainder (hb_codepoint_t g) const { return g & page_t::PAGE_BITMASK; }
  hb_codepoint_t major_start (unsigned int major) const { return major << page_t::PAGE_BITS_LOG_2; }
};
# 33 "../harfbuzz-6.0.0/src/hb-bit-set-invertible.hh" 2


struct hb_bit_set_invertible_t
{
  hb_bit_set_t s;
  bool inverted = false;

  hb_bit_set_invertible_t () = default;
  hb_bit_set_invertible_t (const hb_bit_set_invertible_t& o) = default;
  hb_bit_set_invertible_t (hb_bit_set_invertible_t&& other) : hb_bit_set_invertible_t () { hb_swap (*this, other); }
  hb_bit_set_invertible_t& operator= (const hb_bit_set_invertible_t& o) = default;
  hb_bit_set_invertible_t& operator= (hb_bit_set_invertible_t&& other) { hb_swap (*this, other); return *this; }
  friend void swap (hb_bit_set_invertible_t &a, hb_bit_set_invertible_t &b)
  {
    if ((__builtin_expect (!!(!a.s.successful || !b.s.successful), 1)))
      return;
    hb_swap (a.inverted, b.inverted);
    hb_swap (a.s, b.s);
  }

  void init () { s.init (); inverted = false; }
  void fini () { s.fini (); }
  void err () { s.err (); }
  bool in_error () const { return s.in_error (); }
  explicit operator bool () const { return !is_empty (); }

  void alloc (unsigned sz) { s.alloc (sz); }
  void reset ()
  {
    s.reset ();
    inverted = false;
  }
  void clear ()
  {
    s.clear ();
    if ((__builtin_expect (!!(s.successful), 1)))
      inverted = false;
  }
  void invert ()
  {
    if ((__builtin_expect (!!(s.successful), 1)))
      inverted = !inverted;
  }

  bool is_inverted () const
  {
    return inverted;
  }

  bool is_empty () const
  {
    hb_codepoint_t v = INVALID;
    next (&v);
    return v == INVALID;
  }
  uint32_t hash () const { return s.hash () ^ (uint32_t) inverted; }

  hb_codepoint_t get_min () const
  {
    hb_codepoint_t v = INVALID;
    next (&v);
    return v;
  }
  hb_codepoint_t get_max () const
  {
    hb_codepoint_t v = INVALID;
    previous (&v);
    return v;
  }
  unsigned int get_population () const
  { return inverted ? INVALID - s.get_population () : s.get_population (); }


  void add (hb_codepoint_t g) { (__builtin_expect (!!(inverted), 0)) ? s.del (g) : s.add (g); }
  bool add_range (hb_codepoint_t a, hb_codepoint_t b)
  { return (__builtin_expect (!!(inverted), 0)) ? ((void) s.del_range (a, b), true) : s.add_range (a, b); }

  template <typename T>
  void add_array (const T *array, unsigned int count, unsigned int stride=sizeof(T))
  { inverted ? s.del_array (array, count, stride) : s.add_array (array, count, stride); }
  template <typename T>
  void add_array (const hb_array_t<const T>& arr) { add_array (&arr, arr.len ()); }



  template <typename T>
  bool add_sorted_array (const T *array, unsigned int count, unsigned int stride=sizeof(T))
  { return inverted ? s.del_sorted_array (array, count, stride) : s.add_sorted_array (array, count, stride); }
  template <typename T>
  bool add_sorted_array (const hb_sorted_array_t<const T>& arr) { return add_sorted_array (&arr, arr.len ()); }

  void del (hb_codepoint_t g) { (__builtin_expect (!!(inverted), 0)) ? s.add (g) : s.del (g); }
  void del_range (hb_codepoint_t a, hb_codepoint_t b)
  { (__builtin_expect (!!(inverted), 0)) ? (void) s.add_range (a, b) : s.del_range (a, b); }

  bool get (hb_codepoint_t g) const { return s.get (g) ^ inverted; }


  bool operator [] (hb_codepoint_t k) const { return get (k); }
  bool has (hb_codepoint_t k) const { return (*this)[k]; }

  bool operator () (hb_codepoint_t k) const { return has (k); }


  hb_bit_set_invertible_t& operator << (hb_codepoint_t v)
  { add (v); return *this; }
  hb_bit_set_invertible_t& operator << (const hb_pair_t<hb_codepoint_t, hb_codepoint_t>& range)
  { add_range (range.first, range.second); return *this; }

  bool intersects (hb_codepoint_t first, hb_codepoint_t last) const
  {
    hb_codepoint_t c = first - 1;
    return next (&c) && c <= last;
  }

  void set (const hb_bit_set_invertible_t &other)
  {
    s.set (other.s);
    if ((__builtin_expect (!!(s.successful), 1)))
      inverted = other.inverted;
  }

  bool is_equal (const hb_bit_set_invertible_t &other) const
  {
    if ((__builtin_expect (!!(inverted == other.inverted), 1)))
      return s.is_equal (other.s);
    else
    {

      auto it1 = iter ();
      auto it2 = other.iter ();
      return hb_all (+ hb_zip (it1, it2)
       | hb_map ([](hb_pair_t<hb_codepoint_t, hb_codepoint_t> _) { return _.first == _.second; }));
    }
  }

  bool is_subset (const hb_bit_set_invertible_t &larger_set) const
  {
    if ((__builtin_expect (!!(inverted != larger_set.inverted), 0)))
      return hb_all (hb_iter (s) | hb_map (larger_set.s));
    else
      return (__builtin_expect (!!(inverted), 0)) ? larger_set.s.is_subset (s) : s.is_subset (larger_set.s);
  }

  protected:
  template <typename Op>
  void process (const Op& op, const hb_bit_set_invertible_t &other)
  { s.process (op, other.s); }
  public:
  void union_ (const hb_bit_set_invertible_t &other)
  {
    if ((__builtin_expect (!!(inverted == other.inverted), 1)))
    {
      if ((__builtin_expect (!!(inverted), 0)))
 process (hb_bitwise_and, other);
      else
 process (hb_bitwise_or, other);
    }
    else
    {
      if ((__builtin_expect (!!(inverted), 0)))
 process (hb_bitwise_gt, other);
      else
 process (hb_bitwise_lt, other);
    }
    if ((__builtin_expect (!!(s.successful), 1)))
      inverted = inverted || other.inverted;
  }
  void intersect (const hb_bit_set_invertible_t &other)
  {
    if ((__builtin_expect (!!(inverted == other.inverted), 1)))
    {
      if ((__builtin_expect (!!(inverted), 0)))
 process (hb_bitwise_or, other);
      else
 process (hb_bitwise_and, other);
    }
    else
    {
      if ((__builtin_expect (!!(inverted), 0)))
 process (hb_bitwise_lt, other);
      else
 process (hb_bitwise_gt, other);
    }
    if ((__builtin_expect (!!(s.successful), 1)))
      inverted = inverted && other.inverted;
  }
  void subtract (const hb_bit_set_invertible_t &other)
  {
    if ((__builtin_expect (!!(inverted == other.inverted), 1)))
    {
      if ((__builtin_expect (!!(inverted), 0)))
 process (hb_bitwise_lt, other);
      else
 process (hb_bitwise_gt, other);
    }
    else
    {
      if ((__builtin_expect (!!(inverted), 0)))
 process (hb_bitwise_or, other);
      else
 process (hb_bitwise_and, other);
    }
    if ((__builtin_expect (!!(s.successful), 1)))
      inverted = inverted && !other.inverted;
  }
  void symmetric_difference (const hb_bit_set_invertible_t &other)
  {
    process (hb_bitwise_xor, other);
    if ((__builtin_expect (!!(s.successful), 1)))
      inverted = inverted ^ other.inverted;
  }

  bool next (hb_codepoint_t *codepoint) const
  {
    if ((__builtin_expect (!!(!inverted), 1)))
      return s.next (codepoint);

    auto old = *codepoint;
    if ((__builtin_expect (!!(old + 1 == INVALID), 0)))
    {
      *codepoint = INVALID;
      return false;
    }

    auto v = old;
    s.next (&v);
    if (old + 1 < v)
    {
      *codepoint = old + 1;
      return true;
    }

    v = old;
    s.next_range (&old, &v);

    *codepoint = v + 1;
    return *codepoint != INVALID;
  }
  bool previous (hb_codepoint_t *codepoint) const
  {
    if ((__builtin_expect (!!(!inverted), 1)))
      return s.previous (codepoint);

    auto old = *codepoint;
    if ((__builtin_expect (!!(old - 1 == INVALID), 0)))
    {
      *codepoint = INVALID;
      return false;
    }

    auto v = old;
    s.previous (&v);

    if (old - 1 > v || v == INVALID)
    {
      *codepoint = old - 1;
      return true;
    }

    v = old;
    s.previous_range (&v, &old);

    *codepoint = v - 1;
    return *codepoint != INVALID;
  }
  bool next_range (hb_codepoint_t *first, hb_codepoint_t *last) const
  {
    if ((__builtin_expect (!!(!inverted), 1)))
      return s.next_range (first, last);

    if (!next (last))
    {
      *last = *first = INVALID;
      return false;
    }

    *first = *last;
    s.next (last);
    --*last;
    return true;
  }
  bool previous_range (hb_codepoint_t *first, hb_codepoint_t *last) const
  {
    if ((__builtin_expect (!!(!inverted), 1)))
      return s.previous_range (first, last);

    if (!previous (first))
    {
      *last = *first = INVALID;
      return false;
    }

    *last = *first;
    s.previous (first);
    ++*first;
    return true;
  }

  unsigned int next_many (hb_codepoint_t codepoint,
     hb_codepoint_t *out,
     unsigned int size) const
  {
    return inverted ? s.next_many_inverted (codepoint, out, size)
      : s.next_many (codepoint, out, size);
  }

  static constexpr hb_codepoint_t INVALID = hb_bit_set_t::INVALID;




  struct iter_t : hb_iter_with_fallback_t<iter_t, hb_codepoint_t>
  {
    static constexpr bool is_sorted_iterator = true;
    iter_t (const hb_bit_set_invertible_t &s_ = NullHelper<hb_bit_set_invertible_t>::get_null (),
     bool init = true) : s (&s_), v (INVALID), l(0)
    {
      if (init)
      {
 l = s->get_population () + 1;
 __next__ ();
      }
    }

    typedef hb_codepoint_t __item_t__;
    hb_codepoint_t __item__ () const { return v; }
    bool __more__ () const { return v != INVALID; }
    void __next__ () { s->next (&v); if (l) l--; }
    void __prev__ () { s->previous (&v); }
    unsigned __len__ () const { return l; }
    iter_t end () const { return iter_t (*s, false); }
    bool operator != (const iter_t& o) const
    { return s != o.s || v != o.v; }

    protected:
    const hb_bit_set_invertible_t *s;
    hb_codepoint_t v;
    unsigned l;
  };
  iter_t iter () const { return iter_t (*this); }
  operator iter_t () const { return iter (); }
};
# 33 "../harfbuzz-6.0.0/src/hb-set.hh" 2


template <typename impl_t>
struct hb_sparseset_t
{
  hb_object_header_t header;
  impl_t s;

  hb_sparseset_t () { init (); }
  ~hb_sparseset_t () { fini (); }

  hb_sparseset_t (const hb_sparseset_t& other) : hb_sparseset_t () { set (other); }
  hb_sparseset_t (hb_sparseset_t&& other) : hb_sparseset_t () { s = std::move (other.s); }
  hb_sparseset_t& operator = (const hb_sparseset_t& other) { set (other); return *this; }
  hb_sparseset_t& operator = (hb_sparseset_t&& other) { s = std::move (other.s); return *this; }
  friend void swap (hb_sparseset_t& a, hb_sparseset_t& b) { hb_swap (a.s, b.s); }

  hb_sparseset_t (std::initializer_list<hb_codepoint_t> lst) : hb_sparseset_t ()
  {
    for (auto&& item : lst)
      add (item);
  }
  template <typename Iterable,
           typename hb_enable_if<((hb_is_iterable<Iterable>::value))>::type* = nullptr>
  hb_sparseset_t (const Iterable &o) : hb_sparseset_t ()
  {
    hb_copy (o, *this);
  }

  void init ()
  {
    hb_object_init (this);
    s.init ();
  }
  void fini ()
  {
    hb_object_fini (this);
    s.fini ();
  }

  explicit operator bool () const { return !is_empty (); }

  void err () { s.err (); }
  bool in_error () const { return s.in_error (); }

  void alloc (unsigned sz) { s.alloc (sz); }
  void reset () { s.reset (); }
  void clear () { s.clear (); }
  void invert () { s.invert (); }
  bool is_inverted () const { return s.is_inverted (); }
  bool is_empty () const { return s.is_empty (); }
  uint32_t hash () const { return s.hash (); }

  void add (hb_codepoint_t g) { s.add (g); }
  bool add_range (hb_codepoint_t a, hb_codepoint_t b) { return s.add_range (a, b); }

  template <typename T>
  void add_array (const T *array, unsigned int count, unsigned int stride=sizeof(T))
  { s.add_array (array, count, stride); }
  template <typename T>
  void add_array (const hb_array_t<const T>& arr) { add_array (&arr, arr.len ()); }



  template <typename T>
  bool add_sorted_array (const T *array, unsigned int count, unsigned int stride=sizeof(T))
  { return s.add_sorted_array (array, count, stride); }
  template <typename T>
  bool add_sorted_array (const hb_sorted_array_t<const T>& arr) { return add_sorted_array (&arr, arr.len ()); }

  void del (hb_codepoint_t g) { s.del (g); }
  void del_range (hb_codepoint_t a, hb_codepoint_t b) { s.del_range (a, b); }

  bool get (hb_codepoint_t g) const { return s.get (g); }


  bool operator [] (hb_codepoint_t k) const { return get (k); }
  bool has (hb_codepoint_t k) const { return (*this)[k]; }


  bool operator () (hb_codepoint_t k) const { return has (k); }


  hb_sparseset_t& operator << (hb_codepoint_t v)
  { add (v); return *this; }
  hb_sparseset_t& operator << (const hb_pair_t<hb_codepoint_t, hb_codepoint_t>& range)
  { add_range (range.first, range.second); return *this; }

  bool intersects (hb_codepoint_t first, hb_codepoint_t last) const
  { return s.intersects (first, last); }

  void set (const hb_sparseset_t &other) { s.set (other.s); }

  bool is_equal (const hb_sparseset_t &other) const { return s.is_equal (other.s); }
  bool operator == (const hb_set_t &other) const { return is_equal (other); }
  bool operator != (const hb_set_t &other) const { return !is_equal (other); }

  bool is_subset (const hb_sparseset_t &larger_set) const { return s.is_subset (larger_set.s); }

  void union_ (const hb_sparseset_t &other) { s.union_ (other.s); }
  void intersect (const hb_sparseset_t &other) { s.intersect (other.s); }
  void subtract (const hb_sparseset_t &other) { s.subtract (other.s); }
  void symmetric_difference (const hb_sparseset_t &other) { s.symmetric_difference (other.s); }

  bool next (hb_codepoint_t *codepoint) const { return s.next (codepoint); }
  bool previous (hb_codepoint_t *codepoint) const { return s.previous (codepoint); }
  bool next_range (hb_codepoint_t *first, hb_codepoint_t *last) const
  { return s.next_range (first, last); }
  bool previous_range (hb_codepoint_t *first, hb_codepoint_t *last) const
  { return s.previous_range (first, last); }
  unsigned int next_many (hb_codepoint_t codepoint, hb_codepoint_t *out, unsigned int size) const
  { return s.next_many (codepoint, out, size); }

  unsigned int get_population () const { return s.get_population (); }
  hb_codepoint_t get_min () const { return s.get_min (); }
  hb_codepoint_t get_max () const { return s.get_max (); }

  static constexpr hb_codepoint_t INVALID = impl_t::INVALID;




  using iter_t = typename impl_t::iter_t;
  iter_t iter () const { return iter_t (this->s); }
  operator iter_t () const { return iter (); }
};

struct hb_set_t : hb_sparseset_t<hb_bit_set_invertible_t>
{
  using sparseset = hb_sparseset_t<hb_bit_set_invertible_t>;

  ~hb_set_t () = default;
  hb_set_t () : sparseset () {};
  hb_set_t (const hb_set_t &o) : sparseset ((sparseset &) o) {};
  hb_set_t (hb_set_t&& o) : sparseset (std::move ((sparseset &) o)) {}
  hb_set_t& operator = (const hb_set_t&) = default;
  hb_set_t& operator = (hb_set_t&&) = default;
  hb_set_t (std::initializer_list<hb_codepoint_t> lst) : sparseset (lst) {}
  template <typename Iterable,
     typename hb_enable_if<((hb_is_iterable<Iterable>::value))>::type* = nullptr>
  hb_set_t (const Iterable &o) : sparseset (o) {}

  hb_set_t& operator << (hb_codepoint_t v)
  { sparseset::operator<< (v); return *this; }
  hb_set_t& operator << (const hb_pair_t<hb_codepoint_t, hb_codepoint_t>& range)
  { sparseset::operator<< (range); return *this; }
};

static_assert (hb_set_t::INVALID == ((hb_codepoint_t) -1), "");
# 33 "../harfbuzz-6.0.0/src/hb-map.hh" 2

# 1 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cstdint" 1 3
# 30 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cstdint" 3
#define _GLIBCXX_CSTDINT 1

       
# 33 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cstdint" 3
# 48 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cstdint" 3

# 48 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cstdint" 3
namespace std
{

  using ::int8_t;
  using ::int16_t;
  using ::int32_t;
  using ::int64_t;

  using ::int_fast8_t;
  using ::int_fast16_t;
  using ::int_fast32_t;
  using ::int_fast64_t;

  using ::int_least8_t;
  using ::int_least16_t;
  using ::int_least32_t;
  using ::int_least64_t;

  using ::intmax_t;
  using ::intptr_t;

  using ::uint8_t;
  using ::uint16_t;
  using ::uint32_t;
  using ::uint64_t;

  using ::uint_fast8_t;
  using ::uint_fast16_t;
  using ::uint_fast32_t;
  using ::uint_fast64_t;

  using ::uint_least8_t;
  using ::uint_least16_t;
  using ::uint_least32_t;
  using ::uint_least64_t;

  using ::uintmax_t;
  using ::uintptr_t;
# 142 "/mnt/b/cross/aarch64-linux-musl/tools/aarch64-linux-musl/include/c++/13.0.1/cstdint" 3
}
# 35 "../harfbuzz-6.0.0/src/hb-map.hh" 2






# 40 "../harfbuzz-6.0.0/src/hb-map.hh"
extern __attribute__((__visibility__("hidden"))) const hb_codepoint_t minus_1;

template <typename K, typename V,
   bool minus_one = false>
struct hb_hashmap_t
{
  hb_hashmap_t () { init (); }
  ~hb_hashmap_t () { fini (); }

  hb_hashmap_t (const hb_hashmap_t& o) : hb_hashmap_t () { resize (o.population); hb_copy (o, *this); }
  hb_hashmap_t (hb_hashmap_t&& o) : hb_hashmap_t () { hb_swap (*this, o); }
  hb_hashmap_t& operator= (const hb_hashmap_t& o) { reset (); resize (o.population); hb_copy (o, *this); return *this; }
  hb_hashmap_t& operator= (hb_hashmap_t&& o) { hb_swap (*this, o); return *this; }

  hb_hashmap_t (std::initializer_list<hb_pair_t<K, V>> lst) : hb_hashmap_t ()
  {
    for (auto&& item : lst)
      set (item.first, item.second);
  }
  template <typename Iterable,
     typename hb_enable_if<((hb_is_iterable<Iterable>::value))>::type* = nullptr>
  hb_hashmap_t (const Iterable &o) : hb_hashmap_t ()
  {
    auto iter = hb_iter (o);
    if (iter.is_random_access_iterator)
      resize (hb_len (iter));
    hb_copy (iter, *this);
  }

  struct item_t
  {
    K key;
    uint32_t hash : 30;
    uint32_t is_used_ : 1;
    uint32_t is_tombstone_ : 1;
    V value;

    item_t () : key (),
  hash (0),
  is_used_ (false), is_tombstone_ (false),
  value () {}

    bool is_used () const { return is_used_; }
    void set_used (bool is_used) { is_used_ = is_used; }
    bool is_tombstone () const { return is_tombstone_; }
    void set_tombstone (bool is_tombstone) { is_tombstone_ = is_tombstone; }
    bool is_real () const { return is_used_ && !is_tombstone_; }

    template <bool v = minus_one,
       typename hb_enable_if<(v == false)>::type* = nullptr>
    static inline const V& default_value () { return NullHelper<V>::get_null (); };
    template <bool v = minus_one,
       typename hb_enable_if<(v == true)>::type* = nullptr>
    static inline const V& default_value ()
    {
      static_assert (hb_is_same<V, hb_codepoint_t>::value, "");
      return minus_1;
    };

    bool operator == (const K &o) const { return hb_deref (key) == hb_deref (o); }
    bool operator == (const item_t &o) const { return *this == o.key; }
    hb_pair_t<K, V> get_pair() const { return hb_pair_t<K, V> (key, value); }
    hb_pair_t<const K &, const V &> get_pair_ref() const { return hb_pair_t<const K &, const V &> (key, value); }

    uint32_t total_hash () const
    { return (hash * 31) + hb_hash (value); }
  };

  hb_object_header_t header;
  unsigned int successful : 1;
  unsigned int population : 31;
  unsigned int occupancy;
  unsigned int mask;
  unsigned int prime;
  item_t *items;

  friend void swap (hb_hashmap_t& a, hb_hashmap_t& b)
  {
    if ((__builtin_expect (!!(!a.successful || !b.successful), 0)))
      return;
    unsigned tmp = a.population;
    a.population = b.population;
    b.population = tmp;

    hb_swap (a.occupancy, b.occupancy);
    hb_swap (a.mask, b.mask);
    hb_swap (a.prime, b.prime);
    hb_swap (a.items, b.items);
  }
  void init ()
  {
    hb_object_init (this);

    successful = true;
    population = occupancy = 0;
    mask = 0;
    prime = 0;
    items = nullptr;
  }
  void fini ()
  {
    hb_object_fini (this);

    if ((__builtin_expect (!!(items), 1))) {
      unsigned size = mask + 1;
      for (unsigned i = 0; i < size; i++)
        items[i].~item_t ();
      free (items);
      items = nullptr;
    }
    population = occupancy = 0;
  }

  void reset ()
  {
    successful = true;
    clear ();
  }

  bool in_error () const { return !successful; }

  bool resize (unsigned new_population = 0)
  {
    if ((__builtin_expect (!!(!successful), 0))) return false;

    if (new_population != 0 && (new_population + new_population / 2) < mask) return true;

    unsigned int power = hb_bit_storage (hb_max ((unsigned) population, new_population) * 2 + 8);
    unsigned int new_size = 1u << power;
    item_t *new_items = (item_t *) malloc ((size_t) new_size * sizeof (item_t));
    if ((__builtin_expect (!!(!new_items), 0)))
    {
      successful = false;
      return false;
    }
    for (auto &_ : hb_iter (new_items, new_size))
      new (&_) item_t ();

    unsigned int old_size = size ();
    item_t *old_items = items;


    population = occupancy = 0;
    mask = new_size - 1;
    prime = prime_for (power);
    items = new_items;


    for (unsigned int i = 0; i < old_size; i++)
    {
      if (old_items[i].is_real ())
      {
 set_with_hash (std::move (old_items[i].key),
         old_items[i].hash,
         std::move (old_items[i].value));
      }
      old_items[i].~item_t ();
    }

    free (old_items);

    return true;
  }

  template <typename KK, typename VV>
  bool set_with_hash (KK&& key, uint32_t hash, VV&& value, bool is_delete=false)
  {
    if ((__builtin_expect (!!(!successful), 0))) return false;
    if ((__builtin_expect (!!((occupancy + occupancy / 2) >= mask && !resize ()), 0))) return false;
    item_t &item = item_for_hash (key, hash);

    if (is_delete && !(item == key))
      return true;

    if (item.is_used ())
    {
      occupancy--;
      if (!item.is_tombstone ())
 population--;
    }

    item.key = std::forward<KK> (key);
    item.value = std::forward<VV> (value);
    item.hash = hash;
    item.set_used (true);
    item.set_tombstone (is_delete);

    occupancy++;
    if (!is_delete)
      population++;

    return true;
  }

  template <typename VV>
  bool set (const K &key, VV&& value) { return set_with_hash (key, hb_hash (key), std::forward<VV> (value)); }
  template <typename VV>
  bool set (K &&key, VV&& value) { return set_with_hash (std::move (key), hb_hash (key), std::forward<VV> (value)); }

  const V& get_with_hash (const K &key, uint32_t hash) const
  {
    if ((__builtin_expect (!!(!items), 0))) return item_t::default_value ();
    auto &item = item_for_hash (key, hash);
    return item.is_real () && item == key ? item.value : item_t::default_value ();
  }
  const V& get (const K &key) const
  {
    if ((__builtin_expect (!!(!items), 0))) return item_t::default_value ();
    return get_with_hash (key, hb_hash (key));
  }

  void del (const K &key) { set_with_hash (key, hb_hash (key), item_t::default_value (), true); }


  const V& operator [] (K k) const { return get (k); }
  template <typename VV=V>
  bool has (K key, VV **vp = nullptr) const
  {
    if ((__builtin_expect (!!(!items), 0)))
      return false;
    auto &item = item_for_hash (key, hb_hash (key));
    if (item.is_real () && item == key)
    {
      if (vp) *vp = std::addressof (item.value);
      return true;
    }
    else
      return false;
  }

  V operator () (K k) const { return get (k); }

  unsigned size () const { return mask ? mask + 1 : 0; }

  void clear ()
  {
    if ((__builtin_expect (!!(!successful), 0))) return;

    for (auto &_ : hb_iter (items, size ()))
    {

      _.~item_t ();
      new (&_) item_t ();
    }

    population = occupancy = 0;
  }

  bool is_empty () const { return population == 0; }
  explicit operator bool () const { return !is_empty (); }

  uint32_t hash () const
  {
    return
    + iter_items ()
    | hb_reduce ([] (uint32_t h, const item_t &_) { return h ^ _.total_hash (); }, (uint32_t) 0u)
    ;
  }

  bool is_equal (const hb_hashmap_t &other) const
  {
    if (population != other.population) return false;

    for (auto pair : iter ())
      if (other.get (pair.first) != pair.second)
        return false;

    return true;
  }
  bool operator == (const hb_hashmap_t &other) const { return is_equal (other); }
  bool operator != (const hb_hashmap_t &other) const { return !is_equal (other); }

  unsigned int get_population () const { return population; }

  void update (const hb_hashmap_t &other)
  {
    if ((__builtin_expect (!!(!successful), 0))) return;

    hb_copy (other, *this);
  }

  void keys (hb_set_t &keys_) const
  {
    hb_copy (keys() , keys_);
  }

  void values (hb_set_t &values_) const
  {
    hb_copy (values() , values_);
  }





  auto iter_items () const -> decltype ((+ hb_iter (items, size ()) | hb_filter (&item_t::is_real))) { return (+ hb_iter (items, size ()) | hb_filter (&item_t::is_real)); }




  auto iter_ref () const -> decltype ((+ iter_items () | hb_map (&item_t::get_pair_ref))) { return (+ iter_items () | hb_map (&item_t::get_pair_ref)); }




  auto iter () const -> decltype ((+ iter_items () | hb_map (&item_t::get_pair))) { return (+ iter_items () | hb_map (&item_t::get_pair)); }




  auto keys_ref () const -> decltype ((+ iter_items () | hb_map (&item_t::key))) { return (+ iter_items () | hb_map (&item_t::key)); }




  auto keys () const -> decltype ((+ keys_ref () | hb_map (hb_ridentity))) { return (+ keys_ref () | hb_map (hb_ridentity)); }




  auto values_ref () const -> decltype ((+ iter_items () | hb_map (&item_t::value))) { return (+ iter_items () | hb_map (&item_t::value)); }




  auto values () const -> decltype ((+ values_ref () | hb_map (hb_ridentity))) { return (+ values_ref () | hb_map (hb_ridentity)); }






  bool next (int *idx,
      K *key,
      V *value) const
  {
    unsigned i = (unsigned) (*idx + 1);

    unsigned count = size ();
    while (i < count && !items[i].is_real ())
      i++;

    if (i >= count)
    {
      *idx = -1;
      return false;
    }

    *key = items[i].key;
    *value = items[i].value;

    *idx = (signed) i;
    return true;
  }


  hb_hashmap_t& operator << (const hb_pair_t<K, V>& v)
  { set (v.first, v.second); return *this; }
  hb_hashmap_t& operator << (const hb_pair_t<K, V&&>& v)
  { set (v.first, std::move (v.second)); return *this; }
  hb_hashmap_t& operator << (const hb_pair_t<K&&, V>& v)
  { set (std::move (v.first), v.second); return *this; }
  hb_hashmap_t& operator << (const hb_pair_t<K&&, V&&>& v)
  { set (std::move (v.first), std::move (v.second)); return *this; }

  item_t& item_for_hash (const K &key, uint32_t hash) const
  {
    hash &= 0x3FFFFFFF;
    unsigned int i = hash % prime;
    unsigned int step = 0;
    unsigned int tombstone = (unsigned) -1;
    while (items[i].is_used ())
    {
      if (items[i].hash == hash && items[i] == key)
 return items[i];
      if (tombstone == (unsigned) -1 && items[i].is_tombstone ())
 tombstone = i;
      i = (i + ++step) & mask;
    }
    return items[tombstone == (unsigned) -1 ? i : tombstone];
  }

  static unsigned int prime_for (unsigned int shift)
  {







               const unsigned int prime_mod [32] =
    {
      1,
      2,
      3,
      7,
      13,
      31,
      61,
      127,
      251,
      509,
      1021,
      2039,
      4093,
      8191,
      16381,
      32749,
      65521,
      131071,
      262139,
      524287,
      1048573,
      2097143,
      4194301,
      8388593,
      16777213,
      33554393,
      67108859,
      134217689,
      268435399,
      536870909,
      1073741789,
      2147483647
    };

    if ((__builtin_expect (!!(shift >= ARRAY_LENGTH (prime_mod)), 0)))
      return prime_mod[ARRAY_LENGTH (prime_mod) - 1];

    return prime_mod[shift];
  }
};





struct hb_map_t : hb_hashmap_t<hb_codepoint_t,
          hb_codepoint_t,
          true>
{
  using hashmap = hb_hashmap_t<hb_codepoint_t,
          hb_codepoint_t,
          true>;

  ~hb_map_t () = default;
  hb_map_t () : hashmap () {}
  hb_map_t (const hb_map_t &o) : hashmap ((hashmap &) o) {}
  hb_map_t (hb_map_t &&o) : hashmap (std::move ((hashmap &) o)) {}
  hb_map_t& operator= (const hb_map_t&) = default;
  hb_map_t& operator= (hb_map_t&&) = default;
  hb_map_t (std::initializer_list<hb_pair_t<hb_codepoint_t, hb_codepoint_t>> lst) : hashmap (lst) {}
  template <typename Iterable,
     typename hb_enable_if<((hb_is_iterable<Iterable>::value))>::type* = nullptr>
  hb_map_t (const Iterable &o) : hashmap (o) {}
};
# 37 "../harfbuzz-6.0.0/src/hb-serialize.hh" 2
# 1 "../harfbuzz-6.0.0/src/hb-pool.hh" 1
# 28 "../harfbuzz-6.0.0/src/hb-pool.hh"
#define HB_POOL_HH 





template <typename T, unsigned ChunkLen = 32>
struct hb_pool_t
{
  hb_pool_t () : next (nullptr) {}
  ~hb_pool_t ()
  {
    next = nullptr;

    + hb_iter (chunks)
    | hb_apply (free)
    ;
  }

  T* alloc ()
  {
    if ((__builtin_expect (!!(!next), 0)))
    {
      if ((__builtin_expect (!!(!chunks.alloc (chunks.length + 1)), 0))) return nullptr;
      chunk_t *chunk = (chunk_t *) calloc (1, sizeof (chunk_t));
      if ((__builtin_expect (!!(!chunk), 0))) return nullptr;
      chunks.push (chunk);
      next = chunk->thread ();
    }

    T* obj = next;
    next = * ((T**) next);

    hb_memset (obj, 0, sizeof (T));

    return obj;
  }

  void release (T* obj)
  {
    * (T**) obj = next;
    next = obj;
  }

  private:

  static_assert (ChunkLen > 1, "");
  static_assert (sizeof (T) >= sizeof (void *), "");
  static_assert (alignof (T) % alignof (void *) == 0, "");

  struct chunk_t
  {
    T* thread ()
    {
      for (unsigned i = 0; i < ARRAY_LENGTH (arrayZ) - 1; i++)
 * (T**) &arrayZ[i] = &arrayZ[i + 1];

      * (T**) &arrayZ[ARRAY_LENGTH (arrayZ) - 1] = nullptr;

      return arrayZ;
    }

    T arrayZ[ChunkLen];
  };

  T* next;
  hb_vector_t<chunk_t *> chunks;
};
# 38 "../harfbuzz-6.0.0/src/hb-serialize.hh" 2
# 47 "../harfbuzz-6.0.0/src/hb-serialize.hh"
enum hb_serialize_error_t {
  HB_SERIALIZE_ERROR_NONE = 0x00000000u,
  HB_SERIALIZE_ERROR_OTHER = 0x00000001u,
  HB_SERIALIZE_ERROR_OFFSET_OVERFLOW = 0x00000002u,
  HB_SERIALIZE_ERROR_OUT_OF_ROOM = 0x00000004u,
  HB_SERIALIZE_ERROR_INT_OVERFLOW = 0x00000008u,
  HB_SERIALIZE_ERROR_ARRAY_OVERFLOW = 0x00000010u
};
extern "C++" { static inline constexpr hb_serialize_error_t operator | (hb_serialize_error_t l, hb_serialize_error_t r) { return hb_serialize_error_t ((unsigned) l | (unsigned) r); } static inline constexpr hb_serialize_error_t operator & (hb_serialize_error_t l, hb_serialize_error_t r) { return hb_serialize_error_t ((unsigned) l & (unsigned) r); } static inline constexpr hb_serialize_error_t operator ^ (hb_serialize_error_t l, hb_serialize_error_t r) { return hb_serialize_error_t ((unsigned) l ^ (unsigned) r); } static inline constexpr unsigned operator ~ (hb_serialize_error_t r) { return (~(unsigned) r); } static inline hb_serialize_error_t& operator |= (hb_serialize_error_t &l, hb_serialize_error_t r) { l = l | r; return l; } static inline hb_serialize_error_t& operator &= (hb_serialize_error_t& l, hb_serialize_error_t r) { l = l & r; return l; } static inline hb_serialize_error_t& operator ^= (hb_serialize_error_t& l, hb_serialize_error_t r) { l = l ^ r; return l; } } static_assert (true, "");

struct hb_serialize_context_t
{
  typedef unsigned objidx_t;

  enum whence_t {
     Head,
     Tail,
     Absolute
   };



  struct object_t
  {
    void fini () {
      real_links.fini ();
      virtual_links.fini ();
    }

    object_t () = default;
# 94 "../harfbuzz-6.0.0/src/hb-serialize.hh"
    friend void swap (object_t& a, object_t& b)
    {
      hb_swap (a.head, b.head);
      hb_swap (a.tail, b.tail);
      hb_swap (a.next, b.next);
      hb_swap (a.real_links, b.real_links);
      hb_swap (a.virtual_links, b.virtual_links);
    }

    bool operator == (const object_t &o) const
    {


      return (tail - head == o.tail - o.head)
   && (real_links.length == o.real_links.length)
   && 0 == hb_memcmp (head, o.head, tail - head)
   && real_links.as_bytes () == o.real_links.as_bytes ();
    }
    uint32_t hash () const
    {


      return hb_bytes_t (head, tail - head).hash () ^
          real_links.as_bytes ().hash ();
    }

    struct link_t
    {
      unsigned width: 3;
      unsigned is_signed: 1;
      unsigned whence: 2;
      unsigned bias : 26;
      unsigned position;
      objidx_t objidx;

      link_t () = default;
# 143 "../harfbuzz-6.0.0/src/hb-serialize.hh"
      __attribute__((__visibility__("hidden"))) static int cmp (const void* a, const void* b)
      {
        int cmp = ((const link_t*)a)->position - ((const link_t*)b)->position;
        if (cmp) return cmp;

        return ((const link_t*)a)->objidx - ((const link_t*)b)->objidx;
      }
    };

    char *head;
    char *tail;
    hb_vector_t<link_t> real_links;
    hb_vector_t<link_t> virtual_links;
    object_t *next;

    auto all_links () const -> decltype ((( hb_concat (this->real_links, this->virtual_links) ))) { return (( hb_concat (this->real_links, this->virtual_links) )); }
                                                               ;
    auto all_links_writer () -> decltype ((( hb_concat (this->real_links.writer (), this->virtual_links.writer ()) ))) { return (( hb_concat (this->real_links.writer (), this->virtual_links.writer ()) )); }
                                                                                   ;
  };

  struct snapshot_t
  {
    char *head;
    char *tail;
    object_t *current;
    unsigned num_real_links;
    unsigned num_virtual_links;
    hb_serialize_error_t errors;
  };

  snapshot_t snapshot ()
  { return snapshot_t {
      head, tail, current, current->real_links.length, current->virtual_links.length, errors }; }

  hb_serialize_context_t (void *start_, unsigned int size) :
    start ((char *) start_),
    end (start + size),
    current (nullptr)
  { reset (); }
  ~hb_serialize_context_t () { fini (); }

  void fini ()
  {
    for (object_t *_ : ++hb_iter (packed)) _->fini ();
    packed.fini ();
    this->packed_map.fini ();

    while (current)
    {
      auto *_ = current;
      current = current->next;
      _->fini ();
    }
  }

  bool in_error () const { return bool (errors); }

  bool successful () const { return !bool (errors); }

  __attribute__((warn_unused_result)) bool ran_out_of_room () const { return errors & HB_SERIALIZE_ERROR_OUT_OF_ROOM; }
  __attribute__((warn_unused_result)) bool offset_overflow () const { return errors & HB_SERIALIZE_ERROR_OFFSET_OVERFLOW; }
  __attribute__((warn_unused_result)) bool only_offset_overflow () const { return errors == HB_SERIALIZE_ERROR_OFFSET_OVERFLOW; }
  __attribute__((warn_unused_result)) bool only_overflow () const
  {
    return errors == HB_SERIALIZE_ERROR_OFFSET_OVERFLOW
        || errors == HB_SERIALIZE_ERROR_INT_OVERFLOW
        || errors == HB_SERIALIZE_ERROR_ARRAY_OVERFLOW;
  }

  void reset (void *start_, unsigned int size)
  {
    start = (char*) start_;
    end = start + size;
    reset ();
    current = nullptr;
  }

  void reset ()
  {
    this->errors = HB_SERIALIZE_ERROR_NONE;
    this->head = this->start;
    this->tail = this->end;
    this->zerocopy = nullptr;
    this->debug_depth = 0;

    fini ();
    this->packed.push (nullptr);
    this->packed_map.init ();
  }

  bool check_success (bool success,
                      hb_serialize_error_t err_type = HB_SERIALIZE_ERROR_OTHER)
  {
    return successful ()
        && (success || err (err_type));
  }

  template <typename T1, typename T2>
  bool check_equal (T1 &&v1, T2 &&v2, hb_serialize_error_t err_type)
  {
    if ((long long) v1 != (long long) v2)
    {
      return err (err_type);
    }
    return true;
  }

  template <typename T1, typename T2>
  bool check_assign (T1 &v1, T2 &&v2, hb_serialize_error_t err_type)
  { return check_equal (v1 = v2, v2, err_type); }

  template <typename T> bool propagate_error (T &&obj)
  { return check_success (!hb_deref (obj).in_error ()); }

  template <typename T1, typename... Ts> bool propagate_error (T1 &&o1, Ts&&... os)
  { return propagate_error (std::forward<T1> (o1)) &&
    propagate_error (std::forward<Ts> (os)...); }


  template <typename Type>
  Type *start_serialize ()
  {
    _hb_debug_msg<(0 +0)> ("SERIALIZE", (this->start), nullptr, true, (0), (+1), "start [%p..%p] (%lu bytes)", this->start, this->end, (unsigned long) (this->end - this->start))


                                                 ;

    
# 271 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   (static_cast <bool> (
# 271 "../harfbuzz-6.0.0/src/hb-serialize.hh"
   !current
# 271 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   ) ? void (0) : __assert_fail (
# 271 "../harfbuzz-6.0.0/src/hb-serialize.hh"
   "!current"
# 271 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-serialize.hh", 271, __extension__ __PRETTY_FUNCTION__))
# 271 "../harfbuzz-6.0.0/src/hb-serialize.hh"
                    ;
    return push<Type> ();
  }
  void end_serialize ()
  {
    _hb_debug_msg<(0 +0)> ("SERIALIZE", (this->start), nullptr, true, (0), (-1), "end [%p..%p] serialized %u bytes; %s", this->start, this->end, (unsigned) (this->head - this->start), successful () ? "successful" : "UNSUCCESSFUL")



                                                     ;

    propagate_error (packed, packed_map);

    if ((__builtin_expect (!!(!current), 0))) return;
    if ((__builtin_expect (!!(in_error()), 0)))
    {


      if (offset_overflow ()) err (HB_SERIALIZE_ERROR_OTHER);
      return;
    }

    
# 293 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   (static_cast <bool> (
# 293 "../harfbuzz-6.0.0/src/hb-serialize.hh"
   !current->next
# 293 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   ) ? void (0) : __assert_fail (
# 293 "../harfbuzz-6.0.0/src/hb-serialize.hh"
   "!current->next"
# 293 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-serialize.hh", 293, __extension__ __PRETTY_FUNCTION__))
# 293 "../harfbuzz-6.0.0/src/hb-serialize.hh"
                          ;



    if (packed.length <= 1)
      return;

    pop_pack (false);

    resolve_links ();
  }

  template <typename Type = void>
  Type *push ()
  {
    if ((__builtin_expect (!!(in_error ()), 0))) return start_embed<Type> ();

    object_t *obj = object_pool.alloc ();
    if ((__builtin_expect (!!(!obj), 0)))
      check_success (false);
    else
    {
      obj->head = head;
      obj->tail = tail;
      obj->next = current;
      current = obj;
    }
    return start_embed<Type> ();
  }
  void pop_discard ()
  {
    object_t *obj = current;
    if ((__builtin_expect (!!(!obj), 0))) return;
    if ((__builtin_expect (!!(in_error() && !only_overflow ()), 0))) return;

    current = current->next;
    revert (zerocopy ? zerocopy : obj->head, obj->tail);
    zerocopy = nullptr;
    obj->fini ();
    object_pool.release (obj);
  }





  objidx_t pop_pack (bool share=true)
  {
    object_t *obj = current;
    if ((__builtin_expect (!!(!obj), 0))) return 0;
    if ((__builtin_expect (!!(in_error()), 0))) return 0;

    current = current->next;
    obj->tail = head;
    obj->next = nullptr;
    
# 348 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   (static_cast <bool> (
# 348 "../harfbuzz-6.0.0/src/hb-serialize.hh"
   obj->head <= obj->tail
# 348 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   ) ? void (0) : __assert_fail (
# 348 "../harfbuzz-6.0.0/src/hb-serialize.hh"
   "obj->head <= obj->tail"
# 348 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-serialize.hh", 348, __extension__ __PRETTY_FUNCTION__))
# 348 "../harfbuzz-6.0.0/src/hb-serialize.hh"
                                  ;
    unsigned len = obj->tail - obj->head;
    head = zerocopy ? zerocopy : obj->head;
    bool was_zerocopy = zerocopy;
    zerocopy = nullptr;

    if (!len)
    {
      
# 356 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
     (static_cast <bool> (
# 356 "../harfbuzz-6.0.0/src/hb-serialize.hh"
     !obj->real_links.length
# 356 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
     ) ? void (0) : __assert_fail (
# 356 "../harfbuzz-6.0.0/src/hb-serialize.hh"
     "!obj->real_links.length"
# 356 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
     , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-serialize.hh", 356, __extension__ __PRETTY_FUNCTION__))
# 356 "../harfbuzz-6.0.0/src/hb-serialize.hh"
                                     ;
      
# 357 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
     (static_cast <bool> (
# 357 "../harfbuzz-6.0.0/src/hb-serialize.hh"
     !obj->virtual_links.length
# 357 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
     ) ? void (0) : __assert_fail (
# 357 "../harfbuzz-6.0.0/src/hb-serialize.hh"
     "!obj->virtual_links.length"
# 357 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
     , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-serialize.hh", 357, __extension__ __PRETTY_FUNCTION__))
# 357 "../harfbuzz-6.0.0/src/hb-serialize.hh"
                                        ;
      return 0;
    }

    objidx_t objidx;
    uint32_t hash = 0;
    if (share)
    {
      hash = hb_hash (obj);
      objidx = packed_map.get_with_hash (obj, hash);
      if (objidx)
      {
        merge_virtual_links (obj, objidx);
 obj->fini ();
 return objidx;
      }
    }

    tail -= len;
    if (was_zerocopy)
      
# 377 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
     (static_cast <bool> (
# 377 "../harfbuzz-6.0.0/src/hb-serialize.hh"
     tail == obj->head
# 377 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
     ) ? void (0) : __assert_fail (
# 377 "../harfbuzz-6.0.0/src/hb-serialize.hh"
     "tail == obj->head"
# 377 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
     , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-serialize.hh", 377, __extension__ __PRETTY_FUNCTION__))
# 377 "../harfbuzz-6.0.0/src/hb-serialize.hh"
                               ;
    else
      memmove (tail, obj->head, len);

    obj->head = tail;
    obj->tail = tail + len;

    packed.push (obj);

    if ((__builtin_expect (!!(!propagate_error (packed)), 0)))
    {



      obj->fini ();
      return 0;
    }

    objidx = packed.length - 1;

    if (share) packed_map.set_with_hash (obj, hash, objidx);
    propagate_error (packed_map);

    return objidx;
  }

  void revert (snapshot_t snap)
  {

    if ((__builtin_expect (!!(in_error () && !only_overflow ()), 0))) return;
    
# 407 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   (static_cast <bool> (
# 407 "../harfbuzz-6.0.0/src/hb-serialize.hh"
   snap.current == current
# 407 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   ) ? void (0) : __assert_fail (
# 407 "../harfbuzz-6.0.0/src/hb-serialize.hh"
   "snap.current == current"
# 407 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-serialize.hh", 407, __extension__ __PRETTY_FUNCTION__))
# 407 "../harfbuzz-6.0.0/src/hb-serialize.hh"
                                   ;
    current->real_links.shrink (snap.num_real_links);
    current->virtual_links.shrink (snap.num_virtual_links);
    errors = snap.errors;
    revert (snap.head, snap.tail);
  }

  void revert (char *snap_head,
        char *snap_tail)
  {
    if ((__builtin_expect (!!(in_error ()), 0))) return;
    
# 418 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   (static_cast <bool> (
# 418 "../harfbuzz-6.0.0/src/hb-serialize.hh"
   snap_head <= head
# 418 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   ) ? void (0) : __assert_fail (
# 418 "../harfbuzz-6.0.0/src/hb-serialize.hh"
   "snap_head <= head"
# 418 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-serialize.hh", 418, __extension__ __PRETTY_FUNCTION__))
# 418 "../harfbuzz-6.0.0/src/hb-serialize.hh"
                             ;
    
# 419 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   (static_cast <bool> (
# 419 "../harfbuzz-6.0.0/src/hb-serialize.hh"
   tail <= snap_tail
# 419 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   ) ? void (0) : __assert_fail (
# 419 "../harfbuzz-6.0.0/src/hb-serialize.hh"
   "tail <= snap_tail"
# 419 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-serialize.hh", 419, __extension__ __PRETTY_FUNCTION__))
# 419 "../harfbuzz-6.0.0/src/hb-serialize.hh"
                             ;
    head = snap_head;
    tail = snap_tail;
    discard_stale_objects ();
  }

  void discard_stale_objects ()
  {
    if ((__builtin_expect (!!(in_error ()), 0))) return;
    while (packed.length > 1 &&
    packed.tail ()->head < tail)
    {
      packed_map.del (packed.tail ());
      
# 432 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
     (static_cast <bool> (
# 432 "../harfbuzz-6.0.0/src/hb-serialize.hh"
     !packed.tail ()->next
# 432 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
     ) ? void (0) : __assert_fail (
# 432 "../harfbuzz-6.0.0/src/hb-serialize.hh"
     "!packed.tail ()->next"
# 432 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
     , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-serialize.hh", 432, __extension__ __PRETTY_FUNCTION__))
# 432 "../harfbuzz-6.0.0/src/hb-serialize.hh"
                                   ;
      packed.tail ()->fini ();
      packed.pop ();
    }
    if (packed.length > 1)
      
# 437 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
     (static_cast <bool> (
# 437 "../harfbuzz-6.0.0/src/hb-serialize.hh"
     packed.tail ()->head == tail
# 437 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
     ) ? void (0) : __assert_fail (
# 437 "../harfbuzz-6.0.0/src/hb-serialize.hh"
     "packed.tail ()->head == tail"
# 437 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
     , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-serialize.hh", 437, __extension__ __PRETTY_FUNCTION__))
# 437 "../harfbuzz-6.0.0/src/hb-serialize.hh"
                                          ;
  }
# 448 "../harfbuzz-6.0.0/src/hb-serialize.hh"
  void add_virtual_link (objidx_t objidx)
  {
    if ((__builtin_expect (!!(in_error ()), 0))) return;

    if (!objidx)
      return;

    
# 455 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   (static_cast <bool> (
# 455 "../harfbuzz-6.0.0/src/hb-serialize.hh"
   current
# 455 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   ) ? void (0) : __assert_fail (
# 455 "../harfbuzz-6.0.0/src/hb-serialize.hh"
   "current"
# 455 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-serialize.hh", 455, __extension__ __PRETTY_FUNCTION__))
# 455 "../harfbuzz-6.0.0/src/hb-serialize.hh"
                   ;

    auto& link = *current->virtual_links.push ();
    if (current->virtual_links.in_error ())
      err (HB_SERIALIZE_ERROR_OTHER);

    link.width = 0;
    link.objidx = objidx;
    link.is_signed = 0;
    link.whence = 0;
    link.position = 0;
    link.bias = 0;
  }

  template <typename T>
  void add_link (T &ofs, objidx_t objidx,
   whence_t whence = Head,
   unsigned bias = 0)
  {
    if ((__builtin_expect (!!(in_error ()), 0))) return;

    if (!objidx)
      return;

    
# 479 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   (static_cast <bool> (
# 479 "../harfbuzz-6.0.0/src/hb-serialize.hh"
   current
# 479 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   ) ? void (0) : __assert_fail (
# 479 "../harfbuzz-6.0.0/src/hb-serialize.hh"
   "current"
# 479 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-serialize.hh", 479, __extension__ __PRETTY_FUNCTION__))
# 479 "../harfbuzz-6.0.0/src/hb-serialize.hh"
                   ;
    
# 480 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   (static_cast <bool> (
# 480 "../harfbuzz-6.0.0/src/hb-serialize.hh"
   current->head <= (const char *) &ofs
# 480 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   ) ? void (0) : __assert_fail (
# 480 "../harfbuzz-6.0.0/src/hb-serialize.hh"
   "current->head <= (const char *) &ofs"
# 480 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-serialize.hh", 480, __extension__ __PRETTY_FUNCTION__))
# 480 "../harfbuzz-6.0.0/src/hb-serialize.hh"
                                                ;

    auto& link = *current->real_links.push ();
    if (current->real_links.in_error ())
      err (HB_SERIALIZE_ERROR_OTHER);

    link.width = sizeof (T);
    link.objidx = objidx;
    if ((__builtin_expect (!!(!sizeof (T)), 0)))
    {


      link.is_signed = 0;
      link.whence = 0;
      link.position = 0;
      link.bias = 0;
      return;
    }

    link.is_signed = std::is_signed<typename hb_unwrap_type<T>::type>::value;
    link.whence = (unsigned) whence;
    link.position = (const char *) &ofs - current->head;
    link.bias = bias;
  }

  unsigned to_bias (const void *base) const
  {
    if ((__builtin_expect (!!(in_error ()), 0))) return 0;
    if (!base) return 0;
    
# 509 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   (static_cast <bool> (
# 509 "../harfbuzz-6.0.0/src/hb-serialize.hh"
   current
# 509 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   ) ? void (0) : __assert_fail (
# 509 "../harfbuzz-6.0.0/src/hb-serialize.hh"
   "current"
# 509 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-serialize.hh", 509, __extension__ __PRETTY_FUNCTION__))
# 509 "../harfbuzz-6.0.0/src/hb-serialize.hh"
                   ;
    
# 510 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   (static_cast <bool> (
# 510 "../harfbuzz-6.0.0/src/hb-serialize.hh"
   current->head <= (const char *) base
# 510 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   ) ? void (0) : __assert_fail (
# 510 "../harfbuzz-6.0.0/src/hb-serialize.hh"
   "current->head <= (const char *) base"
# 510 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-serialize.hh", 510, __extension__ __PRETTY_FUNCTION__))
# 510 "../harfbuzz-6.0.0/src/hb-serialize.hh"
                                                ;
    return (const char *) base - current->head;
  }

  void resolve_links ()
  {
    if ((__builtin_expect (!!(in_error ()), 0))) return;

    
# 518 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   (static_cast <bool> (
# 518 "../harfbuzz-6.0.0/src/hb-serialize.hh"
   !current
# 518 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   ) ? void (0) : __assert_fail (
# 518 "../harfbuzz-6.0.0/src/hb-serialize.hh"
   "!current"
# 518 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-serialize.hh", 518, __extension__ __PRETTY_FUNCTION__))
# 518 "../harfbuzz-6.0.0/src/hb-serialize.hh"
                    ;
    
# 519 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   (static_cast <bool> (
# 519 "../harfbuzz-6.0.0/src/hb-serialize.hh"
   packed.length > 1
# 519 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   ) ? void (0) : __assert_fail (
# 519 "../harfbuzz-6.0.0/src/hb-serialize.hh"
   "packed.length > 1"
# 519 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-serialize.hh", 519, __extension__ __PRETTY_FUNCTION__))
# 519 "../harfbuzz-6.0.0/src/hb-serialize.hh"
                             ;

    for (const object_t* parent : ++hb_iter (packed))
      for (const object_t::link_t &link : parent->real_links)
      {
 const object_t* child = packed[link.objidx];
 if ((__builtin_expect (!!(!child), 0))) { err (HB_SERIALIZE_ERROR_OTHER); return; }
 unsigned offset = 0;
 switch ((whence_t) link.whence) {
 case Head: offset = child->head - parent->head; break;
 case Tail: offset = child->head - parent->tail; break;
 case Absolute: offset = (head - start) + (child->head - tail); break;
 }

 
# 533 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
(static_cast <bool> (
# 533 "../harfbuzz-6.0.0/src/hb-serialize.hh"
offset >= link.bias
# 533 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
) ? void (0) : __assert_fail (
# 533 "../harfbuzz-6.0.0/src/hb-serialize.hh"
"offset >= link.bias"
# 533 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
, "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-serialize.hh", 533, __extension__ __PRETTY_FUNCTION__))
# 533 "../harfbuzz-6.0.0/src/hb-serialize.hh"
                            ;
 offset -= link.bias;
 if (link.is_signed)
 {
   
# 537 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
  (static_cast <bool> (
# 537 "../harfbuzz-6.0.0/src/hb-serialize.hh"
  link.width == 2 || link.width == 4
# 537 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
  ) ? void (0) : __assert_fail (
# 537 "../harfbuzz-6.0.0/src/hb-serialize.hh"
  "link.width == 2 || link.width == 4"
# 537 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
  , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-serialize.hh", 537, __extension__ __PRETTY_FUNCTION__))
# 537 "../harfbuzz-6.0.0/src/hb-serialize.hh"
                                             ;
   if (link.width == 4)
     assign_offset<int32_t> (parent, link, offset);
   else
     assign_offset<int16_t> (parent, link, offset);
 }
 else
 {
   
# 545 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
  (static_cast <bool> (
# 545 "../harfbuzz-6.0.0/src/hb-serialize.hh"
  link.width == 2 || link.width == 3 || link.width == 4
# 545 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
  ) ? void (0) : __assert_fail (
# 545 "../harfbuzz-6.0.0/src/hb-serialize.hh"
  "link.width == 2 || link.width == 3 || link.width == 4"
# 545 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
  , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-serialize.hh", 545, __extension__ __PRETTY_FUNCTION__))
# 545 "../harfbuzz-6.0.0/src/hb-serialize.hh"
                                                                ;
   if (link.width == 4)
     assign_offset<uint32_t> (parent, link, offset);
   else if (link.width == 3)
     assign_offset<uint32_t, 3> (parent, link, offset);
   else
     assign_offset<uint16_t> (parent, link, offset);
 }
      }
  }

  unsigned int length () const
  {
    if ((__builtin_expect (!!(!current), 0))) return 0;
    return this->head - current->head;
  }

  void align (unsigned int alignment)
  {
    unsigned int l = length () % alignment;
    if (l)
      allocate_size<void> (alignment - l);
  }

  template <typename Type = void>
  Type *start_embed (const Type *obj __attribute__((unused)) = nullptr) const
  { return reinterpret_cast<Type *> (this->head); }
  template <typename Type>
  Type *start_embed (const Type &obj) const
  { return start_embed (std::addressof (obj)); }

  bool err (hb_serialize_error_t err_type)
  {
    return !bool ((errors = (errors | err_type)));
  }

  bool start_zerocopy (size_t size)
  {
    if ((__builtin_expect (!!(in_error ()), 0))) return false;

    if ((__builtin_expect (!!(size > 0x7fffffff 
# 585 "../harfbuzz-6.0.0/src/hb-serialize.hh"
       || this->tail - this->head < ptrdiff_t (size)), 0)))
    {
      err (HB_SERIALIZE_ERROR_OUT_OF_ROOM);
      return false;
    }

    
# 591 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   (static_cast <bool> (
# 591 "../harfbuzz-6.0.0/src/hb-serialize.hh"
   !this->zerocopy
# 591 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   ) ? void (0) : __assert_fail (
# 591 "../harfbuzz-6.0.0/src/hb-serialize.hh"
   "!this->zerocopy"
# 591 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-serialize.hh", 591, __extension__ __PRETTY_FUNCTION__))
# 591 "../harfbuzz-6.0.0/src/hb-serialize.hh"
                           ;
    this->zerocopy = this->head;

    
# 594 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   (static_cast <bool> (
# 594 "../harfbuzz-6.0.0/src/hb-serialize.hh"
   this->current->head == this->head
# 594 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   ) ? void (0) : __assert_fail (
# 594 "../harfbuzz-6.0.0/src/hb-serialize.hh"
   "this->current->head == this->head"
# 594 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-serialize.hh", 594, __extension__ __PRETTY_FUNCTION__))
# 594 "../harfbuzz-6.0.0/src/hb-serialize.hh"
                                             ;
    this->current->head = this->current->tail = this->head = this->tail - size;
    return true;
  }

  template <typename Type>
  Type *allocate_size (size_t size, bool clear = true)
  {
    if ((__builtin_expect (!!(in_error ()), 0))) return nullptr;

    if ((__builtin_expect (!!(size > 0x7fffffff 
# 604 "../harfbuzz-6.0.0/src/hb-serialize.hh"
       || this->tail - this->head < ptrdiff_t (size)), 0)))
    {
      err (HB_SERIALIZE_ERROR_OUT_OF_ROOM);
      return nullptr;
    }
    if (clear)
      hb_memset (this->head, 0, size);
    char *ret = this->head;
    this->head += size;
    return reinterpret_cast<Type *> (ret);
  }

  template <typename Type>
  Type *allocate_min ()
  { return this->allocate_size<Type> (Type::min_size); }

  template <typename Type>
  Type *embed (const Type *obj)
  {
    unsigned int size = obj->get_size ();
    Type *ret = this->allocate_size<Type> (size, false);
    if ((__builtin_expect (!!(!ret), 0))) return nullptr;
    hb_memcpy (ret, obj, size);
    return ret;
  }
  template <typename Type>
  Type *embed (const Type &obj)
  { return embed (std::addressof (obj)); }

  template <typename Type, typename ...Ts> auto
  _copy (const Type &src, hb_priority<1>, Ts&&... ds) -> hb_head_t<Type *, decltype ((src.copy (this, std::forward<Ts> (ds)...)))> { return (src.copy (this, std::forward<Ts> (ds)...)); }


  template <typename Type> auto
  _copy (const Type &src, hb_priority<0>) -> decltype (&(hb_declval<Type> () = src))
  {
    Type *ret = this->allocate_size<Type> (sizeof (Type));
    if ((__builtin_expect (!!(!ret), 0))) return nullptr;
    *ret = src;
    return ret;
  }



  template <typename Type, typename ...Ts>
  Type *copy (const Type &src, Ts&&... ds)
  { return _copy (src, hb_priority<16> (), std::forward<Ts> (ds)...); }
  template <typename Type, typename ...Ts>
  Type *copy (const Type *src, Ts&&... ds)
  { return copy (*src, std::forward<Ts> (ds)...); }

  template<typename Iterator,
    typename hb_enable_if<((hb_is_iterator_of<Iterator, typename Iterator::item_t>::value))>::type* = nullptr,
    typename ...Ts>
  void copy_all (Iterator it, Ts&&... ds)
  { for (decltype (*it) _ : it) copy (_, std::forward<Ts> (ds)...); }

  template <typename Type>
  hb_serialize_context_t& operator << (const Type &obj) & { embed (obj); return *this; }

  template <typename Type>
  Type *extend_size (Type *obj, size_t size, bool clear = true)
  {
    if ((__builtin_expect (!!(in_error ()), 0))) return nullptr;

    
# 669 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   (static_cast <bool> (
# 669 "../harfbuzz-6.0.0/src/hb-serialize.hh"
   this->start <= (char *) obj
# 669 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   ) ? void (0) : __assert_fail (
# 669 "../harfbuzz-6.0.0/src/hb-serialize.hh"
   "this->start <= (char *) obj"
# 669 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-serialize.hh", 669, __extension__ __PRETTY_FUNCTION__))
# 669 "../harfbuzz-6.0.0/src/hb-serialize.hh"
                                       ;
    
# 670 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   (static_cast <bool> (
# 670 "../harfbuzz-6.0.0/src/hb-serialize.hh"
   (char *) obj <= this->head
# 670 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   ) ? void (0) : __assert_fail (
# 670 "../harfbuzz-6.0.0/src/hb-serialize.hh"
   "(char *) obj <= this->head"
# 670 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-serialize.hh", 670, __extension__ __PRETTY_FUNCTION__))
# 670 "../harfbuzz-6.0.0/src/hb-serialize.hh"
                                      ;
    
# 671 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   (static_cast <bool> (
# 671 "../harfbuzz-6.0.0/src/hb-serialize.hh"
   (size_t) (this->head - (char *) obj) <= size
# 671 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   ) ? void (0) : __assert_fail (
# 671 "../harfbuzz-6.0.0/src/hb-serialize.hh"
   "(size_t) (this->head - (char *) obj) <= size"
# 671 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-serialize.hh", 671, __extension__ __PRETTY_FUNCTION__))
# 671 "../harfbuzz-6.0.0/src/hb-serialize.hh"
                                                        ;
    if ((__builtin_expect (!!(((char *) obj + size < (char *) obj) || !this->allocate_size<Type> (((char *) obj) + size - this->head, clear)), 0))
                                                                           ) return nullptr;
    return reinterpret_cast<Type *> (obj);
  }
  template <typename Type>
  Type *extend_size (Type &obj, size_t size, bool clear = true)
  { return extend_size (std::addressof (obj), size, clear); }

  template <typename Type>
  Type *extend_min (Type *obj) { return extend_size (obj, obj->min_size); }
  template <typename Type>
  Type *extend_min (Type &obj) { return extend_min (std::addressof (obj)); }

  template <typename Type, typename ...Ts>
  Type *extend (Type *obj, Ts&&... ds)
  { return extend_size (obj, obj->get_size (std::forward<Ts> (ds)...)); }
  template <typename Type, typename ...Ts>
  Type *extend (Type &obj, Ts&&... ds)
  { return extend (std::addressof (obj), std::forward<Ts> (ds)...); }


  hb_bytes_t copy_bytes () const
  {
    
# 695 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   (static_cast <bool> (
# 695 "../harfbuzz-6.0.0/src/hb-serialize.hh"
   successful ()
# 695 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   ) ? void (0) : __assert_fail (
# 695 "../harfbuzz-6.0.0/src/hb-serialize.hh"
   "successful ()"
# 695 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-serialize.hh", 695, __extension__ __PRETTY_FUNCTION__))
# 695 "../harfbuzz-6.0.0/src/hb-serialize.hh"
                         ;

    unsigned int len = (this->head - this->start)
       + (this->end - this->tail);



    if (!len) return hb_bytes_t ();

    char *p = (char *) malloc (len);
    if ((__builtin_expect (!!(!p), 0))) return hb_bytes_t ();

    hb_memcpy (p, this->start, this->head - this->start);
    hb_memcpy (p + (this->head - this->start), this->tail, this->end - this->tail);
    return hb_bytes_t (p, len);
  }
  template <typename Type>
  Type *copy () const
  { return reinterpret_cast<Type *> ((char *) copy_bytes ().arrayZ); }
  hb_blob_t *copy_blob () const
  {
    hb_bytes_t b = copy_bytes ();
    return hb_blob_create (b.arrayZ, b.length,
      HB_MEMORY_MODE_WRITABLE,
      (char *) b.arrayZ, free);
  }

  const hb_vector_t<object_t *>& object_graph() const
  { return packed; }

  private:
  template <typename T, unsigned Size = sizeof (T)>
  void assign_offset (const object_t* parent, const object_t::link_t &link, unsigned offset)
  {
    auto &off = * ((BEInt<T, Size> *) (parent->head + link.position));
    
# 730 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   (static_cast <bool> (
# 730 "../harfbuzz-6.0.0/src/hb-serialize.hh"
   0 == off
# 730 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   ) ? void (0) : __assert_fail (
# 730 "../harfbuzz-6.0.0/src/hb-serialize.hh"
   "0 == off"
# 730 "../harfbuzz-6.0.0/src/hb-serialize.hh" 3 4
   , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-serialize.hh", 730, __extension__ __PRETTY_FUNCTION__))
# 730 "../harfbuzz-6.0.0/src/hb-serialize.hh"
                    ;
    check_assign (off, offset, HB_SERIALIZE_ERROR_OFFSET_OVERFLOW);
  }

  public:
  char *start, *head, *tail, *end, *zerocopy;
  unsigned int debug_depth;
  hb_serialize_error_t errors;

  private:

  void merge_virtual_links (const object_t* from, objidx_t to_idx) {
    object_t* to = packed[to_idx];
    for (const auto& l : from->virtual_links) {
      to->virtual_links.push (l);
    }
  }


  hb_pool_t<object_t> object_pool;


  object_t *current;


  hb_vector_t<object_t *> packed;


  hb_hashmap_t<const object_t *, objidx_t> packed_map;
};
# 37 "../harfbuzz-6.0.0/src/hb-subset.hh" 2
# 1 "../harfbuzz-6.0.0/src/hb-subset-input.hh" 1
# 28 "../harfbuzz-6.0.0/src/hb-subset-input.hh"
#define HB_SUBSET_INPUT_HH 
# 37 "../harfbuzz-6.0.0/src/hb-subset-input.hh"
# 1 "../harfbuzz-6.0.0/src/hb-font.hh" 1
# 30 "../harfbuzz-6.0.0/src/hb-font.hh"
#define HB_FONT_HH 
# 42 "../harfbuzz-6.0.0/src/hb-font.hh"
#define HB_FONT_FUNCS_IMPLEMENT_CALLBACKS HB_FONT_FUNC_IMPLEMENT (get_,font_h_extents) HB_FONT_FUNC_IMPLEMENT (get_,font_v_extents) HB_FONT_FUNC_IMPLEMENT (get_,nominal_glyph) HB_FONT_FUNC_IMPLEMENT (get_,nominal_glyphs) HB_FONT_FUNC_IMPLEMENT (get_,variation_glyph) HB_FONT_FUNC_IMPLEMENT (get_,glyph_h_advance) HB_FONT_FUNC_IMPLEMENT (get_,glyph_v_advance) HB_FONT_FUNC_IMPLEMENT (get_,glyph_h_advances) HB_FONT_FUNC_IMPLEMENT (get_,glyph_v_advances) HB_FONT_FUNC_IMPLEMENT (get_,glyph_h_origin) HB_FONT_FUNC_IMPLEMENT (get_,glyph_v_origin) HB_FONT_FUNC_IMPLEMENT (get_,glyph_h_kerning) HB_IF_NOT_DEPRECATED (HB_FONT_FUNC_IMPLEMENT (get_,glyph_v_kerning)) HB_FONT_FUNC_IMPLEMENT (get_,glyph_extents) HB_FONT_FUNC_IMPLEMENT (get_,glyph_contour_point) HB_FONT_FUNC_IMPLEMENT (get_,glyph_name) HB_FONT_FUNC_IMPLEMENT (get_,glyph_from_name) HB_FONT_FUNC_IMPLEMENT (,draw_glyph) HB_FONT_FUNC_IMPLEMENT (,paint_glyph)
# 64 "../harfbuzz-6.0.0/src/hb-font.hh"
struct hb_font_funcs_t
{
  hb_object_header_t header;

  struct {
#define HB_FONT_FUNC_IMPLEMENT(get_,name) void *name;
    void *font_h_extents; void *font_v_extents; void *nominal_glyph; void *nominal_glyphs; void *variation_glyph; void *glyph_h_advance; void *glyph_v_advance; void *glyph_h_advances; void *glyph_v_advances; void *glyph_h_origin; void *glyph_v_origin; void *glyph_h_kerning; void *glyph_v_kerning; void *glyph_extents; void *glyph_contour_point; void *glyph_name; void *glyph_from_name; void *draw_glyph; void *paint_glyph;
#undef HB_FONT_FUNC_IMPLEMENT
  } *user_data;

  struct {
#define HB_FONT_FUNC_IMPLEMENT(get_,name) hb_destroy_func_t name;
    hb_destroy_func_t font_h_extents; hb_destroy_func_t font_v_extents; hb_destroy_func_t nominal_glyph; hb_destroy_func_t nominal_glyphs; hb_destroy_func_t variation_glyph; hb_destroy_func_t glyph_h_advance; hb_destroy_func_t glyph_v_advance; hb_destroy_func_t glyph_h_advances; hb_destroy_func_t glyph_v_advances; hb_destroy_func_t glyph_h_origin; hb_destroy_func_t glyph_v_origin; hb_destroy_func_t glyph_h_kerning; hb_destroy_func_t glyph_v_kerning; hb_destroy_func_t glyph_extents; hb_destroy_func_t glyph_contour_point; hb_destroy_func_t glyph_name; hb_destroy_func_t glyph_from_name; hb_destroy_func_t draw_glyph; hb_destroy_func_t paint_glyph;
#undef HB_FONT_FUNC_IMPLEMENT
  } *destroy;


  union get_t {
    struct get_funcs_t {
#define HB_FONT_FUNC_IMPLEMENT(get_,name) hb_font_ ##get_ ##name ##_func_t name;
      hb_font_get_font_h_extents_func_t font_h_extents; hb_font_get_font_v_extents_func_t font_v_extents; hb_font_get_nominal_glyph_func_t nominal_glyph; hb_font_get_nominal_glyphs_func_t nominal_glyphs; hb_font_get_variation_glyph_func_t variation_glyph; hb_font_get_glyph_h_advance_func_t glyph_h_advance; hb_font_get_glyph_v_advance_func_t glyph_v_advance; hb_font_get_glyph_h_advances_func_t glyph_h_advances; hb_font_get_glyph_v_advances_func_t glyph_v_advances; hb_font_get_glyph_h_origin_func_t glyph_h_origin; hb_font_get_glyph_v_origin_func_t glyph_v_origin; hb_font_get_glyph_h_kerning_func_t glyph_h_kerning; hb_font_get_glyph_v_kerning_func_t glyph_v_kerning; hb_font_get_glyph_extents_func_t glyph_extents; hb_font_get_glyph_contour_point_func_t glyph_contour_point; hb_font_get_glyph_name_func_t glyph_name; hb_font_get_glyph_from_name_func_t glyph_from_name; hb_font_draw_glyph_func_t draw_glyph; hb_font_paint_glyph_func_t paint_glyph;
#undef HB_FONT_FUNC_IMPLEMENT
    } f;
    void (*array[0
#define HB_FONT_FUNC_IMPLEMENT(get_,name) +1
      +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1
#undef HB_FONT_FUNC_IMPLEMENT
  ]) ();
  } get;
};
extern __attribute__((__visibility__("hidden"))) const hb_font_funcs_t _hb_Null_hb_font_funcs_t; template <> struct Null<hb_font_funcs_t> { static hb_font_funcs_t const & get_null () { return _hb_Null_hb_font_funcs_t; } }; static_assert (true, "");






#define HB_SHAPER_IMPLEMENT(shaper) HB_SHAPER_DATA_INSTANTIATE_SHAPERS(shaper, font);
# 1 "../harfbuzz-6.0.0/src/hb-shaper-list.hh" 1
# 42 "../harfbuzz-6.0.0/src/hb-shaper-list.hh"
struct hb_ot_font_data_t; extern "C" __attribute__((__visibility__("hidden"))) hb_ot_font_data_t * _hb_ot_shaper_font_data_create (hb_font_t *font); extern "C" __attribute__((__visibility__("hidden"))) void _hb_ot_shaper_font_data_destroy (hb_ot_font_data_t *ot_font); template <> struct hb_shaper_object_data_type_t<HB_SHAPER_ORDER_ot, hb_font_t> { typedef hb_ot_font_data_t value; }; template <unsigned int WheresData> struct hb_shaper_lazy_loader_t<hb_font_t, WheresData, hb_ot_font_data_t> : hb_lazy_loader_t<hb_ot_font_data_t, hb_shaper_lazy_loader_t<hb_font_t, WheresData, hb_ot_font_data_t>, hb_font_t, WheresData> { typedef hb_ot_font_data_t Type; static Type* create (hb_font_t *data) { return _hb_ot_shaper_font_data_create (data); } static Type *get_null () { return nullptr; } static void destroy (Type *p) { _hb_ot_shaper_font_data_destroy (p); } }; static_assert (true, "");
# 56 "../harfbuzz-6.0.0/src/hb-shaper-list.hh"
struct hb_fallback_font_data_t; extern "C" __attribute__((__visibility__("hidden"))) hb_fallback_font_data_t * _hb_fallback_shaper_font_data_create (hb_font_t *font); extern "C" __attribute__((__visibility__("hidden"))) void _hb_fallback_shaper_font_data_destroy (hb_fallback_font_data_t *fallback_font); template <> struct hb_shaper_object_data_type_t<HB_SHAPER_ORDER_fallback, hb_font_t> { typedef hb_fallback_font_data_t value; }; template <unsigned int WheresData> struct hb_shaper_lazy_loader_t<hb_font_t, WheresData, hb_fallback_font_data_t> : hb_lazy_loader_t<hb_fallback_font_data_t, hb_shaper_lazy_loader_t<hb_font_t, WheresData, hb_fallback_font_data_t>, hb_font_t, WheresData> { typedef hb_fallback_font_data_t Type; static Type* create (hb_font_t *data) { return _hb_fallback_shaper_font_data_create (data); } static Type *get_null () { return nullptr; } static void destroy (Type *p) { _hb_fallback_shaper_font_data_destroy (p); } }; static_assert (true, "");
# 103 "../harfbuzz-6.0.0/src/hb-font.hh" 2
#undef HB_SHAPER_IMPLEMENT

struct hb_font_t
{
  hb_object_header_t header;
  unsigned int serial;
  unsigned int serial_coords;

  hb_font_t *parent;
  hb_face_t *face;

  int32_t x_scale;
  int32_t y_scale;
  float slant;
  float slant_xy;
  float x_multf;
  float y_multf;
  int64_t x_mult;
  int64_t y_mult;

  unsigned int x_ppem;
  unsigned int y_ppem;

  float ptem;


  unsigned int instance_index;
  unsigned int num_coords;
  int *coords;
  float *design_coords;

  hb_font_funcs_t *klass;
  void *user_data;
  hb_destroy_func_t destroy;

  hb_shaper_object_dataset_t<hb_font_t> data;



  int64_t dir_mult (hb_direction_t direction)
  { return ((((unsigned int) (direction)) & ~1U) == 6) ? y_mult : x_mult; }
  hb_position_t em_scale_x (int16_t v) { return em_mult (v, x_mult); }
  hb_position_t em_scale_y (int16_t v) { return em_mult (v, y_mult); }
  hb_position_t em_scalef_x (float v) { return em_multf (v, x_multf); }
  hb_position_t em_scalef_y (float v) { return em_multf (v, y_multf); }
  float em_fscale_x (int16_t v) { return em_fmult (v, x_multf); }
  float em_fscale_y (int16_t v) { return em_fmult (v, y_multf); }
  float em_fscalef_x (float v) { return em_fmultf (v, x_multf); }
  float em_fscalef_y (float v) { return em_fmultf (v, y_multf); }
  hb_position_t em_scale_dir (int16_t v, hb_direction_t direction)
  { return em_mult (v, dir_mult (direction)); }


  hb_position_t parent_scale_x_distance (hb_position_t v)
  {
    if ((__builtin_expect (!!(parent && parent->x_scale != x_scale), 0)))
      return (hb_position_t) (v * (int64_t) this->x_scale / this->parent->x_scale);
    return v;
  }
  hb_position_t parent_scale_y_distance (hb_position_t v)
  {
    if ((__builtin_expect (!!(parent && parent->y_scale != y_scale), 0)))
      return (hb_position_t) (v * (int64_t) this->y_scale / this->parent->y_scale);
    return v;
  }
  hb_position_t parent_scale_x_position (hb_position_t v)
  { return parent_scale_x_distance (v); }
  hb_position_t parent_scale_y_position (hb_position_t v)
  { return parent_scale_y_distance (v); }

  void parent_scale_distance (hb_position_t *x, hb_position_t *y)
  {
    *x = parent_scale_x_distance (*x);
    *y = parent_scale_y_distance (*y);
  }
  void parent_scale_position (hb_position_t *x, hb_position_t *y)
  {
    *x = parent_scale_x_position (*x);
    *y = parent_scale_y_position (*y);
  }

  void scale_glyph_extents (hb_glyph_extents_t *extents)
  {
    float x1 = em_fscale_x (extents->x_bearing);
    float y1 = em_fscale_y (extents->y_bearing);
    float x2 = em_fscale_x (extents->x_bearing + extents->width);
    float y2 = em_fscale_y (extents->y_bearing + extents->height);


    if (slant_xy)
    {
      x1 += hb_min (y1 * slant_xy, y2 * slant_xy);
      x2 += hb_max (y1 * slant_xy, y2 * slant_xy);
    }

    extents->x_bearing = floorf (x1);
    extents->y_bearing = floorf (y1);
    extents->width = ceilf (x2) - extents->x_bearing;
    extents->height = ceilf (y2) - extents->y_bearing;

  }




  __attribute__((__visibility__("hidden"))) bool has_func (unsigned int i);
  __attribute__((__visibility__("hidden"))) bool has_func_set (unsigned int i);


#define HB_FONT_FUNC_IMPLEMENT(get_,name) bool has_ ##name ##_func () { hb_font_funcs_t *funcs = this->klass; unsigned int i = offsetof (hb_font_funcs_t::get_t::get_funcs_t, name) / sizeof (funcs->get.array[0]); return has_func (i); } bool has_ ##name ##_func_set () { hb_font_funcs_t *funcs = this->klass; unsigned int i = offsetof (hb_font_funcs_t::get_t::get_funcs_t, name) / sizeof (funcs->get.array[0]); return has_func_set (i); }
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
  bool has_font_h_extents_func () { hb_font_funcs_t *funcs = this->klass; unsigned int i = 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 __builtin_offsetof (
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 hb_font_funcs_t::get_t::get_funcs_t
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 , 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 font_h_extents
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 ) 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 / sizeof (funcs->get.array[0]); return has_func (i); } bool has_font_h_extents_func_set () { hb_font_funcs_t *funcs = this->klass; unsigned int i = 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 __builtin_offsetof (
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 hb_font_funcs_t::get_t::get_funcs_t
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 , 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 font_h_extents
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 ) 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 / sizeof (funcs->get.array[0]); return has_func_set (i); } bool has_font_v_extents_func () { hb_font_funcs_t *funcs = this->klass; unsigned int i = 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 __builtin_offsetof (
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 hb_font_funcs_t::get_t::get_funcs_t
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 , 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 font_v_extents
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 ) 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 / sizeof (funcs->get.array[0]); return has_func (i); } bool has_font_v_extents_func_set () { hb_font_funcs_t *funcs = this->klass; unsigned int i = 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 __builtin_offsetof (
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 hb_font_funcs_t::get_t::get_funcs_t
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 , 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 font_v_extents
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 ) 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 / sizeof (funcs->get.array[0]); return has_func_set (i); } bool has_nominal_glyph_func () { hb_font_funcs_t *funcs = this->klass; unsigned int i = 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 __builtin_offsetof (
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 hb_font_funcs_t::get_t::get_funcs_t
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 , 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 nominal_glyph
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 ) 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 / sizeof (funcs->get.array[0]); return has_func (i); } bool has_nominal_glyph_func_set () { hb_font_funcs_t *funcs = this->klass; unsigned int i = 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 __builtin_offsetof (
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 hb_font_funcs_t::get_t::get_funcs_t
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 , 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 nominal_glyph
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 ) 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 / sizeof (funcs->get.array[0]); return has_func_set (i); } bool has_nominal_glyphs_func () { hb_font_funcs_t *funcs = this->klass; unsigned int i = 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 __builtin_offsetof (
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 hb_font_funcs_t::get_t::get_funcs_t
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 , 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 nominal_glyphs
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 ) 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 / sizeof (funcs->get.array[0]); return has_func (i); } bool has_nominal_glyphs_func_set () { hb_font_funcs_t *funcs = this->klass; unsigned int i = 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 __builtin_offsetof (
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 hb_font_funcs_t::get_t::get_funcs_t
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 , 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 nominal_glyphs
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 ) 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 / sizeof (funcs->get.array[0]); return has_func_set (i); } bool has_variation_glyph_func () { hb_font_funcs_t *funcs = this->klass; unsigned int i = 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 __builtin_offsetof (
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 hb_font_funcs_t::get_t::get_funcs_t
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 , 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 variation_glyph
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 ) 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 / sizeof (funcs->get.array[0]); return has_func (i); } bool has_variation_glyph_func_set () { hb_font_funcs_t *funcs = this->klass; unsigned int i = 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 __builtin_offsetof (
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 hb_font_funcs_t::get_t::get_funcs_t
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 , 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 variation_glyph
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 ) 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 / sizeof (funcs->get.array[0]); return has_func_set (i); } bool has_glyph_h_advance_func () { hb_font_funcs_t *funcs = this->klass; unsigned int i = 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 __builtin_offsetof (
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 hb_font_funcs_t::get_t::get_funcs_t
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 , 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 glyph_h_advance
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 ) 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 / sizeof (funcs->get.array[0]); return has_func (i); } bool has_glyph_h_advance_func_set () { hb_font_funcs_t *funcs = this->klass; unsigned int i = 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 __builtin_offsetof (
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 hb_font_funcs_t::get_t::get_funcs_t
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 , 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 glyph_h_advance
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 ) 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 / sizeof (funcs->get.array[0]); return has_func_set (i); } bool has_glyph_v_advance_func () { hb_font_funcs_t *funcs = this->klass; unsigned int i = 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 __builtin_offsetof (
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 hb_font_funcs_t::get_t::get_funcs_t
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 , 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 glyph_v_advance
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 ) 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 / sizeof (funcs->get.array[0]); return has_func (i); } bool has_glyph_v_advance_func_set () { hb_font_funcs_t *funcs = this->klass; unsigned int i = 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 __builtin_offsetof (
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 hb_font_funcs_t::get_t::get_funcs_t
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 , 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 glyph_v_advance
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 ) 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 / sizeof (funcs->get.array[0]); return has_func_set (i); } bool has_glyph_h_advances_func () { hb_font_funcs_t *funcs = this->klass; unsigned int i = 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 __builtin_offsetof (
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 hb_font_funcs_t::get_t::get_funcs_t
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 , 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 glyph_h_advances
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 ) 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 / sizeof (funcs->get.array[0]); return has_func (i); } bool has_glyph_h_advances_func_set () { hb_font_funcs_t *funcs = this->klass; unsigned int i = 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 __builtin_offsetof (
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 hb_font_funcs_t::get_t::get_funcs_t
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 , 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 glyph_h_advances
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 ) 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 / sizeof (funcs->get.array[0]); return has_func_set (i); } bool has_glyph_v_advances_func () { hb_font_funcs_t *funcs = this->klass; unsigned int i = 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 __builtin_offsetof (
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 hb_font_funcs_t::get_t::get_funcs_t
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 , 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 glyph_v_advances
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 ) 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 / sizeof (funcs->get.array[0]); return has_func (i); } bool has_glyph_v_advances_func_set () { hb_font_funcs_t *funcs = this->klass; unsigned int i = 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 __builtin_offsetof (
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 hb_font_funcs_t::get_t::get_funcs_t
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 , 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 glyph_v_advances
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 ) 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 / sizeof (funcs->get.array[0]); return has_func_set (i); } bool has_glyph_h_origin_func () { hb_font_funcs_t *funcs = this->klass; unsigned int i = 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 __builtin_offsetof (
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 hb_font_funcs_t::get_t::get_funcs_t
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 , 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 glyph_h_origin
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 ) 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 / sizeof (funcs->get.array[0]); return has_func (i); } bool has_glyph_h_origin_func_set () { hb_font_funcs_t *funcs = this->klass; unsigned int i = 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 __builtin_offsetof (
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 hb_font_funcs_t::get_t::get_funcs_t
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 , 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 glyph_h_origin
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 ) 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 / sizeof (funcs->get.array[0]); return has_func_set (i); } bool has_glyph_v_origin_func () { hb_font_funcs_t *funcs = this->klass; unsigned int i = 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 __builtin_offsetof (
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 hb_font_funcs_t::get_t::get_funcs_t
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 , 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 glyph_v_origin
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 ) 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 / sizeof (funcs->get.array[0]); return has_func (i); } bool has_glyph_v_origin_func_set () { hb_font_funcs_t *funcs = this->klass; unsigned int i = 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 __builtin_offsetof (
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 hb_font_funcs_t::get_t::get_funcs_t
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 , 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 glyph_v_origin
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 ) 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 / sizeof (funcs->get.array[0]); return has_func_set (i); } bool has_glyph_h_kerning_func () { hb_font_funcs_t *funcs = this->klass; unsigned int i = 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 __builtin_offsetof (
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 hb_font_funcs_t::get_t::get_funcs_t
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 , 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 glyph_h_kerning
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 ) 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 / sizeof (funcs->get.array[0]); return has_func (i); } bool has_glyph_h_kerning_func_set () { hb_font_funcs_t *funcs = this->klass; unsigned int i = 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 __builtin_offsetof (
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 hb_font_funcs_t::get_t::get_funcs_t
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 , 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 glyph_h_kerning
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 ) 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 / sizeof (funcs->get.array[0]); return has_func_set (i); } bool has_glyph_v_kerning_func () { hb_font_funcs_t *funcs = this->klass; unsigned int i = 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 __builtin_offsetof (
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 hb_font_funcs_t::get_t::get_funcs_t
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 , 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 glyph_v_kerning
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 ) 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 / sizeof (funcs->get.array[0]); return has_func (i); } bool has_glyph_v_kerning_func_set () { hb_font_funcs_t *funcs = this->klass; unsigned int i = 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 __builtin_offsetof (
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 hb_font_funcs_t::get_t::get_funcs_t
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 , 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 glyph_v_kerning
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 ) 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 / sizeof (funcs->get.array[0]); return has_func_set (i); } bool has_glyph_extents_func () { hb_font_funcs_t *funcs = this->klass; unsigned int i = 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 __builtin_offsetof (
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 hb_font_funcs_t::get_t::get_funcs_t
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 , 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 glyph_extents
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 ) 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 / sizeof (funcs->get.array[0]); return has_func (i); } bool has_glyph_extents_func_set () { hb_font_funcs_t *funcs = this->klass; unsigned int i = 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 __builtin_offsetof (
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 hb_font_funcs_t::get_t::get_funcs_t
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 , 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 glyph_extents
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 ) 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 / sizeof (funcs->get.array[0]); return has_func_set (i); } bool has_glyph_contour_point_func () { hb_font_funcs_t *funcs = this->klass; unsigned int i = 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 __builtin_offsetof (
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 hb_font_funcs_t::get_t::get_funcs_t
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 , 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 glyph_contour_point
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 ) 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 / sizeof (funcs->get.array[0]); return has_func (i); } bool has_glyph_contour_point_func_set () { hb_font_funcs_t *funcs = this->klass; unsigned int i = 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 __builtin_offsetof (
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 hb_font_funcs_t::get_t::get_funcs_t
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 , 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 glyph_contour_point
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 ) 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 / sizeof (funcs->get.array[0]); return has_func_set (i); } bool has_glyph_name_func () { hb_font_funcs_t *funcs = this->klass; unsigned int i = 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 __builtin_offsetof (
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 hb_font_funcs_t::get_t::get_funcs_t
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 , 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 glyph_name
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 ) 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 / sizeof (funcs->get.array[0]); return has_func (i); } bool has_glyph_name_func_set () { hb_font_funcs_t *funcs = this->klass; unsigned int i = 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 __builtin_offsetof (
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 hb_font_funcs_t::get_t::get_funcs_t
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 , 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 glyph_name
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 ) 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 / sizeof (funcs->get.array[0]); return has_func_set (i); } bool has_glyph_from_name_func () { hb_font_funcs_t *funcs = this->klass; unsigned int i = 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 __builtin_offsetof (
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 hb_font_funcs_t::get_t::get_funcs_t
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 , 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 glyph_from_name
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 ) 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 / sizeof (funcs->get.array[0]); return has_func (i); } bool has_glyph_from_name_func_set () { hb_font_funcs_t *funcs = this->klass; unsigned int i = 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 __builtin_offsetof (
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 hb_font_funcs_t::get_t::get_funcs_t
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 , 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 glyph_from_name
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 ) 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 / sizeof (funcs->get.array[0]); return has_func_set (i); } bool has_draw_glyph_func () { hb_font_funcs_t *funcs = this->klass; unsigned int i = 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 __builtin_offsetof (
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 hb_font_funcs_t::get_t::get_funcs_t
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 , 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 draw_glyph
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 ) 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 / sizeof (funcs->get.array[0]); return has_func (i); } bool has_draw_glyph_func_set () { hb_font_funcs_t *funcs = this->klass; unsigned int i = 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 __builtin_offsetof (
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 hb_font_funcs_t::get_t::get_funcs_t
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 , 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 draw_glyph
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 ) 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 / sizeof (funcs->get.array[0]); return has_func_set (i); } bool has_paint_glyph_func () { hb_font_funcs_t *funcs = this->klass; unsigned int i = 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 __builtin_offsetof (
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 hb_font_funcs_t::get_t::get_funcs_t
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 , 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 paint_glyph
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 ) 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 / sizeof (funcs->get.array[0]); return has_func (i); } bool has_paint_glyph_func_set () { hb_font_funcs_t *funcs = this->klass; unsigned int i = 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 __builtin_offsetof (
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 hb_font_funcs_t::get_t::get_funcs_t
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 , 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 paint_glyph
# 227 "../harfbuzz-6.0.0/src/hb-font.hh" 3 4
 ) 
# 227 "../harfbuzz-6.0.0/src/hb-font.hh"
 / sizeof (funcs->get.array[0]); return has_func_set (i); }
#undef HB_FONT_FUNC_IMPLEMENT

  hb_bool_t get_font_h_extents (hb_font_extents_t *extents)
  {
    hb_memset (extents, 0, sizeof (*extents));
    return klass->get.f.font_h_extents (this, user_data,
     extents,
     !klass->user_data ? nullptr : klass->user_data->font_h_extents);
  }
  hb_bool_t get_font_v_extents (hb_font_extents_t *extents)
  {
    hb_memset (extents, 0, sizeof (*extents));
    return klass->get.f.font_v_extents (this, user_data,
     extents,
     !klass->user_data ? nullptr : klass->user_data->font_v_extents);
  }

  bool has_glyph (hb_codepoint_t unicode)
  {
    hb_codepoint_t glyph;
    return get_nominal_glyph (unicode, &glyph);
  }

  hb_bool_t get_nominal_glyph (hb_codepoint_t unicode,
          hb_codepoint_t *glyph,
          hb_codepoint_t not_found = 0)
  {
    *glyph = not_found;
    return klass->get.f.nominal_glyph (this, user_data,
           unicode, glyph,
           !klass->user_data ? nullptr : klass->user_data->nominal_glyph);
  }
  unsigned int get_nominal_glyphs (unsigned int count,
       const hb_codepoint_t *first_unicode,
       unsigned int unicode_stride,
       hb_codepoint_t *first_glyph,
       unsigned int glyph_stride)
  {
    return klass->get.f.nominal_glyphs (this, user_data,
     count,
     first_unicode, unicode_stride,
     first_glyph, glyph_stride,
     !klass->user_data ? nullptr : klass->user_data->nominal_glyphs);
  }

  hb_bool_t get_variation_glyph (hb_codepoint_t unicode, hb_codepoint_t variation_selector,
     hb_codepoint_t *glyph,
     hb_codepoint_t not_found = 0)
  {
    *glyph = not_found;
    return klass->get.f.variation_glyph (this, user_data,
      unicode, variation_selector, glyph,
      !klass->user_data ? nullptr : klass->user_data->variation_glyph);
  }

  hb_position_t get_glyph_h_advance (hb_codepoint_t glyph)
  {
    return klass->get.f.glyph_h_advance (this, user_data,
      glyph,
      !klass->user_data ? nullptr : klass->user_data->glyph_h_advance);
  }

  hb_position_t get_glyph_v_advance (hb_codepoint_t glyph)
  {
    return klass->get.f.glyph_v_advance (this, user_data,
      glyph,
      !klass->user_data ? nullptr : klass->user_data->glyph_v_advance);
  }

  void get_glyph_h_advances (unsigned int count,
        const hb_codepoint_t *first_glyph,
        unsigned int glyph_stride,
        hb_position_t *first_advance,
        unsigned int advance_stride)
  {
    return klass->get.f.glyph_h_advances (this, user_data,
       count,
       first_glyph, glyph_stride,
       first_advance, advance_stride,
       !klass->user_data ? nullptr : klass->user_data->glyph_h_advances);
  }

  void get_glyph_v_advances (unsigned int count,
        const hb_codepoint_t *first_glyph,
        unsigned int glyph_stride,
        hb_position_t *first_advance,
        unsigned int advance_stride)
  {
    return klass->get.f.glyph_v_advances (this, user_data,
       count,
       first_glyph, glyph_stride,
       first_advance, advance_stride,
       !klass->user_data ? nullptr : klass->user_data->glyph_v_advances);
  }

  hb_bool_t get_glyph_h_origin (hb_codepoint_t glyph,
    hb_position_t *x, hb_position_t *y)
  {
    *x = *y = 0;
    return klass->get.f.glyph_h_origin (this, user_data,
     glyph, x, y,
     !klass->user_data ? nullptr : klass->user_data->glyph_h_origin);
  }

  hb_bool_t get_glyph_v_origin (hb_codepoint_t glyph,
    hb_position_t *x, hb_position_t *y)
  {
    *x = *y = 0;
    return klass->get.f.glyph_v_origin (this, user_data,
     glyph, x, y,
     !klass->user_data ? nullptr : klass->user_data->glyph_v_origin);
  }

  hb_position_t get_glyph_h_kerning (hb_codepoint_t left_glyph,
         hb_codepoint_t right_glyph)
  {



    return klass->get.f.glyph_h_kerning (this, user_data,
      left_glyph, right_glyph,
      !klass->user_data ? nullptr : klass->user_data->glyph_h_kerning);

  }

  hb_position_t get_glyph_v_kerning (hb_codepoint_t top_glyph,
         hb_codepoint_t bottom_glyph)
  {



    return klass->get.f.glyph_v_kerning (this, user_data,
      top_glyph, bottom_glyph,
      !klass->user_data ? nullptr : klass->user_data->glyph_v_kerning);

  }

  hb_bool_t get_glyph_extents (hb_codepoint_t glyph,
          hb_glyph_extents_t *extents)
  {
    hb_memset (extents, 0, sizeof (*extents));
    return klass->get.f.glyph_extents (this, user_data,
           glyph,
           extents,
           !klass->user_data ? nullptr : klass->user_data->glyph_extents);
  }

  hb_bool_t get_glyph_contour_point (hb_codepoint_t glyph, unsigned int point_index,
         hb_position_t *x, hb_position_t *y)
  {
    *x = *y = 0;
    return klass->get.f.glyph_contour_point (this, user_data,
          glyph, point_index,
          x, y,
          !klass->user_data ? nullptr : klass->user_data->glyph_contour_point);
  }

  hb_bool_t get_glyph_name (hb_codepoint_t glyph,
       char *name, unsigned int size)
  {
    if (size) *name = '\0';
    return klass->get.f.glyph_name (this, user_data,
        glyph,
        name, size,
        !klass->user_data ? nullptr : klass->user_data->glyph_name);
  }

  hb_bool_t get_glyph_from_name (const char *name, int len,
     hb_codepoint_t *glyph)
  {
    *glyph = 0;
    if (len == -1) len = strlen (name);
    return klass->get.f.glyph_from_name (this, user_data,
      name, len,
      glyph,
      !klass->user_data ? nullptr : klass->user_data->glyph_from_name);
  }

  void draw_glyph (hb_codepoint_t glyph,
     hb_draw_funcs_t *draw_funcs, void *draw_data)
  {
    klass->get.f.draw_glyph (this, user_data,
        glyph,
        draw_funcs, draw_data,
        !klass->user_data ? nullptr : klass->user_data->draw_glyph);
  }

  void paint_glyph (hb_codepoint_t glyph,
                    hb_paint_funcs_t *paint_funcs, void *paint_data,
                    unsigned int palette,
                    hb_color_t foreground)
  {
    klass->get.f.paint_glyph (this, user_data,
                              glyph,
                              paint_funcs, paint_data,
                              palette, foreground,
                              !klass->user_data ? nullptr : klass->user_data->paint_glyph);
  }



  void get_h_extents_with_fallback (hb_font_extents_t *extents)
  {
    if (!get_font_h_extents (extents))
    {
      extents->ascender = y_scale * .8;
      extents->descender = extents->ascender - y_scale;
      extents->line_gap = 0;
    }
  }
  void get_v_extents_with_fallback (hb_font_extents_t *extents)
  {
    if (!get_font_v_extents (extents))
    {
      extents->ascender = x_scale / 2;
      extents->descender = extents->ascender - x_scale;
      extents->line_gap = 0;
    }
  }

  void get_extents_for_direction (hb_direction_t direction,
      hb_font_extents_t *extents)
  {
    if ((__builtin_expect (!!(((((unsigned int) (direction)) & ~1U) == 4)), 1)))
      get_h_extents_with_fallback (extents);
    else
      get_v_extents_with_fallback (extents);
  }

  void get_glyph_advance_for_direction (hb_codepoint_t glyph,
     hb_direction_t direction,
     hb_position_t *x, hb_position_t *y)
  {
    *x = *y = 0;
    if ((__builtin_expect (!!(((((unsigned int) (direction)) & ~1U) == 4)), 1)))
      *x = get_glyph_h_advance (glyph);
    else
      *y = get_glyph_v_advance (glyph);
  }
  void get_glyph_advances_for_direction (hb_direction_t direction,
      unsigned int count,
      const hb_codepoint_t *first_glyph,
      unsigned glyph_stride,
      hb_position_t *first_advance,
      unsigned advance_stride)
  {
    if ((__builtin_expect (!!(((((unsigned int) (direction)) & ~1U) == 4)), 1)))
      get_glyph_h_advances (count, first_glyph, glyph_stride, first_advance, advance_stride);
    else
      get_glyph_v_advances (count, first_glyph, glyph_stride, first_advance, advance_stride);
  }

  void guess_v_origin_minus_h_origin (hb_codepoint_t glyph,
          hb_position_t *x, hb_position_t *y)
  {
    *x = get_glyph_h_advance (glyph) / 2;

    hb_font_extents_t extents;
    get_h_extents_with_fallback (&extents);
    *y = extents.ascender;
  }

  void get_glyph_h_origin_with_fallback (hb_codepoint_t glyph,
      hb_position_t *x, hb_position_t *y)
  {
    if (!get_glyph_h_origin (glyph, x, y) &&
  get_glyph_v_origin (glyph, x, y))
    {
      hb_position_t dx, dy;
      guess_v_origin_minus_h_origin (glyph, &dx, &dy);
      *x -= dx; *y -= dy;
    }
  }
  void get_glyph_v_origin_with_fallback (hb_codepoint_t glyph,
      hb_position_t *x, hb_position_t *y)
  {
    if (!get_glyph_v_origin (glyph, x, y) &&
  get_glyph_h_origin (glyph, x, y))
    {
      hb_position_t dx, dy;
      guess_v_origin_minus_h_origin (glyph, &dx, &dy);
      *x += dx; *y += dy;
    }
  }

  void get_glyph_origin_for_direction (hb_codepoint_t glyph,
           hb_direction_t direction,
           hb_position_t *x, hb_position_t *y)
  {
    if ((__builtin_expect (!!(((((unsigned int) (direction)) & ~1U) == 4)), 1)))
      get_glyph_h_origin_with_fallback (glyph, x, y);
    else
      get_glyph_v_origin_with_fallback (glyph, x, y);
  }

  void add_glyph_h_origin (hb_codepoint_t glyph,
      hb_position_t *x, hb_position_t *y)
  {
    hb_position_t origin_x, origin_y;

    get_glyph_h_origin_with_fallback (glyph, &origin_x, &origin_y);

    *x += origin_x;
    *y += origin_y;
  }
  void add_glyph_v_origin (hb_codepoint_t glyph,
      hb_position_t *x, hb_position_t *y)
  {
    hb_position_t origin_x, origin_y;

    get_glyph_v_origin_with_fallback (glyph, &origin_x, &origin_y);

    *x += origin_x;
    *y += origin_y;
  }
  void add_glyph_origin_for_direction (hb_codepoint_t glyph,
           hb_direction_t direction,
           hb_position_t *x, hb_position_t *y)
  {
    hb_position_t origin_x, origin_y;

    get_glyph_origin_for_direction (glyph, direction, &origin_x, &origin_y);

    *x += origin_x;
    *y += origin_y;
  }

  void subtract_glyph_h_origin (hb_codepoint_t glyph,
    hb_position_t *x, hb_position_t *y)
  {
    hb_position_t origin_x, origin_y;

    get_glyph_h_origin_with_fallback (glyph, &origin_x, &origin_y);

    *x -= origin_x;
    *y -= origin_y;
  }
  void subtract_glyph_v_origin (hb_codepoint_t glyph,
    hb_position_t *x, hb_position_t *y)
  {
    hb_position_t origin_x, origin_y;

    get_glyph_v_origin_with_fallback (glyph, &origin_x, &origin_y);

    *x -= origin_x;
    *y -= origin_y;
  }
  void subtract_glyph_origin_for_direction (hb_codepoint_t glyph,
         hb_direction_t direction,
         hb_position_t *x, hb_position_t *y)
  {
    hb_position_t origin_x, origin_y;

    get_glyph_origin_for_direction (glyph, direction, &origin_x, &origin_y);

    *x -= origin_x;
    *y -= origin_y;
  }

  void get_glyph_kerning_for_direction (hb_codepoint_t first_glyph, hb_codepoint_t second_glyph,
     hb_direction_t direction,
     hb_position_t *x, hb_position_t *y)
  {
    if ((__builtin_expect (!!(((((unsigned int) (direction)) & ~1U) == 4)), 1))) {
      *y = 0;
      *x = get_glyph_h_kerning (first_glyph, second_glyph);
    } else {
      *x = 0;
      *y = get_glyph_v_kerning (first_glyph, second_glyph);
    }
  }

  hb_bool_t get_glyph_extents_for_origin (hb_codepoint_t glyph,
       hb_direction_t direction,
       hb_glyph_extents_t *extents)
  {
    hb_bool_t ret = get_glyph_extents (glyph, extents);

    if (ret)
      subtract_glyph_origin_for_direction (glyph, direction, &extents->x_bearing, &extents->y_bearing);

    return ret;
  }

  hb_bool_t get_glyph_contour_point_for_origin (hb_codepoint_t glyph, unsigned int point_index,
      hb_direction_t direction,
      hb_position_t *x, hb_position_t *y)
  {
    hb_bool_t ret = get_glyph_contour_point (glyph, point_index, x, y);

    if (ret)
      subtract_glyph_origin_for_direction (glyph, direction, x, y);

    return ret;
  }


  void
  glyph_to_string (hb_codepoint_t glyph,
     char *s, unsigned int size)
  {
    if (get_glyph_name (glyph, s, size)) return;

    if (size && snprintf (s, size, "gid%u", glyph) < 0)
      *s = '\0';
  }


  hb_bool_t
  glyph_from_string (const char *s, int len,
       hb_codepoint_t *glyph)
  {
    if (get_glyph_from_name (s, len, glyph)) return true;

    if (len == -1) len = strlen (s);


    if (hb_codepoint_parse (s, len, 10, glyph))
      return true;

    if (len > 3)
    {

      if (0 == strncmp (s, "gid", 3) &&
   hb_codepoint_parse (s + 3, len - 3, 10, glyph))
 return true;


      hb_codepoint_t unichar;
      if (0 == strncmp (s, "uni", 3) &&
   hb_codepoint_parse (s + 3, len - 3, 16, &unichar) &&
   get_nominal_glyph (unichar, glyph))
 return true;
    }

    return false;
  }

  void mults_changed ()
  {
    float upem = face->get_upem ();
    x_multf = x_scale / upem;
    y_multf = y_scale / upem;
    bool x_neg = x_scale < 0;
    x_mult = (x_neg ? -((int64_t) -x_scale << 16) : ((int64_t) x_scale << 16)) / upem;
    bool y_neg = y_scale < 0;
    y_mult = (y_neg ? -((int64_t) -y_scale << 16) : ((int64_t) y_scale << 16)) / upem;
    slant_xy = y_scale ? slant * x_scale / y_scale : 0.f;

    data.fini ();
  }

  hb_position_t em_mult (int16_t v, int64_t mult)
  { return (hb_position_t) ((v * mult + 32768) >> 16); }
  hb_position_t em_multf (float v, float mult)
  { return (hb_position_t) _hb_roundf(em_fmultf (v, mult)); }
  float em_fmultf (float v, float mult)
  { return v * mult; }
  float em_fmult (int16_t v, float mult)
  { return (float) v * mult; }
};
extern __attribute__((__visibility__("hidden"))) const hb_font_t _hb_Null_hb_font_t; template <> struct Null<hb_font_t> { static hb_font_t const & get_null () { return _hb_Null_hb_font_t; } }; static_assert (true, "");
# 38 "../harfbuzz-6.0.0/src/hb-subset-input.hh" 2

struct hb_ot_name_record_ids_t
{
  hb_ot_name_record_ids_t () = default;
  hb_ot_name_record_ids_t (unsigned platform_id_,
                           unsigned encoding_id_,
                           unsigned language_id_,
                           unsigned name_id_)
      :platform_id (platform_id_),
      encoding_id (encoding_id_),
      language_id (language_id_),
      name_id (name_id_) {}

  bool operator != (const hb_ot_name_record_ids_t o) const
  { return !(*this == o); }

  inline bool operator == (const hb_ot_name_record_ids_t& o) const
  {
    return platform_id == o.platform_id &&
           encoding_id == o.encoding_id &&
           language_id == o.language_id &&
           name_id == o.name_id;
  }

  inline uint32_t hash () const
  {
    uint32_t current = 0;
    current = current * 31 + hb_hash (platform_id);
    current = current * 31 + hb_hash (encoding_id);
    current = current * 31 + hb_hash (language_id);
    current = current * 31 + hb_hash (name_id);
    return current;
  }

  unsigned platform_id;
  unsigned encoding_id;
  unsigned language_id;
  unsigned name_id;
};

typedef struct hb_ot_name_record_ids_t hb_ot_name_record_ids_t;


extern "C++" { static inline constexpr hb_subset_flags_t operator | (hb_subset_flags_t l, hb_subset_flags_t r) { return hb_subset_flags_t ((unsigned) l | (unsigned) r); } static inline constexpr hb_subset_flags_t operator & (hb_subset_flags_t l, hb_subset_flags_t r) { return hb_subset_flags_t ((unsigned) l & (unsigned) r); } static inline constexpr hb_subset_flags_t operator ^ (hb_subset_flags_t l, hb_subset_flags_t r) { return hb_subset_flags_t ((unsigned) l ^ (unsigned) r); } static inline constexpr unsigned operator ~ (hb_subset_flags_t r) { return (~(unsigned) r); } static inline hb_subset_flags_t& operator |= (hb_subset_flags_t &l, hb_subset_flags_t r) { l = l | r; return l; } static inline hb_subset_flags_t& operator &= (hb_subset_flags_t& l, hb_subset_flags_t r) { l = l & r; return l; } static inline hb_subset_flags_t& operator ^= (hb_subset_flags_t& l, hb_subset_flags_t r) { l = l ^ r; return l; } } static_assert (true, "");

struct hb_subset_input_t
{
  __attribute__((__visibility__("hidden"))) hb_subset_input_t ();

  ~hb_subset_input_t ()
  {
    sets.~sets_t ();





  }

  hb_object_header_t header;

  struct sets_t {
    hb::shared_ptr<hb_set_t> glyphs;
    hb::shared_ptr<hb_set_t> unicodes;
    hb::shared_ptr<hb_set_t> no_subset_tables;
    hb::shared_ptr<hb_set_t> drop_tables;
    hb::shared_ptr<hb_set_t> name_ids;
    hb::shared_ptr<hb_set_t> name_languages;
    hb::shared_ptr<hb_set_t> layout_features;
    hb::shared_ptr<hb_set_t> layout_scripts;
  };

  union {
    sets_t sets;
    hb::shared_ptr<hb_set_t> set_ptrs[sizeof (sets_t) / sizeof (hb_set_t*)];
  };

  unsigned flags;
  bool attach_accelerator_data = false;


  bool force_long_loca = false;

  hb_hashmap_t<hb_tag_t, float> axes_location;




  inline unsigned num_sets () const
  {
    return sizeof (set_ptrs) / sizeof (hb_set_t*);
  }

  inline hb_array_t<hb::shared_ptr<hb_set_t>> sets_iter ()
  {
    return hb_array (set_ptrs);
  }

  bool in_error () const
  {
    for (unsigned i = 0; i < num_sets (); i++)
    {
      if ((__builtin_expect (!!(set_ptrs[i]->in_error ()), 0)))
        return true;
    }

    return axes_location.in_error ()



 ;
  }
};
# 38 "../harfbuzz-6.0.0/src/hb-subset.hh" 2
# 1 "../harfbuzz-6.0.0/src/hb-subset-plan.hh" 1
# 28 "../harfbuzz-6.0.0/src/hb-subset-plan.hh"
#define HB_SUBSET_PLAN_HH 





# 1 "../harfbuzz-6.0.0/src/hb-subset-accelerator.hh" 1
# 28 "../harfbuzz-6.0.0/src/hb-subset-accelerator.hh"
#define HB_SUBSET_ACCELERATOR_HH 





# 1 "../harfbuzz-6.0.0/src/hb-multimap.hh" 1
# 26 "../harfbuzz-6.0.0/src/hb-multimap.hh"
#define HB_MULTIMAP_HH 
# 37 "../harfbuzz-6.0.0/src/hb-multimap.hh"
struct hb_multimap_t
{
  void add (hb_codepoint_t k, hb_codepoint_t v)
  {
    hb_codepoint_t *i;
    if (multiples_indices.has (k, &i))
    {
      multiples_values[*i].push (v);
      return;
    }

    hb_codepoint_t *old_v;
    if (singulars.has (k, &old_v))
    {
      hb_codepoint_t old = *old_v;
      singulars.del (k);

      multiples_indices.set (k, multiples_values.length);
      auto *vec = multiples_values.push ();

      vec->push (old);
      vec->push (v);

      return;
    }

    singulars.set (k, v);
  }

  hb_array_t<const hb_codepoint_t> get (hb_codepoint_t k) const
  {
    const hb_codepoint_t *v;
    if (singulars.has (k, &v))
      return hb_array (v, 1);

    hb_codepoint_t *i;
    if (multiples_indices.has (k, &i))
      return multiples_values[*i].as_array ();

    return hb_array_t<const hb_codepoint_t> ();
  }

  bool in_error () const
  {
    return singulars.in_error () || multiples_indices.in_error () || multiples_values.in_error ();
  }

  protected:
  hb_map_t singulars;
  hb_map_t multiples_indices;
  hb_vector_t<hb_vector_t<hb_codepoint_t>> multiples_values;
};
# 35 "../harfbuzz-6.0.0/src/hb-subset-accelerator.hh" 2


extern __attribute__((__visibility__("hidden"))) hb_user_data_key_t _hb_subset_accelerator_user_data_key;

namespace CFF {
struct cff_subset_accelerator_t;
}

namespace OT {
struct SubtableUnicodesCache;
};

struct hb_subset_accelerator_t
{
  static hb_user_data_key_t* user_data_key()
  {
    return &_hb_subset_accelerator_user_data_key;
  }

  static hb_subset_accelerator_t* create(const hb_map_t& unicode_to_gid_,
      const hb_multimap_t gid_to_unicodes_,
      const hb_set_t& unicodes_,
      bool has_seac_) {
    hb_subset_accelerator_t* accel =
        (hb_subset_accelerator_t*) calloc (1, sizeof(hb_subset_accelerator_t));

    new (accel) hb_subset_accelerator_t (unicode_to_gid_,
      gid_to_unicodes_,
      unicodes_,
      has_seac_);

    return accel;
  }

  static void destroy (void* p)
  {
    if (!p) return;

    hb_subset_accelerator_t *accel = (hb_subset_accelerator_t *) p;

    accel->~hb_subset_accelerator_t ();

    free (accel);
  }

  hb_subset_accelerator_t (const hb_map_t& unicode_to_gid_,
      const hb_multimap_t& gid_to_unicodes_,
      const hb_set_t& unicodes_,
      bool has_seac_) :
    unicode_to_gid(unicode_to_gid_),
    gid_to_unicodes (gid_to_unicodes_),
    unicodes(unicodes_),
    cmap_cache(nullptr),
    destroy_cmap_cache(nullptr),
    has_seac(has_seac_),
    cff_accelerator(nullptr),
    destroy_cff_accelerator(nullptr) {}

  ~hb_subset_accelerator_t ()
  {
    if (cff_accelerator && destroy_cff_accelerator)
      destroy_cff_accelerator ((void*) cff_accelerator);

    if (cmap_cache && destroy_cmap_cache)
      destroy_cmap_cache ((void*) cmap_cache);
  }



  mutable hb_mutex_t sanitized_table_cache_lock;
  mutable hb_hashmap_t<hb_tag_t, hb::unique_ptr<hb_blob_t>> sanitized_table_cache;

  const hb_map_t unicode_to_gid;
  const hb_multimap_t gid_to_unicodes;
  const hb_set_t unicodes;


  const OT::SubtableUnicodesCache* cmap_cache;
  hb_destroy_func_t destroy_cmap_cache;


  bool has_seac;
  const CFF::cff_subset_accelerator_t* cff_accelerator;
  hb_destroy_func_t destroy_cff_accelerator;



  bool in_error () const
  {
    return unicode_to_gid.in_error () ||
    gid_to_unicodes.in_error () ||
    unicodes.in_error () ||
    sanitized_table_cache.in_error ();
  }
};
# 35 "../harfbuzz-6.0.0/src/hb-subset-plan.hh" 2


# 1 "../harfbuzz-6.0.0/src/hb-bimap.hh" 1
# 28 "../harfbuzz-6.0.0/src/hb-bimap.hh"
#define HB_BIMAP_HH 





struct hb_bimap_t
{
  void reset ()
  {
    forw_map.reset ();
    back_map.reset ();
  }

  void resize (unsigned pop)
  {
    forw_map.resize (pop);
    back_map.resize (pop);
  }

  bool in_error () const { return forw_map.in_error () || back_map.in_error (); }

  void set (hb_codepoint_t lhs, hb_codepoint_t rhs)
  {
    if (in_error ()) return;
    if ((__builtin_expect (!!(lhs == ((hb_codepoint_t) -1)), 0))) return;
    if ((__builtin_expect (!!(rhs == ((hb_codepoint_t) -1)), 0))) { del (lhs); return; }

    forw_map.set (lhs, rhs);
    if ((__builtin_expect (!!(in_error ()), 0))) return;

    back_map.set (rhs, lhs);
    if ((__builtin_expect (!!(in_error ()), 0))) forw_map.del (lhs);
  }

  hb_codepoint_t get (hb_codepoint_t lhs) const { return forw_map.get (lhs); }
  hb_codepoint_t backward (hb_codepoint_t rhs) const { return back_map.get (rhs); }

  hb_codepoint_t operator [] (hb_codepoint_t lhs) const { return get (lhs); }
  bool has (hb_codepoint_t lhs) const { return forw_map.has (lhs); }


  void del (hb_codepoint_t lhs)
  {
    back_map.del (get (lhs));
    forw_map.del (lhs);
  }

  void clear ()
  {
    forw_map.clear ();
    back_map.clear ();
  }

  bool is_empty () const { return forw_map.is_empty (); }

  unsigned int get_population () const { return forw_map.get_population (); }

  protected:
  hb_map_t forw_map;
  hb_map_t back_map;
};


struct hb_inc_bimap_t : hb_bimap_t
{



  hb_codepoint_t add (hb_codepoint_t lhs)
  {
    hb_codepoint_t rhs = forw_map[lhs];
    if (rhs == ((hb_codepoint_t) -1))
    {
      rhs = next_value++;
      set (lhs, rhs);
    }
    return rhs;
  }

  hb_codepoint_t skip ()
  { return next_value++; }

  hb_codepoint_t get_next_value () const
  { return next_value; }

  void add_set (const hb_set_t *set)
  {
    hb_codepoint_t i = ((hb_codepoint_t) -1);
    while (hb_set_next (set, &i)) add (i);
  }


  bool identity (unsigned int size)
  {
    clear ();
    for (hb_codepoint_t i = 0; i < size; i++) set (i, i);
    return !in_error ();
  }

  protected:
  static int cmp_id (const void* a, const void* b)
  { return (int)*(const hb_codepoint_t *)a - (int)*(const hb_codepoint_t *)b; }

  public:


  void sort ()
  {
    hb_codepoint_t count = get_population ();
    hb_vector_t <hb_codepoint_t> work;
    work.resize (count);

    for (hb_codepoint_t rhs = 0; rhs < count; rhs++)
      work[rhs] = back_map[rhs];

    work.qsort (cmp_id);

    clear ();
    for (hb_codepoint_t rhs = 0; rhs < count; rhs++)
      set (work[rhs], rhs);
  }

  protected:
  unsigned int next_value = 0;
};
# 38 "../harfbuzz-6.0.0/src/hb-subset-plan.hh" 2


namespace OT {
struct Feature;
}

struct head_maxp_info_t
{
  head_maxp_info_t ()
      :xMin (0x7FFF), xMax (-0x7FFF), yMin (0x7FFF), yMax (-0x7FFF),
      maxPoints (0), maxContours (0),
      maxCompositePoints (0),
      maxCompositeContours (0),
      maxComponentElements (0),
      maxComponentDepth (0),
      allXMinIsLsb (true) {}

  int xMin;
  int xMax;
  int yMin;
  int yMax;
  unsigned maxPoints;
  unsigned maxContours;
  unsigned maxCompositePoints;
  unsigned maxCompositeContours;
  unsigned maxComponentElements;
  unsigned maxComponentDepth;
  bool allXMinIsLsb;
};

typedef struct head_maxp_info_t head_maxp_info_t;

struct hb_subset_plan_t
{
  __attribute__((__visibility__("hidden"))) hb_subset_plan_t (hb_face_t *,
    const hb_subset_input_t *input);

  ~hb_subset_plan_t()
  {
    hb_face_destroy (source);
    hb_face_destroy (dest);

    hb_map_destroy (codepoint_to_glyph);
    hb_map_destroy (glyph_map);
    hb_map_destroy (reverse_glyph_map);






    if (inprogress_accelerator)
      hb_subset_accelerator_t::destroy ((void*) inprogress_accelerator);
  }

  hb_object_header_t header;

  bool successful;
  unsigned flags;
  bool attach_accelerator_data = false;
  bool force_long_loca = false;


  hb_set_t unicodes;
  hb_sorted_vector_t<hb_pair_t<hb_codepoint_t, hb_codepoint_t>> unicode_to_new_gid_list;


  hb_set_t name_ids;


  hb_set_t name_languages;


  hb_set_t layout_features;


  hb_set_t layout_scripts;


  hb_set_t glyphs_requested;


  hb_set_t no_subset_tables;


  hb_set_t drop_tables;


  hb_map_t *codepoint_to_glyph;


  hb_map_t *glyph_map;
  hb_map_t *reverse_glyph_map;
  hb_map_t glyph_map_gsub;


  hb_face_t *source;
  hb_face_t *dest;

  unsigned int _num_output_glyphs;
  hb_set_t _glyphset;
  hb_set_t _glyphset_gsub;
  hb_set_t _glyphset_mathed;
  hb_set_t _glyphset_colred;


  hb_map_t gsub_lookups;
  hb_map_t gpos_lookups;


  hb_hashmap_t<unsigned, hb::unique_ptr<hb_set_t>> gsub_langsys;
  hb_hashmap_t<unsigned, hb::unique_ptr<hb_set_t>> gpos_langsys;


  hb_map_t gsub_features;
  hb_map_t gpos_features;


  hb_hashmap_t<unsigned, hb::shared_ptr<hb_set_t>> gsub_feature_record_cond_idx_map;
  hb_hashmap_t<unsigned, hb::shared_ptr<hb_set_t>> gpos_feature_record_cond_idx_map;



  hb_hashmap_t<unsigned, const OT::Feature*> gsub_feature_substitutes_map;
  hb_hashmap_t<unsigned, const OT::Feature*> gpos_feature_substitutes_map;


  hb_map_t colrv1_layers;
  hb_map_t colr_palettes;


  hb_hashmap_t<unsigned, hb_pair_t<unsigned, int>> layout_variation_idx_delta_map;


  hb_vector_t<hb_inc_bimap_t> gdef_varstore_inner_maps;

  hb_hashmap_t<hb_tag_t, hb::unique_ptr<hb_blob_t>> sanitized_table_cache;

  hb_hashmap_t<hb_tag_t, int> axes_location;
  hb_vector_t<int> normalized_coords;

  hb_hashmap_t<hb_tag_t, float> user_axes_location;

  hb_map_t axes_index_map;

  hb_map_t axes_old_index_tag_map;
  bool all_axes_pinned;
  bool pinned_at_default;
  bool has_seac;


  mutable hb_hashmap_t<hb_codepoint_t, hb_pair_t<unsigned, int>> hmtx_map;

  mutable hb_hashmap_t<hb_codepoint_t, hb_pair_t<unsigned, int>> vmtx_map;

  mutable hb_map_t bounds_width_map;

  mutable hb_map_t bounds_height_map;


  mutable head_maxp_info_t head_maxp_info;







  const hb_subset_accelerator_t* accelerator;
  hb_subset_accelerator_t* inprogress_accelerator;

 public:

  template<typename T>
  hb_blob_ptr_t<T> source_table()
  {
    hb_lock_t (accelerator ? &accelerator->sanitized_table_cache_lock : nullptr);

    auto *cache = accelerator ? &accelerator->sanitized_table_cache : &sanitized_table_cache;
    if (cache
        && !cache->in_error ()
        && cache->has (+T::tableTag)) {
      return hb_blob_reference (cache->get (+T::tableTag).get ());
    }

    hb::unique_ptr<hb_blob_t> table_blob {hb_sanitize_context_t ().reference_table<T> (source)};
    hb_blob_t* ret = hb_blob_reference (table_blob.get ());

    if ((__builtin_expect (!!(cache), 1)))
      cache->set (+T::tableTag, std::move (table_blob));

    return ret;
  }

  bool in_error () const { return !successful; }

  bool check_success(bool success)
  {
    successful = (successful && success);
    return successful;
  }






  inline const hb_set_t *
  glyphset () const
  {
    return &_glyphset;
  }




  inline const hb_set_t *
  glyphset_gsub () const
  {
    return &_glyphset_gsub;
  }




  inline unsigned int
  num_output_glyphs () const
  {
    return _num_output_glyphs;
  }





  inline bool is_empty_glyph (hb_codepoint_t gid) const
  {
    return !_glyphset.has (gid);
  }

  inline bool new_gid_for_codepoint (hb_codepoint_t codepoint,
         hb_codepoint_t *new_gid) const
  {
    hb_codepoint_t old_gid = codepoint_to_glyph->get (codepoint);
    if (old_gid == ((hb_codepoint_t) -1))
      return false;

    return new_gid_for_old_gid (old_gid, new_gid);
  }

  inline bool new_gid_for_old_gid (hb_codepoint_t old_gid,
       hb_codepoint_t *new_gid) const
  {
    hb_codepoint_t gid = glyph_map->get (old_gid);
    if (gid == ((hb_codepoint_t) -1))
      return false;

    *new_gid = gid;
    return true;
  }

  inline bool old_gid_for_new_gid (hb_codepoint_t new_gid,
       hb_codepoint_t *old_gid) const
  {
    hb_codepoint_t gid = reverse_glyph_map->get (new_gid);
    if (gid == ((hb_codepoint_t) -1))
      return false;

    *old_gid = gid;
    return true;
  }

  inline bool
  add_table (hb_tag_t tag,
      hb_blob_t *contents)
  {
    if ((0 +0))
    {
      hb_blob_t *source_blob = source->reference_table (tag);
      _hb_debug_msg<(0 +0)> ("SUBSET", (nullptr), nullptr, false, 0, 0, "add table %c%c%c%c, dest %u bytes, source %u bytes", (uint8_t)(((tag)>>24)&0xFF), (uint8_t)(((tag)>>16)&0xFF), (uint8_t)(((tag)>>8)&0xFF), (uint8_t)((tag)&0xFF), hb_blob_get_length (contents), hb_blob_get_length (source_blob))


                                   ;
      hb_blob_destroy (source_blob);
    }
    return hb_face_builder_add_table (dest, tag, contents);
  }
};
# 39 "../harfbuzz-6.0.0/src/hb-subset.hh" 2

struct hb_subset_context_t :
       hb_dispatch_context_t<hb_subset_context_t, bool, (0 +0)>
{
  const char *get_name () { return "SUBSET"; }
  static return_t default_return_value () { return true; }

  private:
  template <typename T, typename ...Ts> auto
  _dispatch (const T &obj, hb_priority<1>, Ts&&... ds) -> decltype ((obj.subset (this, std::forward<Ts> (ds)...))) { return (obj.subset (this, std::forward<Ts> (ds)...)); }

  template <typename T, typename ...Ts> auto
  _dispatch (const T &obj, hb_priority<0>, Ts&&... ds) -> decltype ((obj.dispatch (this, std::forward<Ts> (ds)...))) { return (obj.dispatch (this, std::forward<Ts> (ds)...)); }

  public:
  template <typename T, typename ...Ts> auto
  dispatch (const T &obj, Ts&&... ds) -> decltype ((_dispatch (obj, hb_priority<16> (), std::forward<Ts> (ds)...))) { return (_dispatch (obj, hb_priority<16> (), std::forward<Ts> (ds)...)); }


  hb_blob_t *source_blob;
  hb_subset_plan_t *plan;
  hb_serialize_context_t *serializer;
  hb_tag_t table_tag;

  hb_subset_context_t (hb_blob_t *source_blob_,
         hb_subset_plan_t *plan_,
         hb_serialize_context_t *serializer_,
         hb_tag_t table_tag_) :
          source_blob (source_blob_),
   plan (plan_),
   serializer (serializer_),
   table_tag (table_tag_) {}
};
# 38 "../harfbuzz-6.0.0/src/hb-open-type.hh" 2


namespace OT {
# 57 "../harfbuzz-6.0.0/src/hb-open-type.hh"
template <typename Type,
   unsigned int Size = sizeof (Type)>
struct IntType
{
  typedef Type type;

  IntType () = default;
  explicit constexpr IntType (Type V) : v {V} {}
  IntType& operator = (Type i) { v = i; return *this; }


  operator typename std::conditional<std::is_signed<Type>::value, signed, unsigned>::type () const { return v; }

  bool operator == (const IntType &o) const { return (Type) v == (Type) o.v; }
  bool operator != (const IntType &o) const { return !(*this == o); }

  IntType& operator += (unsigned count) { *this = *this + count; return *this; }
  IntType& operator -= (unsigned count) { *this = *this - count; return *this; }
  IntType& operator ++ () { *this += 1; return *this; }
  IntType& operator -- () { *this -= 1; return *this; }
  IntType operator ++ (int) { IntType c (*this); ++*this; return c; }
  IntType operator -- (int) { IntType c (*this); --*this; return c; }

  __attribute__((__visibility__("hidden"))) static int cmp (const IntType *a, const IntType *b)
  { return b->cmp (*a); }
  __attribute__((__visibility__("hidden"))) static int cmp (const void *a, const void *b)
  {
    IntType *pa = (IntType *) a;
    IntType *pb = (IntType *) b;

    return pb->cmp (*pa);
  }
  template <typename Type2,
     typename hb_enable_if<(std::is_integral<Type2>::value && sizeof (Type2) < sizeof (int) && sizeof (Type) < sizeof (int))>::type* = nullptr

                                  >
  int cmp (Type2 a) const
  {
    Type b = v;
    return (int) a - (int) b;
  }
  template <typename Type2,
     typename hb_enable_if<(std::is_convertible<Type2, Type>::value)>::type* = nullptr>
  int cmp (Type2 a) const
  {
    Type b = v;
    return a < b ? -1 : a == b ? 0 : +1;
  }
  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this), __PRETTY_FUNCTION__, 108);
  }
  protected:
  BEInt<Type, Size> v;
  public:
  void _instance_assertion_on_line_113 () const { static_assert ((sizeof (*this) == (Size)), ""); } unsigned int get_size () const { return (Size); } static constexpr unsigned null_size = (Size); static constexpr unsigned min_size = (Size); static constexpr unsigned static_size = (Size);
};

typedef IntType<uint8_t> HBUINT8;
typedef IntType<int8_t> HBINT8;
typedef IntType<uint16_t> HBUINT16;
typedef IntType<int16_t> HBINT16;
typedef IntType<uint32_t> HBUINT32;
typedef IntType<int32_t> HBINT32;


typedef IntType<uint32_t, 3> HBUINT24;


struct HBUINT15 : HBUINT16
{

  HBUINT15& operator = (uint16_t i ) { HBUINT16::operator= (i); return *this; }
  public:
  void _instance_assertion_on_line_132 () const { static_assert ((sizeof (*this) == (2)), ""); } unsigned int get_size () const { return (2); } static constexpr unsigned null_size = (2); static constexpr unsigned min_size = (2); static constexpr unsigned static_size = (2);
};


typedef HBINT16 FWORD;


typedef HBINT32 FWORD32;


typedef HBUINT16 UFWORD;

template <typename Type, unsigned fraction_bits>
struct HBFixed : Type
{
  static constexpr float shift = (float) (1 << fraction_bits);
  static_assert (Type::static_size * 8 > fraction_bits, "");

  operator signed () const = delete;
  operator unsigned () const = delete;
  typename Type::type to_int () const { return Type::v; }
  void set_int (typename Type::type i ) { Type::v = i; }
  float to_float (float offset = 0) const { return ((int32_t) Type::v + offset) / shift; }
  void set_float (float f) { Type::v = _hb_roundf(f * shift); }
  public:
  void _instance_assertion_on_line_157 () const { static_assert ((sizeof (*this) == (Type::static_size)), ""); } unsigned int get_size () const { return (Type::static_size); } static constexpr unsigned null_size = (Type::static_size); static constexpr unsigned min_size = (Type::static_size); static constexpr unsigned static_size = (Type::static_size);
};


using F2DOT14 = HBFixed<HBINT16, 14>;
using F4DOT12 = HBFixed<HBINT16, 12>;
using F6DOT10 = HBFixed<HBINT16, 10>;


using F16DOT16 = HBFixed<HBINT32, 16>;



struct LONGDATETIME
{
  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this), __PRETTY_FUNCTION__, 175);
  }
  protected:
  HBINT32 major;
  HBUINT32 minor;
  public:
  void _instance_assertion_on_line_181 () const { static_assert ((sizeof (*this) == (8)), ""); } unsigned int get_size () const { return (8); } static constexpr unsigned null_size = (8); static constexpr unsigned min_size = (8); static constexpr unsigned static_size = (8);
};



struct Tag : HBUINT32
{
  Tag& operator = (hb_tag_t i) { HBUINT32::operator= (i); return *this; }

  operator const char* () const { return reinterpret_cast<const char *> (this); }
  operator char* () { return reinterpret_cast<char *> (this); }
  public:
  void _instance_assertion_on_line_193 () const { static_assert ((sizeof (*this) == (4)), ""); } unsigned int get_size () const { return (4); } static constexpr unsigned null_size = (4); static constexpr unsigned min_size = (4); static constexpr unsigned static_size = (4);
};


struct HBGlyphID16 : HBUINT16
{
  HBGlyphID16& operator = (uint16_t i) { HBUINT16::operator= (i); return *this; }
};
struct HBGlyphID24 : HBUINT24
{
  HBGlyphID24& operator = (uint32_t i) { HBUINT24::operator= (i); return *this; }
};


struct Index : HBUINT16 {
  static constexpr unsigned NOT_FOUND_INDEX = 0xFFFFu;
  Index& operator = (uint16_t i) { HBUINT16::operator= (i); return *this; }
};
} extern __attribute__((__visibility__("hidden"))) const unsigned char _hb_Null_OT_Index[hb_null_size<OT::Index>::value]; template <> struct Null<OT::Index> { static OT::Index const & get_null () { return *reinterpret_cast<const OT::Index *> (_hb_Null_OT_Index); } }; namespace OT { static_assert (true, "");

typedef Index NameID;

struct VarIdx : HBUINT32 {
  static constexpr unsigned NO_VARIATION = 0xFFFFFFFFu;
  static_assert (NO_VARIATION == 0xFFFFFFFFu, "");
  static uint32_t add (uint32_t i, unsigned short v)
  {
    if (i == NO_VARIATION) return i;
    return i + v;
  }
  VarIdx& operator = (uint32_t i) { HBUINT32::operator= (i); return *this; }
};
} extern __attribute__((__visibility__("hidden"))) const unsigned char _hb_Null_OT_VarIdx[hb_null_size<OT::VarIdx>::value]; template <> struct Null<OT::VarIdx> { static OT::VarIdx const & get_null () { return *reinterpret_cast<const OT::VarIdx *> (_hb_Null_OT_VarIdx); } }; namespace OT { static_assert (true, "");


template <typename Type, bool has_null=true>
struct Offset : Type
{
  Offset& operator = (typename Type::type i) { Type::operator= (i); return *this; }

  typedef Type type;

  bool is_null () const { return has_null && 0 == *this; }

  public:
  void _instance_assertion_on_line_238 () const { static_assert ((sizeof (*this) == (sizeof (Type))), ""); } unsigned int get_size () const { return (sizeof (Type)); } static constexpr unsigned null_size = (sizeof (Type)); static constexpr unsigned min_size = (sizeof (Type)); static constexpr unsigned static_size = (sizeof (Type));
};

typedef Offset<HBUINT16> Offset16;
typedef Offset<HBUINT24> Offset24;
typedef Offset<HBUINT32> Offset32;



struct CheckSum : HBUINT32
{
  CheckSum& operator = (uint32_t i) { HBUINT32::operator= (i); return *this; }


  static uint32_t CalcTableChecksum (const HBUINT32 *Table, uint32_t Length)
  {
    uint32_t Sum = 0L;
    
# 255 "../harfbuzz-6.0.0/src/hb-open-type.hh" 3 4
   (static_cast <bool> (
# 255 "../harfbuzz-6.0.0/src/hb-open-type.hh"
   0 == (Length & 3)
# 255 "../harfbuzz-6.0.0/src/hb-open-type.hh" 3 4
   ) ? void (0) : __assert_fail (
# 255 "../harfbuzz-6.0.0/src/hb-open-type.hh"
   "0 == (Length & 3)"
# 255 "../harfbuzz-6.0.0/src/hb-open-type.hh" 3 4
   , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-open-type.hh", 255, __extension__ __PRETTY_FUNCTION__))
# 255 "../harfbuzz-6.0.0/src/hb-open-type.hh"
                             ;
    const HBUINT32 *EndPtr = Table + Length / HBUINT32::static_size;

    while (Table < EndPtr)
      Sum += *Table++;
    return Sum;
  }


  void set_for_data (const void *data, unsigned int length)
  { *this = CalcTableChecksum ((const HBUINT32 *) data, length); }

  public:
  void _instance_assertion_on_line_268 () const { static_assert ((sizeof (*this) == (4)), ""); } unsigned int get_size () const { return (4); } static constexpr unsigned null_size = (4); static constexpr unsigned min_size = (4); static constexpr unsigned static_size = (4);
};






template <typename FixedType=HBUINT16>
struct FixedVersion
{
  uint32_t to_int () const { return (major << (sizeof (FixedType) * 8)) + minor; }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this), __PRETTY_FUNCTION__, 284);
  }

  FixedType major;
  FixedType minor;
  public:
  void _instance_assertion_on_line_290 () const { static_assert ((sizeof (*this) == (2 * sizeof (FixedType))), ""); } unsigned int get_size () const { return (2 * sizeof (FixedType)); } static constexpr unsigned null_size = (2 * sizeof (FixedType)); static constexpr unsigned min_size = (2 * sizeof (FixedType)); static constexpr unsigned static_size = (2 * sizeof (FixedType));
};







template <typename Type, bool has_null>
struct _hb_has_null
{
  static const Type *get_null () { return nullptr; }
  static Type *get_crap () { return nullptr; }
};
template <typename Type>
struct _hb_has_null<Type, true>
{
  static const Type *get_null () { return &NullHelper<Type>::get_null (); }
  static Type *get_crap () { return &CrapHelper<Type>::get_crap (); }
};

template <typename Type, typename OffsetType, bool has_null=true>
struct OffsetTo : Offset<OffsetType, has_null>
{

  static_assert (has_null == false ||
   (hb_has_null_size<Type>::value || !hb_has_min_size<Type>::value), "");

  OffsetTo(const OffsetTo&) = delete; void operator=(const OffsetTo&) = delete;
  OffsetTo () = default;

  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }

  const Type& operator () (const void *base) const
  {
    if ((__builtin_expect (!!(this->is_null ()), 0))) return *_hb_has_null<Type, has_null>::get_null ();
    return StructAtOffset<const Type> (base, *this);
  }
  Type& operator () (void *base) const
  {
    if ((__builtin_expect (!!(this->is_null ()), 0))) return *_hb_has_null<Type, has_null>::get_crap ();
    return StructAtOffset<Type> (base, *this);
  }

  template <typename Base,
     typename hb_enable_if<(std::is_convertible<const Base, const void *>::value)>::type* = nullptr>
  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
  template <typename Base,
     typename hb_enable_if<(std::is_convertible<const Base, const void *>::value)>::type* = nullptr>
  friend const Type& operator + (const OffsetTo &offset, const Base &base) { return offset ((const void *) base); }
  template <typename Base,
     typename hb_enable_if<(std::is_convertible<Base, void *>::value)>::type* = nullptr>
  friend Type& operator + (Base &&base, OffsetTo &offset) { return offset ((void *) base); }
  template <typename Base,
     typename hb_enable_if<(std::is_convertible<Base, void *>::value)>::type* = nullptr>
  friend Type& operator + (OffsetTo &offset, Base &&base) { return offset ((void *) base); }


  template <typename ...Ts>
  bool serialize_subset (hb_subset_context_t *c, const OffsetTo& src,
    const void *src_base, Ts&&... ds)
  {
    *this = 0;
    if (src.is_null ())
      return false;

    auto *s = c->serializer;

    s->push ();

    bool ret = c->dispatch (src_base+src, std::forward<Ts> (ds)...);

    if (ret || !has_null)
      s->add_link (*this, s->pop_pack ());
    else
      s->pop_discard ();

    return ret;
  }


  template <typename ...Ts>
  bool serialize_serialize (hb_serialize_context_t *c, Ts&&... ds)
  {
    *this = 0;

    Type* obj = c->push<Type> ();
    bool ret = obj->serialize (c, std::forward<Ts> (ds)...);

    if (ret)
      c->add_link (*this, c->pop_pack ());
    else
      c->pop_discard ();

    return ret;
  }





  template <typename ...Ts>
  bool serialize_copy (hb_serialize_context_t *c, const OffsetTo& src,
         const void *src_base, unsigned dst_bias,
         hb_serialize_context_t::whence_t whence,
         Ts&&... ds)
  {
    *this = 0;
    if (src.is_null ())
      return false;

    c->push ();

    bool ret = c->copy (src_base+src, std::forward<Ts> (ds)...);

    c->add_link (*this, c->pop_pack (), whence, dst_bias);

    return ret;
  }

  bool serialize_copy (hb_serialize_context_t *c, const OffsetTo& src,
         const void *src_base, unsigned dst_bias = 0)
  { return serialize_copy (c, src, src_base, dst_bias, hb_serialize_context_t::Head); }

  bool sanitize_shallow (hb_sanitize_context_t *c, const void *base) const
  {
    hb_no_trace_t<bool> trace;
    if ((__builtin_expect (!!(!c->check_struct (this)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 418);
    if ((__builtin_expect (!!(this->is_null ()), 0))) return trace.ret (true, __PRETTY_FUNCTION__, 419);
    if ((__builtin_expect (!!((const char *) base + (unsigned) *this < (const char *) base), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 420);
    return trace.ret (true, __PRETTY_FUNCTION__, 421);
  }

  template <typename ...Ts>
  bool sanitize (hb_sanitize_context_t *c, const void *base, Ts&&... ds) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (sanitize_shallow (c, base) && (this->is_null () || c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) || neuter (c)), __PRETTY_FUNCTION__, 428)


                 ;
  }


  bool neuter (hb_sanitize_context_t *c) const
  {
    if (!has_null) return false;
    return c->try_set (this, 0);
  }
  void _instance_assertion_on_line_440 () const { static_assert ((sizeof (*this) == (sizeof (OffsetType))), ""); } unsigned int get_size () const { return (sizeof (OffsetType)); } static constexpr unsigned null_size = (sizeof (OffsetType)); static constexpr unsigned min_size = (sizeof (OffsetType)); static constexpr unsigned static_size = (sizeof (OffsetType));
};

template <typename Type, bool has_null=true> using Offset16To = OffsetTo<Type, HBUINT16, has_null>;
template <typename Type, bool has_null=true> using Offset24To = OffsetTo<Type, HBUINT24, has_null>;
template <typename Type, bool has_null=true> using Offset32To = OffsetTo<Type, HBUINT32, has_null>;

template <typename Type, typename OffsetType> using NNOffsetTo = OffsetTo<Type, OffsetType, false>;
template <typename Type> using NNOffset16To = Offset16To<Type, false>;
template <typename Type> using NNOffset24To = Offset24To<Type, false>;
template <typename Type> using NNOffset32To = Offset32To<Type, false>;






template <typename Type>
struct UnsizedArrayOf
{
  typedef Type item_t;
  static constexpr unsigned item_size = hb_static_size<Type>::value;

  UnsizedArrayOf() = delete; UnsizedArrayOf(const UnsizedArrayOf&) = delete; void operator=(const UnsizedArrayOf&) = delete;

  const Type& operator [] (int i_) const
  {
    unsigned int i = (unsigned int) i_;
    const Type *p = &arrayZ[i];
    if ((__builtin_expect (!!((const void *) p < (const void *) arrayZ), 0))) return NullHelper<Type>::get_null ();
    std::atomic_signal_fence (std::memory_order_acquire);
    return *p;
  }
  Type& operator [] (int i_)
  {
    unsigned int i = (unsigned int) i_;
    Type *p = &arrayZ[i];
    if ((__builtin_expect (!!((const void *) p < (const void *) arrayZ), 0))) return CrapHelper<Type>::get_crap ();
    std::atomic_signal_fence (std::memory_order_acquire);
    return *p;
  }

  unsigned int get_size (unsigned int len) const
  { return len * Type::static_size; }

  template <typename T> operator T * () { return arrayZ; }
  template <typename T> operator const T * () const { return arrayZ; }
  hb_array_t<Type> as_array (unsigned int len)
  { return hb_array (arrayZ, len); }
  hb_array_t<const Type> as_array (unsigned int len) const
  { return hb_array (arrayZ, len); }

  template <typename T>
  Type &lsearch (unsigned int len, const T &x, Type &not_found = CrapHelper<Type>::get_crap ())
  { return *as_array (len).lsearch (x, &not_found); }
  template <typename T>
  const Type &lsearch (unsigned int len, const T &x, const Type &not_found = NullHelper<Type>::get_null ()) const
  { return *as_array (len).lsearch (x, &not_found); }
  template <typename T>
  bool lfind (unsigned int len, const T &x, unsigned int *i = nullptr,
       hb_not_found_t not_found = HB_NOT_FOUND_DONT_STORE,
       unsigned int to_store = (unsigned int) -1) const
  { return as_array (len).lfind (x, i, not_found, to_store); }

  void qsort (unsigned int len, unsigned int start = 0, unsigned int end = (unsigned int) -1)
  { as_array (len).qsort (start, end); }

  bool serialize (hb_serialize_context_t *c, unsigned int items_len, bool clear = true)
  {
    hb_no_trace_t<bool> trace;
    if ((__builtin_expect (!!(!c->extend_size (this, get_size (items_len), clear)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 510);
    return trace.ret (true, __PRETTY_FUNCTION__, 511);
  }
  template <typename Iterator,
     typename hb_enable_if<((hb_is_source_of<Iterator, Type>::value))>::type* = nullptr>
  bool serialize (hb_serialize_context_t *c, Iterator items)
  {
    hb_no_trace_t<bool> trace;
    unsigned count = hb_len (items);
    if ((__builtin_expect (!!(!serialize (c, count, false)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 519);


    for (unsigned i = 0; i < count; i++, ++items)
      arrayZ[i] = *items;
    return trace.ret (true, __PRETTY_FUNCTION__, 524);
  }

  UnsizedArrayOf* copy (hb_serialize_context_t *c, unsigned count) const
  {
    hb_no_trace_t<bool> trace;
    auto *out = c->start_embed (this);
    if ((__builtin_expect (!!(!as_array (count).copy (c)), 0))) return trace.ret (nullptr, __PRETTY_FUNCTION__, 531);
    return trace.ret (out, __PRETTY_FUNCTION__, 532);
  }

  template <typename ...Ts>
  bool sanitize (hb_sanitize_context_t *c, unsigned int count, Ts&&... ds) const
  {
    hb_no_trace_t<bool> trace;
    if ((__builtin_expect (!!(!sanitize_shallow (c, count)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 539);
    if (!sizeof... (Ts) && std::is_trivially_copyable<Type>::value) return trace.ret (true, __PRETTY_FUNCTION__, 540);
    for (unsigned int i = 0; i < count; i++)
      if ((__builtin_expect (!!(!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)), 0)))
 return trace.ret (false, __PRETTY_FUNCTION__, 543);
    return trace.ret (true, __PRETTY_FUNCTION__, 544);
  }

  bool sanitize_shallow (hb_sanitize_context_t *c, unsigned int count) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_array (arrayZ, count), __PRETTY_FUNCTION__, 550);
  }

  public:
  Type arrayZ[1];
  public:
  void _instance_assertion_on_line_556 () const { static_assert ((sizeof (*this) >= (0)), ""); } static constexpr unsigned min_size = (0);
};


template <typename Type, typename OffsetType, bool has_null=true>
using UnsizedArray16OfOffsetTo = UnsizedArrayOf<OffsetTo<Type, OffsetType, has_null>>;


template <typename Type, typename OffsetType, bool has_null=true>
struct UnsizedListOfOffset16To : UnsizedArray16OfOffsetTo<Type, OffsetType, has_null>
{
  const Type& operator [] (int i_) const
  {
    unsigned int i = (unsigned int) i_;
    const OffsetTo<Type, OffsetType, has_null> *p = &this->arrayZ[i];
    if ((__builtin_expect (!!((const void *) p < (const void *) this->arrayZ), 0))) return NullHelper<Type>::get_null ();
    std::atomic_signal_fence (std::memory_order_acquire);
    return this+*p;
  }
  Type& operator [] (int i_)
  {
    unsigned int i = (unsigned int) i_;
    const OffsetTo<Type, OffsetType, has_null> *p = &this->arrayZ[i];
    if ((__builtin_expect (!!((const void *) p < (const void *) this->arrayZ), 0))) return CrapHelper<Type>::get_crap ();
    std::atomic_signal_fence (std::memory_order_acquire);
    return this+*p;
  }

  template <typename ...Ts>
  bool sanitize (hb_sanitize_context_t *c, unsigned int count, Ts&&... ds) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret ((UnsizedArray16OfOffsetTo<Type, OffsetType, has_null> ::sanitize (c, count, this, std::forward<Ts> (ds)...)), __PRETTY_FUNCTION__, 588)
                                                            ;
  }
};


template <typename Type>
struct SortedUnsizedArrayOf : UnsizedArrayOf<Type>
{
  hb_sorted_array_t<Type> as_array (unsigned int len)
  { return hb_sorted_array (this->arrayZ, len); }
  hb_sorted_array_t<const Type> as_array (unsigned int len) const
  { return hb_sorted_array (this->arrayZ, len); }
  operator hb_sorted_array_t<Type> () { return as_array (); }
  operator hb_sorted_array_t<const Type> () const { return as_array (); }

  template <typename T>
  Type &bsearch (unsigned int len, const T &x, Type &not_found = CrapHelper<Type>::get_crap ())
  { return *as_array (len).bsearch (x, &not_found); }
  template <typename T>
  const Type &bsearch (unsigned int len, const T &x, const Type &not_found = NullHelper<Type>::get_null ()) const
  { return *as_array (len).bsearch (x, &not_found); }
  template <typename T>
  bool bfind (unsigned int len, const T &x, unsigned int *i = nullptr,
       hb_not_found_t not_found = HB_NOT_FOUND_DONT_STORE,
       unsigned int to_store = (unsigned int) -1) const
  { return as_array (len).bfind (x, i, not_found, to_store); }
};



template <typename Type, typename LenType>
struct ArrayOf
{
  typedef Type item_t;
  static constexpr unsigned item_size = hb_static_size<Type>::value;

  ArrayOf() = delete; ArrayOf(const ArrayOf&) = delete; void operator=(const ArrayOf&) = delete;

  const Type& operator [] (int i_) const
  {
    unsigned int i = (unsigned int) i_;
    if ((__builtin_expect (!!(i >= len), 0))) return NullHelper<Type>::get_null ();
    std::atomic_signal_fence (std::memory_order_acquire);
    return arrayZ[i];
  }
  Type& operator [] (int i_)
  {
    unsigned int i = (unsigned int) i_;
    if ((__builtin_expect (!!(i >= len), 0))) return CrapHelper<Type>::get_crap ();
    std::atomic_signal_fence (std::memory_order_acquire);
    return arrayZ[i];
  }

  unsigned int get_size () const
  { return len.static_size + len * Type::static_size; }

  explicit operator bool () const { return len; }

  void pop () { len--; }

  hb_array_t< Type> as_array () { return hb_array (arrayZ, len); }
  hb_array_t<const Type> as_array () const { return hb_array (arrayZ, len); }


  typedef hb_array_t<const Type> iter_t;
  typedef hb_array_t< Type> writer_t;
    iter_t iter () const { return as_array (); }
  writer_t writer () { return as_array (); }
  operator iter_t () const { return iter (); }
  operator writer_t () { return writer (); }


  const Type *begin () const { return arrayZ; }
  const Type *end () const { return arrayZ + len; }

  template <typename T>
  Type &lsearch (const T &x, Type &not_found = CrapHelper<Type>::get_crap ())
  { return *as_array ().lsearch (x, &not_found); }
  template <typename T>
  const Type &lsearch (const T &x, const Type &not_found = NullHelper<Type>::get_null ()) const
  { return *as_array ().lsearch (x, &not_found); }
  template <typename T>
  bool lfind (const T &x, unsigned int *i = nullptr,
       hb_not_found_t not_found = HB_NOT_FOUND_DONT_STORE,
       unsigned int to_store = (unsigned int) -1) const
  { return as_array ().lfind (x, i, not_found, to_store); }

  void qsort ()
  { as_array ().qsort (); }

  __attribute__((warn_unused_result)) bool serialize (hb_serialize_context_t *c, unsigned items_len, bool clear = true)
  {
    hb_no_trace_t<bool> trace;
    if ((__builtin_expect (!!(!c->extend_min (this)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 682);
    c->check_assign (len, items_len, HB_SERIALIZE_ERROR_ARRAY_OVERFLOW);
    if ((__builtin_expect (!!(!c->extend_size (this, get_size (), clear)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 684);
    return trace.ret (true, __PRETTY_FUNCTION__, 685);
  }
  template <typename Iterator,
     typename hb_enable_if<((hb_is_source_of<Iterator, Type>::value))>::type* = nullptr>
  __attribute__((warn_unused_result)) bool serialize (hb_serialize_context_t *c, Iterator items)
  {
    hb_no_trace_t<bool> trace;
    unsigned count = hb_len (items);
    if ((__builtin_expect (!!(!serialize (c, count, false)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 693);


    for (unsigned i = 0; i < count; i++, ++items)
      arrayZ[i] = *items;
    return trace.ret (true, __PRETTY_FUNCTION__, 698);
  }

  Type* serialize_append (hb_serialize_context_t *c)
  {
    hb_no_trace_t<bool> trace;
    len++;
    if ((__builtin_expect (!!(!len || !c->extend (this)), 0)))
    {
      len--;
      return trace.ret (nullptr, __PRETTY_FUNCTION__, 708);
    }
    return trace.ret (&arrayZ[len - 1], __PRETTY_FUNCTION__, 710);
  }

  ArrayOf* copy (hb_serialize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    auto *out = c->start_embed (this);
    if ((__builtin_expect (!!(!c->extend_min (out)), 0))) return trace.ret (nullptr, __PRETTY_FUNCTION__, 717);
    c->check_assign (out->len, len, HB_SERIALIZE_ERROR_ARRAY_OVERFLOW);
    if ((__builtin_expect (!!(!as_array ().copy (c)), 0))) return trace.ret (nullptr, __PRETTY_FUNCTION__, 719);
    return trace.ret (out, __PRETTY_FUNCTION__, 720);
  }

  template <typename ...Ts>
  bool sanitize (hb_sanitize_context_t *c, Ts&&... ds) const
  {
    hb_no_trace_t<bool> trace;
    if ((__builtin_expect (!!(!sanitize_shallow (c)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 727);
    if (!sizeof... (Ts) && std::is_trivially_copyable<Type>::value) return trace.ret (true, __PRETTY_FUNCTION__, 728);
    unsigned int count = len;
    for (unsigned int i = 0; i < count; i++)
      if ((__builtin_expect (!!(!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)), 0)))
 return trace.ret (false, __PRETTY_FUNCTION__, 732);
    return trace.ret (true, __PRETTY_FUNCTION__, 733);
  }

  bool sanitize_shallow (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (len.sanitize (c) && c->check_array (arrayZ, len), __PRETTY_FUNCTION__, 739);
  }

  public:
  LenType len;
  Type arrayZ[1];
  public:
  void _compiles_assertion_on_line_746 () const { (void) (arrayZ)[0].static_size; } void _instance_assertion_on_line_746 () const { static_assert ((sizeof (*this) == (sizeof (LenType)) + (1 +0) * sizeof ((arrayZ)[0])), ""); } static constexpr unsigned null_size = (sizeof (LenType)); static constexpr unsigned min_size = (sizeof (LenType));
};
template <typename Type> using Array16Of = ArrayOf<Type, HBUINT16>;
template <typename Type> using Array24Of = ArrayOf<Type, HBUINT24>;
template <typename Type> using Array32Of = ArrayOf<Type, HBUINT32>;
using PString = ArrayOf<HBUINT8, HBUINT8>;


template <typename Type> using Array16OfOffset16To = ArrayOf<OffsetTo<Type, HBUINT16>, HBUINT16>;
template <typename Type> using Array16OfOffset32To = ArrayOf<OffsetTo<Type, HBUINT32>, HBUINT16>;
template <typename Type> using Array32OfOffset32To = ArrayOf<OffsetTo<Type, HBUINT32>, HBUINT32>;


template <typename Type, typename OffsetType>
struct List16OfOffsetTo : ArrayOf<OffsetTo<Type, OffsetType>, HBUINT16>
{
  const Type& operator [] (int i_) const
  {
    unsigned int i = (unsigned int) i_;
    if ((__builtin_expect (!!(i >= this->len), 0))) return NullHelper<Type>::get_null ();
    std::atomic_signal_fence (std::memory_order_acquire);
    return this+this->arrayZ[i];
  }
  const Type& operator [] (int i_)
  {
    unsigned int i = (unsigned int) i_;
    if ((__builtin_expect (!!(i >= this->len), 0))) return CrapHelper<Type>::get_crap ();
    std::atomic_signal_fence (std::memory_order_acquire);
    return this+this->arrayZ[i];
  }

  bool subset (hb_subset_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    struct List16OfOffsetTo *out = c->serializer->embed (*this);
    if ((__builtin_expect (!!(!out), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 781);
    unsigned int count = this->len;
    for (unsigned int i = 0; i < count; i++)
      out->arrayZ[i].serialize_subset (c, this->arrayZ[i], this, out);
    return trace.ret (true, __PRETTY_FUNCTION__, 785);
  }

  template <typename ...Ts>
  bool sanitize (hb_sanitize_context_t *c, Ts&&... ds) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret ((Array16Of<OffsetTo<Type, OffsetType>>::sanitize (c, this, std::forward<Ts> (ds)...)), __PRETTY_FUNCTION__, 792);
  }
};

template <typename Type>
using List16OfOffset16To = List16OfOffsetTo<Type, HBUINT16>;


template <typename Type, typename LenType=HBUINT16>
struct HeadlessArrayOf
{
  static constexpr unsigned item_size = Type::static_size;

  HeadlessArrayOf() = delete; HeadlessArrayOf(const HeadlessArrayOf&) = delete; void operator=(const HeadlessArrayOf&) = delete;

  const Type& operator [] (int i_) const
  {
    unsigned int i = (unsigned int) i_;
    if ((__builtin_expect (!!(i >= lenP1 || !i), 0))) return NullHelper<Type>::get_null ();
    std::atomic_signal_fence (std::memory_order_acquire);
    return arrayZ[i-1];
  }
  Type& operator [] (int i_)
  {
    unsigned int i = (unsigned int) i_;
    if ((__builtin_expect (!!(i >= lenP1 || !i), 0))) return CrapHelper<Type>::get_crap ();
    std::atomic_signal_fence (std::memory_order_acquire);
    return arrayZ[i-1];
  }
  unsigned int get_size () const
  { return lenP1.static_size + get_length () * Type::static_size; }

  unsigned get_length () const { return lenP1 ? lenP1 - 1 : 0; }

  hb_array_t< Type> as_array () { return hb_array (arrayZ, get_length ()); }
  hb_array_t<const Type> as_array () const { return hb_array (arrayZ, get_length ()); }


  typedef hb_array_t<const Type> iter_t;
  typedef hb_array_t< Type> writer_t;
    iter_t iter () const { return as_array (); }
  writer_t writer () { return as_array (); }
  operator iter_t () const { return iter (); }
  operator writer_t () { return writer (); }


  const Type *begin () const { return arrayZ; }
  const Type *end () const { return arrayZ + get_length (); }

  __attribute__((warn_unused_result)) bool serialize (hb_serialize_context_t *c, unsigned int items_len, bool clear = true)
  {
    hb_no_trace_t<bool> trace;
    if ((__builtin_expect (!!(!c->extend_min (this)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 844);
    c->check_assign (lenP1, items_len + 1, HB_SERIALIZE_ERROR_ARRAY_OVERFLOW);
    if ((__builtin_expect (!!(!c->extend_size (this, get_size (), clear)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 846);
    return trace.ret (true, __PRETTY_FUNCTION__, 847);
  }
  template <typename Iterator,
     typename hb_enable_if<((hb_is_source_of<Iterator, Type>::value))>::type* = nullptr>
  __attribute__((warn_unused_result)) bool serialize (hb_serialize_context_t *c, Iterator items)
  {
    hb_no_trace_t<bool> trace;
    unsigned count = hb_len (items);
    if ((__builtin_expect (!!(!serialize (c, count, false)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 855);


    for (unsigned i = 0; i < count; i++, ++items)
      arrayZ[i] = *items;
    return trace.ret (true, __PRETTY_FUNCTION__, 860);
  }

  template <typename ...Ts>
  bool sanitize (hb_sanitize_context_t *c, Ts&&... ds) const
  {
    hb_no_trace_t<bool> trace;
    if ((__builtin_expect (!!(!sanitize_shallow (c)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 867);
    if (!sizeof... (Ts) && std::is_trivially_copyable<Type>::value) return trace.ret (true, __PRETTY_FUNCTION__, 868);
    unsigned int count = get_length ();
    for (unsigned int i = 0; i < count; i++)
      if ((__builtin_expect (!!(!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)), 0)))
 return trace.ret (false, __PRETTY_FUNCTION__, 872);
    return trace.ret (true, __PRETTY_FUNCTION__, 873);
  }

  private:
  bool sanitize_shallow (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (lenP1.sanitize (c) && (!lenP1 || c->check_array (arrayZ, lenP1 - 1)), __PRETTY_FUNCTION__, 880)
                                                   ;
  }

  public:
  LenType lenP1;
  Type arrayZ[1];
  public:
  void _compiles_assertion_on_line_888 () const { (void) (arrayZ)[0].static_size; } void _instance_assertion_on_line_888 () const { static_assert ((sizeof (*this) == (sizeof (LenType)) + (1 +0) * sizeof ((arrayZ)[0])), ""); } static constexpr unsigned null_size = (sizeof (LenType)); static constexpr unsigned min_size = (sizeof (LenType));
};


template <typename Type, typename LenType=HBUINT16>
struct ArrayOfM1
{
  ArrayOfM1() = delete; ArrayOfM1(const ArrayOfM1&) = delete; void operator=(const ArrayOfM1&) = delete;

  const Type& operator [] (int i_) const
  {
    unsigned int i = (unsigned int) i_;
    if ((__builtin_expect (!!(i > lenM1), 0))) return NullHelper<Type>::get_null ();
    std::atomic_signal_fence (std::memory_order_acquire);
    return arrayZ[i];
  }
  Type& operator [] (int i_)
  {
    unsigned int i = (unsigned int) i_;
    if ((__builtin_expect (!!(i > lenM1), 0))) return CrapHelper<Type>::get_crap ();
    std::atomic_signal_fence (std::memory_order_acquire);
    return arrayZ[i];
  }
  unsigned int get_size () const
  { return lenM1.static_size + (lenM1 + 1) * Type::static_size; }

  template <typename ...Ts>
  bool sanitize (hb_sanitize_context_t *c, Ts&&... ds) const
  {
    hb_no_trace_t<bool> trace;
    if ((__builtin_expect (!!(!sanitize_shallow (c)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 918);
    if (!sizeof... (Ts) && std::is_trivially_copyable<Type>::value) return trace.ret (true, __PRETTY_FUNCTION__, 919);
    unsigned int count = lenM1 + 1;
    for (unsigned int i = 0; i < count; i++)
      if ((__builtin_expect (!!(!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)), 0)))
 return trace.ret (false, __PRETTY_FUNCTION__, 923);
    return trace.ret (true, __PRETTY_FUNCTION__, 924);
  }

  private:
  bool sanitize_shallow (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (lenM1.sanitize (c) && (c->check_array (arrayZ, lenM1 + 1)), __PRETTY_FUNCTION__, 931)
                                         ;
  }

  public:
  LenType lenM1;
  Type arrayZ[1];
  public:
  void _compiles_assertion_on_line_939 () const { (void) (arrayZ)[0].static_size; } void _instance_assertion_on_line_939 () const { static_assert ((sizeof (*this) == (sizeof (LenType)) + (1 +0) * sizeof ((arrayZ)[0])), ""); } static constexpr unsigned null_size = (sizeof (LenType)); static constexpr unsigned min_size = (sizeof (LenType));
};


template <typename Type, typename LenType>
struct SortedArrayOf : ArrayOf<Type, LenType>
{
  hb_sorted_array_t< Type> as_array () { return hb_sorted_array (this->arrayZ, this->len); }
  hb_sorted_array_t<const Type> as_array () const { return hb_sorted_array (this->arrayZ, this->len); }


  typedef hb_sorted_array_t<const Type> iter_t;
  typedef hb_sorted_array_t< Type> writer_t;
    iter_t iter () const { return as_array (); }
  writer_t writer () { return as_array (); }
  operator iter_t () const { return iter (); }
  operator writer_t () { return writer (); }


  const Type *begin () const { return this->arrayZ; }
  const Type *end () const { return this->arrayZ + this->len; }

  bool serialize (hb_serialize_context_t *c, unsigned int items_len)
  {
    hb_no_trace_t<bool> trace;
    bool ret = ArrayOf<Type, LenType>::serialize (c, items_len);
    return trace.ret (ret, __PRETTY_FUNCTION__, 965);
  }
  template <typename Iterator,
     typename hb_enable_if<(((hb_is_source_of<Iterator, Type>::value && Iterator::is_sorted_iterator)))>::type* = nullptr>
  bool serialize (hb_serialize_context_t *c, Iterator items)
  {
    hb_no_trace_t<bool> trace;
    bool ret = ArrayOf<Type, LenType>::serialize (c, items);
    return trace.ret (ret, __PRETTY_FUNCTION__, 973);
  }

  template <typename T>
  Type &bsearch (const T &x, Type &not_found = CrapHelper<Type>::get_crap ())
  { return *as_array ().bsearch (x, &not_found); }
  template <typename T>
  const Type &bsearch (const T &x, const Type &not_found = NullHelper<Type>::get_null ()) const
  { return *as_array ().bsearch (x, &not_found); }
  template <typename T>
  bool bfind (const T &x, unsigned int *i = nullptr,
       hb_not_found_t not_found = HB_NOT_FOUND_DONT_STORE,
       unsigned int to_store = (unsigned int) -1) const
  { return as_array ().bfind (x, i, not_found, to_store); }
};

template <typename Type> using SortedArray16Of = SortedArrayOf<Type, HBUINT16>;
template <typename Type> using SortedArray24Of = SortedArrayOf<Type, HBUINT24>;
template <typename Type> using SortedArray32Of = SortedArrayOf<Type, HBUINT32>;





template <typename LenType=HBUINT16>
struct BinSearchHeader
{
  operator uint32_t () const { return len; }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this), __PRETTY_FUNCTION__, 1005);
  }

  BinSearchHeader& operator = (unsigned int v)
  {
    len = v;
    
# 1011 "../harfbuzz-6.0.0/src/hb-open-type.hh" 3 4
   (static_cast <bool> (
# 1011 "../harfbuzz-6.0.0/src/hb-open-type.hh"
   len == v
# 1011 "../harfbuzz-6.0.0/src/hb-open-type.hh" 3 4
   ) ? void (0) : __assert_fail (
# 1011 "../harfbuzz-6.0.0/src/hb-open-type.hh"
   "len == v"
# 1011 "../harfbuzz-6.0.0/src/hb-open-type.hh" 3 4
   , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-open-type.hh", 1011, __extension__ __PRETTY_FUNCTION__))
# 1011 "../harfbuzz-6.0.0/src/hb-open-type.hh"
                    ;
    entrySelector = hb_max (1u, hb_bit_storage (v)) - 1;
    searchRange = 16 * (1u << entrySelector);
    rangeShift = v * 16 > searchRange
   ? 16 * v - searchRange
   : 0;
    return *this;
  }

  protected:
  LenType len;
  LenType searchRange;
  LenType entrySelector;
  LenType rangeShift;

  public:
  void _instance_assertion_on_line_1027 () const { static_assert ((sizeof (*this) == (8)), ""); } unsigned int get_size () const { return (8); } static constexpr unsigned null_size = (8); static constexpr unsigned min_size = (8); static constexpr unsigned static_size = (8);
};

template <typename Type, typename LenType=HBUINT16>
using BinSearchArrayOf = SortedArrayOf<Type, BinSearchHeader<LenType>>;


struct VarSizedBinSearchHeader
{

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this), __PRETTY_FUNCTION__, 1040);
  }

  HBUINT16 unitSize;
  HBUINT16 nUnits;
  HBUINT16 searchRange;

  HBUINT16 entrySelector;

  HBUINT16 rangeShift;


  public:
  void _instance_assertion_on_line_1053 () const { static_assert ((sizeof (*this) == (10)), ""); } unsigned int get_size () const { return (10); } static constexpr unsigned null_size = (10); static constexpr unsigned min_size = (10); static constexpr unsigned static_size = (10);
};

template <typename Type>
struct VarSizedBinSearchArrayOf
{
  static constexpr unsigned item_size = Type::static_size;

  VarSizedBinSearchArrayOf() = delete; VarSizedBinSearchArrayOf(const VarSizedBinSearchArrayOf&) = delete; void operator=(const VarSizedBinSearchArrayOf&) = delete;

  bool last_is_terminator () const
  {
    if ((__builtin_expect (!!(!header.nUnits), 0))) return false;





    const HBUINT16 *words = &StructAtOffset<HBUINT16> (&bytesZ, (header.nUnits - 1) * header.unitSize);
    unsigned int count = Type::TerminationWordCount;
    for (unsigned int i = 0; i < count; i++)
      if (words[i] != 0xFFFFu)
 return false;
    return true;
  }

  const Type& operator [] (int i_) const
  {
    unsigned int i = (unsigned int) i_;
    if ((__builtin_expect (!!(i >= get_length ()), 0))) return NullHelper<Type>::get_null ();
    std::atomic_signal_fence (std::memory_order_acquire);
    return StructAtOffset<Type> (&bytesZ, i * header.unitSize);
  }
  Type& operator [] (int i_)
  {
    unsigned int i = (unsigned int) i_;
    if ((__builtin_expect (!!(i >= get_length ()), 0))) return CrapHelper<Type>::get_crap ();
    std::atomic_signal_fence (std::memory_order_acquire);
    return StructAtOffset<Type> (&bytesZ, i * header.unitSize);
  }
  unsigned int get_length () const
  { return header.nUnits - last_is_terminator (); }
  unsigned int get_size () const
  { return header.static_size + header.nUnits * header.unitSize; }

  template <typename ...Ts>
  bool sanitize (hb_sanitize_context_t *c, Ts&&... ds) const
  {
    hb_no_trace_t<bool> trace;
    if ((__builtin_expect (!!(!sanitize_shallow (c)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 1102);
    if (!sizeof... (Ts) && std::is_trivially_copyable<Type>::value) return trace.ret (true, __PRETTY_FUNCTION__, 1103);
    unsigned int count = get_length ();
    for (unsigned int i = 0; i < count; i++)
      if ((__builtin_expect (!!(!(*this)[i].sanitize (c, std::forward<Ts> (ds)...)), 0)))
 return trace.ret (false, __PRETTY_FUNCTION__, 1107);
    return trace.ret (true, __PRETTY_FUNCTION__, 1108);
  }

  template <typename T>
  const Type *bsearch (const T &key) const
  {
    unsigned pos;
    return hb_bsearch_impl (&pos,
       key,
       (const void *) bytesZ,
       get_length (),
       header.unitSize,
       _hb_cmp_method<T, Type>)
    ? (const Type *) (((const char *) &bytesZ) + (pos * header.unitSize))
    : nullptr;
  }

  private:
  bool sanitize_shallow (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (header.sanitize (c) && Type::static_size <= header.unitSize && c->check_range (bytesZ.arrayZ, header.nUnits, header.unitSize), __PRETTY_FUNCTION__, 1129)



                       ;
  }

  protected:
  VarSizedBinSearchHeader header;
  UnsizedArrayOf<HBUINT8> bytesZ;
  public:
  void _compiles_assertion_on_line_1140 () const { (void) (bytesZ)[0].static_size; } void _instance_assertion_on_line_1140 () const { static_assert ((sizeof (*this) == (10) + (1 +0) * sizeof ((bytesZ)[0])), ""); } static constexpr unsigned null_size = (10); static constexpr unsigned min_size = (10);
};


}
# 29 "../harfbuzz-6.0.0/src/hb-aat-ltag-table.hh" 2





#define HB_AAT_TAG_ltag HB_TAG('l','t','a','g')


namespace AAT {

using namespace OT;


struct FTStringRange
{
  friend struct ltag;

  bool sanitize (hb_sanitize_context_t *c, const void *base) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this) && (base+tag).sanitize (c, length), __PRETTY_FUNCTION__, 49);
  }

  protected:
  NNOffset16To<UnsizedArrayOf<HBUINT8>>
  tag;

  HBUINT16 length;
  public:
  void _instance_assertion_on_line_58 () const { static_assert ((sizeof (*this) == (4)), ""); } unsigned int get_size () const { return (4); } static constexpr unsigned null_size = (4); static constexpr unsigned min_size = (4); static constexpr unsigned static_size = (4);
};

struct ltag
{
  static constexpr hb_tag_t tableTag = ((hb_tag_t)((((uint32_t)('l')&0xFF)<<24)|(((uint32_t)('t')&0xFF)<<16)|(((uint32_t)('a')&0xFF)<<8)|((uint32_t)('g')&0xFF)));

  hb_language_t get_language (unsigned int i) const
  {
    const FTStringRange &range = tagRanges[i];
    return hb_language_from_string ((const char *) (this+range.tag).arrayZ,
        range.length);
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret ((__builtin_expect (!!(c->check_struct (this) && version >= 1 && tagRanges.sanitize (c, this)), 1)), __PRETTY_FUNCTION__, 75)

                                   ;
  }

  protected:
  HBUINT32 version;
  HBUINT32 flags;
  Array32Of<FTStringRange>
  tagRanges;
  public:
  void _compiles_assertion_on_line_86 () const { (void) (tagRanges)[0].static_size; } void _instance_assertion_on_line_86 () const { static_assert ((sizeof (*this) == (12) + (1 +0) * sizeof ((tagRanges)[0])), ""); } static constexpr unsigned null_size = (12); static constexpr unsigned min_size = (12);
};

}
# 34 "../harfbuzz-6.0.0/src/hb-aat-layout.hh" 2

struct hb_aat_feature_mapping_t
{
  hb_tag_t otFeatureTag;
  hb_aat_layout_feature_type_t aatFeatureType;
  hb_aat_layout_feature_selector_t selectorToEnable;
  hb_aat_layout_feature_selector_t selectorToDisable;

  int cmp (hb_tag_t key) const
  { return key < otFeatureTag ? -1 : key > otFeatureTag ? 1 : 0; }
};

__attribute__((__visibility__("hidden"))) const hb_aat_feature_mapping_t *
hb_aat_layout_find_feature_mapping (hb_tag_t tag);

__attribute__((__visibility__("hidden"))) void
hb_aat_layout_compile_map (const hb_aat_map_builder_t *mapper,
      hb_aat_map_t *map);

__attribute__((__visibility__("hidden"))) void
hb_aat_layout_substitute (const hb_ot_shape_plan_t *plan,
     hb_font_t *font,
     hb_buffer_t *buffer,
     const hb_feature_t *features,
     unsigned num_features);

__attribute__((__visibility__("hidden"))) void
hb_aat_layout_zero_width_deleted_glyphs (hb_buffer_t *buffer);

__attribute__((__visibility__("hidden"))) void
hb_aat_layout_remove_deleted_glyphs (hb_buffer_t *buffer);

__attribute__((__visibility__("hidden"))) void
hb_aat_layout_position (const hb_ot_shape_plan_t *plan,
   hb_font_t *font,
   hb_buffer_t *buffer);

__attribute__((__visibility__("hidden"))) void
hb_aat_layout_track (const hb_ot_shape_plan_t *plan,
       hb_font_t *font,
       hb_buffer_t *buffer);
# 31 "../harfbuzz-6.0.0/src/hb-aat-layout.cc" 2
# 1 "../harfbuzz-6.0.0/src/hb-aat-layout-ankr-table.hh" 1
# 26 "../harfbuzz-6.0.0/src/hb-aat-layout-ankr-table.hh"
#define HB_AAT_LAYOUT_ANKR_TABLE_HH 

# 1 "../harfbuzz-6.0.0/src/hb-aat-layout-common.hh" 1
# 28 "../harfbuzz-6.0.0/src/hb-aat-layout-common.hh"
#define HB_AAT_LAYOUT_COMMON_HH 





namespace OT {
struct GDEF;
};

namespace AAT {

using namespace OT;


struct ankr;

struct hb_aat_apply_context_t :
       hb_dispatch_context_t<hb_aat_apply_context_t, bool, (0 +0)>
{
  const char *get_name () { return "APPLY"; }
  template <typename T>
  return_t dispatch (const T &obj) { return obj.apply (this); }
  static return_t default_return_value () { return false; }
  bool stop_sublookup_iteration (return_t r) const { return r; }

  const hb_ot_shape_plan_t *plan;
  hb_font_t *font;
  hb_face_t *face;
  hb_buffer_t *buffer;
  hb_sanitize_context_t sanitizer;
  const ankr *ankr_table;
  const OT::GDEF *gdef_table;
  const hb_sorted_vector_t<hb_aat_map_t::range_flags_t> *range_flags = nullptr;
  hb_mask_t subtable_flags = 0;


  unsigned int lookup_index;

  __attribute__((__visibility__("hidden"))) hb_aat_apply_context_t (const hb_ot_shape_plan_t *plan_,
          hb_font_t *font_,
          hb_buffer_t *buffer_,
          hb_blob_t *blob = const_cast<hb_blob_t *> (&NullHelper<hb_blob_t>::get_null ()));

  __attribute__((__visibility__("hidden"))) ~hb_aat_apply_context_t ();

  __attribute__((__visibility__("hidden"))) void set_ankr_table (const AAT::ankr *ankr_table_);

  void set_lookup_index (unsigned int i) { lookup_index = i; }
};






template <typename T> struct Lookup;

template <typename T>
struct LookupFormat0
{
  friend struct Lookup<T>;

  private:
  const T* get_value (hb_codepoint_t glyph_id, unsigned int num_glyphs) const
  {
    if ((__builtin_expect (!!(glyph_id >= num_glyphs), 0))) return nullptr;
    return &arrayZ[glyph_id];
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (arrayZ.sanitize (c, c->get_num_glyphs ()), __PRETTY_FUNCTION__, 101);
  }
  bool sanitize (hb_sanitize_context_t *c, const void *base) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (arrayZ.sanitize (c, c->get_num_glyphs (), base), __PRETTY_FUNCTION__, 106);
  }

  protected:
  HBUINT16 format;
  UnsizedArrayOf<T>
  arrayZ;
  public:
  void _instance_assertion_on_line_114 () const { static_assert ((sizeof (*this) >= (2)), ""); } static constexpr unsigned min_size = (2);
};


template <typename T>
struct LookupSegmentSingle
{
  static constexpr unsigned TerminationWordCount = 2u;

  int cmp (hb_codepoint_t g) const
  { return g < first ? -1 : g <= last ? 0 : +1 ; }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this) && value.sanitize (c), __PRETTY_FUNCTION__, 129);
  }
  bool sanitize (hb_sanitize_context_t *c, const void *base) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this) && value.sanitize (c, base), __PRETTY_FUNCTION__, 134);
  }

  HBGlyphID16 last;
  HBGlyphID16 first;
  T value;
  public:
  void _instance_assertion_on_line_141 () const { static_assert ((sizeof (*this) == (4 + T::static_size)), ""); } unsigned int get_size () const { return (4 + T::static_size); } static constexpr unsigned null_size = (4 + T::static_size); static constexpr unsigned min_size = (4 + T::static_size); static constexpr unsigned static_size = (4 + T::static_size);
};

template <typename T>
struct LookupFormat2
{
  friend struct Lookup<T>;

  private:
  const T* get_value (hb_codepoint_t glyph_id) const
  {
    const LookupSegmentSingle<T> *v = segments.bsearch (glyph_id);
    return v ? &v->value : nullptr;
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (segments.sanitize (c), __PRETTY_FUNCTION__, 159);
  }
  bool sanitize (hb_sanitize_context_t *c, const void *base) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (segments.sanitize (c, base), __PRETTY_FUNCTION__, 164);
  }

  protected:
  HBUINT16 format;
  VarSizedBinSearchArrayOf<LookupSegmentSingle<T>>
  segments;


  public:
  void _compiles_assertion_on_line_174 () const { (void) (segments)[0].static_size; } void _instance_assertion_on_line_174 () const { static_assert ((sizeof (*this) == (8) + (1 +0) * sizeof ((segments)[0])), ""); } static constexpr unsigned null_size = (8); static constexpr unsigned min_size = (8);
};

template <typename T>
struct LookupSegmentArray
{
  static constexpr unsigned TerminationWordCount = 2u;

  const T* get_value (hb_codepoint_t glyph_id, const void *base) const
  {
    return first <= glyph_id && glyph_id <= last ? &(base+valuesZ)[glyph_id - first] : nullptr;
  }

  int cmp (hb_codepoint_t g) const
  { return g < first ? -1 : g <= last ? 0 : +1; }

  bool sanitize (hb_sanitize_context_t *c, const void *base) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this) && first <= last && valuesZ.sanitize (c, base, last - first + 1), __PRETTY_FUNCTION__, 193)

                                                 ;
  }
  template <typename ...Ts>
  bool sanitize (hb_sanitize_context_t *c, const void *base, Ts&&... ds) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this) && first <= last && valuesZ.sanitize (c, base, last - first + 1, std::forward<Ts> (ds)...), __PRETTY_FUNCTION__, 201)

                                                                           ;
  }

  HBGlyphID16 last;
  HBGlyphID16 first;
  NNOffset16To<UnsizedArrayOf<T>>
  valuesZ;

  public:
  void _instance_assertion_on_line_212 () const { static_assert ((sizeof (*this) == (6)), ""); } unsigned int get_size () const { return (6); } static constexpr unsigned null_size = (6); static constexpr unsigned min_size = (6); static constexpr unsigned static_size = (6);
};

template <typename T>
struct LookupFormat4
{
  friend struct Lookup<T>;

  private:
  const T* get_value (hb_codepoint_t glyph_id) const
  {
    const LookupSegmentArray<T> *v = segments.bsearch (glyph_id);
    return v ? v->get_value (glyph_id, this) : nullptr;
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (segments.sanitize (c, this), __PRETTY_FUNCTION__, 230);
  }
  bool sanitize (hb_sanitize_context_t *c, const void *base) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (segments.sanitize (c, this, base), __PRETTY_FUNCTION__, 235);
  }

  protected:
  HBUINT16 format;
  VarSizedBinSearchArrayOf<LookupSegmentArray<T>>
  segments;


  public:
  void _compiles_assertion_on_line_245 () const { (void) (segments)[0].static_size; } void _instance_assertion_on_line_245 () const { static_assert ((sizeof (*this) == (8) + (1 +0) * sizeof ((segments)[0])), ""); } static constexpr unsigned null_size = (8); static constexpr unsigned min_size = (8);
};

template <typename T>
struct LookupSingle
{
  static constexpr unsigned TerminationWordCount = 1u;

  int cmp (hb_codepoint_t g) const { return glyph.cmp (g); }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this) && value.sanitize (c), __PRETTY_FUNCTION__, 258);
  }
  bool sanitize (hb_sanitize_context_t *c, const void *base) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this) && value.sanitize (c, base), __PRETTY_FUNCTION__, 263);
  }

  HBGlyphID16 glyph;
  T value;
  public:
  void _instance_assertion_on_line_269 () const { static_assert ((sizeof (*this) == (2 + T::static_size)), ""); } unsigned int get_size () const { return (2 + T::static_size); } static constexpr unsigned null_size = (2 + T::static_size); static constexpr unsigned min_size = (2 + T::static_size); static constexpr unsigned static_size = (2 + T::static_size);
};

template <typename T>
struct LookupFormat6
{
  friend struct Lookup<T>;

  private:
  const T* get_value (hb_codepoint_t glyph_id) const
  {
    const LookupSingle<T> *v = entries.bsearch (glyph_id);
    return v ? &v->value : nullptr;
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (entries.sanitize (c), __PRETTY_FUNCTION__, 287);
  }
  bool sanitize (hb_sanitize_context_t *c, const void *base) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (entries.sanitize (c, base), __PRETTY_FUNCTION__, 292);
  }

  protected:
  HBUINT16 format;
  VarSizedBinSearchArrayOf<LookupSingle<T>>
  entries;
  public:
  void _compiles_assertion_on_line_300 () const { (void) (entries)[0].static_size; } void _instance_assertion_on_line_300 () const { static_assert ((sizeof (*this) == (8) + (1 +0) * sizeof ((entries)[0])), ""); } static constexpr unsigned null_size = (8); static constexpr unsigned min_size = (8);
};

template <typename T>
struct LookupFormat8
{
  friend struct Lookup<T>;

  private:
  const T* get_value (hb_codepoint_t glyph_id) const
  {
    return firstGlyph <= glyph_id && glyph_id - firstGlyph < glyphCount ?
    &valueArrayZ[glyph_id - firstGlyph] : nullptr;
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this) && valueArrayZ.sanitize (c, glyphCount), __PRETTY_FUNCTION__, 318);
  }
  bool sanitize (hb_sanitize_context_t *c, const void *base) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this) && valueArrayZ.sanitize (c, glyphCount, base), __PRETTY_FUNCTION__, 323);
  }

  protected:
  HBUINT16 format;
  HBGlyphID16 firstGlyph;
  HBUINT16 glyphCount;

  UnsizedArrayOf<T>
  valueArrayZ;

  public:
  void _compiles_assertion_on_line_335 () const { (void) (valueArrayZ)[0].static_size; } void _instance_assertion_on_line_335 () const { static_assert ((sizeof (*this) == (6) + (1 +0) * sizeof ((valueArrayZ)[0])), ""); } static constexpr unsigned null_size = (6); static constexpr unsigned min_size = (6);
};

template <typename T>
struct LookupFormat10
{
  friend struct Lookup<T>;

  private:
  const typename T::type get_value_or_null (hb_codepoint_t glyph_id) const
  {
    if (!(firstGlyph <= glyph_id && glyph_id - firstGlyph < glyphCount))
      return NullHelper<T>::get_null ();

    const HBUINT8 *p = &valueArrayZ[(glyph_id - firstGlyph) * valueSize];

    unsigned int v = 0;
    unsigned int count = valueSize;
    for (unsigned int i = 0; i < count; i++)
      v = (v << 8) | *p++;

    return v;
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this) && valueSize <= 4 && valueArrayZ.sanitize (c, glyphCount * valueSize), __PRETTY_FUNCTION__, 362)

                                                     ;
  }

  protected:
  HBUINT16 format;
  HBUINT16 valueSize;
  HBGlyphID16 firstGlyph;
  HBUINT16 glyphCount;

  UnsizedArrayOf<HBUINT8>
  valueArrayZ;

  public:
  void _compiles_assertion_on_line_377 () const { (void) (valueArrayZ)[0].static_size; } void _instance_assertion_on_line_377 () const { static_assert ((sizeof (*this) == (8) + (1 +0) * sizeof ((valueArrayZ)[0])), ""); } static constexpr unsigned null_size = (8); static constexpr unsigned min_size = (8);
};

template <typename T>
struct Lookup
{
  const T* get_value (hb_codepoint_t glyph_id, unsigned int num_glyphs) const
  {
    switch (u.format) {
    case 0: return u.format0.get_value (glyph_id, num_glyphs);
    case 2: return u.format2.get_value (glyph_id);
    case 4: return u.format4.get_value (glyph_id);
    case 6: return u.format6.get_value (glyph_id);
    case 8: return u.format8.get_value (glyph_id);
    default:return nullptr;
    }
  }

  const typename T::type get_value_or_null (hb_codepoint_t glyph_id, unsigned int num_glyphs) const
  {
    switch (u.format) {

      case 10: return u.format10.get_value_or_null (glyph_id);
      default:
      const T *v = get_value (glyph_id, num_glyphs);
      return v ? *v : NullHelper<T>::get_null ();
    }
  }

  typename T::type get_class (hb_codepoint_t glyph_id,
         unsigned int num_glyphs,
         unsigned int outOfRange) const
  {
    const T *v = get_value (glyph_id, num_glyphs);
    return v ? *v : outOfRange;
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    if (!u.format.sanitize (c)) return trace.ret (false, __PRETTY_FUNCTION__, 417);
    switch (u.format) {
    case 0: return trace.ret (u.format0.sanitize (c), __PRETTY_FUNCTION__, 419);
    case 2: return trace.ret (u.format2.sanitize (c), __PRETTY_FUNCTION__, 420);
    case 4: return trace.ret (u.format4.sanitize (c), __PRETTY_FUNCTION__, 421);
    case 6: return trace.ret (u.format6.sanitize (c), __PRETTY_FUNCTION__, 422);
    case 8: return trace.ret (u.format8.sanitize (c), __PRETTY_FUNCTION__, 423);
    case 10: return trace.ret (u.format10.sanitize (c), __PRETTY_FUNCTION__, 424);
    default:return trace.ret (true, __PRETTY_FUNCTION__, 425);
    }
  }
  bool sanitize (hb_sanitize_context_t *c, const void *base) const
  {
    hb_no_trace_t<bool> trace;
    if (!u.format.sanitize (c)) return trace.ret (false, __PRETTY_FUNCTION__, 431);
    switch (u.format) {
    case 0: return trace.ret (u.format0.sanitize (c, base), __PRETTY_FUNCTION__, 433);
    case 2: return trace.ret (u.format2.sanitize (c, base), __PRETTY_FUNCTION__, 434);
    case 4: return trace.ret (u.format4.sanitize (c, base), __PRETTY_FUNCTION__, 435);
    case 6: return trace.ret (u.format6.sanitize (c, base), __PRETTY_FUNCTION__, 436);
    case 8: return trace.ret (u.format8.sanitize (c, base), __PRETTY_FUNCTION__, 437);
    case 10: return trace.ret (false, __PRETTY_FUNCTION__, 438);
    default:return trace.ret (true, __PRETTY_FUNCTION__, 439);
    }
  }

  protected:
  union {
  HBUINT16 format;
  LookupFormat0<T> format0;
  LookupFormat2<T> format2;
  LookupFormat4<T> format4;
  LookupFormat6<T> format6;
  LookupFormat8<T> format8;
  LookupFormat10<T> format10;
  } u;
  public:
  void _compiles_assertion_on_line_454 () const { (void) this->u.format.static_size; } void _instance_assertion_on_line_454 () const { static_assert ((sizeof(this->u.format) == (2)), ""); } static constexpr unsigned null_size = (2); static constexpr unsigned min_size = (2);
};
} extern __attribute__((__visibility__("hidden"))) const unsigned char _hb_Null_AAT_Lookup[2]; template <typename Spec> struct Null<AAT::Lookup<Spec>> { static AAT::Lookup<Spec> const & get_null () { return *reinterpret_cast<const AAT::Lookup<Spec> *> (_hb_Null_AAT_Lookup); } }; namespace AAT { static_assert (true, "");

enum { DELETED_GLYPH = 0xFFFF };





template <typename T>
struct Entry
{
  bool sanitize (hb_sanitize_context_t *c, unsigned int count) const
  {
    hb_no_trace_t<bool> trace;







    static_assert (T::static_size, "");

    return trace.ret (c->check_struct (this), __PRETTY_FUNCTION__, 479);
  }

  public:
  HBUINT16 newState;


  HBUINT16 flags;
  T data;
  public:
  void _instance_assertion_on_line_489 () const { static_assert ((sizeof (*this) == (4 + T::static_size)), ""); } unsigned int get_size () const { return (4 + T::static_size); } static constexpr unsigned null_size = (4 + T::static_size); static constexpr unsigned min_size = (4 + T::static_size); static constexpr unsigned static_size = (4 + T::static_size);
};

template <>
struct Entry<void>
{
  bool sanitize (hb_sanitize_context_t *c, unsigned int count ) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this), __PRETTY_FUNCTION__, 498);
  }

  public:
  HBUINT16 newState;
  HBUINT16 flags;
  public:
  void _instance_assertion_on_line_505 () const { static_assert ((sizeof (*this) == (4)), ""); } unsigned int get_size () const { return (4); } static constexpr unsigned null_size = (4); static constexpr unsigned min_size = (4); static constexpr unsigned static_size = (4);
};

template <typename Types, typename Extra>
struct StateTable
{
  typedef typename Types::HBUINT HBUINT;
  typedef typename Types::HBUSHORT HBUSHORT;
  typedef typename Types::ClassTypeNarrow ClassType;

  enum State
  {
    STATE_START_OF_TEXT = 0,
    STATE_START_OF_LINE = 1,
  };
  enum Class
  {
    CLASS_END_OF_TEXT = 0,
    CLASS_OUT_OF_BOUNDS = 1,
    CLASS_DELETED_GLYPH = 2,
    CLASS_END_OF_LINE = 3,
  };

  int new_state (unsigned int newState) const
  { return Types::extended ? newState : ((int) newState - (int) stateArrayTable) / (int) nClasses; }

  unsigned int get_class (hb_codepoint_t glyph_id, unsigned int num_glyphs) const
  {
    if ((__builtin_expect (!!(glyph_id == DELETED_GLYPH), 0))) return CLASS_DELETED_GLYPH;
    return (this+classTable).get_class (glyph_id, num_glyphs, 1);
  }

  const Entry<Extra> *get_entries () const
  { return (this+entryTable).arrayZ; }

  const Entry<Extra> &get_entry (int state, unsigned int klass) const
  {
    if ((__builtin_expect (!!(klass >= nClasses), 0)))
      klass = StateTable::CLASS_OUT_OF_BOUNDS;

    const HBUSHORT *states = (this+stateArrayTable).arrayZ;
    const Entry<Extra> *entries = (this+entryTable).arrayZ;

    unsigned int entry = states[state * nClasses + klass];
    _hb_debug_msg<(0 +0)> ("APPLY", (nullptr), nullptr, false, 0, 0, "e%u", entry);

    return entries[entry];
  }

  bool sanitize (hb_sanitize_context_t *c,
   unsigned int *num_entries_out = nullptr) const
  {
    hb_no_trace_t<bool> trace;
    if ((__builtin_expect (!!(!(c->check_struct (this) && nClasses >= 4 && classTable.sanitize (c, this))), 0))

                                     ) return trace.ret (false, __PRETTY_FUNCTION__, 560);

    const HBUSHORT *states = (this+stateArrayTable).arrayZ;
    const Entry<Extra> *entries = (this+entryTable).arrayZ;

    unsigned int num_classes = nClasses;
    if ((__builtin_expect (!!(hb_unsigned_mul_overflows (num_classes, states[0].static_size)), 0)))
      return trace.ret (false, __PRETTY_FUNCTION__, 567);
    unsigned int row_stride = num_classes * states[0].static_size;
# 584 "../harfbuzz-6.0.0/src/hb-aat-layout-common.hh"
    int min_state = 0;
    int max_state = 0;
    unsigned int num_entries = 0;

    int state_pos = 0;
    int state_neg = 0;
    unsigned int entry = 0;
    while (min_state < state_neg || state_pos <= max_state)
    {
      if (min_state < state_neg)
      {

 if ((__builtin_expect (!!(hb_unsigned_mul_overflows (min_state, num_classes)), 0)))
   return trace.ret (false, __PRETTY_FUNCTION__, 597);
 if ((__builtin_expect (!!(!c->check_range (&states[min_state * num_classes], -min_state, row_stride)), 0))

                       )
   return trace.ret (false, __PRETTY_FUNCTION__, 601);
 if ((c->max_ops -= state_neg - min_state) <= 0)
   return trace.ret (false, __PRETTY_FUNCTION__, 603);
 {
   const HBUSHORT *stop = &states[min_state * num_classes];
   if ((__builtin_expect (!!(stop > states), 0)))
     return trace.ret (false, __PRETTY_FUNCTION__, 607);
   for (const HBUSHORT *p = states; stop < p; p--)
     num_entries = hb_max (num_entries, *(p - 1) + 1u);
   state_neg = min_state;
 }
      }

      if (state_pos <= max_state)
      {

 if ((__builtin_expect (!!(!c->check_range (states, max_state + 1, row_stride)), 0))

                       )
   return trace.ret (false, __PRETTY_FUNCTION__, 620);
 if ((c->max_ops -= max_state - state_pos + 1) <= 0)
   return trace.ret (false, __PRETTY_FUNCTION__, 622);
 {
   if ((__builtin_expect (!!(hb_unsigned_mul_overflows ((max_state + 1), num_classes)), 0)))
     return trace.ret (false, __PRETTY_FUNCTION__, 625);
   const HBUSHORT *stop = &states[(max_state + 1) * num_classes];
   if ((__builtin_expect (!!(stop < states), 0)))
     return trace.ret (false, __PRETTY_FUNCTION__, 628);
   for (const HBUSHORT *p = &states[state_pos * num_classes]; p < stop; p++)
     num_entries = hb_max (num_entries, *p + 1u);
   state_pos = max_state + 1;
 }
      }

      if ((__builtin_expect (!!(!c->check_array (entries, num_entries)), 0)))
 return trace.ret (false, __PRETTY_FUNCTION__, 636);
      if ((c->max_ops -= num_entries - entry) <= 0)
 return trace.ret (false, __PRETTY_FUNCTION__, 638);
      {
 const Entry<Extra> *stop = &entries[num_entries];
 for (const Entry<Extra> *p = &entries[entry]; p < stop; p++)
 {
   int newState = new_state (p->newState);
   min_state = hb_min (min_state, newState);
   max_state = hb_max (max_state, newState);
 }
 entry = num_entries;
      }
    }

    if (num_entries_out)
      *num_entries_out = num_entries;

    return trace.ret (true, __PRETTY_FUNCTION__, 654);
  }

  protected:
  HBUINT nClasses;

  NNOffsetTo<ClassType, HBUINT>
  classTable;
  NNOffsetTo<UnsizedArrayOf<HBUSHORT>, HBUINT>
  stateArrayTable;
  NNOffsetTo<UnsizedArrayOf<Entry<Extra>>, HBUINT>
  entryTable;

  public:
  void _instance_assertion_on_line_668 () const { static_assert ((sizeof (*this) == (4 * sizeof (HBUINT))), ""); } unsigned int get_size () const { return (4 * sizeof (HBUINT)); } static constexpr unsigned null_size = (4 * sizeof (HBUINT)); static constexpr unsigned min_size = (4 * sizeof (HBUINT)); static constexpr unsigned static_size = (4 * sizeof (HBUINT));
};

template <typename HBUCHAR>
struct ClassTable
{
  unsigned int get_class (hb_codepoint_t glyph_id, unsigned int outOfRange) const
  {
    unsigned int i = glyph_id - firstGlyph;
    return i >= classArray.len ? outOfRange : classArray.arrayZ[i];
  }
  unsigned int get_class (hb_codepoint_t glyph_id,
     unsigned int num_glyphs __attribute__((unused)),
     unsigned int outOfRange) const
  {
    return get_class (glyph_id, outOfRange);
  }
  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this) && classArray.sanitize (c), __PRETTY_FUNCTION__, 688);
  }
  protected:
  HBGlyphID16 firstGlyph;
  Array16Of<HBUCHAR> classArray;

  public:
  void _compiles_assertion_on_line_695 () const { (void) (classArray)[0].static_size; } void _instance_assertion_on_line_695 () const { static_assert ((sizeof (*this) == (4) + (1 +0) * sizeof ((classArray)[0])), ""); } static constexpr unsigned null_size = (4); static constexpr unsigned min_size = (4);
};

struct ObsoleteTypes
{
  static constexpr bool extended = false;
  typedef HBUINT16 HBUINT;
  typedef HBUINT8 HBUSHORT;
  typedef ClassTable<HBUINT8> ClassTypeNarrow;
  typedef ClassTable<HBUINT16> ClassTypeWide;

  template <typename T>
  static unsigned int offsetToIndex (unsigned int offset,
         const void *base,
         const T *array)
  {




    if ((__builtin_expect (!!(offset < unsigned ((const char *) array - (const char *) base)), 0)))
      return 0x7fffffff 
# 716 "../harfbuzz-6.0.0/src/hb-aat-layout-common.hh"
                    / T::static_size;


    return (offset - unsigned ((const char *) array - (const char *) base)) / T::static_size;
  }
  template <typename T>
  static unsigned int byteOffsetToIndex (unsigned int offset,
      const void *base,
      const T *array)
  {
    return offsetToIndex (offset, base, array);
  }
  template <typename T>
  static unsigned int wordOffsetToIndex (unsigned int offset,
      const void *base,
      const T *array)
  {
    return offsetToIndex (2 * offset, base, array);
  }
};
struct ExtendedTypes
{
  static constexpr bool extended = true;
  typedef HBUINT32 HBUINT;
  typedef HBUINT16 HBUSHORT;
  typedef Lookup<HBUINT16> ClassTypeNarrow;
  typedef Lookup<HBUINT16> ClassTypeWide;

  template <typename T>
  static unsigned int offsetToIndex (unsigned int offset,
         const void *base __attribute__((unused)),
         const T *array __attribute__((unused)))
  {
    return offset;
  }
  template <typename T>
  static unsigned int byteOffsetToIndex (unsigned int offset,
      const void *base __attribute__((unused)),
      const T *array __attribute__((unused)))
  {
    return offset / 2;
  }
  template <typename T>
  static unsigned int wordOffsetToIndex (unsigned int offset,
      const void *base __attribute__((unused)),
      const T *array __attribute__((unused)))
  {
    return offset;
  }
};

template <typename Types, typename EntryData>
struct StateTableDriver
{
  using StateTableT = StateTable<Types, EntryData>;
  using EntryT = Entry<EntryData>;

  StateTableDriver (const StateTableT &machine_,
      hb_buffer_t *buffer_,
      hb_face_t *face_) :
       machine (machine_),
       buffer (buffer_),
       num_glyphs (face_->get_num_glyphs ()) {}

  template <typename context_t>
  void drive (context_t *c, hb_aat_apply_context_t *ac)
  {
    if (!c->in_place)
      buffer->clear_output ();

    int state = StateTableT::STATE_START_OF_TEXT;

    auto *last_range = ac->range_flags && (ac->range_flags->length > 1) ? &(*ac->range_flags)[0] : nullptr;
    for (buffer->idx = 0; buffer->successful;)
    {

      if (last_range)
      {
 auto *range = last_range;
 if (buffer->idx < buffer->len)
 {
   unsigned cluster = buffer->cur().cluster;
   while (cluster < range->cluster_first)
     range--;
   while (cluster > range->cluster_last)
     range++;


   last_range = range;
 }
 if (!(range->flags & ac->subtable_flags))
 {
   if (buffer->idx == buffer->len || (__builtin_expect (!!(!buffer->successful), 0)))
     break;

   state = StateTableT::STATE_START_OF_TEXT;
   (void) buffer->next_glyph ();
   continue;
 }
      }

      unsigned int klass = buffer->idx < buffer->len ?
      machine.get_class (buffer->cur().codepoint, num_glyphs) :
      (unsigned) StateTableT::CLASS_END_OF_TEXT;
      _hb_debug_msg<(0 +0)> ("APPLY", (nullptr), nullptr, false, 0, 0, "c%u at %u", klass, buffer->idx);
      const EntryT &entry = machine.get_entry (state, klass);
      const int next_state = machine.new_state (entry.newState);
# 852 "../harfbuzz-6.0.0/src/hb-aat-layout-common.hh"
      const EntryT *wouldbe_entry;
      bool safe_to_break =

 !c->is_actionable (this, entry)
      &&

 (

   state == StateTableT::STATE_START_OF_TEXT
 ||

   (
     (entry.flags & context_t::DontAdvance) &&
     next_state == StateTableT::STATE_START_OF_TEXT
   )
 ||

   (
     wouldbe_entry = &machine.get_entry (StateTableT::STATE_START_OF_TEXT, klass)
   ,

     !c->is_actionable (this, *wouldbe_entry)
   &&

     (
       next_state == machine.new_state (wouldbe_entry->newState)
     &&
       (entry.flags & context_t::DontAdvance) == (wouldbe_entry->flags & context_t::DontAdvance)
     )
   )
 )
      &&

 !c->is_actionable (this, machine.get_entry (state, StateTableT::CLASS_END_OF_TEXT))
      ;

      if (!safe_to_break && buffer->backtrack_len () && buffer->idx < buffer->len)
 buffer->unsafe_to_break_from_outbuffer (buffer->backtrack_len () - 1, buffer->idx + 1);

      c->transition (this, entry);

      state = next_state;
      _hb_debug_msg<(0 +0)> ("APPLY", (nullptr), nullptr, false, 0, 0, "s%d", state);

      if (buffer->idx == buffer->len || (__builtin_expect (!!(!buffer->successful), 0)))
 break;

      if (!(entry.flags & context_t::DontAdvance) || buffer->max_ops-- <= 0)
 (void) buffer->next_glyph ();
    }

    if (!c->in_place)
      buffer->sync ();
  }

  public:
  const StateTableT &machine;
  hb_buffer_t *buffer;
  unsigned int num_glyphs;
};


}
# 29 "../harfbuzz-6.0.0/src/hb-aat-layout-ankr-table.hh" 2





#define HB_AAT_TAG_ankr HB_TAG('a','n','k','r')


namespace AAT {

using namespace OT;


struct Anchor
{
  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this), __PRETTY_FUNCTION__, 47);
  }

  public:
  FWORD xCoordinate;
  FWORD yCoordinate;
  public:
  void _instance_assertion_on_line_54 () const { static_assert ((sizeof (*this) == (4)), ""); } unsigned int get_size () const { return (4); } static constexpr unsigned null_size = (4); static constexpr unsigned min_size = (4); static constexpr unsigned static_size = (4);
};

typedef Array32Of<Anchor> GlyphAnchors;

struct ankr
{
  static constexpr hb_tag_t tableTag = ((hb_tag_t)((((uint32_t)('a')&0xFF)<<24)|(((uint32_t)('n')&0xFF)<<16)|(((uint32_t)('k')&0xFF)<<8)|((uint32_t)('r')&0xFF)));

  const Anchor &get_anchor (hb_codepoint_t glyph_id,
       unsigned int i,
       unsigned int num_glyphs) const
  {
    const NNOffset16To<GlyphAnchors> *offset = (this+lookupTable).get_value (glyph_id, num_glyphs);
    if (!offset)
      return NullHelper<Anchor>::get_null ();
    const GlyphAnchors &anchors = &(this+anchorData) + *offset;
    return anchors[i];
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret ((__builtin_expect (!!(c->check_struct (this) && version == 0 && c->check_range (this, anchorData) && lookupTable.sanitize (c, this, &(this+anchorData))), 1)), __PRETTY_FUNCTION__, 77)


                                                         ;
  }

  protected:
  HBUINT16 version;
  HBUINT16 flags;
  Offset32To<Lookup<NNOffset16To<GlyphAnchors>>>
  lookupTable;
  NNOffset32To<HBUINT8>
  anchorData;

  public:
  void _instance_assertion_on_line_92 () const { static_assert ((sizeof (*this) == (12)), ""); } unsigned int get_size () const { return (12); } static constexpr unsigned null_size = (12); static constexpr unsigned min_size = (12); static constexpr unsigned static_size = (12);
};

}
# 32 "../harfbuzz-6.0.0/src/hb-aat-layout.cc" 2
# 1 "../harfbuzz-6.0.0/src/hb-aat-layout-bsln-table.hh" 1
# 26 "../harfbuzz-6.0.0/src/hb-aat-layout-bsln-table.hh"
#define HB_AAT_LAYOUT_BSLN_TABLE_HH 







#define HB_AAT_TAG_bsln HB_TAG('b','s','l','n')


namespace AAT {


struct BaselineTableFormat0Part
{
  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this), __PRETTY_FUNCTION__, 45);
  }

  protected:


  HBINT16 deltas[32];


  public:
  void _instance_assertion_on_line_55 () const { static_assert ((sizeof (*this) == (64)), ""); } unsigned int get_size () const { return (64); } static constexpr unsigned null_size = (64); static constexpr unsigned min_size = (64); static constexpr unsigned static_size = (64);
};

struct BaselineTableFormat1Part
{
  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret ((__builtin_expect (!!(c->check_struct (this) && lookupTable.sanitize (c)), 1)), __PRETTY_FUNCTION__, 63)
                               ;
  }

  protected:
  HBINT16 deltas[32];
  Lookup<HBUINT16>
  lookupTable;

  public:
  void _instance_assertion_on_line_73 () const { static_assert ((sizeof (*this) >= (66)), ""); } static constexpr unsigned null_size = (66); static constexpr unsigned min_size = (66);
};

struct BaselineTableFormat2Part
{
  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this), __PRETTY_FUNCTION__, 81);
  }

  protected:
  HBGlyphID16 stdGlyph;





  HBUINT16 ctlPoints[32];



  public:
  void _instance_assertion_on_line_96 () const { static_assert ((sizeof (*this) == (66)), ""); } unsigned int get_size () const { return (66); } static constexpr unsigned null_size = (66); static constexpr unsigned min_size = (66); static constexpr unsigned static_size = (66);
};

struct BaselineTableFormat3Part
{
  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret ((__builtin_expect (!!(c->check_struct (this) && lookupTable.sanitize (c)), 1)), __PRETTY_FUNCTION__, 104);
  }

  protected:
  HBGlyphID16 stdGlyph;
  HBUINT16 ctlPoints[32];
  Lookup<HBUINT16>
  lookupTable;

  public:
  void _instance_assertion_on_line_114 () const { static_assert ((sizeof (*this) >= (68)), ""); } static constexpr unsigned null_size = (68); static constexpr unsigned min_size = (68);
};

struct bsln
{
  static constexpr hb_tag_t tableTag = ((hb_tag_t)((((uint32_t)('b')&0xFF)<<24)|(((uint32_t)('s')&0xFF)<<16)|(((uint32_t)('l')&0xFF)<<8)|((uint32_t)('n')&0xFF)));

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    if ((__builtin_expect (!!(!(c->check_struct (this) && defaultBaseline < 32)), 0)))
      return trace.ret (false, __PRETTY_FUNCTION__, 125);

    switch (format)
    {
    case 0: return trace.ret (parts.format0.sanitize (c), __PRETTY_FUNCTION__, 129);
    case 1: return trace.ret (parts.format1.sanitize (c), __PRETTY_FUNCTION__, 130);
    case 2: return trace.ret (parts.format2.sanitize (c), __PRETTY_FUNCTION__, 131);
    case 3: return trace.ret (parts.format3.sanitize (c), __PRETTY_FUNCTION__, 132);
    default:return trace.ret (true, __PRETTY_FUNCTION__, 133);
    }
  }

  protected:
  FixedVersion<>version;
  HBUINT16 format;

  HBUINT16 defaultBaseline;

  union {

  BaselineTableFormat0Part format0;
  BaselineTableFormat1Part format1;

  BaselineTableFormat2Part format2;
  BaselineTableFormat3Part format3;
  } parts;
  public:
  void _instance_assertion_on_line_152 () const { static_assert ((sizeof (*this) >= (8)), ""); } static constexpr unsigned null_size = (8); static constexpr unsigned min_size = (8);
};

}
# 33 "../harfbuzz-6.0.0/src/hb-aat-layout.cc" 2
# 1 "../harfbuzz-6.0.0/src/hb-aat-layout-feat-table.hh" 1
# 26 "../harfbuzz-6.0.0/src/hb-aat-layout-feat-table.hh"
#define HB_AAT_LAYOUT_FEAT_TABLE_HH 







#define HB_AAT_TAG_feat HB_TAG('f','e','a','t')


namespace AAT {


struct SettingName
{
  friend struct FeatureName;

  int cmp (hb_aat_layout_feature_selector_t key) const
  { return (int) key - (int) setting; }

  hb_aat_layout_feature_selector_t get_selector () const
  { return (hb_aat_layout_feature_selector_t) (unsigned) setting; }

  hb_aat_layout_feature_selector_info_t get_info (hb_aat_layout_feature_selector_t default_selector) const
  {
    return {
      nameIndex,
      (hb_aat_layout_feature_selector_t) (unsigned int) setting,
      default_selector == HB_AAT_LAYOUT_FEATURE_SELECTOR_INVALID
 ? (hb_aat_layout_feature_selector_t) (setting + 1)
 : default_selector,
      0
    };
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this), __PRETTY_FUNCTION__, 65);
  }

  protected:
  HBUINT16 setting;
  NameID nameIndex;
  public:
  void _instance_assertion_on_line_72 () const { static_assert ((sizeof (*this) == (4)), ""); } unsigned int get_size () const { return (4); } static constexpr unsigned null_size = (4); static constexpr unsigned min_size = (4); static constexpr unsigned static_size = (4);
};
} extern __attribute__((__visibility__("hidden"))) const unsigned char _hb_Null_AAT_SettingName[hb_null_size<AAT::SettingName>::value]; template <> struct Null<AAT::SettingName> { static AAT::SettingName const & get_null () { return *reinterpret_cast<const AAT::SettingName *> (_hb_Null_AAT_SettingName); } }; namespace AAT { static_assert (true, "");

struct feat;

struct FeatureName
{
  int cmp (hb_aat_layout_feature_type_t key) const
  { return (int) key - (int) feature; }

  enum {
    Exclusive = 0x8000,
    NotDefault = 0x4000,





    IndexMask = 0x00FF



  };

  unsigned int get_selector_infos (unsigned int start_offset,
       unsigned int *selectors_count,
       hb_aat_layout_feature_selector_info_t *selectors,
       unsigned int *pdefault_index,
       const void *base) const
  {
    hb_array_t< const SettingName> settings_table = (base+settingTableZ).as_array (nSettings);

    static_assert (Index::NOT_FOUND_INDEX == 0xFFFFu, "");

    hb_aat_layout_feature_selector_t default_selector = HB_AAT_LAYOUT_FEATURE_SELECTOR_INVALID;
    unsigned int default_index = Index::NOT_FOUND_INDEX;
    if (featureFlags & Exclusive)
    {
      default_index = (featureFlags & NotDefault) ? featureFlags & IndexMask : 0;
      default_selector = settings_table[default_index].get_selector ();
    }
    if (pdefault_index)
      *pdefault_index = default_index;

    if (selectors_count)
    {
      + settings_table.sub_array (start_offset, selectors_count)
      | hb_map ([=] (const SettingName& setting) { return setting.get_info (default_selector); })
      | hb_sink (hb_array (selectors, *selectors_count))
      ;
    }
    return settings_table.length;
  }

  hb_aat_layout_feature_type_t get_feature_type () const
  { return (hb_aat_layout_feature_type_t) (unsigned int) feature; }

  hb_ot_name_id_t get_feature_name_id () const { return nameIndex; }

  bool is_exclusive () const { return featureFlags & Exclusive; }


  bool has_data () const { return nSettings; }

  bool sanitize (hb_sanitize_context_t *c, const void *base) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret ((__builtin_expect (!!(c->check_struct (this) && (base+settingTableZ).sanitize (c, nSettings)), 1)), __PRETTY_FUNCTION__, 140)
                                                   ;
  }

  protected:
  HBUINT16 feature;
  HBUINT16 nSettings;
  NNOffset32To<UnsizedArrayOf<SettingName>>
  settingTableZ;



  HBUINT16 featureFlags;
  HBINT16 nameIndex;


  public:
  void _instance_assertion_on_line_157 () const { static_assert ((sizeof (*this) == (12)), ""); } unsigned int get_size () const { return (12); } static constexpr unsigned null_size = (12); static constexpr unsigned min_size = (12); static constexpr unsigned static_size = (12);
};

struct feat
{
  static constexpr hb_tag_t tableTag = ((hb_tag_t)((((uint32_t)('f')&0xFF)<<24)|(((uint32_t)('e')&0xFF)<<16)|(((uint32_t)('a')&0xFF)<<8)|((uint32_t)('t')&0xFF)));

  bool has_data () const { return version.to_int (); }

  unsigned int get_feature_types (unsigned int start_offset,
      unsigned int *count,
      hb_aat_layout_feature_type_t *features) const
  {
    if (count)
    {
      + namesZ.as_array (featureNameCount).sub_array (start_offset, count)
      | hb_map (&FeatureName::get_feature_type)
      | hb_sink (hb_array (features, *count))
      ;
    }
    return featureNameCount;
  }

  bool exposes_feature (hb_aat_layout_feature_type_t feature_type) const
  { return get_feature (feature_type).has_data (); }

  const FeatureName& get_feature (hb_aat_layout_feature_type_t feature_type) const
  { return namesZ.bsearch (featureNameCount, feature_type); }

  hb_ot_name_id_t get_feature_name_id (hb_aat_layout_feature_type_t feature) const
  { return get_feature (feature).get_feature_name_id (); }

  unsigned int get_selector_infos (hb_aat_layout_feature_type_t feature_type,
       unsigned int start_offset,
       unsigned int *selectors_count,
       hb_aat_layout_feature_selector_info_t *selectors,
       unsigned int *default_index ) const
  {
    return get_feature (feature_type).get_selector_infos (start_offset, selectors_count, selectors,
         default_index, this);
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret ((__builtin_expect (!!(c->check_struct (this) && version.major == 1 && namesZ.sanitize (c, featureNameCount, this)), 1)), __PRETTY_FUNCTION__, 202)

                                                  ;
  }

  protected:
  FixedVersion<>version;

  HBUINT16 featureNameCount;

  HBUINT16 reserved1;
  HBUINT32 reserved2;
  SortedUnsizedArrayOf<FeatureName>
  namesZ;
  public:
  void _compiles_assertion_on_line_217 () const { (void) (namesZ)[0].static_size; } void _instance_assertion_on_line_217 () const { static_assert ((sizeof (*this) == (12) + (1 +0) * sizeof ((namesZ)[0])), ""); } static constexpr unsigned null_size = (12); static constexpr unsigned min_size = (12);
};

}
# 34 "../harfbuzz-6.0.0/src/hb-aat-layout.cc" 2
# 1 "../harfbuzz-6.0.0/src/hb-aat-layout-just-table.hh" 1
# 26 "../harfbuzz-6.0.0/src/hb-aat-layout-just-table.hh"
#define HB_AAT_LAYOUT_JUST_TABLE_HH 


# 1 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 1
# 30 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
#define HB_OT_LAYOUT_HH 
# 41 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
struct hb_ot_shape_plan_t;






__attribute__((__visibility__("hidden"))) bool
hb_ot_layout_has_kerning (hb_face_t *face);

__attribute__((__visibility__("hidden"))) bool
hb_ot_layout_has_machine_kerning (hb_face_t *face);

__attribute__((__visibility__("hidden"))) bool
hb_ot_layout_has_cross_kerning (hb_face_t *face);

__attribute__((__visibility__("hidden"))) void
hb_ot_layout_kern (const hb_ot_shape_plan_t *plan,
     hb_font_t *font,
     hb_buffer_t *buffer);




__attribute__((__visibility__("hidden"))) bool
hb_ot_layout_table_find_feature (hb_face_t *face,
     hb_tag_t table_tag,
     hb_tag_t feature_tag,
     unsigned int *feature_index);






enum hb_ot_layout_glyph_props_flags_t
{

  HB_OT_LAYOUT_GLYPH_PROPS_BASE_GLYPH = 0x02u,
  HB_OT_LAYOUT_GLYPH_PROPS_LIGATURE = 0x04u,
  HB_OT_LAYOUT_GLYPH_PROPS_MARK = 0x08u,


  HB_OT_LAYOUT_GLYPH_PROPS_SUBSTITUTED = 0x10u,
  HB_OT_LAYOUT_GLYPH_PROPS_LIGATED = 0x20u,
  HB_OT_LAYOUT_GLYPH_PROPS_MULTIPLIED = 0x40u,

  HB_OT_LAYOUT_GLYPH_PROPS_PRESERVE = HB_OT_LAYOUT_GLYPH_PROPS_SUBSTITUTED |
       HB_OT_LAYOUT_GLYPH_PROPS_LIGATED |
       HB_OT_LAYOUT_GLYPH_PROPS_MULTIPLIED
};
extern "C++" { static inline constexpr hb_ot_layout_glyph_props_flags_t operator | (hb_ot_layout_glyph_props_flags_t l, hb_ot_layout_glyph_props_flags_t r) { return hb_ot_layout_glyph_props_flags_t ((unsigned) l | (unsigned) r); } static inline constexpr hb_ot_layout_glyph_props_flags_t operator & (hb_ot_layout_glyph_props_flags_t l, hb_ot_layout_glyph_props_flags_t r) { return hb_ot_layout_glyph_props_flags_t ((unsigned) l & (unsigned) r); } static inline constexpr hb_ot_layout_glyph_props_flags_t operator ^ (hb_ot_layout_glyph_props_flags_t l, hb_ot_layout_glyph_props_flags_t r) { return hb_ot_layout_glyph_props_flags_t ((unsigned) l ^ (unsigned) r); } static inline constexpr unsigned operator ~ (hb_ot_layout_glyph_props_flags_t r) { return (~(unsigned) r); } static inline hb_ot_layout_glyph_props_flags_t& operator |= (hb_ot_layout_glyph_props_flags_t &l, hb_ot_layout_glyph_props_flags_t r) { l = l | r; return l; } static inline hb_ot_layout_glyph_props_flags_t& operator &= (hb_ot_layout_glyph_props_flags_t& l, hb_ot_layout_glyph_props_flags_t r) { l = l & r; return l; } static inline hb_ot_layout_glyph_props_flags_t& operator ^= (hb_ot_layout_glyph_props_flags_t& l, hb_ot_layout_glyph_props_flags_t r) { l = l ^ r; return l; } } static_assert (true, "");
# 101 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
__attribute__((__visibility__("hidden"))) void
hb_ot_layout_substitute_start (hb_font_t *font,
          hb_buffer_t *buffer);

namespace OT {
  struct hb_ot_apply_context_t;
  struct hb_ot_layout_lookup_accelerator_t;
namespace Layout {
namespace GSUB_impl {
  struct SubstLookup;
}
}
}

__attribute__((__visibility__("hidden"))) void
hb_ot_layout_substitute_lookup (OT::hb_ot_apply_context_t *c,
    const OT::Layout::GSUB_impl::SubstLookup &lookup,
    const OT::hb_ot_layout_lookup_accelerator_t &accel);



__attribute__((__visibility__("hidden"))) void
hb_ot_layout_position_start (hb_font_t *font,
        hb_buffer_t *buffer);


__attribute__((__visibility__("hidden"))) void
hb_ot_layout_position_finish_advances (hb_font_t *font,
           hb_buffer_t *buffer);


__attribute__((__visibility__("hidden"))) void
hb_ot_layout_position_finish_offsets (hb_font_t *font,
          hb_buffer_t *buffer);







#define unicode_props() var2.u16[0]


#define glyph_props() var1.u16[0]
#define lig_props() var1.u8[2]
#define syllable() var1.u8[3]



#define foreach_syllable(buffer,start,end) for (unsigned int _count = buffer->len, start = 0, end = _count ? _hb_next_syllable (buffer, 0) : 0; start < _count; start = end, end = _hb_next_syllable (buffer, start))






static inline unsigned int
_hb_next_syllable (hb_buffer_t *buffer, unsigned int start)
{
  hb_glyph_info_t *info = buffer->info;
  unsigned int count = buffer->len;

  unsigned int syllable = info[start].var1.u8[3];
  while (++start < count && syllable == info[start].var1.u8[3])
    ;

  return start;
}
# 191 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
enum hb_unicode_props_flags_t {
  UPROPS_MASK_GEN_CAT = 0x001Fu,
  UPROPS_MASK_IGNORABLE = 0x0020u,
  UPROPS_MASK_HIDDEN = 0x0040u,
  UPROPS_MASK_CONTINUATION=0x0080u,


  UPROPS_MASK_Cf_ZWJ = 0x0100u,
  UPROPS_MASK_Cf_ZWNJ = 0x0200u
};
extern "C++" { static inline constexpr hb_unicode_props_flags_t operator | (hb_unicode_props_flags_t l, hb_unicode_props_flags_t r) { return hb_unicode_props_flags_t ((unsigned) l | (unsigned) r); } static inline constexpr hb_unicode_props_flags_t operator & (hb_unicode_props_flags_t l, hb_unicode_props_flags_t r) { return hb_unicode_props_flags_t ((unsigned) l & (unsigned) r); } static inline constexpr hb_unicode_props_flags_t operator ^ (hb_unicode_props_flags_t l, hb_unicode_props_flags_t r) { return hb_unicode_props_flags_t ((unsigned) l ^ (unsigned) r); } static inline constexpr unsigned operator ~ (hb_unicode_props_flags_t r) { return (~(unsigned) r); } static inline hb_unicode_props_flags_t& operator |= (hb_unicode_props_flags_t &l, hb_unicode_props_flags_t r) { l = l | r; return l; } static inline hb_unicode_props_flags_t& operator &= (hb_unicode_props_flags_t& l, hb_unicode_props_flags_t r) { l = l & r; return l; } static inline hb_unicode_props_flags_t& operator ^= (hb_unicode_props_flags_t& l, hb_unicode_props_flags_t r) { l = l ^ r; return l; } } static_assert (true, "");

static inline void
_hb_glyph_info_set_unicode_props (hb_glyph_info_t *info, hb_buffer_t *buffer)
{
  hb_unicode_funcs_t *unicode = buffer->unicode;
  unsigned int u = info->codepoint;
  unsigned int gen_cat = (unsigned int) unicode->general_category (u);
  unsigned int props = gen_cat;

  if (u >= 0x80u)
  {
    buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_NON_ASCII;

    if ((__builtin_expect (!!(unicode->is_default_ignorable (u)), 0)))
    {
      buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_DEFAULT_IGNORABLES;
      props |= UPROPS_MASK_IGNORABLE;
      if (u == 0x200Cu) props |= UPROPS_MASK_Cf_ZWNJ;
      else if (u == 0x200Du) props |= UPROPS_MASK_Cf_ZWJ;







      else if ((__builtin_expect (!!(hb_in_ranges<hb_codepoint_t> (u, 0x180Bu, 0x180Du, 0x180Fu, 0x180Fu)), 0))) props |= UPROPS_MASK_HIDDEN;


      else if ((__builtin_expect (!!(hb_in_range<hb_codepoint_t> (u, 0xE0020u, 0xE007Fu)), 0))) props |= UPROPS_MASK_HIDDEN;


      else if ((__builtin_expect (!!(u == 0x034Fu), 0)))
      {
 buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_CGJ;
 props |= UPROPS_MASK_HIDDEN;
      }
    }

    if ((__builtin_expect (!!((((unsigned)(gen_cat) < 32 ? (((uint32_t) 1U) << (unsigned)(gen_cat)) : 0) & ((static_assert_expr<(unsigned)(HB_UNICODE_GENERAL_CATEGORY_SPACING_MARK) < 32>::value + (((uint32_t) 1U) << (unsigned)(HB_UNICODE_GENERAL_CATEGORY_SPACING_MARK))) | (static_assert_expr<(unsigned)(HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK) < 32>::value + (((uint32_t) 1U) << (unsigned)(HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK))) | (static_assert_expr<(unsigned)(HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK) < 32>::value + (((uint32_t) 1U) << (unsigned)(HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK)))))), 0)))
    {
      props |= UPROPS_MASK_CONTINUATION;
      props |= unicode->modified_combining_class (u)<<8;
    }
  }

  info->var2.u16[0] = props;
}

static inline void
_hb_glyph_info_set_general_category (hb_glyph_info_t *info,
         hb_unicode_general_category_t gen_cat)
{

  info->var2.u16[0] = (unsigned int) gen_cat | (info->var2.u16[0] & (0xFF & ~UPROPS_MASK_GEN_CAT));
}

static inline hb_unicode_general_category_t
_hb_glyph_info_get_general_category (const hb_glyph_info_t *info)
{
  return (hb_unicode_general_category_t) (info->var2.u16[0] & UPROPS_MASK_GEN_CAT);
}

static inline bool
_hb_glyph_info_is_unicode_mark (const hb_glyph_info_t *info)
{
  return (((unsigned)(info->var2.u16[0] & UPROPS_MASK_GEN_CAT) < 32 ? (((uint32_t) 1U) << (unsigned)(info->var2.u16[0] & UPROPS_MASK_GEN_CAT)) : 0) & ((static_assert_expr<(unsigned)(HB_UNICODE_GENERAL_CATEGORY_SPACING_MARK) < 32>::value + (((uint32_t) 1U) << (unsigned)(HB_UNICODE_GENERAL_CATEGORY_SPACING_MARK))) | (static_assert_expr<(unsigned)(HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK) < 32>::value + (((uint32_t) 1U) << (unsigned)(HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK))) | (static_assert_expr<(unsigned)(HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK) < 32>::value + (((uint32_t) 1U) << (unsigned)(HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK)))));
}
static inline void
_hb_glyph_info_set_modified_combining_class (hb_glyph_info_t *info,
          unsigned int modified_class)
{
  if ((__builtin_expect (!!(!_hb_glyph_info_is_unicode_mark (info)), 0)))
    return;
  info->var2.u16[0] = (modified_class<<8) | (info->var2.u16[0] & 0xFF);
}
static inline unsigned int
_hb_glyph_info_get_modified_combining_class (const hb_glyph_info_t *info)
{
  return _hb_glyph_info_is_unicode_mark (info) ? info->var2.u16[0]>>8 : 0;
}
#define info_cc(info) (_hb_glyph_info_get_modified_combining_class (&(info)))

static inline bool
_hb_glyph_info_is_unicode_space (const hb_glyph_info_t *info)
{
  return _hb_glyph_info_get_general_category (info) ==
  HB_UNICODE_GENERAL_CATEGORY_SPACE_SEPARATOR;
}
static inline void
_hb_glyph_info_set_unicode_space_fallback_type (hb_glyph_info_t *info, hb_unicode_funcs_t::space_t s)
{
  if ((__builtin_expect (!!(!_hb_glyph_info_is_unicode_space (info)), 0)))
    return;
  info->var2.u16[0] = (((unsigned int) s)<<8) | (info->var2.u16[0] & 0xFF);
}
static inline hb_unicode_funcs_t::space_t
_hb_glyph_info_get_unicode_space_fallback_type (const hb_glyph_info_t *info)
{
  return _hb_glyph_info_is_unicode_space (info) ?
  (hb_unicode_funcs_t::space_t) (info->var2.u16[0]>>8) :
  hb_unicode_funcs_t::NOT_SPACE;
}

static inline bool _hb_glyph_info_substituted (const hb_glyph_info_t *info);

static inline bool
_hb_glyph_info_is_default_ignorable (const hb_glyph_info_t *info)
{
  return (info->var2.u16[0] & UPROPS_MASK_IGNORABLE) &&
  !_hb_glyph_info_substituted (info);
}
static inline bool
_hb_glyph_info_is_default_ignorable_and_not_hidden (const hb_glyph_info_t *info)
{
  return ((info->var2.u16[0] & (UPROPS_MASK_IGNORABLE|UPROPS_MASK_HIDDEN))
   == UPROPS_MASK_IGNORABLE) &&
  !_hb_glyph_info_substituted (info);
}
static inline void
_hb_glyph_info_unhide (hb_glyph_info_t *info)
{
  info->var2.u16[0] &= ~ UPROPS_MASK_HIDDEN;
}

static inline void
_hb_glyph_info_set_continuation (hb_glyph_info_t *info)
{
  info->var2.u16[0] |= UPROPS_MASK_CONTINUATION;
}
static inline void
_hb_glyph_info_reset_continuation (hb_glyph_info_t *info)
{
  info->var2.u16[0] &= ~ UPROPS_MASK_CONTINUATION;
}
static inline bool
_hb_glyph_info_is_continuation (const hb_glyph_info_t *info)
{
  return info->var2.u16[0] & UPROPS_MASK_CONTINUATION;
}

static inline bool
_hb_grapheme_group_func (const hb_glyph_info_t& a __attribute__((unused)),
    const hb_glyph_info_t& b)
{ return _hb_glyph_info_is_continuation (&b); }

#define foreach_grapheme(buffer,start,end) foreach_group (buffer, start, end, _hb_grapheme_group_func)


static inline void
_hb_ot_layout_reverse_graphemes (hb_buffer_t *buffer)
{
  buffer->reverse_groups (_hb_grapheme_group_func,
     buffer->cluster_level == HB_BUFFER_CLUSTER_LEVEL_MONOTONE_CHARACTERS);
}

static inline bool
_hb_glyph_info_is_unicode_format (const hb_glyph_info_t *info)
{
  return _hb_glyph_info_get_general_category (info) ==
  HB_UNICODE_GENERAL_CATEGORY_FORMAT;
}
static inline bool
_hb_glyph_info_is_zwnj (const hb_glyph_info_t *info)
{
  return _hb_glyph_info_is_unicode_format (info) && (info->var2.u16[0] & UPROPS_MASK_Cf_ZWNJ);
}
static inline bool
_hb_glyph_info_is_zwj (const hb_glyph_info_t *info)
{
  return _hb_glyph_info_is_unicode_format (info) && (info->var2.u16[0] & UPROPS_MASK_Cf_ZWJ);
}
static inline bool
_hb_glyph_info_is_joiner (const hb_glyph_info_t *info)
{
  return _hb_glyph_info_is_unicode_format (info) && (info->var2.u16[0] & (UPROPS_MASK_Cf_ZWNJ|UPROPS_MASK_Cf_ZWJ));
}
static inline void
_hb_glyph_info_flip_joiners (hb_glyph_info_t *info)
{
  if (!_hb_glyph_info_is_unicode_format (info))
    return;
  info->var2.u16[0] ^= UPROPS_MASK_Cf_ZWNJ | UPROPS_MASK_Cf_ZWJ;
}
# 412 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
static inline void
_hb_glyph_info_clear_lig_props (hb_glyph_info_t *info)
{
  info->var1.u8[2] = 0;
}

#define IS_LIG_BASE 0x10

static inline void
_hb_glyph_info_set_lig_props_for_ligature (hb_glyph_info_t *info,
        unsigned int lig_id,
        unsigned int lig_num_comps)
{
  info->var1.u8[2] = (lig_id << 5) | 0x10 | (lig_num_comps & 0x0F);
}

static inline void
_hb_glyph_info_set_lig_props_for_mark (hb_glyph_info_t *info,
           unsigned int lig_id,
           unsigned int lig_comp)
{
  info->var1.u8[2] = (lig_id << 5) | (lig_comp & 0x0F);
}

static inline void
_hb_glyph_info_set_lig_props_for_component (hb_glyph_info_t *info, unsigned int comp)
{
  _hb_glyph_info_set_lig_props_for_mark (info, 0, comp);
}

static inline unsigned int
_hb_glyph_info_get_lig_id (const hb_glyph_info_t *info)
{
  return info->var1.u8[2] >> 5;
}

static inline bool
_hb_glyph_info_ligated_internal (const hb_glyph_info_t *info)
{
  return !!(info->var1.u8[2] & 0x10);
}

static inline unsigned int
_hb_glyph_info_get_lig_comp (const hb_glyph_info_t *info)
{
  if (_hb_glyph_info_ligated_internal (info))
    return 0;
  else
    return info->var1.u8[2] & 0x0F;
}

static inline unsigned int
_hb_glyph_info_get_lig_num_comps (const hb_glyph_info_t *info)
{
  if ((info->var1.u16[0] & HB_OT_LAYOUT_GLYPH_PROPS_LIGATURE) &&
      _hb_glyph_info_ligated_internal (info))
    return info->var1.u8[2] & 0x0F;
  else
    return 1;
}

static inline uint8_t
_hb_allocate_lig_id (hb_buffer_t *buffer)
{
  uint8_t lig_id = buffer->next_serial () & 0x07;
  if ((__builtin_expect (!!(!lig_id), 0)))
    lig_id = _hb_allocate_lig_id (buffer);
  return lig_id;
}



static inline void
_hb_glyph_info_set_glyph_props (hb_glyph_info_t *info, unsigned int props)
{
  info->var1.u16[0] = props;
}

static inline unsigned int
_hb_glyph_info_get_glyph_props (const hb_glyph_info_t *info)
{
  return info->var1.u16[0];
}

static inline bool
_hb_glyph_info_is_base_glyph (const hb_glyph_info_t *info)
{
  return !!(info->var1.u16[0] & HB_OT_LAYOUT_GLYPH_PROPS_BASE_GLYPH);
}

static inline bool
_hb_glyph_info_is_ligature (const hb_glyph_info_t *info)
{
  return !!(info->var1.u16[0] & HB_OT_LAYOUT_GLYPH_PROPS_LIGATURE);
}

static inline bool
_hb_glyph_info_is_mark (const hb_glyph_info_t *info)
{
  return !!(info->var1.u16[0] & HB_OT_LAYOUT_GLYPH_PROPS_MARK);
}

static inline bool
_hb_glyph_info_substituted (const hb_glyph_info_t *info)
{
  return !!(info->var1.u16[0] & HB_OT_LAYOUT_GLYPH_PROPS_SUBSTITUTED);
}

static inline bool
_hb_glyph_info_ligated (const hb_glyph_info_t *info)
{
  return !!(info->var1.u16[0] & HB_OT_LAYOUT_GLYPH_PROPS_LIGATED);
}

static inline bool
_hb_glyph_info_multiplied (const hb_glyph_info_t *info)
{
  return !!(info->var1.u16[0] & HB_OT_LAYOUT_GLYPH_PROPS_MULTIPLIED);
}

static inline bool
_hb_glyph_info_ligated_and_didnt_multiply (const hb_glyph_info_t *info)
{
  return _hb_glyph_info_ligated (info) && !_hb_glyph_info_multiplied (info);
}

static inline void
_hb_glyph_info_clear_ligated_and_multiplied (hb_glyph_info_t *info)
{
  info->var1.u16[0] &= ~(HB_OT_LAYOUT_GLYPH_PROPS_LIGATED |
      HB_OT_LAYOUT_GLYPH_PROPS_MULTIPLIED);
}

static inline void
_hb_glyph_info_clear_substituted (hb_glyph_info_t *info)
{
  info->var1.u16[0] &= ~(HB_OT_LAYOUT_GLYPH_PROPS_SUBSTITUTED);
}

static inline bool
_hb_clear_substitution_flags (const hb_ot_shape_plan_t *plan __attribute__((unused)),
         hb_font_t *font __attribute__((unused)),
         hb_buffer_t *buffer)
{
  hb_glyph_info_t *info = buffer->info;
  unsigned int count = buffer->len;
  for (unsigned int i = 0; i < count; i++)
    _hb_glyph_info_clear_substituted (&info[i]);
  return false;
}




static inline void
_hb_buffer_allocate_unicode_vars (hb_buffer_t *buffer)
{
  buffer->allocate_var (
# 569 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 __builtin_offsetof (
# 569 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 hb_glyph_info_t
# 569 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 , 
# 569 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 var2.u16[0]
# 569 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 ) 
# 569 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 - 
# 569 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 __builtin_offsetof (
# 569 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 hb_glyph_info_t
# 569 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 , 
# 569 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 var1
# 569 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 )
# 569 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 , sizeof (buffer->info[0].var2.u16[0]));
}

static inline void
_hb_buffer_deallocate_unicode_vars (hb_buffer_t *buffer)
{
  buffer->deallocate_var (
# 575 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 __builtin_offsetof (
# 575 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 hb_glyph_info_t
# 575 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 , 
# 575 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 var2.u16[0]
# 575 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 ) 
# 575 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 - 
# 575 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 __builtin_offsetof (
# 575 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 hb_glyph_info_t
# 575 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 , 
# 575 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 var1
# 575 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 )
# 575 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 , sizeof (buffer->info[0].var2.u16[0]));
}

static inline void
_hb_buffer_assert_unicode_vars (hb_buffer_t *buffer)
{
  buffer->assert_var (
# 581 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 __builtin_offsetof (
# 581 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 hb_glyph_info_t
# 581 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 , 
# 581 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 var2.u16[0]
# 581 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 ) 
# 581 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 - 
# 581 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 __builtin_offsetof (
# 581 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 hb_glyph_info_t
# 581 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 , 
# 581 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 var1
# 581 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 )
# 581 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 , sizeof (buffer->info[0].var2.u16[0]));
}

static inline void
_hb_buffer_allocate_gsubgpos_vars (hb_buffer_t *buffer)
{
  buffer->allocate_var (
# 587 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 __builtin_offsetof (
# 587 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 hb_glyph_info_t
# 587 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 , 
# 587 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 var1.u16[0]
# 587 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 ) 
# 587 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 - 
# 587 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 __builtin_offsetof (
# 587 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 hb_glyph_info_t
# 587 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 , 
# 587 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 var1
# 587 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 )
# 587 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 , sizeof (buffer->info[0].var1.u16[0]));
  buffer->allocate_var (
# 588 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 __builtin_offsetof (
# 588 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 hb_glyph_info_t
# 588 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 , 
# 588 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 var1.u8[2]
# 588 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 ) 
# 588 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 - 
# 588 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 __builtin_offsetof (
# 588 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 hb_glyph_info_t
# 588 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 , 
# 588 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 var1
# 588 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 )
# 588 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 , sizeof (buffer->info[0].var1.u8[2]));
}

static inline void
_hb_buffer_deallocate_gsubgpos_vars (hb_buffer_t *buffer)
{
  buffer->deallocate_var (
# 594 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 __builtin_offsetof (
# 594 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 hb_glyph_info_t
# 594 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 , 
# 594 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 var1.u8[2]
# 594 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 ) 
# 594 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 - 
# 594 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 __builtin_offsetof (
# 594 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 hb_glyph_info_t
# 594 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 , 
# 594 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 var1
# 594 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 )
# 594 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 , sizeof (buffer->info[0].var1.u8[2]));
  buffer->deallocate_var (
# 595 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 __builtin_offsetof (
# 595 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 hb_glyph_info_t
# 595 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 , 
# 595 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 var1.u16[0]
# 595 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 ) 
# 595 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 - 
# 595 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 __builtin_offsetof (
# 595 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 hb_glyph_info_t
# 595 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 , 
# 595 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 var1
# 595 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 )
# 595 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 , sizeof (buffer->info[0].var1.u16[0]));
}

static inline void
_hb_buffer_assert_gsubgpos_vars (hb_buffer_t *buffer)
{
  buffer->assert_var (
# 601 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 __builtin_offsetof (
# 601 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 hb_glyph_info_t
# 601 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 , 
# 601 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 var1.u16[0]
# 601 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 ) 
# 601 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 - 
# 601 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 __builtin_offsetof (
# 601 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 hb_glyph_info_t
# 601 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 , 
# 601 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 var1
# 601 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 )
# 601 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 , sizeof (buffer->info[0].var1.u16[0]));
  buffer->assert_var (
# 602 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 __builtin_offsetof (
# 602 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 hb_glyph_info_t
# 602 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 , 
# 602 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 var1.u8[2]
# 602 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 ) 
# 602 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 - 
# 602 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 __builtin_offsetof (
# 602 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 hb_glyph_info_t
# 602 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 , 
# 602 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 var1
# 602 "../harfbuzz-6.0.0/src/hb-ot-layout.hh" 3 4
 )
# 602 "../harfbuzz-6.0.0/src/hb-ot-layout.hh"
 , sizeof (buffer->info[0].var1.u8[2]));
}


#undef unicode_props0
#undef unicode_props1
#undef lig_props
#undef glyph_props
# 30 "../harfbuzz-6.0.0/src/hb-aat-layout-just-table.hh" 2


# 1 "../harfbuzz-6.0.0/src/hb-aat-layout-morx-table.hh" 1
# 28 "../harfbuzz-6.0.0/src/hb-aat-layout-morx-table.hh"
#define HB_AAT_LAYOUT_MORX_TABLE_HH 



# 1 "../harfbuzz-6.0.0/src/hb-ot-layout-common.hh" 1
# 30 "../harfbuzz-6.0.0/src/hb-ot-layout-common.hh"
#define HB_OT_LAYOUT_COMMON_HH 







# 1 "../harfbuzz-6.0.0/src/OT/Layout/Common/Coverage.hh" 1
# 30 "../harfbuzz-6.0.0/src/OT/Layout/Common/Coverage.hh"
#define OT_LAYOUT_COMMON_COVERAGE_HH 

# 1 "../harfbuzz-6.0.0/src/OT/Layout/Common/../types.hh" 1
# 30 "../harfbuzz-6.0.0/src/OT/Layout/Common/../types.hh"
#define OT_LAYOUT_TYPES_HH 

namespace OT {
namespace Layout {

struct SmallTypes {
  static constexpr unsigned size = 2;
  using large_int = uint32_t;
  using HBUINT = HBUINT16;
  using HBGlyphID = HBGlyphID16;
  using Offset = Offset16;
  template <typename Type, bool has_null=true>
  using OffsetTo = OT::Offset16To<Type, has_null>;
  template <typename Type>
  using ArrayOf = OT::Array16Of<Type>;
  template <typename Type>
  using SortedArrayOf = OT::SortedArray16Of<Type>;
};

struct MediumTypes {
  static constexpr unsigned size = 3;
  using large_int = uint64_t;
  using HBUINT = HBUINT24;
  using HBGlyphID = HBGlyphID24;
  using Offset = Offset24;
  template <typename Type, bool has_null=true>
  using OffsetTo = OT::Offset24To<Type, has_null>;
  template <typename Type>
  using ArrayOf = OT::Array24Of<Type>;
  template <typename Type>
  using SortedArrayOf = OT::SortedArray24Of<Type>;
};

}
}
# 33 "../harfbuzz-6.0.0/src/OT/Layout/Common/Coverage.hh" 2
# 1 "../harfbuzz-6.0.0/src/OT/Layout/Common/CoverageFormat1.hh" 1
# 31 "../harfbuzz-6.0.0/src/OT/Layout/Common/CoverageFormat1.hh"
#define OT_LAYOUT_COMMON_COVERAGEFORMAT1_HH 

namespace OT {
namespace Layout {
namespace Common {

#define NOT_COVERED ((unsigned int) -1)

template <typename Types>
struct CoverageFormat1_3
{
  friend struct Coverage;

  protected:
  HBUINT16 coverageFormat;
  SortedArray16Of<typename Types::HBGlyphID>
                glyphArray;
  public:
  void _compiles_assertion_on_line_49 () const { (void) (glyphArray)[0].static_size; } void _instance_assertion_on_line_49 () const { static_assert ((sizeof (*this) == (4) + (1 +0) * sizeof ((glyphArray)[0])), ""); } static constexpr unsigned null_size = (4); static constexpr unsigned min_size = (4);

  private:
  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (glyphArray.sanitize (c), __PRETTY_FUNCTION__, 55);
  }

  unsigned int get_coverage (hb_codepoint_t glyph_id) const
  {
    unsigned int i;
    glyphArray.bfind (glyph_id, &i, HB_NOT_FOUND_STORE, ((unsigned int) -1));
    return i;
  }

  unsigned get_population () const
  {
    return glyphArray.len;
  }

  template <typename Iterator,
      typename hb_enable_if<(((hb_is_source_of<Iterator, hb_codepoint_t>::value && Iterator::is_sorted_iterator)))>::type* = nullptr>
  bool serialize (hb_serialize_context_t *c, Iterator glyphs)
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (glyphArray.serialize (c, glyphs), __PRETTY_FUNCTION__, 75);
  }

  bool intersects (const hb_set_t *glyphs) const
  {
    if (glyphArray.len > glyphs->get_population () * hb_bit_storage ((unsigned) glyphArray.len) / 2)
    {
      for (hb_codepoint_t g = ((hb_codepoint_t) -1); glyphs->next (&g);)
        if (get_coverage (g) != ((unsigned int) -1))
   return true;
      return false;
    }

    for (const auto& g : glyphArray.as_array ())
      if (glyphs->has (g))
        return true;
    return false;
  }
  bool intersects_coverage (const hb_set_t *glyphs, unsigned int index) const
  { return glyphs->has (glyphArray[index]); }

  template <typename IterableOut,
     typename hb_enable_if<((hb_is_sink_of<IterableOut, hb_codepoint_t>::value))>::type* = nullptr>
  void intersect_set (const hb_set_t &glyphs, IterableOut&& intersect_glyphs) const
  {
    unsigned count = glyphArray.len;
    for (unsigned i = 0; i < count; i++)
      if (glyphs.has (glyphArray[i]))
        intersect_glyphs << glyphArray[i];
  }

  template <typename set_t>
  bool collect_coverage (set_t *glyphs) const
  { return glyphs->add_sorted_array (glyphArray.as_array ()); }

  public:

  struct iter_t
  {
    void init (const struct CoverageFormat1_3 &c_) { c = &c_; i = 0; }
    bool __more__ () const { return i < c->glyphArray.len; }
    void __next__ () { i++; }
    hb_codepoint_t get_glyph () const { return c->glyphArray[i]; }
    bool operator != (const iter_t& o) const
    { return i != o.i; }
    iter_t __end__ () const { iter_t it; it.init (*c); it.i = c->glyphArray.len; return it; }

    private:
    const struct CoverageFormat1_3 *c;
    unsigned int i;
  };
  private:
};

}
}
}
# 34 "../harfbuzz-6.0.0/src/OT/Layout/Common/Coverage.hh" 2
# 1 "../harfbuzz-6.0.0/src/OT/Layout/Common/CoverageFormat2.hh" 1
# 30 "../harfbuzz-6.0.0/src/OT/Layout/Common/CoverageFormat2.hh"
#define OT_LAYOUT_COMMON_COVERAGEFORMAT2_HH 

# 1 "../harfbuzz-6.0.0/src/OT/Layout/Common/RangeRecord.hh" 1
# 30 "../harfbuzz-6.0.0/src/OT/Layout/Common/RangeRecord.hh"
#define OT_LAYOUT_COMMON_RANGERECORD_HH 

namespace OT {
namespace Layout {
namespace Common {

template <typename Types>
struct RangeRecord
{
  typename Types::HBGlyphID first;
  typename Types::HBGlyphID last;
  HBUINT16 value;

  void _instance_assertion_on_line_43 () const { static_assert ((sizeof (*this) == (2 + 2 * Types::size)), ""); } unsigned int get_size () const { return (2 + 2 * Types::size); } static constexpr unsigned null_size = (2 + 2 * Types::size); static constexpr unsigned min_size = (2 + 2 * Types::size); static constexpr unsigned static_size = (2 + 2 * Types::size);

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this), __PRETTY_FUNCTION__, 48);
  }

  int cmp (hb_codepoint_t g) const
  { return g < first ? -1 : g <= last ? 0 : +1; }

  unsigned get_population () const
  {
    if ((__builtin_expect (!!(last < first), 0))) return 0;
    return (last - first + 1);
  }

  bool intersects (const hb_set_t &glyphs) const
  { return glyphs.intersects (first, last); }

  template <typename set_t>
  bool collect_coverage (set_t *glyphs) const
  { return glyphs->add_range (first, last); }
};

}
}
}





extern __attribute__((__visibility__("hidden"))) const unsigned char _hb_Null_OT_RangeRecord[9];
template <typename Spec>
struct Null<OT::Layout::Common::RangeRecord<Spec>> {
  static OT::Layout::Common::RangeRecord<Spec> const & get_null () {
    return *reinterpret_cast<const OT::Layout::Common::RangeRecord<Spec> *> (_hb_Null_OT_RangeRecord);
  }
};
# 33 "../harfbuzz-6.0.0/src/OT/Layout/Common/CoverageFormat2.hh" 2

namespace OT {
namespace Layout {
namespace Common {

template <typename Types>
struct CoverageFormat2_4
{
  friend struct Coverage;

  protected:
  HBUINT16 coverageFormat;
  SortedArray16Of<RangeRecord<Types>>
                rangeRecord;


  public:
  void _compiles_assertion_on_line_50 () const { (void) (rangeRecord)[0].static_size; } void _instance_assertion_on_line_50 () const { static_assert ((sizeof (*this) == (4) + (1 +0) * sizeof ((rangeRecord)[0])), ""); } static constexpr unsigned null_size = (4); static constexpr unsigned min_size = (4);

  private:

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (rangeRecord.sanitize (c), __PRETTY_FUNCTION__, 57);
  }

  unsigned int get_coverage (hb_codepoint_t glyph_id) const
  {
    const RangeRecord<Types> &range = rangeRecord.bsearch (glyph_id);
    return (__builtin_expect (!!(range.first <= range.last), 1))
         ? (unsigned int) range.value + (glyph_id - range.first)
         : ((unsigned int) -1);
  }

  unsigned get_population () const
  {
    typename Types::large_int ret = 0;
    for (const auto &r : rangeRecord)
      ret += r.get_population ();
    return ret > 
# 73 "../harfbuzz-6.0.0/src/OT/Layout/Common/CoverageFormat2.hh" 3 4
                (0x7fffffff * 2U + 1U) 
# 73 "../harfbuzz-6.0.0/src/OT/Layout/Common/CoverageFormat2.hh"
                         ? 
# 73 "../harfbuzz-6.0.0/src/OT/Layout/Common/CoverageFormat2.hh" 3 4
                           (0x7fffffff * 2U + 1U) 
# 73 "../harfbuzz-6.0.0/src/OT/Layout/Common/CoverageFormat2.hh"
                                    : (unsigned) ret;
  }

  template <typename Iterator,
      typename hb_enable_if<(((hb_is_source_of<Iterator, hb_codepoint_t>::value && Iterator::is_sorted_iterator)))>::type* = nullptr>
  bool serialize (hb_serialize_context_t *c, Iterator glyphs)
  {
    hb_no_trace_t<bool> trace;
    if ((__builtin_expect (!!(!c->extend_min (this)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 81);

    unsigned num_ranges = 0;
    hb_codepoint_t last = (hb_codepoint_t) -2;
    for (auto g: glyphs)
    {
      if (last + 1 != g)
        num_ranges++;
      last = g;
    }

    if ((__builtin_expect (!!(!rangeRecord.serialize (c, num_ranges)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 92);
    if (!num_ranges) return trace.ret (true, __PRETTY_FUNCTION__, 93);

    unsigned count = 0;
    unsigned range = (unsigned) -1;
    last = (hb_codepoint_t) -2;
    for (auto g: glyphs)
    {
      if (last + 1 != g)
      {
        range++;
        rangeRecord[range].first = g;
        rangeRecord[range].value = count;
      }
      rangeRecord[range].last = g;
      last = g;
      count++;
    }

    return trace.ret (true, __PRETTY_FUNCTION__, 111);
  }

  bool intersects (const hb_set_t *glyphs) const
  {
    if (rangeRecord.len > glyphs->get_population () * hb_bit_storage ((unsigned) rangeRecord.len) / 2)
    {
      for (hb_codepoint_t g = ((hb_codepoint_t) -1); glyphs->next (&g);)
        if (get_coverage (g) != ((unsigned int) -1))
   return true;
      return false;
    }

    return hb_any (+ hb_iter (rangeRecord)
                   | hb_map ([glyphs] (const RangeRecord<Types> &range) { return range.intersects (*glyphs); }));
  }
  bool intersects_coverage (const hb_set_t *glyphs, unsigned int index) const
  {
    auto *range = rangeRecord.as_array ().bsearch (index);
    if (range)
      return range->intersects (*glyphs);
    return false;
  }

  template <typename IterableOut,
     typename hb_enable_if<((hb_is_sink_of<IterableOut, hb_codepoint_t>::value))>::type* = nullptr>
  void intersect_set (const hb_set_t &glyphs, IterableOut&& intersect_glyphs) const
  {


    hb_codepoint_t last = 0;
    for (const auto& range : rangeRecord)
    {
      if ((__builtin_expect (!!(range.first < last), 0)))
        break;
      last = range.last;
      for (hb_codepoint_t g = range.first - 1;
    glyphs.next (&g) && g <= last;)
 intersect_glyphs << g;
    }
  }

  template <typename set_t>
  bool collect_coverage (set_t *glyphs) const
  {
    for (const auto& range: rangeRecord)
      if ((__builtin_expect (!!(!range.collect_coverage (glyphs)), 0)))
        return false;
    return true;
  }

  public:

  struct iter_t
  {
    void init (const CoverageFormat2_4 &c_)
    {
      c = &c_;
      coverage = 0;
      i = 0;
      j = c->rangeRecord.len ? c->rangeRecord[0].first : 0;
      if ((__builtin_expect (!!(c->rangeRecord[0].first > c->rangeRecord[0].last), 0)))
      {

        i = c->rangeRecord.len;
        j = 0;
      }
    }
    bool __more__ () const { return i < c->rangeRecord.len; }
    void __next__ ()
    {
      if (j >= c->rangeRecord[i].last)
      {
        i++;
        if (__more__ ())
        {
          unsigned int old = coverage;
          j = c->rangeRecord[i].first;
          coverage = c->rangeRecord[i].value;
          if ((__builtin_expect (!!(coverage != old + 1), 0)))
          {




           i = c->rangeRecord.len;
           j = 0;
           return;
          }
        }
        else
          j = 0;
        return;
      }
      coverage++;
      j++;
    }
    hb_codepoint_t get_glyph () const { return j; }
    bool operator != (const iter_t& o) const
    { return i != o.i || j != o.j; }
    iter_t __end__ () const
    {
      iter_t it;
      it.init (*c);
      it.i = c->rangeRecord.len;
      it.j = 0;
      return it;
    }

    private:
    const struct CoverageFormat2_4 *c;
    unsigned int i, coverage;
    hb_codepoint_t j;
  };
  private:
};

}
}
}
# 35 "../harfbuzz-6.0.0/src/OT/Layout/Common/Coverage.hh" 2

namespace OT {
namespace Layout {
namespace Common {

template<typename Iterator>
static inline void Coverage_serialize (hb_serialize_context_t *c,
                                       Iterator it);

struct Coverage
{

  protected:
  union {
  HBUINT16 format;
  CoverageFormat1_3<SmallTypes> format1;
  CoverageFormat2_4<SmallTypes> format2;




  } u;
  public:
  void _compiles_assertion_on_line_58 () const { (void) this->u.format.static_size; } void _instance_assertion_on_line_58 () const { static_assert ((sizeof(this->u.format) == (2)), ""); } static constexpr unsigned null_size = (2); static constexpr unsigned min_size = (2);

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    if (!u.format.sanitize (c)) return trace.ret (false, __PRETTY_FUNCTION__, 63);
    switch (u.format)
    {
    case 1: return trace.ret (u.format1.sanitize (c), __PRETTY_FUNCTION__, 66);
    case 2: return trace.ret (u.format2.sanitize (c), __PRETTY_FUNCTION__, 67);




    default:return trace.ret (true, __PRETTY_FUNCTION__, 72);
    }
  }


  unsigned operator [] (hb_codepoint_t k) const { return get (k); }
  bool has (hb_codepoint_t k) const { return (*this)[k] != ((unsigned int) -1); }

  bool operator () (hb_codepoint_t k) const { return has (k); }

  unsigned int get (hb_codepoint_t k) const { return get_coverage (k); }
  unsigned int get_coverage (hb_codepoint_t glyph_id) const
  {
    switch (u.format) {
    case 1: return u.format1.get_coverage (glyph_id);
    case 2: return u.format2.get_coverage (glyph_id);




    default:return ((unsigned int) -1);
    }
  }

  unsigned get_population () const
  {
    switch (u.format) {
    case 1: return u.format1.get_population ();
    case 2: return u.format2.get_population ();




    default:return ((unsigned int) -1);
    }
  }

  template <typename Iterator,
      typename hb_enable_if<(((hb_is_source_of<Iterator, hb_codepoint_t>::value && Iterator::is_sorted_iterator)))>::type* = nullptr>
  bool serialize (hb_serialize_context_t *c, Iterator glyphs)
  {
    hb_no_trace_t<bool> trace;
    if ((__builtin_expect (!!(!c->extend_min (this)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 114);

    unsigned count = 0;
    unsigned num_ranges = 0;
    hb_codepoint_t last = (hb_codepoint_t) -2;
    for (auto g: glyphs)
    {
      if (last + 1 != g)
        num_ranges++;
      last = g;
      count++;
    }
    u.format = count <= num_ranges * 3 ? 1 : 2;






    switch (u.format)
    {
    case 1: return trace.ret (u.format1.serialize (c, glyphs), __PRETTY_FUNCTION__, 135);
    case 2: return trace.ret (u.format2.serialize (c, glyphs), __PRETTY_FUNCTION__, 136);




    default:return trace.ret (false, __PRETTY_FUNCTION__, 141);
    }
  }

  bool subset (hb_subset_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    auto it =
    + iter ()
    | hb_take (c->plan->source->get_num_glyphs ())
    | hb_filter (c->plan->glyph_map_gsub)
    | hb_map_retains_sorting (c->plan->glyph_map_gsub)
    ;



    hb_sorted_vector_t<hb_codepoint_t> glyphs (it);
    Coverage_serialize (c->serializer, glyphs.iter ());
    return trace.ret (bool (glyphs), __PRETTY_FUNCTION__, 159);
  }

  bool intersects (const hb_set_t *glyphs) const
  {
    switch (u.format)
    {
    case 1: return u.format1.intersects (glyphs);
    case 2: return u.format2.intersects (glyphs);




    default:return false;
    }
  }
  bool intersects_coverage (const hb_set_t *glyphs, unsigned int index) const
  {
    switch (u.format)
    {
    case 1: return u.format1.intersects_coverage (glyphs, index);
    case 2: return u.format2.intersects_coverage (glyphs, index);




    default:return false;
    }
  }



  template <typename set_t>
  bool collect_coverage (set_t *glyphs) const
  {
    switch (u.format)
    {
    case 1: return u.format1.collect_coverage (glyphs);
    case 2: return u.format2.collect_coverage (glyphs);




    default:return false;
    }
  }

  template <typename IterableOut,
     typename hb_enable_if<((hb_is_sink_of<IterableOut, hb_codepoint_t>::value))>::type* = nullptr>
  void intersect_set (const hb_set_t &glyphs, IterableOut&& intersect_glyphs) const
  {
    switch (u.format)
    {
    case 1: return u.format1.intersect_set (glyphs, intersect_glyphs);
    case 2: return u.format2.intersect_set (glyphs, intersect_glyphs);




    default:return ;
    }
  }

  struct iter_t : hb_iter_with_fallback_t<iter_t, hb_codepoint_t>
  {
    static constexpr bool is_sorted_iterator = true;
    iter_t (const Coverage &c_ = NullHelper<Coverage>::get_null ())
    {
      hb_memset (this, 0, sizeof (*this));
      format = c_.u.format;
      switch (format)
      {
      case 1: u.format1.init (c_.u.format1); return;
      case 2: u.format2.init (c_.u.format2); return;




      default: return;
      }
    }
    bool __more__ () const
    {
      switch (format)
      {
      case 1: return u.format1.__more__ ();
      case 2: return u.format2.__more__ ();




      default:return false;
      }
    }
    void __next__ ()
    {
      switch (format)
      {
      case 1: u.format1.__next__ (); break;
      case 2: u.format2.__next__ (); break;




      default: break;
      }
    }
    typedef hb_codepoint_t __item_t__;
    __item_t__ __item__ () const { return get_glyph (); }

    hb_codepoint_t get_glyph () const
    {
      switch (format)
      {
      case 1: return u.format1.get_glyph ();
      case 2: return u.format2.get_glyph ();




      default:return 0;
      }
    }
    bool operator != (const iter_t& o) const
    {
      if ((__builtin_expect (!!(format != o.format), 0))) return true;
      switch (format)
      {
      case 1: return u.format1 != o.u.format1;
      case 2: return u.format2 != o.u.format2;




      default:return false;
      }
    }
    iter_t __end__ () const
    {
      iter_t it = {};
      it.format = format;
      switch (format)
      {
      case 1: it.u.format1 = u.format1.__end__ (); break;
      case 2: it.u.format2 = u.format2.__end__ (); break;




      default: break;
      }
      return it;
    }

    private:
    unsigned int format;
    union {




    CoverageFormat2_4<SmallTypes>::iter_t format2;
    CoverageFormat1_3<SmallTypes>::iter_t format1;
    } u;
  };
  iter_t iter () const { return iter_t (*this); }
};

template<typename Iterator>
static inline void
Coverage_serialize (hb_serialize_context_t *c,
                    Iterator it)
{ c->start_embed<Coverage> ()->serialize (c, it); }

}
}
}
# 39 "../harfbuzz-6.0.0/src/hb-ot-layout-common.hh" 2
# 1 "../harfbuzz-6.0.0/src/OT/Layout/types.hh" 1
# 40 "../harfbuzz-6.0.0/src/hb-ot-layout-common.hh" 2


using OT::Layout::Common::Coverage;
using OT::Layout::Common::RangeRecord;
using OT::Layout::SmallTypes;
using OT::Layout::MediumTypes;


namespace OT {

template<typename Iterator>
static inline bool ClassDef_serialize (hb_serialize_context_t *c,
           Iterator it);

static bool ClassDef_remap_and_serialize (
    hb_serialize_context_t *c,
    const hb_set_t &klasses,
    bool use_class_zero,
    hb_sorted_vector_t<hb_pair_t<hb_codepoint_t, hb_codepoint_t>> &glyph_and_klass,
    hb_map_t *klass_map );

struct hb_collect_feature_substitutes_with_var_context_t
{
  const hb_map_t *axes_index_tag_map;
  const hb_hashmap_t<hb_tag_t, int> *axes_location;
  hb_hashmap_t<unsigned, hb::shared_ptr<hb_set_t>> *record_cond_idx_map;
  hb_hashmap_t<unsigned, const Feature*> *feature_substitutes_map;


  hb_set_t *feature_indices;
  bool apply;
  unsigned cur_record_idx;
  hb_hashmap_t<hb::shared_ptr<hb_map_t>, unsigned> *conditionset_map;
};

struct hb_prune_langsys_context_t
{
  hb_prune_langsys_context_t (const void *table_,
                              hb_hashmap_t<unsigned, hb::unique_ptr<hb_set_t>> *script_langsys_map_,
                              const hb_map_t *duplicate_feature_map_,
                              hb_set_t *new_collected_feature_indexes_)
      :table (table_),
      script_langsys_map (script_langsys_map_),
      duplicate_feature_map (duplicate_feature_map_),
      new_feature_indexes (new_collected_feature_indexes_),
      script_count (0),langsys_feature_count (0) {}

  bool visitScript ()
  { return script_count++ < 500; }

  bool visitLangsys (unsigned feature_count)
  {
    langsys_feature_count += feature_count;
    return langsys_feature_count < 50000;
  }

  public:
  const void *table;
  hb_hashmap_t<unsigned, hb::unique_ptr<hb_set_t>> *script_langsys_map;
  const hb_map_t *duplicate_feature_map;
  hb_set_t *new_feature_indexes;

  private:
  unsigned script_count;
  unsigned langsys_feature_count;
};

struct hb_subset_layout_context_t :
  hb_dispatch_context_t<hb_subset_layout_context_t, hb_empty_t, (0 +0)>
{
  const char *get_name () { return "SUBSET_LAYOUT"; }
  static return_t default_return_value () { return hb_empty_t (); }

  bool visitScript ()
  {
    return script_count++ < 500;
  }

  bool visitLangSys ()
  {
    return langsys_count++ < 2000;
  }

  bool visitFeatureIndex (int count)
  {
    feature_index_count += count;
    return feature_index_count < 1500;
  }

  bool visitLookupIndex()
  {
    lookup_index_count++;
    return lookup_index_count < 35000;
  }

  hb_subset_context_t *subset_context;
  const hb_tag_t table_tag;
  const hb_map_t *lookup_index_map;
  const hb_hashmap_t<unsigned, hb::unique_ptr<hb_set_t>> *script_langsys_map;
  const hb_map_t *feature_index_map;
  const hb_hashmap_t<unsigned, const Feature*> *feature_substitutes_map;
  hb_hashmap_t<unsigned, hb::shared_ptr<hb_set_t>> *feature_record_cond_idx_map;

  unsigned cur_script_index;
  unsigned cur_feature_var_record_idx;

  hb_subset_layout_context_t (hb_subset_context_t *c_,
         hb_tag_t tag_) :
    subset_context (c_),
    table_tag (tag_),
    cur_script_index (0xFFFFu),
    cur_feature_var_record_idx (0u),
    script_count (0),
    langsys_count (0),
    feature_index_count (0),
    lookup_index_count (0)
  {
    if (tag_ == ((hb_tag_t)((((uint32_t)('G')&0xFF)<<24)|(((uint32_t)('S')&0xFF)<<16)|(((uint32_t)('U')&0xFF)<<8)|((uint32_t)('B')&0xFF))))
    {
      lookup_index_map = &c_->plan->gsub_lookups;
      script_langsys_map = &c_->plan->gsub_langsys;
      feature_index_map = &c_->plan->gsub_features;
      feature_substitutes_map = &c_->plan->gsub_feature_substitutes_map;
      feature_record_cond_idx_map = c_->plan->user_axes_location.is_empty () ? nullptr : &c_->plan->gsub_feature_record_cond_idx_map;
    }
    else
    {
      lookup_index_map = &c_->plan->gpos_lookups;
      script_langsys_map = &c_->plan->gpos_langsys;
      feature_index_map = &c_->plan->gpos_features;
      feature_substitutes_map = &c_->plan->gpos_feature_substitutes_map;
      feature_record_cond_idx_map = c_->plan->user_axes_location.is_empty () ? nullptr : &c_->plan->gpos_feature_record_cond_idx_map;
    }
  }

  private:
  unsigned script_count;
  unsigned langsys_count;
  unsigned feature_index_count;
  unsigned lookup_index_count;
};

struct VariationStore;
struct hb_collect_variation_indices_context_t :
       hb_dispatch_context_t<hb_collect_variation_indices_context_t>
{
  template <typename T>
  return_t dispatch (const T &obj) { obj.collect_variation_indices (this); return hb_empty_t (); }
  static return_t default_return_value () { return hb_empty_t (); }

  hb_set_t *layout_variation_indices;
  hb_hashmap_t<unsigned, hb_pair_t<unsigned, int>> *varidx_delta_map;
  hb_font_t *font;
  const VariationStore *var_store;
  const hb_set_t *glyph_set;
  const hb_map_t *gpos_lookups;
  float *store_cache;

  hb_collect_variation_indices_context_t (hb_set_t *layout_variation_indices_,
       hb_hashmap_t<unsigned, hb_pair_t<unsigned, int>> *varidx_delta_map_,
       hb_font_t *font_,
       const VariationStore *var_store_,
       const hb_set_t *glyph_set_,
       const hb_map_t *gpos_lookups_,
       float *store_cache_) :
     layout_variation_indices (layout_variation_indices_),
     varidx_delta_map (varidx_delta_map_),
     font (font_),
     var_store (var_store_),
     glyph_set (glyph_set_),
     gpos_lookups (gpos_lookups_),
     store_cache (store_cache_) {}
};

template<typename OutputArray>
struct subset_offset_array_t
{
  subset_offset_array_t (hb_subset_context_t *subset_context_,
    OutputArray& out_,
    const void *base_) : subset_context (subset_context_),
           out (out_), base (base_) {}

  template <typename T>
  bool operator () (T&& offset)
  {
    auto snap = subset_context->serializer->snapshot ();
    auto *o = out.serialize_append (subset_context->serializer);
    if ((__builtin_expect (!!(!o), 0))) return false;
    bool ret = o->serialize_subset (subset_context, offset, base);
    if (!ret)
    {
      out.pop ();
      subset_context->serializer->revert (snap);
    }
    return ret;
  }

  private:
  hb_subset_context_t *subset_context;
  OutputArray &out;
  const void *base;
};


template<typename OutputArray, typename Arg>
struct subset_offset_array_arg_t
{
  subset_offset_array_arg_t (hb_subset_context_t *subset_context_,
        OutputArray& out_,
        const void *base_,
        Arg &&arg_) : subset_context (subset_context_), out (out_),
       base (base_), arg (arg_) {}

  template <typename T>
  bool operator () (T&& offset)
  {
    auto snap = subset_context->serializer->snapshot ();
    auto *o = out.serialize_append (subset_context->serializer);
    if ((__builtin_expect (!!(!o), 0))) return false;
    bool ret = o->serialize_subset (subset_context, offset, base, arg);
    if (!ret)
    {
      out.pop ();
      subset_context->serializer->revert (snap);
    }
    return ret;
  }

  private:
  hb_subset_context_t *subset_context;
  OutputArray &out;
  const void *base;
  Arg &&arg;
};






struct
{
  template<typename OutputArray>
  subset_offset_array_t<OutputArray>
  operator () (hb_subset_context_t *subset_context, OutputArray& out,
        const void *base) const
  { return subset_offset_array_t<OutputArray> (subset_context, out, base); }


  template<typename OutputArray, typename Arg>
  subset_offset_array_arg_t<OutputArray, Arg>
  operator () (hb_subset_context_t *subset_context, OutputArray& out,
        const void *base, Arg &&arg) const
  { return subset_offset_array_arg_t<OutputArray, Arg> (subset_context, out, base, arg); }
}
static const subset_offset_array __attribute__((unused));

template<typename OutputArray>
struct subset_record_array_t
{
  subset_record_array_t (hb_subset_layout_context_t *c_, OutputArray* out_,
    const void *base_) : subset_layout_context (c_),
           out (out_), base (base_) {}

  template <typename T>
  void
  operator () (T&& record)
  {
    auto snap = subset_layout_context->subset_context->serializer->snapshot ();
    bool ret = record.subset (subset_layout_context, base);
    if (!ret) subset_layout_context->subset_context->serializer->revert (snap);
    else out->len++;
  }

  private:
  hb_subset_layout_context_t *subset_layout_context;
  OutputArray *out;
  const void *base;
};

template<typename OutputArray, typename Arg>
struct subset_record_array_arg_t
{
  subset_record_array_arg_t (hb_subset_layout_context_t *c_, OutputArray* out_,
        const void *base_,
        Arg &&arg_) : subset_layout_context (c_),
        out (out_), base (base_), arg (arg_) {}

  template <typename T>
  void
  operator () (T&& record)
  {
    auto snap = subset_layout_context->subset_context->serializer->snapshot ();
    bool ret = record.subset (subset_layout_context, base, arg);
    if (!ret) subset_layout_context->subset_context->serializer->revert (snap);
    else out->len++;
  }

  private:
  hb_subset_layout_context_t *subset_layout_context;
  OutputArray *out;
  const void *base;
  Arg &&arg;
};





struct
{
  template<typename OutputArray>
  subset_record_array_t<OutputArray>
  operator () (hb_subset_layout_context_t *c, OutputArray* out,
        const void *base) const
  { return subset_record_array_t<OutputArray> (c, out, base); }


  template<typename OutputArray, typename Arg>
  subset_record_array_arg_t<OutputArray, Arg>
  operator () (hb_subset_layout_context_t *c, OutputArray* out,
               const void *base, Arg &&arg) const
  { return subset_record_array_arg_t<OutputArray, Arg> (c, out, base, arg); }
}
static const subset_record_array __attribute__((unused));


template<typename OutputArray>
struct serialize_math_record_array_t
{
  serialize_math_record_array_t (hb_serialize_context_t *serialize_context_,
                         OutputArray& out_,
                         const void *base_) : serialize_context (serialize_context_),
                                              out (out_), base (base_) {}

  template <typename T>
  bool operator () (T&& record)
  {
    if (!serialize_context->copy (record, base)) return false;
    out.len++;
    return true;
  }

  private:
  hb_serialize_context_t *serialize_context;
  OutputArray &out;
  const void *base;
};




struct
{
  template<typename OutputArray>
  serialize_math_record_array_t<OutputArray>
  operator () (hb_serialize_context_t *serialize_context, OutputArray& out,
               const void *base) const
  { return serialize_math_record_array_t<OutputArray> (serialize_context, out, base); }

}
static const serialize_math_record_array __attribute__((unused));
# 414 "../harfbuzz-6.0.0/src/hb-ot-layout-common.hh"
struct IndexArray : Array16Of<Index>
{
  bool intersects (const hb_map_t *indexes) const
  { return hb_any (*this, indexes); }

  template <typename Iterator,
     typename hb_enable_if<((hb_is_iterator_of<Iterator, typename Iterator::item_t>::value))>::type* = nullptr>
  void serialize (hb_serialize_context_t *c,
    hb_subset_layout_context_t *l,
    Iterator it)
  {
    if (!it) return;
    if ((__builtin_expect (!!(!c->extend_min ((*this))), 0))) return;

    for (const auto _ : it)
    {
      if (!l->visitLookupIndex()) break;

      Index i;
      i = _;
      c->copy (i);
      this->len++;
    }
  }

  unsigned int get_indexes (unsigned int start_offset,
       unsigned int *_count ,
       unsigned int *_indexes ) const
  {
    if (_count)
    {
      + this->as_array ().sub_array (start_offset, _count)
      | hb_sink (hb_array (_indexes, *_count))
      ;
    }
    return this->len;
  }

  void add_indexes_to (hb_set_t* output ) const
  {
    output->add_array (as_array ());
  }
};



struct FeatureParamsSize
{
  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    if ((__builtin_expect (!!(!c->check_struct (this)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 465);
# 516 "../harfbuzz-6.0.0/src/hb-ot-layout-common.hh"
    if (!designSize)
      return trace.ret (false, __PRETTY_FUNCTION__, 517);
    else if (subfamilyID == 0 &&
      subfamilyNameID == 0 &&
      rangeStart == 0 &&
      rangeEnd == 0)
      return trace.ret (true, __PRETTY_FUNCTION__, 522);
    else if (designSize < rangeStart ||
      designSize > rangeEnd ||
      subfamilyNameID < 256 ||
      subfamilyNameID > 32767)
      return trace.ret (false, __PRETTY_FUNCTION__, 527);
    else
      return trace.ret (true, __PRETTY_FUNCTION__, 529);
  }

  bool subset (hb_subset_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret ((bool) c->serializer->embed (*this), __PRETTY_FUNCTION__, 535);
  }

  HBUINT16 designSize;




  HBUINT16 subfamilyID;
# 553 "../harfbuzz-6.0.0/src/hb-ot-layout-common.hh"
  NameID subfamilyNameID;
# 567 "../harfbuzz-6.0.0/src/hb-ot-layout-common.hh"
  HBUINT16 rangeStart;


  HBUINT16 rangeEnd;


  public:
  void _instance_assertion_on_line_574 () const { static_assert ((sizeof (*this) == (10)), ""); } unsigned int get_size () const { return (10); } static constexpr unsigned null_size = (10); static constexpr unsigned min_size = (10); static constexpr unsigned static_size = (10);
};


struct FeatureParamsStylisticSet
{
  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;


    return trace.ret (c->check_struct (this), __PRETTY_FUNCTION__, 585);
  }

  bool subset (hb_subset_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret ((bool) c->serializer->embed (*this), __PRETTY_FUNCTION__, 591);
  }

  HBUINT16 version;




  NameID uiNameID;
# 613 "../harfbuzz-6.0.0/src/hb-ot-layout-common.hh"
  public:
  void _instance_assertion_on_line_614 () const { static_assert ((sizeof (*this) == (4)), ""); } unsigned int get_size () const { return (4); } static constexpr unsigned null_size = (4); static constexpr unsigned min_size = (4); static constexpr unsigned static_size = (4);
};


struct FeatureParamsCharacterVariants
{
  unsigned
  get_characters (unsigned start_offset, unsigned *char_count, hb_codepoint_t *chars) const
  {
    if (char_count)
    {
      + characters.as_array ().sub_array (start_offset, char_count)
      | hb_sink (hb_array (chars, *char_count))
      ;
    }
    return characters.len;
  }

  unsigned get_size () const
  { return min_size + characters.len * HBUINT24::static_size; }

  bool subset (hb_subset_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret ((bool) c->serializer->embed (*this), __PRETTY_FUNCTION__, 638);
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this) && characters.sanitize (c), __PRETTY_FUNCTION__, 644)
                            ;
  }

  HBUINT16 format;
  NameID featUILableNameID;




  NameID featUITooltipTextNameID;





  NameID sampleTextNameID;



  HBUINT16 numNamedParameters;

  NameID firstParamUILabelNameID;




  Array16Of<HBUINT24>
  characters;



  public:
  void _compiles_assertion_on_line_677 () const { (void) (characters)[0].static_size; } void _instance_assertion_on_line_677 () const { static_assert ((sizeof (*this) == (14) + (1 +0) * sizeof ((characters)[0])), ""); } static constexpr unsigned null_size = (14); static constexpr unsigned min_size = (14);
};

struct FeatureParams
{
  bool sanitize (hb_sanitize_context_t *c, hb_tag_t tag) const
  {



    hb_no_trace_t<bool> trace;
    if (tag == ((hb_tag_t)((((uint32_t)('s')&0xFF)<<24)|(((uint32_t)('i')&0xFF)<<16)|(((uint32_t)('z')&0xFF)<<8)|((uint32_t)('e')&0xFF))))
      return trace.ret (u.size.sanitize (c), __PRETTY_FUNCTION__, 689);
    if ((tag & 0xFFFF0000u) == ((hb_tag_t)((((uint32_t)('s')&0xFF)<<24)|(((uint32_t)('s')&0xFF)<<16)|(((uint32_t)('\0')&0xFF)<<8)|((uint32_t)('\0')&0xFF))))
      return trace.ret (u.stylisticSet.sanitize (c), __PRETTY_FUNCTION__, 691);
    if ((tag & 0xFFFF0000u) == ((hb_tag_t)((((uint32_t)('c')&0xFF)<<24)|(((uint32_t)('v')&0xFF)<<16)|(((uint32_t)('\0')&0xFF)<<8)|((uint32_t)('\0')&0xFF))))
      return trace.ret (u.characterVariants.sanitize (c), __PRETTY_FUNCTION__, 693);
    return trace.ret (true, __PRETTY_FUNCTION__, 694);
  }

  bool subset (hb_subset_context_t *c, const Tag* tag) const
  {
    hb_no_trace_t<bool> trace;
    if (!tag) return trace.ret (false, __PRETTY_FUNCTION__, 700);
    if (*tag == ((hb_tag_t)((((uint32_t)('s')&0xFF)<<24)|(((uint32_t)('i')&0xFF)<<16)|(((uint32_t)('z')&0xFF)<<8)|((uint32_t)('e')&0xFF))))
      return trace.ret (u.size.subset (c), __PRETTY_FUNCTION__, 702);
    if ((*tag & 0xFFFF0000u) == ((hb_tag_t)((((uint32_t)('s')&0xFF)<<24)|(((uint32_t)('s')&0xFF)<<16)|(((uint32_t)('\0')&0xFF)<<8)|((uint32_t)('\0')&0xFF))))
      return trace.ret (u.stylisticSet.subset (c), __PRETTY_FUNCTION__, 704);
    if ((*tag & 0xFFFF0000u) == ((hb_tag_t)((((uint32_t)('c')&0xFF)<<24)|(((uint32_t)('v')&0xFF)<<16)|(((uint32_t)('\0')&0xFF)<<8)|((uint32_t)('\0')&0xFF))))
      return trace.ret (u.characterVariants.subset (c), __PRETTY_FUNCTION__, 706);
    return trace.ret (false, __PRETTY_FUNCTION__, 707);
  }


  const FeatureParamsSize& get_size_params (hb_tag_t tag) const
  {
    if (tag == ((hb_tag_t)((((uint32_t)('s')&0xFF)<<24)|(((uint32_t)('i')&0xFF)<<16)|(((uint32_t)('z')&0xFF)<<8)|((uint32_t)('e')&0xFF))))
      return u.size;
    return NullHelper<FeatureParamsSize>::get_null ();
  }
  const FeatureParamsStylisticSet& get_stylistic_set_params (hb_tag_t tag) const
  {
    if ((tag & 0xFFFF0000u) == ((hb_tag_t)((((uint32_t)('s')&0xFF)<<24)|(((uint32_t)('s')&0xFF)<<16)|(((uint32_t)('\0')&0xFF)<<8)|((uint32_t)('\0')&0xFF))))
      return u.stylisticSet;
    return NullHelper<FeatureParamsStylisticSet>::get_null ();
  }
  const FeatureParamsCharacterVariants& get_character_variants_params (hb_tag_t tag) const
  {
    if ((tag & 0xFFFF0000u) == ((hb_tag_t)((((uint32_t)('c')&0xFF)<<24)|(((uint32_t)('v')&0xFF)<<16)|(((uint32_t)('\0')&0xFF)<<8)|((uint32_t)('\0')&0xFF))))
      return u.characterVariants;
    return NullHelper<FeatureParamsCharacterVariants>::get_null ();
  }


  private:
  union {
  FeatureParamsSize size;
  FeatureParamsStylisticSet stylisticSet;
  FeatureParamsCharacterVariants characterVariants;
  } u;
  public:
  void _instance_assertion_on_line_738 () const { static_assert ((sizeof (*this) >= (0)), ""); } static constexpr unsigned null_size = (0); static constexpr unsigned min_size = (0);
};

struct Record_sanitize_closure_t {
  hb_tag_t tag;
  const void *list_base;
};

struct Feature
{
  unsigned int get_lookup_count () const
  { return lookupIndex.len; }
  hb_tag_t get_lookup_index (unsigned int i) const
  { return lookupIndex[i]; }
  unsigned int get_lookup_indexes (unsigned int start_index,
       unsigned int *lookup_count ,
       unsigned int *lookup_tags ) const
  { return lookupIndex.get_indexes (start_index, lookup_count, lookup_tags); }
  void add_lookup_indexes_to (hb_set_t *lookup_indexes) const
  { lookupIndex.add_indexes_to (lookup_indexes); }

  const FeatureParams &get_feature_params () const
  { return this+featureParams; }

  bool intersects_lookup_indexes (const hb_map_t *lookup_indexes) const
  { return lookupIndex.intersects (lookup_indexes); }

  bool subset (hb_subset_context_t *c,
        hb_subset_layout_context_t *l,
        const Tag *tag = nullptr) const
  {
    hb_no_trace_t<bool> trace;
    auto *out = c->serializer->start_embed (*this);
    if ((__builtin_expect (!!(!out || !c->serializer->extend_min (out)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 771);

    out->featureParams.serialize_subset (c, featureParams, this, tag);

    auto it =
    + hb_iter (lookupIndex)
    | hb_filter (l->lookup_index_map)
    | hb_map (l->lookup_index_map)
    ;

    out->lookupIndex.serialize (c->serializer, l, it);


    return trace.ret (true, __PRETTY_FUNCTION__, 784);
  }

  bool sanitize (hb_sanitize_context_t *c,
   const Record_sanitize_closure_t *closure = nullptr) const
  {
    hb_no_trace_t<bool> trace;
    if ((__builtin_expect (!!(!(c->check_struct (this) && lookupIndex.sanitize (c))), 0)))
      return trace.ret (false, __PRETTY_FUNCTION__, 792);
# 805 "../harfbuzz-6.0.0/src/hb-ot-layout-common.hh"
    if ((__builtin_expect (!!(featureParams.is_null ()), 1)))
      return trace.ret (true, __PRETTY_FUNCTION__, 806);

    unsigned int orig_offset = featureParams;
    if ((__builtin_expect (!!(!featureParams.sanitize (c, this, closure ? closure->tag : ((hb_tag_t)((((uint32_t)(0)&0xFF)<<24)|(((uint32_t)(0)&0xFF)<<16)|(((uint32_t)(0)&0xFF)<<8)|((uint32_t)(0)&0xFF))))), 0)))
      return trace.ret (false, __PRETTY_FUNCTION__, 810);

    if (featureParams == 0 && closure &&
 closure->tag == ((hb_tag_t)((((uint32_t)('s')&0xFF)<<24)|(((uint32_t)('i')&0xFF)<<16)|(((uint32_t)('z')&0xFF)<<8)|((uint32_t)('e')&0xFF))) &&
 closure->list_base && closure->list_base < this)
    {
      unsigned int new_offset_int = orig_offset -
        (((char *) this) - ((char *) closure->list_base));

      Offset16To<FeatureParams> new_offset;

      new_offset = new_offset_int;
      if (new_offset == new_offset_int &&
   c->try_set (&featureParams, new_offset_int) &&
   !featureParams.sanitize (c, this, closure ? closure->tag : ((hb_tag_t)((((uint32_t)(0)&0xFF)<<24)|(((uint32_t)(0)&0xFF)<<16)|(((uint32_t)(0)&0xFF)<<8)|((uint32_t)(0)&0xFF)))))
 return trace.ret (false, __PRETTY_FUNCTION__, 825);
    }

    return trace.ret (true, __PRETTY_FUNCTION__, 828);
  }

  Offset16To<FeatureParams>
   featureParams;



  IndexArray lookupIndex;
  public:
  unsigned int get_size () const { return (4 - (lookupIndex).min_size + (lookupIndex).get_size ()); } void _compiles_assertion_on_line_838 () const { (void) (lookupIndex)[0].static_size; } void _instance_assertion_on_line_838 () const { static_assert ((sizeof (*this) == (4) + (1 +0) * sizeof ((lookupIndex)[0])), ""); } static constexpr unsigned null_size = (4); static constexpr unsigned min_size = (4);
};

template <typename Type>
struct Record
{
  int cmp (hb_tag_t a) const { return tag.cmp (a); }

  bool subset (hb_subset_layout_context_t *c, const void *base, const void *f_sub = nullptr) const
  {
    hb_no_trace_t<bool> trace;
    auto *out = c->subset_context->serializer->embed (this);
    if ((__builtin_expect (!!(!out), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 850);

    if (!f_sub)
      return trace.ret (out->offset.serialize_subset (c->subset_context, offset, base, c, &tag), __PRETTY_FUNCTION__, 853);

    const Feature& f = *reinterpret_cast<const Feature *> (f_sub);
    auto *s = c->subset_context->serializer;
    s->push ();

    out->offset = 0;
    bool ret = f.subset (c->subset_context, c, &tag);
    if (ret)
      s->add_link (out->offset, s->pop_pack ());
    else
      s->pop_discard ();

    return trace.ret (ret, __PRETTY_FUNCTION__, 866);
  }

  bool sanitize (hb_sanitize_context_t *c, const void *base) const
  {
    hb_no_trace_t<bool> trace;
    const Record_sanitize_closure_t closure = {tag, base};
    return trace.ret (c->check_struct (this) && offset.sanitize (c, base, &closure), __PRETTY_FUNCTION__, 873);
  }

  Tag tag;
  Offset16To<Type>
                offset;

  public:
  void _instance_assertion_on_line_881 () const { static_assert ((sizeof (*this) == (6)), ""); } unsigned int get_size () const { return (6); } static constexpr unsigned null_size = (6); static constexpr unsigned min_size = (6); static constexpr unsigned static_size = (6);
};

template <typename Type>
struct RecordArrayOf : SortedArray16Of<Record<Type>>
{
  const Offset16To<Type>& get_offset (unsigned int i) const
  { return (*this)[i].offset; }
  Offset16To<Type>& get_offset (unsigned int i)
  { return (*this)[i].offset; }
  const Tag& get_tag (unsigned int i) const
  { return (*this)[i].tag; }
  unsigned int get_tags (unsigned int start_offset,
                         unsigned int *record_count ,
                         hb_tag_t *record_tags ) const
  {
    if (record_count)
    {
      + this->as_array ().sub_array (start_offset, record_count)
      | hb_map (&Record<Type>::tag)
      | hb_sink (hb_array (record_tags, *record_count))
      ;
    }
    return this->len;
  }
  bool find_index (hb_tag_t tag, unsigned int *index) const
  {
    return this->bfind (tag, index, HB_NOT_FOUND_STORE, Index::NOT_FOUND_INDEX);
  }
};

template <typename Type>
struct RecordListOf : RecordArrayOf<Type>
{
  const Type& operator [] (unsigned int i) const
  { return this+this->get_offset (i); }

  bool subset (hb_subset_context_t *c,
               hb_subset_layout_context_t *l) const
  {
    hb_no_trace_t<bool> trace;
    auto *out = c->serializer->start_embed (*this);
    if ((__builtin_expect (!!(!c->serializer->extend_min (out)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 923);

    + this->iter ()
    | hb_apply (subset_record_array (l, out, this))
    ;
    return trace.ret (true, __PRETTY_FUNCTION__, 928);
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (RecordArrayOf<Type>::sanitize (c, this), __PRETTY_FUNCTION__, 934);
  }
};

struct RecordListOfFeature : RecordListOf<Feature>
{
  bool subset (hb_subset_context_t *c,
        hb_subset_layout_context_t *l) const
  {
    hb_no_trace_t<bool> trace;
    auto *out = c->serializer->start_embed (*this);
    if ((__builtin_expect (!!(!out || !c->serializer->extend_min (out)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 945);

    + hb_enumerate (*this)
    | hb_filter (l->feature_index_map, hb_first)
    | hb_apply ([l, out, this] (const hb_pair_t<unsigned, const Record<Feature>&>& _)
                {
                  const Feature *f_sub = nullptr;
                  const Feature **f = nullptr;
                  if (l->feature_substitutes_map->has (_.first, &f))
                    f_sub = *f;

                  subset_record_array (l, out, this, f_sub) (_.second);
                })
    ;

    return trace.ret (true, __PRETTY_FUNCTION__, 960);
  }
};

typedef RecordListOf<Feature> FeatureList;


struct LangSys
{
  unsigned int get_feature_count () const
  { return featureIndex.len; }
  hb_tag_t get_feature_index (unsigned int i) const
  { return featureIndex[i]; }
  unsigned int get_feature_indexes (unsigned int start_offset,
        unsigned int *feature_count ,
        unsigned int *feature_indexes ) const
  { return featureIndex.get_indexes (start_offset, feature_count, feature_indexes); }
  void add_feature_indexes_to (hb_set_t *feature_indexes) const
  { featureIndex.add_indexes_to (feature_indexes); }

  bool has_required_feature () const { return reqFeatureIndex != 0xFFFFu; }
  unsigned int get_required_feature_index () const
  {
    if (reqFeatureIndex == 0xFFFFu)
      return Index::NOT_FOUND_INDEX;
   return reqFeatureIndex;
  }

  LangSys* copy (hb_serialize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->embed (*this), __PRETTY_FUNCTION__, 991);
  }

  bool compare (const LangSys& o, const hb_map_t *feature_index_map) const
  {
    if (reqFeatureIndex != o.reqFeatureIndex)
      return false;

    auto iter =
    + hb_iter (featureIndex)
    | hb_filter (feature_index_map)
    | hb_map (feature_index_map)
    ;

    auto o_iter =
    + hb_iter (o.featureIndex)
    | hb_filter (feature_index_map)
    | hb_map (feature_index_map)
    ;

    for (; iter && o_iter; iter++, o_iter++)
    {
      unsigned a = *iter;
      unsigned b = *o_iter;
      if (a != b) return false;
    }

    if (iter || o_iter) return false;

    return true;
  }

  void collect_features (hb_prune_langsys_context_t *c) const
  {
    if (!has_required_feature () && !get_feature_count ()) return;
    if (has_required_feature () &&
        c->duplicate_feature_map->has (reqFeatureIndex))
      c->new_feature_indexes->add (get_required_feature_index ());

    + hb_iter (featureIndex)
    | hb_filter (c->duplicate_feature_map)
    | hb_sink (c->new_feature_indexes)
    ;
  }

  bool subset (hb_subset_context_t *c,
        hb_subset_layout_context_t *l,
        const Tag *tag = nullptr) const
  {
    hb_no_trace_t<bool> trace;
    auto *out = c->serializer->start_embed (*this);
    if ((__builtin_expect (!!(!out || !c->serializer->extend_min (out)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 1042);

    const uint32_t *v;
    out->reqFeatureIndex = l->feature_index_map->has (reqFeatureIndex, &v) ? *v : 0xFFFFu;

    if (!l->visitFeatureIndex (featureIndex.len))
      return trace.ret (false, __PRETTY_FUNCTION__, 1048);

    auto it =
    + hb_iter (featureIndex)
    | hb_filter (l->feature_index_map)
    | hb_map (l->feature_index_map)
    ;

    bool ret = bool (it);
    out->featureIndex.serialize (c->serializer, l, it);
    return trace.ret (ret, __PRETTY_FUNCTION__, 1058);
  }

  bool sanitize (hb_sanitize_context_t *c,
   const Record_sanitize_closure_t * = nullptr) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this) && featureIndex.sanitize (c), __PRETTY_FUNCTION__, 1065);
  }

  Offset16 lookupOrderZ;

  HBUINT16 reqFeatureIndex;


  IndexArray featureIndex;
  public:
  unsigned int get_size () const { return (6 - (featureIndex).min_size + (featureIndex).get_size ()); } void _compiles_assertion_on_line_1075 () const { (void) (featureIndex)[0].static_size; } void _instance_assertion_on_line_1075 () const { static_assert ((sizeof (*this) == (6) + (1 +0) * sizeof ((featureIndex)[0])), ""); } static constexpr unsigned null_size = (6); static constexpr unsigned min_size = (6);
};
} extern __attribute__((__visibility__("hidden"))) const unsigned char _hb_Null_OT_LangSys[hb_null_size<OT::LangSys>::value]; template <> struct Null<OT::LangSys> { static OT::LangSys const & get_null () { return *reinterpret_cast<const OT::LangSys *> (_hb_Null_OT_LangSys); } }; namespace OT { static_assert (true, "");

struct Script
{
  unsigned int get_lang_sys_count () const
  { return langSys.len; }
  const Tag& get_lang_sys_tag (unsigned int i) const
  { return langSys.get_tag (i); }
  unsigned int get_lang_sys_tags (unsigned int start_offset,
      unsigned int *lang_sys_count ,
      hb_tag_t *lang_sys_tags ) const
  { return langSys.get_tags (start_offset, lang_sys_count, lang_sys_tags); }
  const LangSys& get_lang_sys (unsigned int i) const
  {
    if (i == Index::NOT_FOUND_INDEX) return get_default_lang_sys ();
    return this+langSys[i].offset;
  }
  bool find_lang_sys_index (hb_tag_t tag, unsigned int *index) const
  { return langSys.find_index (tag, index); }

  bool has_default_lang_sys () const { return defaultLangSys != 0; }
  const LangSys& get_default_lang_sys () const { return this+defaultLangSys; }

  void prune_langsys (hb_prune_langsys_context_t *c,
                      unsigned script_index) const
  {
    if (!has_default_lang_sys () && !get_lang_sys_count ()) return;
    if (!c->visitScript ()) return;

    if (!c->script_langsys_map->has (script_index))
    {
      if ((__builtin_expect (!!(!c->script_langsys_map->set (script_index, hb::unique_ptr<hb_set_t> {hb_set_create ()})), 0)))
 return;
    }

    if (has_default_lang_sys ())
    {

      const LangSys& d = get_default_lang_sys ();
      if (c->visitLangsys (d.get_feature_count ())) {
        d.collect_features (c);
      }

      for (auto _ : + hb_enumerate (langSys))
      {
        const LangSys& l = this+_.second.offset;
        if (!c->visitLangsys (l.get_feature_count ())) continue;
        if (l.compare (d, c->duplicate_feature_map)) continue;

        l.collect_features (c);
        c->script_langsys_map->get (script_index)->add (_.first);
      }
    }
    else
    {
      for (auto _ : + hb_enumerate (langSys))
      {
        const LangSys& l = this+_.second.offset;
        if (!c->visitLangsys (l.get_feature_count ())) continue;
        l.collect_features (c);
        c->script_langsys_map->get (script_index)->add (_.first);
      }
    }
  }

  bool subset (hb_subset_context_t *c,
        hb_subset_layout_context_t *l,
        const Tag *tag) const
  {
    hb_no_trace_t<bool> trace;
    if (!l->visitScript ()) return trace.ret (false, __PRETTY_FUNCTION__, 1147);
    if (tag && !c->plan->layout_scripts.has (*tag))
      return false;

    auto *out = c->serializer->start_embed (*this);
    if ((__builtin_expect (!!(!out || !c->serializer->extend_min (out)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 1152);

    bool defaultLang = false;
    if (has_default_lang_sys ())
    {
      c->serializer->push ();
      const LangSys& ls = this+defaultLangSys;
      bool ret = ls.subset (c, l);
      if (!ret && tag && *tag != ((hb_tag_t)((((uint32_t)('D')&0xFF)<<24)|(((uint32_t)('F')&0xFF)<<16)|(((uint32_t)('L')&0xFF)<<8)|((uint32_t)('T')&0xFF))))
      {
 c->serializer->pop_discard ();
 out->defaultLangSys = 0;
      }
      else
      {
 c->serializer->add_link (out->defaultLangSys, c->serializer->pop_pack ());
 defaultLang = true;
      }
    }

    const hb_set_t *active_langsys = l->script_langsys_map->get (l->cur_script_index);
    if (active_langsys)
    {
      + hb_enumerate (langSys)
      | hb_filter (active_langsys, hb_first)
      | hb_map (hb_second)
      | hb_filter ([=] (const Record<LangSys>& record) {return l->visitLangSys (); })
      | hb_apply (subset_record_array (l, &(out->langSys), this))
      ;
    }

    return trace.ret (bool (out->langSys.len) || defaultLang || l->table_tag == ((hb_tag_t)((((uint32_t)('G')&0xFF)<<24)|(((uint32_t)('S')&0xFF)<<16)|(((uint32_t)('U')&0xFF)<<8)|((uint32_t)('B')&0xFF))), __PRETTY_FUNCTION__, 1183);
  }

  bool sanitize (hb_sanitize_context_t *c,
   const Record_sanitize_closure_t * = nullptr) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (defaultLangSys.sanitize (c, this) && langSys.sanitize (c, this), __PRETTY_FUNCTION__, 1190);
  }

  protected:
  Offset16To<LangSys>
  defaultLangSys;

  RecordArrayOf<LangSys>
  langSys;

  public:
  unsigned int get_size () const { return (4 - (langSys).min_size + (langSys).get_size ()); } void _compiles_assertion_on_line_1201 () const { (void) (langSys)[0].static_size; } void _instance_assertion_on_line_1201 () const { static_assert ((sizeof (*this) == (4) + (1 +0) * sizeof ((langSys)[0])), ""); } static constexpr unsigned null_size = (4); static constexpr unsigned min_size = (4);
};

struct RecordListOfScript : RecordListOf<Script>
{
  bool subset (hb_subset_context_t *c,
               hb_subset_layout_context_t *l) const
  {
    hb_no_trace_t<bool> trace;
    auto *out = c->serializer->start_embed (*this);
    if ((__builtin_expect (!!(!out || !c->serializer->extend_min (out)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 1211);

    for (auto _ : + hb_enumerate (*this))
    {
      auto snap = c->serializer->snapshot ();
      l->cur_script_index = _.first;
      bool ret = _.second.subset (l, this);
      if (!ret) c->serializer->revert (snap);
      else out->len++;
    }

    return trace.ret (true, __PRETTY_FUNCTION__, 1222);
  }
};

typedef RecordListOfScript ScriptList;



struct LookupFlag : HBUINT16
{
  enum Flags {
    RightToLeft = 0x0001u,
    IgnoreBaseGlyphs = 0x0002u,
    IgnoreLigatures = 0x0004u,
    IgnoreMarks = 0x0008u,
    IgnoreFlags = 0x000Eu,
    UseMarkFilteringSet = 0x0010u,
    Reserved = 0x00E0u,
    MarkAttachmentType = 0xFF00u
  };
  public:
  void _instance_assertion_on_line_1243 () const { static_assert ((sizeof (*this) == (2)), ""); } unsigned int get_size () const { return (2); } static constexpr unsigned null_size = (2); static constexpr unsigned min_size = (2); static constexpr unsigned static_size = (2);
};

}

extern "C++" { static inline constexpr OT::LookupFlag::Flags operator | (OT::LookupFlag::Flags l, OT::LookupFlag::Flags r) { return OT::LookupFlag::Flags ((unsigned) l | (unsigned) r); } static inline constexpr OT::LookupFlag::Flags operator & (OT::LookupFlag::Flags l, OT::LookupFlag::Flags r) { return OT::LookupFlag::Flags ((unsigned) l & (unsigned) r); } static inline constexpr OT::LookupFlag::Flags operator ^ (OT::LookupFlag::Flags l, OT::LookupFlag::Flags r) { return OT::LookupFlag::Flags ((unsigned) l ^ (unsigned) r); } static inline constexpr unsigned operator ~ (OT::LookupFlag::Flags r) { return (~(unsigned) r); } static inline OT::LookupFlag::Flags& operator |= (OT::LookupFlag::Flags &l, OT::LookupFlag::Flags r) { l = l | r; return l; } static inline OT::LookupFlag::Flags& operator &= (OT::LookupFlag::Flags& l, OT::LookupFlag::Flags r) { l = l & r; return l; } static inline OT::LookupFlag::Flags& operator ^= (OT::LookupFlag::Flags& l, OT::LookupFlag::Flags r) { l = l ^ r; return l; } } static_assert (true, "");
namespace OT {

struct Lookup
{
  unsigned int get_subtable_count () const { return subTable.len; }

  template <typename TSubTable>
  const Array16OfOffset16To<TSubTable>& get_subtables () const
  { return reinterpret_cast<const Array16OfOffset16To<TSubTable> &> (subTable); }
  template <typename TSubTable>
  Array16OfOffset16To<TSubTable>& get_subtables ()
  { return reinterpret_cast<Array16OfOffset16To<TSubTable> &> (subTable); }

  template <typename TSubTable>
  const TSubTable& get_subtable (unsigned int i) const
  { return this+get_subtables<TSubTable> ()[i]; }
  template <typename TSubTable>
  TSubTable& get_subtable (unsigned int i)
  { return this+get_subtables<TSubTable> ()[i]; }

  unsigned int get_size () const
  {
    const HBUINT16 &markFilteringSet = StructAfter<const HBUINT16> (subTable);
    if (lookupFlag & LookupFlag::UseMarkFilteringSet)
      return (const char *) &StructAfter<const char> (markFilteringSet) - (const char *) this;
    return (const char *) &markFilteringSet - (const char *) this;
  }

  unsigned int get_type () const { return lookupType; }




  uint32_t get_props () const
  {
    unsigned int flag = lookupFlag;
    if ((__builtin_expect (!!(flag & LookupFlag::UseMarkFilteringSet), 0)))
    {
      const HBUINT16 &markFilteringSet = StructAfter<HBUINT16> (subTable);
      flag += (markFilteringSet << 16);
    }
    return flag;
  }

  template <typename TSubTable, typename context_t, typename ...Ts>
  typename context_t::return_t dispatch (context_t *c, Ts&&... ds) const
  {
    unsigned int lookup_type = get_type ();
    hb_no_trace_t<typename context_t::return_t> trace;
    unsigned int count = get_subtable_count ();
    for (unsigned int i = 0; i < count; i++) {
      typename context_t::return_t r = get_subtable<TSubTable> (i).dispatch (c, lookup_type, std::forward<Ts> (ds)...);
      if (c->stop_sublookup_iteration (r))
 return trace.ret (r, __PRETTY_FUNCTION__, 1302);
    }
    return trace.ret (c->default_return_value (), __PRETTY_FUNCTION__, 1304);
  }

  bool serialize (hb_serialize_context_t *c,
    unsigned int lookup_type,
    uint32_t lookup_props,
    unsigned int num_subtables)
  {
    hb_no_trace_t<bool> trace;
    if ((__builtin_expect (!!(!c->extend_min (this)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 1313);
    lookupType = lookup_type;
    lookupFlag = lookup_props & 0xFFFFu;
    if ((__builtin_expect (!!(!subTable.serialize (c, num_subtables)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 1316);
    if (lookupFlag & LookupFlag::UseMarkFilteringSet)
    {
      if ((__builtin_expect (!!(!c->extend (this)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 1319);
      HBUINT16 &markFilteringSet = StructAfter<HBUINT16> (subTable);
      markFilteringSet = lookup_props >> 16;
    }
    return trace.ret (true, __PRETTY_FUNCTION__, 1323);
  }

  template <typename TSubTable>
  bool subset (hb_subset_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    auto *out = c->serializer->start_embed (*this);
    if ((__builtin_expect (!!(!out || !c->serializer->extend_min (out)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 1331);
    out->lookupType = lookupType;
    out->lookupFlag = lookupFlag;

    const hb_set_t *glyphset = c->plan->glyphset_gsub ();
    unsigned int lookup_type = get_type ();
    + hb_iter (get_subtables <TSubTable> ())
    | hb_filter ([this, glyphset, lookup_type] (const Offset16To<TSubTable> &_) { return (this+_).intersects (glyphset, lookup_type); })
    | hb_apply (subset_offset_array (c, out->get_subtables<TSubTable> (), this, lookup_type))
    ;

    if (lookupFlag & LookupFlag::UseMarkFilteringSet)
    {
      if ((__builtin_expect (!!(!c->serializer->extend (out)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 1344);
      const HBUINT16 &markFilteringSet = StructAfter<HBUINT16> (subTable);
      HBUINT16 &outMarkFilteringSet = StructAfter<HBUINT16> (out->subTable);
      outMarkFilteringSet = markFilteringSet;
    }







    return trace.ret (true, __PRETTY_FUNCTION__, 1356);
  }

  template <typename TSubTable>
  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    if (!(c->check_struct (this) && subTable.sanitize (c))) return trace.ret (false, __PRETTY_FUNCTION__, 1363);

    unsigned subtables = get_subtable_count ();
    if ((__builtin_expect (!!(!c->visit_subtables (subtables)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 1366);

    if (lookupFlag & LookupFlag::UseMarkFilteringSet)
    {
      const HBUINT16 &markFilteringSet = StructAfter<HBUINT16> (subTable);
      if (!markFilteringSet.sanitize (c)) return trace.ret (false, __PRETTY_FUNCTION__, 1371);
    }

    if ((__builtin_expect (!!(!get_subtables<TSubTable> ().sanitize (c, this, get_type ())), 0)))
      return trace.ret (false, __PRETTY_FUNCTION__, 1375);

    if ((__builtin_expect (!!(get_type () == TSubTable::Extension && !c->get_edit_count ()), 0)))
    {
# 1389 "../harfbuzz-6.0.0/src/hb-ot-layout-common.hh"
      unsigned int type = get_subtable<TSubTable> (0).u.extension.get_type ();
      for (unsigned int i = 1; i < subtables; i++)
 if (get_subtable<TSubTable> (i).u.extension.get_type () != type)
   return trace.ret (false, __PRETTY_FUNCTION__, 1392);
    }
    return trace.ret (true, __PRETTY_FUNCTION__, 1394);
  }

  protected:
  HBUINT16 lookupType;
  HBUINT16 lookupFlag;
  Array16Of<Offset16>
  subTable;



  public:
  void _compiles_assertion_on_line_1406 () const { (void) (subTable)[0].static_size; } void _instance_assertion_on_line_1406 () const { static_assert ((sizeof (*this) == (6) + (1 +0) * sizeof ((subTable)[0])), ""); } static constexpr unsigned null_size = (6); static constexpr unsigned min_size = (6);
};

template <typename Types>
using LookupList = List16OfOffsetTo<Lookup, typename Types::HBUINT>;

template <typename TLookup, typename OffsetType>
struct LookupOffsetList : List16OfOffsetTo<TLookup, OffsetType>
{
  bool subset (hb_subset_context_t *c,
        hb_subset_layout_context_t *l) const
  {
    hb_no_trace_t<bool> trace;
    auto *out = c->serializer->start_embed (this);
    if ((__builtin_expect (!!(!out || !c->serializer->extend_min (out)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 1420);

    + hb_enumerate (*this)
    | hb_filter (l->lookup_index_map, hb_first)
    | hb_map (hb_second)
    | hb_apply (subset_offset_array (c, *out, this))
    ;
    return trace.ret (true, __PRETTY_FUNCTION__, 1427);
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (List16OfOffset16To<TLookup>::sanitize (c, this), __PRETTY_FUNCTION__, 1433);
  }
};







static bool ClassDef_remap_and_serialize (hb_serialize_context_t *c,
       const hb_set_t &klasses,
                                          bool use_class_zero,
                                          hb_sorted_vector_t<hb_pair_t<hb_codepoint_t, hb_codepoint_t>> &glyph_and_klass,
       hb_map_t *klass_map )
{
  if (!klass_map)
    return ClassDef_serialize (c, glyph_and_klass.iter ());



  if (!use_class_zero)
    klass_map->set (0, 0);

  unsigned idx = klass_map->has (0) ? 1 : 0;
  for (const unsigned k: klasses)
  {
    if (klass_map->has (k)) continue;
    klass_map->set (k, idx);
    idx++;
  }


  for (unsigned i = 0; i < glyph_and_klass.length; i++)
  {
    hb_codepoint_t klass = glyph_and_klass[i].second;
    glyph_and_klass[i].second = klass_map->get (klass);
  }

  c->propagate_error (glyph_and_klass, klasses);
  return ClassDef_serialize (c, glyph_and_klass.iter ());
}





template <typename Types>
struct ClassDefFormat1_3
{
  friend struct ClassDef;

  private:
  unsigned int get_class (hb_codepoint_t glyph_id) const
  {
    return classValue[(unsigned int) (glyph_id - startGlyph)];
  }

  unsigned get_population () const
  {
    return classValue.len;
  }

  template<typename Iterator,
    typename hb_enable_if<(((hb_is_source_of<Iterator, hb_codepoint_t>::value && Iterator::is_sorted_iterator)))>::type* = nullptr>
  bool serialize (hb_serialize_context_t *c,
    Iterator it)
  {
    hb_no_trace_t<bool> trace;
    if ((__builtin_expect (!!(!c->extend_min (this)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 1502);

    if ((__builtin_expect (!!(!it), 0)))
    {
      classFormat = 1;
      startGlyph = 0;
      classValue.len = 0;
      return trace.ret (true, __PRETTY_FUNCTION__, 1509);
    }

    hb_codepoint_t glyph_min = (*it).first;
    hb_codepoint_t glyph_max = + it
          | hb_map (hb_first)
          | hb_reduce (hb_max, 0u);
    unsigned glyph_count = glyph_max - glyph_min + 1;

    startGlyph = glyph_min;
    if ((__builtin_expect (!!(!classValue.serialize (c, glyph_count)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 1519);
    for (const hb_pair_t<hb_codepoint_t, uint32_t> gid_klass_pair : + it)
    {
      unsigned idx = gid_klass_pair.first - glyph_min;
      classValue[idx] = gid_klass_pair.second;
    }
    return trace.ret (true, __PRETTY_FUNCTION__, 1525);
  }

  bool subset (hb_subset_context_t *c,
        hb_map_t *klass_map = nullptr ,
               bool keep_empty_table = true,
               bool use_class_zero = true,
               const Coverage* glyph_filter = nullptr) const
  {
    hb_no_trace_t<bool> trace;
    const hb_map_t &glyph_map = c->plan->glyph_map_gsub;

    hb_sorted_vector_t<hb_pair_t<hb_codepoint_t, hb_codepoint_t>> glyph_and_klass;
    hb_set_t orig_klasses;

    hb_codepoint_t start = startGlyph;
    hb_codepoint_t end = start + classValue.len;

    for (const hb_codepoint_t gid : + hb_range (start, end))
    {
      hb_codepoint_t new_gid = glyph_map[gid];
      if (new_gid == ((hb_codepoint_t) -1)) continue;
      if (glyph_filter && !glyph_filter->has(gid)) continue;

      unsigned klass = classValue[gid - start];
      if (!klass) continue;

      glyph_and_klass.push (hb_pair (new_gid, klass));
      orig_klasses.add (klass);
    }

    unsigned glyph_count = glyph_filter
                           ? hb_len (hb_iter (glyph_map.keys()) | hb_filter (glyph_filter))
                           : glyph_map.get_population ();
    use_class_zero = use_class_zero && glyph_count <= glyph_and_klass.length;
    if (!ClassDef_remap_and_serialize (c->serializer,
                                       orig_klasses,
                                       use_class_zero,
                                       glyph_and_klass,
                                       klass_map))
      return trace.ret (false, __PRETTY_FUNCTION__, 1565);
    return trace.ret (keep_empty_table || (bool) glyph_and_klass, __PRETTY_FUNCTION__, 1566);
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this) && classValue.sanitize (c), __PRETTY_FUNCTION__, 1572);
  }

  unsigned cost () const { return 1; }

  template <typename set_t>
  bool collect_coverage (set_t *glyphs) const
  {
    unsigned int start = 0;
    unsigned int count = classValue.len;
    for (unsigned int i = 0; i < count; i++)
    {
      if (classValue[i])
 continue;

      if (start != i)
 if ((__builtin_expect (!!(!glyphs->add_range (startGlyph + start, startGlyph + i)), 0)))
   return false;

      start = i + 1;
    }
    if (start != count)
      if ((__builtin_expect (!!(!glyphs->add_range (startGlyph + start, startGlyph + count)), 0)))
 return false;

    return true;
  }

  template <typename set_t>
  bool collect_class (set_t *glyphs, unsigned klass) const
  {
    unsigned int count = classValue.len;
    for (unsigned int i = 0; i < count; i++)
      if (classValue[i] == klass) glyphs->add (startGlyph + i);
    return true;
  }

  bool intersects (const hb_set_t *glyphs) const
  {
    hb_codepoint_t start = startGlyph;
    hb_codepoint_t end = startGlyph + classValue.len;
    for (hb_codepoint_t iter = startGlyph - 1;
  glyphs->next (&iter) && iter < end;)
      if (classValue[iter - start]) return true;
    return false;
  }
  bool intersects_class (const hb_set_t *glyphs, uint16_t klass) const
  {
    unsigned int count = classValue.len;
    if (klass == 0)
    {

      hb_codepoint_t g = ((hb_codepoint_t) -1);
      if (!glyphs->next (&g)) return false;
      if (g < startGlyph) return true;
      g = startGlyph + count - 1;
      if (glyphs->next (&g)) return true;

    }


    const HBUINT16 *arr = classValue.arrayZ;
    for (unsigned int i = 0; i < count; i++)
      if (arr[i] == klass && glyphs->has (startGlyph + i))
 return true;
    return false;
  }

  void intersected_class_glyphs (const hb_set_t *glyphs, unsigned klass, hb_set_t *intersect_glyphs) const
  {
    unsigned count = classValue.len;
    if (klass == 0)
    {
      unsigned start_glyph = startGlyph;
      for (uint32_t g = ((hb_codepoint_t) -1);
    glyphs->next (&g) && g < start_glyph;)
 intersect_glyphs->add (g);

      for (uint32_t g = startGlyph + count - 1;
    glyphs-> next (&g);)
 intersect_glyphs->add (g);

      return;
    }

    for (unsigned i = 0; i < count; i++)
      if (classValue[i] == klass && glyphs->has (startGlyph + i))
 intersect_glyphs->add (startGlyph + i);
# 1671 "../harfbuzz-6.0.0/src/hb-ot-layout-common.hh"
  }

  void intersected_classes (const hb_set_t *glyphs, hb_set_t *intersect_classes) const
  {
    if (glyphs->is_empty ()) return;
    hb_codepoint_t end_glyph = startGlyph + classValue.len - 1;
    if (glyphs->get_min () < startGlyph ||
        glyphs->get_max () > end_glyph)
      intersect_classes->add (0);

    for (const auto& _ : + hb_enumerate (classValue))
    {
      hb_codepoint_t g = startGlyph + _.first;
      if (glyphs->has (g))
        intersect_classes->add (_.second);
    }
  }

  protected:
  HBUINT16 classFormat;
  typename Types::HBGlyphID
   startGlyph;
  typename Types::template ArrayOf<HBUINT16>
  classValue;
  public:
  void _compiles_assertion_on_line_1696 () const { (void) (classValue)[0].static_size; } void _instance_assertion_on_line_1696 () const { static_assert ((sizeof (*this) == (2 + 2 * Types::size) + (1 +0) * sizeof ((classValue)[0])), ""); } static constexpr unsigned null_size = (2 + 2 * Types::size); static constexpr unsigned min_size = (2 + 2 * Types::size);
};

template <typename Types>
struct ClassDefFormat2_4
{
  friend struct ClassDef;

  private:
  unsigned int get_class (hb_codepoint_t glyph_id) const
  {
    return rangeRecord.bsearch (glyph_id).value;
  }

  unsigned get_population () const
  {
    typename Types::large_int ret = 0;
    for (const auto &r : rangeRecord)
      ret += r.get_population ();
    return ret > 
# 1715 "../harfbuzz-6.0.0/src/hb-ot-layout-common.hh" 3 4
                (0x7fffffff * 2U + 1U) 
# 1715 "../harfbuzz-6.0.0/src/hb-ot-layout-common.hh"
                         ? 
# 1715 "../harfbuzz-6.0.0/src/hb-ot-layout-common.hh" 3 4
                           (0x7fffffff * 2U + 1U) 
# 1715 "../harfbuzz-6.0.0/src/hb-ot-layout-common.hh"
                                    : (unsigned) ret;
  }

  template<typename Iterator,
    typename hb_enable_if<(((hb_is_source_of<Iterator, hb_codepoint_t>::value && Iterator::is_sorted_iterator)))>::type* = nullptr>
  bool serialize (hb_serialize_context_t *c,
    Iterator it)
  {
    hb_no_trace_t<bool> trace;
    if ((__builtin_expect (!!(!c->extend_min (this)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 1724);

    if ((__builtin_expect (!!(!it), 0)))
    {
      classFormat = 2;
      rangeRecord.len = 0;
      return trace.ret (true, __PRETTY_FUNCTION__, 1730);
    }

    unsigned num_ranges = 1;
    hb_codepoint_t prev_gid = (*it).first;
    unsigned prev_klass = (*it).second;

    RangeRecord<Types> range_rec;
    range_rec.first = prev_gid;
    range_rec.last = prev_gid;
    range_rec.value = prev_klass;

    auto *record = c->copy (range_rec);
    if ((__builtin_expect (!!(!record), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 1743);

    for (const auto gid_klass_pair : + (++it))
    {
      hb_codepoint_t cur_gid = gid_klass_pair.first;
      unsigned cur_klass = gid_klass_pair.second;

      if (cur_gid != prev_gid + 1 ||
   cur_klass != prev_klass)
      {
 if ((__builtin_expect (!!(!record), 0))) break;
 record->last = prev_gid;
 num_ranges++;

 range_rec.first = cur_gid;
 range_rec.last = cur_gid;
 range_rec.value = cur_klass;

 record = c->copy (range_rec);
      }

      prev_klass = cur_klass;
      prev_gid = cur_gid;
    }

    if ((__builtin_expect (!!(record), 1))) record->last = prev_gid;
    rangeRecord.len = num_ranges;
    return trace.ret (true, __PRETTY_FUNCTION__, 1770);
  }

  bool subset (hb_subset_context_t *c,
        hb_map_t *klass_map = nullptr ,
               bool keep_empty_table = true,
               bool use_class_zero = true,
               const Coverage* glyph_filter = nullptr) const
  {
    hb_no_trace_t<bool> trace;
    const hb_map_t &glyph_map = c->plan->glyph_map_gsub;
    const hb_set_t &glyph_set = *c->plan->glyphset_gsub ();

    hb_sorted_vector_t<hb_pair_t<hb_codepoint_t, hb_codepoint_t>> glyph_and_klass;
    hb_set_t orig_klasses;

    if (glyph_set.get_population () * hb_bit_storage ((unsigned) rangeRecord.len) / 2
 < get_population ())
    {
      for (hb_codepoint_t g : glyph_set)
      {
 unsigned klass = get_class (g);
 if (!klass) continue;
 hb_codepoint_t new_gid = glyph_map[g];
 if (new_gid == ((hb_codepoint_t) -1)) continue;
 if (glyph_filter && !glyph_filter->has (g)) continue;
 glyph_and_klass.push (hb_pair (new_gid, klass));
 orig_klasses.add (klass);
      }
    }
    else
    {
      unsigned num_source_glyphs = c->plan->source->get_num_glyphs ();
      for (auto &range : rangeRecord)
      {
 unsigned klass = range.value;
 if (!klass) continue;
 hb_codepoint_t start = range.first;
 hb_codepoint_t end = hb_min (range.last + 1, num_source_glyphs);
 for (hb_codepoint_t g = start; g < end; g++)
 {
   hb_codepoint_t new_gid = glyph_map[g];
   if (new_gid == ((hb_codepoint_t) -1)) continue;
   if (glyph_filter && !glyph_filter->has (g)) continue;

   glyph_and_klass.push (hb_pair (new_gid, klass));
   orig_klasses.add (klass);
 }
      }
    }

    const hb_set_t& glyphset = *c->plan->glyphset_gsub ();
    unsigned glyph_count = glyph_filter
                           ? hb_len (hb_iter (glyphset) | hb_filter (glyph_filter))
                           : glyph_map.get_population ();
    use_class_zero = use_class_zero && glyph_count <= glyph_and_klass.length;
    if (!ClassDef_remap_and_serialize (c->serializer,
                                       orig_klasses,
                                       use_class_zero,
                                       glyph_and_klass,
                                       klass_map))
      return trace.ret (false, __PRETTY_FUNCTION__, 1831);
    return trace.ret (keep_empty_table || (bool) glyph_and_klass, __PRETTY_FUNCTION__, 1832);
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (rangeRecord.sanitize (c), __PRETTY_FUNCTION__, 1838);
  }

  unsigned cost () const { return hb_bit_storage ((unsigned) rangeRecord.len); }

  template <typename set_t>
  bool collect_coverage (set_t *glyphs) const
  {
    for (auto &range : rangeRecord)
      if (range.value)
 if ((__builtin_expect (!!(!range.collect_coverage (glyphs)), 0)))
   return false;
    return true;
  }

  template <typename set_t>
  bool collect_class (set_t *glyphs, unsigned int klass) const
  {
    for (auto &range : rangeRecord)
    {
      if (range.value == klass)
 if ((__builtin_expect (!!(!range.collect_coverage (glyphs)), 0)))
   return false;
    }
    return true;
  }

  bool intersects (const hb_set_t *glyphs) const
  {
    if (rangeRecord.len > glyphs->get_population () * hb_bit_storage ((unsigned) rangeRecord.len) / 2)
    {
      for (hb_codepoint_t g = ((hb_codepoint_t) -1); glyphs->next (&g);)
        if (get_class (g))
   return true;
      return false;
    }

    return hb_any (+ hb_iter (rangeRecord)
                   | hb_map ([glyphs] (const RangeRecord<Types> &range) { return range.intersects (*glyphs) && range.value; }));
  }
  bool intersects_class (const hb_set_t *glyphs, uint16_t klass) const
  {
    if (klass == 0)
    {

      hb_codepoint_t g = ((hb_codepoint_t) -1);
      for (auto &range : rangeRecord)
      {
 if (!glyphs->next (&g))
   break;
 if (g < range.first)
   return true;
 g = range.last;
      }
      if (g != ((hb_codepoint_t) -1) && glyphs->next (&g))
 return true;

    }
    for (const auto &range : rangeRecord)
      if (range.value == klass && range.intersects (*glyphs))
 return true;
    return false;
  }

  void intersected_class_glyphs (const hb_set_t *glyphs, unsigned klass, hb_set_t *intersect_glyphs) const
  {
    if (klass == 0)
    {
      hb_codepoint_t g = ((hb_codepoint_t) -1);
      for (auto &range : rangeRecord)
      {
 if (!glyphs->next (&g))
   goto done;
 while (g < range.first)
 {
   intersect_glyphs->add (g);
   if (!glyphs->next (&g))
     goto done;
        }
        g = range.last;
      }
      while (glyphs->next (&g))
 intersect_glyphs->add (g);
      done:

      return;
    }

    unsigned count = rangeRecord.len;
    if (count > glyphs->get_population () * hb_bit_storage (count) * 8)
    {
      for (hb_codepoint_t g = ((hb_codepoint_t) -1);
    glyphs->next (&g);)
      {
        unsigned i;
        if (rangeRecord.as_array ().bfind (g, &i) &&
     rangeRecord.arrayZ[i].value == klass)
   intersect_glyphs->add (g);
      }
      return;
    }

    for (auto &range : rangeRecord)
    {
      if (range.value != klass) continue;

      unsigned end = range.last + 1;
      for (hb_codepoint_t g = range.first - 1;
    glyphs->next (&g) && g < end;)
 intersect_glyphs->add (g);
    }
  }

  void intersected_classes (const hb_set_t *glyphs, hb_set_t *intersect_classes) const
  {
    if (glyphs->is_empty ()) return;

    hb_codepoint_t g = ((hb_codepoint_t) -1);
    for (auto &range : rangeRecord)
    {
      if (!glyphs->next (&g))
        break;
      if (g < range.first)
      {
        intersect_classes->add (0);
        break;
      }
      g = range.last;
    }
    if (g != ((hb_codepoint_t) -1) && glyphs->next (&g))
      intersect_classes->add (0);

    for (const auto& range : rangeRecord)
      if (range.intersects (*glyphs))
        intersect_classes->add (range.value);
  }

  protected:
  HBUINT16 classFormat;
  typename Types::template SortedArrayOf<RangeRecord<Types>>
  rangeRecord;

  public:
  void _compiles_assertion_on_line_1981 () const { (void) (rangeRecord)[0].static_size; } void _instance_assertion_on_line_1981 () const { static_assert ((sizeof (*this) == (2 + Types::size) + (1 +0) * sizeof ((rangeRecord)[0])), ""); } static constexpr unsigned null_size = (2 + Types::size); static constexpr unsigned min_size = (2 + Types::size);
};

struct ClassDef
{

  unsigned operator [] (hb_codepoint_t k) const { return get (k); }
  bool has (hb_codepoint_t k) const { return (*this)[k]; }

  hb_codepoint_t operator () (hb_codepoint_t k) const { return get (k); }

  unsigned int get (hb_codepoint_t k) const { return get_class (k); }
  unsigned int get_class (hb_codepoint_t glyph_id) const
  {
    switch (u.format) {
    case 1: return u.format1.get_class (glyph_id);
    case 2: return u.format2.get_class (glyph_id);




    default:return 0;
    }
  }

  unsigned get_population () const
  {
    switch (u.format) {
    case 1: return u.format1.get_population ();
    case 2: return u.format2.get_population ();




    default:return ((unsigned int) -1);
    }
  }

  template<typename Iterator,
    typename hb_enable_if<(((hb_is_source_of<Iterator, hb_codepoint_t>::value && Iterator::is_sorted_iterator)))>::type* = nullptr>
  bool serialize (hb_serialize_context_t *c, Iterator it_with_class_zero)
  {
    hb_no_trace_t<bool> trace;
    if ((__builtin_expect (!!(!c->extend_min (this)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 2024);

    auto it = + it_with_class_zero | hb_filter (hb_second);

    unsigned format = 2;
    hb_codepoint_t glyph_max = 0;
    if ((__builtin_expect (!!(it), 1)))
    {
      hb_codepoint_t glyph_min = (*it).first;
      glyph_max = glyph_min;

      unsigned num_glyphs = 0;
      unsigned num_ranges = 1;
      hb_codepoint_t prev_gid = glyph_min;
      unsigned prev_klass = (*it).second;

      for (const auto gid_klass_pair : it)
      {
 hb_codepoint_t cur_gid = gid_klass_pair.first;
 unsigned cur_klass = gid_klass_pair.second;
        num_glyphs++;
 if (cur_gid == glyph_min) continue;
        if (cur_gid > glyph_max) glyph_max = cur_gid;
 if (cur_gid != prev_gid + 1 ||
     cur_klass != prev_klass)
   num_ranges++;

 prev_gid = cur_gid;
 prev_klass = cur_klass;
      }

      if (num_glyphs && 1 + (glyph_max - glyph_min + 1) <= num_ranges * 3)
 format = 1;
    }






    u.format = format;

    switch (u.format)
    {
    case 1: return trace.ret (u.format1.serialize (c, it), __PRETTY_FUNCTION__, 2068);
    case 2: return trace.ret (u.format2.serialize (c, it), __PRETTY_FUNCTION__, 2069);




    default:return trace.ret (false, __PRETTY_FUNCTION__, 2074);
    }
  }

  bool subset (hb_subset_context_t *c,
        hb_map_t *klass_map = nullptr ,
               bool keep_empty_table = true,
               bool use_class_zero = true,
               const Coverage* glyph_filter = nullptr) const
  {
    hb_no_trace_t<bool> trace;
    switch (u.format) {
    case 1: return trace.ret (u.format1.subset (c, klass_map, keep_empty_table, use_class_zero, glyph_filter), __PRETTY_FUNCTION__, 2086);
    case 2: return trace.ret (u.format2.subset (c, klass_map, keep_empty_table, use_class_zero, glyph_filter), __PRETTY_FUNCTION__, 2087);




    default:return trace.ret (false, __PRETTY_FUNCTION__, 2092);
    }
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    if (!u.format.sanitize (c)) return trace.ret (false, __PRETTY_FUNCTION__, 2099);
    switch (u.format) {
    case 1: return trace.ret (u.format1.sanitize (c), __PRETTY_FUNCTION__, 2101);
    case 2: return trace.ret (u.format2.sanitize (c), __PRETTY_FUNCTION__, 2102);




    default:return trace.ret (true, __PRETTY_FUNCTION__, 2107);
    }
  }

  unsigned cost () const
  {
    switch (u.format) {
    case 1: return u.format1.cost ();
    case 2: return u.format2.cost ();




    default:return 0u;
    }
  }



  template <typename set_t>
  bool collect_coverage (set_t *glyphs) const
  {
    switch (u.format) {
    case 1: return u.format1.collect_coverage (glyphs);
    case 2: return u.format2.collect_coverage (glyphs);




    default:return false;
    }
  }



  template <typename set_t>
  bool collect_class (set_t *glyphs, unsigned int klass) const
  {
    switch (u.format) {
    case 1: return u.format1.collect_class (glyphs, klass);
    case 2: return u.format2.collect_class (glyphs, klass);




    default:return false;
    }
  }

  bool intersects (const hb_set_t *glyphs) const
  {
    switch (u.format) {
    case 1: return u.format1.intersects (glyphs);
    case 2: return u.format2.intersects (glyphs);




    default:return false;
    }
  }
  bool intersects_class (const hb_set_t *glyphs, unsigned int klass) const
  {
    switch (u.format) {
    case 1: return u.format1.intersects_class (glyphs, klass);
    case 2: return u.format2.intersects_class (glyphs, klass);




    default:return false;
    }
  }

  void intersected_class_glyphs (const hb_set_t *glyphs, unsigned klass, hb_set_t *intersect_glyphs) const
  {
    switch (u.format) {
    case 1: return u.format1.intersected_class_glyphs (glyphs, klass, intersect_glyphs);
    case 2: return u.format2.intersected_class_glyphs (glyphs, klass, intersect_glyphs);




    default:return;
    }
  }

  void intersected_classes (const hb_set_t *glyphs, hb_set_t *intersect_classes) const
  {
    switch (u.format) {
    case 1: return u.format1.intersected_classes (glyphs, intersect_classes);
    case 2: return u.format2.intersected_classes (glyphs, intersect_classes);




    default:return;
    }
  }


  protected:
  union {
  HBUINT16 format;
  ClassDefFormat1_3<SmallTypes> format1;
  ClassDefFormat2_4<SmallTypes> format2;




  } u;
  public:
  void _compiles_assertion_on_line_2219 () const { (void) this->u.format.static_size; } void _instance_assertion_on_line_2219 () const { static_assert ((sizeof(this->u.format) == (2)), ""); } static constexpr unsigned null_size = (2); static constexpr unsigned min_size = (2);
};

template<typename Iterator>
static inline bool ClassDef_serialize (hb_serialize_context_t *c,
           Iterator it)
{ return (c->start_embed<ClassDef> ()->serialize (c, it)); }






struct VarRegionAxis
{
  float evaluate (int coord) const
  {
    int start = startCoord.to_int (), peak = peakCoord.to_int (), end = endCoord.to_int ();


    if ((__builtin_expect (!!(start > peak || peak > end), 0)))
      return 1.;
    if ((__builtin_expect (!!(start < 0 && end > 0 && peak != 0), 0)))
      return 1.;

    if (peak == 0 || coord == peak)
      return 1.;

    if (coord <= start || end <= coord)
      return 0.;


    if (coord < peak)
      return float (coord - start) / (peak - start);
    else
      return float (end - coord) / (end - peak);
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this), __PRETTY_FUNCTION__, 2260);


  }

  public:
  F2DOT14 startCoord;
  F2DOT14 peakCoord;
  F2DOT14 endCoord;
  public:
  void _instance_assertion_on_line_2270 () const { static_assert ((sizeof (*this) == (6)), ""); } unsigned int get_size () const { return (6); } static constexpr unsigned null_size = (6); static constexpr unsigned min_size = (6); static constexpr unsigned static_size = (6);
};

#define REGION_CACHE_ITEM_CACHE_INVALID 2.f

struct VarRegionList
{
  using cache_t = float;

  float evaluate (unsigned int region_index,
    const int *coords, unsigned int coord_len,
    cache_t *cache = nullptr) const
  {
    if ((__builtin_expect (!!(region_index >= regionCount), 0)))
      return 0.;

    float *cached_value = nullptr;
    if (cache)
    {
      cached_value = &(cache[region_index]);
      if ((__builtin_expect (!!(*cached_value != 2.f), 1)))
 return *cached_value;
    }

    const VarRegionAxis *axes = axesZ.arrayZ + (region_index * axisCount);

    float v = 1.;
    unsigned int count = axisCount;
    for (unsigned int i = 0; i < count; i++)
    {
      int coord = i < coord_len ? coords[i] : 0;
      float factor = axes[i].evaluate (coord);
      if (factor == 0.f)
      {
        if (cache)
   *cached_value = 0.;
 return 0.;
      }
      v *= factor;
    }

    if (cache)
      *cached_value = v;
    return v;
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this) && axesZ.sanitize (c, axisCount * regionCount), __PRETTY_FUNCTION__, 2319);
  }

  bool serialize (hb_serialize_context_t *c, const VarRegionList *src, const hb_bimap_t &region_map)
  {
    hb_no_trace_t<bool> trace;
    if ((__builtin_expect (!!(!c->extend_min (this)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 2325);
    axisCount = src->axisCount;
    regionCount = region_map.get_population ();
    if ((__builtin_expect (!!(hb_unsigned_mul_overflows (axisCount * regionCount, VarRegionAxis::static_size)), 0))
                                      ) return trace.ret (false, __PRETTY_FUNCTION__, 2329);
    if ((__builtin_expect (!!(!c->extend (this)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 2330);
    unsigned int region_count = src->regionCount;
    for (unsigned int r = 0; r < regionCount; r++)
    {
      unsigned int backward = region_map.backward (r);
      if (backward >= region_count) return trace.ret (false, __PRETTY_FUNCTION__, 2335);
      hb_memcpy (&axesZ[axisCount * r], &src->axesZ[axisCount * backward], VarRegionAxis::static_size * axisCount);
    }

    return trace.ret (true, __PRETTY_FUNCTION__, 2339);
  }

  unsigned int get_size () const { return min_size + VarRegionAxis::static_size * axisCount * regionCount; }

  public:
  HBUINT16 axisCount;
  HBUINT15 regionCount;
  protected:
  UnsizedArrayOf<VarRegionAxis>
  axesZ;
  public:
  void _compiles_assertion_on_line_2351 () const { (void) (axesZ)[0].static_size; } void _instance_assertion_on_line_2351 () const { static_assert ((sizeof (*this) == (4) + (1 +0) * sizeof ((axesZ)[0])), ""); } static constexpr unsigned null_size = (4); static constexpr unsigned min_size = (4);
};

struct VarData
{
  unsigned int get_item_count () const
  { return itemCount; }

  unsigned int get_region_index_count () const
  { return regionIndices.len; }

  unsigned int get_row_size () const
  { return (wordCount () + regionIndices.len) * (longWords () ? 2 : 1); }

  unsigned int get_size () const
  { return min_size
  - regionIndices.min_size + regionIndices.get_size ()
  + itemCount * get_row_size ();
  }

  float get_delta (unsigned int inner,
     const int *coords, unsigned int coord_count,
     const VarRegionList &regions,
     VarRegionList::cache_t *cache = nullptr) const
  {
    if ((__builtin_expect (!!(inner >= itemCount), 0)))
      return 0.;

   unsigned int count = regionIndices.len;
   bool is_long = longWords ();
   unsigned word_count = wordCount ();
   unsigned int scount = is_long ? count : word_count;
   unsigned int lcount = is_long ? word_count : 0;

   const HBUINT8 *bytes = get_delta_bytes ();
   const HBUINT8 *row = bytes + inner * get_row_size ();

   float delta = 0.;
   unsigned int i = 0;

   const HBINT32 *lcursor = reinterpret_cast<const HBINT32 *> (row);
   for (; i < lcount; i++)
   {
     float scalar = regions.evaluate (regionIndices.arrayZ[i], coords, coord_count, cache);
     delta += scalar * *lcursor++;
   }
   const HBINT16 *scursor = reinterpret_cast<const HBINT16 *> (lcursor);
   for (; i < scount; i++)
   {
     float scalar = regions.evaluate (regionIndices.arrayZ[i], coords, coord_count, cache);
     delta += scalar * *scursor++;
   }
   const HBINT8 *bcursor = reinterpret_cast<const HBINT8 *> (scursor);
   for (; i < count; i++)
   {
     float scalar = regions.evaluate (regionIndices.arrayZ[i], coords, coord_count, cache);
     delta += scalar * *bcursor++;
   }

   return delta;
  }

  void get_region_scalars (const int *coords, unsigned int coord_count,
      const VarRegionList &regions,
      float *scalars ,
      unsigned int num_scalars) const
  {
    unsigned count = hb_min (num_scalars, regionIndices.len);
    for (unsigned int i = 0; i < count; i++)
      scalars[i] = regions.evaluate (regionIndices.arrayZ[i], coords, coord_count);
    for (unsigned int i = count; i < num_scalars; i++)
      scalars[i] = 0.f;
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this) && regionIndices.sanitize (c) && wordCount () <= regionIndices.len && c->check_range (get_delta_bytes (), itemCount, get_row_size ()), __PRETTY_FUNCTION__, 2428)




                       ;
  }

  bool serialize (hb_serialize_context_t *c,
    const VarData *src,
    const hb_inc_bimap_t &inner_map,
    const hb_bimap_t &region_map)
  {
    hb_no_trace_t<bool> trace;
    if ((__builtin_expect (!!(!c->extend_min (this)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 2442);
    itemCount = inner_map.get_next_value ();


    unsigned ri_count = src->regionIndices.len;
    enum delta_size_t { kZero=0, kNonWord, kWord };
    hb_vector_t<delta_size_t> delta_sz;
    hb_vector_t<unsigned int> ri_map;
    delta_sz.resize (ri_count);
    ri_map.resize (ri_count);
    unsigned int new_word_count = 0;
    unsigned int r;

    const HBUINT8 *src_delta_bytes = src->get_delta_bytes ();
    unsigned src_row_size = src->get_row_size ();
    unsigned src_word_count = src->wordCount ();
    bool src_long_words = src->longWords ();

    bool has_long = false;
    if (src_long_words)
    {
      for (r = 0; r < src_word_count; r++)
      {
 for (unsigned int i = 0; i < inner_map.get_next_value (); i++)
 {
   unsigned int old = inner_map.backward (i);
   int32_t delta = src->get_item_delta_fast (old, r, src_delta_bytes, src_row_size);
   if (delta < -65536 || 65535 < delta)
   {
     has_long = true;
     break;
   }
        }
      }
    }

    signed min_threshold = has_long ? -65536 : -128;
    signed max_threshold = has_long ? +65535 : +127;
    for (r = 0; r < ri_count; r++)
    {
      bool short_circuit = src_long_words == has_long && src_word_count <= r;

      delta_sz[r] = kZero;
      for (unsigned int i = 0; i < inner_map.get_next_value (); i++)
      {
 unsigned int old = inner_map.backward (i);
 int32_t delta = src->get_item_delta_fast (old, r, src_delta_bytes, src_row_size);
 if (delta < min_threshold || max_threshold < delta)
 {
   delta_sz[r] = kWord;
   new_word_count++;
   break;
 }
 else if (delta != 0)
 {
   delta_sz[r] = kNonWord;
   if (short_circuit)
     break;
 }
      }
    }

    unsigned int word_index = 0;
    unsigned int non_word_index = new_word_count;
    unsigned int new_ri_count = 0;
    for (r = 0; r < ri_count; r++)
      if (delta_sz[r])
      {
 unsigned new_r = (delta_sz[r] == kWord)? word_index++ : non_word_index++;
 ri_map[new_r] = r;
 new_ri_count++;
      }

    wordSizeCount = new_word_count | (has_long ? 0x8000u : 0);

    regionIndices.len = new_ri_count;

    if ((__builtin_expect (!!(!c->extend (this)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 2519);

    for (r = 0; r < new_ri_count; r++)
      regionIndices[r] = region_map[src->regionIndices[ri_map[r]]];

    HBUINT8 *delta_bytes = get_delta_bytes ();
    unsigned row_size = get_row_size ();
    unsigned count = itemCount;
    for (unsigned int i = 0; i < count; i++)
    {
      unsigned int old = inner_map.backward (i);
      for (unsigned int r = 0; r < new_ri_count; r++)
 set_item_delta_fast (i, r,
        src->get_item_delta_fast (old, ri_map[r],
             src_delta_bytes, src_row_size),
        delta_bytes, row_size);
    }

    return trace.ret (true, __PRETTY_FUNCTION__, 2537);
  }

  void collect_region_refs (hb_set_t &region_indices, const hb_inc_bimap_t &inner_map) const
  {
    const HBUINT8 *delta_bytes = get_delta_bytes ();
    unsigned row_size = get_row_size ();

    for (unsigned int r = 0; r < regionIndices.len; r++)
    {
      unsigned int region = regionIndices.arrayZ[r];
      if (region_indices.has (region)) continue;
      for (unsigned int i = 0; i < inner_map.get_next_value (); i++)
 if (get_item_delta_fast (inner_map.backward (i), r, delta_bytes, row_size) != 0)
 {
   region_indices.add (region);
   break;
 }
    }
  }

  protected:
  const HBUINT8 *get_delta_bytes () const
  { return &StructAfter<HBUINT8> (regionIndices); }

  HBUINT8 *get_delta_bytes ()
  { return &StructAfter<HBUINT8> (regionIndices); }

  int32_t get_item_delta_fast (unsigned int item, unsigned int region,
          const HBUINT8 *delta_bytes, unsigned row_size) const
  {
    if ((__builtin_expect (!!(item >= itemCount || region >= regionIndices.len), 0))) return 0;

    const HBINT8 *p = (const HBINT8 *) delta_bytes + item * row_size;
    unsigned word_count = wordCount ();
    bool is_long = longWords ();
    if (is_long)
    {
      if (region < word_count)
 return ((const HBINT32 *) p)[region];
      else
 return ((const HBINT16 *)(p + HBINT32::static_size * word_count))[region - word_count];
    }
    else
    {
      if (region < word_count)
 return ((const HBINT16 *) p)[region];
      else
 return (p + HBINT16::static_size * word_count)[region - word_count];
    }
  }
  int32_t get_item_delta (unsigned int item, unsigned int region) const
  {
     return get_item_delta_fast (item, region,
     get_delta_bytes (),
     get_row_size ());
  }

  void set_item_delta_fast (unsigned int item, unsigned int region, int32_t delta,
       HBUINT8 *delta_bytes, unsigned row_size)
  {
    HBINT8 *p = (HBINT8 *) delta_bytes + item * row_size;
    unsigned word_count = wordCount ();
    bool is_long = longWords ();
    if (is_long)
    {
      if (region < word_count)
 ((HBINT32 *) p)[region] = delta;
      else
 ((HBINT16 *)(p + HBINT32::static_size * word_count))[region - word_count] = delta;
    }
    else
    {
      if (region < word_count)
 ((HBINT16 *) p)[region] = delta;
      else
 (p + HBINT16::static_size * word_count)[region - word_count] = delta;
    }
  }
  void set_item_delta (unsigned int item, unsigned int region, int32_t delta)
  {
    set_item_delta_fast (item, region, delta,
    get_delta_bytes (),
    get_row_size ());
  }

  bool longWords () const { return wordSizeCount & 0x8000u ; }
  unsigned wordCount () const { return wordSizeCount & 0x7FFFu ; }

  protected:
  HBUINT16 itemCount;
  HBUINT16 wordSizeCount;
  Array16Of<HBUINT16> regionIndices;

  public:
  void _compiles_assertion_on_line_2632 () const { (void) (regionIndices)[0].static_size; } void _instance_assertion_on_line_2632 () const { static_assert ((sizeof (*this) == (6) + (1 +0) * sizeof ((regionIndices)[0])), ""); } static constexpr unsigned null_size = (6); static constexpr unsigned min_size = (6);
};

struct VariationStore
{
  using cache_t = VarRegionList::cache_t;

  cache_t *create_cache () const
  {



    auto &r = this+regions;
    unsigned count = r.regionCount;

    float *cache = (float *) malloc (sizeof (float) * count);
    if ((__builtin_expect (!!(!cache), 0))) return nullptr;

    for (unsigned i = 0; i < count; i++)
      cache[i] = 2.f;

    return cache;
  }

  static void destroy_cache (cache_t *cache) { free (cache); }

  private:
  float get_delta (unsigned int outer, unsigned int inner,
     const int *coords, unsigned int coord_count,
     VarRegionList::cache_t *cache = nullptr) const
  {




    if ((__builtin_expect (!!(outer >= dataSets.len), 0)))
      return 0.f;

    return (this+dataSets[outer]).get_delta (inner,
          coords, coord_count,
          this+regions,
          cache);
  }

  public:
  float get_delta (unsigned int index,
     const int *coords, unsigned int coord_count,
     VarRegionList::cache_t *cache = nullptr) const
  {
    unsigned int outer = index >> 16;
    unsigned int inner = index & 0xFFFF;
    return get_delta (outer, inner, coords, coord_count, cache);
  }
  float get_delta (unsigned int index,
     hb_array_t<int> coords,
     VarRegionList::cache_t *cache = nullptr) const
  {
    return get_delta (index,
        coords.arrayZ, coords.length,
        cache);
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {




    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this) && format == 1 && regions.sanitize (c, this) && dataSets.sanitize (c, this), __PRETTY_FUNCTION__, 2701)


                                ;
  }

  bool serialize (hb_serialize_context_t *c,
    const VariationStore *src,
    const hb_array_t <const hb_inc_bimap_t> &inner_maps)
  {
    hb_no_trace_t<bool> trace;




    if ((__builtin_expect (!!(!c->extend_min (this)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 2716);

    unsigned int set_count = 0;
    for (unsigned int i = 0; i < inner_maps.length; i++)
      if (inner_maps[i].get_population ())
 set_count++;

    format = 1;

    const auto &src_regions = src+src->regions;

    hb_set_t region_indices;
    for (unsigned int i = 0; i < inner_maps.length; i++)
      (src+src->dataSets[i]).collect_region_refs (region_indices, inner_maps[i]);

    if (region_indices.in_error ())
      return trace.ret (false, __PRETTY_FUNCTION__, 2732);

    region_indices.del_range ((src_regions).regionCount, hb_set_t::INVALID);


    hb_inc_bimap_t region_map;
    + hb_iter (region_indices)
    | hb_apply ([&region_map] (unsigned _) { region_map.add(_); })
    ;
    if (region_map.in_error())
      return trace.ret (false, __PRETTY_FUNCTION__, 2742);

    if ((__builtin_expect (!!(!regions.serialize_serialize (c, &src_regions, region_map)), 0)))
      return trace.ret (false, __PRETTY_FUNCTION__, 2745);

    dataSets.len = set_count;
    if ((__builtin_expect (!!(!c->extend (dataSets)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 2748);



    unsigned int set_index = 0;
    for (unsigned int i = 0; i < inner_maps.length; i++)
    {
      if (!inner_maps[i].get_population ()) continue;
      if ((__builtin_expect (!!(!dataSets[set_index++] .serialize_serialize (c, &(src+src->dataSets[i]), inner_maps[i], region_map)), 0))
                                                                                    )
 return trace.ret (false, __PRETTY_FUNCTION__, 2758);
    }

    return trace.ret (true, __PRETTY_FUNCTION__, 2761);
  }

  VariationStore *copy (hb_serialize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    auto *out = c->start_embed (this);
    if ((__builtin_expect (!!(!out), 0))) return trace.ret (nullptr, __PRETTY_FUNCTION__, 2768);

    hb_vector_t <hb_inc_bimap_t> inner_maps;
    unsigned count = dataSets.len;
    for (unsigned i = 0; i < count; i++)
    {
      hb_inc_bimap_t *map = inner_maps.push ();
      auto &data = this+dataSets[i];

      unsigned itemCount = data.get_item_count ();
      for (unsigned j = 0; j < itemCount; j++)
 map->add (j);
    }

    if ((__builtin_expect (!!(!out->serialize (c, this, inner_maps)), 0))) return trace.ret (nullptr, __PRETTY_FUNCTION__, 2782);

    return trace.ret (out, __PRETTY_FUNCTION__, 2784);
  }

  bool subset (hb_subset_context_t *c, const hb_array_t<const hb_inc_bimap_t> &inner_maps) const
  {
    hb_no_trace_t<bool> trace;




    VariationStore *varstore_prime = c->serializer->start_embed<VariationStore> ();
    if ((__builtin_expect (!!(!varstore_prime), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 2795);

    varstore_prime->serialize (c->serializer, this, inner_maps);

    return trace.ret (!c->serializer->in_error() && varstore_prime->dataSets, __PRETTY_FUNCTION__, 2799)

                                    ;
  }

  unsigned int get_region_index_count (unsigned int major) const
  {



    return (this+dataSets[major]).get_region_index_count ();
  }

  void get_region_scalars (unsigned int major,
      const int *coords, unsigned int coord_count,
      float *scalars ,
      unsigned int num_scalars) const
  {






    (this+dataSets[major]).get_region_scalars (coords, coord_count,
            this+regions,
            &scalars[0], num_scalars);
  }

  unsigned int get_sub_table_count () const
   {



     return dataSets.len;
   }

  protected:
  HBUINT16 format;
  Offset32To<VarRegionList> regions;
  Array16OfOffset32To<VarData> dataSets;
  public:
  unsigned int get_size () const { return (8 - (dataSets).min_size + (dataSets).get_size ()); } void _compiles_assertion_on_line_2841 () const { (void) (dataSets)[0].static_size; } void _instance_assertion_on_line_2841 () const { static_assert ((sizeof (*this) == (8) + (1 +0) * sizeof ((dataSets)[0])), ""); } static constexpr unsigned null_size = (8); static constexpr unsigned min_size = (8);
};

#undef REGION_CACHE_ITEM_CACHE_INVALID




enum Cond_with_Var_flag_t
{
  KEEP_COND_WITH_VAR = 0,
  DROP_COND_WITH_VAR = 1,
  DROP_RECORD_WITH_VAR = 2,
  MEM_ERR_WITH_VAR = 3,
};

struct ConditionFormat1
{
  friend struct Condition;

  bool subset (hb_subset_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    auto *out = c->serializer->embed (this);
    if ((__builtin_expect (!!(!out), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 2865);

    const hb_map_t *index_map = &c->plan->axes_index_map;
    if (index_map->is_empty ()) return trace.ret (true, __PRETTY_FUNCTION__, 2868);

    if (!index_map->has (axisIndex))
      return trace.ret (false, __PRETTY_FUNCTION__, 2871);

    return trace.ret (c->serializer->check_assign (out->axisIndex, index_map->get (axisIndex), HB_SERIALIZE_ERROR_INT_OVERFLOW), __PRETTY_FUNCTION__, 2873)
                                                                                ;
  }

  private:
  Cond_with_Var_flag_t keep_with_variations (hb_collect_feature_substitutes_with_var_context_t *c,
                                             hb_map_t *condition_map ) const
  {

    if (!c->axes_index_tag_map->has (axisIndex))
      return DROP_RECORD_WITH_VAR;

    hb_tag_t axis_tag = c->axes_index_tag_map->get (axisIndex);


    if (!c->axes_location->has (axis_tag))
    {


      int16_t min_val = filterRangeMinValue.to_int ();
      int16_t max_val = filterRangeMaxValue.to_int ();
      hb_codepoint_t val = (max_val << 16) + min_val;

      condition_map->set (axisIndex, val);
      return KEEP_COND_WITH_VAR;
    }



    int v = c->axes_location->get (axis_tag);


    if (v < filterRangeMinValue.to_int () || v > filterRangeMaxValue.to_int ())
      return DROP_RECORD_WITH_VAR;


    return DROP_COND_WITH_VAR;
  }

  bool evaluate (const int *coords, unsigned int coord_len) const
  {
    int coord = axisIndex < coord_len ? coords[axisIndex] : 0;
    return filterRangeMinValue.to_int () <= coord && coord <= filterRangeMaxValue.to_int ();
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this), __PRETTY_FUNCTION__, 2921);
  }

  protected:
  HBUINT16 format;
  HBUINT16 axisIndex;
  F2DOT14 filterRangeMinValue;
  F2DOT14 filterRangeMaxValue;
  public:
  void _instance_assertion_on_line_2930 () const { static_assert ((sizeof (*this) == (8)), ""); } unsigned int get_size () const { return (8); } static constexpr unsigned null_size = (8); static constexpr unsigned min_size = (8); static constexpr unsigned static_size = (8);
};

struct Condition
{
  bool evaluate (const int *coords, unsigned int coord_len) const
  {
    switch (u.format) {
    case 1: return u.format1.evaluate (coords, coord_len);
    default:return false;
    }
  }

  Cond_with_Var_flag_t keep_with_variations (hb_collect_feature_substitutes_with_var_context_t *c,
                                             hb_map_t *condition_map ) const
  {
    switch (u.format) {
    case 1: return u.format1.keep_with_variations (c, condition_map);
    default:return KEEP_COND_WITH_VAR;
    }
  }

  template <typename context_t, typename ...Ts>
  typename context_t::return_t dispatch (context_t *c, Ts&&... ds) const
  {
    if ((__builtin_expect (!!(!c->may_dispatch (this, &u.format)), 0))) return c->no_dispatch_return_value ();
    hb_no_trace_t<typename context_t::return_t> trace;
    switch (u.format) {
    case 1: return trace.ret (c->dispatch (u.format1, std::forward<Ts> (ds)...), __PRETTY_FUNCTION__, 2958);
    default:return trace.ret (c->default_return_value (), __PRETTY_FUNCTION__, 2959);
    }
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    if (!u.format.sanitize (c)) return trace.ret (false, __PRETTY_FUNCTION__, 2966);
    switch (u.format) {
    case 1: return trace.ret (u.format1.sanitize (c), __PRETTY_FUNCTION__, 2968);
    default:return trace.ret (true, __PRETTY_FUNCTION__, 2969);
    }
  }

  protected:
  union {
  HBUINT16 format;
  ConditionFormat1 format1;
  } u;
  public:
  void _compiles_assertion_on_line_2979 () const { (void) this->u.format.static_size; } void _instance_assertion_on_line_2979 () const { static_assert ((sizeof(this->u.format) == (2)), ""); } static constexpr unsigned null_size = (2); static constexpr unsigned min_size = (2);
};

struct ConditionSet
{
  bool evaluate (const int *coords, unsigned int coord_len) const
  {
    unsigned int count = conditions.len;
    for (unsigned int i = 0; i < count; i++)
      if (!(this+conditions.arrayZ[i]).evaluate (coords, coord_len))
 return false;
    return true;
  }

  Cond_with_Var_flag_t keep_with_variations (hb_collect_feature_substitutes_with_var_context_t *c) const
  {
    hb_map_t *condition_map = hb_map_create ();
    if ((__builtin_expect (!!(!condition_map), 0))) return MEM_ERR_WITH_VAR;
    hb::shared_ptr<hb_map_t> p {condition_map};

    hb_set_t *cond_set = hb_set_create ();
    if ((__builtin_expect (!!(!cond_set), 0))) return MEM_ERR_WITH_VAR;
    hb::shared_ptr<hb_set_t> s {cond_set};

    unsigned num_kept_cond = 0, cond_idx = 0;
    for (const auto& offset : conditions)
    {
      Cond_with_Var_flag_t ret = (this+offset).keep_with_variations (c, condition_map);

      if (ret == DROP_RECORD_WITH_VAR)
        return DROP_RECORD_WITH_VAR;


      if (ret == KEEP_COND_WITH_VAR)
      {
        cond_set->add (cond_idx);
        num_kept_cond++;
      }
      cond_idx++;
    }


    if (num_kept_cond == 0) return DROP_COND_WITH_VAR;


    if (c->conditionset_map->has (p))

      return DROP_RECORD_WITH_VAR;

    c->conditionset_map->set (p, 1);
    c->record_cond_idx_map->set (c->cur_record_idx, s);

    return KEEP_COND_WITH_VAR;
  }

  bool subset (hb_subset_context_t *c,
               hb_subset_layout_context_t *l) const
  {
    hb_no_trace_t<bool> trace;
    auto *out = c->serializer->start_embed (this);
    if ((__builtin_expect (!!(!out || !c->serializer->extend_min (out)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 3039);

    hb_set_t *retained_cond_set = nullptr;
    if (l->feature_record_cond_idx_map != nullptr)
      retained_cond_set = l->feature_record_cond_idx_map->get (l->cur_feature_var_record_idx);

    unsigned int count = conditions.len;
    for (unsigned int i = 0; i < count; i++)
    {
      if (retained_cond_set != nullptr && !retained_cond_set->has (i))
        continue;
      subset_offset_array (c, out->conditions, this) (conditions[i]);
    }

    return trace.ret (bool (out->conditions), __PRETTY_FUNCTION__, 3053);
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (conditions.sanitize (c, this), __PRETTY_FUNCTION__, 3059);
  }

  protected:
  Array16OfOffset32To<Condition> conditions;
  public:
  void _compiles_assertion_on_line_3065 () const { (void) (conditions)[0].static_size; } void _instance_assertion_on_line_3065 () const { static_assert ((sizeof (*this) == (2) + (1 +0) * sizeof ((conditions)[0])), ""); } static constexpr unsigned null_size = (2); static constexpr unsigned min_size = (2);
};

struct FeatureTableSubstitutionRecord
{
  friend struct FeatureTableSubstitution;

  void collect_lookups (const void *base, hb_set_t *lookup_indexes ) const
  {
    return (base+feature).add_lookup_indexes_to (lookup_indexes);
  }

  void closure_features (const void *base,
    const hb_map_t *lookup_indexes,
    hb_set_t *feature_indexes ) const
  {
    if ((base+feature).intersects_lookup_indexes (lookup_indexes))
      feature_indexes->add (featureIndex);
  }

  void collect_feature_substitutes_with_variations (hb_hashmap_t<unsigned, const Feature*> *feature_substitutes_map,
                                                    const hb_set_t *feature_indices,
                                                    const void *base) const
  {
    if (feature_indices->has (featureIndex))
      feature_substitutes_map->set (featureIndex, &(base+feature));
  }

  bool subset (hb_subset_layout_context_t *c, const void *base) const
  {
    hb_no_trace_t<bool> trace;
    if (!c->feature_index_map->has (featureIndex) ||
        c->feature_substitutes_map->has (featureIndex)) {


      return trace.ret (false, __PRETTY_FUNCTION__, 3100);
    }

    auto *out = c->subset_context->serializer->embed (this);
    if ((__builtin_expect (!!(!out), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 3104);

    out->featureIndex = c->feature_index_map->get (featureIndex);
    bool ret = out->feature.serialize_subset (c->subset_context, feature, base, c);
    return trace.ret (ret, __PRETTY_FUNCTION__, 3108);
  }

  bool sanitize (hb_sanitize_context_t *c, const void *base) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this) && feature.sanitize (c, base), __PRETTY_FUNCTION__, 3114);
  }

  protected:
  HBUINT16 featureIndex;
  Offset32To<Feature> feature;
  public:
  void _instance_assertion_on_line_3121 () const { static_assert ((sizeof (*this) == (6)), ""); } unsigned int get_size () const { return (6); } static constexpr unsigned null_size = (6); static constexpr unsigned min_size = (6); static constexpr unsigned static_size = (6);
};

struct FeatureTableSubstitution
{
  const Feature *find_substitute (unsigned int feature_index) const
  {
    unsigned int count = substitutions.len;
    for (unsigned int i = 0; i < count; i++)
    {
      const FeatureTableSubstitutionRecord &record = substitutions.arrayZ[i];
      if (record.featureIndex == feature_index)
 return &(this+record.feature);
    }
    return nullptr;
  }

  void collect_lookups (const hb_set_t *feature_indexes,
   const hb_hashmap_t<unsigned, const Feature*> *feature_substitutes_map,
   hb_set_t *lookup_indexes ) const
  {
    + hb_iter (substitutions)
    | hb_filter (feature_indexes, &FeatureTableSubstitutionRecord::featureIndex)
    | hb_filter ([feature_substitutes_map] (const FeatureTableSubstitutionRecord& record)
                 {
                   if (feature_substitutes_map == nullptr) return true;
                   return !feature_substitutes_map->has (record.featureIndex);
                 })
    | hb_apply ([this, lookup_indexes] (const FeatureTableSubstitutionRecord& r)
  { r.collect_lookups (this, lookup_indexes); })
    ;
  }

  void closure_features (const hb_map_t *lookup_indexes,
    hb_set_t *feature_indexes ) const
  {
    for (const FeatureTableSubstitutionRecord& record : substitutions)
      record.closure_features (this, lookup_indexes, feature_indexes);
  }

  bool intersects_features (const hb_map_t *feature_index_map) const
  {
    for (const FeatureTableSubstitutionRecord& record : substitutions)
    {
      if (feature_index_map->has (record.featureIndex)) return true;
    }
    return false;
  }

  void collect_feature_substitutes_with_variations (hb_collect_feature_substitutes_with_var_context_t *c) const
  {
    for (const FeatureTableSubstitutionRecord& record : substitutions)
      record.collect_feature_substitutes_with_variations (c->feature_substitutes_map, c->feature_indices, this);
  }

  bool subset (hb_subset_context_t *c,
        hb_subset_layout_context_t *l) const
  {
    hb_no_trace_t<bool> trace;
    auto *out = c->serializer->start_embed (*this);
    if ((__builtin_expect (!!(!out || !c->serializer->extend_min (out)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 3181);

    out->version.major = version.major;
    out->version.minor = version.minor;

    + substitutions.iter ()
    | hb_apply (subset_record_array (l, &(out->substitutions), this))
    ;

    return trace.ret (bool (out->substitutions), __PRETTY_FUNCTION__, 3190);
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (version.sanitize (c) && (__builtin_expect (!!(version.major == 1), 1)) && substitutions.sanitize (c, this), __PRETTY_FUNCTION__, 3196)

                                     ;
  }

  protected:
  FixedVersion<> version;
  Array16Of<FeatureTableSubstitutionRecord>
   substitutions;
  public:
  void _compiles_assertion_on_line_3206 () const { (void) (substitutions)[0].static_size; } void _instance_assertion_on_line_3206 () const { static_assert ((sizeof (*this) == (6) + (1 +0) * sizeof ((substitutions)[0])), ""); } static constexpr unsigned null_size = (6); static constexpr unsigned min_size = (6);
};

struct FeatureVariationRecord
{
  friend struct FeatureVariations;

  void collect_lookups (const void *base,
   const hb_set_t *feature_indexes,
   const hb_hashmap_t<unsigned, const Feature*> *feature_substitutes_map,
   hb_set_t *lookup_indexes ) const
  {
    return (base+substitutions).collect_lookups (feature_indexes, feature_substitutes_map, lookup_indexes);
  }

  void closure_features (const void *base,
    const hb_map_t *lookup_indexes,
    hb_set_t *feature_indexes ) const
  {
    (base+substitutions).closure_features (lookup_indexes, feature_indexes);
  }

  bool intersects_features (const void *base, const hb_map_t *feature_index_map) const
  {
    return (base+substitutions).intersects_features (feature_index_map);
  }

  void collect_feature_substitutes_with_variations (hb_collect_feature_substitutes_with_var_context_t *c,
                                                    const void *base) const
  {

    if ((base+conditions).keep_with_variations (c) == DROP_COND_WITH_VAR &&
        c->apply)
    {
      (base+substitutions).collect_feature_substitutes_with_variations (c);
      c->apply = false;
    }
  }

  bool subset (hb_subset_layout_context_t *c, const void *base) const
  {
    hb_no_trace_t<bool> trace;
    auto *out = c->subset_context->serializer->embed (this);
    if ((__builtin_expect (!!(!out), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 3249);

    out->conditions.serialize_subset (c->subset_context, conditions, base, c);
    out->substitutions.serialize_subset (c->subset_context, substitutions, base, c);

    return trace.ret (true, __PRETTY_FUNCTION__, 3254);
  }

  bool sanitize (hb_sanitize_context_t *c, const void *base) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (conditions.sanitize (c, base) && substitutions.sanitize (c, base), __PRETTY_FUNCTION__, 3260)
                                     ;
  }

  protected:
  Offset32To<ConditionSet>
   conditions;
  Offset32To<FeatureTableSubstitution>
   substitutions;
  public:
  void _instance_assertion_on_line_3270 () const { static_assert ((sizeof (*this) == (8)), ""); } unsigned int get_size () const { return (8); } static constexpr unsigned null_size = (8); static constexpr unsigned min_size = (8); static constexpr unsigned static_size = (8);
};

struct FeatureVariations
{
  static constexpr unsigned NOT_FOUND_INDEX = 0xFFFFFFFFu;

  bool find_index (const int *coords, unsigned int coord_len,
     unsigned int *index) const
  {
    unsigned int count = varRecords.len;
    for (unsigned int i = 0; i < count; i++)
    {
      const FeatureVariationRecord &record = varRecords.arrayZ[i];
      if ((this+record.conditions).evaluate (coords, coord_len))
      {
 *index = i;
 return true;
      }
    }
    *index = NOT_FOUND_INDEX;
    return false;
  }

  const Feature *find_substitute (unsigned int variations_index,
      unsigned int feature_index) const
  {
    const FeatureVariationRecord &record = varRecords[variations_index];
    return (this+record.substitutions).find_substitute (feature_index);
  }

  void collect_feature_substitutes_with_variations (hb_collect_feature_substitutes_with_var_context_t *c) const
  {
    unsigned int count = varRecords.len;
    for (unsigned int i = 0; i < count; i++)
    {
      c->cur_record_idx = i;
      varRecords[i].collect_feature_substitutes_with_variations (c, this);
    }
  }

  FeatureVariations* copy (hb_serialize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->embed (*this), __PRETTY_FUNCTION__, 3314);
  }

  void collect_lookups (const hb_set_t *feature_indexes,
   const hb_hashmap_t<unsigned, const Feature*> *feature_substitutes_map,
   hb_set_t *lookup_indexes ) const
  {
    for (const FeatureVariationRecord& r : varRecords)
      r.collect_lookups (this, feature_indexes, feature_substitutes_map, lookup_indexes);
  }

  void closure_features (const hb_map_t *lookup_indexes,
    const hb_hashmap_t<unsigned, hb::shared_ptr<hb_set_t>> *feature_record_cond_idx_map,
    hb_set_t *feature_indexes ) const
  {
    unsigned int count = varRecords.len;
    for (unsigned int i = 0; i < count; i++)
    {
      if (feature_record_cond_idx_map != nullptr &&
          !feature_record_cond_idx_map->has (i))
        continue;
      varRecords[i].closure_features (this, lookup_indexes, feature_indexes);
    }
  }

  bool subset (hb_subset_context_t *c,
        hb_subset_layout_context_t *l) const
  {
    hb_no_trace_t<bool> trace;
    auto *out = c->serializer->start_embed (*this);
    if ((__builtin_expect (!!(!out || !c->serializer->extend_min (out)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 3344);

    out->version.major = version.major;
    out->version.minor = version.minor;

    int keep_up_to = -1;
    for (int i = varRecords.len - 1; i >= 0; i--) {
      if (varRecords[i].intersects_features (this, l->feature_index_map)) {
        keep_up_to = i;
        break;
      }
    }

    unsigned count = (unsigned) (keep_up_to + 1);
    for (unsigned i = 0; i < count; i++)
    {
      if (l->feature_record_cond_idx_map != nullptr &&
          !l->feature_record_cond_idx_map->has (i))
        continue;

      l->cur_feature_var_record_idx = i;
      subset_record_array (l, &(out->varRecords), this) (varRecords[i]);
    }
    return trace.ret (bool (out->varRecords), __PRETTY_FUNCTION__, 3367);
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (version.sanitize (c) && (__builtin_expect (!!(version.major == 1), 1)) && varRecords.sanitize (c, this), __PRETTY_FUNCTION__, 3373)

                                  ;
  }

  protected:
  FixedVersion<> version;
  Array32Of<FeatureVariationRecord>
   varRecords;
  public:
  unsigned int get_size () const { return (8 - (varRecords).min_size + (varRecords).get_size ()); } void _compiles_assertion_on_line_3383 () const { (void) (varRecords)[0].static_size; } void _instance_assertion_on_line_3383 () const { static_assert ((sizeof (*this) == (8) + (1 +0) * sizeof ((varRecords)[0])), ""); } static constexpr unsigned null_size = (8); static constexpr unsigned min_size = (8);
};






struct HintingDevice
{
  friend struct Device;

  private:

  hb_position_t get_x_delta (hb_font_t *font) const
  { return get_delta (font->x_ppem, font->x_scale); }

  hb_position_t get_y_delta (hb_font_t *font) const
  { return get_delta (font->y_ppem, font->y_scale); }

  public:

  unsigned int get_size () const
  {
    unsigned int f = deltaFormat;
    if ((__builtin_expect (!!(f < 1 || f > 3 || startSize > endSize), 0))) return 3 * HBUINT16::static_size;
    return HBUINT16::static_size * (4 + ((endSize - startSize) >> (4 - f)));
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this) && c->check_range (this, this->get_size ()), __PRETTY_FUNCTION__, 3415);
  }

  HintingDevice* copy (hb_serialize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->embed<HintingDevice> (this), __PRETTY_FUNCTION__, 3421);
  }

  private:

  int get_delta (unsigned int ppem, int scale) const
  {
    if (!ppem) return 0;

    int pixels = get_delta_pixels (ppem);

    if (!pixels) return 0;

    return (int) (pixels * (int64_t) scale / ppem);
  }
  int get_delta_pixels (unsigned int ppem_size) const
  {
    unsigned int f = deltaFormat;
    if ((__builtin_expect (!!(f < 1 || f > 3), 0)))
      return 0;

    if (ppem_size < startSize || ppem_size > endSize)
      return 0;

    unsigned int s = ppem_size - startSize;

    unsigned int byte = deltaValueZ[s >> (4 - f)];
    unsigned int bits = (byte >> (16 - (((s & ((1 << (4 - f)) - 1)) + 1) << f)));
    unsigned int mask = (0xFFFFu >> (16 - (1 << f)));

    int delta = bits & mask;

    if ((unsigned int) delta >= ((mask + 1) >> 1))
      delta -= mask + 1;

    return delta;
  }

  protected:
  HBUINT16 startSize;
  HBUINT16 endSize;
  HBUINT16 deltaFormat;




  UnsizedArrayOf<HBUINT16>
  deltaValueZ;
  public:
  void _compiles_assertion_on_line_3470 () const { (void) (deltaValueZ)[0].static_size; } void _instance_assertion_on_line_3470 () const { static_assert ((sizeof (*this) == (6) + (1 +0) * sizeof ((deltaValueZ)[0])), ""); } static constexpr unsigned null_size = (6); static constexpr unsigned min_size = (6);
};

struct VariationDevice
{
  friend struct Device;

  private:

  hb_position_t get_x_delta (hb_font_t *font,
        const VariationStore &store,
        VariationStore::cache_t *store_cache = nullptr) const
  { return font->em_scalef_x (get_delta (font, store, store_cache)); }

  hb_position_t get_y_delta (hb_font_t *font,
        const VariationStore &store,
        VariationStore::cache_t *store_cache = nullptr) const
  { return font->em_scalef_y (get_delta (font, store, store_cache)); }

  VariationDevice* copy (hb_serialize_context_t *c,
                         const hb_hashmap_t<unsigned, hb_pair_t<unsigned, int>> *layout_variation_idx_delta_map) const
  {
    hb_no_trace_t<bool> trace;
    if (!layout_variation_idx_delta_map) return trace.ret (nullptr, __PRETTY_FUNCTION__, 3493);

    hb_pair_t<unsigned, int> *v;
    if (!layout_variation_idx_delta_map->has (varIdx, &v))
      return trace.ret (nullptr, __PRETTY_FUNCTION__, 3497);

    c->start_zerocopy (this->static_size);
    auto *out = c->embed (this);
    if ((__builtin_expect (!!(!out), 0))) return trace.ret (nullptr, __PRETTY_FUNCTION__, 3501);

    unsigned new_idx = hb_first (*v);
    out->varIdx = new_idx;
    return trace.ret (out, __PRETTY_FUNCTION__, 3505);
  }

  void collect_variation_index (hb_collect_variation_indices_context_t *c) const
  {
    c->layout_variation_indices->add (varIdx);
    int delta = 0;
    if (c->font && c->var_store)
      delta = _hb_roundf(get_delta (c->font, *c->var_store, c->store_cache));



    c->varidx_delta_map->set (varIdx, hb_pair_t<unsigned, int> (0xFFFFFFFFu, delta));
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this), __PRETTY_FUNCTION__, 3523);
  }

  private:

  float get_delta (hb_font_t *font,
     const VariationStore &store,
     VariationStore::cache_t *store_cache = nullptr) const
  {
    return store.get_delta (varIdx, font->coords, font->num_coords, (VariationStore::cache_t *) store_cache);
  }

  protected:
  VarIdx varIdx;
  HBUINT16 deltaFormat;
  public:
  void _instance_assertion_on_line_3539 () const { static_assert ((sizeof (*this) == (6)), ""); } unsigned int get_size () const { return (6); } static constexpr unsigned null_size = (6); static constexpr unsigned min_size = (6); static constexpr unsigned static_size = (6);
};

struct DeviceHeader
{
  protected:
  HBUINT16 reserved1;
  HBUINT16 reserved2;
  public:
  HBUINT16 format;
  public:
  void _instance_assertion_on_line_3550 () const { static_assert ((sizeof (*this) == (6)), ""); } unsigned int get_size () const { return (6); } static constexpr unsigned null_size = (6); static constexpr unsigned min_size = (6); static constexpr unsigned static_size = (6);
};

struct Device
{
  hb_position_t get_x_delta (hb_font_t *font,
        const VariationStore &store=NullHelper<VariationStore>::get_null (),
        VariationStore::cache_t *store_cache = nullptr) const
  {
    switch (u.b.format)
    {

    case 1: case 2: case 3:
      return u.hinting.get_x_delta (font);


    case 0x8000:
      return u.variation.get_x_delta (font, store, store_cache);

    default:
      return 0;
    }
  }
  hb_position_t get_y_delta (hb_font_t *font,
        const VariationStore &store=NullHelper<VariationStore>::get_null (),
        VariationStore::cache_t *store_cache = nullptr) const
  {
    switch (u.b.format)
    {
    case 1: case 2: case 3:

      return u.hinting.get_y_delta (font);


    case 0x8000:
      return u.variation.get_y_delta (font, store, store_cache);

    default:
      return 0;
    }
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    if (!u.b.format.sanitize (c)) return trace.ret (false, __PRETTY_FUNCTION__, 3595);
    switch (u.b.format) {

    case 1: case 2: case 3:
      return trace.ret (u.hinting.sanitize (c), __PRETTY_FUNCTION__, 3599);


    case 0x8000:
      return trace.ret (u.variation.sanitize (c), __PRETTY_FUNCTION__, 3603);

    default:
      return trace.ret (true, __PRETTY_FUNCTION__, 3606);
    }
  }

  Device* copy (hb_serialize_context_t *c,
                const hb_hashmap_t<unsigned, hb_pair_t<unsigned, int>> *layout_variation_idx_delta_map=nullptr) const
  {
    hb_no_trace_t<bool> trace;
    switch (u.b.format) {

    case 1:
    case 2:
    case 3:
      return trace.ret (reinterpret_cast<Device *> (u.hinting.copy (c)), __PRETTY_FUNCTION__, 3619);


    case 0x8000:
      return trace.ret (reinterpret_cast<Device *> (u.variation.copy (c, layout_variation_idx_delta_map)), __PRETTY_FUNCTION__, 3623);

    default:
      return trace.ret (nullptr, __PRETTY_FUNCTION__, 3626);
    }
  }

  void collect_variation_indices (hb_collect_variation_indices_context_t *c) const
  {
    switch (u.b.format) {

    case 1:
    case 2:
    case 3:
      return;


    case 0x8000:
      u.variation.collect_variation_index (c);
      return;

    default:
      return;
    }
  }

  unsigned get_variation_index () const
  {
    switch (u.b.format) {

    case 0x8000:
      return u.variation.varIdx;

    default:
      return 0xFFFFFFFFu;
    }
  }

  protected:
  union {
  DeviceHeader b;
  HintingDevice hinting;

  VariationDevice variation;

  } u;
  public:
  void _compiles_assertion_on_line_3670 () const { (void) this->u.b.static_size; } void _instance_assertion_on_line_3670 () const { static_assert ((sizeof(this->u.b) == (6)), ""); } static constexpr unsigned null_size = (6); static constexpr unsigned min_size = (6);
};


}
# 33 "../harfbuzz-6.0.0/src/hb-aat-layout-morx-table.hh" 2
# 1 "../harfbuzz-6.0.0/src/hb-ot-layout-gdef-table.hh" 1
# 30 "../harfbuzz-6.0.0/src/hb-ot-layout-gdef-table.hh"
#define HB_OT_LAYOUT_GDEF_TABLE_HH 

# 1 "../harfbuzz-6.0.0/src/OT/Layout/GDEF/GDEF.hh" 1
# 30 "../harfbuzz-6.0.0/src/OT/Layout/GDEF/GDEF.hh"
#define OT_LAYOUT_GDEF_GDEF_HH 

# 1 "../harfbuzz-6.0.0/src/OT/Layout/GDEF/../../../hb-ot-layout-common.hh" 1
# 33 "../harfbuzz-6.0.0/src/OT/Layout/GDEF/GDEF.hh" 2

# 1 "../harfbuzz-6.0.0/src/OT/Layout/GDEF/../../../hb-font.hh" 1
# 35 "../harfbuzz-6.0.0/src/OT/Layout/GDEF/GDEF.hh" 2


namespace OT {







struct AttachPoint : Array16Of<HBUINT16>
{
  bool subset (hb_subset_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    auto *out = c->serializer->start_embed (*this);
    if ((__builtin_expect (!!(!out), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 51);

    return trace.ret (out->serialize (c->serializer, + iter ()), __PRETTY_FUNCTION__, 53);
  }
};

struct AttachList
{
  unsigned int get_attach_points (hb_codepoint_t glyph_id,
      unsigned int start_offset,
      unsigned int *point_count ,
      unsigned int *point_array ) const
  {
    unsigned int index = (this+coverage).get_coverage (glyph_id);
    if (index == ((unsigned int) -1))
    {
      if (point_count)
 *point_count = 0;
      return 0;
    }

    const AttachPoint &points = this+attachPoint[index];

    if (point_count)
    {
      + points.as_array ().sub_array (start_offset, point_count)
      | hb_sink (hb_array (point_array, *point_count))
      ;
    }

    return points.len;
  }

  bool subset (hb_subset_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    const hb_set_t &glyphset = *c->plan->glyphset_gsub ();
    const hb_map_t &glyph_map = *c->plan->glyph_map;

    auto *out = c->serializer->start_embed (*this);
    if ((__builtin_expect (!!(!c->serializer->extend_min (out)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 91);

    hb_sorted_vector_t<hb_codepoint_t> new_coverage;
    + hb_zip (this+coverage, attachPoint)
    | hb_filter (glyphset, hb_first)
    | hb_filter (subset_offset_array (c, out->attachPoint, this), hb_second)
    | hb_map (hb_first)
    | hb_map (glyph_map)
    | hb_sink (new_coverage)
    ;
    out->coverage.serialize_serialize (c->serializer, new_coverage.iter ());
    return trace.ret (bool (new_coverage), __PRETTY_FUNCTION__, 102);
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (coverage.sanitize (c, this) && attachPoint.sanitize (c, this), __PRETTY_FUNCTION__, 108);
  }

  protected:
  Offset16To<Coverage>
  coverage;

  Array16OfOffset16To<AttachPoint>
  attachPoint;

  public:
  void _compiles_assertion_on_line_119 () const { (void) (attachPoint)[0].static_size; } void _instance_assertion_on_line_119 () const { static_assert ((sizeof (*this) == (4) + (1 +0) * sizeof ((attachPoint)[0])), ""); } static constexpr unsigned null_size = (4); static constexpr unsigned min_size = (4);
};





struct CaretValueFormat1
{
  friend struct CaretValue;
  bool subset (hb_subset_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    auto *out = c->serializer->embed (this);
    if ((__builtin_expect (!!(!out), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 133);
    return trace.ret (true, __PRETTY_FUNCTION__, 134);
  }

  private:
  hb_position_t get_caret_value (hb_font_t *font, hb_direction_t direction) const
  {
    return ((((unsigned int) (direction)) & ~1U) == 4) ? font->em_scale_x (coordinate) : font->em_scale_y (coordinate);
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this), __PRETTY_FUNCTION__, 146);
  }

  protected:
  HBUINT16 caretValueFormat;
  FWORD coordinate;
  public:
  void _instance_assertion_on_line_153 () const { static_assert ((sizeof (*this) == (4)), ""); } unsigned int get_size () const { return (4); } static constexpr unsigned null_size = (4); static constexpr unsigned min_size = (4); static constexpr unsigned static_size = (4);
};

struct CaretValueFormat2
{
  friend struct CaretValue;
  bool subset (hb_subset_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    auto *out = c->serializer->embed (this);
    if ((__builtin_expect (!!(!out), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 163);
    return trace.ret (true, __PRETTY_FUNCTION__, 164);
  }

  private:
  hb_position_t get_caret_value (hb_font_t *font, hb_direction_t direction, hb_codepoint_t glyph_id) const
  {
    hb_position_t x, y;
    font->get_glyph_contour_point_for_origin (glyph_id, caretValuePoint, direction, &x, &y);
    return ((((unsigned int) (direction)) & ~1U) == 4) ? x : y;
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this), __PRETTY_FUNCTION__, 178);
  }

  protected:
  HBUINT16 caretValueFormat;
  HBUINT16 caretValuePoint;
  public:
  void _instance_assertion_on_line_185 () const { static_assert ((sizeof (*this) == (4)), ""); } unsigned int get_size () const { return (4); } static constexpr unsigned null_size = (4); static constexpr unsigned min_size = (4); static constexpr unsigned static_size = (4);
};

struct CaretValueFormat3
{
  friend struct CaretValue;

  hb_position_t get_caret_value (hb_font_t *font, hb_direction_t direction,
     const VariationStore &var_store) const
  {
    return ((((unsigned int) (direction)) & ~1U) == 4) ?
    font->em_scale_x (coordinate) + (this+deviceTable).get_x_delta (font, var_store) :
    font->em_scale_y (coordinate) + (this+deviceTable).get_y_delta (font, var_store);
  }

  bool subset (hb_subset_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    auto *out = c->serializer->start_embed (*this);
    if ((__builtin_expect (!!(!out), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 204);
    if (!c->serializer->embed (caretValueFormat)) return trace.ret (false, __PRETTY_FUNCTION__, 205);
    if (!c->serializer->embed (coordinate)) return trace.ret (false, __PRETTY_FUNCTION__, 206);

    unsigned varidx = (this+deviceTable).get_variation_index ();
    if (c->plan->layout_variation_idx_delta_map.has (varidx))
    {
      int delta = hb_second (c->plan->layout_variation_idx_delta_map.get (varidx));
      if (delta != 0)
      {
        if (!c->serializer->check_assign (out->coordinate, coordinate + delta, HB_SERIALIZE_ERROR_INT_OVERFLOW))
          return trace.ret (false, __PRETTY_FUNCTION__, 215);
      }
    }

    if (c->plan->all_axes_pinned)
      return trace.ret (c->serializer->check_assign (out->caretValueFormat, 1, HB_SERIALIZE_ERROR_INT_OVERFLOW), __PRETTY_FUNCTION__, 220);

    if (!c->serializer->embed (deviceTable))
      return trace.ret (false, __PRETTY_FUNCTION__, 223);

    return trace.ret (out->deviceTable.serialize_copy (c->serializer, deviceTable, this, c->serializer->to_bias (out), hb_serialize_context_t::Head, &c->plan->layout_variation_idx_delta_map), __PRETTY_FUNCTION__, 225)
                                                                                 ;
  }

  void collect_variation_indices (hb_collect_variation_indices_context_t *c) const
  { (this+deviceTable).collect_variation_indices (c); }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this) && deviceTable.sanitize (c, this), __PRETTY_FUNCTION__, 235);
  }

  protected:
  HBUINT16 caretValueFormat;
  FWORD coordinate;
  Offset16To<Device>
  deviceTable;


  public:
  void _instance_assertion_on_line_246 () const { static_assert ((sizeof (*this) == (6)), ""); } unsigned int get_size () const { return (6); } static constexpr unsigned null_size = (6); static constexpr unsigned min_size = (6); static constexpr unsigned static_size = (6);
};

struct CaretValue
{
  hb_position_t get_caret_value (hb_font_t *font,
     hb_direction_t direction,
     hb_codepoint_t glyph_id,
     const VariationStore &var_store) const
  {
    switch (u.format) {
    case 1: return u.format1.get_caret_value (font, direction);
    case 2: return u.format2.get_caret_value (font, direction, glyph_id);
    case 3: return u.format3.get_caret_value (font, direction, var_store);
    default:return 0;
    }
  }

  template <typename context_t, typename ...Ts>
  typename context_t::return_t dispatch (context_t *c, Ts&&... ds) const
  {
    if ((__builtin_expect (!!(!c->may_dispatch (this, &u.format)), 0))) return c->no_dispatch_return_value ();
    hb_no_trace_t<typename context_t::return_t> trace;
    switch (u.format) {
    case 1: return trace.ret (c->dispatch (u.format1, std::forward<Ts> (ds)...), __PRETTY_FUNCTION__, 270);
    case 2: return trace.ret (c->dispatch (u.format2, std::forward<Ts> (ds)...), __PRETTY_FUNCTION__, 271);
    case 3: return trace.ret (c->dispatch (u.format3, std::forward<Ts> (ds)...), __PRETTY_FUNCTION__, 272);
    default:return trace.ret (c->default_return_value (), __PRETTY_FUNCTION__, 273);
    }
  }

  void collect_variation_indices (hb_collect_variation_indices_context_t *c) const
  {
    switch (u.format) {
    case 1:
    case 2:
      return;
    case 3:
      u.format3.collect_variation_indices (c);
      return;
    default: return;
    }
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    if (!u.format.sanitize (c)) return trace.ret (false, __PRETTY_FUNCTION__, 293);
    switch (u.format) {
    case 1: return trace.ret (u.format1.sanitize (c), __PRETTY_FUNCTION__, 295);
    case 2: return trace.ret (u.format2.sanitize (c), __PRETTY_FUNCTION__, 296);
    case 3: return trace.ret (u.format3.sanitize (c), __PRETTY_FUNCTION__, 297);
    default:return trace.ret (true, __PRETTY_FUNCTION__, 298);
    }
  }

  protected:
  union {
  HBUINT16 format;
  CaretValueFormat1 format1;
  CaretValueFormat2 format2;
  CaretValueFormat3 format3;
  } u;
  public:
  void _compiles_assertion_on_line_310 () const { (void) this->u.format.static_size; } void _instance_assertion_on_line_310 () const { static_assert ((sizeof(this->u.format) == (2)), ""); } static constexpr unsigned null_size = (2); static constexpr unsigned min_size = (2);
};

struct LigGlyph
{
  unsigned get_lig_carets (hb_font_t *font,
      hb_direction_t direction,
      hb_codepoint_t glyph_id,
      const VariationStore &var_store,
      unsigned start_offset,
      unsigned *caret_count ,
      hb_position_t *caret_array ) const
  {
    if (caret_count)
    {
      + carets.as_array ().sub_array (start_offset, caret_count)
      | hb_map (hb_add (this))
      | hb_map ([&] (const CaretValue &value) { return value.get_caret_value (font, direction, glyph_id, var_store); })
      | hb_sink (hb_array (caret_array, *caret_count))
      ;
    }

    return carets.len;
  }

  bool subset (hb_subset_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    auto *out = c->serializer->start_embed (*this);
    if ((__builtin_expect (!!(!c->serializer->extend_min (out)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 339);

    + hb_iter (carets)
    | hb_apply (subset_offset_array (c, out->carets, this))
    ;

    return trace.ret (bool (out->carets), __PRETTY_FUNCTION__, 345);
  }

  void collect_variation_indices (hb_collect_variation_indices_context_t *c) const
  {
    for (const Offset16To<CaretValue>& offset : carets.iter ())
      (this+offset).collect_variation_indices (c);
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (carets.sanitize (c, this), __PRETTY_FUNCTION__, 357);
  }

  protected:
  Array16OfOffset16To<CaretValue>
  carets;


  public:
  void _compiles_assertion_on_line_366 () const { (void) (carets)[0].static_size; } void _instance_assertion_on_line_366 () const { static_assert ((sizeof (*this) == (2) + (1 +0) * sizeof ((carets)[0])), ""); } static constexpr unsigned null_size = (2); static constexpr unsigned min_size = (2);
};

struct LigCaretList
{
  unsigned int get_lig_carets (hb_font_t *font,
          hb_direction_t direction,
          hb_codepoint_t glyph_id,
          const VariationStore &var_store,
          unsigned int start_offset,
          unsigned int *caret_count ,
          hb_position_t *caret_array ) const
  {
    unsigned int index = (this+coverage).get_coverage (glyph_id);
    if (index == ((unsigned int) -1))
    {
      if (caret_count)
 *caret_count = 0;
      return 0;
    }
    const LigGlyph &lig_glyph = this+ligGlyph[index];
    return lig_glyph.get_lig_carets (font, direction, glyph_id, var_store, start_offset, caret_count, caret_array);
  }

  bool subset (hb_subset_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    const hb_set_t &glyphset = *c->plan->glyphset_gsub ();
    const hb_map_t &glyph_map = *c->plan->glyph_map;

    auto *out = c->serializer->start_embed (*this);
    if ((__builtin_expect (!!(!c->serializer->extend_min (out)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 397);

    hb_sorted_vector_t<hb_codepoint_t> new_coverage;
    + hb_zip (this+coverage, ligGlyph)
    | hb_filter (glyphset, hb_first)
    | hb_filter (subset_offset_array (c, out->ligGlyph, this), hb_second)
    | hb_map (hb_first)
    | hb_map (glyph_map)
    | hb_sink (new_coverage)
    ;
    out->coverage.serialize_serialize (c->serializer, new_coverage.iter ());
    return trace.ret (bool (new_coverage), __PRETTY_FUNCTION__, 408);
  }

  void collect_variation_indices (hb_collect_variation_indices_context_t *c) const
  {
    + hb_zip (this+coverage, ligGlyph)
    | hb_filter (c->glyph_set, hb_first)
    | hb_map (hb_second)
    | hb_map (hb_add (this))
    | hb_apply ([c] (const LigGlyph& _) { _.collect_variation_indices (c); })
    ;
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (coverage.sanitize (c, this) && ligGlyph.sanitize (c, this), __PRETTY_FUNCTION__, 424);
  }

  protected:
  Offset16To<Coverage>
  coverage;

  Array16OfOffset16To<LigGlyph>
  ligGlyph;

  public:
  void _compiles_assertion_on_line_435 () const { (void) (ligGlyph)[0].static_size; } void _instance_assertion_on_line_435 () const { static_assert ((sizeof (*this) == (4) + (1 +0) * sizeof ((ligGlyph)[0])), ""); } static constexpr unsigned null_size = (4); static constexpr unsigned min_size = (4);
};


struct MarkGlyphSetsFormat1
{
  bool covers (unsigned int set_index, hb_codepoint_t glyph_id) const
  { return (this+coverage[set_index]).get_coverage (glyph_id) != ((unsigned int) -1); }

  bool subset (hb_subset_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    auto *out = c->serializer->start_embed (*this);
    if ((__builtin_expect (!!(!c->serializer->extend_min (out)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 448);
    out->format = format;

    bool ret = true;
    for (const Offset32To<Coverage>& offset : coverage.iter ())
    {
      auto *o = out->coverage.serialize_append (c->serializer);
      if ((__builtin_expect (!!(!o), 0)))
      {
 ret = false;
 break;
      }




      c->serializer->push ();
      c->dispatch (this+offset);
      c->serializer->add_link (*o, c->serializer->pop_pack ());
    }

    return trace.ret (ret && out->coverage.len, __PRETTY_FUNCTION__, 469);
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (coverage.sanitize (c, this), __PRETTY_FUNCTION__, 475);
  }

  protected:
  HBUINT16 format;
  Array16Of<Offset32To<Coverage>>
  coverage;

  public:
  void _compiles_assertion_on_line_484 () const { (void) (coverage)[0].static_size; } void _instance_assertion_on_line_484 () const { static_assert ((sizeof (*this) == (4) + (1 +0) * sizeof ((coverage)[0])), ""); } static constexpr unsigned null_size = (4); static constexpr unsigned min_size = (4);
};

struct MarkGlyphSets
{
  bool covers (unsigned int set_index, hb_codepoint_t glyph_id) const
  {
    switch (u.format) {
    case 1: return u.format1.covers (set_index, glyph_id);
    default:return false;
    }
  }

  bool subset (hb_subset_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    switch (u.format) {
    case 1: return trace.ret (u.format1.subset (c), __PRETTY_FUNCTION__, 501);
    default:return trace.ret (false, __PRETTY_FUNCTION__, 502);
    }
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    if (!u.format.sanitize (c)) return trace.ret (false, __PRETTY_FUNCTION__, 509);
    switch (u.format) {
    case 1: return trace.ret (u.format1.sanitize (c), __PRETTY_FUNCTION__, 511);
    default:return trace.ret (true, __PRETTY_FUNCTION__, 512);
    }
  }

  protected:
  union {
  HBUINT16 format;
  MarkGlyphSetsFormat1 format1;
  } u;
  public:
  void _compiles_assertion_on_line_522 () const { (void) this->u.format.static_size; } void _instance_assertion_on_line_522 () const { static_assert ((sizeof(this->u.format) == (2)), ""); } static constexpr unsigned null_size = (2); static constexpr unsigned min_size = (2);
};
# 532 "../harfbuzz-6.0.0/src/OT/Layout/GDEF/GDEF.hh"
template <typename Types>
struct GDEFVersion1_2
{
  friend struct GDEF;

  protected:
  FixedVersion<>version;

  typename Types::template OffsetTo<ClassDef>
  glyphClassDef;


  typename Types::template OffsetTo<AttachList>
  attachList;


  typename Types::template OffsetTo<LigCaretList>
  ligCaretList;


  typename Types::template OffsetTo<ClassDef>
  markAttachClassDef;


  typename Types::template OffsetTo<MarkGlyphSets>
  markGlyphSetsDef;



  Offset32To<VariationStore>
  varStore;



  public:
  void _instance_assertion_on_line_567 () const { static_assert ((sizeof (*this) >= (4 + 4 * Types::size)), ""); } static constexpr unsigned null_size = (4 + 4 * Types::size); static constexpr unsigned min_size = (4 + 4 * Types::size);

  unsigned int get_size () const
  {
    return min_size +
    (version.to_int () >= 0x00010002u ? markGlyphSetsDef.static_size : 0) +
    (version.to_int () >= 0x00010003u ? varStore.static_size : 0);
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (version.sanitize (c) && glyphClassDef.sanitize (c, this) && attachList.sanitize (c, this) && ligCaretList.sanitize (c, this) && markAttachClassDef.sanitize (c, this) && (version.to_int () < 0x00010002u || markGlyphSetsDef.sanitize (c, this)) && (version.to_int () < 0x00010003u || varStore.sanitize (c, this)), __PRETTY_FUNCTION__, 579)





                                                                     ;
  }

  bool subset (hb_subset_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    auto *out = c->serializer->embed (*this);
    if ((__builtin_expect (!!(!out), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 592);

    bool subset_glyphclassdef = out->glyphClassDef.serialize_subset (c, glyphClassDef, this, nullptr, false, true);
    bool subset_attachlist = out->attachList.serialize_subset (c, attachList, this);
    bool subset_ligcaretlist = out->ligCaretList.serialize_subset (c, ligCaretList, this);
    bool subset_markattachclassdef = out->markAttachClassDef.serialize_subset (c, markAttachClassDef, this, nullptr, false, true);

    bool subset_markglyphsetsdef = false;
    if (version.to_int () >= 0x00010002u)
    {
      subset_markglyphsetsdef = out->markGlyphSetsDef.serialize_subset (c, markGlyphSetsDef, this);
    }

    bool subset_varstore = false;
    if (version.to_int () >= 0x00010003u)
    {
      if (c->plan->all_axes_pinned)
        out->varStore = 0;
      else
        subset_varstore = out->varStore.serialize_subset (c, varStore, this, c->plan->gdef_varstore_inner_maps.as_array ());
    }

    if (subset_varstore)
    {
      out->version.minor = 3;
    } else if (subset_markglyphsetsdef) {
      out->version.minor = 2;
    } else {
      out->version.minor = 0;
    }

    return trace.ret (subset_glyphclassdef || subset_attachlist || subset_ligcaretlist || subset_markattachclassdef || (out->version.to_int () >= 0x00010002u && subset_markglyphsetsdef) || (out->version.to_int () >= 0x00010003u && subset_varstore), __PRETTY_FUNCTION__, 623)


                                                               ;
  }
};

struct GDEF
{
  static constexpr hb_tag_t tableTag = ((hb_tag_t)((((uint32_t)('G')&0xFF)<<24)|(((uint32_t)('D')&0xFF)<<16)|(((uint32_t)('E')&0xFF)<<8)|((uint32_t)('F')&0xFF)));

  enum GlyphClasses {
    UnclassifiedGlyph = 0,
    BaseGlyph = 1,
    LigatureGlyph = 2,
    MarkGlyph = 3,
    ComponentGlyph = 4
  };

  unsigned int get_size () const
  {
    switch (u.version.major) {
    case 1: return u.version1.get_size ();



    default: return u.version.static_size;
    }
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    if ((__builtin_expect (!!(!u.version.sanitize (c)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 656);
    switch (u.version.major) {
    case 1: return trace.ret (u.version1.sanitize (c), __PRETTY_FUNCTION__, 658);



    default: return trace.ret (true, __PRETTY_FUNCTION__, 662);
    }
  }

  bool subset (hb_subset_context_t *c) const
  {
    switch (u.version.major) {
    case 1: return u.version1.subset (c);



    default: return false;
    }
  }

  bool has_glyph_classes () const
  {
    switch (u.version.major) {
    case 1: return u.version1.glyphClassDef != 0;



    default: return false;
    }
  }
  const ClassDef &get_glyph_class_def () const
  {
    switch (u.version.major) {
    case 1: return this+u.version1.glyphClassDef;



    default: return NullHelper<ClassDef>::get_null ();
    }
  }
  bool has_attach_list () const
  {
    switch (u.version.major) {
    case 1: return u.version1.attachList != 0;



    default: return false;
    }
  }
  const AttachList &get_attach_list () const
  {
    switch (u.version.major) {
    case 1: return this+u.version1.attachList;



    default: return NullHelper<AttachList>::get_null ();
    }
  }
  bool has_lig_carets () const
  {
    switch (u.version.major) {
    case 1: return u.version1.ligCaretList != 0;



    default: return false;
    }
  }
  const LigCaretList &get_lig_caret_list () const
  {
    switch (u.version.major) {
    case 1: return this+u.version1.ligCaretList;



    default: return NullHelper<LigCaretList>::get_null ();
    }
  }
  bool has_mark_attachment_types () const
  {
    switch (u.version.major) {
    case 1: return u.version1.markAttachClassDef != 0;



    default: return false;
    }
  }
  const ClassDef &get_mark_attach_class_def () const
  {
    switch (u.version.major) {
    case 1: return this+u.version1.markAttachClassDef;



    default: return NullHelper<ClassDef>::get_null ();
    }
  }
  bool has_mark_glyph_sets () const
  {
    switch (u.version.major) {
    case 1: return u.version.to_int () >= 0x00010002u && u.version1.markGlyphSetsDef != 0;



    default: return false;
    }
  }
  const MarkGlyphSets &get_mark_glyph_sets () const
  {
    switch (u.version.major) {
    case 1: return u.version.to_int () >= 0x00010002u ? this+u.version1.markGlyphSetsDef : NullHelper<MarkGlyphSets>::get_null ();



    default: return NullHelper<MarkGlyphSets>::get_null ();
    }
  }
  bool has_var_store () const
  {
    switch (u.version.major) {
    case 1: return u.version.to_int () >= 0x00010003u && u.version1.varStore != 0;



    default: return false;
    }
  }
  const VariationStore &get_var_store () const
  {
    switch (u.version.major) {
    case 1: return u.version.to_int () >= 0x00010003u ? this+u.version1.varStore : NullHelper<VariationStore>::get_null ();



    default: return NullHelper<VariationStore>::get_null ();
    }
  }


  bool has_data () const { return u.version.to_int (); }
  unsigned int get_glyph_class (hb_codepoint_t glyph) const
  { return get_glyph_class_def ().get_class (glyph); }
  void get_glyphs_in_class (unsigned int klass, hb_set_t *glyphs) const
  { get_glyph_class_def ().collect_class (glyphs, klass); }

  unsigned int get_mark_attachment_type (hb_codepoint_t glyph) const
  { return get_mark_attach_class_def ().get_class (glyph); }

  unsigned int get_attach_points (hb_codepoint_t glyph_id,
      unsigned int start_offset,
      unsigned int *point_count ,
      unsigned int *point_array ) const
  { return get_attach_list ().get_attach_points (glyph_id, start_offset, point_count, point_array); }

  unsigned int get_lig_carets (hb_font_t *font,
          hb_direction_t direction,
          hb_codepoint_t glyph_id,
          unsigned int start_offset,
          unsigned int *caret_count ,
          hb_position_t *caret_array ) const
  { return get_lig_caret_list ().get_lig_carets (font,
       direction, glyph_id, get_var_store(),
       start_offset, caret_count, caret_array); }

  bool mark_set_covers (unsigned int set_index, hb_codepoint_t glyph_id) const
  { return get_mark_glyph_sets ().covers (set_index, glyph_id); }




  unsigned int get_glyph_props (hb_codepoint_t glyph) const
  {
    unsigned int klass = get_glyph_class (glyph);

    static_assert (((unsigned int) HB_OT_LAYOUT_GLYPH_PROPS_BASE_GLYPH == (unsigned int) LookupFlag::IgnoreBaseGlyphs), "");
    static_assert (((unsigned int) HB_OT_LAYOUT_GLYPH_PROPS_LIGATURE == (unsigned int) LookupFlag::IgnoreLigatures), "");
    static_assert (((unsigned int) HB_OT_LAYOUT_GLYPH_PROPS_MARK == (unsigned int) LookupFlag::IgnoreMarks), "");

    switch (klass) {
    default: return HB_OT_LAYOUT_GLYPH_CLASS_UNCLASSIFIED;
    case BaseGlyph: return HB_OT_LAYOUT_GLYPH_PROPS_BASE_GLYPH;
    case LigatureGlyph: return HB_OT_LAYOUT_GLYPH_PROPS_LIGATURE;
    case MarkGlyph:
   klass = get_mark_attachment_type (glyph);
   return HB_OT_LAYOUT_GLYPH_PROPS_MARK | (klass << 8);
    }
  }

  __attribute__((__visibility__("hidden"))) bool is_blocklisted (hb_blob_t *blob,
       hb_face_t *face) const;

  struct accelerator_t
  {
    accelerator_t (hb_face_t *face)
    {
      table = hb_sanitize_context_t ().reference_table<GDEF> (face);
      if ((__builtin_expect (!!(table->is_blocklisted (table.get_blob (), face)), 0)))
      {
 hb_blob_destroy (table.get_blob ());
 table = hb_blob_get_empty ();
      }
    }
    ~accelerator_t () { table.destroy (); }

    hb_blob_ptr_t<GDEF> table;
  };

  void collect_variation_indices (hb_collect_variation_indices_context_t *c) const
  { get_lig_caret_list ().collect_variation_indices (c); }

  void remap_layout_variation_indices (const hb_set_t *layout_variation_indices,
           hb_hashmap_t<unsigned, hb_pair_t<unsigned, int>> *layout_variation_idx_delta_map ) const
  {
    if (!has_var_store ()) return;
    if (layout_variation_indices->is_empty ()) return;

    unsigned new_major = 0, new_minor = 0;
    unsigned last_major = (layout_variation_indices->get_min ()) >> 16;
    for (unsigned idx : layout_variation_indices->iter ())
    {
      uint16_t major = idx >> 16;
      if (major >= get_var_store ().get_sub_table_count ()) break;
      if (major != last_major)
      {
 new_minor = 0;
 ++new_major;
      }

      unsigned new_idx = (new_major << 16) + new_minor;
      if (!layout_variation_idx_delta_map->has (idx))
        continue;
      int delta = hb_second (layout_variation_idx_delta_map->get (idx));

      layout_variation_idx_delta_map->set (idx, hb_pair_t<unsigned, int> (new_idx, delta));
      ++new_minor;
      last_major = major;
    }
  }

  protected:
  union {
  FixedVersion<> version;
  GDEFVersion1_2<SmallTypes> version1;



  } u;
  public:
  void _instance_assertion_on_line_908 () const { static_assert ((sizeof (*this) >= (4)), ""); } static constexpr unsigned null_size = (4); static constexpr unsigned min_size = (4);
};

struct GDEF_accelerator_t : GDEF::accelerator_t {
  GDEF_accelerator_t (hb_face_t *face) : GDEF::accelerator_t (face) {}
};

}
# 33 "../harfbuzz-6.0.0/src/hb-ot-layout-gdef-table.hh" 2
# 34 "../harfbuzz-6.0.0/src/hb-aat-layout-morx-table.hh" 2







#define HB_AAT_TAG_morx HB_TAG('m','o','r','x')
#define HB_AAT_TAG_mort HB_TAG('m','o','r','t')


namespace AAT {

using namespace OT;

template <typename Types>
struct RearrangementSubtable
{
  typedef typename Types::HBUINT HBUINT;

  typedef void EntryData;

  struct driver_context_t
  {
    static constexpr bool in_place = true;
    enum Flags
    {
      MarkFirst = 0x8000,

      DontAdvance = 0x4000,



      MarkLast = 0x2000,

      Reserved = 0x1FF0,
      Verb = 0x000F,
    };

    driver_context_t (const RearrangementSubtable *table __attribute__((unused))) :
 ret (false),
 start (0), end (0) {}

    bool is_actionable (StateTableDriver<Types, EntryData> *driver __attribute__((unused)),
   const Entry<EntryData> &entry)
    {
      return (entry.flags & Verb) && start < end;
    }
    void transition (StateTableDriver<Types, EntryData> *driver,
       const Entry<EntryData> &entry)
    {
      hb_buffer_t *buffer = driver->buffer;
      unsigned int flags = entry.flags;

      if (flags & MarkFirst)
 start = buffer->idx;

      if (flags & MarkLast)
 end = hb_min (buffer->idx + 1, buffer->len);

      if ((flags & Verb) && start < end)
      {




 const unsigned char map[16] =
 {
   0x00,
   0x10,
   0x01,
   0x11,
   0x20,
   0x30,
   0x02,
   0x03,
   0x12,
   0x13,
   0x21,
   0x31,
   0x22,
   0x32,
   0x23,
   0x33,
 };

 unsigned int m = map[flags & Verb];
 unsigned int l = hb_min (2u, m >> 4);
 unsigned int r = hb_min (2u, m & 0x0F);
 bool reverse_l = 3 == (m >> 4);
 bool reverse_r = 3 == (m & 0x0F);

 if (end - start >= l + r && end-start <= 64)
 {
   buffer->merge_clusters (start, hb_min (buffer->idx + 1, buffer->len));
   buffer->merge_clusters (start, end);

   hb_glyph_info_t *info = buffer->info;
   hb_glyph_info_t buf[4];

   hb_memcpy (buf, info + start, l * sizeof (buf[0]));
   hb_memcpy (buf + 2, info + end - r, r * sizeof (buf[0]));

   if (l != r)
     memmove (info + start + r, info + start + l, (end - start - l - r) * sizeof (buf[0]));

   hb_memcpy (info + start, buf + 2, r * sizeof (buf[0]));
   hb_memcpy (info + end - l, buf, l * sizeof (buf[0]));
   if (reverse_l)
   {
     buf[0] = info[end - 1];
     info[end - 1] = info[end - 2];
     info[end - 2] = buf[0];
   }
   if (reverse_r)
   {
     buf[0] = info[start];
     info[start] = info[start + 1];
     info[start + 1] = buf[0];
   }
 }
      }
    }

    public:
    bool ret;
    private:
    unsigned int start;
    unsigned int end;
  };

  bool apply (hb_aat_apply_context_t *c) const
  {
    hb_no_trace_t<bool> trace;

    driver_context_t dc (this);

    StateTableDriver<Types, EntryData> driver (machine, c->buffer, c->face);
    driver.drive (&dc, c);

    return trace.ret (dc.ret, __PRETTY_FUNCTION__, 174);
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (machine.sanitize (c), __PRETTY_FUNCTION__, 180);
  }

  protected:
  StateTable<Types, EntryData> machine;
  public:
  void _instance_assertion_on_line_186 () const { static_assert ((sizeof (*this) == (16)), ""); } unsigned int get_size () const { return (16); } static constexpr unsigned null_size = (16); static constexpr unsigned min_size = (16); static constexpr unsigned static_size = (16);
};

template <typename Types>
struct ContextualSubtable
{
  typedef typename Types::HBUINT HBUINT;

  struct EntryData
  {
    HBUINT16 markIndex;

    HBUINT16 currentIndex;

    public:
    void _instance_assertion_on_line_201 () const { static_assert ((sizeof (*this) == (4)), ""); } unsigned int get_size () const { return (4); } static constexpr unsigned null_size = (4); static constexpr unsigned min_size = (4); static constexpr unsigned static_size = (4);
  };

  struct driver_context_t
  {
    static constexpr bool in_place = true;
    enum Flags
    {
      SetMark = 0x8000,
      DontAdvance = 0x4000,

      Reserved = 0x3FFF,
    };

    driver_context_t (const ContextualSubtable *table_,
        hb_aat_apply_context_t *c_) :
 ret (false),
 c (c_),
 gdef (*c->gdef_table),
 mark_set (false),
 has_glyph_classes (gdef.has_glyph_classes ()),
 mark (0),
 table (table_),
 subs (table+table->substitutionTables) {}

    bool is_actionable (StateTableDriver<Types, EntryData> *driver,
   const Entry<EntryData> &entry)
    {
      hb_buffer_t *buffer = driver->buffer;

      if (buffer->idx == buffer->len && !mark_set)
 return false;

      return entry.data.markIndex != 0xFFFF || entry.data.currentIndex != 0xFFFF;
    }
    void transition (StateTableDriver<Types, EntryData> *driver,
       const Entry<EntryData> &entry)
    {
      hb_buffer_t *buffer = driver->buffer;



      if (buffer->idx == buffer->len && !mark_set)
 return;

      const HBGlyphID16 *replacement;

      replacement = nullptr;
      if (Types::extended)
      {
 if (entry.data.markIndex != 0xFFFF)
 {
   const Lookup<HBGlyphID16> &lookup = subs[entry.data.markIndex];
   replacement = lookup.get_value (buffer->info[mark].codepoint, driver->num_glyphs);
 }
      }
      else
      {
 unsigned int offset = entry.data.markIndex + buffer->info[mark].codepoint;
 const UnsizedArrayOf<HBGlyphID16> &subs_old = (const UnsizedArrayOf<HBGlyphID16> &) subs;
 replacement = &subs_old[Types::wordOffsetToIndex (offset, table, subs_old.arrayZ)];
 if (!replacement->sanitize (&c->sanitizer) || !*replacement)
   replacement = nullptr;
      }
      if (replacement)
      {
 buffer->unsafe_to_break (mark, hb_min (buffer->idx + 1, buffer->len));
 buffer->info[mark].codepoint = *replacement;
 if (has_glyph_classes)
   _hb_glyph_info_set_glyph_props (&buffer->info[mark],
       gdef.get_glyph_props (*replacement));
 ret = true;
      }

      replacement = nullptr;
      unsigned int idx = hb_min (buffer->idx, buffer->len - 1);
      if (Types::extended)
      {
 if (entry.data.currentIndex != 0xFFFF)
 {
   const Lookup<HBGlyphID16> &lookup = subs[entry.data.currentIndex];
   replacement = lookup.get_value (buffer->info[idx].codepoint, driver->num_glyphs);
 }
      }
      else
      {
 unsigned int offset = entry.data.currentIndex + buffer->info[idx].codepoint;
 const UnsizedArrayOf<HBGlyphID16> &subs_old = (const UnsizedArrayOf<HBGlyphID16> &) subs;
 replacement = &subs_old[Types::wordOffsetToIndex (offset, table, subs_old.arrayZ)];
 if (!replacement->sanitize (&c->sanitizer) || !*replacement)
   replacement = nullptr;
      }
      if (replacement)
      {
 buffer->info[idx].codepoint = *replacement;
 if (has_glyph_classes)
   _hb_glyph_info_set_glyph_props (&buffer->info[idx],
       gdef.get_glyph_props (*replacement));
 ret = true;
      }

      if (entry.flags & SetMark)
      {
 mark_set = true;
 mark = buffer->idx;
      }
    }

    public:
    bool ret;
    private:
    hb_aat_apply_context_t *c;
    const OT::GDEF &gdef;
    bool mark_set;
    bool has_glyph_classes;
    unsigned int mark;
    const ContextualSubtable *table;
    const UnsizedListOfOffset16To<Lookup<HBGlyphID16>, HBUINT, false> &subs;
  };

  bool apply (hb_aat_apply_context_t *c) const
  {
    hb_no_trace_t<bool> trace;

    driver_context_t dc (this, c);

    StateTableDriver<Types, EntryData> driver (machine, c->buffer, c->face);
    driver.drive (&dc, c);

    return trace.ret (dc.ret, __PRETTY_FUNCTION__, 330);
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;

    unsigned int num_entries = 0;
    if ((__builtin_expect (!!(!machine.sanitize (c, &num_entries)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 338);

    if (!Types::extended)
      return trace.ret (substitutionTables.sanitize (c, this, 0), __PRETTY_FUNCTION__, 341);

    unsigned int num_lookups = 0;

    const Entry<EntryData> *entries = machine.get_entries ();
    for (unsigned int i = 0; i < num_entries; i++)
    {
      const EntryData &data = entries[i].data;

      if (data.markIndex != 0xFFFF)
 num_lookups = hb_max (num_lookups, 1u + data.markIndex);
      if (data.currentIndex != 0xFFFF)
 num_lookups = hb_max (num_lookups, 1u + data.currentIndex);
    }

    return trace.ret (substitutionTables.sanitize (c, this, num_lookups), __PRETTY_FUNCTION__, 356);
  }

  protected:
  StateTable<Types, EntryData>
  machine;
  NNOffsetTo<UnsizedListOfOffset16To<Lookup<HBGlyphID16>, HBUINT, false>, HBUINT>
  substitutionTables;
  public:
  void _instance_assertion_on_line_365 () const { static_assert ((sizeof (*this) == (20)), ""); } unsigned int get_size () const { return (20); } static constexpr unsigned null_size = (20); static constexpr unsigned min_size = (20); static constexpr unsigned static_size = (20);
};


template <bool extended>
struct LigatureEntry;

template <>
struct LigatureEntry<true>
{
  enum Flags
  {
    SetComponent = 0x8000,

    DontAdvance = 0x4000,

    PerformAction = 0x2000,

    Reserved = 0x1FFF,
  };

  struct EntryData
  {
    HBUINT16 ligActionIndex;


    public:
    void _instance_assertion_on_line_392 () const { static_assert ((sizeof (*this) == (2)), ""); } unsigned int get_size () const { return (2); } static constexpr unsigned null_size = (2); static constexpr unsigned min_size = (2); static constexpr unsigned static_size = (2);
  };

  static bool performAction (const Entry<EntryData> &entry)
  { return entry.flags & PerformAction; }

  static unsigned int ligActionIndex (const Entry<EntryData> &entry)
  { return entry.data.ligActionIndex; }
};
template <>
struct LigatureEntry<false>
{
  enum Flags
  {
    SetComponent = 0x8000,

    DontAdvance = 0x4000,

    Offset = 0x3FFF,


  };

  typedef void EntryData;

  static bool performAction (const Entry<EntryData> &entry)
  { return entry.flags & Offset; }

  static unsigned int ligActionIndex (const Entry<EntryData> &entry)
  { return entry.flags & Offset; }
};


template <typename Types>
struct LigatureSubtable
{
  typedef typename Types::HBUINT HBUINT;

  typedef LigatureEntry<Types::extended> LigatureEntryT;
  typedef typename LigatureEntryT::EntryData EntryData;

  struct driver_context_t
  {
    static constexpr bool in_place = false;
    enum
    {
      DontAdvance = LigatureEntryT::DontAdvance,
    };
    enum LigActionFlags
    {
      LigActionLast = 0x80000000,

      LigActionStore = 0x40000000,


      LigActionOffset = 0x3FFFFFFF,


    };

    driver_context_t (const LigatureSubtable *table_,
        hb_aat_apply_context_t *c_) :
 ret (false),
 c (c_),
 table (table_),
 ligAction (table+table->ligAction),
 component (table+table->component),
 ligature (table+table->ligature),
 match_length (0) {}

    bool is_actionable (StateTableDriver<Types, EntryData> *driver __attribute__((unused)),
   const Entry<EntryData> &entry)
    {
      return LigatureEntryT::performAction (entry);
    }
    void transition (StateTableDriver<Types, EntryData> *driver,
       const Entry<EntryData> &entry)
    {
      hb_buffer_t *buffer = driver->buffer;

      _hb_debug_msg<(0 +0)> ("APPLY", (nullptr), nullptr, false, 0, 0, "Ligature transition at %u", buffer->idx);
      if (entry.flags & LigatureEntryT::SetComponent)
      {

 if (match_length && match_positions[(match_length - 1u) % ARRAY_LENGTH (match_positions)] == buffer->out_len)
   match_length--;

 match_positions[match_length++ % ARRAY_LENGTH (match_positions)] = buffer->out_len;
 _hb_debug_msg<(0 +0)> ("APPLY", (nullptr), nullptr, false, 0, 0, "Set component at %u", buffer->out_len);
      }

      if (LigatureEntryT::performAction (entry))
      {
 _hb_debug_msg<(0 +0)> ("APPLY", (nullptr), nullptr, false, 0, 0, "Perform action with %u", match_length);
 unsigned int end = buffer->out_len;

 if ((__builtin_expect (!!(!match_length), 0)))
   return;

 if (buffer->idx >= buffer->len)
   return;

 unsigned int cursor = match_length;

 unsigned int action_idx = LigatureEntryT::ligActionIndex (entry);
 action_idx = Types::offsetToIndex (action_idx, table, ligAction.arrayZ);
 const HBUINT32 *actionData = &ligAction[action_idx];

 unsigned int ligature_idx = 0;
 unsigned int action;
 do
 {
   if ((__builtin_expect (!!(!cursor), 0)))
   {

     _hb_debug_msg<(0 +0)> ("APPLY", (nullptr), nullptr, false, 0, 0, "Stack underflow");
     match_length = 0;
     break;
   }

   _hb_debug_msg<(0 +0)> ("APPLY", (nullptr), nullptr, false, 0, 0, "Moving to stack position %u", cursor - 1);
   if ((__builtin_expect (!!(!buffer->move_to (match_positions[--cursor % ARRAY_LENGTH (match_positions)])), 0))) return;

   if ((__builtin_expect (!!(!actionData->sanitize (&c->sanitizer)), 0))) break;
   action = *actionData;

   uint32_t uoffset = action & LigActionOffset;
   if (uoffset & 0x20000000)
     uoffset |= 0xC0000000;
   int32_t offset = (int32_t) uoffset;
   unsigned int component_idx = buffer->cur().codepoint + offset;
   component_idx = Types::wordOffsetToIndex (component_idx, table, component.arrayZ);
   const HBUINT16 &componentData = component[component_idx];
   if ((__builtin_expect (!!(!componentData.sanitize (&c->sanitizer)), 0))) break;
   ligature_idx += componentData;

   _hb_debug_msg<(0 +0)> ("APPLY", (nullptr), nullptr, false, 0, 0, "Action store %d last %d", bool (action & LigActionStore), bool (action & LigActionLast))

                                     ;
   if (action & (LigActionStore | LigActionLast))
   {
     ligature_idx = Types::offsetToIndex (ligature_idx, table, ligature.arrayZ);
     const HBGlyphID16 &ligatureData = ligature[ligature_idx];
     if ((__builtin_expect (!!(!ligatureData.sanitize (&c->sanitizer)), 0))) break;
     hb_codepoint_t lig = ligatureData;

     _hb_debug_msg<(0 +0)> ("APPLY", (nullptr), nullptr, false, 0, 0, "Produced ligature %u", lig);
     if ((__builtin_expect (!!(!buffer->replace_glyph (lig)), 0))) return;

     unsigned int lig_end = match_positions[(match_length - 1u) % ARRAY_LENGTH (match_positions)] + 1u;

     while (match_length - 1u > cursor)
     {
       _hb_debug_msg<(0 +0)> ("APPLY", (nullptr), nullptr, false, 0, 0, "Skipping ligature component");
       if ((__builtin_expect (!!(!buffer->move_to (match_positions[--match_length % ARRAY_LENGTH (match_positions)])), 0))) return;
       if ((__builtin_expect (!!(!buffer->replace_glyph (DELETED_GLYPH)), 0))) return;
     }

     if ((__builtin_expect (!!(!buffer->move_to (lig_end)), 0))) return;
     buffer->merge_out_clusters (match_positions[cursor % ARRAY_LENGTH (match_positions)], buffer->out_len);
   }

   actionData++;
 }
 while (!(action & LigActionLast));
 if ((__builtin_expect (!!(!buffer->move_to (end)), 0))) return;
      }
    }

    public:
    bool ret;
    private:
    hb_aat_apply_context_t *c;
    const LigatureSubtable *table;
    const UnsizedArrayOf<HBUINT32> &ligAction;
    const UnsizedArrayOf<HBUINT16> &component;
    const UnsizedArrayOf<HBGlyphID16> &ligature;
    unsigned int match_length;
    unsigned int match_positions[64];
  };

  bool apply (hb_aat_apply_context_t *c) const
  {
    hb_no_trace_t<bool> trace;

    driver_context_t dc (this, c);

    StateTableDriver<Types, EntryData> driver (machine, c->buffer, c->face);
    driver.drive (&dc, c);

    return trace.ret (dc.ret, __PRETTY_FUNCTION__, 582);
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;

    return trace.ret (c->check_struct (this) && machine.sanitize (c) && ligAction && component && ligature, __PRETTY_FUNCTION__, 589)
                                       ;
  }

  protected:
  StateTable<Types, EntryData>
  machine;
  NNOffsetTo<UnsizedArrayOf<HBUINT32>, HBUINT>
  ligAction;
  NNOffsetTo<UnsizedArrayOf<HBUINT16>, HBUINT>
  component;
  NNOffsetTo<UnsizedArrayOf<HBGlyphID16>, HBUINT>
  ligature;
  public:
  void _instance_assertion_on_line_603 () const { static_assert ((sizeof (*this) == (28)), ""); } unsigned int get_size () const { return (28); } static constexpr unsigned null_size = (28); static constexpr unsigned min_size = (28); static constexpr unsigned static_size = (28);
};

template <typename Types>
struct NoncontextualSubtable
{
  bool apply (hb_aat_apply_context_t *c) const
  {
    hb_no_trace_t<bool> trace;

    const OT::GDEF &gdef (*c->gdef_table);
    bool has_glyph_classes = gdef.has_glyph_classes ();

    bool ret = false;
    unsigned int num_glyphs = c->face->get_num_glyphs ();

    hb_glyph_info_t *info = c->buffer->info;
    unsigned int count = c->buffer->len;

    auto *last_range = c->range_flags && (c->range_flags->length > 1) ? &(*c->range_flags)[0] : nullptr;
    for (unsigned int i = 0; i < count; i++)
    {

      if (last_range)
      {
 auto *range = last_range;
 {
   unsigned cluster = info[i].cluster;
   while (cluster < range->cluster_first)
     range--;
   while (cluster > range->cluster_last)
     range++;

   last_range = range;
 }
 if (!(range->flags & c->subtable_flags))
   continue;
      }

      const HBGlyphID16 *replacement = substitute.get_value (info[i].codepoint, num_glyphs);
      if (replacement)
      {
 info[i].codepoint = *replacement;
 if (has_glyph_classes)
   _hb_glyph_info_set_glyph_props (&info[i],
       gdef.get_glyph_props (*replacement));
 ret = true;
      }
    }

    return trace.ret (ret, __PRETTY_FUNCTION__, 653);
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (substitute.sanitize (c), __PRETTY_FUNCTION__, 659);
  }

  protected:
  Lookup<HBGlyphID16> substitute;
  public:
  void _instance_assertion_on_line_665 () const { static_assert ((sizeof (*this) >= (2)), ""); } static constexpr unsigned null_size = (2); static constexpr unsigned min_size = (2);
};

template <typename Types>
struct InsertionSubtable
{
  typedef typename Types::HBUINT HBUINT;

  struct EntryData
  {
    HBUINT16 currentInsertIndex;




    HBUINT16 markedInsertIndex;




    public:
    void _instance_assertion_on_line_686 () const { static_assert ((sizeof (*this) == (4)), ""); } unsigned int get_size () const { return (4); } static constexpr unsigned null_size = (4); static constexpr unsigned min_size = (4); static constexpr unsigned static_size = (4);
  };

  struct driver_context_t
  {
    static constexpr bool in_place = false;
    enum Flags
    {
      SetMark = 0x8000,
      DontAdvance = 0x4000,






      CurrentIsKashidaLike= 0x2000,
# 712 "../harfbuzz-6.0.0/src/hb-aat-layout-morx-table.hh"
      MarkedIsKashidaLike= 0x1000,
# 722 "../harfbuzz-6.0.0/src/hb-aat-layout-morx-table.hh"
      CurrentInsertBefore= 0x0800,


      MarkedInsertBefore= 0x0400,


      CurrentInsertCount= 0x3E0,




      MarkedInsertCount= 0x001F,




    };

    driver_context_t (const InsertionSubtable *table,
        hb_aat_apply_context_t *c_) :
 ret (false),
 c (c_),
 mark (0),
 insertionAction (table+table->insertionAction) {}

    bool is_actionable (StateTableDriver<Types, EntryData> *driver __attribute__((unused)),
   const Entry<EntryData> &entry)
    {
      return (entry.flags & (CurrentInsertCount | MarkedInsertCount)) &&
      (entry.data.currentInsertIndex != 0xFFFF ||entry.data.markedInsertIndex != 0xFFFF);
    }
    void transition (StateTableDriver<Types, EntryData> *driver,
       const Entry<EntryData> &entry)
    {
      hb_buffer_t *buffer = driver->buffer;
      unsigned int flags = entry.flags;

      unsigned mark_loc = buffer->out_len;

      if (entry.data.markedInsertIndex != 0xFFFF)
      {
 unsigned int count = (flags & MarkedInsertCount);
 if ((__builtin_expect (!!((buffer->max_ops -= count) <= 0), 0))) return;
 unsigned int start = entry.data.markedInsertIndex;
 const HBGlyphID16 *glyphs = &insertionAction[start];
 if ((__builtin_expect (!!(!c->sanitizer.check_array (glyphs, count)), 0))) count = 0;

 bool before = flags & MarkedInsertBefore;

 unsigned int end = buffer->out_len;
 if ((__builtin_expect (!!(!buffer->move_to (mark)), 0))) return;

 if (buffer->idx < buffer->len && !before)
   if ((__builtin_expect (!!(!buffer->copy_glyph ()), 0))) return;

 if ((__builtin_expect (!!(!buffer->replace_glyphs (0, count, glyphs)), 0))) return;
 if (buffer->idx < buffer->len && !before)
   buffer->skip_glyph ();

 if ((__builtin_expect (!!(!buffer->move_to (end + count)), 0))) return;

 buffer->unsafe_to_break_from_outbuffer (mark, hb_min (buffer->idx + 1, buffer->len));
      }

      if (flags & SetMark)
 mark = mark_loc;

      if (entry.data.currentInsertIndex != 0xFFFF)
      {
 unsigned int count = (flags & CurrentInsertCount) >> 5;
 if ((__builtin_expect (!!((buffer->max_ops -= count) <= 0), 0))) return;
 unsigned int start = entry.data.currentInsertIndex;
 const HBGlyphID16 *glyphs = &insertionAction[start];
 if ((__builtin_expect (!!(!c->sanitizer.check_array (glyphs, count)), 0))) count = 0;

 bool before = flags & CurrentInsertBefore;

 unsigned int end = buffer->out_len;

 if (buffer->idx < buffer->len && !before)
   if ((__builtin_expect (!!(!buffer->copy_glyph ()), 0))) return;

 if ((__builtin_expect (!!(!buffer->replace_glyphs (0, count, glyphs)), 0))) return;
 if (buffer->idx < buffer->len && !before)
   buffer->skip_glyph ();
# 823 "../harfbuzz-6.0.0/src/hb-aat-layout-morx-table.hh"
 if ((__builtin_expect (!!(!buffer->move_to ((flags & DontAdvance) ? end : end + count)), 0))) return;
      }
    }

    public:
    bool ret;
    private:
    hb_aat_apply_context_t *c;
    unsigned int mark;
    const UnsizedArrayOf<HBGlyphID16> &insertionAction;
  };

  bool apply (hb_aat_apply_context_t *c) const
  {
    hb_no_trace_t<bool> trace;

    driver_context_t dc (this, c);

    StateTableDriver<Types, EntryData> driver (machine, c->buffer, c->face);
    driver.drive (&dc, c);

    return trace.ret (dc.ret, __PRETTY_FUNCTION__, 844);
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;

    return trace.ret (c->check_struct (this) && machine.sanitize (c) && insertionAction, __PRETTY_FUNCTION__, 851)
                    ;
  }

  protected:
  StateTable<Types, EntryData>
  machine;
  NNOffsetTo<UnsizedArrayOf<HBGlyphID16>, HBUINT>
  insertionAction;

  public:
  void _instance_assertion_on_line_862 () const { static_assert ((sizeof (*this) == (20)), ""); } unsigned int get_size () const { return (20); } static constexpr unsigned null_size = (20); static constexpr unsigned min_size = (20); static constexpr unsigned static_size = (20);
};


struct Feature
{
  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this), __PRETTY_FUNCTION__, 871);
  }

  public:
  HBUINT16 featureType;
  HBUINT16 featureSetting;
  HBUINT32 enableFlags;

  HBUINT32 disableFlags;


  public:
  void _instance_assertion_on_line_883 () const { static_assert ((sizeof (*this) == (12)), ""); } unsigned int get_size () const { return (12); } static constexpr unsigned null_size = (12); static constexpr unsigned min_size = (12); static constexpr unsigned static_size = (12);
};

template <typename Types>
struct ChainSubtable
{
  typedef typename Types::HBUINT HBUINT;

  template <typename T>
  friend struct Chain;

  unsigned int get_size () const { return length; }
  unsigned int get_type () const { return coverage & 0xFF; }
  unsigned int get_coverage () const { return coverage >> (sizeof (HBUINT) * 8 - 8); }

  enum Coverage
  {
    Vertical = 0x80,


    Backwards = 0x40,


    AllDirections = 0x20,


    Logical = 0x10,


  };
  enum Type
  {
    Rearrangement = 0,
    Contextual = 1,
    Ligature = 2,
    Noncontextual = 4,
    Insertion = 5
  };

  template <typename context_t, typename ...Ts>
  typename context_t::return_t dispatch (context_t *c, Ts&&... ds) const
  {
    unsigned int subtable_type = get_type ();
    hb_no_trace_t<typename context_t::return_t> trace;
    switch (subtable_type) {
    case Rearrangement: return trace.ret (c->dispatch (u.rearrangement, std::forward<Ts> (ds)...), __PRETTY_FUNCTION__, 928);
    case Contextual: return trace.ret (c->dispatch (u.contextual, std::forward<Ts> (ds)...), __PRETTY_FUNCTION__, 929);
    case Ligature: return trace.ret (c->dispatch (u.ligature, std::forward<Ts> (ds)...), __PRETTY_FUNCTION__, 930);
    case Noncontextual: return trace.ret (c->dispatch (u.noncontextual, std::forward<Ts> (ds)...), __PRETTY_FUNCTION__, 931);
    case Insertion: return trace.ret (c->dispatch (u.insertion, std::forward<Ts> (ds)...), __PRETTY_FUNCTION__, 932);
    default: return trace.ret (c->default_return_value (), __PRETTY_FUNCTION__, 933);
    }
  }

  bool apply (hb_aat_apply_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    hb_sanitize_with_object_t with (&c->sanitizer, this);
    return trace.ret (dispatch (c), __PRETTY_FUNCTION__, 941);
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    if (!length.sanitize (c) ||
 length <= min_size ||
 !c->check_range (this, length))
      return trace.ret (false, __PRETTY_FUNCTION__, 950);

    hb_sanitize_with_object_t with (c, this);
    return trace.ret (dispatch (c), __PRETTY_FUNCTION__, 953);
  }

  protected:
  HBUINT length;
  HBUINT coverage;
  HBUINT32 subFeatureFlags;
  union {
  RearrangementSubtable<Types> rearrangement;
  ContextualSubtable<Types> contextual;
  LigatureSubtable<Types> ligature;
  NoncontextualSubtable<Types> noncontextual;
  InsertionSubtable<Types> insertion;
  } u;
  public:
  void _instance_assertion_on_line_968 () const { static_assert ((sizeof (*this) >= (2 * sizeof (HBUINT) + 4)), ""); } static constexpr unsigned null_size = (2 * sizeof (HBUINT) + 4); static constexpr unsigned min_size = (2 * sizeof (HBUINT) + 4);
};

template <typename Types>
struct Chain
{
  typedef typename Types::HBUINT HBUINT;

  hb_mask_t compile_flags (const hb_aat_map_builder_t *map) const
  {
    hb_mask_t flags = defaultFlags;
    {
      unsigned int count = featureCount;
      for (unsigned i = 0; i < count; i++)
      {
 const Feature &feature = featureZ[i];
 hb_aat_layout_feature_type_t type = (hb_aat_layout_feature_type_t) (unsigned int) feature.featureType;
 hb_aat_layout_feature_selector_t setting = (hb_aat_layout_feature_selector_t) (unsigned int) feature.featureSetting;
      retry:


 hb_aat_map_builder_t::feature_info_t info = { type, setting, false, 0 };
 if (map->current_features.bsearch (info))
 {
   flags &= feature.disableFlags;
   flags |= feature.enableFlags;
 }
 else if (type == HB_AAT_LAYOUT_FEATURE_TYPE_LETTER_CASE && setting == HB_AAT_LAYOUT_FEATURE_SELECTOR_SMALL_CAPS)
 {

   type = HB_AAT_LAYOUT_FEATURE_TYPE_LOWER_CASE;
   setting = HB_AAT_LAYOUT_FEATURE_SELECTOR_LOWER_CASE_SMALL_CAPS;
   goto retry;
 }

 else if (type == HB_AAT_LAYOUT_FEATURE_TYPE_LANGUAGE_TAG_TYPE && setting &&

   hb_language_matches (map->face->table.ltag->get_language (setting - 1), map->props.language))
 {
   flags &= feature.disableFlags;
   flags |= feature.enableFlags;
 }

      }
    }
    return flags;
  }

  void apply (hb_aat_apply_context_t *c) const
  {
    const ChainSubtable<Types> *subtable = &StructAfter<ChainSubtable<Types>> (featureZ.as_array (featureCount));
    unsigned int count = subtableCount;
    for (unsigned int i = 0; i < count; i++)
    {
      bool reverse;

      if (hb_none (hb_iter (c->range_flags) |
     hb_map ([&subtable] (const hb_aat_map_t::range_flags_t _) -> bool { return subtable->subFeatureFlags & (_.flags); })))
 goto skip;
      c->subtable_flags = subtable->subFeatureFlags;

      if (!(subtable->get_coverage() & ChainSubtable<Types>::AllDirections) &&
   ((((unsigned int) (c->buffer->props.direction)) & ~1U) == 6) !=
   bool (subtable->get_coverage() & ChainSubtable<Types>::Vertical))
 goto skip;
# 1061 "../harfbuzz-6.0.0/src/hb-aat-layout-morx-table.hh"
      reverse = subtable->get_coverage () & ChainSubtable<Types>::Logical ?
  bool (subtable->get_coverage () & ChainSubtable<Types>::Backwards) :
  bool (subtable->get_coverage () & ChainSubtable<Types>::Backwards) !=
  ((((unsigned int) (c->buffer->props.direction)) & ~2U) == 5);

      if (!c->buffer->message (c->font, "start chainsubtable %u", c->lookup_index))
 goto skip;

      if (reverse)
 c->buffer->reverse ();

      subtable->apply (c);

      if (reverse)
 c->buffer->reverse ();

      (void) c->buffer->message (c->font, "end chainsubtable %u", c->lookup_index);

      if ((__builtin_expect (!!(!c->buffer->successful), 0))) return;

    skip:
      subtable = &StructAfter<ChainSubtable<Types>> (*subtable);
      c->set_lookup_index (c->lookup_index + 1);
    }
  }

  unsigned int get_size () const { return length; }

  bool sanitize (hb_sanitize_context_t *c, unsigned int version __attribute__((unused))) const
  {
    hb_no_trace_t<bool> trace;
    if (!length.sanitize (c) ||
 length < min_size ||
 !c->check_range (this, length))
      return trace.ret (false, __PRETTY_FUNCTION__, 1095);

    if (!c->check_array (featureZ.arrayZ, featureCount))
      return trace.ret (false, __PRETTY_FUNCTION__, 1098);

    const ChainSubtable<Types> *subtable = &StructAfter<ChainSubtable<Types>> (featureZ.as_array (featureCount));
    unsigned int count = subtableCount;
    for (unsigned int i = 0; i < count; i++)
    {
      if (!subtable->sanitize (c))
 return trace.ret (false, __PRETTY_FUNCTION__, 1105);
      subtable = &StructAfter<ChainSubtable<Types>> (*subtable);
    }

    return trace.ret (true, __PRETTY_FUNCTION__, 1109);
  }

  protected:
  HBUINT32 defaultFlags;
  HBUINT32 length;
  HBUINT featureCount;
  HBUINT subtableCount;

  UnsizedArrayOf<Feature> featureZ;



  public:
  void _instance_assertion_on_line_1123 () const { static_assert ((sizeof (*this) >= (8 + 2 * sizeof (HBUINT))), ""); } static constexpr unsigned null_size = (8 + 2 * sizeof (HBUINT)); static constexpr unsigned min_size = (8 + 2 * sizeof (HBUINT));
};






template <typename Types, hb_tag_t TAG>
struct mortmorx
{
  static constexpr hb_tag_t tableTag = TAG;

  bool has_data () const { return version != 0; }

  void compile_flags (const hb_aat_map_builder_t *mapper,
        hb_aat_map_t *map) const
  {
    const Chain<Types> *chain = &firstChain;
    unsigned int count = chainCount;
    if ((__builtin_expect (!!(!map->chain_flags.resize (count)), 0)))
      return;
    for (unsigned int i = 0; i < count; i++)
    {
      map->chain_flags[i].push (hb_aat_map_t::range_flags_t {chain->compile_flags (mapper),
            mapper->range_first,
            mapper->range_last});
      chain = &StructAfter<Chain<Types>> (*chain);
    }
  }

  void apply (hb_aat_apply_context_t *c,
       const hb_aat_map_t &map) const
  {
    if ((__builtin_expect (!!(!c->buffer->successful), 0))) return;

    c->buffer->unsafe_to_concat ();

    c->set_lookup_index (0);
    const Chain<Types> *chain = &firstChain;
    unsigned int count = chainCount;
    for (unsigned int i = 0; i < count; i++)
    {
      c->range_flags = &map.chain_flags[i];
      chain->apply (c);
      if ((__builtin_expect (!!(!c->buffer->successful), 0))) return;
      chain = &StructAfter<Chain<Types>> (*chain);
    }
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    if (!version.sanitize (c) || !version || !chainCount.sanitize (c))
      return trace.ret (false, __PRETTY_FUNCTION__, 1177);

    const Chain<Types> *chain = &firstChain;
    unsigned int count = chainCount;
    for (unsigned int i = 0; i < count; i++)
    {
      if (!chain->sanitize (c, version))
 return trace.ret (false, __PRETTY_FUNCTION__, 1184);
      chain = &StructAfter<Chain<Types>> (*chain);
    }

    return trace.ret (true, __PRETTY_FUNCTION__, 1188);
  }

  protected:
  HBUINT16 version;

  HBUINT16 unused;
  HBUINT32 chainCount;

  Chain<Types> firstChain;

  public:
  void _instance_assertion_on_line_1200 () const { static_assert ((sizeof (*this) >= (8)), ""); } static constexpr unsigned null_size = (8); static constexpr unsigned min_size = (8);
};

struct morx : mortmorx<ExtendedTypes, ((hb_tag_t)((((uint32_t)('m')&0xFF)<<24)|(((uint32_t)('o')&0xFF)<<16)|(((uint32_t)('r')&0xFF)<<8)|((uint32_t)('x')&0xFF)))> {};
struct mort : mortmorx<ObsoleteTypes, ((hb_tag_t)((((uint32_t)('m')&0xFF)<<24)|(((uint32_t)('o')&0xFF)<<16)|(((uint32_t)('r')&0xFF)<<8)|((uint32_t)('t')&0xFF)))> {};


}
# 33 "../harfbuzz-6.0.0/src/hb-aat-layout-just-table.hh" 2





#define HB_AAT_TAG_just HB_TAG('j','u','s','t')


namespace AAT {

using namespace OT;


struct ActionSubrecordHeader
{
  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this), __PRETTY_FUNCTION__, 51);
  }

  HBUINT16 actionClass;

  HBUINT16 actionType;
  HBUINT16 actionLength;

  public:
  void _instance_assertion_on_line_60 () const { static_assert ((sizeof (*this) == (6)), ""); } unsigned int get_size () const { return (6); } static constexpr unsigned null_size = (6); static constexpr unsigned min_size = (6); static constexpr unsigned static_size = (6);
};

struct DecompositionAction
{
  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this), __PRETTY_FUNCTION__, 68);
  }

  ActionSubrecordHeader
  header;
  F16DOT16 lowerLimit;

  F16DOT16 upperLimit;

  HBUINT16 order;




  Array16Of<HBUINT16>
  decomposedglyphs;




  public:
  void _compiles_assertion_on_line_89 () const { (void) (decomposedglyphs)[0].static_size; } void _instance_assertion_on_line_89 () const { static_assert ((sizeof (*this) == (18) + (1 +0) * sizeof ((decomposedglyphs)[0])), ""); } static constexpr unsigned null_size = (18); static constexpr unsigned min_size = (18);
};

struct UnconditionalAddGlyphAction
{
  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this), __PRETTY_FUNCTION__, 97);
  }

  protected:
  ActionSubrecordHeader
  header;
  HBGlyphID16 addGlyph;


  public:
  void _instance_assertion_on_line_107 () const { static_assert ((sizeof (*this) == (8)), ""); } unsigned int get_size () const { return (8); } static constexpr unsigned null_size = (8); static constexpr unsigned min_size = (8); static constexpr unsigned static_size = (8);
};

struct ConditionalAddGlyphAction
{
  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this), __PRETTY_FUNCTION__, 115);
  }

  protected:
  ActionSubrecordHeader
  header;
  F16DOT16 substThreshold;


  HBGlyphID16 addGlyph;



  HBGlyphID16 substGlyph;


  public:
  void _instance_assertion_on_line_132 () const { static_assert ((sizeof (*this) == (14)), ""); } unsigned int get_size () const { return (14); } static constexpr unsigned null_size = (14); static constexpr unsigned min_size = (14); static constexpr unsigned static_size = (14);
};

struct DuctileGlyphAction
{
  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this), __PRETTY_FUNCTION__, 140);
  }

  protected:
  ActionSubrecordHeader
  header;
  HBUINT32 variationAxis;


  F16DOT16 minimumLimit;


  F16DOT16 noStretchValue;


  F16DOT16 maximumLimit;

  public:
  void _instance_assertion_on_line_158 () const { static_assert ((sizeof (*this) == (22)), ""); } unsigned int get_size () const { return (22); } static constexpr unsigned null_size = (22); static constexpr unsigned min_size = (22); static constexpr unsigned static_size = (22);
};

struct RepeatedAddGlyphAction
{
  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this), __PRETTY_FUNCTION__, 166);
  }

  protected:
  ActionSubrecordHeader
  header;
  HBUINT16 flags;
  HBGlyphID16 glyph;

  public:
  void _instance_assertion_on_line_176 () const { static_assert ((sizeof (*this) == (10)), ""); } unsigned int get_size () const { return (10); } static constexpr unsigned null_size = (10); static constexpr unsigned min_size = (10); static constexpr unsigned static_size = (10);
};

struct ActionSubrecord
{
  unsigned int get_length () const { return u.header.actionLength; }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    if ((__builtin_expect (!!(!c->check_struct (this)), 0)))
      return trace.ret (false, __PRETTY_FUNCTION__, 187);

    switch (u.header.actionType)
    {
    case 0: return trace.ret (u.decompositionAction.sanitize (c), __PRETTY_FUNCTION__, 191);
    case 1: return trace.ret (u.unconditionalAddGlyphAction.sanitize (c), __PRETTY_FUNCTION__, 192);
    case 2: return trace.ret (u.conditionalAddGlyphAction.sanitize (c), __PRETTY_FUNCTION__, 193);

    case 4: return trace.ret (u.decompositionAction.sanitize (c), __PRETTY_FUNCTION__, 195);
    case 5: return trace.ret (u.decompositionAction.sanitize (c), __PRETTY_FUNCTION__, 196);
    default: return trace.ret (true, __PRETTY_FUNCTION__, 197);
    }
  }

  protected:
  union {
  ActionSubrecordHeader header;
  DecompositionAction decompositionAction;
  UnconditionalAddGlyphAction unconditionalAddGlyphAction;
  ConditionalAddGlyphAction conditionalAddGlyphAction;

  DuctileGlyphAction ductileGlyphAction;
  RepeatedAddGlyphAction repeatedAddGlyphAction;
  } u;

  public:
  void _compiles_assertion_on_line_213 () const { (void) this->u.header.static_size; } void _instance_assertion_on_line_213 () const { static_assert ((sizeof(this->u.header) == (6)), ""); } static constexpr unsigned null_size = (6); static constexpr unsigned min_size = (6);
};

struct PostcompensationActionChain
{
  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    if ((__builtin_expect (!!(!c->check_struct (this)), 0)))
      return trace.ret (false, __PRETTY_FUNCTION__, 222);

    unsigned int offset = min_size;
    for (unsigned int i = 0; i < count; i++)
    {
      const ActionSubrecord& subrecord = StructAtOffset<ActionSubrecord> (this, offset);
      if ((__builtin_expect (!!(!subrecord.sanitize (c)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 228);
      offset += subrecord.get_length ();
    }

    return trace.ret (true, __PRETTY_FUNCTION__, 232);
  }

  protected:
  HBUINT32 count;

  public:
  void _instance_assertion_on_line_239 () const { static_assert ((sizeof (*this) == (4)), ""); } unsigned int get_size () const { return (4); } static constexpr unsigned null_size = (4); static constexpr unsigned min_size = (4); static constexpr unsigned static_size = (4);
};

struct JustWidthDeltaEntry
{
  enum Flags
  {
    Reserved1 =0xE000,
    UnlimiteGap =0x1000,



    Reserved2 =0x0FF0,
    Priority =0x000F
  };

  enum Priority
  {
    Kashida = 0,

    Whitespace = 1,


    InterCharacter = 2,

    NullPriority = 3






  };

  protected:
  F16DOT16 beforeGrowLimit;

  F16DOT16 beforeShrinkLimit;


  F16DOT16 afterGrowLimit;

  F16DOT16 afterShrinkLimit;



  HBUINT16 growFlags;
  HBUINT16 shrinkFlags;

  public:
  void _instance_assertion_on_line_289 () const { static_assert ((sizeof (*this) == (20)), ""); } unsigned int get_size () const { return (20); } static constexpr unsigned null_size = (20); static constexpr unsigned min_size = (20); static constexpr unsigned static_size = (20);
};

struct WidthDeltaPair
{
  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this), __PRETTY_FUNCTION__, 297);
  }

  protected:
  HBUINT32 justClass;




  JustWidthDeltaEntry
  wdRecord;

  public:
  void _instance_assertion_on_line_310 () const { static_assert ((sizeof (*this) == (24)), ""); } unsigned int get_size () const { return (24); } static constexpr unsigned null_size = (24); static constexpr unsigned min_size = (24); static constexpr unsigned static_size = (24);
};

typedef OT::Array32Of<WidthDeltaPair> WidthDeltaCluster;

struct JustificationCategory
{
  typedef void EntryData;

  enum Flags
  {
    SetMark =0x8000,

    DontAdvance =0x4000,

    MarkCategory =0x3F80,

    CurrentCategory =0x007F

  };

  bool sanitize (hb_sanitize_context_t *c, const void *base) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret ((__builtin_expect (!!(c->check_struct (this) && morphHeader.sanitize (c) && stHeader.sanitize (c)), 1)), __PRETTY_FUNCTION__, 334)

                            ;
  }

  protected:
  ChainSubtable<ObsoleteTypes>
  morphHeader;
  StateTable<ObsoleteTypes, EntryData>
  stHeader;
  public:
  void _instance_assertion_on_line_345 () const { static_assert ((sizeof (*this) == (30)), ""); } unsigned int get_size () const { return (30); } static constexpr unsigned null_size = (30); static constexpr unsigned min_size = (30); static constexpr unsigned static_size = (30);
};

struct JustificationHeader
{
  bool sanitize (hb_sanitize_context_t *c, const void *base) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret ((__builtin_expect (!!(c->check_struct (this) && justClassTable.sanitize (c, base, base) && wdcTable.sanitize (c, base) && pcTable.sanitize (c, base) && lookupTable.sanitize (c, base)), 1)), __PRETTY_FUNCTION__, 353)



                                     ;
  }

  protected:
  Offset16To<JustificationCategory>
  justClassTable;
  Offset16To<WidthDeltaCluster>
  wdcTable;




  Offset16To<PostcompensationActionChain>
  pcTable;



  Lookup<Offset16To<WidthDeltaCluster>>
  lookupTable;



  public:
  void _instance_assertion_on_line_380 () const { static_assert ((sizeof (*this) >= (8)), ""); } static constexpr unsigned null_size = (8); static constexpr unsigned min_size = (8);
};

struct just
{
  static constexpr hb_tag_t tableTag = ((hb_tag_t)((((uint32_t)('j')&0xFF)<<24)|(((uint32_t)('u')&0xFF)<<16)|(((uint32_t)('s')&0xFF)<<8)|((uint32_t)('t')&0xFF)));

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;

    return trace.ret ((__builtin_expect (!!(c->check_struct (this) && version.major == 1 && horizData.sanitize (c, this, this) && vertData.sanitize (c, this, this)), 1)), __PRETTY_FUNCTION__, 391)


                                        ;
  }

  protected:
  FixedVersion<>version;

  HBUINT16 format;
  Offset16To<JustificationHeader>
  horizData;




  Offset16To<JustificationHeader>
  vertData;

  public:
  void _instance_assertion_on_line_411 () const { static_assert ((sizeof (*this) == (10)), ""); } unsigned int get_size () const { return (10); } static constexpr unsigned null_size = (10); static constexpr unsigned min_size = (10); static constexpr unsigned static_size = (10);
};

}
# 35 "../harfbuzz-6.0.0/src/hb-aat-layout.cc" 2
# 1 "../harfbuzz-6.0.0/src/hb-aat-layout-kerx-table.hh" 1
# 29 "../harfbuzz-6.0.0/src/hb-aat-layout-kerx-table.hh"
#define HB_AAT_LAYOUT_KERX_TABLE_HH 

# 1 "../harfbuzz-6.0.0/src/hb-kern.hh" 1
# 28 "../harfbuzz-6.0.0/src/hb-kern.hh"
#define HB_KERN_HH 



# 1 "../harfbuzz-6.0.0/src/hb-ot-layout-gpos-table.hh" 1
# 30 "../harfbuzz-6.0.0/src/hb-ot-layout-gpos-table.hh"
#define HB_OT_LAYOUT_GPOS_TABLE_HH 

# 1 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/GPOS.hh" 1

#define OT_LAYOUT_GPOS_GPOS_HH 

# 1 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-common.hh" 1
# 5 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/GPOS.hh" 2
# 1 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh" 1
# 30 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh"
#define HB_OT_LAYOUT_GSUBGPOS_HH 

# 1 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb.hh" 1
# 33 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh" 2
# 1 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-buffer.hh" 1
# 34 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh" 2
# 1 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-map.hh" 1
# 35 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh" 2
# 1 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-set.hh" 1
# 36 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh" 2
# 1 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-map.hh" 1
# 37 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh" 2
# 1 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-common.hh" 1
# 38 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh" 2
# 1 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gdef-table.hh" 1
# 39 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh" 2


namespace OT {


struct hb_intersects_context_t :
       hb_dispatch_context_t<hb_intersects_context_t, bool>
{
  template <typename T>
  return_t dispatch (const T &obj) { return obj.intersects (this->glyphs); }
  static return_t default_return_value () { return false; }
  bool stop_sublookup_iteration (return_t r) const { return r; }

  const hb_set_t *glyphs;

  hb_intersects_context_t (const hb_set_t *glyphs_) :
                            glyphs (glyphs_) {}
};

struct hb_have_non_1to1_context_t :
       hb_dispatch_context_t<hb_have_non_1to1_context_t, bool>
{
  template <typename T>
  return_t dispatch (const T &obj) { return obj.may_have_non_1to1 (); }
  static return_t default_return_value () { return false; }
  bool stop_sublookup_iteration (return_t r) const { return r; }
};

struct hb_closure_context_t :
       hb_dispatch_context_t<hb_closure_context_t>
{
  typedef return_t (*recurse_func_t) (hb_closure_context_t *c, unsigned lookup_index, hb_set_t *covered_seq_indicies, unsigned seq_index, unsigned end_index);
  template <typename T>
  return_t dispatch (const T &obj) { obj.closure (this); return hb_empty_t (); }
  static return_t default_return_value () { return hb_empty_t (); }
  void recurse (unsigned lookup_index, hb_set_t *covered_seq_indicies, unsigned seq_index, unsigned end_index)
  {
    if ((__builtin_expect (!!(nesting_level_left == 0 || !recurse_func), 0)))
      return;

    nesting_level_left--;
    recurse_func (this, lookup_index, covered_seq_indicies, seq_index, end_index);
    nesting_level_left++;
  }

  void reset_lookup_visit_count ()
  { lookup_count = 0; }

  bool lookup_limit_exceeded ()
  { return lookup_count > 35000; }

  bool should_visit_lookup (unsigned int lookup_index)
  {
    if (lookup_count++ > 35000)
      return false;

    if (is_lookup_done (lookup_index))
      return false;

    return true;
  }

  bool is_lookup_done (unsigned int lookup_index)
  {
    if ((__builtin_expect (!!(done_lookups_glyph_count->in_error () || done_lookups_glyph_set->in_error ()), 0))
                                        )
      return true;


    if (done_lookups_glyph_count->get (lookup_index) != glyphs->get_population ())
    {
      done_lookups_glyph_count->set (lookup_index, glyphs->get_population ());

      if (!done_lookups_glyph_set->has (lookup_index))
      {
 if ((__builtin_expect (!!(!done_lookups_glyph_set->set (lookup_index, hb::unique_ptr<hb_set_t> {hb_set_create ()})), 0)))
   return true;
      }

      done_lookups_glyph_set->get (lookup_index)->clear ();
    }

    hb_set_t *covered_glyph_set = done_lookups_glyph_set->get (lookup_index);
    if ((__builtin_expect (!!(covered_glyph_set->in_error ()), 0)))
      return true;
    if (parent_active_glyphs ().is_subset (*covered_glyph_set))
      return true;

    covered_glyph_set->union_ (parent_active_glyphs ());
    return false;
  }

  const hb_set_t& previous_parent_active_glyphs () {
    if (active_glyphs_stack.length <= 1)
      return *glyphs;

    return active_glyphs_stack[active_glyphs_stack.length - 2];
  }

  const hb_set_t& parent_active_glyphs ()
  {
    if (!active_glyphs_stack)
      return *glyphs;

    return active_glyphs_stack.tail ();
  }

  hb_set_t& push_cur_active_glyphs ()
  {
    return *active_glyphs_stack.push ();
  }

  bool pop_cur_done_glyphs ()
  {
    if (!active_glyphs_stack)
      return false;

    active_glyphs_stack.pop ();
    return true;
  }

  hb_face_t *face;
  hb_set_t *glyphs;
  hb_set_t output[1];
  hb_vector_t<hb_set_t> active_glyphs_stack;
  recurse_func_t recurse_func = nullptr;
  unsigned int nesting_level_left;

  hb_closure_context_t (hb_face_t *face_,
   hb_set_t *glyphs_,
   hb_map_t *done_lookups_glyph_count_,
   hb_hashmap_t<unsigned, hb::unique_ptr<hb_set_t>> *done_lookups_glyph_set_,
   unsigned int nesting_level_left_ = 64) :
     face (face_),
     glyphs (glyphs_),
     nesting_level_left (nesting_level_left_),
     done_lookups_glyph_count (done_lookups_glyph_count_),
     done_lookups_glyph_set (done_lookups_glyph_set_)
  {}

  ~hb_closure_context_t () { flush (); }

  void set_recurse_func (recurse_func_t func) { recurse_func = func; }

  void flush ()
  {
    output->del_range (face->get_num_glyphs (), ((hb_codepoint_t) -1));
    glyphs->union_ (*output);
    output->clear ();
    active_glyphs_stack.pop ();
    active_glyphs_stack.reset ();
  }

  private:
  hb_map_t *done_lookups_glyph_count;
  hb_hashmap_t<unsigned, hb::unique_ptr<hb_set_t>> *done_lookups_glyph_set;
  unsigned int lookup_count = 0;
};



struct hb_closure_lookups_context_t :
       hb_dispatch_context_t<hb_closure_lookups_context_t>
{
  typedef return_t (*recurse_func_t) (hb_closure_lookups_context_t *c, unsigned lookup_index);
  template <typename T>
  return_t dispatch (const T &obj) { obj.closure_lookups (this); return hb_empty_t (); }
  static return_t default_return_value () { return hb_empty_t (); }
  void recurse (unsigned lookup_index)
  {
    if ((__builtin_expect (!!(nesting_level_left == 0 || !recurse_func), 0)))
      return;


    if (lookup_limit_exceeded ()
        || visited_lookups->in_error ()
        || visited_lookups->has (lookup_index))


      return;

    nesting_level_left--;
    recurse_func (this, lookup_index);
    nesting_level_left++;
  }

  void set_lookup_visited (unsigned lookup_index)
  { visited_lookups->add (lookup_index); }

  void set_lookup_inactive (unsigned lookup_index)
  { inactive_lookups->add (lookup_index); }

  bool lookup_limit_exceeded ()
  {
    bool ret = lookup_count > 35000;
    if (ret)
      _hb_debug_msg<(0 +0)> ("SUBSET", (nullptr), nullptr, false, 0, 0, "lookup visit count limit exceeded in lookup closure!");
    return ret; }

  bool is_lookup_visited (unsigned lookup_index)
  {
    if ((__builtin_expect (!!(lookup_count++ > 35000), 0)))
    {
      _hb_debug_msg<(0 +0)> ("SUBSET", (nullptr), nullptr, false, 0, 0, "total visited lookup count %u exceeds max limit, lookup %u is dropped.", lookup_count, lookup_index)
                                            ;
      return true;
    }

    if ((__builtin_expect (!!(visited_lookups->in_error ()), 0)))
      return true;

    return visited_lookups->has (lookup_index);
  }

  hb_face_t *face;
  const hb_set_t *glyphs;
  recurse_func_t recurse_func;
  unsigned int nesting_level_left;

  hb_closure_lookups_context_t (hb_face_t *face_,
    const hb_set_t *glyphs_,
    hb_set_t *visited_lookups_,
    hb_set_t *inactive_lookups_,
    unsigned nesting_level_left_ = 64) :
    face (face_),
    glyphs (glyphs_),
    recurse_func (nullptr),
    nesting_level_left (nesting_level_left_),
    visited_lookups (visited_lookups_),
    inactive_lookups (inactive_lookups_),
    lookup_count (0) {}

  void set_recurse_func (recurse_func_t func) { recurse_func = func; }

  private:
  hb_set_t *visited_lookups;
  hb_set_t *inactive_lookups;
  unsigned int lookup_count;
};

struct hb_would_apply_context_t :
       hb_dispatch_context_t<hb_would_apply_context_t, bool>
{
  template <typename T>
  return_t dispatch (const T &obj) { return obj.would_apply (this); }
  static return_t default_return_value () { return false; }
  bool stop_sublookup_iteration (return_t r) const { return r; }

  hb_face_t *face;
  const hb_codepoint_t *glyphs;
  unsigned int len;
  bool zero_context;

  hb_would_apply_context_t (hb_face_t *face_,
       const hb_codepoint_t *glyphs_,
       unsigned int len_,
       bool zero_context_) :
         face (face_),
         glyphs (glyphs_),
         len (len_),
         zero_context (zero_context_) {}
};

struct hb_collect_glyphs_context_t :
       hb_dispatch_context_t<hb_collect_glyphs_context_t>
{
  typedef return_t (*recurse_func_t) (hb_collect_glyphs_context_t *c, unsigned int lookup_index);
  template <typename T>
  return_t dispatch (const T &obj) { obj.collect_glyphs (this); return hb_empty_t (); }
  static return_t default_return_value () { return hb_empty_t (); }
  void recurse (unsigned int lookup_index)
  {
    if ((__builtin_expect (!!(nesting_level_left == 0 || !recurse_func), 0)))
      return;
# 324 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh"
    if (output == hb_set_get_empty ())
      return;


    if (recursed_lookups->has (lookup_index))
      return;

    hb_set_t *old_before = before;
    hb_set_t *old_input = input;
    hb_set_t *old_after = after;
    before = input = after = hb_set_get_empty ();

    nesting_level_left--;
    recurse_func (this, lookup_index);
    nesting_level_left++;

    before = old_before;
    input = old_input;
    after = old_after;

    recursed_lookups->add (lookup_index);
  }

  hb_face_t *face;
  hb_set_t *before;
  hb_set_t *input;
  hb_set_t *after;
  hb_set_t *output;
  recurse_func_t recurse_func;
  hb_set_t *recursed_lookups;
  unsigned int nesting_level_left;

  hb_collect_glyphs_context_t (hb_face_t *face_,
          hb_set_t *glyphs_before,
          hb_set_t *glyphs_input,
          hb_set_t *glyphs_after,
          hb_set_t *glyphs_output,
          unsigned int nesting_level_left_ = 64) :
         face (face_),
         before (glyphs_before ? glyphs_before : hb_set_get_empty ()),
         input (glyphs_input ? glyphs_input : hb_set_get_empty ()),
         after (glyphs_after ? glyphs_after : hb_set_get_empty ()),
         output (glyphs_output ? glyphs_output : hb_set_get_empty ()),
         recurse_func (nullptr),
         recursed_lookups (hb_set_create ()),
         nesting_level_left (nesting_level_left_) {}
  ~hb_collect_glyphs_context_t () { hb_set_destroy (recursed_lookups); }

  void set_recurse_func (recurse_func_t func) { recurse_func = func; }
};



template <typename set_t>
struct hb_collect_coverage_context_t :
       hb_dispatch_context_t<hb_collect_coverage_context_t<set_t>, const Coverage &>
{
  typedef const Coverage &return_t;
  template <typename T>
  return_t dispatch (const T &obj) { return obj.get_coverage (); }
  static return_t default_return_value () { return NullHelper<Coverage>::get_null (); }
  bool stop_sublookup_iteration (return_t r) const
  {
    r.collect_coverage (set);
    return false;
  }

  hb_collect_coverage_context_t (set_t *set_) :
       set (set_) {}

  set_t *set;
};

struct hb_ot_apply_context_t :
       hb_dispatch_context_t<hb_ot_apply_context_t, bool, (0 +0)>
{
  struct matcher_t
  {
    matcher_t () :
      lookup_props (0),
      mask (-1),
      ignore_zwnj (false),
      ignore_zwj (false),
      per_syllable (false),
      syllable {0},
      match_func (nullptr),
      match_data (nullptr) {}

    typedef bool (*match_func_t) (hb_glyph_info_t &info, unsigned value, const void *data);

    void set_ignore_zwnj (bool ignore_zwnj_) { ignore_zwnj = ignore_zwnj_; }
    void set_ignore_zwj (bool ignore_zwj_) { ignore_zwj = ignore_zwj_; }
    void set_lookup_props (unsigned int lookup_props_) { lookup_props = lookup_props_; }
    void set_mask (hb_mask_t mask_) { mask = mask_; }
    void set_per_syllable (bool per_syllable_) { per_syllable = per_syllable_; }
    void set_syllable (uint8_t syllable_) { syllable = per_syllable ? syllable_ : 0; }
    void set_match_func (match_func_t match_func_,
    const void *match_data_)
    { match_func = match_func_; match_data = match_data_; }

    enum may_match_t {
      MATCH_NO,
      MATCH_YES,
      MATCH_MAYBE
    };

    may_match_t may_match (hb_glyph_info_t &info,
      hb_codepoint_t glyph_data) const
    {
      if (!(info.mask & mask) ||
   (syllable && syllable != info.var1.u8[3]))
 return MATCH_NO;

      if (match_func)
 return match_func (info, glyph_data, match_data) ? MATCH_YES : MATCH_NO;

      return MATCH_MAYBE;
    }

    enum may_skip_t {
      SKIP_NO,
      SKIP_YES,
      SKIP_MAYBE
    };

    may_skip_t may_skip (const hb_ot_apply_context_t *c,
    const hb_glyph_info_t &info) const
    {
      if (!c->check_glyph_property (&info, lookup_props))
 return SKIP_YES;

      if ((__builtin_expect (!!(_hb_glyph_info_is_default_ignorable_and_not_hidden (&info) && (ignore_zwnj || !_hb_glyph_info_is_zwnj (&info)) && (ignore_zwj || !_hb_glyph_info_is_zwj (&info))), 0))

                                                     )
 return SKIP_MAYBE;

      return SKIP_NO;
    }

    protected:
    unsigned int lookup_props;
    hb_mask_t mask;
    bool ignore_zwnj;
    bool ignore_zwj;
    bool per_syllable;
    uint8_t syllable;
    match_func_t match_func;
    const void *match_data;
  };

  struct skipping_iterator_t
  {
    void init (hb_ot_apply_context_t *c_, bool context_match = false)
    {
      c = c_;
      match_glyph_data16 = nullptr;



      matcher.set_match_func (nullptr, nullptr);
      matcher.set_lookup_props (c->lookup_props);

      matcher.set_ignore_zwnj (c->table_index == 1 || (context_match && c->auto_zwnj));

      matcher.set_ignore_zwj (context_match || c->auto_zwj);
      matcher.set_mask (context_match ? -1 : c->lookup_mask);
      matcher.set_per_syllable (c->per_syllable);
    }
    void set_lookup_props (unsigned int lookup_props)
    {
      matcher.set_lookup_props (lookup_props);
    }
    void set_match_func (matcher_t::match_func_t match_func_,
    const void *match_data_)
    {
      matcher.set_match_func (match_func_, match_data_);
    }
    void set_glyph_data (const HBUINT16 glyph_data[])
    {
      match_glyph_data16 = glyph_data;



    }
# 516 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh"
    void reset (unsigned int start_index_,
  unsigned int num_items_)
    {
      idx = start_index_;
      num_items = num_items_;
      end = c->buffer->len;
      matcher.set_syllable (start_index_ == c->buffer->idx ? c->buffer->cur().var1.u8[3] : 0);
    }

    void reject ()
    {
      num_items++;
      backup_glyph_data ();
    }

    matcher_t::may_skip_t
    may_skip (const hb_glyph_info_t &info) const
    { return matcher.may_skip (c, info); }

    bool next (unsigned *unsafe_to = nullptr)
    {
      
# 537 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh" 3 4
     (static_cast <bool> (
# 537 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh"
     num_items > 0
# 537 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh" 3 4
     ) ? void (0) : __assert_fail (
# 537 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh"
     "num_items > 0"
# 537 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh" 3 4
     , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-ot-layout-gsubgpos.hh", 537, __extension__ __PRETTY_FUNCTION__))
# 537 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh"
                           ;


      signed stop = (signed) end - (signed) num_items;
      if (c->buffer->flags & HB_BUFFER_FLAG_PRODUCE_UNSAFE_TO_CONCAT)
        stop = (signed) end - 1;
      while ((signed) idx < stop)
      {
 idx++;
 hb_glyph_info_t &info = c->buffer->info[idx];

 matcher_t::may_skip_t skip = matcher.may_skip (c, info);
 if ((__builtin_expect (!!(skip == matcher_t::SKIP_YES), 0)))
   continue;

 matcher_t::may_match_t match = matcher.may_match (info, get_glyph_data ());
 if (match == matcher_t::MATCH_YES ||
     (match == matcher_t::MATCH_MAYBE &&
      skip == matcher_t::SKIP_NO))
 {
   num_items--;
   advance_glyph_data ();
   return true;
 }

 if (skip == matcher_t::SKIP_NO)
 {
   if (unsafe_to)
     *unsafe_to = idx + 1;
   return false;
 }
      }
      if (unsafe_to)
        *unsafe_to = end;
      return false;
    }
    bool prev (unsigned *unsafe_from = nullptr)
    {
      
# 575 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh" 3 4
     (static_cast <bool> (
# 575 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh"
     num_items > 0
# 575 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh" 3 4
     ) ? void (0) : __assert_fail (
# 575 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh"
     "num_items > 0"
# 575 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh" 3 4
     , "/usr/src/debug/harfbuzz/6.0.0-r0/src/hb-ot-layout-gsubgpos.hh", 575, __extension__ __PRETTY_FUNCTION__))
# 575 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh"
                           ;


      unsigned stop = num_items - 1;
      if (c->buffer->flags & HB_BUFFER_FLAG_PRODUCE_UNSAFE_TO_CONCAT)
        stop = 1 - 1;





      stop = (unsigned) hb_max ((int) stop, (int) idx - 64);

      while (idx > stop)
      {
 idx--;
 hb_glyph_info_t &info = c->buffer->out_info[idx];

 matcher_t::may_skip_t skip = matcher.may_skip (c, info);
 if ((__builtin_expect (!!(skip == matcher_t::SKIP_YES), 0)))
   continue;

 matcher_t::may_match_t match = matcher.may_match (info, get_glyph_data ());
 if (match == matcher_t::MATCH_YES ||
     (match == matcher_t::MATCH_MAYBE &&
      skip == matcher_t::SKIP_NO))
 {
   num_items--;
   advance_glyph_data ();
   return true;
 }

 if (skip == matcher_t::SKIP_NO)
 {
   if (unsafe_from)
     *unsafe_from = hb_max (1u, idx) - 1u;
   return false;
 }
      }
      if (unsafe_from)
        *unsafe_from = 0;
      return false;
    }

    hb_codepoint_t
    get_glyph_data ()
    {
      if (match_glyph_data16) return *match_glyph_data16;




      return 0;
    }
    void
    advance_glyph_data ()
    {
      if (match_glyph_data16) match_glyph_data16++;




    }
    void
    backup_glyph_data ()
    {
      if (match_glyph_data16) match_glyph_data16--;




    }

    unsigned int idx;
    protected:
    hb_ot_apply_context_t *c;
    matcher_t matcher;
    const HBUINT16 *match_glyph_data16;




    unsigned int num_items;
    unsigned int end;
  };


  const char *get_name () { return "APPLY"; }
  typedef return_t (*recurse_func_t) (hb_ot_apply_context_t *c, unsigned int lookup_index);
  template <typename T>
  return_t dispatch (const T &obj) { return obj.apply (this); }
  static return_t default_return_value () { return false; }
  bool stop_sublookup_iteration (return_t r) const { return r; }
  return_t recurse (unsigned int sub_lookup_index)
  {
    if ((__builtin_expect (!!(nesting_level_left == 0 || !recurse_func || buffer->max_ops-- <= 0), 0)))
    {
      buffer->shaping_failed = true;
      return default_return_value ();
    }

    nesting_level_left--;
    bool ret = recurse_func (this, sub_lookup_index);
    nesting_level_left++;
    return ret;
  }

  skipping_iterator_t iter_input, iter_context;

  unsigned int table_index;
  hb_font_t *font;
  hb_face_t *face;
  hb_buffer_t *buffer;
  recurse_func_t recurse_func = nullptr;
  const GDEF &gdef;
  const VariationStore &var_store;
  VariationStore::cache_t *var_store_cache;
  hb_set_digest_t digest;

  hb_direction_t direction;
  hb_mask_t lookup_mask = 1;
  unsigned int lookup_index = (unsigned) -1;
  unsigned int lookup_props = 0;
  unsigned int nesting_level_left = 64;

  bool has_glyph_classes;
  bool auto_zwnj = true;
  bool auto_zwj = true;
  bool per_syllable = false;
  bool random = false;
  uint32_t random_state = 1;
  unsigned new_syllables = (unsigned) -1;

  hb_ot_apply_context_t (unsigned int table_index_,
    hb_font_t *font_,
    hb_buffer_t *buffer_) :
   table_index (table_index_),
   font (font_), face (font->face), buffer (buffer_),
   gdef (

         *face->table.GDEF->table



        ),
   var_store (gdef.get_var_store ()),
   var_store_cache (

      table_index == 1 && font->num_coords ? var_store.create_cache () : nullptr



     ),
   digest (buffer_->digest ()),
   direction (buffer_->props.direction),
   has_glyph_classes (gdef.has_glyph_classes ())
  { init_iters (); }

  ~hb_ot_apply_context_t ()
  {

    VariationStore::destroy_cache (var_store_cache);

  }

  void init_iters ()
  {
    iter_input.init (this, false);
    iter_context.init (this, true);
  }

  void set_lookup_mask (hb_mask_t mask) { lookup_mask = mask; init_iters (); }
  void set_auto_zwj (bool auto_zwj_) { auto_zwj = auto_zwj_; init_iters (); }
  void set_auto_zwnj (bool auto_zwnj_) { auto_zwnj = auto_zwnj_; init_iters (); }
  void set_per_syllable (bool per_syllable_) { per_syllable = per_syllable_; init_iters (); }
  void set_random (bool random_) { random = random_; }
  void set_recurse_func (recurse_func_t func) { recurse_func = func; }
  void set_lookup_index (unsigned int lookup_index_) { lookup_index = lookup_index_; }
  void set_lookup_props (unsigned int lookup_props_) { lookup_props = lookup_props_; init_iters (); }

  uint32_t random_number ()
  {

    random_state = random_state * 48271 % 2147483647;
    return random_state;
  }

  bool match_properties_mark (hb_codepoint_t glyph,
         unsigned int glyph_props,
         unsigned int match_props) const
  {



    if (match_props & LookupFlag::UseMarkFilteringSet)
      return gdef.mark_set_covers (match_props >> 16, glyph);





    if (match_props & LookupFlag::MarkAttachmentType)
      return (match_props & LookupFlag::MarkAttachmentType) == (glyph_props & LookupFlag::MarkAttachmentType);

    return true;
  }

  bool check_glyph_property (const hb_glyph_info_t *info,
        unsigned int match_props) const
  {
    hb_codepoint_t glyph = info->codepoint;
    unsigned int glyph_props = _hb_glyph_info_get_glyph_props (info);




    if (glyph_props & match_props & LookupFlag::IgnoreFlags)
      return false;

    if ((__builtin_expect (!!(glyph_props & HB_OT_LAYOUT_GLYPH_PROPS_MARK), 0)))
      return match_properties_mark (glyph, glyph_props, match_props);

    return true;
  }

  void _set_glyph_class (hb_codepoint_t glyph_index,
     unsigned int class_guess = 0,
     bool ligature = false,
     bool component = false)
  {
    digest.add (glyph_index);

    if (new_syllables != (unsigned) -1)
      buffer->cur().var1.u8[3] = new_syllables;

    unsigned int props = _hb_glyph_info_get_glyph_props (&buffer->cur());
    props |= HB_OT_LAYOUT_GLYPH_PROPS_SUBSTITUTED;
    if (ligature)
    {
      props |= HB_OT_LAYOUT_GLYPH_PROPS_LIGATED;






      props &= ~HB_OT_LAYOUT_GLYPH_PROPS_MULTIPLIED;
    }
    if (component)
      props |= HB_OT_LAYOUT_GLYPH_PROPS_MULTIPLIED;
    if ((__builtin_expect (!!(has_glyph_classes), 1)))
    {
      props &= HB_OT_LAYOUT_GLYPH_PROPS_PRESERVE;
      _hb_glyph_info_set_glyph_props (&buffer->cur(), props | gdef.get_glyph_props (glyph_index));
    }
    else if (class_guess)
    {
      props &= HB_OT_LAYOUT_GLYPH_PROPS_PRESERVE;
      _hb_glyph_info_set_glyph_props (&buffer->cur(), props | class_guess);
    }
    else
      _hb_glyph_info_set_glyph_props (&buffer->cur(), props);
  }

  void replace_glyph (hb_codepoint_t glyph_index)
  {
    _set_glyph_class (glyph_index);
    (void) buffer->replace_glyph (glyph_index);
  }
  void replace_glyph_inplace (hb_codepoint_t glyph_index)
  {
    _set_glyph_class (glyph_index);
    buffer->cur().codepoint = glyph_index;
  }
  void replace_glyph_with_ligature (hb_codepoint_t glyph_index,
        unsigned int class_guess)
  {
    _set_glyph_class (glyph_index, class_guess, true);
    (void) buffer->replace_glyph (glyph_index);
  }
  void output_glyph_for_component (hb_codepoint_t glyph_index,
       unsigned int class_guess)
  {
    _set_glyph_class (glyph_index, class_guess, false, true);
    (void) buffer->output_glyph (glyph_index);
  }
};


struct hb_accelerate_subtables_context_t :
       hb_dispatch_context_t<hb_accelerate_subtables_context_t>
{
  template <typename Type>
  static inline bool apply_to (const void *obj, hb_ot_apply_context_t *c)
  {
    const Type *typed_obj = (const Type *) obj;
    return typed_obj->apply (c);
  }


  template <typename T>
  static inline auto apply_cached_ (const T *obj, hb_ot_apply_context_t *c, hb_priority<1>) -> hb_head_t<bool, decltype ((obj->apply (c, true)))> { return (obj->apply (c, true)); }
  template <typename T>
  static inline auto apply_cached_ (const T *obj, hb_ot_apply_context_t *c, hb_priority<0>) -> hb_head_t<bool, decltype ((obj->apply (c)))> { return (obj->apply (c)); }
  template <typename Type>
  static inline bool apply_cached_to (const void *obj, hb_ot_apply_context_t *c)
  {
    const Type *typed_obj = (const Type *) obj;
    return apply_cached_ (typed_obj, c, hb_priority<16> ());
  }

  template <typename T>
  static inline auto cache_func_ (const T *obj, hb_ot_apply_context_t *c, bool enter, hb_priority<1>) -> hb_head_t<bool, decltype ((obj->cache_func (c, enter)))> { return (obj->cache_func (c, enter)); }
  template <typename T>
  static inline bool cache_func_ (const T *obj, hb_ot_apply_context_t *c, bool enter, hb_priority<0>) { return false; }
  template <typename Type>
  static inline bool cache_func_to (const void *obj, hb_ot_apply_context_t *c, bool enter)
  {
    const Type *typed_obj = (const Type *) obj;
    return cache_func_ (typed_obj, c, enter, hb_priority<16> ());
  }


  typedef bool (*hb_apply_func_t) (const void *obj, hb_ot_apply_context_t *c);
  typedef bool (*hb_cache_func_t) (const void *obj, hb_ot_apply_context_t *c, bool enter);

  struct hb_applicable_t
  {
    friend struct hb_accelerate_subtables_context_t;
    friend struct hb_ot_layout_lookup_accelerator_t;

    template <typename T>
    void init (const T &obj_,
        hb_apply_func_t apply_func_

        , hb_apply_func_t apply_cached_func_
        , hb_cache_func_t cache_func_

  )
    {
      obj = &obj_;
      apply_func = apply_func_;

      apply_cached_func = apply_cached_func_;
      cache_func = cache_func_;

      digest.init ();
      obj_.get_coverage ().collect_coverage (&digest);
    }

    bool apply (hb_ot_apply_context_t *c) const
    {
      return digest.may_have (c->buffer->cur().codepoint) && apply_func (obj, c);
    }

    bool apply_cached (hb_ot_apply_context_t *c) const
    {
      return digest.may_have (c->buffer->cur().codepoint) && apply_cached_func (obj, c);
    }
    bool cache_enter (hb_ot_apply_context_t *c) const
    {
      return cache_func (obj, c, true);
    }
    void cache_leave (hb_ot_apply_context_t *c) const
    {
      cache_func (obj, c, false);
    }


    private:
    const void *obj;
    hb_apply_func_t apply_func;

    hb_apply_func_t apply_cached_func;
    hb_cache_func_t cache_func;

    hb_set_digest_t digest;
  };


  template <typename T>
  auto cache_cost (const T &obj, hb_priority<1>) -> decltype ((obj.cache_cost ())) { return (obj.cache_cost ()); }
  template <typename T>
  auto cache_cost (const T &obj, hb_priority<0>) -> decltype ((0u)) { return (0u); }



  template <typename T>
  return_t dispatch (const T &obj)
  {
    hb_applicable_t *entry = &array[i++];

    entry->init (obj,
   apply_to<T>

   , apply_cached_to<T>
   , cache_func_to<T>

   );
# 984 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh"
    unsigned cost = cache_cost (obj, hb_priority<16> ());
    if (cost > cache_user_cost)
    {
      cache_user_idx = i - 1;
      cache_user_cost = cost;
    }


    return hb_empty_t ();
  }
  static return_t default_return_value () { return hb_empty_t (); }

  hb_accelerate_subtables_context_t (hb_applicable_t *array_) :
         array (array_) {}

  hb_applicable_t *array;
  unsigned i = 0;


  unsigned cache_user_idx = (unsigned) -1;
  unsigned cache_user_cost = 0;

};


typedef bool (*intersects_func_t) (const hb_set_t *glyphs, unsigned value, const void *data, void *cache);
typedef void (*intersected_glyphs_func_t) (const hb_set_t *glyphs, const void *data, unsigned value, hb_set_t *intersected_glyphs, void *cache);
typedef void (*collect_glyphs_func_t) (hb_set_t *glyphs, unsigned value, const void *data);
typedef bool (*match_func_t) (hb_glyph_info_t &info, unsigned value, const void *data);

struct ContextClosureFuncs
{
  intersects_func_t intersects;
  intersected_glyphs_func_t intersected_glyphs;
};
struct ContextCollectGlyphsFuncs
{
  collect_glyphs_func_t collect;
};
struct ContextApplyFuncs
{
  match_func_t match;
};
struct ChainContextApplyFuncs
{
  match_func_t match[3];
};


static inline bool intersects_glyph (const hb_set_t *glyphs, unsigned value, const void *data __attribute__((unused)), void *cache __attribute__((unused)))
{
  return glyphs->has (value);
}
static inline bool intersects_class (const hb_set_t *glyphs, unsigned value, const void *data, void *cache)
{
  const ClassDef &class_def = *reinterpret_cast<const ClassDef *>(data);
  hb_map_t *map = (hb_map_t *) cache;

  hb_codepoint_t *cached_v;
  if (map->has (value, &cached_v))
    return *cached_v;

  bool v = class_def.intersects_class (glyphs, value);
  map->set (value, v);

  return v;
}
static inline bool intersects_coverage (const hb_set_t *glyphs, unsigned value, const void *data, void *cache __attribute__((unused)))
{
  Offset16To<Coverage> coverage;
  coverage = value;
  return (data+coverage).intersects (glyphs);
}


static inline void intersected_glyph (const hb_set_t *glyphs __attribute__((unused)), const void *data, unsigned value, hb_set_t *intersected_glyphs, __attribute__((unused)) void *cache)
{
  unsigned g = reinterpret_cast<const HBUINT16 *>(data)[value];
  intersected_glyphs->add (g);
}

using intersected_class_cache_t = hb_hashmap_t<unsigned, hb_set_t>;

static inline void intersected_class_glyphs (const hb_set_t *glyphs, const void *data, unsigned value, hb_set_t *intersected_glyphs, void *cache)
{
  const ClassDef &class_def = *reinterpret_cast<const ClassDef *>(data);

  intersected_class_cache_t *map = (intersected_class_cache_t *) cache;

  hb_set_t *cached_v;
  if (map->has (value, &cached_v))
  {
    intersected_glyphs->union_ (*cached_v);
    return;
  }

  hb_set_t v;
  class_def.intersected_class_glyphs (glyphs, value, &v);

  intersected_glyphs->union_ (v);

  map->set (value, std::move (v));
}

static inline void intersected_coverage_glyphs (const hb_set_t *glyphs, const void *data, unsigned value, hb_set_t *intersected_glyphs, __attribute__((unused)) void *cache)
{
  Offset16To<Coverage> coverage;
  coverage = value;
  (data+coverage).intersect_set (*glyphs, *intersected_glyphs);
}


template <typename HBUINT>
static inline bool array_is_subset_of (const hb_set_t *glyphs,
           unsigned int count,
           const HBUINT values[],
           intersects_func_t intersects_func,
           const void *intersects_data,
           void *cache)
{
  for (const auto &_ : + hb_iter (values, count))
    if (!intersects_func (glyphs, _, intersects_data, cache)) return false;
  return true;
}


static inline void collect_glyph (hb_set_t *glyphs, unsigned value, const void *data __attribute__((unused)))
{
  glyphs->add (value);
}
static inline void collect_class (hb_set_t *glyphs, unsigned value, const void *data)
{
  const ClassDef &class_def = *reinterpret_cast<const ClassDef *>(data);
  class_def.collect_class (glyphs, value);
}
static inline void collect_coverage (hb_set_t *glyphs, unsigned value, const void *data)
{
  Offset16To<Coverage> coverage;
  coverage = value;
  (data+coverage).collect_coverage (glyphs);
}
template <typename HBUINT>
static inline void collect_array (hb_collect_glyphs_context_t *c __attribute__((unused)),
      hb_set_t *glyphs,
      unsigned int count,
      const HBUINT values[],
      collect_glyphs_func_t collect_func,
      const void *collect_data)
{
  return
  + hb_iter (values, count)
  | hb_apply ([&] (const HBUINT &_) { collect_func (glyphs, _, collect_data); })
  ;
}


static inline bool match_glyph (hb_glyph_info_t &info, unsigned value, const void *data __attribute__((unused)))
{
  return info.codepoint == value;
}
static inline bool match_class (hb_glyph_info_t &info, unsigned value, const void *data)
{
  const ClassDef &class_def = *reinterpret_cast<const ClassDef *>(data);
  return class_def.get_class (info.codepoint) == value;
}
static inline bool match_class_cached (hb_glyph_info_t &info, unsigned value, const void *data)
{
  unsigned klass = info.var1.u8[3];
  if (klass < 255)
    return klass == value;
  const ClassDef &class_def = *reinterpret_cast<const ClassDef *>(data);
  klass = class_def.get_class (info.codepoint);
  if ((__builtin_expect (!!(klass < 255), 1)))
    info.var1.u8[3] = klass;
  return klass == value;
}
static inline bool match_coverage (hb_glyph_info_t &info, unsigned value, const void *data)
{
  Offset16To<Coverage> coverage;
  coverage = value;
  return (data+coverage).get_coverage (info.codepoint) != ((unsigned int) -1);
}

template <typename HBUINT>
static inline bool would_match_input (hb_would_apply_context_t *c,
          unsigned int count,
          const HBUINT input[],
          match_func_t match_func,
          const void *match_data)
{
  if (count != c->len)
    return false;

  for (unsigned int i = 1; i < count; i++)
  {
    hb_glyph_info_t info;
    info.codepoint = c->glyphs[i];
    if ((__builtin_expect (!!(!match_func (info, input[i - 1], match_data)), 1)))
      return false;
  }

  return true;
}
template <typename HBUINT>
static inline bool match_input (hb_ot_apply_context_t *c,
    unsigned int count,
    const HBUINT input[],
    match_func_t match_func,
    const void *match_data,
    unsigned int *end_position,
    unsigned int match_positions[64],
    unsigned int *p_total_component_count = nullptr)
{
  hb_no_trace_t<bool> trace;

  if ((__builtin_expect (!!(count > 64), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 1199);

  hb_buffer_t *buffer = c->buffer;

  hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input;
  skippy_iter.reset (buffer->idx, count - 1);
  skippy_iter.set_match_func (match_func, match_data);
  skippy_iter.set_glyph_data (input);
# 1232 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh"
  unsigned int total_component_count = 0;
  total_component_count += _hb_glyph_info_get_lig_num_comps (&buffer->cur());

  unsigned int first_lig_id = _hb_glyph_info_get_lig_id (&buffer->cur());
  unsigned int first_lig_comp = _hb_glyph_info_get_lig_comp (&buffer->cur());

  enum {
    LIGBASE_NOT_CHECKED,
    LIGBASE_MAY_NOT_SKIP,
    LIGBASE_MAY_SKIP
  } ligbase = LIGBASE_NOT_CHECKED;

  match_positions[0] = buffer->idx;
  for (unsigned int i = 1; i < count; i++)
  {
    unsigned unsafe_to;
    if (!skippy_iter.next (&unsafe_to))
    {
      *end_position = unsafe_to;
      return trace.ret (false, __PRETTY_FUNCTION__, 1251);
    }

    match_positions[i] = skippy_iter.idx;

    unsigned int this_lig_id = _hb_glyph_info_get_lig_id (&buffer->info[skippy_iter.idx]);
    unsigned int this_lig_comp = _hb_glyph_info_get_lig_comp (&buffer->info[skippy_iter.idx]);

    if (first_lig_id && first_lig_comp)
    {



      if (first_lig_id != this_lig_id || first_lig_comp != this_lig_comp)
      {


 if (ligbase == LIGBASE_NOT_CHECKED)
 {
   bool found = false;
   const auto *out = buffer->out_info;
   unsigned int j = buffer->out_len;
   while (j && _hb_glyph_info_get_lig_id (&out[j - 1]) == first_lig_id)
   {
     if (_hb_glyph_info_get_lig_comp (&out[j - 1]) == 0)
     {
       j--;
       found = true;
       break;
     }
     j--;
   }

   if (found && skippy_iter.may_skip (out[j]) == hb_ot_apply_context_t::matcher_t::SKIP_YES)
     ligbase = LIGBASE_MAY_SKIP;
   else
     ligbase = LIGBASE_MAY_NOT_SKIP;
 }

 if (ligbase == LIGBASE_MAY_NOT_SKIP)
   return trace.ret (false, __PRETTY_FUNCTION__, 1291);
      }
    }
    else
    {



      if (this_lig_id && this_lig_comp && (this_lig_id != first_lig_id))
 return trace.ret (false, __PRETTY_FUNCTION__, 1300);
    }

    total_component_count += _hb_glyph_info_get_lig_num_comps (&buffer->info[skippy_iter.idx]);
  }

  *end_position = skippy_iter.idx + 1;

  if (p_total_component_count)
    *p_total_component_count = total_component_count;

  return trace.ret (true, __PRETTY_FUNCTION__, 1311);
}
static inline bool ligate_input (hb_ot_apply_context_t *c,
     unsigned int count,
     const unsigned int match_positions[64],
     unsigned int match_end,
     hb_codepoint_t lig_glyph,
     unsigned int total_component_count)
{
  hb_no_trace_t<bool> trace;

  hb_buffer_t *buffer = c->buffer;

  buffer->merge_clusters (buffer->idx, match_end);
# 1358 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh"
  bool is_base_ligature = _hb_glyph_info_is_base_glyph (&buffer->info[match_positions[0]]);
  bool is_mark_ligature = _hb_glyph_info_is_mark (&buffer->info[match_positions[0]]);
  for (unsigned int i = 1; i < count; i++)
    if (!_hb_glyph_info_is_mark (&buffer->info[match_positions[i]]))
    {
      is_base_ligature = false;
      is_mark_ligature = false;
      break;
    }
  bool is_ligature = !is_base_ligature && !is_mark_ligature;

  unsigned int klass = is_ligature ? HB_OT_LAYOUT_GLYPH_PROPS_LIGATURE : 0;
  unsigned int lig_id = is_ligature ? _hb_allocate_lig_id (buffer) : 0;
  unsigned int last_lig_id = _hb_glyph_info_get_lig_id (&buffer->cur());
  unsigned int last_num_components = _hb_glyph_info_get_lig_num_comps (&buffer->cur());
  unsigned int components_so_far = last_num_components;

  if (is_ligature)
  {
    _hb_glyph_info_set_lig_props_for_ligature (&buffer->cur(), lig_id, total_component_count);
    if (_hb_glyph_info_get_general_category (&buffer->cur()) == HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK)
    {
      _hb_glyph_info_set_general_category (&buffer->cur(), HB_UNICODE_GENERAL_CATEGORY_OTHER_LETTER);
    }
  }
  c->replace_glyph_with_ligature (lig_glyph, klass);

  for (unsigned int i = 1; i < count; i++)
  {
    while (buffer->idx < match_positions[i] && buffer->successful)
    {
      if (is_ligature)
      {
 unsigned int this_comp = _hb_glyph_info_get_lig_comp (&buffer->cur());
 if (this_comp == 0)
   this_comp = last_num_components;
 unsigned int new_lig_comp = components_so_far - last_num_components +
        hb_min (this_comp, last_num_components);
   _hb_glyph_info_set_lig_props_for_mark (&buffer->cur(), lig_id, new_lig_comp);
      }
      (void) buffer->next_glyph ();
    }

    last_lig_id = _hb_glyph_info_get_lig_id (&buffer->cur());
    last_num_components = _hb_glyph_info_get_lig_num_comps (&buffer->cur());
    components_so_far += last_num_components;


    buffer->idx++;
  }

  if (!is_mark_ligature && last_lig_id)
  {

    for (unsigned i = buffer->idx; i < buffer->len; ++i)
    {
      if (last_lig_id != _hb_glyph_info_get_lig_id (&buffer->info[i])) break;

      unsigned this_comp = _hb_glyph_info_get_lig_comp (&buffer->info[i]);
      if (!this_comp) break;

      unsigned new_lig_comp = components_so_far - last_num_components +
         hb_min (this_comp, last_num_components);
      _hb_glyph_info_set_lig_props_for_mark (&buffer->info[i], lig_id, new_lig_comp);
    }
  }
  return trace.ret (true, __PRETTY_FUNCTION__, 1424);
}

template <typename HBUINT>
static inline bool match_backtrack (hb_ot_apply_context_t *c,
        unsigned int count,
        const HBUINT backtrack[],
        match_func_t match_func,
        const void *match_data,
        unsigned int *match_start)
{
  hb_no_trace_t<bool> trace;

  hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_context;
  skippy_iter.reset (c->buffer->backtrack_len (), count);
  skippy_iter.set_match_func (match_func, match_data);
  skippy_iter.set_glyph_data (backtrack);

  for (unsigned int i = 0; i < count; i++)
  {
    unsigned unsafe_from;
    if (!skippy_iter.prev (&unsafe_from))
    {
      *match_start = unsafe_from;
      return trace.ret (false, __PRETTY_FUNCTION__, 1448);
    }
  }

  *match_start = skippy_iter.idx;
  return trace.ret (true, __PRETTY_FUNCTION__, 1453);
}

template <typename HBUINT>
static inline bool match_lookahead (hb_ot_apply_context_t *c,
        unsigned int count,
        const HBUINT lookahead[],
        match_func_t match_func,
        const void *match_data,
        unsigned int start_index,
        unsigned int *end_index)
{
  hb_no_trace_t<bool> trace;

  hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_context;
  skippy_iter.reset (start_index - 1, count);
  skippy_iter.set_match_func (match_func, match_data);
  skippy_iter.set_glyph_data (lookahead);

  for (unsigned int i = 0; i < count; i++)
  {
    unsigned unsafe_to;
    if (!skippy_iter.next (&unsafe_to))
    {
      *end_index = unsafe_to;
      return trace.ret (false, __PRETTY_FUNCTION__, 1478);
    }
  }

  *end_index = skippy_iter.idx + 1;
  return trace.ret (true, __PRETTY_FUNCTION__, 1483);
}



struct LookupRecord
{
  bool serialize (hb_serialize_context_t *c,
    const hb_map_t *lookup_map) const
  {
    hb_no_trace_t<bool> trace;
    auto *out = c->embed (*this);
    if ((__builtin_expect (!!(!out), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 1495);

    return trace.ret (c->check_assign (out->lookupListIndex, lookup_map->get (lookupListIndex), HB_SERIALIZE_ERROR_INT_OVERFLOW), __PRETTY_FUNCTION__, 1497);
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this), __PRETTY_FUNCTION__, 1503);
  }

  HBUINT16 sequenceIndex;

  HBUINT16 lookupListIndex;

  public:
  void _instance_assertion_on_line_1511 () const { static_assert ((sizeof (*this) == (4)), ""); } unsigned int get_size () const { return (4); } static constexpr unsigned null_size = (4); static constexpr unsigned min_size = (4); static constexpr unsigned static_size = (4);
};

static unsigned serialize_lookuprecord_array (hb_serialize_context_t *c,
           const hb_array_t<const LookupRecord> lookupRecords,
           const hb_map_t *lookup_map)
{
  unsigned count = 0;
  for (const LookupRecord& r : lookupRecords)
  {
    if (!lookup_map->has (r.lookupListIndex))
      continue;

    if (!r.serialize (c, lookup_map))
      return 0;

    count++;
  }
  return count;
}

enum ContextFormat { SimpleContext = 1, ClassBasedContext = 2, CoverageBasedContext = 3 };

template <typename HBUINT>
static void context_closure_recurse_lookups (hb_closure_context_t *c,
          unsigned inputCount, const HBUINT input[],
          unsigned lookupCount,
          const LookupRecord lookupRecord[] ,
          unsigned value,
          ContextFormat context_format,
          const void *data,
          intersected_glyphs_func_t intersected_glyphs_func,
          void *cache)
{
  hb_set_t covered_seq_indicies;
  hb_set_t pos_glyphs;
  for (unsigned int i = 0; i < lookupCount; i++)
  {
    unsigned seqIndex = lookupRecord[i].sequenceIndex;
    if (seqIndex >= inputCount) continue;

    bool has_pos_glyphs = false;

    if (!covered_seq_indicies.has (seqIndex))
    {
      has_pos_glyphs = true;
      pos_glyphs.clear ();
      if (seqIndex == 0)
      {
        switch (context_format) {
        case ContextFormat::SimpleContext:
          pos_glyphs.add (value);
          break;
        case ContextFormat::ClassBasedContext:
          intersected_glyphs_func (&c->parent_active_glyphs (), data, value, &pos_glyphs, cache);
          break;
        case ContextFormat::CoverageBasedContext:
          pos_glyphs.set (c->parent_active_glyphs ());
          break;
        }
      }
      else
      {
        const void *input_data = input;
        unsigned input_value = seqIndex - 1;
        if (context_format != ContextFormat::SimpleContext)
        {
          input_data = data;
          input_value = input[seqIndex - 1];
        }

        intersected_glyphs_func (c->glyphs, input_data, input_value, &pos_glyphs, cache);
      }
    }

    covered_seq_indicies.add (seqIndex);
    if (has_pos_glyphs) {
      c->push_cur_active_glyphs () = std::move (pos_glyphs);
    } else {
      c->push_cur_active_glyphs ().set (*c->glyphs);
    }

    unsigned endIndex = inputCount;
    if (context_format == ContextFormat::CoverageBasedContext)
      endIndex += 1;

    c->recurse (lookupRecord[i].lookupListIndex, &covered_seq_indicies, seqIndex, endIndex);

    c->pop_cur_done_glyphs ();
  }
}

template <typename context_t>
static inline void recurse_lookups (context_t *c,
                                    unsigned int lookupCount,
                                    const LookupRecord lookupRecord[] )
{
  for (unsigned int i = 0; i < lookupCount; i++)
    c->recurse (lookupRecord[i].lookupListIndex);
}

static inline void apply_lookup (hb_ot_apply_context_t *c,
     unsigned int count,
     unsigned int match_positions[64],
     unsigned int lookupCount,
     const LookupRecord lookupRecord[],
     unsigned int match_end)
{
  hb_buffer_t *buffer = c->buffer;
  int end;



  {
    unsigned int bl = buffer->backtrack_len ();
    end = bl + match_end - buffer->idx;

    int delta = bl - buffer->idx;

    for (unsigned int j = 0; j < count; j++)
      match_positions[j] += delta;
  }

  for (unsigned int i = 0; i < lookupCount && buffer->successful; i++)
  {
    unsigned int idx = lookupRecord[i].sequenceIndex;
    if (idx >= count)
      continue;

    unsigned int orig_len = buffer->backtrack_len () + buffer->lookahead_len ();


    if ((__builtin_expect (!!(match_positions[idx] >= orig_len), 0)))
      continue;

    if ((__builtin_expect (!!(!buffer->move_to (match_positions[idx])), 0)))
      break;

    if ((__builtin_expect (!!(buffer->max_ops <= 0), 0)))
      break;

    if ((0 +1) && c->buffer->messaging ())
    {
      if (buffer->have_output)
        c->buffer->sync_so_far ();
      c->buffer->message (c->font,
     "recursing to lookup %u at %u",
     (unsigned) lookupRecord[i].lookupListIndex,
     buffer->idx);
    }

    if (!c->recurse (lookupRecord[i].lookupListIndex))
      continue;

    if ((0 +1) && c->buffer->messaging ())
    {
      if (buffer->have_output)
        c->buffer->sync_so_far ();
      c->buffer->message (c->font,
     "recursed to lookup %u",
     (unsigned) lookupRecord[i].lookupListIndex);
    }

    unsigned int new_len = buffer->backtrack_len () + buffer->lookahead_len ();
    int delta = new_len - orig_len;

    if (!delta)
      continue;
# 1704 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh"
    end += delta;
    if (end < int (match_positions[idx]))
    {
# 1715 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh"
      delta += match_positions[idx] - end;
      end = match_positions[idx];
    }

    unsigned int next = idx + 1;

    if (delta > 0)
    {
      if ((__builtin_expect (!!(delta + count > 64), 0)))
 break;
    }
    else
    {

      delta = hb_max (delta, (int) next - (int) count);
      next -= delta;
    }


    memmove (match_positions + next + delta, match_positions + next,
      (count - next) * sizeof (match_positions[0]));
    next += delta;
    count += delta;


    for (unsigned int j = idx + 1; j < next; j++)
      match_positions[j] = match_positions[j - 1] + 1;


    for (; next < count; next++)
      match_positions[next] += delta;
  }

  (void) buffer->move_to (end);
}





struct ContextClosureLookupContext
{
  ContextClosureFuncs funcs;
  ContextFormat context_format;
  const void *intersects_data;
  void *intersects_cache;
  void *intersected_glyphs_cache;
};

struct ContextCollectGlyphsLookupContext
{
  ContextCollectGlyphsFuncs funcs;
  const void *collect_data;
};

struct ContextApplyLookupContext
{
  ContextApplyFuncs funcs;
  const void *match_data;
};

template <typename HBUINT>
static inline bool context_intersects (const hb_set_t *glyphs,
           unsigned int inputCount,
           const HBUINT input[],
           ContextClosureLookupContext &lookup_context)
{
  return array_is_subset_of (glyphs,
        inputCount ? inputCount - 1 : 0, input,
        lookup_context.funcs.intersects,
        lookup_context.intersects_data,
        lookup_context.intersects_cache);
}

template <typename HBUINT>
static inline void context_closure_lookup (hb_closure_context_t *c,
        unsigned int inputCount,
        const HBUINT input[],
        unsigned int lookupCount,
        const LookupRecord lookupRecord[],
        unsigned value,
        ContextClosureLookupContext &lookup_context)
{
  if (context_intersects (c->glyphs,
     inputCount, input,
     lookup_context))
    context_closure_recurse_lookups (c,
         inputCount, input,
         lookupCount, lookupRecord,
         value,
         lookup_context.context_format,
         lookup_context.intersects_data,
         lookup_context.funcs.intersected_glyphs,
         lookup_context.intersected_glyphs_cache);
}

template <typename HBUINT>
static inline void context_collect_glyphs_lookup (hb_collect_glyphs_context_t *c,
        unsigned int inputCount,
        const HBUINT input[],
        unsigned int lookupCount,
        const LookupRecord lookupRecord[],
        ContextCollectGlyphsLookupContext &lookup_context)
{
  collect_array (c, c->input,
   inputCount ? inputCount - 1 : 0, input,
   lookup_context.funcs.collect, lookup_context.collect_data);
  recurse_lookups (c,
     lookupCount, lookupRecord);
}

template <typename HBUINT>
static inline bool context_would_apply_lookup (hb_would_apply_context_t *c,
            unsigned int inputCount,
            const HBUINT input[],
            unsigned int lookupCount __attribute__((unused)),
            const LookupRecord lookupRecord[] __attribute__((unused)),
            const ContextApplyLookupContext &lookup_context)
{
  return would_match_input (c,
       inputCount, input,
       lookup_context.funcs.match, lookup_context.match_data);
}

template <typename HBUINT>
static inline bool context_apply_lookup (hb_ot_apply_context_t *c,
      unsigned int inputCount,
      const HBUINT input[],
      unsigned int lookupCount,
      const LookupRecord lookupRecord[],
      const ContextApplyLookupContext &lookup_context)
{
  unsigned match_end = 0;
  unsigned match_positions[64];
  if (match_input (c,
     inputCount, input,
     lookup_context.funcs.match, lookup_context.match_data,
     &match_end, match_positions))
  {
    c->buffer->unsafe_to_break (c->buffer->idx, match_end);
    apply_lookup (c,
    inputCount, match_positions,
    lookupCount, lookupRecord,
    match_end);
    return true;
  }
  else
  {
    c->buffer->unsafe_to_concat (c->buffer->idx, match_end);
    return false;
  }
}

template <typename Types>
struct Rule
{
  bool intersects (const hb_set_t *glyphs, ContextClosureLookupContext &lookup_context) const
  {
    return context_intersects (glyphs,
          inputCount, inputZ.arrayZ,
          lookup_context);
  }

  void closure (hb_closure_context_t *c, unsigned value, ContextClosureLookupContext &lookup_context) const
  {
    if ((__builtin_expect (!!(c->lookup_limit_exceeded ()), 0))) return;

    const auto &lookupRecord = StructAfter<UnsizedArrayOf<LookupRecord>>
        (inputZ.as_array ((inputCount ? inputCount - 1 : 0)));
    context_closure_lookup (c,
       inputCount, inputZ.arrayZ,
       lookupCount, lookupRecord.arrayZ,
       value, lookup_context);
  }

  void closure_lookups (hb_closure_lookups_context_t *c,
                        ContextClosureLookupContext &lookup_context) const
  {
    if ((__builtin_expect (!!(c->lookup_limit_exceeded ()), 0))) return;
    if (!intersects (c->glyphs, lookup_context)) return;

    const auto &lookupRecord = StructAfter<UnsizedArrayOf<LookupRecord>>
        (inputZ.as_array (inputCount ? inputCount - 1 : 0));
    recurse_lookups (c, lookupCount, lookupRecord.arrayZ);
  }

  void collect_glyphs (hb_collect_glyphs_context_t *c,
         ContextCollectGlyphsLookupContext &lookup_context) const
  {
    const auto &lookupRecord = StructAfter<UnsizedArrayOf<LookupRecord>>
        (inputZ.as_array (inputCount ? inputCount - 1 : 0));
    context_collect_glyphs_lookup (c,
       inputCount, inputZ.arrayZ,
       lookupCount, lookupRecord.arrayZ,
       lookup_context);
  }

  bool would_apply (hb_would_apply_context_t *c,
      const ContextApplyLookupContext &lookup_context) const
  {
    const auto &lookupRecord = StructAfter<UnsizedArrayOf<LookupRecord>>
        (inputZ.as_array (inputCount ? inputCount - 1 : 0));
    return context_would_apply_lookup (c,
           inputCount, inputZ.arrayZ,
           lookupCount, lookupRecord.arrayZ,
           lookup_context);
  }

  bool apply (hb_ot_apply_context_t *c,
       const ContextApplyLookupContext &lookup_context) const
  {
    hb_no_trace_t<bool> trace;
    const auto &lookupRecord = StructAfter<UnsizedArrayOf<LookupRecord>>
        (inputZ.as_array (inputCount ? inputCount - 1 : 0));
    return trace.ret (context_apply_lookup (c, inputCount, inputZ.arrayZ, lookupCount, lookupRecord.arrayZ, lookup_context), __PRETTY_FUNCTION__, 1929);
  }

  bool serialize (hb_serialize_context_t *c,
    const hb_map_t *input_mapping,
    const hb_map_t *lookup_map) const
  {
    hb_no_trace_t<bool> trace;
    auto *out = c->start_embed (this);
    if ((__builtin_expect (!!(!c->extend_min (out)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 1938);

    out->inputCount = inputCount;
    const auto input = inputZ.as_array (inputCount - 1);
    for (const auto org : input)
    {
      HBUINT16 d;
      d = input_mapping->get (org);
      c->copy (d);
    }

    const auto &lookupRecord = StructAfter<UnsizedArrayOf<LookupRecord>>
        (inputZ.as_array ((inputCount ? inputCount - 1 : 0)));

    unsigned count = serialize_lookuprecord_array (c, lookupRecord.as_array (lookupCount), lookup_map);
    return trace.ret (c->check_assign (out->lookupCount, count, HB_SERIALIZE_ERROR_INT_OVERFLOW), __PRETTY_FUNCTION__, 1953);
  }

  bool subset (hb_subset_context_t *c,
        const hb_map_t *lookup_map,
        const hb_map_t *klass_map = nullptr) const
  {
    hb_no_trace_t<bool> trace;
    if ((__builtin_expect (!!(!inputCount), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 1961);
    const auto input = inputZ.as_array (inputCount - 1);

    const hb_map_t *mapping = klass_map == nullptr ? c->plan->glyph_map : klass_map;
    if (!hb_all (input, mapping)) return trace.ret (false, __PRETTY_FUNCTION__, 1965);
    return trace.ret (serialize (c->serializer, mapping, lookup_map), __PRETTY_FUNCTION__, 1966);
  }

  public:
  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (inputCount.sanitize (c) && lookupCount.sanitize (c) && c->check_range (inputZ.arrayZ, inputZ.item_size * (inputCount ? inputCount - 1 : 0) + LookupRecord::static_size * lookupCount), __PRETTY_FUNCTION__, 1973)



                                               ;
  }

  protected:
  HBUINT16 inputCount;


  HBUINT16 lookupCount;
  UnsizedArrayOf<typename Types::HBUINT>
  inputZ;




  public:
  void _compiles_assertion_on_line_1992 () const { (void) (inputZ)[0].static_size; } void _instance_assertion_on_line_1992 () const { static_assert ((sizeof (*this) == (4) + (1 +0) * sizeof ((inputZ)[0])), ""); } static constexpr unsigned null_size = (4); static constexpr unsigned min_size = (4);
};

template <typename Types>
struct RuleSet
{
  using Rule = OT::Rule<Types>;

  bool intersects (const hb_set_t *glyphs,
     ContextClosureLookupContext &lookup_context) const
  {
    return
    + hb_iter (rule)
    | hb_map (hb_add (this))
    | hb_map ([&] (const Rule &_) { return _.intersects (glyphs, lookup_context); })
    | hb_any
    ;
  }

  void closure (hb_closure_context_t *c, unsigned value,
  ContextClosureLookupContext &lookup_context) const
  {
    if ((__builtin_expect (!!(c->lookup_limit_exceeded ()), 0))) return;

    return
    + hb_iter (rule)
    | hb_map (hb_add (this))
    | hb_apply ([&] (const Rule &_) { _.closure (c, value, lookup_context); })
    ;
  }

  void closure_lookups (hb_closure_lookups_context_t *c,
                        ContextClosureLookupContext &lookup_context) const
  {
    if ((__builtin_expect (!!(c->lookup_limit_exceeded ()), 0))) return;
    + hb_iter (rule)
    | hb_map (hb_add (this))
    | hb_apply ([&] (const Rule &_) { _.closure_lookups (c, lookup_context); })
    ;
  }

  void collect_glyphs (hb_collect_glyphs_context_t *c,
         ContextCollectGlyphsLookupContext &lookup_context) const
  {
    return
    + hb_iter (rule)
    | hb_map (hb_add (this))
    | hb_apply ([&] (const Rule &_) { _.collect_glyphs (c, lookup_context); })
    ;
  }

  bool would_apply (hb_would_apply_context_t *c,
      const ContextApplyLookupContext &lookup_context) const
  {
    return
    + hb_iter (rule)
    | hb_map (hb_add (this))
    | hb_map ([&] (const Rule &_) { return _.would_apply (c, lookup_context); })
    | hb_any
    ;
  }

  bool apply (hb_ot_apply_context_t *c,
       const ContextApplyLookupContext &lookup_context) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (+ hb_iter (rule) | hb_map (hb_add (this)) | hb_map ([&] (const Rule &_) { return _.apply (c, lookup_context); }) | hb_any, __PRETTY_FUNCTION__, 2058)





    ;
  }

  bool subset (hb_subset_context_t *c,
        const hb_map_t *lookup_map,
        const hb_map_t *klass_map = nullptr) const
  {
    hb_no_trace_t<bool> trace;

    auto snap = c->serializer->snapshot ();
    auto *out = c->serializer->start_embed (*this);
    if ((__builtin_expect (!!(!c->serializer->extend_min (out)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 2075);

    for (const Offset16To<Rule>& _ : rule)
    {
      if (!_) continue;
      auto o_snap = c->serializer->snapshot ();
      auto *o = out->rule.serialize_append (c->serializer);
      if ((__builtin_expect (!!(!o), 0))) continue;

      if (!o->serialize_subset (c, _, this, lookup_map, klass_map))
      {
 out->rule.pop ();
 c->serializer->revert (o_snap);
      }
    }

    bool ret = bool (out->rule);
    if (!ret) c->serializer->revert (snap);

    return trace.ret (ret, __PRETTY_FUNCTION__, 2094);
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (rule.sanitize (c, this), __PRETTY_FUNCTION__, 2100);
  }

  protected:
  Array16OfOffset16To<Rule>
  rule;

  public:
  void _compiles_assertion_on_line_2108 () const { (void) (rule)[0].static_size; } void _instance_assertion_on_line_2108 () const { static_assert ((sizeof (*this) == (2) + (1 +0) * sizeof ((rule)[0])), ""); } static constexpr unsigned null_size = (2); static constexpr unsigned min_size = (2);
};


template <typename Types>
struct ContextFormat1_4
{
  using RuleSet = OT::RuleSet<Types>;

  bool intersects (const hb_set_t *glyphs) const
  {
    struct ContextClosureLookupContext lookup_context = {
      {intersects_glyph, intersected_glyph},
      ContextFormat::SimpleContext,
      nullptr
    };

    return
    + hb_zip (this+coverage, ruleSet)
    | hb_filter (*glyphs, hb_first)
    | hb_map (hb_second)
    | hb_map (hb_add (this))
    | hb_map ([&] (const RuleSet &_) { return _.intersects (glyphs, lookup_context); })
    | hb_any
    ;
  }

  bool may_have_non_1to1 () const
  { return true; }

  void closure (hb_closure_context_t *c) const
  {
    hb_set_t& cur_active_glyphs = c->push_cur_active_glyphs ();
    get_coverage ().intersect_set (c->previous_parent_active_glyphs (), cur_active_glyphs);

    struct ContextClosureLookupContext lookup_context = {
      {intersects_glyph, intersected_glyph},
      ContextFormat::SimpleContext,
      nullptr
    };

    + hb_zip (this+coverage, hb_range ((unsigned) ruleSet.len))
    | hb_filter ([&] (hb_codepoint_t _) {
      return c->previous_parent_active_glyphs ().has (_);
    }, hb_first)
    | hb_map ([&](const hb_pair_t<hb_codepoint_t, unsigned> _) { return hb_pair_t<unsigned, const RuleSet&> (_.first, this+ruleSet[_.second]); })
    | hb_apply ([&] (const hb_pair_t<unsigned, const RuleSet&>& _) { _.second.closure (c, _.first, lookup_context); })
    ;

    c->pop_cur_done_glyphs ();
  }

  void closure_lookups (hb_closure_lookups_context_t *c) const
  {
    struct ContextClosureLookupContext lookup_context = {
      {intersects_glyph, nullptr},
      ContextFormat::SimpleContext,
      nullptr
    };

    + hb_zip (this+coverage, ruleSet)
    | hb_filter (*c->glyphs, hb_first)
    | hb_map (hb_second)
    | hb_map (hb_add (this))
    | hb_apply ([&] (const RuleSet &_) { _.closure_lookups (c, lookup_context); })
    ;
  }

  void collect_variation_indices (hb_collect_variation_indices_context_t *c) const {}

  void collect_glyphs (hb_collect_glyphs_context_t *c) const
  {
    (this+coverage).collect_coverage (c->input);

    struct ContextCollectGlyphsLookupContext lookup_context = {
      {collect_glyph},
      nullptr
    };

    + hb_iter (ruleSet)
    | hb_map (hb_add (this))
    | hb_apply ([&] (const RuleSet &_) { _.collect_glyphs (c, lookup_context); })
    ;
  }

  bool would_apply (hb_would_apply_context_t *c) const
  {
    const RuleSet &rule_set = this+ruleSet[(this+coverage).get_coverage (c->glyphs[0])];
    struct ContextApplyLookupContext lookup_context = {
      {match_glyph},
      nullptr
    };
    return rule_set.would_apply (c, lookup_context);
  }

  const Coverage &get_coverage () const { return this+coverage; }

  bool apply (hb_ot_apply_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    unsigned int index = (this+coverage).get_coverage (c->buffer->cur().codepoint);
    if ((__builtin_expect (!!(index == ((unsigned int) -1)), 1)))
      return trace.ret (false, __PRETTY_FUNCTION__, 2210);

    const RuleSet &rule_set = this+ruleSet[index];
    struct ContextApplyLookupContext lookup_context = {
      {match_glyph},
      nullptr
    };
    return trace.ret (rule_set.apply (c, lookup_context), __PRETTY_FUNCTION__, 2217);
  }

  bool subset (hb_subset_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    const hb_set_t &glyphset = *c->plan->glyphset_gsub ();
    const hb_map_t &glyph_map = *c->plan->glyph_map;

    auto *out = c->serializer->start_embed (*this);
    if ((__builtin_expect (!!(!c->serializer->extend_min (out)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 2227);
    out->format = format;

    const hb_map_t *lookup_map = c->table_tag == ((hb_tag_t)((((uint32_t)('G')&0xFF)<<24)|(((uint32_t)('S')&0xFF)<<16)|(((uint32_t)('U')&0xFF)<<8)|((uint32_t)('B')&0xFF))) ? &c->plan->gsub_lookups : &c->plan->gpos_lookups;
    hb_sorted_vector_t<hb_codepoint_t> new_coverage;
    + hb_zip (this+coverage, ruleSet)
    | hb_filter (glyphset, hb_first)
    | hb_filter (subset_offset_array (c, out->ruleSet, this, lookup_map), hb_second)
    | hb_map (hb_first)
    | hb_map (glyph_map)
    | hb_sink (new_coverage)
    ;

    out->coverage.serialize_serialize (c->serializer, new_coverage.iter ());
    return trace.ret (bool (new_coverage), __PRETTY_FUNCTION__, 2241);
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (coverage.sanitize (c, this) && ruleSet.sanitize (c, this), __PRETTY_FUNCTION__, 2247);
  }

  protected:
  HBUINT16 format;
  typename Types::template OffsetTo<Coverage>
  coverage;

  Array16Of<typename Types::template OffsetTo<RuleSet>>
  ruleSet;

  public:
  void _compiles_assertion_on_line_2259 () const { (void) (ruleSet)[0].static_size; } void _instance_assertion_on_line_2259 () const { static_assert ((sizeof (*this) == (2 + 2 * Types::size) + (1 +0) * sizeof ((ruleSet)[0])), ""); } static constexpr unsigned null_size = (2 + 2 * Types::size); static constexpr unsigned min_size = (2 + 2 * Types::size);
};


template <typename Types>
struct ContextFormat2_5
{
  using RuleSet = OT::RuleSet<SmallTypes>;

  bool intersects (const hb_set_t *glyphs) const
  {
    if (!(this+coverage).intersects (glyphs))
      return false;

    const ClassDef &class_def = this+classDef;

    hb_map_t cache;
    struct ContextClosureLookupContext lookup_context = {
      {intersects_class, nullptr},
      ContextFormat::ClassBasedContext,
      &class_def,
      &cache
    };

    hb_set_t retained_coverage_glyphs;
    (this+coverage).intersect_set (*glyphs, retained_coverage_glyphs);

    hb_set_t coverage_glyph_classes;
    class_def.intersected_classes (&retained_coverage_glyphs, &coverage_glyph_classes);


    return
    + hb_iter (ruleSet)
    | hb_map (hb_add (this))
    | hb_enumerate
    | hb_map ([&] (const hb_pair_t<unsigned, const RuleSet &> p)
       { return class_def.intersects_class (glyphs, p.first) &&
         coverage_glyph_classes.has (p.first) &&
         p.second.intersects (glyphs, lookup_context); })
    | hb_any
    ;
  }

  bool may_have_non_1to1 () const
  { return true; }

  void closure (hb_closure_context_t *c) const
  {
    if (!(this+coverage).intersects (c->glyphs))
      return;

    hb_set_t& cur_active_glyphs = c->push_cur_active_glyphs ();
    get_coverage ().intersect_set (c->previous_parent_active_glyphs (),
                                                 cur_active_glyphs);

    const ClassDef &class_def = this+classDef;

    hb_map_t cache;
    intersected_class_cache_t intersected_cache;
    struct ContextClosureLookupContext lookup_context = {
      {intersects_class, intersected_class_glyphs},
      ContextFormat::ClassBasedContext,
      &class_def,
      &cache,
      &intersected_cache
    };

    + hb_enumerate (ruleSet)
    | hb_filter ([&] (unsigned _)
    { return class_def.intersects_class (&c->parent_active_glyphs (), _); },
   hb_first)
    | hb_apply ([&] (const hb_pair_t<unsigned, const typename Types::template OffsetTo<RuleSet>&> _)
                {
                  const RuleSet& rule_set = this+_.second;
                  rule_set.closure (c, _.first, lookup_context);
                })
    ;

    c->pop_cur_done_glyphs ();
  }

  void closure_lookups (hb_closure_lookups_context_t *c) const
  {
    if (!(this+coverage).intersects (c->glyphs))
      return;

    const ClassDef &class_def = this+classDef;

    hb_map_t cache;
    struct ContextClosureLookupContext lookup_context = {
      {intersects_class, nullptr},
      ContextFormat::ClassBasedContext,
      &class_def,
      &cache
    };

    + hb_iter (ruleSet)
    | hb_map (hb_add (this))
    | hb_enumerate
    | hb_filter ([&] (const hb_pair_t<unsigned, const RuleSet &> p)
    { return class_def.intersects_class (c->glyphs, p.first); })
    | hb_map (hb_second)
    | hb_apply ([&] (const RuleSet & _)
    { _.closure_lookups (c, lookup_context); });
  }

  void collect_variation_indices (hb_collect_variation_indices_context_t *c) const {}

  void collect_glyphs (hb_collect_glyphs_context_t *c) const
  {
    (this+coverage).collect_coverage (c->input);

    const ClassDef &class_def = this+classDef;
    struct ContextCollectGlyphsLookupContext lookup_context = {
      {collect_class},
      &class_def
    };

    + hb_iter (ruleSet)
    | hb_map (hb_add (this))
    | hb_apply ([&] (const RuleSet &_) { _.collect_glyphs (c, lookup_context); })
    ;
  }

  bool would_apply (hb_would_apply_context_t *c) const
  {
    const ClassDef &class_def = this+classDef;
    unsigned int index = class_def.get_class (c->glyphs[0]);
    const RuleSet &rule_set = this+ruleSet[index];
    struct ContextApplyLookupContext lookup_context = {
      {match_class},
      &class_def
    };
    return rule_set.would_apply (c, lookup_context);
  }

  const Coverage &get_coverage () const { return this+coverage; }

  unsigned cache_cost () const
  {
    unsigned c = (this+classDef).cost () * ruleSet.len;
    return c >= 4 ? c : 0;
  }
  bool cache_func (hb_ot_apply_context_t *c, bool enter) const
  {
    if (enter)
    {
      if (!c->buffer->try_allocate_var (
# 2406 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh" 3 4
          __builtin_offsetof (
# 2406 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh"
          hb_glyph_info_t
# 2406 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh" 3 4
          , 
# 2406 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh"
          var1.u8[3]
# 2406 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh" 3 4
          ) 
# 2406 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh"
          - 
# 2406 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh" 3 4
          __builtin_offsetof (
# 2406 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh"
          hb_glyph_info_t
# 2406 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh" 3 4
          , 
# 2406 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh"
          var1
# 2406 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh" 3 4
          )
# 2406 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh"
          , sizeof (c->buffer->info[0].var1.u8[3])))
 return false;
      auto &info = c->buffer->info;
      unsigned count = c->buffer->len;
      for (unsigned i = 0; i < count; i++)
 info[i].var1.u8[3] = 255;
      c->new_syllables = 255;
      return true;
    }
    else
    {
      c->new_syllables = (unsigned) -1;
      c->buffer->deallocate_var (
# 2418 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh" 3 4
     __builtin_offsetof (
# 2418 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh"
     hb_glyph_info_t
# 2418 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh" 3 4
     , 
# 2418 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh"
     var1.u8[3]
# 2418 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh" 3 4
     ) 
# 2418 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh"
     - 
# 2418 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh" 3 4
     __builtin_offsetof (
# 2418 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh"
     hb_glyph_info_t
# 2418 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh" 3 4
     , 
# 2418 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh"
     var1
# 2418 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh" 3 4
     )
# 2418 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh"
     , sizeof (c->buffer->info[0].var1.u8[3]));
      return true;
    }
  }

  bool apply (hb_ot_apply_context_t *c, bool cached = false) const
  {
    hb_no_trace_t<bool> trace;
    unsigned int index = (this+coverage).get_coverage (c->buffer->cur().codepoint);
    if ((__builtin_expect (!!(index == ((unsigned int) -1)), 1))) return trace.ret (false, __PRETTY_FUNCTION__, 2427);

    const ClassDef &class_def = this+classDef;

    struct ContextApplyLookupContext lookup_context = {
      {cached ? match_class_cached : match_class},
      &class_def
    };

    if (cached && c->buffer->cur().var1.u8[3] < 255)
      index = c->buffer->cur().var1.u8[3];
    else
    {
      index = class_def.get_class (c->buffer->cur().codepoint);
      if (cached && index < 255)
 c->buffer->cur().var1.u8[3] = index;
    }
    const RuleSet &rule_set = this+ruleSet[index];
    return trace.ret (rule_set.apply (c, lookup_context), __PRETTY_FUNCTION__, 2445);
  }

  bool subset (hb_subset_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    auto *out = c->serializer->start_embed (*this);
    if ((__builtin_expect (!!(!c->serializer->extend_min (out)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 2452);
    out->format = format;
    if ((__builtin_expect (!!(!out->coverage.serialize_subset (c, coverage, this)), 0)))
      return trace.ret (false, __PRETTY_FUNCTION__, 2455);

    hb_map_t klass_map;
    out->classDef.serialize_subset (c, classDef, this, &klass_map);

    const hb_set_t* glyphset = c->plan->glyphset_gsub ();
    hb_set_t retained_coverage_glyphs;
    (this+coverage).intersect_set (*glyphset, retained_coverage_glyphs);

    hb_set_t coverage_glyph_classes;
    (this+classDef).intersected_classes (&retained_coverage_glyphs, &coverage_glyph_classes);

    const hb_map_t *lookup_map = c->table_tag == ((hb_tag_t)((((uint32_t)('G')&0xFF)<<24)|(((uint32_t)('S')&0xFF)<<16)|(((uint32_t)('U')&0xFF)<<8)|((uint32_t)('B')&0xFF))) ? &c->plan->gsub_lookups : &c->plan->gpos_lookups;
    bool ret = true;
    int non_zero_index = -1, index = 0;
    auto snapshot = c->serializer->snapshot();
    for (const auto& _ : + hb_enumerate (ruleSet)
    | hb_filter (klass_map, hb_first))
    {
      auto *o = out->ruleSet.serialize_append (c->serializer);
      if ((__builtin_expect (!!(!o), 0)))
      {
 ret = false;
 break;
      }

      if (coverage_glyph_classes.has (_.first) &&
   o->serialize_subset (c, _.second, this, lookup_map, &klass_map)) {
 non_zero_index = index;
        snapshot = c->serializer->snapshot();
      }

      index++;
    }

    if (!ret || non_zero_index == -1) return trace.ret (false, __PRETTY_FUNCTION__, 2490);


    --index;
    while (index > non_zero_index)
    {
      out->ruleSet.pop ();
      index--;
    }
    c->serializer->revert (snapshot);

    return trace.ret (bool (out->ruleSet), __PRETTY_FUNCTION__, 2501);
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (coverage.sanitize (c, this) && classDef.sanitize (c, this) && ruleSet.sanitize (c, this), __PRETTY_FUNCTION__, 2507);
  }

  protected:
  HBUINT16 format;
  typename Types::template OffsetTo<Coverage>
  coverage;

  typename Types::template OffsetTo<ClassDef>
  classDef;

  Array16Of<typename Types::template OffsetTo<RuleSet>>
  ruleSet;

  public:
  void _compiles_assertion_on_line_2522 () const { (void) (ruleSet)[0].static_size; } void _instance_assertion_on_line_2522 () const { static_assert ((sizeof (*this) == (4 + 2 * Types::size) + (1 +0) * sizeof ((ruleSet)[0])), ""); } static constexpr unsigned null_size = (4 + 2 * Types::size); static constexpr unsigned min_size = (4 + 2 * Types::size);
};


struct ContextFormat3
{
  using RuleSet = OT::RuleSet<SmallTypes>;

  bool intersects (const hb_set_t *glyphs) const
  {
    if (!(this+coverageZ[0]).intersects (glyphs))
      return false;

    struct ContextClosureLookupContext lookup_context = {
      {intersects_coverage, nullptr},
      ContextFormat::CoverageBasedContext,
      this
    };
    return context_intersects (glyphs,
          glyphCount, (const HBUINT16 *) (coverageZ.arrayZ + 1),
          lookup_context);
  }

  bool may_have_non_1to1 () const
  { return true; }

  void closure (hb_closure_context_t *c) const
  {
    if (!(this+coverageZ[0]).intersects (c->glyphs))
      return;

    hb_set_t& cur_active_glyphs = c->push_cur_active_glyphs ();
    get_coverage ().intersect_set (c->previous_parent_active_glyphs (),
                                                 cur_active_glyphs);


    const LookupRecord *lookupRecord = &StructAfter<LookupRecord> (coverageZ.as_array (glyphCount));
    struct ContextClosureLookupContext lookup_context = {
      {intersects_coverage, intersected_coverage_glyphs},
      ContextFormat::CoverageBasedContext,
      this
    };
    context_closure_lookup (c,
       glyphCount, (const HBUINT16 *) (coverageZ.arrayZ + 1),
       lookupCount, lookupRecord,
       0, lookup_context);

    c->pop_cur_done_glyphs ();
  }

  void closure_lookups (hb_closure_lookups_context_t *c) const
  {
    if (!intersects (c->glyphs))
      return;
    const LookupRecord *lookupRecord = &StructAfter<LookupRecord> (coverageZ.as_array (glyphCount));
    recurse_lookups (c, lookupCount, lookupRecord);
  }

  void collect_variation_indices (hb_collect_variation_indices_context_t *c) const {}

  void collect_glyphs (hb_collect_glyphs_context_t *c) const
  {
    (this+coverageZ[0]).collect_coverage (c->input);

    const LookupRecord *lookupRecord = &StructAfter<LookupRecord> (coverageZ.as_array (glyphCount));
    struct ContextCollectGlyphsLookupContext lookup_context = {
      {collect_coverage},
      this
    };

    context_collect_glyphs_lookup (c,
       glyphCount, (const HBUINT16 *) (coverageZ.arrayZ + 1),
       lookupCount, lookupRecord,
       lookup_context);
  }

  bool would_apply (hb_would_apply_context_t *c) const
  {
    const LookupRecord *lookupRecord = &StructAfter<LookupRecord> (coverageZ.as_array (glyphCount));
    struct ContextApplyLookupContext lookup_context = {
      {match_coverage},
      this
    };
    return context_would_apply_lookup (c,
           glyphCount, (const HBUINT16 *) (coverageZ.arrayZ + 1),
           lookupCount, lookupRecord,
           lookup_context);
  }

  const Coverage &get_coverage () const { return this+coverageZ[0]; }

  bool apply (hb_ot_apply_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    unsigned int index = (this+coverageZ[0]).get_coverage (c->buffer->cur().codepoint);
    if ((__builtin_expect (!!(index == ((unsigned int) -1)), 1))) return trace.ret (false, __PRETTY_FUNCTION__, 2617);

    const LookupRecord *lookupRecord = &StructAfter<LookupRecord> (coverageZ.as_array (glyphCount));
    struct ContextApplyLookupContext lookup_context = {
      {match_coverage},
      this
    };
    return trace.ret (context_apply_lookup (c, glyphCount, (const HBUINT16 *) (coverageZ.arrayZ + 1), lookupCount, lookupRecord, lookup_context), __PRETTY_FUNCTION__, 2624);
  }

  bool subset (hb_subset_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    auto *out = c->serializer->start_embed (this);
    if ((__builtin_expect (!!(!c->serializer->extend_min (out)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 2631);

    out->format = format;
    out->glyphCount = glyphCount;

    auto coverages = coverageZ.as_array (glyphCount);

    for (const Offset16To<Coverage>& offset : coverages)
    {

      auto *o = c->serializer->allocate_size<Offset16To<Coverage>> (Offset16To<Coverage>::static_size);
      if ((__builtin_expect (!!(!o), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 2642);
      if (!o->serialize_subset (c, offset, this)) return trace.ret (false, __PRETTY_FUNCTION__, 2643);
    }

    const auto& lookupRecord = StructAfter<UnsizedArrayOf<LookupRecord>> (coverageZ.as_array (glyphCount));
    const hb_map_t *lookup_map = c->table_tag == ((hb_tag_t)((((uint32_t)('G')&0xFF)<<24)|(((uint32_t)('S')&0xFF)<<16)|(((uint32_t)('U')&0xFF)<<8)|((uint32_t)('B')&0xFF))) ? &c->plan->gsub_lookups : &c->plan->gpos_lookups;


    unsigned count = serialize_lookuprecord_array (c->serializer, lookupRecord.as_array (lookupCount), lookup_map);
    return trace.ret (c->serializer->check_assign (out->lookupCount, count, HB_SERIALIZE_ERROR_INT_OVERFLOW), __PRETTY_FUNCTION__, 2651);
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    if (!c->check_struct (this)) return trace.ret (false, __PRETTY_FUNCTION__, 2657);
    unsigned int count = glyphCount;
    if (!count) return trace.ret (false, __PRETTY_FUNCTION__, 2659);
    if (!c->check_array (coverageZ.arrayZ, count)) return trace.ret (false, __PRETTY_FUNCTION__, 2660);
    for (unsigned int i = 0; i < count; i++)
      if (!coverageZ[i].sanitize (c, this)) return trace.ret (false, __PRETTY_FUNCTION__, 2662);
    const LookupRecord *lookupRecord = &StructAfter<LookupRecord> (coverageZ.as_array (glyphCount));
    return trace.ret (c->check_array (lookupRecord, lookupCount), __PRETTY_FUNCTION__, 2664);
  }

  protected:
  HBUINT16 format;
  HBUINT16 glyphCount;

  HBUINT16 lookupCount;
  UnsizedArrayOf<Offset16To<Coverage>>
  coverageZ;




  public:
  void _compiles_assertion_on_line_2679 () const { (void) (coverageZ)[0].static_size; } void _instance_assertion_on_line_2679 () const { static_assert ((sizeof (*this) == (6) + (1 +0) * sizeof ((coverageZ)[0])), ""); } static constexpr unsigned null_size = (6); static constexpr unsigned min_size = (6);
};

struct Context
{
  template <typename context_t, typename ...Ts>
  typename context_t::return_t dispatch (context_t *c, Ts&&... ds) const
  {
    if ((__builtin_expect (!!(!c->may_dispatch (this, &u.format)), 0))) return c->no_dispatch_return_value ();
    hb_no_trace_t<typename context_t::return_t> trace;
    switch (u.format) {
    case 1: return trace.ret (c->dispatch (u.format1, std::forward<Ts> (ds)...), __PRETTY_FUNCTION__, 2690);
    case 2: return trace.ret (c->dispatch (u.format2, std::forward<Ts> (ds)...), __PRETTY_FUNCTION__, 2691);
    case 3: return trace.ret (c->dispatch (u.format3, std::forward<Ts> (ds)...), __PRETTY_FUNCTION__, 2692);




    default:return trace.ret (c->default_return_value (), __PRETTY_FUNCTION__, 2697);
    }
  }

  protected:
  union {
  HBUINT16 format;
  ContextFormat1_4<SmallTypes> format1;
  ContextFormat2_5<SmallTypes> format2;
  ContextFormat3 format3;




  } u;
};




struct ChainContextClosureLookupContext
{
  ContextClosureFuncs funcs;
  ContextFormat context_format;
  const void *intersects_data[3];
  void *intersects_cache[3];
  void *intersected_glyphs_cache;
};

struct ChainContextCollectGlyphsLookupContext
{
  ContextCollectGlyphsFuncs funcs;
  const void *collect_data[3];
};

struct ChainContextApplyLookupContext
{
  ChainContextApplyFuncs funcs;
  const void *match_data[3];
};

template <typename HBUINT>
static inline bool chain_context_intersects (const hb_set_t *glyphs,
          unsigned int backtrackCount,
          const HBUINT backtrack[],
          unsigned int inputCount,
          const HBUINT input[],
          unsigned int lookaheadCount,
          const HBUINT lookahead[],
          ChainContextClosureLookupContext &lookup_context)
{
  return array_is_subset_of (glyphs,
        backtrackCount, backtrack,
        lookup_context.funcs.intersects,
        lookup_context.intersects_data[0],
        lookup_context.intersects_cache[0])
      && array_is_subset_of (glyphs,
        inputCount ? inputCount - 1 : 0, input,
        lookup_context.funcs.intersects,
        lookup_context.intersects_data[1],
        lookup_context.intersects_cache[1])
      && array_is_subset_of (glyphs,
        lookaheadCount, lookahead,
        lookup_context.funcs.intersects,
        lookup_context.intersects_data[2],
        lookup_context.intersects_cache[2]);
}

template <typename HBUINT>
static inline void chain_context_closure_lookup (hb_closure_context_t *c,
       unsigned int backtrackCount,
       const HBUINT backtrack[],
       unsigned int inputCount,
       const HBUINT input[],
       unsigned int lookaheadCount,
       const HBUINT lookahead[],
       unsigned int lookupCount,
       const LookupRecord lookupRecord[],
       unsigned value,
       ChainContextClosureLookupContext &lookup_context)
{
  if (chain_context_intersects (c->glyphs,
    backtrackCount, backtrack,
    inputCount, input,
    lookaheadCount, lookahead,
    lookup_context))
    context_closure_recurse_lookups (c,
       inputCount, input,
       lookupCount, lookupRecord,
       value,
       lookup_context.context_format,
       lookup_context.intersects_data[1],
       lookup_context.funcs.intersected_glyphs,
       lookup_context.intersected_glyphs_cache);
}

template <typename HBUINT>
static inline void chain_context_collect_glyphs_lookup (hb_collect_glyphs_context_t *c,
       unsigned int backtrackCount,
       const HBUINT backtrack[],
       unsigned int inputCount,
       const HBUINT input[],
       unsigned int lookaheadCount,
       const HBUINT lookahead[],
       unsigned int lookupCount,
       const LookupRecord lookupRecord[],
       ChainContextCollectGlyphsLookupContext &lookup_context)
{
  collect_array (c, c->before,
   backtrackCount, backtrack,
   lookup_context.funcs.collect, lookup_context.collect_data[0]);
  collect_array (c, c->input,
   inputCount ? inputCount - 1 : 0, input,
   lookup_context.funcs.collect, lookup_context.collect_data[1]);
  collect_array (c, c->after,
   lookaheadCount, lookahead,
   lookup_context.funcs.collect, lookup_context.collect_data[2]);
  recurse_lookups (c,
     lookupCount, lookupRecord);
}

template <typename HBUINT>
static inline bool chain_context_would_apply_lookup (hb_would_apply_context_t *c,
           unsigned int backtrackCount,
           const HBUINT backtrack[] __attribute__((unused)),
           unsigned int inputCount,
           const HBUINT input[],
           unsigned int lookaheadCount,
           const HBUINT lookahead[] __attribute__((unused)),
           unsigned int lookupCount __attribute__((unused)),
           const LookupRecord lookupRecord[] __attribute__((unused)),
           const ChainContextApplyLookupContext &lookup_context)
{
  return (c->zero_context ? !backtrackCount && !lookaheadCount : true)
      && would_match_input (c,
       inputCount, input,
       lookup_context.funcs.match[1], lookup_context.match_data[1]);
}

template <typename HBUINT>
static inline bool chain_context_apply_lookup (hb_ot_apply_context_t *c,
            unsigned int backtrackCount,
            const HBUINT backtrack[],
            unsigned int inputCount,
            const HBUINT input[],
            unsigned int lookaheadCount,
            const HBUINT lookahead[],
            unsigned int lookupCount,
            const LookupRecord lookupRecord[],
            const ChainContextApplyLookupContext &lookup_context)
{
  unsigned end_index = c->buffer->idx;
  unsigned match_end = 0;
  unsigned match_positions[64];
  if (!(match_input (c,
       inputCount, input,
       lookup_context.funcs.match[1], lookup_context.match_data[1],
       &match_end, match_positions) && (end_index = match_end)
       && match_lookahead (c,
      lookaheadCount, lookahead,
      lookup_context.funcs.match[2], lookup_context.match_data[2],
      match_end, &end_index)))
  {
    c->buffer->unsafe_to_concat (c->buffer->idx, end_index);
    return false;
  }

  unsigned start_index = c->buffer->out_len;
  if (!match_backtrack (c,
   backtrackCount, backtrack,
   lookup_context.funcs.match[0], lookup_context.match_data[0],
   &start_index))
  {
    c->buffer->unsafe_to_concat_from_outbuffer (start_index, end_index);
    return false;
  }

  c->buffer->unsafe_to_break_from_outbuffer (start_index, end_index);
  apply_lookup (c,
  inputCount, match_positions,
  lookupCount, lookupRecord,
  match_end);
  return true;
}

template <typename Types>
struct ChainRule
{
  bool intersects (const hb_set_t *glyphs, ChainContextClosureLookupContext &lookup_context) const
  {
    const auto &input = StructAfter<decltype (inputX)> (backtrack);
    const auto &lookahead = StructAfter<decltype (lookaheadX)> (input);
    return chain_context_intersects (glyphs,
         backtrack.len, backtrack.arrayZ,
         input.lenP1, input.arrayZ,
         lookahead.len, lookahead.arrayZ,
         lookup_context);
  }

  void closure (hb_closure_context_t *c, unsigned value,
  ChainContextClosureLookupContext &lookup_context) const
  {
    if ((__builtin_expect (!!(c->lookup_limit_exceeded ()), 0))) return;

    const auto &input = StructAfter<decltype (inputX)> (backtrack);
    const auto &lookahead = StructAfter<decltype (lookaheadX)> (input);
    const auto &lookup = StructAfter<decltype (lookupX)> (lookahead);
    chain_context_closure_lookup (c,
      backtrack.len, backtrack.arrayZ,
      input.lenP1, input.arrayZ,
      lookahead.len, lookahead.arrayZ,
      lookup.len, lookup.arrayZ,
      value,
      lookup_context);
  }

  void closure_lookups (hb_closure_lookups_context_t *c,
                        ChainContextClosureLookupContext &lookup_context) const
  {
    if ((__builtin_expect (!!(c->lookup_limit_exceeded ()), 0))) return;
    if (!intersects (c->glyphs, lookup_context)) return;

    const auto &input = StructAfter<decltype (inputX)> (backtrack);
    const auto &lookahead = StructAfter<decltype (lookaheadX)> (input);
    const auto &lookup = StructAfter<decltype (lookupX)> (lookahead);
    recurse_lookups (c, lookup.len, lookup.arrayZ);
  }

  void collect_glyphs (hb_collect_glyphs_context_t *c,
         ChainContextCollectGlyphsLookupContext &lookup_context) const
  {
    const auto &input = StructAfter<decltype (inputX)> (backtrack);
    const auto &lookahead = StructAfter<decltype (lookaheadX)> (input);
    const auto &lookup = StructAfter<decltype (lookupX)> (lookahead);
    chain_context_collect_glyphs_lookup (c,
      backtrack.len, backtrack.arrayZ,
      input.lenP1, input.arrayZ,
      lookahead.len, lookahead.arrayZ,
      lookup.len, lookup.arrayZ,
      lookup_context);
  }

  bool would_apply (hb_would_apply_context_t *c,
      const ChainContextApplyLookupContext &lookup_context) const
  {
    const auto &input = StructAfter<decltype (inputX)> (backtrack);
    const auto &lookahead = StructAfter<decltype (lookaheadX)> (input);
    const auto &lookup = StructAfter<decltype (lookupX)> (lookahead);
    return chain_context_would_apply_lookup (c,
          backtrack.len, backtrack.arrayZ,
          input.lenP1, input.arrayZ,
          lookahead.len, lookahead.arrayZ, lookup.len,
          lookup.arrayZ, lookup_context);
  }

  bool apply (hb_ot_apply_context_t *c,
       const ChainContextApplyLookupContext &lookup_context) const
  {
    hb_no_trace_t<bool> trace;
    const auto &input = StructAfter<decltype (inputX)> (backtrack);
    const auto &lookahead = StructAfter<decltype (lookaheadX)> (input);
    const auto &lookup = StructAfter<decltype (lookupX)> (lookahead);
    return trace.ret (chain_context_apply_lookup (c, backtrack.len, backtrack.arrayZ, input.lenP1, input.arrayZ, lookahead.len, lookahead.arrayZ, lookup.len, lookup.arrayZ, lookup_context), __PRETTY_FUNCTION__, 2959)



                                          ;
  }

  template<typename Iterator,
    typename hb_enable_if<((hb_is_iterator_of<Iterator, typename Iterator::item_t>::value))>::type* = nullptr>
  void serialize_array (hb_serialize_context_t *c,
   HBUINT16 len,
   Iterator it) const
  {
    c->copy (len);
    for (const auto g : it)
      c->copy ((HBUINT16) g);
  }

  bool serialize (hb_serialize_context_t *c,
    const hb_map_t *lookup_map,
    const hb_map_t *backtrack_map,
    const hb_map_t *input_map = nullptr,
    const hb_map_t *lookahead_map = nullptr) const
  {
    hb_no_trace_t<bool> trace;
    auto *out = c->start_embed (this);
    if ((__builtin_expect (!!(!out), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 2985);

    const hb_map_t *mapping = backtrack_map;
    serialize_array (c, backtrack.len, + backtrack.iter ()
           | hb_map (mapping));

    const auto &input = StructAfter<decltype (inputX)> (backtrack);
    if (input_map) mapping = input_map;
    serialize_array (c, input.lenP1, + input.iter ()
         | hb_map (mapping));

    const auto &lookahead = StructAfter<decltype (lookaheadX)> (input);
    if (lookahead_map) mapping = lookahead_map;
    serialize_array (c, lookahead.len, + lookahead.iter ()
           | hb_map (mapping));

    const auto &lookup = StructAfter<decltype (lookupX)> (lookahead);

    HBUINT16* lookupCount = c->embed (&(lookup.len));
    if (!lookupCount) return trace.ret (false, __PRETTY_FUNCTION__, 3004);

    unsigned count = serialize_lookuprecord_array (c, lookup.as_array (), lookup_map);
    return trace.ret (c->check_assign (*lookupCount, count, HB_SERIALIZE_ERROR_INT_OVERFLOW), __PRETTY_FUNCTION__, 3007);
  }

  bool subset (hb_subset_context_t *c,
        const hb_map_t *lookup_map,
        const hb_map_t *backtrack_map = nullptr,
        const hb_map_t *input_map = nullptr,
        const hb_map_t *lookahead_map = nullptr) const
  {
    hb_no_trace_t<bool> trace;

    const auto &input = StructAfter<decltype (inputX)> (backtrack);
    const auto &lookahead = StructAfter<decltype (lookaheadX)> (input);

    if (!backtrack_map)
    {
      const hb_set_t &glyphset = *c->plan->glyphset_gsub ();
      if (!hb_all (backtrack, glyphset) ||
   !hb_all (input, glyphset) ||
   !hb_all (lookahead, glyphset))
 return trace.ret (false, __PRETTY_FUNCTION__, 3027);

      serialize (c->serializer, lookup_map, c->plan->glyph_map);
    }
    else
    {
      if (!hb_all (backtrack, backtrack_map) ||
   !hb_all (input, input_map) ||
   !hb_all (lookahead, lookahead_map))
 return trace.ret (false, __PRETTY_FUNCTION__, 3036);

      serialize (c->serializer, lookup_map, backtrack_map, input_map, lookahead_map);
    }

    return trace.ret (true, __PRETTY_FUNCTION__, 3041);
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    if (!backtrack.sanitize (c)) return trace.ret (false, __PRETTY_FUNCTION__, 3047);
    const auto &input = StructAfter<decltype (inputX)> (backtrack);
    if (!input.sanitize (c)) return trace.ret (false, __PRETTY_FUNCTION__, 3049);
    const auto &lookahead = StructAfter<decltype (lookaheadX)> (input);
    if (!lookahead.sanitize (c)) return trace.ret (false, __PRETTY_FUNCTION__, 3051);
    const auto &lookup = StructAfter<decltype (lookupX)> (lookahead);
    return trace.ret (lookup.sanitize (c), __PRETTY_FUNCTION__, 3053);
  }

  protected:
  Array16Of<typename Types::HBUINT>
  backtrack;


  HeadlessArrayOf<typename Types::HBUINT>
  inputX;

  Array16Of<typename Types::HBUINT>
  lookaheadX;

  Array16Of<LookupRecord>
  lookupX;

  public:
  void _instance_assertion_on_line_3071 () const { static_assert ((sizeof (*this) >= (8)), ""); } static constexpr unsigned null_size = (8); static constexpr unsigned min_size = (8);
};

template <typename Types>
struct ChainRuleSet
{
  using ChainRule = OT::ChainRule<Types>;

  bool intersects (const hb_set_t *glyphs, ChainContextClosureLookupContext &lookup_context) const
  {
    return
    + hb_iter (rule)
    | hb_map (hb_add (this))
    | hb_map ([&] (const ChainRule &_) { return _.intersects (glyphs, lookup_context); })
    | hb_any
    ;
  }
  void closure (hb_closure_context_t *c, unsigned value, ChainContextClosureLookupContext &lookup_context) const
  {
    if ((__builtin_expect (!!(c->lookup_limit_exceeded ()), 0))) return;

    return
    + hb_iter (rule)
    | hb_map (hb_add (this))
    | hb_apply ([&] (const ChainRule &_) { _.closure (c, value, lookup_context); })
    ;
  }

  void closure_lookups (hb_closure_lookups_context_t *c,
                        ChainContextClosureLookupContext &lookup_context) const
  {
    if ((__builtin_expect (!!(c->lookup_limit_exceeded ()), 0))) return;

    + hb_iter (rule)
    | hb_map (hb_add (this))
    | hb_apply ([&] (const ChainRule &_) { _.closure_lookups (c, lookup_context); })
    ;
  }

  void collect_glyphs (hb_collect_glyphs_context_t *c, ChainContextCollectGlyphsLookupContext &lookup_context) const
  {
    return
    + hb_iter (rule)
    | hb_map (hb_add (this))
    | hb_apply ([&] (const ChainRule &_) { _.collect_glyphs (c, lookup_context); })
    ;
  }

  bool would_apply (hb_would_apply_context_t *c,
      const ChainContextApplyLookupContext &lookup_context) const
  {
    return
    + hb_iter (rule)
    | hb_map (hb_add (this))
    | hb_map ([&] (const ChainRule &_) { return _.would_apply (c, lookup_context); })
    | hb_any
    ;
  }

  bool apply (hb_ot_apply_context_t *c,
       const ChainContextApplyLookupContext &lookup_context) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (+ hb_iter (rule) | hb_map (hb_add (this)) | hb_map ([&] (const ChainRule &_) { return _.apply (c, lookup_context); }) | hb_any, __PRETTY_FUNCTION__, 3134)





    ;
  }

  bool subset (hb_subset_context_t *c,
        const hb_map_t *lookup_map,
        const hb_map_t *backtrack_klass_map = nullptr,
        const hb_map_t *input_klass_map = nullptr,
        const hb_map_t *lookahead_klass_map = nullptr) const
  {
    hb_no_trace_t<bool> trace;

    auto snap = c->serializer->snapshot ();
    auto *out = c->serializer->start_embed (*this);
    if ((__builtin_expect (!!(!c->serializer->extend_min (out)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 3153);

    for (const Offset16To<ChainRule>& _ : rule)
    {
      if (!_) continue;
      auto o_snap = c->serializer->snapshot ();
      auto *o = out->rule.serialize_append (c->serializer);
      if ((__builtin_expect (!!(!o), 0))) continue;

      if (!o->serialize_subset (c, _, this,
    lookup_map,
    backtrack_klass_map,
    input_klass_map,
    lookahead_klass_map))
      {
 out->rule.pop ();
 c->serializer->revert (o_snap);
      }
    }

    bool ret = bool (out->rule);
    if (!ret) c->serializer->revert (snap);

    return trace.ret (ret, __PRETTY_FUNCTION__, 3176);
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (rule.sanitize (c, this), __PRETTY_FUNCTION__, 3182);
  }

  protected:
  Array16OfOffset16To<ChainRule>
  rule;

  public:
  void _compiles_assertion_on_line_3190 () const { (void) (rule)[0].static_size; } void _instance_assertion_on_line_3190 () const { static_assert ((sizeof (*this) == (2) + (1 +0) * sizeof ((rule)[0])), ""); } static constexpr unsigned null_size = (2); static constexpr unsigned min_size = (2);
};

template <typename Types>
struct ChainContextFormat1_4
{
  using ChainRuleSet = OT::ChainRuleSet<Types>;

  bool intersects (const hb_set_t *glyphs) const
  {
    struct ChainContextClosureLookupContext lookup_context = {
      {intersects_glyph, intersected_glyph},
      ContextFormat::SimpleContext,
      {nullptr, nullptr, nullptr}
    };

    return
    + hb_zip (this+coverage, ruleSet)
    | hb_filter (*glyphs, hb_first)
    | hb_map (hb_second)
    | hb_map (hb_add (this))
    | hb_map ([&] (const ChainRuleSet &_) { return _.intersects (glyphs, lookup_context); })
    | hb_any
    ;
  }

  bool may_have_non_1to1 () const
  { return true; }

  void closure (hb_closure_context_t *c) const
  {
    hb_set_t& cur_active_glyphs = c->push_cur_active_glyphs ();
    get_coverage ().intersect_set (c->previous_parent_active_glyphs (),
                                                 cur_active_glyphs);

    struct ChainContextClosureLookupContext lookup_context = {
      {intersects_glyph, intersected_glyph},
      ContextFormat::SimpleContext,
      {nullptr, nullptr, nullptr}
    };

    + hb_zip (this+coverage, hb_range ((unsigned) ruleSet.len))
    | hb_filter ([&] (hb_codepoint_t _) {
      return c->previous_parent_active_glyphs ().has (_);
    }, hb_first)
    | hb_map ([&](const hb_pair_t<hb_codepoint_t, unsigned> _) { return hb_pair_t<unsigned, const ChainRuleSet&> (_.first, this+ruleSet[_.second]); })
    | hb_apply ([&] (const hb_pair_t<unsigned, const ChainRuleSet&>& _) { _.second.closure (c, _.first, lookup_context); })
    ;

    c->pop_cur_done_glyphs ();
  }

  void closure_lookups (hb_closure_lookups_context_t *c) const
  {
    struct ChainContextClosureLookupContext lookup_context = {
      {intersects_glyph, nullptr},
      ContextFormat::SimpleContext,
      {nullptr, nullptr, nullptr}
    };

    + hb_zip (this+coverage, ruleSet)
    | hb_filter (*c->glyphs, hb_first)
    | hb_map (hb_second)
    | hb_map (hb_add (this))
    | hb_apply ([&] (const ChainRuleSet &_) { _.closure_lookups (c, lookup_context); })
    ;
  }

  void collect_variation_indices (hb_collect_variation_indices_context_t *c) const {}

  void collect_glyphs (hb_collect_glyphs_context_t *c) const
  {
    (this+coverage).collect_coverage (c->input);

    struct ChainContextCollectGlyphsLookupContext lookup_context = {
      {collect_glyph},
      {nullptr, nullptr, nullptr}
    };

    + hb_iter (ruleSet)
    | hb_map (hb_add (this))
    | hb_apply ([&] (const ChainRuleSet &_) { _.collect_glyphs (c, lookup_context); })
    ;
  }

  bool would_apply (hb_would_apply_context_t *c) const
  {
    const ChainRuleSet &rule_set = this+ruleSet[(this+coverage).get_coverage (c->glyphs[0])];
    struct ChainContextApplyLookupContext lookup_context = {
      {{match_glyph, match_glyph, match_glyph}},
      {nullptr, nullptr, nullptr}
    };
    return rule_set.would_apply (c, lookup_context);
  }

  const Coverage &get_coverage () const { return this+coverage; }

  bool apply (hb_ot_apply_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    unsigned int index = (this+coverage).get_coverage (c->buffer->cur().codepoint);
    if ((__builtin_expect (!!(index == ((unsigned int) -1)), 1))) return trace.ret (false, __PRETTY_FUNCTION__, 3291);

    const ChainRuleSet &rule_set = this+ruleSet[index];
    struct ChainContextApplyLookupContext lookup_context = {
      {{match_glyph, match_glyph, match_glyph}},
      {nullptr, nullptr, nullptr}
    };
    return trace.ret (rule_set.apply (c, lookup_context), __PRETTY_FUNCTION__, 3298);
  }

  bool subset (hb_subset_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    const hb_set_t &glyphset = *c->plan->glyphset_gsub ();
    const hb_map_t &glyph_map = *c->plan->glyph_map;

    auto *out = c->serializer->start_embed (*this);
    if ((__builtin_expect (!!(!c->serializer->extend_min (out)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 3308);
    out->format = format;

    const hb_map_t *lookup_map = c->table_tag == ((hb_tag_t)((((uint32_t)('G')&0xFF)<<24)|(((uint32_t)('S')&0xFF)<<16)|(((uint32_t)('U')&0xFF)<<8)|((uint32_t)('B')&0xFF))) ? &c->plan->gsub_lookups : &c->plan->gpos_lookups;
    hb_sorted_vector_t<hb_codepoint_t> new_coverage;
    + hb_zip (this+coverage, ruleSet)
    | hb_filter (glyphset, hb_first)
    | hb_filter (subset_offset_array (c, out->ruleSet, this, lookup_map), hb_second)
    | hb_map (hb_first)
    | hb_map (glyph_map)
    | hb_sink (new_coverage)
    ;

    out->coverage.serialize_serialize (c->serializer, new_coverage.iter ());
    return trace.ret (bool (new_coverage), __PRETTY_FUNCTION__, 3322);
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (coverage.sanitize (c, this) && ruleSet.sanitize (c, this), __PRETTY_FUNCTION__, 3328);
  }

  protected:
  HBUINT16 format;
  typename Types::template OffsetTo<Coverage>
  coverage;

  Array16Of<typename Types::template OffsetTo<ChainRuleSet>>
  ruleSet;

  public:
  void _compiles_assertion_on_line_3340 () const { (void) (ruleSet)[0].static_size; } void _instance_assertion_on_line_3340 () const { static_assert ((sizeof (*this) == (2 + 2 * Types::size) + (1 +0) * sizeof ((ruleSet)[0])), ""); } static constexpr unsigned null_size = (2 + 2 * Types::size); static constexpr unsigned min_size = (2 + 2 * Types::size);
};

template <typename Types>
struct ChainContextFormat2_5
{
  using ChainRuleSet = OT::ChainRuleSet<SmallTypes>;

  bool intersects (const hb_set_t *glyphs) const
  {
    if (!(this+coverage).intersects (glyphs))
      return false;

    const ClassDef &backtrack_class_def = this+backtrackClassDef;
    const ClassDef &input_class_def = this+inputClassDef;
    const ClassDef &lookahead_class_def = this+lookaheadClassDef;

    hb_map_t caches[3] = {};
    struct ChainContextClosureLookupContext lookup_context = {
      {intersects_class, nullptr},
      ContextFormat::ClassBasedContext,
      {&backtrack_class_def,
       &input_class_def,
       &lookahead_class_def},
      {&caches[0], &caches[1], &caches[2]}
    };

    hb_set_t retained_coverage_glyphs;
    (this+coverage).intersect_set (*glyphs, retained_coverage_glyphs);

    hb_set_t coverage_glyph_classes;
    input_class_def.intersected_classes (&retained_coverage_glyphs, &coverage_glyph_classes);

    return
    + hb_iter (ruleSet)
    | hb_map (hb_add (this))
    | hb_enumerate
    | hb_map ([&] (const hb_pair_t<unsigned, const ChainRuleSet &> p)
       { return input_class_def.intersects_class (glyphs, p.first) &&
         coverage_glyph_classes.has (p.first) &&
         p.second.intersects (glyphs, lookup_context); })
    | hb_any
    ;
  }

  bool may_have_non_1to1 () const
  { return true; }

  void closure (hb_closure_context_t *c) const
  {
    if (!(this+coverage).intersects (c->glyphs))
      return;

    hb_set_t& cur_active_glyphs = c->push_cur_active_glyphs ();
    get_coverage ().intersect_set (c->previous_parent_active_glyphs (),
                                                 cur_active_glyphs);


    const ClassDef &backtrack_class_def = this+backtrackClassDef;
    const ClassDef &input_class_def = this+inputClassDef;
    const ClassDef &lookahead_class_def = this+lookaheadClassDef;

    hb_map_t caches[3] = {};
    intersected_class_cache_t intersected_cache;
    struct ChainContextClosureLookupContext lookup_context = {
      {intersects_class, intersected_class_glyphs},
      ContextFormat::ClassBasedContext,
      {&backtrack_class_def,
       &input_class_def,
       &lookahead_class_def},
      {&caches[0], &caches[1], &caches[2]},
      &intersected_cache
    };

    + hb_enumerate (ruleSet)
    | hb_filter ([&] (unsigned _)
    { return input_class_def.intersects_class (&c->parent_active_glyphs (), _); },
   hb_first)
    | hb_apply ([&] (const hb_pair_t<unsigned, const typename Types::template OffsetTo<ChainRuleSet>&> _)
                {
                  const ChainRuleSet& chainrule_set = this+_.second;
                  chainrule_set.closure (c, _.first, lookup_context);
                })
    ;

    c->pop_cur_done_glyphs ();
  }

  void closure_lookups (hb_closure_lookups_context_t *c) const
  {
    if (!(this+coverage).intersects (c->glyphs))
      return;

    const ClassDef &backtrack_class_def = this+backtrackClassDef;
    const ClassDef &input_class_def = this+inputClassDef;
    const ClassDef &lookahead_class_def = this+lookaheadClassDef;

    hb_map_t caches[3] = {};
    struct ChainContextClosureLookupContext lookup_context = {
      {intersects_class, nullptr},
      ContextFormat::ClassBasedContext,
      {&backtrack_class_def,
       &input_class_def,
       &lookahead_class_def},
      {&caches[0], &caches[1], &caches[2]}
    };

    + hb_iter (ruleSet)
    | hb_map (hb_add (this))
    | hb_enumerate
    | hb_filter([&] (unsigned klass)
    { return input_class_def.intersects_class (c->glyphs, klass); }, hb_first)
    | hb_map (hb_second)
    | hb_apply ([&] (const ChainRuleSet &_)
    { _.closure_lookups (c, lookup_context); })
    ;
  }

  void collect_variation_indices (hb_collect_variation_indices_context_t *c) const {}

  void collect_glyphs (hb_collect_glyphs_context_t *c) const
  {
    (this+coverage).collect_coverage (c->input);

    const ClassDef &backtrack_class_def = this+backtrackClassDef;
    const ClassDef &input_class_def = this+inputClassDef;
    const ClassDef &lookahead_class_def = this+lookaheadClassDef;

    struct ChainContextCollectGlyphsLookupContext lookup_context = {
      {collect_class},
      {&backtrack_class_def,
       &input_class_def,
       &lookahead_class_def}
    };

    + hb_iter (ruleSet)
    | hb_map (hb_add (this))
    | hb_apply ([&] (const ChainRuleSet &_) { _.collect_glyphs (c, lookup_context); })
    ;
  }

  bool would_apply (hb_would_apply_context_t *c) const
  {
    const ClassDef &backtrack_class_def = this+backtrackClassDef;
    const ClassDef &input_class_def = this+inputClassDef;
    const ClassDef &lookahead_class_def = this+lookaheadClassDef;

    unsigned int index = input_class_def.get_class (c->glyphs[0]);
    const ChainRuleSet &rule_set = this+ruleSet[index];
    struct ChainContextApplyLookupContext lookup_context = {
      {{match_class, match_class, match_class}},
      {&backtrack_class_def,
       &input_class_def,
       &lookahead_class_def}
    };
    return rule_set.would_apply (c, lookup_context);
  }

  const Coverage &get_coverage () const { return this+coverage; }

  unsigned cache_cost () const
  {
    unsigned c = (this+lookaheadClassDef).cost () * ruleSet.len;
    return c >= 4 ? c : 0;
  }
  bool cache_func (hb_ot_apply_context_t *c, bool enter) const
  {
    if (enter)
    {
      if (!c->buffer->try_allocate_var (
# 3509 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh" 3 4
          __builtin_offsetof (
# 3509 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh"
          hb_glyph_info_t
# 3509 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh" 3 4
          , 
# 3509 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh"
          var1.u8[3]
# 3509 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh" 3 4
          ) 
# 3509 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh"
          - 
# 3509 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh" 3 4
          __builtin_offsetof (
# 3509 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh"
          hb_glyph_info_t
# 3509 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh" 3 4
          , 
# 3509 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh"
          var1
# 3509 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh" 3 4
          )
# 3509 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh"
          , sizeof (c->buffer->info[0].var1.u8[3])))
 return false;
      auto &info = c->buffer->info;
      unsigned count = c->buffer->len;
      for (unsigned i = 0; i < count; i++)
 info[i].var1.u8[3] = 255;
      c->new_syllables = 255;
      return true;
    }
    else
    {
      c->new_syllables = (unsigned) -1;
      c->buffer->deallocate_var (
# 3521 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh" 3 4
     __builtin_offsetof (
# 3521 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh"
     hb_glyph_info_t
# 3521 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh" 3 4
     , 
# 3521 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh"
     var1.u8[3]
# 3521 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh" 3 4
     ) 
# 3521 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh"
     - 
# 3521 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh" 3 4
     __builtin_offsetof (
# 3521 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh"
     hb_glyph_info_t
# 3521 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh" 3 4
     , 
# 3521 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh"
     var1
# 3521 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh" 3 4
     )
# 3521 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh"
     , sizeof (c->buffer->info[0].var1.u8[3]));
      return true;
    }
  }

  bool apply (hb_ot_apply_context_t *c, bool cached = false) const
  {
    hb_no_trace_t<bool> trace;
    unsigned int index = (this+coverage).get_coverage (c->buffer->cur().codepoint);
    if ((__builtin_expect (!!(index == ((unsigned int) -1)), 1))) return trace.ret (false, __PRETTY_FUNCTION__, 3530);

    const ClassDef &backtrack_class_def = this+backtrackClassDef;
    const ClassDef &input_class_def = this+inputClassDef;
    const ClassDef &lookahead_class_def = this+lookaheadClassDef;
# 3546 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh"
    struct ChainContextApplyLookupContext lookup_context = {
      {{cached && &backtrack_class_def == &lookahead_class_def ? match_class_cached : match_class,
        cached && &input_class_def == &lookahead_class_def ? match_class_cached : match_class,
        cached ? match_class_cached : match_class}},
      {&backtrack_class_def,
       &input_class_def,
       &lookahead_class_def}
    };

    index = input_class_def.get_class (c->buffer->cur().codepoint);
    const ChainRuleSet &rule_set = this+ruleSet[index];
    return trace.ret (rule_set.apply (c, lookup_context), __PRETTY_FUNCTION__, 3557);
  }

  bool subset (hb_subset_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    auto *out = c->serializer->start_embed (*this);
    if ((__builtin_expect (!!(!c->serializer->extend_min (out)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 3564);
    out->format = format;
    out->coverage.serialize_subset (c, coverage, this);

    hb_map_t backtrack_klass_map;
    hb_map_t input_klass_map;
    hb_map_t lookahead_klass_map;

    out->backtrackClassDef.serialize_subset (c, backtrackClassDef, this, &backtrack_klass_map);

    out->inputClassDef.serialize_subset (c, inputClassDef, this, &input_klass_map);
    out->lookaheadClassDef.serialize_subset (c, lookaheadClassDef, this, &lookahead_klass_map);

    if ((__builtin_expect (!!(!c->serializer->propagate_error (backtrack_klass_map, input_klass_map, lookahead_klass_map)), 0))

                              )
      return trace.ret (false, __PRETTY_FUNCTION__, 3580);

    const hb_set_t* glyphset = c->plan->glyphset_gsub ();
    hb_set_t retained_coverage_glyphs;
    (this+coverage).intersect_set (*glyphset, retained_coverage_glyphs);

    hb_set_t coverage_glyph_classes;
    (this+inputClassDef).intersected_classes (&retained_coverage_glyphs, &coverage_glyph_classes);

    int non_zero_index = -1, index = 0;
    bool ret = true;
    const hb_map_t *lookup_map = c->table_tag == ((hb_tag_t)((((uint32_t)('G')&0xFF)<<24)|(((uint32_t)('S')&0xFF)<<16)|(((uint32_t)('U')&0xFF)<<8)|((uint32_t)('B')&0xFF))) ? &c->plan->gsub_lookups : &c->plan->gpos_lookups;
    auto last_non_zero = c->serializer->snapshot ();
    for (const auto& _ : + hb_enumerate (ruleSet)
    | hb_filter (input_klass_map, hb_first))
    {
      auto *o = out->ruleSet.serialize_append (c->serializer);
      if ((__builtin_expect (!!(!o), 0)))
      {
 ret = false;
 break;
      }
      if (coverage_glyph_classes.has (_.first) &&
          o->serialize_subset (c, _.second, this,
          lookup_map,
          &backtrack_klass_map,
          &input_klass_map,
          &lookahead_klass_map))
      {
        last_non_zero = c->serializer->snapshot ();
 non_zero_index = index;
      }

      index++;
    }

    if (!ret || non_zero_index == -1) return trace.ret (false, __PRETTY_FUNCTION__, 3616);


    if (index > non_zero_index) {
      c->serializer->revert (last_non_zero);
      out->ruleSet.len = non_zero_index + 1;
    }

    return trace.ret (bool (out->ruleSet), __PRETTY_FUNCTION__, 3624);
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (coverage.sanitize (c, this) && backtrackClassDef.sanitize (c, this) && inputClassDef.sanitize (c, this) && lookaheadClassDef.sanitize (c, this) && ruleSet.sanitize (c, this), __PRETTY_FUNCTION__, 3630)



                               ;
  }

  protected:
  HBUINT16 format;
  typename Types::template OffsetTo<Coverage>
  coverage;

  typename Types::template OffsetTo<ClassDef>
  backtrackClassDef;


  typename Types::template OffsetTo<ClassDef>
  inputClassDef;


  typename Types::template OffsetTo<ClassDef>
  lookaheadClassDef;


  Array16Of<typename Types::template OffsetTo<ChainRuleSet>>
  ruleSet;

  public:
  void _compiles_assertion_on_line_3658 () const { (void) (ruleSet)[0].static_size; } void _instance_assertion_on_line_3658 () const { static_assert ((sizeof (*this) == (4 + 4 * Types::size) + (1 +0) * sizeof ((ruleSet)[0])), ""); } static constexpr unsigned null_size = (4 + 4 * Types::size); static constexpr unsigned min_size = (4 + 4 * Types::size);
};

struct ChainContextFormat3
{
  using RuleSet = OT::RuleSet<SmallTypes>;

  bool intersects (const hb_set_t *glyphs) const
  {
    const auto &input = StructAfter<decltype (inputX)> (backtrack);

    if (!(this+input[0]).intersects (glyphs))
      return false;

    const auto &lookahead = StructAfter<decltype (lookaheadX)> (input);
    struct ChainContextClosureLookupContext lookup_context = {
      {intersects_coverage, nullptr},
      ContextFormat::CoverageBasedContext,
      {this, this, this}
    };
    return chain_context_intersects (glyphs,
         backtrack.len, (const HBUINT16 *) backtrack.arrayZ,
         input.len, (const HBUINT16 *) input.arrayZ + 1,
         lookahead.len, (const HBUINT16 *) lookahead.arrayZ,
         lookup_context);
  }

  bool may_have_non_1to1 () const
  { return true; }

  void closure (hb_closure_context_t *c) const
  {
    const auto &input = StructAfter<decltype (inputX)> (backtrack);

    if (!(this+input[0]).intersects (c->glyphs))
      return;

    hb_set_t& cur_active_glyphs = c->push_cur_active_glyphs ();
    get_coverage ().intersect_set (c->previous_parent_active_glyphs (),
                                                 cur_active_glyphs);


    const auto &lookahead = StructAfter<decltype (lookaheadX)> (input);
    const auto &lookup = StructAfter<decltype (lookupX)> (lookahead);
    struct ChainContextClosureLookupContext lookup_context = {
      {intersects_coverage, intersected_coverage_glyphs},
      ContextFormat::CoverageBasedContext,
      {this, this, this}
    };
    chain_context_closure_lookup (c,
      backtrack.len, (const HBUINT16 *) backtrack.arrayZ,
      input.len, (const HBUINT16 *) input.arrayZ + 1,
      lookahead.len, (const HBUINT16 *) lookahead.arrayZ,
      lookup.len, lookup.arrayZ,
      0, lookup_context);

    c->pop_cur_done_glyphs ();
  }

  void closure_lookups (hb_closure_lookups_context_t *c) const
  {
    if (!intersects (c->glyphs))
      return;

    const auto &input = StructAfter<decltype (inputX)> (backtrack);
    const auto &lookahead = StructAfter<decltype (lookaheadX)> (input);
    const auto &lookup = StructAfter<decltype (lookupX)> (lookahead);
    recurse_lookups (c, lookup.len, lookup.arrayZ);
  }

  void collect_variation_indices (hb_collect_variation_indices_context_t *c) const {}

  void collect_glyphs (hb_collect_glyphs_context_t *c) const
  {
    const auto &input = StructAfter<decltype (inputX)> (backtrack);

    (this+input[0]).collect_coverage (c->input);

    const auto &lookahead = StructAfter<decltype (lookaheadX)> (input);
    const auto &lookup = StructAfter<decltype (lookupX)> (lookahead);

    struct ChainContextCollectGlyphsLookupContext lookup_context = {
      {collect_coverage},
      {this, this, this}
    };
    chain_context_collect_glyphs_lookup (c,
      backtrack.len, (const HBUINT16 *) backtrack.arrayZ,
      input.len, (const HBUINT16 *) input.arrayZ + 1,
      lookahead.len, (const HBUINT16 *) lookahead.arrayZ,
      lookup.len, lookup.arrayZ,
      lookup_context);
  }

  bool would_apply (hb_would_apply_context_t *c) const
  {
    const auto &input = StructAfter<decltype (inputX)> (backtrack);
    const auto &lookahead = StructAfter<decltype (lookaheadX)> (input);
    const auto &lookup = StructAfter<decltype (lookupX)> (lookahead);
    struct ChainContextApplyLookupContext lookup_context = {
      {{match_coverage, match_coverage, match_coverage}},
      {this, this, this}
    };
    return chain_context_would_apply_lookup (c,
          backtrack.len, (const HBUINT16 *) backtrack.arrayZ,
          input.len, (const HBUINT16 *) input.arrayZ + 1,
          lookahead.len, (const HBUINT16 *) lookahead.arrayZ,
          lookup.len, lookup.arrayZ, lookup_context);
  }

  const Coverage &get_coverage () const
  {
    const auto &input = StructAfter<decltype (inputX)> (backtrack);
    return this+input[0];
  }

  bool apply (hb_ot_apply_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    const auto &input = StructAfter<decltype (inputX)> (backtrack);

    unsigned int index = (this+input[0]).get_coverage (c->buffer->cur().codepoint);
    if ((__builtin_expect (!!(index == ((unsigned int) -1)), 1))) return trace.ret (false, __PRETTY_FUNCTION__, 3779);

    const auto &lookahead = StructAfter<decltype (lookaheadX)> (input);
    const auto &lookup = StructAfter<decltype (lookupX)> (lookahead);
    struct ChainContextApplyLookupContext lookup_context = {
      {{match_coverage, match_coverage, match_coverage}},
      {this, this, this}
    };
    return trace.ret (chain_context_apply_lookup (c, backtrack.len, (const HBUINT16 *) backtrack.arrayZ, input.len, (const HBUINT16 *) input.arrayZ + 1, lookahead.len, (const HBUINT16 *) lookahead.arrayZ, lookup.len, lookup.arrayZ, lookup_context), __PRETTY_FUNCTION__, 3787)



                                                      ;
  }

  template<typename Iterator,
    typename hb_enable_if<((hb_is_iterator_of<Iterator, typename Iterator::item_t>::value))>::type* = nullptr>
  bool serialize_coverage_offsets (hb_subset_context_t *c, Iterator it, const void* base) const
  {
    hb_no_trace_t<bool> trace;
    auto *out = c->serializer->start_embed<Array16OfOffset16To<Coverage>> ();

    if ((__builtin_expect (!!(!c->serializer->allocate_size<HBUINT16> (HBUINT16::static_size)), 0)))
      return trace.ret (false, __PRETTY_FUNCTION__, 3802);

    for (auto& offset : it) {
      auto *o = out->serialize_append (c->serializer);
      if ((__builtin_expect (!!(!o), 0)) || !o->serialize_subset (c, offset, base))
        return trace.ret (false, __PRETTY_FUNCTION__, 3807);
    }

    return trace.ret (true, __PRETTY_FUNCTION__, 3810);
  }

  bool subset (hb_subset_context_t *c) const
  {
    hb_no_trace_t<bool> trace;

    auto *out = c->serializer->start_embed (this);
    if ((__builtin_expect (!!(!out), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 3818);
    if ((__builtin_expect (!!(!c->serializer->embed (this->format)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 3819);

    if (!serialize_coverage_offsets (c, backtrack.iter (), this))
      return trace.ret (false, __PRETTY_FUNCTION__, 3822);

    const auto &input = StructAfter<decltype (inputX)> (backtrack);
    if (!serialize_coverage_offsets (c, input.iter (), this))
      return trace.ret (false, __PRETTY_FUNCTION__, 3826);

    const auto &lookahead = StructAfter<decltype (lookaheadX)> (input);
    if (!serialize_coverage_offsets (c, lookahead.iter (), this))
      return trace.ret (false, __PRETTY_FUNCTION__, 3830);

    const auto &lookup = StructAfter<decltype (lookupX)> (lookahead);
    const hb_map_t *lookup_map = c->table_tag == ((hb_tag_t)((((uint32_t)('G')&0xFF)<<24)|(((uint32_t)('S')&0xFF)<<16)|(((uint32_t)('U')&0xFF)<<8)|((uint32_t)('B')&0xFF))) ? &c->plan->gsub_lookups : &c->plan->gpos_lookups;

    HBUINT16 *lookupCount = c->serializer->copy<HBUINT16> (lookup.len);
    if (!lookupCount) return trace.ret (false, __PRETTY_FUNCTION__, 3836);

    unsigned count = serialize_lookuprecord_array (c->serializer, lookup.as_array (), lookup_map);
    return trace.ret (c->serializer->check_assign (*lookupCount, count, HB_SERIALIZE_ERROR_INT_OVERFLOW), __PRETTY_FUNCTION__, 3839);
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    if (!backtrack.sanitize (c, this)) return trace.ret (false, __PRETTY_FUNCTION__, 3845);
    const auto &input = StructAfter<decltype (inputX)> (backtrack);
    if (!input.sanitize (c, this)) return trace.ret (false, __PRETTY_FUNCTION__, 3847);
    if (!input.len) return trace.ret (false, __PRETTY_FUNCTION__, 3848);
    const auto &lookahead = StructAfter<decltype (lookaheadX)> (input);
    if (!lookahead.sanitize (c, this)) return trace.ret (false, __PRETTY_FUNCTION__, 3850);
    const auto &lookup = StructAfter<decltype (lookupX)> (lookahead);
    return trace.ret (lookup.sanitize (c), __PRETTY_FUNCTION__, 3852);
  }

  protected:
  HBUINT16 format;
  Array16OfOffset16To<Coverage>
  backtrack;


  Array16OfOffset16To<Coverage>
  inputX ;


  Array16OfOffset16To<Coverage>
  lookaheadX;


  Array16Of<LookupRecord>
  lookupX;

  public:
  void _instance_assertion_on_line_3873 () const { static_assert ((sizeof (*this) >= (10)), ""); } static constexpr unsigned null_size = (10); static constexpr unsigned min_size = (10);
};

struct ChainContext
{
  template <typename context_t, typename ...Ts>
  typename context_t::return_t dispatch (context_t *c, Ts&&... ds) const
  {
    if ((__builtin_expect (!!(!c->may_dispatch (this, &u.format)), 0))) return c->no_dispatch_return_value ();
    hb_no_trace_t<typename context_t::return_t> trace;
    switch (u.format) {
    case 1: return trace.ret (c->dispatch (u.format1, std::forward<Ts> (ds)...), __PRETTY_FUNCTION__, 3884);
    case 2: return trace.ret (c->dispatch (u.format2, std::forward<Ts> (ds)...), __PRETTY_FUNCTION__, 3885);
    case 3: return trace.ret (c->dispatch (u.format3, std::forward<Ts> (ds)...), __PRETTY_FUNCTION__, 3886);




    default:return trace.ret (c->default_return_value (), __PRETTY_FUNCTION__, 3891);
    }
  }

  protected:
  union {
  HBUINT16 format;
  ChainContextFormat1_4<SmallTypes> format1;
  ChainContextFormat2_5<SmallTypes> format2;
  ChainContextFormat3 format3;




  } u;
};


template <typename T>
struct ExtensionFormat1
{
  unsigned int get_type () const { return extensionLookupType; }

  template <typename X>
  const X& get_subtable () const
  { return this + reinterpret_cast<const Offset32To<typename T::SubTable> &> (extensionOffset); }

  template <typename context_t, typename ...Ts>
  typename context_t::return_t dispatch (context_t *c, Ts&&... ds) const
  {
    if ((__builtin_expect (!!(!c->may_dispatch (this, this)), 0))) return c->no_dispatch_return_value ();
    hb_no_trace_t<typename context_t::return_t> trace;
    return trace.ret (get_subtable<typename T::SubTable> ().dispatch (c, get_type (), std::forward<Ts> (ds)...), __PRETTY_FUNCTION__, 3923);
  }

  void collect_variation_indices (hb_collect_variation_indices_context_t *c) const
  { dispatch (c); }


  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this) && extensionLookupType != T::SubTable::Extension, __PRETTY_FUNCTION__, 3933)
                                                  ;
  }

  bool subset (hb_subset_context_t *c) const
  {
    hb_no_trace_t<bool> trace;

    auto *out = c->serializer->start_embed (this);
    if ((__builtin_expect (!!(!out || !c->serializer->extend_min (out)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 3942);

    out->format = format;
    out->extensionLookupType = extensionLookupType;

    const auto& src_offset =
        reinterpret_cast<const Offset32To<typename T::SubTable> &> (extensionOffset);
    auto& dest_offset =
        reinterpret_cast<Offset32To<typename T::SubTable> &> (out->extensionOffset);

    return trace.ret (dest_offset.serialize_subset (c, src_offset, this, get_type ()), __PRETTY_FUNCTION__, 3952);
  }

  protected:
  HBUINT16 format;
  HBUINT16 extensionLookupType;


  Offset32 extensionOffset;

  public:
  void _instance_assertion_on_line_3963 () const { static_assert ((sizeof (*this) == (8)), ""); } unsigned int get_size () const { return (8); } static constexpr unsigned null_size = (8); static constexpr unsigned min_size = (8); static constexpr unsigned static_size = (8);
};

template <typename T>
struct Extension
{
  unsigned int get_type () const
  {
    switch (u.format) {
    case 1: return u.format1.get_type ();
    default:return 0;
    }
  }
  template <typename X>
  const X& get_subtable () const
  {
    switch (u.format) {
    case 1: return u.format1.template get_subtable<typename T::SubTable> ();
    default:return NullHelper<typename T::SubTable>::get_null ();
    }
  }




  template <typename ...Ts>
  typename hb_subset_context_t::return_t dispatch (hb_subset_context_t *c, Ts&&... ds) const
  {
    switch (u.format) {
    case 1: return u.format1.subset (c);
    default: return c->default_return_value ();
    }
  }

  template <typename context_t, typename ...Ts>
  typename context_t::return_t dispatch (context_t *c, Ts&&... ds) const
  {
    if ((__builtin_expect (!!(!c->may_dispatch (this, &u.format)), 0))) return c->no_dispatch_return_value ();
    hb_no_trace_t<typename context_t::return_t> trace;
    switch (u.format) {
    case 1: return trace.ret (u.format1.dispatch (c, std::forward<Ts> (ds)...), __PRETTY_FUNCTION__, 4003);
    default:return trace.ret (c->default_return_value (), __PRETTY_FUNCTION__, 4004);
    }
  }

  protected:
  union {
  HBUINT16 format;
  ExtensionFormat1<T> format1;
  } u;
};






struct hb_ot_layout_lookup_accelerator_t
{
  template <typename TLookup>
  static hb_ot_layout_lookup_accelerator_t *create (const TLookup &lookup)
  {
    unsigned count = lookup.get_subtable_count ();

    unsigned size = sizeof (hb_ot_layout_lookup_accelerator_t) -
      1 * sizeof (hb_accelerate_subtables_context_t::hb_applicable_t) +
      count * sizeof (hb_accelerate_subtables_context_t::hb_applicable_t);






    auto *thiz = (hb_ot_layout_lookup_accelerator_t *) calloc (1, size);
    if ((__builtin_expect (!!(!thiz), 0)))
      return nullptr;

    hb_accelerate_subtables_context_t c_accelerate_subtables (thiz->subtables);
    lookup.dispatch (&c_accelerate_subtables);

    thiz->digest.init ();
    for (auto& subtable : hb_iter (thiz->subtables, count))
      thiz->digest.add (subtable.digest);


    thiz->cache_user_idx = c_accelerate_subtables.cache_user_idx;
    for (unsigned i = 0; i < count; i++)
      if (i != thiz->cache_user_idx)
 thiz->subtables[i].apply_cached_func = thiz->subtables[i].apply_func;


    return thiz;
  }

  bool may_have (hb_codepoint_t g) const
  { return digest.may_have (g); }

  bool apply (hb_ot_apply_context_t *c, unsigned subtables_count, bool use_cache) const
  {

    if (use_cache)
    {
      return
      + hb_iter (hb_iter (subtables, subtables_count))
      | hb_map ([&c] (const hb_accelerate_subtables_context_t::hb_applicable_t &_) { return _.apply_cached (c); })
      | hb_any
      ;
    }
    else

    {
      return
      + hb_iter (hb_iter (subtables, subtables_count))
      | hb_map ([&c] (const hb_accelerate_subtables_context_t::hb_applicable_t &_) { return _.apply (c); })
      | hb_any
      ;
    }
    return false;
  }

  bool cache_enter (hb_ot_apply_context_t *c) const
  {

    return cache_user_idx != (unsigned) -1 &&
    subtables[cache_user_idx].cache_enter (c);



  }
  void cache_leave (hb_ot_apply_context_t *c) const
  {

    subtables[cache_user_idx].cache_leave (c);

  }


  hb_set_digest_t digest;
  private:

  unsigned cache_user_idx = (unsigned) -1;

  hb_accelerate_subtables_context_t::hb_applicable_t subtables[1];
};

template <typename Types>
struct GSUBGPOSVersion1_2
{
  friend struct GSUBGPOS;

  protected:
  FixedVersion<>version;

  typename Types:: template OffsetTo<ScriptList>
  scriptList;
  typename Types::template OffsetTo<FeatureList>
  featureList;
  typename Types::template OffsetTo<LookupList<Types>>
  lookupList;
  Offset32To<FeatureVariations>
  featureVars;



  public:
  void _instance_assertion_on_line_4128 () const { static_assert ((sizeof (*this) >= (4 + 3 * Types::size)), ""); } static constexpr unsigned null_size = (4 + 3 * Types::size); static constexpr unsigned min_size = (4 + 3 * Types::size);

  unsigned int get_size () const
  {
    return min_size +
    (version.to_int () >= 0x00010001u ? featureVars.static_size : 0);
  }

  const typename Types::template OffsetTo<LookupList<Types>>* get_lookup_list_offset () const
  {
    return &lookupList;
  }

  template <typename TLookup>
  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    typedef List16OfOffsetTo<TLookup, typename Types::HBUINT> TLookupList;
    if ((__builtin_expect (!!(!(scriptList.sanitize (c, this) && featureList.sanitize (c, this) && reinterpret_cast<const typename Types::template OffsetTo<TLookupList> &> (lookupList).sanitize (c, this))), 0))

                                                                                                                )
      return trace.ret (false, __PRETTY_FUNCTION__, 4149);


    if ((__builtin_expect (!!(!(version.to_int () < 0x00010001u || featureVars.sanitize (c, this))), 0)))
      return trace.ret (false, __PRETTY_FUNCTION__, 4153);


    return trace.ret (true, __PRETTY_FUNCTION__, 4156);
  }

  template <typename TLookup>
  bool subset (hb_subset_layout_context_t *c) const
  {
    hb_no_trace_t<bool> trace;

    auto *out = c->subset_context->serializer->start_embed (this);
    if ((__builtin_expect (!!(!c->subset_context->serializer->extend_min (out)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 4165);

    out->version = version;

    typedef LookupOffsetList<TLookup, typename Types::HBUINT> TLookupList;
    reinterpret_cast<typename Types::template OffsetTo<TLookupList> &> (out->lookupList)
 .serialize_subset (c->subset_context,
      reinterpret_cast<const typename Types::template OffsetTo<TLookupList> &> (lookupList),
      this,
      c);

    reinterpret_cast<typename Types::template OffsetTo<RecordListOfFeature> &> (out->featureList)
 .serialize_subset (c->subset_context,
      reinterpret_cast<const typename Types::template OffsetTo<RecordListOfFeature> &> (featureList),
      this,
      c);

    out->scriptList.serialize_subset (c->subset_context,
          scriptList,
          this,
          c);


    if (version.to_int () >= 0x00010001u)
    {
      auto snapshot = c->subset_context->serializer->snapshot ();
      if (!c->subset_context->serializer->extend_min (&out->featureVars))
        return trace.ret (false, __PRETTY_FUNCTION__, 4192);
# 4202 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/../../../hb-ot-layout-gsubgpos.hh"
      bool ret = !c->subset_context->plan->all_axes_pinned
                 && out->featureVars.serialize_subset (c->subset_context, featureVars, this, c);
      if (!ret && version.major == 1)
      {
        c->subset_context->serializer->revert (snapshot);
 out->version.major = 1;
 out->version.minor = 0;
      }
    }


    return trace.ret (true, __PRETTY_FUNCTION__, 4213);
  }
};

struct GSUBGPOS
{
  unsigned int get_size () const
  {
    switch (u.version.major) {
    case 1: return u.version1.get_size ();



    default: return u.version.static_size;
    }
  }

  template <typename TLookup>
  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    if ((__builtin_expect (!!(!u.version.sanitize (c)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 4234);
    switch (u.version.major) {
    case 1: return trace.ret (u.version1.sanitize<TLookup> (c), __PRETTY_FUNCTION__, 4236);



    default: return trace.ret (true, __PRETTY_FUNCTION__, 4240);
    }
  }

  template <typename TLookup>
  bool subset (hb_subset_layout_context_t *c) const
  {
    switch (u.version.major) {
    case 1: return u.version1.subset<TLookup> (c);



    default: return false;
    }
  }

  const ScriptList &get_script_list () const
  {
    switch (u.version.major) {
    case 1: return this+u.version1.scriptList;



    default: return NullHelper<ScriptList>::get_null ();
    }
  }
  const FeatureList &get_feature_list () const
  {
    switch (u.version.major) {
    case 1: return this+u.version1.featureList;



    default: return NullHelper<FeatureList>::get_null ();
    }
  }
  unsigned int get_lookup_count () const
  {
    switch (u.version.major) {
    case 1: return (this+u.version1.lookupList).len;



    default: return 0;
    }
  }
  const Lookup& get_lookup (unsigned int i) const
  {
    switch (u.version.major) {
    case 1: return (this+u.version1.lookupList)[i];



    default: return NullHelper<Lookup>::get_null ();
    }
  }
  const FeatureVariations &get_feature_variations () const
  {
    switch (u.version.major) {
    case 1: return (u.version.to_int () >= 0x00010001u ? this+u.version1.featureVars : NullHelper<FeatureVariations>::get_null ());



    default: return NullHelper<FeatureVariations>::get_null ();
    }
  }

  bool has_data () const { return u.version.to_int (); }
  unsigned int get_script_count () const
  { return get_script_list ().len; }
  const Tag& get_script_tag (unsigned int i) const
  { return get_script_list ().get_tag (i); }
  unsigned int get_script_tags (unsigned int start_offset,
    unsigned int *script_count ,
    hb_tag_t *script_tags ) const
  { return get_script_list ().get_tags (start_offset, script_count, script_tags); }
  const Script& get_script (unsigned int i) const
  { return get_script_list ()[i]; }
  bool find_script_index (hb_tag_t tag, unsigned int *index) const
  { return get_script_list ().find_index (tag, index); }

  unsigned int get_feature_count () const
  { return get_feature_list ().len; }
  hb_tag_t get_feature_tag (unsigned int i) const
  { return i == Index::NOT_FOUND_INDEX ? ((hb_tag_t)((((uint32_t)(0)&0xFF)<<24)|(((uint32_t)(0)&0xFF)<<16)|(((uint32_t)(0)&0xFF)<<8)|((uint32_t)(0)&0xFF))) : get_feature_list ().get_tag (i); }
  unsigned int get_feature_tags (unsigned int start_offset,
     unsigned int *feature_count ,
     hb_tag_t *feature_tags ) const
  { return get_feature_list ().get_tags (start_offset, feature_count, feature_tags); }
  const Feature& get_feature (unsigned int i) const
  { return get_feature_list ()[i]; }
  bool find_feature_index (hb_tag_t tag, unsigned int *index) const
  { return get_feature_list ().find_index (tag, index); }

  bool find_variations_index (const int *coords, unsigned int num_coords,
         unsigned int *index) const
  {




    return get_feature_variations ().find_index (coords, num_coords, index);
  }
  const Feature& get_feature_variation (unsigned int feature_index,
     unsigned int variations_index) const
  {

    if (FeatureVariations::NOT_FOUND_INDEX != variations_index &&
 u.version.to_int () >= 0x00010001u)
    {
      const Feature *feature = get_feature_variations ().find_substitute (variations_index,
           feature_index);
      if (feature)
 return *feature;
    }

    return get_feature (feature_index);
  }

  void feature_variation_collect_lookups (const hb_set_t *feature_indexes,
       const hb_hashmap_t<unsigned, const Feature*> *feature_substitutes_map,
       hb_set_t *lookup_indexes ) const
  {

    get_feature_variations ().collect_lookups (feature_indexes, feature_substitutes_map, lookup_indexes);

  }


  void collect_feature_substitutes_with_variations (hb_collect_feature_substitutes_with_var_context_t *c) const
  { get_feature_variations ().collect_feature_substitutes_with_variations (c); }


  template <typename TLookup>
  void closure_lookups (hb_face_t *face,
   const hb_set_t *glyphs,
   hb_set_t *lookup_indexes ) const
  {
    hb_set_t visited_lookups, inactive_lookups;
    hb_closure_lookups_context_t c (face, glyphs, &visited_lookups, &inactive_lookups);

    c.set_recurse_func (TLookup::template dispatch_recurse_func<hb_closure_lookups_context_t>);

    for (unsigned lookup_index : *lookup_indexes)
      reinterpret_cast<const TLookup &> (get_lookup (lookup_index)).closure_lookups (&c, lookup_index);

    hb_set_union (lookup_indexes, &visited_lookups);
    hb_set_subtract (lookup_indexes, &inactive_lookups);
  }

  void prune_langsys (const hb_map_t *duplicate_feature_map,
                      const hb_set_t *layout_scripts,
                      hb_hashmap_t<unsigned, hb::unique_ptr<hb_set_t>> *script_langsys_map,
                      hb_set_t *new_feature_indexes ) const
  {
    hb_prune_langsys_context_t c (this, script_langsys_map, duplicate_feature_map, new_feature_indexes);

    unsigned count = get_script_count ();
    for (unsigned script_index = 0; script_index < count; script_index++)
    {
      const Tag& tag = get_script_tag (script_index);
      if (!layout_scripts->has (tag)) continue;
      const Script& s = get_script (script_index);
      s.prune_langsys (&c, script_index);
    }
  }

  void prune_features (const hb_map_t *lookup_indices,
         const hb_hashmap_t<unsigned, hb::shared_ptr<hb_set_t>> *feature_record_cond_idx_map,
         const hb_hashmap_t<unsigned, const Feature*> *feature_substitutes_map,
         hb_set_t *feature_indices ) const
  {




    hb_set_t alternate_feature_indices;
    get_feature_variations ().closure_features (lookup_indices, feature_record_cond_idx_map, &alternate_feature_indices);
    if ((__builtin_expect (!!(alternate_feature_indices.in_error()), 0)))
    {
      feature_indices->err ();
      return;
    }


    for (unsigned i : hb_iter (feature_indices))
    {
      hb_tag_t tag = get_feature_tag (i);
      if (tag == ((hb_tag_t)((((uint32_t)('p')&0xFF)<<24)|(((uint32_t)('r')&0xFF)<<16)|(((uint32_t)('e')&0xFF)<<8)|((uint32_t)('f')&0xFF))))




        continue;


      const Feature *f = &(get_feature (i));
      const Feature** p = nullptr;
      if (feature_substitutes_map->has (i, &p))
        f = *p;

      if (!f->featureParams.is_null () &&
          tag == ((hb_tag_t)((((uint32_t)('s')&0xFF)<<24)|(((uint32_t)('i')&0xFF)<<16)|(((uint32_t)('z')&0xFF)<<8)|((uint32_t)('e')&0xFF))))
        continue;

      if (!f->intersects_lookup_indexes (lookup_indices)

          && !alternate_feature_indices.has (i)

   )
 feature_indices->del (i);
    }
  }

  template <typename T>
  struct accelerator_t
  {
    accelerator_t (hb_face_t *face)
    {
      this->table = hb_sanitize_context_t ().reference_table<T> (face);
      if ((__builtin_expect (!!(this->table->is_blocklisted (this->table.get_blob (), face)), 0)))
      {
 hb_blob_destroy (this->table.get_blob ());
 this->table = hb_blob_get_empty ();
      }

      this->lookup_count = table->get_lookup_count ();

      this->accels = (hb_atomic_ptr_t<hb_ot_layout_lookup_accelerator_t> *) calloc (this->lookup_count, sizeof (*accels));
      if ((__builtin_expect (!!(!this->accels), 0)))
      {
 this->lookup_count = 0;
 this->table.destroy ();
 this->table = hb_blob_get_empty ();
      }
    }
    ~accelerator_t ()
    {
      for (unsigned int i = 0; i < this->lookup_count; i++)
 free (this->accels[i]);
      free (this->accels);
      this->table.destroy ();
    }

    hb_ot_layout_lookup_accelerator_t *get_accel (unsigned lookup_index) const
    {
      if ((__builtin_expect (!!(lookup_index >= lookup_count), 0))) return nullptr;

    retry:
      auto *accel = accels[lookup_index].get_acquire ();
      if ((__builtin_expect (!!(!accel), 0)))
      {
 accel = hb_ot_layout_lookup_accelerator_t::create (table->get_lookup (lookup_index));
 if ((__builtin_expect (!!(!accel), 0)))
   return nullptr;

 if ((__builtin_expect (!!(!accels[lookup_index].cmpexch (nullptr, accel)), 0)))
 {
   free (accel);
   goto retry;
 }
      }

      return accel;
    }

    hb_blob_ptr_t<T> table;
    unsigned int lookup_count;
    hb_atomic_ptr_t<hb_ot_layout_lookup_accelerator_t> *accels;
  };

  protected:
  union {
  FixedVersion<> version;
  GSUBGPOSVersion1_2<SmallTypes> version1;



  } u;
  public:
  void _instance_assertion_on_line_4520 () const { static_assert ((sizeof (*this) >= (4)), ""); } static constexpr unsigned null_size = (4); static constexpr unsigned min_size = (4);
};


}
# 6 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/GPOS.hh" 2
# 1 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/Common.hh" 1

#define OT_LAYOUT_GPOS_COMMON_HH 

namespace OT {
namespace Layout {
namespace GPOS_impl {

enum attach_type_t {
  ATTACH_TYPE_NONE = 0X00,


  ATTACH_TYPE_MARK = 0X01,
  ATTACH_TYPE_CURSIVE = 0X02,
};


#define attach_chain() var.i16[0]
#define attach_type() var.u8[2]


template<typename Iterator, typename SrcLookup>
static void SinglePos_serialize (hb_serialize_context_t *c,
                                 const SrcLookup *src,
                                 Iterator it,
                                 const hb_hashmap_t<unsigned, hb_pair_t<unsigned, int>> *layout_variation_idx_delta_map,
                                 bool all_axes_pinned);


}
}
}
# 7 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/GPOS.hh" 2
# 1 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/PosLookup.hh" 1

#define OT_LAYOUT_GPOS_POSLOOKUP_HH 

# 1 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/PosLookupSubTable.hh" 1

#define OT_LAYOUT_GPOS_POSLOOKUPSUBTABLE_HH 

# 1 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/SinglePos.hh" 1

#define OT_LAYOUT_GPOS_SINGLEPOS_HH 

# 1 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/SinglePosFormat1.hh" 1

#define OT_LAYOUT_GPOS_SINGLEPOSFORMAT1_HH 


# 1 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/ValueFormat.hh" 1

#define OT_LAYOUT_GPOS_VALUEFORMAT_HH 



namespace OT {
namespace Layout {
namespace GPOS_impl {

typedef HBUINT16 Value;

typedef UnsizedArrayOf<Value> ValueRecord;

struct ValueFormat : HBUINT16
{
  enum Flags {
    xPlacement = 0x0001u,
    yPlacement = 0x0002u,
    xAdvance = 0x0004u,
    yAdvance = 0x0008u,
    xPlaDevice = 0x0010u,
    yPlaDevice = 0x0020u,
    xAdvDevice = 0x0040u,
    yAdvDevice = 0x0080u,
    ignored = 0x0F00u,
    reserved = 0xF000u,

    devices = 0x00F0u
  };
# 57 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/ValueFormat.hh"
  IntType& operator = (uint16_t i) { v = i; return *this; }

  unsigned int get_len () const { return hb_popcount ((unsigned int) *this); }
  unsigned int get_size () const { return get_len () * Value::static_size; }

  hb_vector_t<unsigned> get_device_table_indices () const {
    unsigned i = 0;
    hb_vector_t<unsigned> result;
    unsigned format = *this;

    if (format & xPlacement) i++;
    if (format & yPlacement) i++;
    if (format & xAdvance) i++;
    if (format & yAdvance) i++;

    if (format & xPlaDevice) result.push (i++);
    if (format & yPlaDevice) result.push (i++);
    if (format & xAdvDevice) result.push (i++);
    if (format & yAdvDevice) result.push (i++);

    return result;
  }

  bool apply_value (hb_ot_apply_context_t *c,
                    const void *base,
                    const Value *values,
                    hb_glyph_position_t &glyph_pos) const
  {
    bool ret = false;
    unsigned int format = *this;
    if (!format) return ret;

    hb_font_t *font = c->font;
    bool horizontal =

      ((((unsigned int) (c->direction)) & ~1U) == 4)



      ;

    if (format & xPlacement) glyph_pos.x_offset += font->em_scale_x (get_short (values++, &ret));
    if (format & yPlacement) glyph_pos.y_offset += font->em_scale_y (get_short (values++, &ret));
    if (format & xAdvance) {
      if ((__builtin_expect (!!(horizontal), 1))) glyph_pos.x_advance += font->em_scale_x (get_short (values, &ret));
      values++;
    }

    if (format & yAdvance) {
      if ((__builtin_expect (!!(!horizontal), 0))) glyph_pos.y_advance -= font->em_scale_y (get_short (values, &ret));
      values++;
    }

    if (!has_device ()) return ret;

    bool use_x_device = font->x_ppem || font->num_coords;
    bool use_y_device = font->y_ppem || font->num_coords;

    if (!use_x_device && !use_y_device) return ret;

    const VariationStore &store = c->var_store;
    auto *cache = c->var_store_cache;


    if (format & xPlaDevice) {
      if (use_x_device) glyph_pos.x_offset += (base + get_device (values, &ret)).get_x_delta (font, store, cache);
      values++;
    }
    if (format & yPlaDevice) {
      if (use_y_device) glyph_pos.y_offset += (base + get_device (values, &ret)).get_y_delta (font, store, cache);
      values++;
    }
    if (format & xAdvDevice) {
      if (horizontal && use_x_device) glyph_pos.x_advance += (base + get_device (values, &ret)).get_x_delta (font, store, cache);
      values++;
    }
    if (format & yAdvDevice) {

      if (!horizontal && use_y_device) glyph_pos.y_advance -= (base + get_device (values, &ret)).get_y_delta (font, store, cache);
      values++;
    }
    return ret;
  }

  unsigned int get_effective_format (const Value *values) const
  {
    unsigned int format = *this;
    for (unsigned flag = xPlacement; flag <= yAdvDevice; flag = flag << 1) {
      if (format & flag) should_drop (*values++, (Flags) flag, &format);
    }

    return format;
  }

  template<typename Iterator,
      typename hb_enable_if<((hb_is_iterator_of<Iterator, typename Iterator::item_t>::value))>::type* = nullptr>
  unsigned int get_effective_format (Iterator it) const {
    unsigned int new_format = 0;

    for (const hb_array_t<const Value>& values : it)
      new_format = new_format | get_effective_format (&values);

    return new_format;
  }

  void copy_values (hb_serialize_context_t *c,
                    unsigned int new_format,
                    const void *base,
                    const Value *values,
                    const hb_hashmap_t<unsigned, hb_pair_t<unsigned, int>> *layout_variation_idx_delta_map) const
  {
    unsigned int format = *this;
    if (!format) return;

    HBINT16 *x_placement = nullptr, *y_placement = nullptr, *x_adv = nullptr, *y_adv = nullptr;
    if (format & xPlacement) x_placement = copy_value (c, new_format, xPlacement, *values++);
    if (format & yPlacement) y_placement = copy_value (c, new_format, yPlacement, *values++);
    if (format & xAdvance) x_adv = copy_value (c, new_format, xAdvance, *values++);
    if (format & yAdvance) y_adv = copy_value (c, new_format, yAdvance, *values++);

    if (format & xPlaDevice)
    {
      add_delta_to_value (x_placement, base, values, layout_variation_idx_delta_map);
      copy_device (c, base, values++, layout_variation_idx_delta_map, new_format, xPlaDevice);
    }

    if (format & yPlaDevice)
    {
      add_delta_to_value (y_placement, base, values, layout_variation_idx_delta_map);
      copy_device (c, base, values++, layout_variation_idx_delta_map, new_format, yPlaDevice);
    }

    if (format & xAdvDevice)
    {
      add_delta_to_value (x_adv, base, values, layout_variation_idx_delta_map);
      copy_device (c, base, values++, layout_variation_idx_delta_map, new_format, xAdvDevice);
    }

    if (format & yAdvDevice)
    {
      add_delta_to_value (y_adv, base, values, layout_variation_idx_delta_map);
      copy_device (c, base, values++, layout_variation_idx_delta_map, new_format, yAdvDevice);
    }
  }

  HBINT16* copy_value (hb_serialize_context_t *c,
                       unsigned int new_format,
                       Flags flag,
                       Value value) const
  {

    if (!(new_format & flag)) return nullptr;
    return reinterpret_cast<HBINT16 *> (c->copy (value));
  }

  void collect_variation_indices (hb_collect_variation_indices_context_t *c,
                                  const void *base,
                                  const hb_array_t<const Value>& values) const
  {
    unsigned format = *this;
    unsigned i = 0;
    if (format & xPlacement) i++;
    if (format & yPlacement) i++;
    if (format & xAdvance) i++;
    if (format & yAdvance) i++;
    if (format & xPlaDevice)
    {
      (base + get_device (&(values[i]))).collect_variation_indices (c);
      i++;
    }

    if (format & ValueFormat::yPlaDevice)
    {
      (base + get_device (&(values[i]))).collect_variation_indices (c);
      i++;
    }

    if (format & ValueFormat::xAdvDevice)
    {

      (base + get_device (&(values[i]))).collect_variation_indices (c);
      i++;
    }

    if (format & ValueFormat::yAdvDevice)
    {

      (base + get_device (&(values[i]))).collect_variation_indices (c);
      i++;
    }
  }

  unsigned drop_device_table_flags () const
  {
    unsigned format = *this;
    for (unsigned flag = xPlaDevice; flag <= yAdvDevice; flag = flag << 1)
      format = format & ~flag;

    return format;
  }

  private:
  bool sanitize_value_devices (hb_sanitize_context_t *c, const void *base, const Value *values) const
  {
    unsigned int format = *this;

    if (format & xPlacement) values++;
    if (format & yPlacement) values++;
    if (format & xAdvance) values++;
    if (format & yAdvance) values++;

    if ((format & xPlaDevice) && !get_device (values++).sanitize (c, base)) return false;
    if ((format & yPlaDevice) && !get_device (values++).sanitize (c, base)) return false;
    if ((format & xAdvDevice) && !get_device (values++).sanitize (c, base)) return false;
    if ((format & yAdvDevice) && !get_device (values++).sanitize (c, base)) return false;

    return true;
  }

  static inline Offset16To<Device>& get_device (Value* value)
  {
    return *static_cast<Offset16To<Device> *> (value);
  }
  static inline const Offset16To<Device>& get_device (const Value* value, bool *worked=nullptr)
  {
    if (worked) *worked |= bool (*value);
    return *static_cast<const Offset16To<Device> *> (value);
  }

  void add_delta_to_value (HBINT16 *value,
                           const void *base,
                           const Value *src_value,
                           const hb_hashmap_t<unsigned, hb_pair_t<unsigned, int>> *layout_variation_idx_delta_map) const
  {
    if (!value) return;
    unsigned varidx = (base + get_device (src_value)).get_variation_index ();
    hb_pair_t<unsigned, int> *varidx_delta;
    if (!layout_variation_idx_delta_map->has (varidx, &varidx_delta)) return;

    *value += hb_second (*varidx_delta);
  }

  bool copy_device (hb_serialize_context_t *c, const void *base,
                    const Value *src_value,
                    const hb_hashmap_t<unsigned, hb_pair_t<unsigned, int>> *layout_variation_idx_delta_map,
                    unsigned int new_format, Flags flag) const
  {

    if (!(new_format & flag)) return true;

    Value *dst_value = c->copy (*src_value);

    if (!dst_value) return false;
    if (*dst_value == 0) return true;

    *dst_value = 0;
    c->push ();
    if ((base + get_device (src_value)).copy (c, layout_variation_idx_delta_map))
    {
      c->add_link (*dst_value, c->pop_pack ());
      return true;
    }
    else
    {
      c->pop_discard ();
      return false;
    }
  }

  static inline const HBINT16& get_short (const Value* value, bool *worked=nullptr)
  {
    if (worked) *worked |= bool (*value);
    return *reinterpret_cast<const HBINT16 *> (value);
  }

  public:

  bool has_device () const
  {
    unsigned int format = *this;
    return (format & devices) != 0;
  }

  bool sanitize_value (hb_sanitize_context_t *c, const void *base, const Value *values) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_range (values, get_size ()) && (!has_device () || sanitize_value_devices (c, base, values)), __PRETTY_FUNCTION__, 343);
  }

  bool sanitize_values (hb_sanitize_context_t *c, const void *base, const Value *values, unsigned int count) const
  {
    hb_no_trace_t<bool> trace;
    unsigned int len = get_len ();

    if (!c->check_range (values, count, get_size ())) return trace.ret (false, __PRETTY_FUNCTION__, 351);

    if (!has_device ()) return trace.ret (true, __PRETTY_FUNCTION__, 353);

    for (unsigned int i = 0; i < count; i++) {
      if (!sanitize_value_devices (c, base, values))
        return trace.ret (false, __PRETTY_FUNCTION__, 357);
      values += len;
    }

    return trace.ret (true, __PRETTY_FUNCTION__, 361);
  }


  bool sanitize_values_stride_unsafe (hb_sanitize_context_t *c, const void *base, const Value *values, unsigned int count, unsigned int stride) const
  {
    hb_no_trace_t<bool> trace;

    if (!has_device ()) return trace.ret (true, __PRETTY_FUNCTION__, 369);

    for (unsigned int i = 0; i < count; i++) {
      if (!sanitize_value_devices (c, base, values))
        return trace.ret (false, __PRETTY_FUNCTION__, 373);
      values = &StructAtOffset<const Value> (values, stride);
    }

    return trace.ret (true, __PRETTY_FUNCTION__, 377);
  }

 private:

  void should_drop (Value value, Flags flag, unsigned int* format) const
  {
    if (value) return;
    *format = *format & ~flag;
  }

};

}
}
}
# 6 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/SinglePosFormat1.hh" 2

namespace OT {
namespace Layout {
namespace GPOS_impl {

struct SinglePosFormat1
{
  protected:
  HBUINT16 format;
  Offset16To<Coverage>
                coverage;

  ValueFormat valueFormat;

  ValueRecord values;


  public:
  void _compiles_assertion_on_line_24 () const { (void) (values)[0].static_size; } void _instance_assertion_on_line_24 () const { static_assert ((sizeof (*this) == (6) + (1 +0) * sizeof ((values)[0])), ""); } static constexpr unsigned null_size = (6); static constexpr unsigned min_size = (6);

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this) && coverage.sanitize (c, this) && valueFormat.sanitize_value (c, this, values), __PRETTY_FUNCTION__, 29)

                                                               ;
  }

  bool intersects (const hb_set_t *glyphs) const
  { return (this+coverage).intersects (glyphs); }

  void closure_lookups (hb_closure_lookups_context_t *c) const {}
  void collect_variation_indices (hb_collect_variation_indices_context_t *c) const
  {
    if (!valueFormat.has_device ()) return;

    hb_set_t intersection;
    (this+coverage).intersect_set (*c->glyph_set, intersection);
    if (!intersection) return;

    valueFormat.collect_variation_indices (c, this, values.as_array (valueFormat.get_len ()));
  }

  void collect_glyphs (hb_collect_glyphs_context_t *c) const
  { if ((__builtin_expect (!!(!(this+coverage).collect_coverage (c->input)), 0))) return; }

  const Coverage &get_coverage () const { return this+coverage; }

  ValueFormat get_value_format () const { return valueFormat; }

  bool apply (hb_ot_apply_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    hb_buffer_t *buffer = c->buffer;
    unsigned int index = (this+coverage).get_coverage (buffer->cur().codepoint);
    if ((__builtin_expect (!!(index == ((unsigned int) -1)), 1))) return trace.ret (false, __PRETTY_FUNCTION__, 61);

    if ((0 +1) && c->buffer->messaging ())
    {
      c->buffer->message (c->font,
     "positioning glyph at %u",
     c->buffer->idx);
    }

    valueFormat.apply_value (c, this, values, buffer->cur_pos());

    if ((0 +1) && c->buffer->messaging ())
    {
      c->buffer->message (c->font,
     "positioned glyph at %u",
     c->buffer->idx);
    }

    buffer->idx++;
    return trace.ret (true, __PRETTY_FUNCTION__, 80);
  }

  bool
  position_single (hb_font_t *font,
     hb_direction_t direction,
     hb_codepoint_t gid,
     hb_glyph_position_t &pos) const
  {
    unsigned int index = (this+coverage).get_coverage (gid);
    if ((__builtin_expect (!!(index == ((unsigned int) -1)), 1))) return false;


    hb_buffer_t buffer;
    buffer.props.direction = direction;
    OT::hb_ot_apply_context_t c (1, font, &buffer);

    valueFormat.apply_value (&c, this, values, pos);
    return true;
  }

  template<typename Iterator,
      typename SrcLookup,
      typename hb_enable_if<((hb_is_iterator_of<Iterator, typename Iterator::item_t>::value))>::type* = nullptr>
  void serialize (hb_serialize_context_t *c,
                  const SrcLookup *src,
                  Iterator it,
                  ValueFormat newFormat,
                  const hb_hashmap_t<unsigned, hb_pair_t<unsigned, int>> *layout_variation_idx_delta_map)
  {
    if ((__builtin_expect (!!(!c->extend_min (this)), 0))) return;
    if ((__builtin_expect (!!(!c->check_assign (valueFormat, newFormat, HB_SERIALIZE_ERROR_INT_OVERFLOW)), 0))

                                                                     ) return;

    for (const hb_array_t<const Value>& _ : + it | hb_map (hb_second))
    {
      src->get_value_format ().copy_values (c, newFormat, src, &_, layout_variation_idx_delta_map);


      break;
    }

    auto glyphs =
    + it
    | hb_map_retains_sorting (hb_first)
    ;

    coverage.serialize_serialize (c, glyphs);
  }

  bool subset (hb_subset_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    const hb_set_t &glyphset = *c->plan->glyphset_gsub ();
    const hb_map_t &glyph_map = *c->plan->glyph_map;

    hb_set_t intersection;
    (this+coverage).intersect_set (glyphset, intersection);

    auto it =
    + hb_iter (intersection)
    | hb_map_retains_sorting (glyph_map)
    | hb_zip (hb_repeat (values.as_array (valueFormat.get_len ())))
    ;

    bool ret = bool (it);
    SinglePos_serialize (c->serializer, this, it, &c->plan->layout_variation_idx_delta_map, c->plan->all_axes_pinned);
    return trace.ret (ret, __PRETTY_FUNCTION__, 148);
  }
};

}
}
}
# 5 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/SinglePos.hh" 2
# 1 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/SinglePosFormat2.hh" 1

#define OT_LAYOUT_GPOS_SINGLEPOSFORMAT2_HH 



namespace OT {
namespace Layout {
namespace GPOS_impl {

struct SinglePosFormat2
{
  protected:
  HBUINT16 format;
  Offset16To<Coverage>
                coverage;

  ValueFormat valueFormat;

  HBUINT16 valueCount;
  ValueRecord values;

  public:
  void _compiles_assertion_on_line_23 () const { (void) (values)[0].static_size; } void _instance_assertion_on_line_23 () const { static_assert ((sizeof (*this) == (8) + (1 +0) * sizeof ((values)[0])), ""); } static constexpr unsigned null_size = (8); static constexpr unsigned min_size = (8);

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this) && coverage.sanitize (c, this) && valueFormat.sanitize_values (c, this, values, valueCount), __PRETTY_FUNCTION__, 28)

                                                                            ;
  }

  bool intersects (const hb_set_t *glyphs) const
  { return (this+coverage).intersects (glyphs); }

  void closure_lookups (hb_closure_lookups_context_t *c) const {}
  void collect_variation_indices (hb_collect_variation_indices_context_t *c) const
  {
    if (!valueFormat.has_device ()) return;

    auto it =
    + hb_zip (this+coverage, hb_range ((unsigned) valueCount))
    | hb_filter (c->glyph_set, hb_first)
    ;

    if (!it) return;

    unsigned sub_length = valueFormat.get_len ();
    const hb_array_t<const Value> values_array = values.as_array (valueCount * sub_length);

    for (unsigned i : + it
                      | hb_map (hb_second))
      valueFormat.collect_variation_indices (c, this, values_array.sub_array (i * sub_length, sub_length));

  }

  void collect_glyphs (hb_collect_glyphs_context_t *c) const
  { if ((__builtin_expect (!!(!(this+coverage).collect_coverage (c->input)), 0))) return; }

  const Coverage &get_coverage () const { return this+coverage; }

  ValueFormat get_value_format () const { return valueFormat; }

  bool apply (hb_ot_apply_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    hb_buffer_t *buffer = c->buffer;
    unsigned int index = (this+coverage).get_coverage (buffer->cur().codepoint);
    if ((__builtin_expect (!!(index == ((unsigned int) -1)), 1))) return trace.ret (false, __PRETTY_FUNCTION__, 69);

    if ((__builtin_expect (!!(index >= valueCount), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 71);

    if ((0 +1) && c->buffer->messaging ())
    {
      c->buffer->message (c->font,
     "positioning glyph at %u",
     c->buffer->idx);
    }

    valueFormat.apply_value (c, this,
                             &values[index * valueFormat.get_len ()],
                             buffer->cur_pos());

    if ((0 +1) && c->buffer->messaging ())
    {
      c->buffer->message (c->font,
     "positioned glyph at %u",
     c->buffer->idx);
    }

    buffer->idx++;
    return trace.ret (true, __PRETTY_FUNCTION__, 92);
  }

  bool
  position_single (hb_font_t *font,
     hb_direction_t direction,
     hb_codepoint_t gid,
     hb_glyph_position_t &pos) const
  {
    unsigned int index = (this+coverage).get_coverage (gid);
    if ((__builtin_expect (!!(index == ((unsigned int) -1)), 1))) return false;
    if ((__builtin_expect (!!(index >= valueCount), 0))) return false;


    hb_buffer_t buffer;
    buffer.props.direction = direction;
    OT::hb_ot_apply_context_t c (1, font, &buffer);

    valueFormat.apply_value (&c, this,
                             &values[index * valueFormat.get_len ()],
                             pos);
    return true;
  }


  template<typename Iterator,
      typename SrcLookup,
      typename hb_enable_if<((hb_is_iterator_of<Iterator, typename Iterator::item_t>::value))>::type* = nullptr>
  void serialize (hb_serialize_context_t *c,
                  const SrcLookup *src,
                  Iterator it,
                  ValueFormat newFormat,
                  const hb_hashmap_t<unsigned, hb_pair_t<unsigned, int>> *layout_variation_idx_delta_map)
  {
    auto out = c->extend_min (this);
    if ((__builtin_expect (!!(!out), 0))) return;
    if ((__builtin_expect (!!(!c->check_assign (valueFormat, newFormat, HB_SERIALIZE_ERROR_INT_OVERFLOW)), 0))) return;
    if ((__builtin_expect (!!(!c->check_assign (valueCount, it.len (), HB_SERIALIZE_ERROR_ARRAY_OVERFLOW)), 0))) return;

    + it
    | hb_map (hb_second)
    | hb_apply ([&] (hb_array_t<const Value> _)
    { src->get_value_format ().copy_values (c, newFormat, src, &_, layout_variation_idx_delta_map); })
    ;

    auto glyphs =
    + it
    | hb_map_retains_sorting (hb_first)
    ;

    coverage.serialize_serialize (c, glyphs);
  }

  bool subset (hb_subset_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    const hb_set_t &glyphset = *c->plan->glyphset_gsub ();
    const hb_map_t &glyph_map = *c->plan->glyph_map;

    unsigned sub_length = valueFormat.get_len ();
    auto values_array = values.as_array (valueCount * sub_length);

    auto it =
    + hb_zip (this+coverage, hb_range ((unsigned) valueCount))
    | hb_filter (glyphset, hb_first)
    | hb_map_retains_sorting ([&] (const hb_pair_t<hb_codepoint_t, unsigned>& _)
                              {
                                return hb_pair (glyph_map[_.first],
                                                values_array.sub_array (_.second * sub_length,
                                                                        sub_length));
                              })
    ;

    bool ret = bool (it);
    SinglePos_serialize (c->serializer, this, it, &c->plan->layout_variation_idx_delta_map, c->plan->all_axes_pinned);
    return trace.ret (ret, __PRETTY_FUNCTION__, 167);
  }
};


}
}
}
# 6 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/SinglePos.hh" 2

namespace OT {
namespace Layout {
namespace GPOS_impl {

struct SinglePos
{
  protected:
  union {
  HBUINT16 format;
  SinglePosFormat1 format1;
  SinglePosFormat2 format2;
  } u;

  public:
  template<typename Iterator,
           typename hb_enable_if<((hb_is_iterator_of<Iterator, typename Iterator::item_t>::value))>::type* = nullptr>
  unsigned get_format (Iterator glyph_val_iter_pairs)
  {
    hb_array_t<const Value> first_val_iter = hb_second (*glyph_val_iter_pairs);

    for (const auto iter : glyph_val_iter_pairs)
      for (const auto _ : hb_zip (iter.second, first_val_iter))
        if (_.first != _.second)
          return 2;

    return 1;
  }

  template<typename Iterator,
      typename SrcLookup,
      typename hb_enable_if<((hb_is_iterator_of<Iterator, typename Iterator::item_t>::value))>::type* = nullptr>
  void serialize (hb_serialize_context_t *c,
                  const SrcLookup* src,
                  Iterator glyph_val_iter_pairs,
                  const hb_hashmap_t<unsigned, hb_pair_t<unsigned, int>> *layout_variation_idx_delta_map,
                  bool all_axes_pinned)
  {
    if ((__builtin_expect (!!(!c->extend_min (u.format)), 0))) return;
    unsigned format = 2;
    ValueFormat new_format = src->get_value_format ();

    if (all_axes_pinned)
      new_format = new_format.drop_device_table_flags ();

    if (glyph_val_iter_pairs)
      format = get_format (glyph_val_iter_pairs);

    u.format = format;
    switch (u.format) {
    case 1: u.format1.serialize (c,
                                 src,
                                 glyph_val_iter_pairs,
                                 new_format,
                                 layout_variation_idx_delta_map);
      return;
    case 2: u.format2.serialize (c,
                                 src,
                                 glyph_val_iter_pairs,
                                 new_format,
                                 layout_variation_idx_delta_map);
      return;
    default:return;
    }
  }

  template <typename context_t, typename ...Ts>
  typename context_t::return_t dispatch (context_t *c, Ts&&... ds) const
  {
    if ((__builtin_expect (!!(!c->may_dispatch (this, &u.format)), 0))) return c->no_dispatch_return_value ();
    hb_no_trace_t<typename context_t::return_t> trace;
    switch (u.format) {
    case 1: return trace.ret (c->dispatch (u.format1, std::forward<Ts> (ds)...), __PRETTY_FUNCTION__, 78);
    case 2: return trace.ret (c->dispatch (u.format2, std::forward<Ts> (ds)...), __PRETTY_FUNCTION__, 79);
    default:return trace.ret (c->default_return_value (), __PRETTY_FUNCTION__, 80);
    }
  }
};


template<typename Iterator, typename SrcLookup>
static void
SinglePos_serialize (hb_serialize_context_t *c,
                     const SrcLookup *src,
                     Iterator it,
                     const hb_hashmap_t<unsigned, hb_pair_t<unsigned, int>> *layout_variation_idx_delta_map,
                     bool all_axes_pinned)
{ c->start_embed<SinglePos> ()->serialize (c, src, it, layout_variation_idx_delta_map, all_axes_pinned); }


}
}
}
# 5 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/PosLookupSubTable.hh" 2
# 1 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/PairPos.hh" 1

#define OT_LAYOUT_GPOS_PAIRPOS_HH 

# 1 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/PairPosFormat1.hh" 1

#define OT_LAYOUT_GPOS_PAIRPOSFORMAT1_HH 

# 1 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/PairSet.hh" 1

#define OT_LAYOUT_GPOS_PAIRSET_HH 

# 1 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/PairValueRecord.hh" 1

#define OT_LAYOUT_GPOS_PAIRVALUERECORD_HH 



namespace OT {
namespace Layout {
namespace GPOS_impl {


template <typename Types>
struct PairValueRecord
{
  template <typename Types2>
  friend struct PairSet;

  protected:
  typename Types::HBGlyphID
         secondGlyph;


  ValueRecord values;

  public:
  void _compiles_assertion_on_line_25 () const { (void) (values)[0].static_size; } void _instance_assertion_on_line_25 () const { static_assert ((sizeof (*this) == (Types::size) + (1 +0) * sizeof ((values)[0])), ""); } static constexpr unsigned null_size = (Types::size); static constexpr unsigned min_size = (Types::size);

  int cmp (hb_codepoint_t k) const
  { return secondGlyph.cmp (k); }

  struct context_t
  {
    const void *base;
    const ValueFormat *valueFormats;
    const ValueFormat *newFormats;
    unsigned len1;
    const hb_map_t *glyph_map;
    const hb_hashmap_t<unsigned, hb_pair_t<unsigned, int>> *layout_variation_idx_delta_map;
  };

  bool subset (hb_subset_context_t *c,
               context_t *closure) const
  {
    hb_no_trace_t<bool> trace;
    auto *s = c->serializer;
    auto *out = s->start_embed (*this);
    if ((__builtin_expect (!!(!s->extend_min (out)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 46);

    out->secondGlyph = (*closure->glyph_map)[secondGlyph];

    closure->valueFormats[0].copy_values (s,
                                          closure->newFormats[0],
                                          closure->base, &values[0],
                                          closure->layout_variation_idx_delta_map);
    closure->valueFormats[1].copy_values (s,
                                          closure->newFormats[1],
                                          closure->base,
                                          &values[closure->len1],
                                          closure->layout_variation_idx_delta_map);

    return trace.ret (true, __PRETTY_FUNCTION__, 60);
  }

  void collect_variation_indices (hb_collect_variation_indices_context_t *c,
                                  const ValueFormat *valueFormats,
                                  const void *base) const
  {
    unsigned record1_len = valueFormats[0].get_len ();
    unsigned record2_len = valueFormats[1].get_len ();
    const hb_array_t<const Value> values_array = values.as_array (record1_len + record2_len);

    if (valueFormats[0].has_device ())
      valueFormats[0].collect_variation_indices (c, base, values_array.sub_array (0, record1_len));

    if (valueFormats[1].has_device ())
      valueFormats[1].collect_variation_indices (c, base, values_array.sub_array (record1_len, record2_len));
  }

  bool intersects (const hb_set_t& glyphset) const
  {
    return glyphset.has(secondGlyph);
  }

  const Value* get_values_1 () const
  {
    return &values[0];
  }

  const Value* get_values_2 (ValueFormat format1) const
  {
    return &values[format1.get_len ()];
  }
};


}
}
}
# 5 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/PairSet.hh" 2

namespace OT {
namespace Layout {
namespace GPOS_impl {


template <typename Types>
struct PairSet
{
  template <typename Types2>
  friend struct PairPosFormat1_3;

  using PairValueRecord = GPOS_impl::PairValueRecord<Types>;

  protected:
  HBUINT16 len;
  PairValueRecord firstPairValueRecord;


  public:
  void _instance_assertion_on_line_25 () const { static_assert ((sizeof (*this) >= (2)), ""); } static constexpr unsigned null_size = (2); static constexpr unsigned min_size = (2);

  static unsigned get_size (unsigned len1, unsigned len2)
  {
    return Types::HBGlyphID::static_size + Value::static_size * (len1 + len2);
  }
  static unsigned get_size (const ValueFormat valueFormats[2])
  {
    unsigned len1 = valueFormats[0].get_len ();
    unsigned len2 = valueFormats[1].get_len ();
    return get_size (len1, len2);
  }

  struct sanitize_closure_t
  {
    const ValueFormat *valueFormats;
    unsigned int len1;
    unsigned int stride;
  };

  bool sanitize (hb_sanitize_context_t *c, const sanitize_closure_t *closure) const
  {
    hb_no_trace_t<bool> trace;
    if (!(c->check_struct (this)
       && c->check_range (&firstPairValueRecord,
                          len,
                          closure->stride))) return trace.ret (false, __PRETTY_FUNCTION__, 51);

    unsigned int count = len;
    const PairValueRecord *record = &firstPairValueRecord;
    return trace.ret (closure->valueFormats[0].sanitize_values_stride_unsafe (c, this, &record->values[0], count, closure->stride) && closure->valueFormats[1].sanitize_values_stride_unsafe (c, this, &record->values[closure->len1], count, closure->stride), __PRETTY_FUNCTION__, 55)
                                                                                                                                           ;
  }

  bool intersects (const hb_set_t *glyphs,
                   const ValueFormat *valueFormats) const
  {
    unsigned record_size = get_size (valueFormats);

    const PairValueRecord *record = &firstPairValueRecord;
    unsigned int count = len;
    for (unsigned int i = 0; i < count; i++)
    {
      if (glyphs->has (record->secondGlyph))
        return true;
      record = &StructAtOffset<const PairValueRecord> (record, record_size);
    }
    return false;
  }

  void collect_glyphs (hb_collect_glyphs_context_t *c,
                       const ValueFormat *valueFormats) const
  {
    unsigned record_size = get_size (valueFormats);

    const PairValueRecord *record = &firstPairValueRecord;
    c->input->add_array (&record->secondGlyph, len, record_size);
  }

  void collect_variation_indices (hb_collect_variation_indices_context_t *c,
                                  const ValueFormat *valueFormats) const
  {
    unsigned record_size = get_size (valueFormats);

    const PairValueRecord *record = &firstPairValueRecord;
    unsigned count = len;
    for (unsigned i = 0; i < count; i++)
    {
      if (c->glyph_set->has (record->secondGlyph))
      { record->collect_variation_indices (c, valueFormats, this); }

      record = &StructAtOffset<const PairValueRecord> (record, record_size);
    }
  }

  bool apply (hb_ot_apply_context_t *c,
              const ValueFormat *valueFormats,
              unsigned int pos) const
  {
    hb_no_trace_t<bool> trace;
    hb_buffer_t *buffer = c->buffer;
    unsigned int len1 = valueFormats[0].get_len ();
    unsigned int len2 = valueFormats[1].get_len ();
    unsigned record_size = get_size (len1, len2);

    const PairValueRecord *record = hb_bsearch (buffer->info[pos].codepoint,
                                                &firstPairValueRecord,
                                                len,
                                                record_size);
    if (record)
    {
      if ((0 +1) && c->buffer->messaging ())
      {
 c->buffer->message (c->font,
       "try kerning glyphs at %u,%u",
       c->buffer->idx, pos);
      }

      bool applied_first = valueFormats[0].apply_value (c, this, &record->values[0], buffer->cur_pos());
      bool applied_second = valueFormats[1].apply_value (c, this, &record->values[len1], buffer->pos[pos]);

      if (applied_first || applied_second)
 if ((0 +1) && c->buffer->messaging ())
 {
   c->buffer->message (c->font,
         "kerned glyphs at %u,%u",
         c->buffer->idx, pos);
 }

      if ((0 +1) && c->buffer->messaging ())
      {
 c->buffer->message (c->font,
       "tried kerning glyphs at %u,%u",
       c->buffer->idx, pos);
      }

      if (applied_first || applied_second)
        buffer->unsafe_to_break (buffer->idx, pos + 1);

      if (len2)
      {
 pos++;


      buffer->unsafe_to_break (buffer->idx, pos + 1);
      }

      buffer->idx = pos;
      return trace.ret (true, __PRETTY_FUNCTION__, 153);
    }
    buffer->unsafe_to_concat (buffer->idx, pos + 1);
    return trace.ret (false, __PRETTY_FUNCTION__, 156);
  }

  bool subset (hb_subset_context_t *c,
               const ValueFormat valueFormats[2],
               const ValueFormat newFormats[2]) const
  {
    hb_no_trace_t<bool> trace;
    auto snap = c->serializer->snapshot ();

    auto *out = c->serializer->start_embed (*this);
    if ((__builtin_expect (!!(!c->serializer->extend_min (out)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 167);
    out->len = 0;

    const hb_set_t &glyphset = *c->plan->glyphset_gsub ();
    const hb_map_t &glyph_map = *c->plan->glyph_map;

    unsigned len1 = valueFormats[0].get_len ();
    unsigned len2 = valueFormats[1].get_len ();
    unsigned record_size = get_size (len1, len2);

    typename PairValueRecord::context_t context =
    {
      this,
      valueFormats,
      newFormats,
      len1,
      &glyph_map,
      &c->plan->layout_variation_idx_delta_map
    };

    const PairValueRecord *record = &firstPairValueRecord;
    unsigned count = len, num = 0;
    for (unsigned i = 0; i < count; i++)
    {
      if (glyphset.has (record->secondGlyph)
         && record->subset (c, &context)) num++;
      record = &StructAtOffset<const PairValueRecord> (record, record_size);
    }

    out->len = num;
    if (!num) c->serializer->revert (snap);
    return trace.ret (num, __PRETTY_FUNCTION__, 198);
  }
};


}
}
}
# 5 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/PairPosFormat1.hh" 2

namespace OT {
namespace Layout {
namespace GPOS_impl {


template <typename Types>
struct PairPosFormat1_3
{
  using PairSet = GPOS_impl::PairSet<Types>;
  using PairValueRecord = GPOS_impl::PairValueRecord<Types>;

  protected:
  HBUINT16 format;
  typename Types::template OffsetTo<Coverage>
                coverage;

  ValueFormat valueFormat[2];





  Array16Of<typename Types::template OffsetTo<PairSet>>
                pairSet;

  public:
  void _compiles_assertion_on_line_32 () const { (void) (pairSet)[0].static_size; } void _instance_assertion_on_line_32 () const { static_assert ((sizeof (*this) == (8 + Types::size) + (1 +0) * sizeof ((pairSet)[0])), ""); } static constexpr unsigned null_size = (8 + Types::size); static constexpr unsigned min_size = (8 + Types::size);

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;

    if (!c->check_struct (this)) return trace.ret (false, __PRETTY_FUNCTION__, 38);

    unsigned int len1 = valueFormat[0].get_len ();
    unsigned int len2 = valueFormat[1].get_len ();
    typename PairSet::sanitize_closure_t closure =
    {
      valueFormat,
      len1,
      PairSet::get_size (len1, len2)
    };

    return trace.ret (coverage.sanitize (c, this) && pairSet.sanitize (c, this, &closure), __PRETTY_FUNCTION__, 49);
  }

  bool intersects (const hb_set_t *glyphs) const
  {
    auto &cov = this+coverage;

    if (pairSet.len > glyphs->get_population () * hb_bit_storage ((unsigned) pairSet.len) / 4)
    {
      for (hb_codepoint_t g = ((hb_codepoint_t) -1); glyphs->next (&g);)
      {
 unsigned i = cov.get_coverage (g);
 if ((this+pairSet[i]).intersects (glyphs, valueFormat))
   return true;
      }
      return false;
    }

    return
    + hb_zip (cov, pairSet)
    | hb_filter (*glyphs, hb_first)
    | hb_map (hb_second)
    | hb_map ([glyphs, this] (const typename Types::template OffsetTo<PairSet> &_)
              { return (this+_).intersects (glyphs, valueFormat); })
    | hb_any
    ;
  }

  void closure_lookups (hb_closure_lookups_context_t *c) const {}
  void collect_variation_indices (hb_collect_variation_indices_context_t *c) const
  {
    if ((!valueFormat[0].has_device ()) && (!valueFormat[1].has_device ())) return;

    auto it =
    + hb_zip (this+coverage, pairSet)
    | hb_filter (c->glyph_set, hb_first)
    | hb_map (hb_second)
    ;

    if (!it) return;
    + it
    | hb_map (hb_add (this))
    | hb_apply ([&] (const PairSet& _) { _.collect_variation_indices (c, valueFormat); })
    ;
  }

  void collect_glyphs (hb_collect_glyphs_context_t *c) const
  {
    if ((__builtin_expect (!!(!(this+coverage).collect_coverage (c->input)), 0))) return;
    unsigned int count = pairSet.len;
    for (unsigned int i = 0; i < count; i++)
      (this+pairSet[i]).collect_glyphs (c, valueFormat);
  }

  const Coverage &get_coverage () const { return this+coverage; }

  bool apply (hb_ot_apply_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    hb_buffer_t *buffer = c->buffer;
    unsigned int index = (this+coverage).get_coverage (buffer->cur().codepoint);
    if ((__builtin_expect (!!(index == ((unsigned int) -1)), 1))) return trace.ret (false, __PRETTY_FUNCTION__, 110);

    hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input;
    skippy_iter.reset (buffer->idx, 1);
    unsigned unsafe_to;
    if (!skippy_iter.next (&unsafe_to))
    {
      buffer->unsafe_to_concat (buffer->idx, unsafe_to);
      return trace.ret (false, __PRETTY_FUNCTION__, 118);
    }

    return trace.ret ((this+pairSet[index]).apply (c, valueFormat, skippy_iter.idx), __PRETTY_FUNCTION__, 121);
  }

  bool subset (hb_subset_context_t *c) const
  {
    hb_no_trace_t<bool> trace;

    const hb_set_t &glyphset = *c->plan->glyphset_gsub ();
    const hb_map_t &glyph_map = *c->plan->glyph_map;

    auto *out = c->serializer->start_embed (*this);
    if ((__builtin_expect (!!(!c->serializer->extend_min (out)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 132);
    out->format = format;
    out->valueFormat[0] = valueFormat[0];
    out->valueFormat[1] = valueFormat[1];
    if (c->plan->flags & HB_SUBSET_FLAGS_NO_HINTING)
    {
      hb_pair_t<unsigned, unsigned> newFormats = compute_effective_value_formats (glyphset);
      out->valueFormat[0] = newFormats.first;
      out->valueFormat[1] = newFormats.second;
    }

    if (c->plan->all_axes_pinned)
    {
      out->valueFormat[0] = out->valueFormat[0].drop_device_table_flags ();
      out->valueFormat[1] = out->valueFormat[1].drop_device_table_flags ();
    }

    hb_sorted_vector_t<hb_codepoint_t> new_coverage;

    + hb_zip (this+coverage, pairSet)
    | hb_filter (glyphset, hb_first)
    | hb_filter ([this, c, out] (const typename Types::template OffsetTo<PairSet>& _)
                 {
                   auto snap = c->serializer->snapshot ();
                   auto *o = out->pairSet.serialize_append (c->serializer);
                   if ((__builtin_expect (!!(!o), 0))) return false;
                   bool ret = o->serialize_subset (c, _, this, valueFormat, out->valueFormat);
                   if (!ret)
                   {
                     out->pairSet.pop ();
                     c->serializer->revert (snap);
                   }
                   return ret;
                 },
                 hb_second)
    | hb_map (hb_first)
    | hb_map (glyph_map)
    | hb_sink (new_coverage)
    ;

    out->coverage.serialize_serialize (c->serializer, new_coverage.iter ());

    return trace.ret (bool (new_coverage), __PRETTY_FUNCTION__, 174);
  }


  hb_pair_t<unsigned, unsigned> compute_effective_value_formats (const hb_set_t& glyphset) const
  {
    unsigned record_size = PairSet::get_size (valueFormat);

    unsigned format1 = 0;
    unsigned format2 = 0;
    for (const auto & _ :
   + hb_zip (this+coverage, pairSet)
   | hb_filter (glyphset, hb_first)
   | hb_map (hb_second)
 )
    {
      const PairSet& set = (this + _);
      const PairValueRecord *record = &set.firstPairValueRecord;

      unsigned count = set.len;
      for (unsigned i = 0; i < count; i++)
      {
        if (record->intersects (glyphset))
        {
          format1 = format1 | valueFormat[0].get_effective_format (record->get_values_1 ());
          format2 = format2 | valueFormat[1].get_effective_format (record->get_values_2 (valueFormat[0]));
        }
        record = &StructAtOffset<const PairValueRecord> (record, record_size);
      }

      if (format1 == valueFormat[0] && format2 == valueFormat[1])
        break;
    }

    return hb_pair (format1, format2);
  }
};


}
}
}
# 5 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/PairPos.hh" 2
# 1 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/PairPosFormat2.hh" 1

#define OT_LAYOUT_GPOS_PAIRPOSFORMAT2_HH 



namespace OT {
namespace Layout {
namespace GPOS_impl {

template <typename Types>
struct PairPosFormat2_4
{
  protected:
  HBUINT16 format;
  typename Types::template OffsetTo<Coverage>
                coverage;

  ValueFormat valueFormat1;


  ValueFormat valueFormat2;


  typename Types::template OffsetTo<ClassDef>
                classDef1;


  typename Types::template OffsetTo<ClassDef>
                classDef2;


  HBUINT16 class1Count;

  HBUINT16 class2Count;

  ValueRecord values;


  public:
  void _compiles_assertion_on_line_40 () const { (void) (values)[0].static_size; } void _instance_assertion_on_line_40 () const { static_assert ((sizeof (*this) == (10 + 3 * Types::size) + (1 +0) * sizeof ((values)[0])), ""); } static constexpr unsigned null_size = (10 + 3 * Types::size); static constexpr unsigned min_size = (10 + 3 * Types::size);

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    if (!(c->check_struct (this)
       && coverage.sanitize (c, this)
       && classDef1.sanitize (c, this)
       && classDef2.sanitize (c, this))) return trace.ret (false, __PRETTY_FUNCTION__, 48);

    unsigned int len1 = valueFormat1.get_len ();
    unsigned int len2 = valueFormat2.get_len ();
    unsigned int stride = HBUINT16::static_size * (len1 + len2);
    unsigned int record_size = valueFormat1.get_size () + valueFormat2.get_size ();
    unsigned int count = (unsigned int) class1Count * (unsigned int) class2Count;
    return trace.ret (c->check_range ((const void *) values, count, record_size) && valueFormat1.sanitize_values_stride_unsafe (c, this, &values[0], count, stride) && valueFormat2.sanitize_values_stride_unsafe (c, this, &values[len1], count, stride), __PRETTY_FUNCTION__, 55)



                                                                                                     ;
  }

  bool intersects (const hb_set_t *glyphs) const
  {
    return (this+coverage).intersects (glyphs) &&
           (this+classDef2).intersects (glyphs);
  }

  void closure_lookups (hb_closure_lookups_context_t *c) const {}
  void collect_variation_indices (hb_collect_variation_indices_context_t *c) const
  {
    if (!intersects (c->glyph_set)) return;
    if ((!valueFormat1.has_device ()) && (!valueFormat2.has_device ())) return;

    hb_set_t klass1_glyphs, klass2_glyphs;
    if (!(this+classDef1).collect_coverage (&klass1_glyphs)) return;
    if (!(this+classDef2).collect_coverage (&klass2_glyphs)) return;

    hb_set_t class1_set, class2_set;
    for (const unsigned cp : + c->glyph_set->iter () | hb_filter (this + coverage))
    {
      if (!klass1_glyphs.has (cp)) class1_set.add (0);
      else
      {
        unsigned klass1 = (this+classDef1).get (cp);
        class1_set.add (klass1);
      }
    }

    class2_set.add (0);
    for (const unsigned cp : + c->glyph_set->iter () | hb_filter (klass2_glyphs))
    {
      unsigned klass2 = (this+classDef2).get (cp);
      class2_set.add (klass2);
    }

    if (class1_set.is_empty ()
        || class2_set.is_empty ()
        || (class2_set.get_population() == 1 && class2_set.has(0)))
      return;

    unsigned len1 = valueFormat1.get_len ();
    unsigned len2 = valueFormat2.get_len ();
    const hb_array_t<const Value> values_array = values.as_array ((unsigned)class1Count * (unsigned) class2Count * (len1 + len2));
    for (const unsigned class1_idx : class1_set.iter ())
    {
      for (const unsigned class2_idx : class2_set.iter ())
      {
        unsigned start_offset = (class1_idx * (unsigned) class2Count + class2_idx) * (len1 + len2);
        if (valueFormat1.has_device ())
          valueFormat1.collect_variation_indices (c, this, values_array.sub_array (start_offset, len1));

        if (valueFormat2.has_device ())
          valueFormat2.collect_variation_indices (c, this, values_array.sub_array (start_offset+len1, len2));
      }
    }
  }

  void collect_glyphs (hb_collect_glyphs_context_t *c) const
  {
    if ((__builtin_expect (!!(!(this+coverage).collect_coverage (c->input)), 0))) return;
    if ((__builtin_expect (!!(!(this+classDef2).collect_coverage (c->input)), 0))) return;
  }

  const Coverage &get_coverage () const { return this+coverage; }

  bool apply (hb_ot_apply_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    hb_buffer_t *buffer = c->buffer;
    unsigned int index = (this+coverage).get_coverage (buffer->cur().codepoint);
    if ((__builtin_expect (!!(index == ((unsigned int) -1)), 1))) return trace.ret (false, __PRETTY_FUNCTION__, 131);

    hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input;
    skippy_iter.reset (buffer->idx, 1);
    unsigned unsafe_to;
    if (!skippy_iter.next (&unsafe_to))
    {
      buffer->unsafe_to_concat (buffer->idx, unsafe_to);
      return trace.ret (false, __PRETTY_FUNCTION__, 139);
    }

    unsigned int len1 = valueFormat1.get_len ();
    unsigned int len2 = valueFormat2.get_len ();
    unsigned int record_len = len1 + len2;

    unsigned int klass1 = (this+classDef1).get_class (buffer->cur().codepoint);
    unsigned int klass2 = (this+classDef2).get_class (buffer->info[skippy_iter.idx].codepoint);
    if ((__builtin_expect (!!(klass1 >= class1Count || klass2 >= class2Count), 0)))
    {
      buffer->unsafe_to_concat (buffer->idx, skippy_iter.idx + 1);
      return trace.ret (false, __PRETTY_FUNCTION__, 151);
    }

    const Value *v = &values[record_len * (klass1 * class2Count + klass2)];

    bool applied_first = false, applied_second = false;
# 167 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/PairPosFormat2.hh"
    if (0)

    {
      if (!len2)
      {
        const hb_direction_t dir = buffer->props.direction;
        const bool horizontal = ((((unsigned int) (dir)) & ~1U) == 4);
        const bool backward = ((((unsigned int) (dir)) & ~2U) == 5);
        unsigned mask = horizontal ? ValueFormat::xAdvance : ValueFormat::yAdvance;
        if (backward)
          mask |= mask >> 2;

        mask |= mask << 4;

        if (valueFormat1 & ~mask)
          goto bail;




        hb_glyph_position_t pos{};
        if (valueFormat1.apply_value (c, this, v, pos))
        {
          hb_position_t *src = &pos.x_advance;
          hb_position_t *dst1 = &buffer->cur_pos().x_advance;
          hb_position_t *dst2 = &buffer->pos[skippy_iter.idx].x_advance;
          unsigned i = horizontal ? 0 : 1;

          hb_position_t kern = src[i];
          hb_position_t kern1 = kern >> 1;
          hb_position_t kern2 = kern - kern1;

          if (!backward)
          {
            dst1[i] += kern1;
            dst2[i] += kern2;
            dst2[i + 2] += kern2;
          }
          else
          {
            dst1[i] += kern1;
            dst1[i + 2] += src[i + 2] - kern2;
            dst2[i] += kern2;
          }

          applied_first = applied_second = kern != 0;
          goto success;
        }
        goto boring;
      }
    }
    bail:

    if ((0 +1) && c->buffer->messaging ())
    {
      c->buffer->message (c->font,
     "try kerning glyphs at %u,%u",
     c->buffer->idx, skippy_iter.idx);
    }

    applied_first = valueFormat1.apply_value (c, this, v, buffer->cur_pos());
    applied_second = valueFormat2.apply_value (c, this, v + len1, buffer->pos[skippy_iter.idx]);

    if (applied_first || applied_second)
      if ((0 +1) && c->buffer->messaging ())
      {
 c->buffer->message (c->font,
       "kerned glyphs at %u,%u",
       c->buffer->idx, skippy_iter.idx);
      }

    if ((0 +1) && c->buffer->messaging ())
    {
      c->buffer->message (c->font,
     "tried kerning glyphs at %u,%u",
     c->buffer->idx, skippy_iter.idx);
    }

    success:
    if (applied_first || applied_second)
      buffer->unsafe_to_break (buffer->idx, skippy_iter.idx + 1);
    else
    boring:
      buffer->unsafe_to_concat (buffer->idx, skippy_iter.idx + 1);

    if (len2)
    {
      skippy_iter.idx++;


      buffer->unsafe_to_break (buffer->idx, skippy_iter.idx + 1);
    }

    buffer->idx = skippy_iter.idx;

    return trace.ret (true, __PRETTY_FUNCTION__, 262);
  }

  bool subset (hb_subset_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    auto *out = c->serializer->start_embed (*this);
    if ((__builtin_expect (!!(!c->serializer->extend_min (out)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 269);
    out->format = format;

    hb_map_t klass1_map;
    out->classDef1.serialize_subset (c, classDef1, this, &klass1_map, true, true, &(this + coverage));
    out->class1Count = klass1_map.get_population ();

    hb_map_t klass2_map;
    out->classDef2.serialize_subset (c, classDef2, this, &klass2_map, true, false);
    out->class2Count = klass2_map.get_population ();

    unsigned len1 = valueFormat1.get_len ();
    unsigned len2 = valueFormat2.get_len ();

    hb_pair_t<unsigned, unsigned> newFormats = hb_pair (valueFormat1, valueFormat2);
    if (c->plan->flags & HB_SUBSET_FLAGS_NO_HINTING)
      newFormats = compute_effective_value_formats (klass1_map, klass2_map);

    out->valueFormat1 = newFormats.first;
    out->valueFormat2 = newFormats.second;

    if (c->plan->all_axes_pinned)
    {
      out->valueFormat1 = out->valueFormat1.drop_device_table_flags ();
      out->valueFormat2 = out->valueFormat2.drop_device_table_flags ();
    }

    for (unsigned class1_idx : + hb_range ((unsigned) class1Count) | hb_filter (klass1_map))
    {
      for (unsigned class2_idx : + hb_range ((unsigned) class2Count) | hb_filter (klass2_map))
      {
        unsigned idx = (class1_idx * (unsigned) class2Count + class2_idx) * (len1 + len2);
        valueFormat1.copy_values (c->serializer, out->valueFormat1, this, &values[idx], &c->plan->layout_variation_idx_delta_map);
        valueFormat2.copy_values (c->serializer, out->valueFormat2, this, &values[idx + len1], &c->plan->layout_variation_idx_delta_map);
      }
    }

    const hb_set_t &glyphset = *c->plan->glyphset_gsub ();
    const hb_map_t &glyph_map = *c->plan->glyph_map;

    auto it =
    + hb_iter (this+coverage)
    | hb_filter (glyphset)
    | hb_map_retains_sorting (glyph_map)
    ;

    out->coverage.serialize_serialize (c->serializer, it);
    return trace.ret (out->class1Count && out->class2Count && bool (it), __PRETTY_FUNCTION__, 316);
  }


  hb_pair_t<unsigned, unsigned> compute_effective_value_formats (const hb_map_t& klass1_map,
                                                                 const hb_map_t& klass2_map) const
  {
    unsigned len1 = valueFormat1.get_len ();
    unsigned len2 = valueFormat2.get_len ();
    unsigned record_size = len1 + len2;

    unsigned format1 = 0;
    unsigned format2 = 0;

    for (unsigned class1_idx : + hb_range ((unsigned) class1Count) | hb_filter (klass1_map))
    {
      for (unsigned class2_idx : + hb_range ((unsigned) class2Count) | hb_filter (klass2_map))
      {
        unsigned idx = (class1_idx * (unsigned) class2Count + class2_idx) * record_size;
        format1 = format1 | valueFormat1.get_effective_format (&values[idx]);
        format2 = format2 | valueFormat2.get_effective_format (&values[idx + len1]);
      }

      if (format1 == valueFormat1 && format2 == valueFormat2)
        break;
    }

    return hb_pair (format1, format2);
  }
};

}
}
}
# 6 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/PairPos.hh" 2

namespace OT {
namespace Layout {
namespace GPOS_impl {

struct PairPos
{
  protected:
  union {
  HBUINT16 format;
  PairPosFormat1_3<SmallTypes> format1;
  PairPosFormat2_4<SmallTypes> format2;




  } u;

  public:
  template <typename context_t, typename ...Ts>
  typename context_t::return_t dispatch (context_t *c, Ts&&... ds) const
  {
    if ((__builtin_expect (!!(!c->may_dispatch (this, &u.format)), 0))) return c->no_dispatch_return_value ();
    hb_no_trace_t<typename context_t::return_t> trace;
    switch (u.format) {
    case 1: return trace.ret (c->dispatch (u.format1, std::forward<Ts> (ds)...), __PRETTY_FUNCTION__, 31);
    case 2: return trace.ret (c->dispatch (u.format2, std::forward<Ts> (ds)...), __PRETTY_FUNCTION__, 32);




    default:return trace.ret (c->default_return_value (), __PRETTY_FUNCTION__, 37);
    }
  }
};

}
}
}
# 6 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/PosLookupSubTable.hh" 2
# 1 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/CursivePos.hh" 1

#define OT_LAYOUT_GPOS_CURSIVEPOS_HH 

# 1 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/CursivePosFormat1.hh" 1

#define OT_LAYOUT_GPOS_CURSIVEPOSFORMAT1_HH 

# 1 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/Anchor.hh" 1

#define OT_LAYOUT_GPOS_ANCHOR_HH 

# 1 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/AnchorFormat1.hh" 1

#define OT_LAYOUT_GPOS_ANCHORFORMAT1_HH 

namespace OT {
namespace Layout {
namespace GPOS_impl {

struct AnchorFormat1
{
  protected:
  HBUINT16 format;
  FWORD xCoordinate;
  FWORD yCoordinate;
  public:
  void _instance_assertion_on_line_15 () const { static_assert ((sizeof (*this) == (6)), ""); } unsigned int get_size () const { return (6); } static constexpr unsigned null_size = (6); static constexpr unsigned min_size = (6); static constexpr unsigned static_size = (6);

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this), __PRETTY_FUNCTION__, 20);
  }

  void get_anchor (hb_ot_apply_context_t *c, hb_codepoint_t glyph_id __attribute__((unused)),
                   float *x, float *y) const
  {
    hb_font_t *font = c->font;
    *x = font->em_fscale_x (xCoordinate);
    *y = font->em_fscale_y (yCoordinate);
  }

  AnchorFormat1* copy (hb_serialize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    AnchorFormat1* out = c->embed<AnchorFormat1> (this);
    if (!out) return trace.ret (out, __PRETTY_FUNCTION__, 35);
    out->format = 1;
    return trace.ret (out, __PRETTY_FUNCTION__, 37);
  }
};


}
}
}
# 5 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/Anchor.hh" 2
# 1 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/AnchorFormat2.hh" 1

#define OT_LAYOUT_GPOS_ANCHORFORMAT2_HH 

namespace OT {
namespace Layout {
namespace GPOS_impl {

struct AnchorFormat2
{

  protected:
  HBUINT16 format;
  FWORD xCoordinate;
  FWORD yCoordinate;
  HBUINT16 anchorPoint;
  public:
  void _instance_assertion_on_line_17 () const { static_assert ((sizeof (*this) == (8)), ""); } unsigned int get_size () const { return (8); } static constexpr unsigned null_size = (8); static constexpr unsigned min_size = (8); static constexpr unsigned static_size = (8);

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this), __PRETTY_FUNCTION__, 22);
  }

  void get_anchor (hb_ot_apply_context_t *c, hb_codepoint_t glyph_id,
                   float *x, float *y) const
  {
    hb_font_t *font = c->font;







    unsigned int x_ppem = font->x_ppem;
    unsigned int y_ppem = font->y_ppem;
    hb_position_t cx = 0, cy = 0;
    bool ret;

    ret = (x_ppem || y_ppem) &&
          font->get_glyph_contour_point_for_origin (glyph_id, anchorPoint, HB_DIRECTION_LTR, &cx, &cy);
    *x = ret && x_ppem ? cx : font->em_fscale_x (xCoordinate);
    *y = ret && y_ppem ? cy : font->em_fscale_y (yCoordinate);
  }

  AnchorFormat2* copy (hb_serialize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->embed<AnchorFormat2> (this), __PRETTY_FUNCTION__, 50);
  }
};

}
}
}
# 6 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/Anchor.hh" 2
# 1 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/AnchorFormat3.hh" 1

#define OT_LAYOUT_GPOS_ANCHORFORMAT3_HH 

namespace OT {
namespace Layout {
namespace GPOS_impl {

struct AnchorFormat3
{
  protected:
  HBUINT16 format;
  FWORD xCoordinate;
  FWORD yCoordinate;
  Offset16To<Device>
                xDeviceTable;


  Offset16To<Device>
                yDeviceTable;


  public:
  void _instance_assertion_on_line_23 () const { static_assert ((sizeof (*this) == (10)), ""); } unsigned int get_size () const { return (10); } static constexpr unsigned null_size = (10); static constexpr unsigned min_size = (10); static constexpr unsigned static_size = (10);

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this) && xDeviceTable.sanitize (c, this) && yDeviceTable.sanitize (c, this), __PRETTY_FUNCTION__, 28);
  }

  void get_anchor (hb_ot_apply_context_t *c, hb_codepoint_t glyph_id __attribute__((unused)),
                   float *x, float *y) const
  {
    hb_font_t *font = c->font;
    *x = font->em_fscale_x (xCoordinate);
    *y = font->em_fscale_y (yCoordinate);

    if (font->x_ppem || font->num_coords)
      *x += (this+xDeviceTable).get_x_delta (font, c->var_store, c->var_store_cache);
    if (font->y_ppem || font->num_coords)
      *y += (this+yDeviceTable).get_y_delta (font, c->var_store, c->var_store_cache);
  }

  bool subset (hb_subset_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    auto *out = c->serializer->start_embed (*this);
    if ((__builtin_expect (!!(!out), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 48);
    if ((__builtin_expect (!!(!c->serializer->embed (format)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 49);
    if ((__builtin_expect (!!(!c->serializer->embed (xCoordinate)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 50);
    if ((__builtin_expect (!!(!c->serializer->embed (yCoordinate)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 51);

    unsigned x_varidx = xDeviceTable ? (this+xDeviceTable).get_variation_index () : 0xFFFFFFFFu;
    if (c->plan->layout_variation_idx_delta_map.has (x_varidx))
    {
      int delta = hb_second (c->plan->layout_variation_idx_delta_map.get (x_varidx));
      if (delta != 0)
      {
        if (!c->serializer->check_assign (out->xCoordinate, xCoordinate + delta,
                                          HB_SERIALIZE_ERROR_INT_OVERFLOW))
          return trace.ret (false, __PRETTY_FUNCTION__, 61);
      }
    }

    unsigned y_varidx = yDeviceTable ? (this+yDeviceTable).get_variation_index () : 0xFFFFFFFFu;
    if (c->plan->layout_variation_idx_delta_map.has (y_varidx))
    {
      int delta = hb_second (c->plan->layout_variation_idx_delta_map.get (y_varidx));
      if (delta != 0)
      {
        if (!c->serializer->check_assign (out->yCoordinate, yCoordinate + delta,
                                          HB_SERIALIZE_ERROR_INT_OVERFLOW))
          return trace.ret (false, __PRETTY_FUNCTION__, 73);
      }
    }

    if (c->plan->all_axes_pinned)
      return trace.ret (c->serializer->check_assign (out->format, 1, HB_SERIALIZE_ERROR_INT_OVERFLOW), __PRETTY_FUNCTION__, 78);

    if (!c->serializer->embed (xDeviceTable)) return trace.ret (false, __PRETTY_FUNCTION__, 80);
    if (!c->serializer->embed (yDeviceTable)) return trace.ret (false, __PRETTY_FUNCTION__, 81);

    out->xDeviceTable.serialize_copy (c->serializer, xDeviceTable, this, 0, hb_serialize_context_t::Head, &c->plan->layout_variation_idx_delta_map);
    out->yDeviceTable.serialize_copy (c->serializer, yDeviceTable, this, 0, hb_serialize_context_t::Head, &c->plan->layout_variation_idx_delta_map);
    return trace.ret (out, __PRETTY_FUNCTION__, 85);
  }

  void collect_variation_indices (hb_collect_variation_indices_context_t *c) const
  {
    (this+xDeviceTable).collect_variation_indices (c);
    (this+yDeviceTable).collect_variation_indices (c);
  }
};


}
}
}
# 7 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/Anchor.hh" 2

namespace OT {
namespace Layout {
namespace GPOS_impl {

struct Anchor
{
  protected:
  union {
  HBUINT16 format;
  AnchorFormat1 format1;
  AnchorFormat2 format2;
  AnchorFormat3 format3;
  } u;
  public:
  void _compiles_assertion_on_line_22 () const { (void) this->u.format.static_size; } void _instance_assertion_on_line_22 () const { static_assert ((sizeof(this->u.format) == (2)), ""); } static constexpr unsigned null_size = (2); static constexpr unsigned min_size = (2);

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    if (!u.format.sanitize (c)) return trace.ret (false, __PRETTY_FUNCTION__, 27);
    switch (u.format) {
    case 1: return trace.ret (u.format1.sanitize (c), __PRETTY_FUNCTION__, 29);
    case 2: return trace.ret (u.format2.sanitize (c), __PRETTY_FUNCTION__, 30);
    case 3: return trace.ret (u.format3.sanitize (c), __PRETTY_FUNCTION__, 31);
    default:return trace.ret (true, __PRETTY_FUNCTION__, 32);
    }
  }

  void get_anchor (hb_ot_apply_context_t *c, hb_codepoint_t glyph_id,
                   float *x, float *y) const
  {
    *x = *y = 0;
    switch (u.format) {
    case 1: u.format1.get_anchor (c, glyph_id, x, y); return;
    case 2: u.format2.get_anchor (c, glyph_id, x, y); return;
    case 3: u.format3.get_anchor (c, glyph_id, x, y); return;
    default: return;
    }
  }

  bool subset (hb_subset_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    switch (u.format) {
    case 1: return trace.ret (bool (reinterpret_cast<Anchor *> (u.format1.copy (c->serializer))), __PRETTY_FUNCTION__, 52);
    case 2:
      if (c->plan->flags & HB_SUBSET_FLAGS_NO_HINTING)
      {


        return trace.ret (bool (reinterpret_cast<Anchor *> (u.format1.copy (c->serializer))), __PRETTY_FUNCTION__, 58);
      }
      return trace.ret (bool (reinterpret_cast<Anchor *> (u.format2.copy (c->serializer))), __PRETTY_FUNCTION__, 60);
    case 3: return trace.ret (u.format3.subset (c), __PRETTY_FUNCTION__, 61);
    default:return trace.ret (false, __PRETTY_FUNCTION__, 62);
    }
  }

  void collect_variation_indices (hb_collect_variation_indices_context_t *c) const
  {
    switch (u.format) {
    case 1: case 2:
      return;
    case 3:
      u.format3.collect_variation_indices (c);
      return;
    default: return;
    }
  }
};

}
}
}
# 5 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/CursivePosFormat1.hh" 2

namespace OT {
namespace Layout {
namespace GPOS_impl {

struct EntryExitRecord
{
  friend struct CursivePosFormat1;

  bool sanitize (hb_sanitize_context_t *c, const void *base) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (entryAnchor.sanitize (c, base) && exitAnchor.sanitize (c, base), __PRETTY_FUNCTION__, 17);
  }

  void collect_variation_indices (hb_collect_variation_indices_context_t *c,
                                  const void *src_base) const
  {
    (src_base+entryAnchor).collect_variation_indices (c);
    (src_base+exitAnchor).collect_variation_indices (c);
  }

  EntryExitRecord* subset (hb_subset_context_t *c,
                           const void *src_base) const
  {
    hb_no_trace_t<bool> trace;
    auto *out = c->serializer->embed (this);
    if ((__builtin_expect (!!(!out), 0))) return trace.ret (nullptr, __PRETTY_FUNCTION__, 32);

    out->entryAnchor.serialize_subset (c, entryAnchor, src_base);
    out->exitAnchor.serialize_subset (c, exitAnchor, src_base);
    return trace.ret (out, __PRETTY_FUNCTION__, 36);
  }

  protected:
  Offset16To<Anchor>
                entryAnchor;


  Offset16To<Anchor>
                exitAnchor;


  public:
  void _instance_assertion_on_line_49 () const { static_assert ((sizeof (*this) == (4)), ""); } unsigned int get_size () const { return (4); } static constexpr unsigned null_size = (4); static constexpr unsigned min_size = (4); static constexpr unsigned static_size = (4);
};

static void
reverse_cursive_minor_offset (hb_glyph_position_t *pos, unsigned int i, hb_direction_t direction, unsigned int new_parent) {
  int chain = pos[i].var.i16[0], type = pos[i].var.u8[2];
  if ((__builtin_expect (!!(!chain || 0 == (type & ATTACH_TYPE_CURSIVE)), 1)))
    return;

  pos[i].var.i16[0] = 0;

  unsigned int j = (int) i + chain;


  if (j == new_parent)
    return;

  reverse_cursive_minor_offset (pos, j, direction, new_parent);

  if (((((unsigned int) (direction)) & ~1U) == 4))
    pos[j].y_offset = -pos[i].y_offset;
  else
    pos[j].x_offset = -pos[i].x_offset;

  pos[j].var.i16[0] = -chain;
  pos[j].var.u8[2] = type;
}


struct CursivePosFormat1
{
  protected:
  HBUINT16 format;
  Offset16To<Coverage>
                coverage;

  Array16Of<EntryExitRecord>
                entryExitRecord;

  public:
  void _compiles_assertion_on_line_89 () const { (void) (entryExitRecord)[0].static_size; } void _instance_assertion_on_line_89 () const { static_assert ((sizeof (*this) == (6) + (1 +0) * sizeof ((entryExitRecord)[0])), ""); } static constexpr unsigned null_size = (6); static constexpr unsigned min_size = (6);

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (coverage.sanitize (c, this) && entryExitRecord.sanitize (c, this), __PRETTY_FUNCTION__, 94);
  }

  bool intersects (const hb_set_t *glyphs) const
  { return (this+coverage).intersects (glyphs); }

  void closure_lookups (hb_closure_lookups_context_t *c) const {}

  void collect_variation_indices (hb_collect_variation_indices_context_t *c) const
  {
    + hb_zip (this+coverage, entryExitRecord)
    | hb_filter (c->glyph_set, hb_first)
    | hb_map (hb_second)
    | hb_apply ([&] (const EntryExitRecord& record) { record.collect_variation_indices (c, this); })
    ;
  }

  void collect_glyphs (hb_collect_glyphs_context_t *c) const
  { if ((__builtin_expect (!!(!(this+coverage).collect_coverage (c->input)), 0))) return; }

  const Coverage &get_coverage () const { return this+coverage; }

  bool apply (hb_ot_apply_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    hb_buffer_t *buffer = c->buffer;

    const EntryExitRecord &this_record = entryExitRecord[(this+coverage).get_coverage (buffer->cur().codepoint)];
    if (!this_record.entryAnchor) return trace.ret (false, __PRETTY_FUNCTION__, 122);

    hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input;
    skippy_iter.reset (buffer->idx, 1);
    unsigned unsafe_from;
    if (!skippy_iter.prev (&unsafe_from))
    {
      buffer->unsafe_to_concat_from_outbuffer (unsafe_from, buffer->idx + 1);
      return trace.ret (false, __PRETTY_FUNCTION__, 130);
    }

    const EntryExitRecord &prev_record = entryExitRecord[(this+coverage).get_coverage (buffer->info[skippy_iter.idx].codepoint)];
    if (!prev_record.exitAnchor)
    {
      buffer->unsafe_to_concat_from_outbuffer (skippy_iter.idx, buffer->idx + 1);
      return trace.ret (false, __PRETTY_FUNCTION__, 137);
    }

    unsigned int i = skippy_iter.idx;
    unsigned int j = buffer->idx;

    if ((0 +1) && c->buffer->messaging ())
    {
      c->buffer->message (c->font,
     "cursive attaching glyph at %u to glyph at %u",
     i, j);
    }

    buffer->unsafe_to_break (i, j + 1);
    float entry_x, entry_y, exit_x, exit_y;
    (this+prev_record.exitAnchor).get_anchor (c, buffer->info[i].codepoint, &exit_x, &exit_y);
    (this+this_record.entryAnchor).get_anchor (c, buffer->info[j].codepoint, &entry_x, &entry_y);

    hb_glyph_position_t *pos = buffer->pos;

    hb_position_t d;

    switch (c->direction) {
      case HB_DIRECTION_LTR:
        pos[i].x_advance = _hb_roundf(exit_x) + pos[i].x_offset;

        d = _hb_roundf(entry_x) + pos[j].x_offset;
        pos[j].x_advance -= d;
        pos[j].x_offset -= d;
        break;
      case HB_DIRECTION_RTL:
        d = _hb_roundf(exit_x) + pos[i].x_offset;
        pos[i].x_advance -= d;
        pos[i].x_offset -= d;

        pos[j].x_advance = _hb_roundf(entry_x) + pos[j].x_offset;
        break;
      case HB_DIRECTION_TTB:
        pos[i].y_advance = _hb_roundf(exit_y) + pos[i].y_offset;

        d = _hb_roundf(entry_y) + pos[j].y_offset;
        pos[j].y_advance -= d;
        pos[j].y_offset -= d;
        break;
      case HB_DIRECTION_BTT:
        d = _hb_roundf(exit_y) + pos[i].y_offset;
        pos[i].y_advance -= d;
        pos[i].y_offset -= d;

        pos[j].y_advance = _hb_roundf(entry_y);
        break;
      case HB_DIRECTION_INVALID:
      default:
        break;
    }
# 201 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/CursivePosFormat1.hh"
    unsigned int child = i;
    unsigned int parent = j;
    hb_position_t x_offset = entry_x - exit_x;
    hb_position_t y_offset = entry_y - exit_y;
    if (!(c->lookup_props & LookupFlag::RightToLeft))
    {
      unsigned int k = child;
      child = parent;
      parent = k;
      x_offset = -x_offset;
      y_offset = -y_offset;
    }






    reverse_cursive_minor_offset (pos, child, c->direction, parent);

    pos[child].var.u8[2] = ATTACH_TYPE_CURSIVE;
    pos[child].var.i16[0] = (int) parent - (int) child;
    buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT;
    if ((__builtin_expect (!!(((((unsigned int) (c->direction)) & ~1U) == 4)), 1)))
      pos[child].y_offset = y_offset;
    else
      pos[child].x_offset = x_offset;




    if ((__builtin_expect (!!(pos[parent].var.i16[0] == -pos[child].var.i16[0]), 0)))
    {
      pos[parent].var.i16[0] = 0;
      if ((__builtin_expect (!!(((((unsigned int) (c->direction)) & ~1U) == 4)), 1)))
 pos[parent].y_offset = 0;
      else
 pos[parent].x_offset = 0;
    }

    if ((0 +1) && c->buffer->messaging ())
    {
      c->buffer->message (c->font,
     "cursive attached glyph at %u to glyph at %u",
     i, j);
    }

    buffer->idx++;
    return trace.ret (true, __PRETTY_FUNCTION__, 249);
  }

  template <typename Iterator,
            typename hb_enable_if<((hb_is_iterator_of<Iterator, typename Iterator::item_t>::value))>::type* = nullptr>
  void serialize (hb_subset_context_t *c,
                  Iterator it,
                  const void *src_base)
  {
    if ((__builtin_expect (!!(!c->serializer->extend_min ((*this))), 0))) return;
    this->format = 1;
    this->entryExitRecord.len = it.len ();

    for (const EntryExitRecord& entry_record : + it
                                               | hb_map (hb_second))
      entry_record.subset (c, src_base);

    auto glyphs =
    + it
    | hb_map_retains_sorting (hb_first)
    ;

    coverage.serialize_serialize (c->serializer, glyphs);
  }

  bool subset (hb_subset_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    const hb_set_t &glyphset = *c->plan->glyphset_gsub ();
    const hb_map_t &glyph_map = *c->plan->glyph_map;

    auto *out = c->serializer->start_embed (*this);
    if ((__builtin_expect (!!(!out), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 281);

    auto it =
    + hb_zip (this+coverage, entryExitRecord)
    | hb_filter (glyphset, hb_first)
    | hb_map_retains_sorting ([&] (hb_pair_t<hb_codepoint_t, const EntryExitRecord&> p) -> hb_pair_t<hb_codepoint_t, const EntryExitRecord&>
                              { return hb_pair (glyph_map[p.first], p.second);})
    ;

    bool ret = bool (it);
    out->serialize (c, it, this);
    return trace.ret (ret, __PRETTY_FUNCTION__, 292);
  }
};


}
}
}
# 5 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/CursivePos.hh" 2

namespace OT {
namespace Layout {
namespace GPOS_impl {

struct CursivePos
{
  protected:
  union {
  HBUINT16 format;
  CursivePosFormat1 format1;
  } u;

  public:
  template <typename context_t, typename ...Ts>
  typename context_t::return_t dispatch (context_t *c, Ts&&... ds) const
  {
    if ((__builtin_expect (!!(!c->may_dispatch (this, &u.format)), 0))) return c->no_dispatch_return_value ();
    hb_no_trace_t<typename context_t::return_t> trace;
    switch (u.format) {
    case 1: return trace.ret (c->dispatch (u.format1, std::forward<Ts> (ds)...), __PRETTY_FUNCTION__, 25);
    default:return trace.ret (c->default_return_value (), __PRETTY_FUNCTION__, 26);
    }
  }
};

}
}
}
# 7 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/PosLookupSubTable.hh" 2
# 1 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/MarkBasePos.hh" 1

#define OT_LAYOUT_GPOS_MARKBASEPOS_HH 

# 1 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/MarkBasePosFormat1.hh" 1

#define OT_LAYOUT_GPOS_MARKBASEPOSFORMAT1_HH 

# 1 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/MarkArray.hh" 1

#define OT_LAYOUT_GPOS_MARKARRAY_HH 

# 1 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/AnchorMatrix.hh" 1

#define OT_LAYOUT_GPOS_ANCHORMATRIX_HH 

namespace OT {
namespace Layout {
namespace GPOS_impl {

struct AnchorMatrix
{
  HBUINT16 rows;
  UnsizedArrayOf<Offset16To<Anchor>>
                matrixZ;

  public:
  void _compiles_assertion_on_line_15 () const { (void) (matrixZ)[0].static_size; } void _instance_assertion_on_line_15 () const { static_assert ((sizeof (*this) == (2) + (1 +0) * sizeof ((matrixZ)[0])), ""); } static constexpr unsigned null_size = (2); static constexpr unsigned min_size = (2);

  bool sanitize (hb_sanitize_context_t *c, unsigned int cols) const
  {
    hb_no_trace_t<bool> trace;
    if (!c->check_struct (this)) return trace.ret (false, __PRETTY_FUNCTION__, 20);
    if ((__builtin_expect (!!(hb_unsigned_mul_overflows (rows, cols)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 21);
    unsigned int count = rows * cols;
    if (!c->check_array (matrixZ.arrayZ, count)) return trace.ret (false, __PRETTY_FUNCTION__, 23);
    for (unsigned int i = 0; i < count; i++)
      if (!matrixZ[i].sanitize (c, this)) return trace.ret (false, __PRETTY_FUNCTION__, 25);
    return trace.ret (true, __PRETTY_FUNCTION__, 26);
  }

  const Anchor& get_anchor (unsigned int row, unsigned int col,
                            unsigned int cols, bool *found) const
  {
    *found = false;
    if ((__builtin_expect (!!(row >= rows || col >= cols), 0))) return NullHelper<Anchor>::get_null ();
    *found = !matrixZ[row * cols + col].is_null ();
    return this+matrixZ[row * cols + col];
  }

  template <typename Iterator,
            typename hb_enable_if<((hb_is_iterator_of<Iterator, typename Iterator::item_t>::value))>::type* = nullptr>
  void collect_variation_indices (hb_collect_variation_indices_context_t *c,
                                  Iterator index_iter) const
  {
    for (unsigned i : index_iter)
      (this+matrixZ[i]).collect_variation_indices (c);
  }

  template <typename Iterator,
      typename hb_enable_if<((hb_is_iterator_of<Iterator, typename Iterator::item_t>::value))>::type* = nullptr>
  bool subset (hb_subset_context_t *c,
               unsigned num_rows,
               Iterator index_iter) const
  {
    hb_no_trace_t<bool> trace;

    auto *out = c->serializer->start_embed (this);

    if (!index_iter) return trace.ret (false, __PRETTY_FUNCTION__, 57);
    if ((__builtin_expect (!!(!c->serializer->extend_min (out)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 58);

    out->rows = num_rows;
    for (const unsigned i : index_iter)
    {
      auto *offset = c->serializer->embed (matrixZ[i]);
      if (!offset) return trace.ret (false, __PRETTY_FUNCTION__, 64);
      offset->serialize_subset (c, matrixZ[i], this);
    }

    return trace.ret (true, __PRETTY_FUNCTION__, 68);
  }
};


}
}
}
# 5 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/MarkArray.hh" 2
# 1 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/MarkRecord.hh" 1

#define OT_LAYOUT_GPOS_MARKRECORD_HH 

namespace OT {
namespace Layout {
namespace GPOS_impl {

struct MarkRecord
{
  friend struct MarkArray;

  public:
  HBUINT16 klass;
  Offset16To<Anchor>
                markAnchor;

  public:
  void _instance_assertion_on_line_18 () const { static_assert ((sizeof (*this) == (4)), ""); } unsigned int get_size () const { return (4); } static constexpr unsigned null_size = (4); static constexpr unsigned min_size = (4); static constexpr unsigned static_size = (4);

  unsigned get_class () const { return (unsigned) klass; }
  bool sanitize (hb_sanitize_context_t *c, const void *base) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this) && markAnchor.sanitize (c, base), __PRETTY_FUNCTION__, 24);
  }

  MarkRecord *subset (hb_subset_context_t *c,
                      const void *src_base,
                      const hb_map_t *klass_mapping) const
  {
    hb_no_trace_t<bool> trace;
    auto *out = c->serializer->embed (this);
    if ((__builtin_expect (!!(!out), 0))) return trace.ret (nullptr, __PRETTY_FUNCTION__, 33);

    out->klass = klass_mapping->get (klass);
    out->markAnchor.serialize_subset (c, markAnchor, src_base);
    return trace.ret (out, __PRETTY_FUNCTION__, 37);
  }

  void collect_variation_indices (hb_collect_variation_indices_context_t *c,
                                  const void *src_base) const
  {
    (src_base+markAnchor).collect_variation_indices (c);
  }
};


}
}
}
# 6 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/MarkArray.hh" 2

namespace OT {
namespace Layout {
namespace GPOS_impl {

struct MarkArray : Array16Of<MarkRecord>
{
  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (Array16Of<MarkRecord>::sanitize (c, this), __PRETTY_FUNCTION__, 16);
  }

  bool apply (hb_ot_apply_context_t *c,
              unsigned int mark_index, unsigned int glyph_index,
              const AnchorMatrix &anchors, unsigned int class_count,
              unsigned int glyph_pos) const
  {
    hb_no_trace_t<bool> trace;
    hb_buffer_t *buffer = c->buffer;
    const MarkRecord &record = Array16Of<MarkRecord>::operator[](mark_index);
    unsigned int mark_class = record.klass;

    const Anchor& mark_anchor = this + record.markAnchor;
    bool found;
    const Anchor& glyph_anchor = anchors.get_anchor (glyph_index, mark_class, class_count, &found);


    if ((__builtin_expect (!!(!found), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 34);

    float mark_x, mark_y, base_x, base_y;

    buffer->unsafe_to_break (glyph_pos, buffer->idx + 1);
    mark_anchor.get_anchor (c, buffer->cur().codepoint, &mark_x, &mark_y);
    glyph_anchor.get_anchor (c, buffer->info[glyph_pos].codepoint, &base_x, &base_y);

    if ((0 +1) && c->buffer->messaging ())
    {
      c->buffer->message (c->font,
     "attaching mark glyph at %u to glyph at %u",
     c->buffer->idx, glyph_pos);
    }

    hb_glyph_position_t &o = buffer->cur_pos();
    o.x_offset = _hb_roundf(base_x - mark_x);
    o.y_offset = _hb_roundf(base_y - mark_y);
    o.var.u8[2] = ATTACH_TYPE_MARK;
    o.var.i16[0] = (int) glyph_pos - (int) buffer->idx;
    buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT;

    if ((0 +1) && c->buffer->messaging ())
    {
      c->buffer->message (c->font,
     "attached mark glyph at %u to glyph at %u",
     c->buffer->idx, glyph_pos);
    }

    buffer->idx++;
    return trace.ret (true, __PRETTY_FUNCTION__, 64);
  }

  template <typename Iterator,
      typename hb_enable_if<((hb_is_iterator_of<Iterator, typename Iterator::item_t>::value))>::type* = nullptr>
  bool subset (hb_subset_context_t *c,
               Iterator coverage,
               const hb_map_t *klass_mapping) const
  {
    hb_no_trace_t<bool> trace;
    const hb_set_t &glyphset = *c->plan->glyphset_gsub ();

    auto* out = c->serializer->start_embed (this);
    if ((__builtin_expect (!!(!c->serializer->extend_min (out)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 77);

    auto mark_iter =
    + hb_zip (coverage, this->iter ())
    | hb_filter (glyphset, hb_first)
    | hb_map (hb_second)
    ;

    unsigned new_length = 0;
    for (const auto& mark_record : mark_iter) {
      if ((__builtin_expect (!!(!mark_record.subset (c, this, klass_mapping)), 0)))
        return trace.ret (false, __PRETTY_FUNCTION__, 88);
      new_length++;
    }

    if ((__builtin_expect (!!(!c->serializer->check_assign (out->len, new_length, HB_SERIALIZE_ERROR_ARRAY_OVERFLOW)), 0))
                                                                                   )
      return trace.ret (false, __PRETTY_FUNCTION__, 94);

    return trace.ret (true, __PRETTY_FUNCTION__, 96);
  }
};

__attribute__((__visibility__("hidden"))) inline
void Markclass_closure_and_remap_indexes (const Coverage &mark_coverage,
                                          const MarkArray &mark_array,
                                          const hb_set_t &glyphset,
                                          hb_map_t* klass_mapping )
{
  hb_set_t orig_classes;

  + hb_zip (mark_coverage, mark_array)
  | hb_filter (glyphset, hb_first)
  | hb_map (hb_second)
  | hb_map (&MarkRecord::get_class)
  | hb_sink (orig_classes)
  ;

  unsigned idx = 0;
  for (auto klass : orig_classes.iter ())
  {
    if (klass_mapping->has (klass)) continue;
    klass_mapping->set (klass, idx);
    idx++;
  }
}

}
}
}
# 5 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/MarkBasePosFormat1.hh" 2

namespace OT {
namespace Layout {
namespace GPOS_impl {

typedef AnchorMatrix BaseArray;




template <typename Types>
struct MarkBasePosFormat1_2
{
  protected:
  HBUINT16 format;
  typename Types::template OffsetTo<Coverage>
                markCoverage;

  typename Types::template OffsetTo<Coverage>
                baseCoverage;

  HBUINT16 classCount;
  typename Types::template OffsetTo<MarkArray>
                markArray;

  typename Types::template OffsetTo<BaseArray>
                baseArray;


  public:
  void _instance_assertion_on_line_35 () const { static_assert ((sizeof (*this) == (4 + 4 * Types::size)), ""); } unsigned int get_size () const { return (4 + 4 * Types::size); } static constexpr unsigned null_size = (4 + 4 * Types::size); static constexpr unsigned min_size = (4 + 4 * Types::size); static constexpr unsigned static_size = (4 + 4 * Types::size);

    bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this) && markCoverage.sanitize (c, this) && baseCoverage.sanitize (c, this) && markArray.sanitize (c, this) && baseArray.sanitize (c, this, (unsigned int) classCount), __PRETTY_FUNCTION__, 40)



                                                                          ;
  }

  bool intersects (const hb_set_t *glyphs) const
  {
    return (this+markCoverage).intersects (glyphs) &&
           (this+baseCoverage).intersects (glyphs);
  }

  void closure_lookups (hb_closure_lookups_context_t *c) const {}

  void collect_variation_indices (hb_collect_variation_indices_context_t *c) const
  {
    + hb_zip (this+markCoverage, this+markArray)
    | hb_filter (c->glyph_set, hb_first)
    | hb_map (hb_second)
    | hb_apply ([&] (const MarkRecord& record) { record.collect_variation_indices (c, &(this+markArray)); })
    ;

    hb_map_t klass_mapping;
    Markclass_closure_and_remap_indexes (this+markCoverage, this+markArray, *c->glyph_set, &klass_mapping);

    unsigned basecount = (this+baseArray).rows;
    auto base_iter =
    + hb_zip (this+baseCoverage, hb_range (basecount))
    | hb_filter (c->glyph_set, hb_first)
    | hb_map (hb_second)
    ;

    hb_sorted_vector_t<unsigned> base_indexes;
    for (const unsigned row : base_iter)
    {
      + hb_range ((unsigned) classCount)
      | hb_filter (klass_mapping)
      | hb_map ([&] (const unsigned col) { return row * (unsigned) classCount + col; })
      | hb_sink (base_indexes)
      ;
    }
    (this+baseArray).collect_variation_indices (c, base_indexes.iter ());
  }

  void collect_glyphs (hb_collect_glyphs_context_t *c) const
  {
    if ((__builtin_expect (!!(!(this+markCoverage).collect_coverage (c->input)), 0))) return;
    if ((__builtin_expect (!!(!(this+baseCoverage).collect_coverage (c->input)), 0))) return;
  }

  const Coverage &get_coverage () const { return this+markCoverage; }

  bool apply (hb_ot_apply_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    hb_buffer_t *buffer = c->buffer;
    unsigned int mark_index = (this+markCoverage).get_coverage (buffer->cur().codepoint);
    if ((__builtin_expect (!!(mark_index == ((unsigned int) -1)), 1))) return trace.ret (false, __PRETTY_FUNCTION__, 98);


    hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input;
    skippy_iter.reset (buffer->idx, 1);
    skippy_iter.set_lookup_props (LookupFlag::IgnoreMarks);
    do {
      unsigned unsafe_from;
      if (!skippy_iter.prev (&unsafe_from))
      {
        buffer->unsafe_to_concat_from_outbuffer (unsafe_from, buffer->idx + 1);
        return trace.ret (false, __PRETTY_FUNCTION__, 109);
      }






      if (!_hb_glyph_info_multiplied (&buffer->info[skippy_iter.idx]) ||
          0 == _hb_glyph_info_get_lig_comp (&buffer->info[skippy_iter.idx]) ||
          (skippy_iter.idx == 0 ||
           _hb_glyph_info_is_mark (&buffer->info[skippy_iter.idx - 1]) ||
           !_hb_glyph_info_multiplied (&buffer->info[skippy_iter.idx - 1]) ||
           _hb_glyph_info_get_lig_id (&buffer->info[skippy_iter.idx]) !=
           _hb_glyph_info_get_lig_id (&buffer->info[skippy_iter.idx - 1]) ||
           _hb_glyph_info_get_lig_comp (&buffer->info[skippy_iter.idx]) !=
           _hb_glyph_info_get_lig_comp (&buffer->info[skippy_iter.idx - 1]) + 1
           ))
        break;
      skippy_iter.reject ();
    } while (true);




    unsigned int base_index = (this+baseCoverage).get_coverage (buffer->info[skippy_iter.idx].codepoint);
    if (base_index == ((unsigned int) -1))
    {
      buffer->unsafe_to_concat_from_outbuffer (skippy_iter.idx, buffer->idx + 1);
      return trace.ret (false, __PRETTY_FUNCTION__, 138);
    }

    return trace.ret ((this+markArray).apply (c, mark_index, base_index, this+baseArray, classCount, skippy_iter.idx), __PRETTY_FUNCTION__, 141);
  }

  bool subset (hb_subset_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    const hb_set_t &glyphset = *c->plan->glyphset_gsub ();
    const hb_map_t &glyph_map = *c->plan->glyph_map;

    auto *out = c->serializer->start_embed (*this);
    if ((__builtin_expect (!!(!c->serializer->extend_min (out)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 151);
    out->format = format;

    hb_map_t klass_mapping;
    Markclass_closure_and_remap_indexes (this+markCoverage, this+markArray, glyphset, &klass_mapping);

    if (!klass_mapping.get_population ()) return trace.ret (false, __PRETTY_FUNCTION__, 157);
    out->classCount = klass_mapping.get_population ();

    auto mark_iter =
    + hb_zip (this+markCoverage, this+markArray)
    | hb_filter (glyphset, hb_first)
    ;

    hb_sorted_vector_t<hb_codepoint_t> new_coverage;
    + mark_iter
    | hb_map (hb_first)
    | hb_map (glyph_map)
    | hb_sink (new_coverage)
    ;

    if (!out->markCoverage.serialize_serialize (c->serializer, new_coverage.iter ()))
      return trace.ret (false, __PRETTY_FUNCTION__, 173);

    out->markArray.serialize_subset (c, markArray, this,
                                     (this+markCoverage).iter (),
                                     &klass_mapping);

    unsigned basecount = (this+baseArray).rows;
    auto base_iter =
    + hb_zip (this+baseCoverage, hb_range (basecount))
    | hb_filter (glyphset, hb_first)
    ;

    new_coverage.reset ();
    + base_iter
    | hb_map (hb_first)
    | hb_map (glyph_map)
    | hb_sink (new_coverage)
    ;

    if (!out->baseCoverage.serialize_serialize (c->serializer, new_coverage.iter ()))
      return trace.ret (false, __PRETTY_FUNCTION__, 193);

    hb_sorted_vector_t<unsigned> base_indexes;
    for (const unsigned row : + base_iter
                              | hb_map (hb_second))
    {
      + hb_range ((unsigned) classCount)
      | hb_filter (klass_mapping)
      | hb_map ([&] (const unsigned col) { return row * (unsigned) classCount + col; })
      | hb_sink (base_indexes)
      ;
    }

    out->baseArray.serialize_subset (c, baseArray, this,
                                     base_iter.len (),
                                     base_indexes.iter ());

    return trace.ret (true, __PRETTY_FUNCTION__, 210);
  }
};


}
}
}
# 5 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/MarkBasePos.hh" 2

namespace OT {
namespace Layout {
namespace GPOS_impl {

struct MarkBasePos
{
  protected:
  union {
  HBUINT16 format;
  MarkBasePosFormat1_2<SmallTypes> format1;



  } u;

  public:
  template <typename context_t, typename ...Ts>
  typename context_t::return_t dispatch (context_t *c, Ts&&... ds) const
  {
    if ((__builtin_expect (!!(!c->may_dispatch (this, &u.format)), 0))) return c->no_dispatch_return_value ();
    hb_no_trace_t<typename context_t::return_t> trace;
    switch (u.format) {
    case 1: return trace.ret (c->dispatch (u.format1, std::forward<Ts> (ds)...), __PRETTY_FUNCTION__, 28);



    default:return trace.ret (c->default_return_value (), __PRETTY_FUNCTION__, 32);
    }
  }
};

}
}
}
# 8 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/PosLookupSubTable.hh" 2
# 1 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/MarkLigPos.hh" 1

#define OT_LAYOUT_GPOS_MARKLIGPOS_HH 

# 1 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/MarkLigPosFormat1.hh" 1

#define OT_LAYOUT_GPOS_MARKLIGPOSFORMAT1_HH 

# 1 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/LigatureArray.hh" 1

#define OT_LAYOUT_GPOS_LIGATUREARRAY_HH 

namespace OT {
namespace Layout {
namespace GPOS_impl {


typedef AnchorMatrix LigatureAttach;





struct LigatureArray : List16OfOffset16To<LigatureAttach>
{
  template <typename Iterator,
            typename hb_enable_if<((hb_is_iterator_of<Iterator, typename Iterator::item_t>::value))>::type* = nullptr>
  bool subset (hb_subset_context_t *c,
               Iterator coverage,
               unsigned class_count,
               const hb_map_t *klass_mapping) const
  {
    hb_no_trace_t<bool> trace;
    const hb_set_t &glyphset = *c->plan->glyphset_gsub ();

    auto *out = c->serializer->start_embed (this);
    if ((__builtin_expect (!!(!c->serializer->extend_min (out)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 28);

    for (const auto _ : + hb_zip (coverage, *this)
                  | hb_filter (glyphset, hb_first))
    {
      auto *matrix = out->serialize_append (c->serializer);
      if ((__builtin_expect (!!(!matrix), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 34);

      const LigatureAttach& src = (this + _.second);
      auto indexes =
          + hb_range (src.rows * class_count)
          | hb_filter ([=] (unsigned index) { return klass_mapping->has (index % class_count); })
          ;
      matrix->serialize_subset (c,
                                _.second,
                                this,
                                src.rows,
                                indexes);
    }
    return trace.ret (this->len, __PRETTY_FUNCTION__, 47);
  }
};


}
}
}
# 5 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/MarkLigPosFormat1.hh" 2

namespace OT {
namespace Layout {
namespace GPOS_impl {


template <typename Types>
struct MarkLigPosFormat1_2
{
  protected:
  HBUINT16 format;
  typename Types::template OffsetTo<Coverage>
                markCoverage;

  typename Types::template OffsetTo<Coverage>
                ligatureCoverage;


  HBUINT16 classCount;
  typename Types::template OffsetTo<MarkArray>
                markArray;

  typename Types::template OffsetTo<LigatureArray>
                ligatureArray;

  public:
  void _instance_assertion_on_line_31 () const { static_assert ((sizeof (*this) == (4 + 4 * Types::size)), ""); } unsigned int get_size () const { return (4 + 4 * Types::size); } static constexpr unsigned null_size = (4 + 4 * Types::size); static constexpr unsigned min_size = (4 + 4 * Types::size); static constexpr unsigned static_size = (4 + 4 * Types::size);

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this) && markCoverage.sanitize (c, this) && ligatureCoverage.sanitize (c, this) && markArray.sanitize (c, this) && ligatureArray.sanitize (c, this, (unsigned int) classCount), __PRETTY_FUNCTION__, 36)



                                                                              ;
  }

  bool intersects (const hb_set_t *glyphs) const
  {
    return (this+markCoverage).intersects (glyphs) &&
           (this+ligatureCoverage).intersects (glyphs);
  }

  void closure_lookups (hb_closure_lookups_context_t *c) const {}

  void collect_variation_indices (hb_collect_variation_indices_context_t *c) const
  {
    + hb_zip (this+markCoverage, this+markArray)
    | hb_filter (c->glyph_set, hb_first)
    | hb_map (hb_second)
    | hb_apply ([&] (const MarkRecord& record) { record.collect_variation_indices (c, &(this+markArray)); })
    ;

    hb_map_t klass_mapping;
    Markclass_closure_and_remap_indexes (this+markCoverage, this+markArray, *c->glyph_set, &klass_mapping);

    unsigned ligcount = (this+ligatureArray).len;
    auto lig_iter =
    + hb_zip (this+ligatureCoverage, hb_range (ligcount))
    | hb_filter (c->glyph_set, hb_first)
    | hb_map (hb_second)
    ;

    const LigatureArray& lig_array = this+ligatureArray;
    for (const unsigned i : lig_iter)
    {
      hb_sorted_vector_t<unsigned> lig_indexes;
      unsigned row_count = lig_array[i].rows;
      for (unsigned row : + hb_range (row_count))
      {
        + hb_range ((unsigned) classCount)
        | hb_filter (klass_mapping)
        | hb_map ([&] (const unsigned col) { return row * (unsigned) classCount + col; })
        | hb_sink (lig_indexes)
        ;
      }

      lig_array[i].collect_variation_indices (c, lig_indexes.iter ());
    }
  }

  void collect_glyphs (hb_collect_glyphs_context_t *c) const
  {
    if ((__builtin_expect (!!(!(this+markCoverage).collect_coverage (c->input)), 0))) return;
    if ((__builtin_expect (!!(!(this+ligatureCoverage).collect_coverage (c->input)), 0))) return;
  }

  const Coverage &get_coverage () const { return this+markCoverage; }

  bool apply (hb_ot_apply_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    hb_buffer_t *buffer = c->buffer;
    unsigned int mark_index = (this+markCoverage).get_coverage (buffer->cur().codepoint);
    if ((__builtin_expect (!!(mark_index == ((unsigned int) -1)), 1))) return trace.ret (false, __PRETTY_FUNCTION__, 100);


    hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input;
    skippy_iter.reset (buffer->idx, 1);
    skippy_iter.set_lookup_props (LookupFlag::IgnoreMarks);
    unsigned unsafe_from;
    if (!skippy_iter.prev (&unsafe_from))
    {
      buffer->unsafe_to_concat_from_outbuffer (unsafe_from, buffer->idx + 1);
      return trace.ret (false, __PRETTY_FUNCTION__, 110);
    }




    unsigned int j = skippy_iter.idx;
    unsigned int lig_index = (this+ligatureCoverage).get_coverage (buffer->info[j].codepoint);
    if (lig_index == ((unsigned int) -1))
    {
      buffer->unsafe_to_concat_from_outbuffer (skippy_iter.idx, buffer->idx + 1);
      return trace.ret (false, __PRETTY_FUNCTION__, 121);
    }

    const LigatureArray& lig_array = this+ligatureArray;
    const LigatureAttach& lig_attach = lig_array[lig_index];


    unsigned int comp_count = lig_attach.rows;
    if ((__builtin_expect (!!(!comp_count), 0)))
    {
      buffer->unsafe_to_concat_from_outbuffer (skippy_iter.idx, buffer->idx + 1);
      return trace.ret (false, __PRETTY_FUNCTION__, 132);
    }





    unsigned int comp_index;
    unsigned int lig_id = _hb_glyph_info_get_lig_id (&buffer->info[j]);
    unsigned int mark_id = _hb_glyph_info_get_lig_id (&buffer->cur());
    unsigned int mark_comp = _hb_glyph_info_get_lig_comp (&buffer->cur());
    if (lig_id && lig_id == mark_id && mark_comp > 0)
      comp_index = hb_min (comp_count, _hb_glyph_info_get_lig_comp (&buffer->cur())) - 1;
    else
      comp_index = comp_count - 1;

    return trace.ret ((this+markArray).apply (c, mark_index, comp_index, lig_attach, classCount, j), __PRETTY_FUNCTION__, 148);
  }

  bool subset (hb_subset_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    const hb_set_t &glyphset = *c->plan->glyphset_gsub ();
    const hb_map_t &glyph_map = *c->plan->glyph_map;

    auto *out = c->serializer->start_embed (*this);
    if ((__builtin_expect (!!(!c->serializer->extend_min (out)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 158);
    out->format = format;

    hb_map_t klass_mapping;
    Markclass_closure_and_remap_indexes (this+markCoverage, this+markArray, glyphset, &klass_mapping);

    if (!klass_mapping.get_population ()) return trace.ret (false, __PRETTY_FUNCTION__, 164);
    out->classCount = klass_mapping.get_population ();

    auto mark_iter =
    + hb_zip (this+markCoverage, this+markArray)
    | hb_filter (glyphset, hb_first)
    ;

    auto new_mark_coverage =
    + mark_iter
    | hb_map_retains_sorting (hb_first)
    | hb_map_retains_sorting (glyph_map)
    ;

    if (!out->markCoverage.serialize_serialize (c->serializer, new_mark_coverage))
      return trace.ret (false, __PRETTY_FUNCTION__, 179);

    out->markArray.serialize_subset (c, markArray, this,
                                     (this+markCoverage).iter (),
                                     &klass_mapping);

    auto new_ligature_coverage =
    + hb_iter (this + ligatureCoverage)
    | hb_filter (glyphset)
    | hb_map_retains_sorting (glyph_map)
    ;

    if (!out->ligatureCoverage.serialize_serialize (c->serializer, new_ligature_coverage))
      return trace.ret (false, __PRETTY_FUNCTION__, 192);

    out->ligatureArray.serialize_subset (c, ligatureArray, this,
                                         hb_iter (this+ligatureCoverage), classCount, &klass_mapping);

    return trace.ret (true, __PRETTY_FUNCTION__, 197);
  }

};

}
}
}
# 5 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/MarkLigPos.hh" 2

namespace OT {
namespace Layout {
namespace GPOS_impl {

struct MarkLigPos
{
  protected:
  union {
  HBUINT16 format;
  MarkLigPosFormat1_2<SmallTypes> format1;



  } u;

  public:
  template <typename context_t, typename ...Ts>
  typename context_t::return_t dispatch (context_t *c, Ts&&... ds) const
  {
    if ((__builtin_expect (!!(!c->may_dispatch (this, &u.format)), 0))) return c->no_dispatch_return_value ();
    hb_no_trace_t<typename context_t::return_t> trace;
    switch (u.format) {
    case 1: return trace.ret (c->dispatch (u.format1, std::forward<Ts> (ds)...), __PRETTY_FUNCTION__, 28);



    default:return trace.ret (c->default_return_value (), __PRETTY_FUNCTION__, 32);
    }
  }
};

}
}
}
# 9 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/PosLookupSubTable.hh" 2
# 1 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/MarkMarkPos.hh" 1

#define OT_LAYOUT_GPOS_MARKMARKPOS_HH 

# 1 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/MarkMarkPosFormat1.hh" 1

#define OT_LAYOUT_GPOS_MARKMARKPOSFORMAT1_HH 

# 1 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/MarkMarkPosFormat1.hh" 1
# 5 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/MarkMarkPosFormat1.hh" 2

namespace OT {
namespace Layout {
namespace GPOS_impl {

typedef AnchorMatrix Mark2Array;




template <typename Types>
struct MarkMarkPosFormat1_2
{
  protected:
  HBUINT16 format;
  typename Types::template OffsetTo<Coverage>
                mark1Coverage;


  typename Types::template OffsetTo<Coverage>
                mark2Coverage;


  HBUINT16 classCount;
  typename Types::template OffsetTo<MarkArray>
                mark1Array;

  typename Types::template OffsetTo<Mark2Array>
                mark2Array;

  public:
  void _instance_assertion_on_line_36 () const { static_assert ((sizeof (*this) == (4 + 4 * Types::size)), ""); } unsigned int get_size () const { return (4 + 4 * Types::size); } static constexpr unsigned null_size = (4 + 4 * Types::size); static constexpr unsigned min_size = (4 + 4 * Types::size); static constexpr unsigned static_size = (4 + 4 * Types::size);

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this) && mark1Coverage.sanitize (c, this) && mark2Coverage.sanitize (c, this) && mark1Array.sanitize (c, this) && mark2Array.sanitize (c, this, (unsigned int) classCount), __PRETTY_FUNCTION__, 41)



                                                                           ;
  }

  bool intersects (const hb_set_t *glyphs) const
  {
    return (this+mark1Coverage).intersects (glyphs) &&
           (this+mark2Coverage).intersects (glyphs);
  }

  void closure_lookups (hb_closure_lookups_context_t *c) const {}

  void collect_variation_indices (hb_collect_variation_indices_context_t *c) const
  {
    + hb_zip (this+mark1Coverage, this+mark1Array)
    | hb_filter (c->glyph_set, hb_first)
    | hb_map (hb_second)
    | hb_apply ([&] (const MarkRecord& record) { record.collect_variation_indices (c, &(this+mark1Array)); })
    ;

    hb_map_t klass_mapping;
    Markclass_closure_and_remap_indexes (this+mark1Coverage, this+mark1Array, *c->glyph_set, &klass_mapping);

    unsigned mark2_count = (this+mark2Array).rows;
    auto mark2_iter =
    + hb_zip (this+mark2Coverage, hb_range (mark2_count))
    | hb_filter (c->glyph_set, hb_first)
    | hb_map (hb_second)
    ;

    hb_sorted_vector_t<unsigned> mark2_indexes;
    for (const unsigned row : mark2_iter)
    {
      + hb_range ((unsigned) classCount)
      | hb_filter (klass_mapping)
      | hb_map ([&] (const unsigned col) { return row * (unsigned) classCount + col; })
      | hb_sink (mark2_indexes)
      ;
    }
    (this+mark2Array).collect_variation_indices (c, mark2_indexes.iter ());
  }

  void collect_glyphs (hb_collect_glyphs_context_t *c) const
  {
    if ((__builtin_expect (!!(!(this+mark1Coverage).collect_coverage (c->input)), 0))) return;
    if ((__builtin_expect (!!(!(this+mark2Coverage).collect_coverage (c->input)), 0))) return;
  }

  const Coverage &get_coverage () const { return this+mark1Coverage; }

  bool apply (hb_ot_apply_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    hb_buffer_t *buffer = c->buffer;
    unsigned int mark1_index = (this+mark1Coverage).get_coverage (buffer->cur().codepoint);
    if ((__builtin_expect (!!(mark1_index == ((unsigned int) -1)), 1))) return trace.ret (false, __PRETTY_FUNCTION__, 99);


    hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input;
    skippy_iter.reset (buffer->idx, 1);
    skippy_iter.set_lookup_props (c->lookup_props & ~(uint32_t)LookupFlag::IgnoreFlags);
    unsigned unsafe_from;
    if (!skippy_iter.prev (&unsafe_from))
    {
      buffer->unsafe_to_concat_from_outbuffer (unsafe_from, buffer->idx + 1);
      return trace.ret (false, __PRETTY_FUNCTION__, 109);
    }

    if (!_hb_glyph_info_is_mark (&buffer->info[skippy_iter.idx]))
    {
      buffer->unsafe_to_concat_from_outbuffer (skippy_iter.idx, buffer->idx + 1);
      return trace.ret (false, __PRETTY_FUNCTION__, 115);
    }

    unsigned int j = skippy_iter.idx;

    unsigned int id1 = _hb_glyph_info_get_lig_id (&buffer->cur());
    unsigned int id2 = _hb_glyph_info_get_lig_id (&buffer->info[j]);
    unsigned int comp1 = _hb_glyph_info_get_lig_comp (&buffer->cur());
    unsigned int comp2 = _hb_glyph_info_get_lig_comp (&buffer->info[j]);

    if ((__builtin_expect (!!(id1 == id2), 1)))
    {
      if (id1 == 0)
        goto good;
      else if (comp1 == comp2)
        goto good;
    }
    else
    {


      if ((id1 > 0 && !comp1) || (id2 > 0 && !comp2))
        goto good;
    }


    buffer->unsafe_to_concat_from_outbuffer (skippy_iter.idx, buffer->idx + 1);
    return trace.ret (false, __PRETTY_FUNCTION__, 142);

    good:
    unsigned int mark2_index = (this+mark2Coverage).get_coverage (buffer->info[j].codepoint);
    if (mark2_index == ((unsigned int) -1))
    {
      buffer->unsafe_to_concat_from_outbuffer (skippy_iter.idx, buffer->idx + 1);
      return trace.ret (false, __PRETTY_FUNCTION__, 149);
    }

    return trace.ret ((this+mark1Array).apply (c, mark1_index, mark2_index, this+mark2Array, classCount, j), __PRETTY_FUNCTION__, 152);
  }

  bool subset (hb_subset_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    const hb_set_t &glyphset = *c->plan->glyphset_gsub ();
    const hb_map_t &glyph_map = *c->plan->glyph_map;

    auto *out = c->serializer->start_embed (*this);
    if ((__builtin_expect (!!(!c->serializer->extend_min (out)), 0))) return trace.ret (false, __PRETTY_FUNCTION__, 162);
    out->format = format;

    hb_map_t klass_mapping;
    Markclass_closure_and_remap_indexes (this+mark1Coverage, this+mark1Array, glyphset, &klass_mapping);

    if (!klass_mapping.get_population ()) return trace.ret (false, __PRETTY_FUNCTION__, 168);
    out->classCount = klass_mapping.get_population ();

    auto mark1_iter =
    + hb_zip (this+mark1Coverage, this+mark1Array)
    | hb_filter (glyphset, hb_first)
    ;

    hb_sorted_vector_t<hb_codepoint_t> new_coverage;
    + mark1_iter
    | hb_map (hb_first)
    | hb_map (glyph_map)
    | hb_sink (new_coverage)
    ;

    if (!out->mark1Coverage.serialize_serialize (c->serializer, new_coverage.iter ()))
      return trace.ret (false, __PRETTY_FUNCTION__, 184);

    out->mark1Array.serialize_subset (c, mark1Array, this,
                                      (this+mark1Coverage).iter (),
                                      &klass_mapping);

    unsigned mark2count = (this+mark2Array).rows;
    auto mark2_iter =
    + hb_zip (this+mark2Coverage, hb_range (mark2count))
    | hb_filter (glyphset, hb_first)
    ;

    new_coverage.reset ();
    + mark2_iter
    | hb_map (hb_first)
    | hb_map (glyph_map)
    | hb_sink (new_coverage)
    ;

    if (!out->mark2Coverage.serialize_serialize (c->serializer, new_coverage.iter ()))
      return trace.ret (false, __PRETTY_FUNCTION__, 204);

    hb_sorted_vector_t<unsigned> mark2_indexes;
    for (const unsigned row : + mark2_iter
                              | hb_map (hb_second))
    {
      + hb_range ((unsigned) classCount)
      | hb_filter (klass_mapping)
      | hb_map ([&] (const unsigned col) { return row * (unsigned) classCount + col; })
      | hb_sink (mark2_indexes)
      ;
    }

    out->mark2Array.serialize_subset (c, mark2Array, this, mark2_iter.len (), mark2_indexes.iter ());

    return trace.ret (true, __PRETTY_FUNCTION__, 219);
  }
};


}
}
}
# 5 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/MarkMarkPos.hh" 2

namespace OT {
namespace Layout {
namespace GPOS_impl {

struct MarkMarkPos
{
  protected:
  union {
  HBUINT16 format;
  MarkMarkPosFormat1_2<SmallTypes> format1;



  } u;

  public:
  template <typename context_t, typename ...Ts>
  typename context_t::return_t dispatch (context_t *c, Ts&&... ds) const
  {
    if ((__builtin_expect (!!(!c->may_dispatch (this, &u.format)), 0))) return c->no_dispatch_return_value ();
    hb_no_trace_t<typename context_t::return_t> trace;
    switch (u.format) {
    case 1: return trace.ret (c->dispatch (u.format1, std::forward<Ts> (ds)...), __PRETTY_FUNCTION__, 28);



    default:return trace.ret (c->default_return_value (), __PRETTY_FUNCTION__, 32);
    }
  }
};


}
}
}
# 10 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/PosLookupSubTable.hh" 2
# 1 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/ContextPos.hh" 1

#define OT_LAYOUT_GPOS_CONTEXTPOS_HH 

namespace OT {
namespace Layout {
namespace GPOS_impl {

struct ContextPos : Context {};

}
}
}
# 11 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/PosLookupSubTable.hh" 2
# 1 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/ChainContextPos.hh" 1

#define OT_LAYOUT_GPOS_CHAINCONTEXTPOS_HH 

namespace OT {
namespace Layout {
namespace GPOS_impl {

struct ChainContextPos : ChainContext {};

}
}
}
# 12 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/PosLookupSubTable.hh" 2
# 1 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/ExtensionPos.hh" 1

#define OT_LAYOUT_GPOS_EXTENSIONPOS_HH 

namespace OT {
namespace Layout {
namespace GPOS_impl {

struct ExtensionPos : Extension<ExtensionPos>
{
  typedef struct PosLookupSubTable SubTable;
};

}
}
}
# 13 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/PosLookupSubTable.hh" 2

namespace OT {
namespace Layout {
namespace GPOS_impl {

struct PosLookupSubTable
{
  friend struct ::OT::Lookup;
  friend struct PosLookup;

  enum Type {
    Single = 1,
    Pair = 2,
    Cursive = 3,
    MarkBase = 4,
    MarkLig = 5,
    MarkMark = 6,
    Context = 7,
    ChainContext = 8,
    Extension = 9
  };

  template <typename context_t, typename ...Ts>
  typename context_t::return_t dispatch (context_t *c, unsigned int lookup_type, Ts&&... ds) const
  {
    hb_no_trace_t<typename context_t::return_t> trace;
    switch (lookup_type) {
    case Single: return trace.ret (u.single.dispatch (c, std::forward<Ts> (ds)...), __PRETTY_FUNCTION__, 40);
    case Pair: return trace.ret (u.pair.dispatch (c, std::forward<Ts> (ds)...), __PRETTY_FUNCTION__, 41);
    case Cursive: return trace.ret (u.cursive.dispatch (c, std::forward<Ts> (ds)...), __PRETTY_FUNCTION__, 42);
    case MarkBase: return trace.ret (u.markBase.dispatch (c, std::forward<Ts> (ds)...), __PRETTY_FUNCTION__, 43);
    case MarkLig: return trace.ret (u.markLig.dispatch (c, std::forward<Ts> (ds)...), __PRETTY_FUNCTION__, 44);
    case MarkMark: return trace.ret (u.markMark.dispatch (c, std::forward<Ts> (ds)...), __PRETTY_FUNCTION__, 45);
    case Context: return trace.ret (u.context.dispatch (c, std::forward<Ts> (ds)...), __PRETTY_FUNCTION__, 46);
    case ChainContext: return trace.ret (u.chainContext.dispatch (c, std::forward<Ts> (ds)...), __PRETTY_FUNCTION__, 47);
    case Extension: return trace.ret (u.extension.dispatch (c, std::forward<Ts> (ds)...), __PRETTY_FUNCTION__, 48);
    default: return trace.ret (c->default_return_value (), __PRETTY_FUNCTION__, 49);
    }
  }

  bool intersects (const hb_set_t *glyphs, unsigned int lookup_type) const
  {
    hb_intersects_context_t c (glyphs);
    return dispatch (&c, lookup_type);
  }

  protected:
  union {
  SinglePos single;
  PairPos pair;
  CursivePos cursive;
  MarkBasePos markBase;
  MarkLigPos markLig;
  MarkMarkPos markMark;
  ContextPos context;
  ChainContextPos chainContext;
  ExtensionPos extension;
  } u;
  public:
  void _instance_assertion_on_line_72 () const { static_assert ((sizeof (*this) >= (0)), ""); } static constexpr unsigned null_size = (0); static constexpr unsigned min_size = (0);
};

}
}
}
# 5 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/PosLookup.hh" 2


namespace OT {
namespace Layout {
namespace GPOS_impl {

struct PosLookup : Lookup
{
  using SubTable = PosLookupSubTable;

  const SubTable& get_subtable (unsigned int i) const
  { return Lookup::get_subtable<SubTable> (i); }

  bool is_reverse () const
  {
    return false;
  }

  bool apply (hb_ot_apply_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (dispatch (c), __PRETTY_FUNCTION__, 26);
  }

  bool intersects (const hb_set_t *glyphs) const
  {
    hb_intersects_context_t c (glyphs);
    return dispatch (&c);
  }

  hb_collect_glyphs_context_t::return_t collect_glyphs (hb_collect_glyphs_context_t *c) const
  { return dispatch (c); }

  hb_closure_lookups_context_t::return_t closure_lookups (hb_closure_lookups_context_t *c, unsigned this_index) const
  {
    if (c->is_lookup_visited (this_index))
      return hb_closure_lookups_context_t::default_return_value ();

    c->set_lookup_visited (this_index);
    if (!intersects (c->glyphs))
    {
      c->set_lookup_inactive (this_index);
      return hb_closure_lookups_context_t::default_return_value ();
    }

    hb_closure_lookups_context_t::return_t ret = dispatch (c);
    return ret;
  }

  template <typename set_t>
  void collect_coverage (set_t *glyphs) const
  {
    hb_collect_coverage_context_t<set_t> c (glyphs);
    dispatch (&c);
  }

  template <typename context_t>
  static typename context_t::return_t dispatch_recurse_func (context_t *c, unsigned int lookup_index);

  template <typename context_t, typename ...Ts>
  typename context_t::return_t dispatch (context_t *c, Ts&&... ds) const
  { return Lookup::dispatch<SubTable> (c, std::forward<Ts> (ds)...); }

  bool subset (hb_subset_context_t *c) const
  { return Lookup::subset<SubTable> (c); }

  bool sanitize (hb_sanitize_context_t *c) const
  { return Lookup::sanitize<SubTable> (c); }
};

}
}
}
# 8 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/GPOS.hh" 2

namespace OT {

using Layout::GPOS_impl::PosLookup;

namespace Layout {

static void
propagate_attachment_offsets (hb_glyph_position_t *pos,
                              unsigned int len,
                              unsigned int i,
                              hb_direction_t direction,
                              unsigned nesting_level = 64);






struct GPOS : GSUBGPOS
{
  static constexpr hb_tag_t tableTag = ((hb_tag_t)((((uint32_t)('G')&0xFF)<<24)|(((uint32_t)('P')&0xFF)<<16)|(((uint32_t)('O')&0xFF)<<8)|((uint32_t)('S')&0xFF)));

  using Lookup = PosLookup;

  const PosLookup& get_lookup (unsigned int i) const
  { return static_cast<const PosLookup &> (GSUBGPOS::get_lookup (i)); }

  static inline void position_start (hb_font_t *font, hb_buffer_t *buffer);
  static inline void position_finish_advances (hb_font_t *font, hb_buffer_t *buffer);
  static inline void position_finish_offsets (hb_font_t *font, hb_buffer_t *buffer);

  bool subset (hb_subset_context_t *c) const
  {
    hb_subset_layout_context_t l (c, tableTag);
    return GSUBGPOS::subset<PosLookup> (&l);
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (GSUBGPOS::sanitize<PosLookup> (c), __PRETTY_FUNCTION__, 49);
  }

  __attribute__((__visibility__("hidden"))) bool is_blocklisted (hb_blob_t *blob,
                                   hb_face_t *face) const;

  void collect_variation_indices (hb_collect_variation_indices_context_t *c) const
  {
    for (unsigned i = 0; i < GSUBGPOS::get_lookup_count (); i++)
    {
      if (!c->gpos_lookups->has (i)) continue;
      const PosLookup &l = get_lookup (i);
      l.dispatch (c);
    }
  }

  void closure_lookups (hb_face_t *face,
                        const hb_set_t *glyphs,
                        hb_set_t *lookup_indexes ) const
  { GSUBGPOS::closure_lookups<PosLookup> (face, glyphs, lookup_indexes); }

  typedef GSUBGPOS::accelerator_t<GPOS> accelerator_t;
};


static void
propagate_attachment_offsets (hb_glyph_position_t *pos,
                              unsigned int len,
                              unsigned int i,
                              hb_direction_t direction,
                              unsigned nesting_level)
{


  int chain = pos[i].var.i16[0], type = pos[i].var.u8[2];
  if ((__builtin_expect (!!(!chain), 1)))
    return;

  pos[i].var.i16[0] = 0;

  unsigned int j = (int) i + chain;

  if ((__builtin_expect (!!(j >= len), 0)))
    return;

  if ((__builtin_expect (!!(!nesting_level), 0)))
    return;

  propagate_attachment_offsets (pos, len, j, direction, nesting_level - 1);

  
# 99 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/GPOS.hh" 3 4
 (static_cast <bool> (
# 99 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/GPOS.hh"
 !!(type & GPOS_impl::ATTACH_TYPE_MARK) ^ !!(type & GPOS_impl::ATTACH_TYPE_CURSIVE)
# 99 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/GPOS.hh" 3 4
 ) ? void (0) : __assert_fail (
# 99 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/GPOS.hh"
 "!!(type & GPOS_impl::ATTACH_TYPE_MARK) ^ !!(type & GPOS_impl::ATTACH_TYPE_CURSIVE)"
# 99 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/GPOS.hh" 3 4
 , "/usr/src/debug/harfbuzz/6.0.0-r0/src/OT/Layout/GPOS/GPOS.hh", 99, __extension__ __PRETTY_FUNCTION__))
# 99 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/GPOS.hh"
                                                                                            ;

  if (type & GPOS_impl::ATTACH_TYPE_CURSIVE)
  {
    if (((((unsigned int) (direction)) & ~1U) == 4))
      pos[i].y_offset += pos[j].y_offset;
    else
      pos[i].x_offset += pos[j].x_offset;
  }
  else
  {
    pos[i].x_offset += pos[j].x_offset;
    pos[i].y_offset += pos[j].y_offset;

    
# 113 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/GPOS.hh" 3 4
   (static_cast <bool> (
# 113 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/GPOS.hh"
   j < i
# 113 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/GPOS.hh" 3 4
   ) ? void (0) : __assert_fail (
# 113 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/GPOS.hh"
   "j < i"
# 113 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/GPOS.hh" 3 4
   , "/usr/src/debug/harfbuzz/6.0.0-r0/src/OT/Layout/GPOS/GPOS.hh", 113, __extension__ __PRETTY_FUNCTION__))
# 113 "../harfbuzz-6.0.0/src/OT/Layout/GPOS/GPOS.hh"
                 ;
    if (((((unsigned int) (direction)) & ~2U) == 4))
      for (unsigned int k = j; k < i; k++) {
        pos[i].x_offset -= pos[k].x_advance;
        pos[i].y_offset -= pos[k].y_advance;
      }
    else
      for (unsigned int k = j + 1; k < i + 1; k++) {
        pos[i].x_offset += pos[k].x_advance;
        pos[i].y_offset += pos[k].y_advance;
      }
  }
}

void
GPOS::position_start (hb_font_t *font __attribute__((unused)), hb_buffer_t *buffer)
{
  unsigned int count = buffer->len;
  for (unsigned int i = 0; i < count; i++)
    buffer->pos[i].var.i16[0] = buffer->pos[i].var.u8[2] = 0;
}

void
GPOS::position_finish_advances (hb_font_t *font __attribute__((unused)), hb_buffer_t *buffer __attribute__((unused)))
{

}

void
GPOS::position_finish_offsets (hb_font_t *font, hb_buffer_t *buffer)
{
  _hb_buffer_assert_gsubgpos_vars (buffer);

  unsigned int len;
  hb_glyph_position_t *pos = hb_buffer_get_glyph_positions (buffer, &len);
  hb_direction_t direction = buffer->props.direction;


  if (buffer->scratch_flags & HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT)
    for (unsigned i = 0; i < len; i++)
      propagate_attachment_offsets (pos, len, i, direction);

  if ((__builtin_expect (!!(font->slant), 0)))
  {
    for (unsigned i = 0; i < len; i++)
      if ((__builtin_expect (!!(pos[i].y_offset), 0)))
        pos[i].x_offset += _hb_roundf (font->slant_xy * pos[i].y_offset);
  }
}

}

struct GPOS_accelerator_t : Layout::GPOS::accelerator_t {
  GPOS_accelerator_t (hb_face_t *face) : Layout::GPOS::accelerator_t (face) {}
};

}
# 33 "../harfbuzz-6.0.0/src/hb-ot-layout-gpos-table.hh" 2

namespace OT {
namespace Layout {
namespace GPOS_impl {




template <typename context_t>
           typename context_t::return_t PosLookup::dispatch_recurse_func (context_t *c, unsigned int lookup_index)
{
  const PosLookup &l = c->face->table.GPOS.get_relaxed ()->table->get_lookup (lookup_index);
  return l.dispatch (c);
}

template <>
inline hb_closure_lookups_context_t::return_t
PosLookup::dispatch_recurse_func<hb_closure_lookups_context_t> (hb_closure_lookups_context_t *c, unsigned this_index)
{
  const PosLookup &l = c->face->table.GPOS.get_relaxed ()->table->get_lookup (this_index);
  return l.closure_lookups (c, this_index);
}

template <>
inline bool PosLookup::dispatch_recurse_func<hb_ot_apply_context_t> (hb_ot_apply_context_t *c, unsigned int lookup_index)
{
  auto *gpos = c->face->table.GPOS.get_relaxed ();
  const PosLookup &l = gpos->table->get_lookup (lookup_index);
  unsigned int saved_lookup_props = c->lookup_props;
  unsigned int saved_lookup_index = c->lookup_index;
  c->set_lookup_index (lookup_index);
  c->set_lookup_props (l.get_props ());

  bool ret = false;
  auto *accel = gpos->get_accel (lookup_index);
  ret = accel && accel->apply (c, l.get_subtable_count (), false);

  c->set_lookup_index (saved_lookup_index);
  c->set_lookup_props (saved_lookup_props);
  return ret;
}


}
}
}
# 33 "../harfbuzz-6.0.0/src/hb-kern.hh" 2


namespace OT {


template <typename Driver>
struct hb_kern_machine_t
{
  hb_kern_machine_t (const Driver &driver_,
       bool crossStream_ = false) :
         driver (driver_),
         crossStream (crossStream_) {}

 
  void kern (hb_font_t *font,
      hb_buffer_t *buffer,
      hb_mask_t kern_mask,
      bool scale = true) const
  {
    if (!buffer->message (font, "start kern"))
      return;

    buffer->unsafe_to_concat ();
    OT::hb_ot_apply_context_t c (1, font, buffer);
    c.set_lookup_mask (kern_mask);
    c.set_lookup_props (OT::LookupFlag::IgnoreMarks);
    auto &skippy_iter = c.iter_input;

    bool horizontal = ((((unsigned int) (buffer->props.direction)) & ~1U) == 4);
    unsigned int count = buffer->len;
    hb_glyph_info_t *info = buffer->info;
    hb_glyph_position_t *pos = buffer->pos;
    for (unsigned int idx = 0; idx < count;)
    {
      if (!(info[idx].mask & kern_mask))
      {
 idx++;
 continue;
      }

      skippy_iter.reset (idx, 1);
      unsigned unsafe_to;
      if (!skippy_iter.next (&unsafe_to))
      {
 idx++;
 continue;
      }

      unsigned int i = idx;
      unsigned int j = skippy_iter.idx;

      hb_position_t kern = driver.get_kerning (info[i].codepoint,
            info[j].codepoint);


      if ((__builtin_expect (!!(!kern), 1)))
 goto skip;

      if (horizontal)
      {
 if (scale)
   kern = font->em_scale_x (kern);
 if (crossStream)
 {
   pos[j].y_offset = kern;
   buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT;
 }
 else
 {
   hb_position_t kern1 = kern >> 1;
   hb_position_t kern2 = kern - kern1;
   pos[i].x_advance += kern1;
   pos[j].x_advance += kern2;
   pos[j].x_offset += kern2;
 }
      }
      else
      {
 if (scale)
   kern = font->em_scale_y (kern);
 if (crossStream)
 {
   pos[j].x_offset = kern;
   buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT;
 }
 else
 {
   hb_position_t kern1 = kern >> 1;
   hb_position_t kern2 = kern - kern1;
   pos[i].y_advance += kern1;
   pos[j].y_advance += kern2;
   pos[j].y_offset += kern2;
 }
      }

      buffer->unsafe_to_break (i, j + 1);

    skip:
      idx = skippy_iter.idx;
    }

    (void) buffer->message (font, "end kern");
  }

  const Driver &driver;
  bool crossStream;
};


}
# 32 "../harfbuzz-6.0.0/src/hb-aat-layout-kerx-table.hh" 2






#define HB_AAT_TAG_kerx HB_TAG('k','e','r','x')


namespace AAT {

using namespace OT;


static inline int
kerxTupleKern (int value,
        unsigned int tupleCount,
        const void *base,
        hb_aat_apply_context_t *c)
{
  if ((__builtin_expect (!!(!tupleCount || !c), 1))) return value;

  unsigned int offset = value;
  const FWORD *pv = &StructAtOffset<FWORD> (base, offset);
  if ((__builtin_expect (!!(!c->sanitizer.check_array (pv, tupleCount)), 0))) return 0;
  return *pv;
}


struct hb_glyph_pair_t
{
  hb_codepoint_t left;
  hb_codepoint_t right;
};

struct KernPair
{
  int get_kerning () const { return value; }

  int cmp (const hb_glyph_pair_t &o) const
  {
    int ret = left.cmp (o.left);
    if (ret) return ret;
    return right.cmp (o.right);
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this), __PRETTY_FUNCTION__, 81);
  }

  protected:
  HBGlyphID16 left;
  HBGlyphID16 right;
  FWORD value;
  public:
  void _instance_assertion_on_line_89 () const { static_assert ((sizeof (*this) == (6)), ""); } unsigned int get_size () const { return (6); } static constexpr unsigned null_size = (6); static constexpr unsigned min_size = (6); static constexpr unsigned static_size = (6);
};

template <typename KernSubTableHeader>
struct KerxSubTableFormat0
{
  int get_kerning (hb_codepoint_t left, hb_codepoint_t right,
     hb_aat_apply_context_t *c = nullptr) const
  {
    hb_glyph_pair_t pair = {left, right};
    int v = pairs.bsearch (pair).get_kerning ();
    return kerxTupleKern (v, header.tuple_count (), this, c);
  }

  bool apply (hb_aat_apply_context_t *c) const
  {
    hb_no_trace_t<bool> trace;

    if (!c->plan->requested_kerning)
      return false;

    if (header.coverage & header.Backwards)
      return false;

    accelerator_t accel (*this, c);
    hb_kern_machine_t<accelerator_t> machine (accel, header.coverage & header.CrossStream);
    machine.kern (c->font, c->buffer, c->plan->kern_mask);

    return trace.ret (true, __PRETTY_FUNCTION__, 117);
  }

  struct accelerator_t
  {
    const KerxSubTableFormat0 &table;
    hb_aat_apply_context_t *c;

    accelerator_t (const KerxSubTableFormat0 &table_,
     hb_aat_apply_context_t *c_) :
       table (table_), c (c_) {}

    int get_kerning (hb_codepoint_t left, hb_codepoint_t right) const
    { return table.get_kerning (left, right, c); }
  };


  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret ((__builtin_expect (!!(pairs.sanitize (c)), 1)), __PRETTY_FUNCTION__, 137);
  }

  protected:
  KernSubTableHeader header;
  BinSearchArrayOf<KernPair, typename KernSubTableHeader::Types::HBUINT>
   pairs;
  public:
  void _compiles_assertion_on_line_145 () const { (void) (pairs)[0].static_size; } void _instance_assertion_on_line_145 () const { static_assert ((sizeof (*this) == (KernSubTableHeader::static_size + 16) + (1 +0) * sizeof ((pairs)[0])), ""); } static constexpr unsigned null_size = (KernSubTableHeader::static_size + 16); static constexpr unsigned min_size = (KernSubTableHeader::static_size + 16);
};


template <bool extended>
struct Format1Entry;

template <>
struct Format1Entry<true>
{
  enum Flags
  {
    Push = 0x8000,
    DontAdvance = 0x4000,

    Reset = 0x2000,
    Reserved = 0x1FFF,
  };

  struct EntryData
  {
    HBUINT16 kernActionIndex;


    public:
    void _instance_assertion_on_line_170 () const { static_assert ((sizeof (*this) == (2)), ""); } unsigned int get_size () const { return (2); } static constexpr unsigned null_size = (2); static constexpr unsigned min_size = (2); static constexpr unsigned static_size = (2);
  };

  static bool performAction (const Entry<EntryData> &entry)
  { return entry.data.kernActionIndex != 0xFFFF; }

  static unsigned int kernActionIndex (const Entry<EntryData> &entry)
  { return entry.data.kernActionIndex; }
};
template <>
struct Format1Entry<false>
{
  enum Flags
  {
    Push = 0x8000,
    DontAdvance = 0x4000,

    Offset = 0x3FFF,


    Reset = 0x0000,
  };

  typedef void EntryData;

  static bool performAction (const Entry<EntryData> &entry)
  { return entry.flags & Offset; }

  static unsigned int kernActionIndex (const Entry<EntryData> &entry)
  { return entry.flags & Offset; }
};

template <typename KernSubTableHeader>
struct KerxSubTableFormat1
{
  typedef typename KernSubTableHeader::Types Types;
  typedef typename Types::HBUINT HBUINT;

  typedef Format1Entry<Types::extended> Format1EntryT;
  typedef typename Format1EntryT::EntryData EntryData;

  struct driver_context_t
  {
    static constexpr bool in_place = true;
    enum
    {
      DontAdvance = Format1EntryT::DontAdvance,
    };

    driver_context_t (const KerxSubTableFormat1 *table_,
        hb_aat_apply_context_t *c_) :
 c (c_),
 table (table_),



 kernAction (&table->machine + table->kernAction),
 depth (0),
 crossStream (table->header.coverage & table->header.CrossStream) {}

    bool is_actionable (StateTableDriver<Types, EntryData> *driver __attribute__((unused)),
   const Entry<EntryData> &entry)
    { return Format1EntryT::performAction (entry); }
    void transition (StateTableDriver<Types, EntryData> *driver,
       const Entry<EntryData> &entry)
    {
      hb_buffer_t *buffer = driver->buffer;
      unsigned int flags = entry.flags;

      if (flags & Format1EntryT::Reset)
 depth = 0;

      if (flags & Format1EntryT::Push)
      {
 if ((__builtin_expect (!!(depth < ARRAY_LENGTH (stack)), 1)))
   stack[depth++] = buffer->idx;
 else
   depth = 0;
      }

      if (Format1EntryT::performAction (entry) && depth)
      {
 unsigned int tuple_count = hb_max (1u, table->header.tuple_count ());

 unsigned int kern_idx = Format1EntryT::kernActionIndex (entry);
 kern_idx = Types::byteOffsetToIndex (kern_idx, &table->machine, kernAction.arrayZ);
 const FWORD *actions = &kernAction[kern_idx];
 if (!c->sanitizer.check_array (actions, depth, tuple_count))
 {
   depth = 0;
   return;
 }

 hb_mask_t kern_mask = c->plan->kern_mask;




 bool last = false;
 while (!last && depth)
 {
   unsigned int idx = stack[--depth];
   int v = *actions;
   actions += tuple_count;
   if (idx >= buffer->len) continue;


   last = v & 1;
   v &= ~1;

   hb_glyph_position_t &o = buffer->pos[idx];

   if (((((unsigned int) (buffer->props.direction)) & ~1U) == 4))
   {
     if (crossStream)
     {


       if (v == -0x8000)
       {
  o.var.u8[2] = OT::Layout::GPOS_impl::ATTACH_TYPE_NONE;
  o.var.i16[0] = 0;
  o.y_offset = 0;
       }
       else if (o.var.u8[2])
       {
  o.y_offset += c->font->em_scale_y (v);
  buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT;
       }
     }
     else if (buffer->info[idx].mask & kern_mask)
     {
       o.x_advance += c->font->em_scale_x (v);
       o.x_offset += c->font->em_scale_x (v);
     }
   }
   else
   {
     if (crossStream)
     {

       if (v == -0x8000)
       {
  o.var.u8[2] = OT::Layout::GPOS_impl::ATTACH_TYPE_NONE;
  o.var.i16[0] = 0;
  o.x_offset = 0;
       }
       else if (o.var.u8[2])
       {
  o.x_offset += c->font->em_scale_x (v);
  buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT;
       }
     }
     else if (buffer->info[idx].mask & kern_mask)
     {
       o.y_advance += c->font->em_scale_y (v);
       o.y_offset += c->font->em_scale_y (v);
     }
   }
 }
      }
    }

    private:
    hb_aat_apply_context_t *c;
    const KerxSubTableFormat1 *table;
    const UnsizedArrayOf<FWORD> &kernAction;
    unsigned int stack[8];
    unsigned int depth;
    bool crossStream;
  };

  bool apply (hb_aat_apply_context_t *c) const
  {
    hb_no_trace_t<bool> trace;

    if (!c->plan->requested_kerning &&
 !(header.coverage & header.CrossStream))
      return false;

    driver_context_t dc (this, c);

    StateTableDriver<Types, EntryData> driver (machine, c->buffer, c->font->face);
    driver.drive (&dc, c);

    return trace.ret (true, __PRETTY_FUNCTION__, 355);
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;

    return trace.ret ((__builtin_expect (!!(c->check_struct (this) && machine.sanitize (c)), 1)), __PRETTY_FUNCTION__, 362)
                           ;
  }

  protected:
  KernSubTableHeader header;
  StateTable<Types, EntryData> machine;
  NNOffsetTo<UnsizedArrayOf<FWORD>, HBUINT> kernAction;
  public:
  void _instance_assertion_on_line_371 () const { static_assert ((sizeof (*this) == (KernSubTableHeader::static_size + 5 * sizeof (HBUINT))), ""); } unsigned int get_size () const { return (KernSubTableHeader::static_size + 5 * sizeof (HBUINT)); } static constexpr unsigned null_size = (KernSubTableHeader::static_size + 5 * sizeof (HBUINT)); static constexpr unsigned min_size = (KernSubTableHeader::static_size + 5 * sizeof (HBUINT)); static constexpr unsigned static_size = (KernSubTableHeader::static_size + 5 * sizeof (HBUINT));
};

template <typename KernSubTableHeader>
struct KerxSubTableFormat2
{
  typedef typename KernSubTableHeader::Types Types;
  typedef typename Types::HBUINT HBUINT;

  int get_kerning (hb_codepoint_t left, hb_codepoint_t right,
     hb_aat_apply_context_t *c) const
  {
    unsigned int num_glyphs = c->sanitizer.get_num_glyphs ();
    unsigned int l = (this+leftClassTable).get_class (left, num_glyphs, 0);
    unsigned int r = (this+rightClassTable).get_class (right, num_glyphs, 0);

    const UnsizedArrayOf<FWORD> &arrayZ = this+array;
    unsigned int kern_idx = l + r;
    kern_idx = Types::offsetToIndex (kern_idx, this, arrayZ.arrayZ);
    const FWORD *v = &arrayZ[kern_idx];
    if ((__builtin_expect (!!(!v->sanitize (&c->sanitizer)), 0))) return 0;

    return kerxTupleKern (*v, header.tuple_count (), this, c);
  }

  bool apply (hb_aat_apply_context_t *c) const
  {
    hb_no_trace_t<bool> trace;

    if (!c->plan->requested_kerning)
      return false;

    if (header.coverage & header.Backwards)
      return false;

    accelerator_t accel (*this, c);
    hb_kern_machine_t<accelerator_t> machine (accel, header.coverage & header.CrossStream);
    machine.kern (c->font, c->buffer, c->plan->kern_mask);

    return trace.ret (true, __PRETTY_FUNCTION__, 410);
  }

  struct accelerator_t
  {
    const KerxSubTableFormat2 &table;
    hb_aat_apply_context_t *c;

    accelerator_t (const KerxSubTableFormat2 &table_,
     hb_aat_apply_context_t *c_) :
       table (table_), c (c_) {}

    int get_kerning (hb_codepoint_t left, hb_codepoint_t right) const
    { return table.get_kerning (left, right, c); }
  };

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret ((__builtin_expect (!!(c->check_struct (this) && leftClassTable.sanitize (c, this) && rightClassTable.sanitize (c, this) && c->check_range (this, array)), 1)), __PRETTY_FUNCTION__, 429)


                                   ;
  }

  protected:
  KernSubTableHeader header;
  HBUINT rowWidth;
  NNOffsetTo<typename Types::ClassTypeWide, HBUINT>
   leftClassTable;

  NNOffsetTo<typename Types::ClassTypeWide, HBUINT>
   rightClassTable;

  NNOffsetTo<UnsizedArrayOf<FWORD>, HBUINT>
    array;

  public:
  void _instance_assertion_on_line_448 () const { static_assert ((sizeof (*this) == (KernSubTableHeader::static_size + 4 * sizeof (HBUINT))), ""); } unsigned int get_size () const { return (KernSubTableHeader::static_size + 4 * sizeof (HBUINT)); } static constexpr unsigned null_size = (KernSubTableHeader::static_size + 4 * sizeof (HBUINT)); static constexpr unsigned min_size = (KernSubTableHeader::static_size + 4 * sizeof (HBUINT)); static constexpr unsigned static_size = (KernSubTableHeader::static_size + 4 * sizeof (HBUINT));
};

template <typename KernSubTableHeader>
struct KerxSubTableFormat4
{
  typedef ExtendedTypes Types;

  struct EntryData
  {
    HBUINT16 ankrActionIndex;

    public:
    void _instance_assertion_on_line_461 () const { static_assert ((sizeof (*this) == (2)), ""); } unsigned int get_size () const { return (2); } static constexpr unsigned null_size = (2); static constexpr unsigned min_size = (2); static constexpr unsigned static_size = (2);
  };

  struct driver_context_t
  {
    static constexpr bool in_place = true;
    enum Flags
    {
      Mark = 0x8000,
      DontAdvance = 0x4000,

      Reserved = 0x3FFF,
    };

    enum SubTableFlags
    {
      ActionType = 0xC0000000,
      Unused = 0x3F000000,
      Offset = 0x00FFFFFF,


    };

    driver_context_t (const KerxSubTableFormat4 *table,
        hb_aat_apply_context_t *c_) :
 c (c_),
 action_type ((table->flags & ActionType) >> 30),
 ankrData ((HBUINT16 *) ((const char *) &table->machine + (table->flags & Offset))),
 mark_set (false),
 mark (0) {}

    bool is_actionable (StateTableDriver<Types, EntryData> *driver __attribute__((unused)),
   const Entry<EntryData> &entry)
    { return entry.data.ankrActionIndex != 0xFFFF; }
    void transition (StateTableDriver<Types, EntryData> *driver,
       const Entry<EntryData> &entry)
    {
      hb_buffer_t *buffer = driver->buffer;

      if (mark_set && entry.data.ankrActionIndex != 0xFFFF && buffer->idx < buffer->len)
      {
 hb_glyph_position_t &o = buffer->cur_pos();
 switch (action_type)
 {
   case 0:
   {



     const HBUINT16 *data = &ankrData[entry.data.ankrActionIndex * 2];
     if (!c->sanitizer.check_array (data, 2)) return;
     unsigned int markControlPoint = *data++;
     unsigned int currControlPoint = *data++;
     hb_position_t markX = 0;
     hb_position_t markY = 0;
     hb_position_t currX = 0;
     hb_position_t currY = 0;
     if (!c->font->get_glyph_contour_point_for_origin (c->buffer->info[mark].codepoint,
             markControlPoint,
             HB_DIRECTION_LTR ,
             &markX, &markY) ||
  !c->font->get_glyph_contour_point_for_origin (c->buffer->cur ().codepoint,
             currControlPoint,
             HB_DIRECTION_LTR ,
             &currX, &currY))
       return;

     o.x_offset = markX - currX;
     o.y_offset = markY - currY;
   }
   break;

   case 1:
   {



     const HBUINT16 *data = &ankrData[entry.data.ankrActionIndex * 2];
     if (!c->sanitizer.check_array (data, 2)) return;
     unsigned int markAnchorPoint = *data++;
     unsigned int currAnchorPoint = *data++;
     const Anchor &markAnchor = c->ankr_table->get_anchor (c->buffer->info[mark].codepoint,
          markAnchorPoint,
          c->sanitizer.get_num_glyphs ());
     const Anchor &currAnchor = c->ankr_table->get_anchor (c->buffer->cur ().codepoint,
          currAnchorPoint,
          c->sanitizer.get_num_glyphs ());

     o.x_offset = c->font->em_scale_x (markAnchor.xCoordinate) - c->font->em_scale_x (currAnchor.xCoordinate);
     o.y_offset = c->font->em_scale_y (markAnchor.yCoordinate) - c->font->em_scale_y (currAnchor.yCoordinate);
   }
   break;

   case 2:
   {


     const FWORD *data = (const FWORD *) &ankrData[entry.data.ankrActionIndex * 4];
     if (!c->sanitizer.check_array (data, 4)) return;
     int markX = *data++;
     int markY = *data++;
     int currX = *data++;
     int currY = *data++;

     o.x_offset = c->font->em_scale_x (markX) - c->font->em_scale_x (currX);
     o.y_offset = c->font->em_scale_y (markY) - c->font->em_scale_y (currY);
   }
   break;
 }
 o.var.u8[2] = OT::Layout::GPOS_impl::ATTACH_TYPE_MARK;
 o.var.i16[0] = (int) mark - (int) buffer->idx;
 buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT;
      }

      if (entry.flags & Mark)
      {
 mark_set = true;
 mark = buffer->idx;
      }
    }

    private:
    hb_aat_apply_context_t *c;
    unsigned int action_type;
    const HBUINT16 *ankrData;
    bool mark_set;
    unsigned int mark;
  };

  bool apply (hb_aat_apply_context_t *c) const
  {
    hb_no_trace_t<bool> trace;

    driver_context_t dc (this, c);

    StateTableDriver<Types, EntryData> driver (machine, c->buffer, c->font->face);
    driver.drive (&dc, c);

    return trace.ret (true, __PRETTY_FUNCTION__, 599);
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;

    return trace.ret ((__builtin_expect (!!(c->check_struct (this) && machine.sanitize (c)), 1)), __PRETTY_FUNCTION__, 606)
                           ;
  }

  protected:
  KernSubTableHeader header;
  StateTable<Types, EntryData> machine;
  HBUINT32 flags;
  public:
  void _instance_assertion_on_line_615 () const { static_assert ((sizeof (*this) == (KernSubTableHeader::static_size + 20)), ""); } unsigned int get_size () const { return (KernSubTableHeader::static_size + 20); } static constexpr unsigned null_size = (KernSubTableHeader::static_size + 20); static constexpr unsigned min_size = (KernSubTableHeader::static_size + 20); static constexpr unsigned static_size = (KernSubTableHeader::static_size + 20);
};

template <typename KernSubTableHeader>
struct KerxSubTableFormat6
{
  enum Flags
  {
    ValuesAreLong = 0x00000001,
  };

  bool is_long () const { return flags & ValuesAreLong; }

  int get_kerning (hb_codepoint_t left, hb_codepoint_t right,
     hb_aat_apply_context_t *c) const
  {
    unsigned int num_glyphs = c->sanitizer.get_num_glyphs ();
    if (is_long ())
    {
      const typename U::Long &t = u.l;
      unsigned int l = (this+t.rowIndexTable).get_value_or_null (left, num_glyphs);
      unsigned int r = (this+t.columnIndexTable).get_value_or_null (right, num_glyphs);
      unsigned int offset = l + r;
      if ((__builtin_expect (!!(offset < l), 0))) return 0;
      if ((__builtin_expect (!!(hb_unsigned_mul_overflows (offset, sizeof (FWORD32))), 0))) return 0;
      const FWORD32 *v = &StructAtOffset<FWORD32> (&(this+t.array), offset * sizeof (FWORD32));
      if ((__builtin_expect (!!(!v->sanitize (&c->sanitizer)), 0))) return 0;
      return kerxTupleKern (*v, header.tuple_count (), &(this+vector), c);
    }
    else
    {
      const typename U::Short &t = u.s;
      unsigned int l = (this+t.rowIndexTable).get_value_or_null (left, num_glyphs);
      unsigned int r = (this+t.columnIndexTable).get_value_or_null (right, num_glyphs);
      unsigned int offset = l + r;
      const FWORD *v = &StructAtOffset<FWORD> (&(this+t.array), offset * sizeof (FWORD));
      if ((__builtin_expect (!!(!v->sanitize (&c->sanitizer)), 0))) return 0;
      return kerxTupleKern (*v, header.tuple_count (), &(this+vector), c);
    }
  }

  bool apply (hb_aat_apply_context_t *c) const
  {
    hb_no_trace_t<bool> trace;

    if (!c->plan->requested_kerning)
      return false;

    if (header.coverage & header.Backwards)
      return false;

    accelerator_t accel (*this, c);
    hb_kern_machine_t<accelerator_t> machine (accel, header.coverage & header.CrossStream);
    machine.kern (c->font, c->buffer, c->plan->kern_mask);

    return trace.ret (true, __PRETTY_FUNCTION__, 670);
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret ((__builtin_expect (!!(c->check_struct (this) && (is_long () ? ( u.l.rowIndexTable.sanitize (c, this) && u.l.columnIndexTable.sanitize (c, this) && c->check_range (this, u.l.array) ) : ( u.s.rowIndexTable.sanitize (c, this) && u.s.columnIndexTable.sanitize (c, this) && c->check_range (this, u.s.array) )) && (header.tuple_count () == 0 || c->check_range (this, vector))), 1)), __PRETTY_FUNCTION__, 676)
# 688 "../harfbuzz-6.0.0/src/hb-aat-layout-kerx-table.hh"
                                      ;
  }

  struct accelerator_t
  {
    const KerxSubTableFormat6 &table;
    hb_aat_apply_context_t *c;

    accelerator_t (const KerxSubTableFormat6 &table_,
     hb_aat_apply_context_t *c_) :
       table (table_), c (c_) {}

    int get_kerning (hb_codepoint_t left, hb_codepoint_t right) const
    { return table.get_kerning (left, right, c); }
  };

  protected:
  KernSubTableHeader header;
  HBUINT32 flags;
  HBUINT16 rowCount;
  HBUINT16 columnCount;
  union U
  {
    struct Long
    {
      NNOffset32To<Lookup<HBUINT32>> rowIndexTable;
      NNOffset32To<Lookup<HBUINT32>> columnIndexTable;
      NNOffset32To<UnsizedArrayOf<FWORD32>> array;
    } l;
    struct Short
    {
      NNOffset32To<Lookup<HBUINT16>> rowIndexTable;
      NNOffset32To<Lookup<HBUINT16>> columnIndexTable;
      NNOffset32To<UnsizedArrayOf<FWORD>> array;
    } s;
  } u;
  NNOffset32To<UnsizedArrayOf<FWORD>> vector;
  public:
  void _instance_assertion_on_line_726 () const { static_assert ((sizeof (*this) == (KernSubTableHeader::static_size + 24)), ""); } unsigned int get_size () const { return (KernSubTableHeader::static_size + 24); } static constexpr unsigned null_size = (KernSubTableHeader::static_size + 24); static constexpr unsigned min_size = (KernSubTableHeader::static_size + 24); static constexpr unsigned static_size = (KernSubTableHeader::static_size + 24);
};


struct KerxSubTableHeader
{
  typedef ExtendedTypes Types;

  unsigned tuple_count () const { return tupleCount; }
  bool is_horizontal () const { return !(coverage & Vertical); }

  enum Coverage
  {
    Vertical = 0x80000000u,
    CrossStream = 0x40000000u,
    Variation = 0x20000000u,
    Backwards = 0x10000000u,




    Reserved = 0x0FFFFF00u,
    SubtableType= 0x000000FFu,
  };

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret (c->check_struct (this), __PRETTY_FUNCTION__, 754);
  }

  public:
  HBUINT32 length;
  HBUINT32 coverage;
  HBUINT32 tupleCount;
  public:
  void _instance_assertion_on_line_762 () const { static_assert ((sizeof (*this) == (12)), ""); } unsigned int get_size () const { return (12); } static constexpr unsigned null_size = (12); static constexpr unsigned min_size = (12); static constexpr unsigned static_size = (12);
};

struct KerxSubTable
{
  friend struct kerx;

  unsigned int get_size () const { return u.header.length; }
  unsigned int get_type () const { return u.header.coverage & u.header.SubtableType; }

  template <typename context_t, typename ...Ts>
  typename context_t::return_t dispatch (context_t *c, Ts&&... ds) const
  {
    unsigned int subtable_type = get_type ();
    hb_no_trace_t<typename context_t::return_t> trace;
    switch (subtable_type) {
    case 0: return trace.ret (c->dispatch (u.format0, std::forward<Ts> (ds)...), __PRETTY_FUNCTION__, 778);
    case 1: return trace.ret (c->dispatch (u.format1, std::forward<Ts> (ds)...), __PRETTY_FUNCTION__, 779);
    case 2: return trace.ret (c->dispatch (u.format2, std::forward<Ts> (ds)...), __PRETTY_FUNCTION__, 780);
    case 4: return trace.ret (c->dispatch (u.format4, std::forward<Ts> (ds)...), __PRETTY_FUNCTION__, 781);
    case 6: return trace.ret (c->dispatch (u.format6, std::forward<Ts> (ds)...), __PRETTY_FUNCTION__, 782);
    default: return trace.ret (c->default_return_value (), __PRETTY_FUNCTION__, 783);
    }
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    if (!u.header.sanitize (c) ||
 u.header.length <= u.header.static_size ||
 !c->check_range (this, u.header.length))
      return trace.ret (false, __PRETTY_FUNCTION__, 793);

    return trace.ret (dispatch (c), __PRETTY_FUNCTION__, 795);
  }

  public:
  union {
  KerxSubTableHeader header;
  KerxSubTableFormat0<KerxSubTableHeader> format0;
  KerxSubTableFormat1<KerxSubTableHeader> format1;
  KerxSubTableFormat2<KerxSubTableHeader> format2;
  KerxSubTableFormat4<KerxSubTableHeader> format4;
  KerxSubTableFormat6<KerxSubTableHeader> format6;
  } u;
  public:
  void _instance_assertion_on_line_808 () const { static_assert ((sizeof (*this) >= (12)), ""); } static constexpr unsigned null_size = (12); static constexpr unsigned min_size = (12);
};






template <typename T>
struct KerxTable
{

  const T* thiz () const { return static_cast<const T *> (this); }

  bool has_state_machine () const
  {
    typedef typename T::SubTable SubTable;

    const SubTable *st = &thiz()->firstSubTable;
    unsigned int count = thiz()->tableCount;
    for (unsigned int i = 0; i < count; i++)
    {
      if (st->get_type () == 1)
 return true;
      st = &StructAfter<SubTable> (*st);
    }
    return false;
  }

  bool has_cross_stream () const
  {
    typedef typename T::SubTable SubTable;

    const SubTable *st = &thiz()->firstSubTable;
    unsigned int count = thiz()->tableCount;
    for (unsigned int i = 0; i < count; i++)
    {
      if (st->u.header.coverage & st->u.header.CrossStream)
 return true;
      st = &StructAfter<SubTable> (*st);
    }
    return false;
  }

  int get_h_kerning (hb_codepoint_t left, hb_codepoint_t right) const
  {
    typedef typename T::SubTable SubTable;

    int v = 0;
    const SubTable *st = &thiz()->firstSubTable;
    unsigned int count = thiz()->tableCount;
    for (unsigned int i = 0; i < count; i++)
    {
      if ((st->u.header.coverage & (st->u.header.Variation | st->u.header.CrossStream)) ||
   !st->u.header.is_horizontal ())
 continue;
      v += st->get_kerning (left, right);
      st = &StructAfter<SubTable> (*st);
    }
    return v;
  }

  bool apply (AAT::hb_aat_apply_context_t *c) const
  {
    c->buffer->unsafe_to_concat ();

    typedef typename T::SubTable SubTable;

    bool ret = false;
    bool seenCrossStream = false;
    c->set_lookup_index (0);
    const SubTable *st = &thiz()->firstSubTable;
    unsigned int count = thiz()->tableCount;
    for (unsigned int i = 0; i < count; i++)
    {
      bool reverse;

      if (!T::Types::extended && (st->u.header.coverage & st->u.header.Variation))
 goto skip;

      if (((((unsigned int) (c->buffer->props.direction)) & ~1U) == 4) != st->u.header.is_horizontal ())
 goto skip;

      reverse = bool (st->u.header.coverage & st->u.header.Backwards) !=
  ((((unsigned int) (c->buffer->props.direction)) & ~2U) == 5);

      if (!c->buffer->message (c->font, "start subtable %u", c->lookup_index))
 goto skip;

      if (!seenCrossStream &&
   (st->u.header.coverage & st->u.header.CrossStream))
      {

 seenCrossStream = true;
 hb_glyph_position_t *pos = c->buffer->pos;
 unsigned int count = c->buffer->len;
 for (unsigned int i = 0; i < count; i++)
 {
   pos[i].var.u8[2] = OT::Layout::GPOS_impl::ATTACH_TYPE_CURSIVE;
   pos[i].var.i16[0] = ((((unsigned int) (c->buffer->props.direction)) & ~2U) == 4) ? -1 : +1;



 }
      }

      if (reverse)
 c->buffer->reverse ();

      {

 hb_sanitize_with_object_t with (&c->sanitizer, i < count - 1 ? st : (const SubTable *) nullptr);
 ret |= st->dispatch (c);
      }

      if (reverse)
 c->buffer->reverse ();

      (void) c->buffer->message (c->font, "end subtable %u", c->lookup_index);

    skip:
      st = &StructAfter<SubTable> (*st);
      c->set_lookup_index (c->lookup_index + 1);
    }

    return ret;
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;
    if ((__builtin_expect (!!(!thiz()->version.sanitize (c) || (unsigned) thiz()->version < (unsigned) T::minVersion || !thiz()->tableCount.sanitize (c)), 0))

                                     )
      return trace.ret (false, __PRETTY_FUNCTION__, 942);

    typedef typename T::SubTable SubTable;

    const SubTable *st = &thiz()->firstSubTable;
    unsigned int count = thiz()->tableCount;
    for (unsigned int i = 0; i < count; i++)
    {
      if ((__builtin_expect (!!(!st->u.header.sanitize (c)), 0)))
 return trace.ret (false, __PRETTY_FUNCTION__, 951);







      hb_sanitize_with_object_t with (c, i < count - 1 ? st : (const SubTable *) nullptr);

      if ((__builtin_expect (!!(!st->sanitize (c)), 0)))
 return trace.ret (false, __PRETTY_FUNCTION__, 962);

      st = &StructAfter<SubTable> (*st);
    }

    return trace.ret (true, __PRETTY_FUNCTION__, 967);
  }
};

struct kerx : KerxTable<kerx>
{
  friend struct KerxTable<kerx>;

  static constexpr hb_tag_t tableTag = ((hb_tag_t)((((uint32_t)('k')&0xFF)<<24)|(((uint32_t)('e')&0xFF)<<16)|(((uint32_t)('r')&0xFF)<<8)|((uint32_t)('x')&0xFF)));
  static constexpr unsigned minVersion = 2u;

  typedef KerxSubTableHeader SubTableHeader;
  typedef SubTableHeader::Types Types;
  typedef KerxSubTable SubTable;

  bool has_data () const { return version; }

  protected:
  HBUINT16 version;

  HBUINT16 unused;
  HBUINT32 tableCount;

  SubTable firstSubTable;


  public:
  void _instance_assertion_on_line_994 () const { static_assert ((sizeof (*this) >= (8)), ""); } static constexpr unsigned null_size = (8); static constexpr unsigned min_size = (8);
};


}
# 36 "../harfbuzz-6.0.0/src/hb-aat-layout.cc" 2

# 1 "../harfbuzz-6.0.0/src/hb-aat-layout-trak-table.hh" 1
# 29 "../harfbuzz-6.0.0/src/hb-aat-layout-trak-table.hh"
#define HB_AAT_LAYOUT_TRAK_TABLE_HH 
# 39 "../harfbuzz-6.0.0/src/hb-aat-layout-trak-table.hh"
#define HB_AAT_TAG_trak HB_TAG('t','r','a','k')


namespace AAT {


struct TrackTableEntry
{
  friend struct TrackData;

  float get_track_value () const { return track.to_float (); }

  int get_value (const void *base, unsigned int index,
   unsigned int table_size) const
  { return (base+valuesZ).as_array (table_size)[index]; }

  public:
  bool sanitize (hb_sanitize_context_t *c, const void *base,
   unsigned int table_size) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret ((__builtin_expect (!!(c->check_struct (this) && (valuesZ.sanitize (c, base, table_size))), 1)), __PRETTY_FUNCTION__, 60)
                                               ;
  }

  protected:
  F16DOT16 track;
  NameID trackNameID;


  NNOffset16To<UnsizedArrayOf<FWORD>>
  valuesZ;


  public:
  void _instance_assertion_on_line_74 () const { static_assert ((sizeof (*this) == (8)), ""); } unsigned int get_size () const { return (8); } static constexpr unsigned null_size = (8); static constexpr unsigned min_size = (8); static constexpr unsigned static_size = (8);
};

struct TrackData
{
  float interpolate_at (unsigned int idx,
   float target_size,
   const TrackTableEntry &trackTableEntry,
   const void *base) const
  {
    unsigned int sizes = nSizes;
    hb_array_t<const F16DOT16> size_table ((base+sizeTable).arrayZ, sizes);

    float s0 = size_table[idx].to_float ();
    float s1 = size_table[idx + 1].to_float ();
    float t = (__builtin_expect (!!(s0 == s1), 0)) ? 0.f : (target_size - s0) / (s1 - s0);
    return t * trackTableEntry.get_value (base, idx + 1, sizes) +
    (1.f - t) * trackTableEntry.get_value (base, idx, sizes);
  }

  int get_tracking (const void *base, float ptem) const
  {



    const TrackTableEntry *trackTableEntry = nullptr;
    unsigned int count = nTracks;
    for (unsigned int i = 0; i < count; i++)
    {





      if (trackTable[i].get_track_value () == 0.f)
      {
 trackTableEntry = &trackTable[i];
 break;
      }
    }
    if (!trackTableEntry) return 0.;




    unsigned int sizes = nSizes;
    if (!sizes) return 0.;
    if (sizes == 1) return trackTableEntry->get_value (base, 0, sizes);

    hb_array_t<const F16DOT16> size_table ((base+sizeTable).arrayZ, sizes);
    unsigned int size_index;
    for (size_index = 0; size_index < sizes - 1; size_index++)
      if (size_table[size_index].to_float () >= ptem)
 break;

    return _hb_roundf(interpolate_at (size_index ? size_index - 1 : 0, ptem, *trackTableEntry, base))
                               ;
  }

  bool sanitize (hb_sanitize_context_t *c, const void *base) const
  {
    hb_no_trace_t<bool> trace;
    return trace.ret ((__builtin_expect (!!(c->check_struct (this) && sizeTable.sanitize (c, base, nSizes) && trackTable.sanitize (c, nTracks, base, nSizes)), 1)), __PRETTY_FUNCTION__, 136)

                                                     ;
  }

  protected:
  HBUINT16 nTracks;
  HBUINT16 nSizes;
  NNOffset32To<UnsizedArrayOf<F16DOT16>>
  sizeTable;

  UnsizedArrayOf<TrackTableEntry>
  trackTable;

  public:
  void _compiles_assertion_on_line_151 () const { (void) (trackTable)[0].static_size; } void _instance_assertion_on_line_151 () const { static_assert ((sizeof (*this) == (8) + (1 +0) * sizeof ((trackTable)[0])), ""); } static constexpr unsigned null_size = (8); static constexpr unsigned min_size = (8);
};

struct trak
{
  static constexpr hb_tag_t tableTag = ((hb_tag_t)((((uint32_t)('t')&0xFF)<<24)|(((uint32_t)('r')&0xFF)<<16)|(((uint32_t)('a')&0xFF)<<8)|((uint32_t)('k')&0xFF)));

  bool has_data () const { return version.to_int (); }

  bool apply (hb_aat_apply_context_t *c) const
  {
    hb_no_trace_t<bool> trace;

    hb_mask_t trak_mask = c->plan->trak_mask;

    const float ptem = c->font->ptem;
    if ((__builtin_expect (!!(ptem <= 0.f), 0)))
      return trace.ret (false, __PRETTY_FUNCTION__, 168);

    hb_buffer_t *buffer = c->buffer;
    if (((((unsigned int) (buffer->props.direction)) & ~1U) == 4))
    {
      const TrackData &trackData = this+horizData;
      int tracking = trackData.get_tracking (this, ptem);
      hb_position_t offset_to_add = c->font->em_scalef_x (tracking / 2);
      hb_position_t advance_to_add = c->font->em_scalef_x (tracking);
      for (unsigned int _count = buffer->len, start = 0, end = _count ? buffer->group_end (0, _hb_grapheme_group_func) : 0; start < _count; start = end, end = buffer->group_end (start, _hb_grapheme_group_func))
      {
 if (!(buffer->info[start].mask & trak_mask)) continue;
 buffer->pos[start].x_advance += advance_to_add;
 buffer->pos[start].x_offset += offset_to_add;
      }
    }
    else
    {
      const TrackData &trackData = this+vertData;
      int tracking = trackData.get_tracking (this, ptem);
      hb_position_t offset_to_add = c->font->em_scalef_y (tracking / 2);
      hb_position_t advance_to_add = c->font->em_scalef_y (tracking);
      for (unsigned int _count = buffer->len, start = 0, end = _count ? buffer->group_end (0, _hb_grapheme_group_func) : 0; start < _count; start = end, end = buffer->group_end (start, _hb_grapheme_group_func))
      {
 if (!(buffer->info[start].mask & trak_mask)) continue;
 buffer->pos[start].y_advance += advance_to_add;
 buffer->pos[start].y_offset += offset_to_add;
      }
    }

    return trace.ret (true, __PRETTY_FUNCTION__, 198);
  }

  bool sanitize (hb_sanitize_context_t *c) const
  {
    hb_no_trace_t<bool> trace;

    return trace.ret ((__builtin_expect (!!(c->check_struct (this) && version.major == 1 && horizData.sanitize (c, this, this) && vertData.sanitize (c, this, this)), 1)), __PRETTY_FUNCTION__, 205)


                                        ;
  }

  protected:
  FixedVersion<>version;

  HBUINT16 format;
  Offset16To<TrackData>
  horizData;

  Offset16To<TrackData>
  vertData;

  HBUINT16 reserved;

  public:
  void _instance_assertion_on_line_224 () const { static_assert ((sizeof (*this) == (12)), ""); } unsigned int get_size () const { return (12); } static constexpr unsigned null_size = (12); static constexpr unsigned min_size = (12); static constexpr unsigned static_size = (12);
};

}
# 38 "../harfbuzz-6.0.0/src/hb-aat-layout.cc" 2
# 48 "../harfbuzz-6.0.0/src/hb-aat-layout.cc"
AAT::hb_aat_apply_context_t::hb_aat_apply_context_t (const hb_ot_shape_plan_t *plan_,
           hb_font_t *font_,
           hb_buffer_t *buffer_,
           hb_blob_t *blob) :
             plan (plan_),
             font (font_),
             face (font->face),
             buffer (buffer_),
             sanitizer (),
             ankr_table (&NullHelper<AAT::ankr>::get_null ()),
             gdef_table (face->table.GDEF->table),
             lookup_index (0)
{
  sanitizer.init (blob);
  sanitizer.set_num_glyphs (face->get_num_glyphs ());
  sanitizer.start_processing ();
  sanitizer.set_max_ops (0x3FFFFFFF);
}

AAT::hb_aat_apply_context_t::~hb_aat_apply_context_t ()
{ sanitizer.end_processing (); }

void
AAT::hb_aat_apply_context_t::set_ankr_table (const AAT::ankr *ankr_table_)
{ ankr_table = ankr_table_; }
# 96 "../harfbuzz-6.0.0/src/hb-aat-layout.cc"
static const hb_aat_feature_mapping_t feature_mappings[] =
{
  {((hb_tag_t)((((uint32_t)('a')&0xFF)<<24)|(((uint32_t)('f')&0xFF)<<16)|(((uint32_t)('r')&0xFF)<<8)|((uint32_t)('c')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_FRACTIONS, HB_AAT_LAYOUT_FEATURE_SELECTOR_VERTICAL_FRACTIONS, HB_AAT_LAYOUT_FEATURE_SELECTOR_NO_FRACTIONS},
  {((hb_tag_t)((((uint32_t)('c')&0xFF)<<24)|(((uint32_t)('2')&0xFF)<<16)|(((uint32_t)('p')&0xFF)<<8)|((uint32_t)('c')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_UPPER_CASE, HB_AAT_LAYOUT_FEATURE_SELECTOR_UPPER_CASE_PETITE_CAPS, HB_AAT_LAYOUT_FEATURE_SELECTOR_DEFAULT_UPPER_CASE},
  {((hb_tag_t)((((uint32_t)('c')&0xFF)<<24)|(((uint32_t)('2')&0xFF)<<16)|(((uint32_t)('s')&0xFF)<<8)|((uint32_t)('c')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_UPPER_CASE, HB_AAT_LAYOUT_FEATURE_SELECTOR_UPPER_CASE_SMALL_CAPS, HB_AAT_LAYOUT_FEATURE_SELECTOR_DEFAULT_UPPER_CASE},
  {((hb_tag_t)((((uint32_t)('c')&0xFF)<<24)|(((uint32_t)('a')&0xFF)<<16)|(((uint32_t)('l')&0xFF)<<8)|((uint32_t)('t')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_CONTEXTUAL_ALTERNATIVES, HB_AAT_LAYOUT_FEATURE_SELECTOR_CONTEXTUAL_ALTERNATES_ON, HB_AAT_LAYOUT_FEATURE_SELECTOR_CONTEXTUAL_ALTERNATES_OFF},
  {((hb_tag_t)((((uint32_t)('c')&0xFF)<<24)|(((uint32_t)('a')&0xFF)<<16)|(((uint32_t)('s')&0xFF)<<8)|((uint32_t)('e')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_CASE_SENSITIVE_LAYOUT, HB_AAT_LAYOUT_FEATURE_SELECTOR_CASE_SENSITIVE_LAYOUT_ON, HB_AAT_LAYOUT_FEATURE_SELECTOR_CASE_SENSITIVE_LAYOUT_OFF},
  {((hb_tag_t)((((uint32_t)('c')&0xFF)<<24)|(((uint32_t)('l')&0xFF)<<16)|(((uint32_t)('i')&0xFF)<<8)|((uint32_t)('g')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES, HB_AAT_LAYOUT_FEATURE_SELECTOR_CONTEXTUAL_LIGATURES_ON, HB_AAT_LAYOUT_FEATURE_SELECTOR_CONTEXTUAL_LIGATURES_OFF},
  {((hb_tag_t)((((uint32_t)('c')&0xFF)<<24)|(((uint32_t)('p')&0xFF)<<16)|(((uint32_t)('s')&0xFF)<<8)|((uint32_t)('p')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_CASE_SENSITIVE_LAYOUT, HB_AAT_LAYOUT_FEATURE_SELECTOR_CASE_SENSITIVE_SPACING_ON, HB_AAT_LAYOUT_FEATURE_SELECTOR_CASE_SENSITIVE_SPACING_OFF},
  {((hb_tag_t)((((uint32_t)('c')&0xFF)<<24)|(((uint32_t)('s')&0xFF)<<16)|(((uint32_t)('w')&0xFF)<<8)|((uint32_t)('h')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_CONTEXTUAL_ALTERNATIVES, HB_AAT_LAYOUT_FEATURE_SELECTOR_CONTEXTUAL_SWASH_ALTERNATES_ON, HB_AAT_LAYOUT_FEATURE_SELECTOR_CONTEXTUAL_SWASH_ALTERNATES_OFF},
  {((hb_tag_t)((((uint32_t)('d')&0xFF)<<24)|(((uint32_t)('l')&0xFF)<<16)|(((uint32_t)('i')&0xFF)<<8)|((uint32_t)('g')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES, HB_AAT_LAYOUT_FEATURE_SELECTOR_RARE_LIGATURES_ON, HB_AAT_LAYOUT_FEATURE_SELECTOR_RARE_LIGATURES_OFF},
  {((hb_tag_t)((((uint32_t)('e')&0xFF)<<24)|(((uint32_t)('x')&0xFF)<<16)|(((uint32_t)('p')&0xFF)<<8)|((uint32_t)('t')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE, HB_AAT_LAYOUT_FEATURE_SELECTOR_EXPERT_CHARACTERS, (hb_aat_layout_feature_selector_t) 16},
  {((hb_tag_t)((((uint32_t)('f')&0xFF)<<24)|(((uint32_t)('r')&0xFF)<<16)|(((uint32_t)('a')&0xFF)<<8)|((uint32_t)('c')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_FRACTIONS, HB_AAT_LAYOUT_FEATURE_SELECTOR_DIAGONAL_FRACTIONS, HB_AAT_LAYOUT_FEATURE_SELECTOR_NO_FRACTIONS},
  {((hb_tag_t)((((uint32_t)('f')&0xFF)<<24)|(((uint32_t)('w')&0xFF)<<16)|(((uint32_t)('i')&0xFF)<<8)|((uint32_t)('d')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_TEXT_SPACING, HB_AAT_LAYOUT_FEATURE_SELECTOR_MONOSPACED_TEXT, (hb_aat_layout_feature_selector_t) 7},
  {((hb_tag_t)((((uint32_t)('h')&0xFF)<<24)|(((uint32_t)('a')&0xFF)<<16)|(((uint32_t)('l')&0xFF)<<8)|((uint32_t)('t')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_TEXT_SPACING, HB_AAT_LAYOUT_FEATURE_SELECTOR_ALT_HALF_WIDTH_TEXT, (hb_aat_layout_feature_selector_t) 7},
  {((hb_tag_t)((((uint32_t)('h')&0xFF)<<24)|(((uint32_t)('i')&0xFF)<<16)|(((uint32_t)('s')&0xFF)<<8)|((uint32_t)('t')&0xFF))), (hb_aat_layout_feature_type_t) 40, (hb_aat_layout_feature_selector_t) 0, (hb_aat_layout_feature_selector_t) 1},
  {((hb_tag_t)((((uint32_t)('h')&0xFF)<<24)|(((uint32_t)('k')&0xFF)<<16)|(((uint32_t)('n')&0xFF)<<8)|((uint32_t)('a')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_ALTERNATE_KANA, HB_AAT_LAYOUT_FEATURE_SELECTOR_ALTERNATE_HORIZ_KANA_ON, HB_AAT_LAYOUT_FEATURE_SELECTOR_ALTERNATE_HORIZ_KANA_OFF},
  {((hb_tag_t)((((uint32_t)('h')&0xFF)<<24)|(((uint32_t)('l')&0xFF)<<16)|(((uint32_t)('i')&0xFF)<<8)|((uint32_t)('g')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES, HB_AAT_LAYOUT_FEATURE_SELECTOR_HISTORICAL_LIGATURES_ON, HB_AAT_LAYOUT_FEATURE_SELECTOR_HISTORICAL_LIGATURES_OFF},
  {((hb_tag_t)((((uint32_t)('h')&0xFF)<<24)|(((uint32_t)('n')&0xFF)<<16)|(((uint32_t)('g')&0xFF)<<8)|((uint32_t)('l')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_TRANSLITERATION, HB_AAT_LAYOUT_FEATURE_SELECTOR_HANJA_TO_HANGUL, HB_AAT_LAYOUT_FEATURE_SELECTOR_NO_TRANSLITERATION},
  {((hb_tag_t)((((uint32_t)('h')&0xFF)<<24)|(((uint32_t)('o')&0xFF)<<16)|(((uint32_t)('j')&0xFF)<<8)|((uint32_t)('o')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE, HB_AAT_LAYOUT_FEATURE_SELECTOR_HOJO_CHARACTERS, (hb_aat_layout_feature_selector_t) 16},
  {((hb_tag_t)((((uint32_t)('h')&0xFF)<<24)|(((uint32_t)('w')&0xFF)<<16)|(((uint32_t)('i')&0xFF)<<8)|((uint32_t)('d')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_TEXT_SPACING, HB_AAT_LAYOUT_FEATURE_SELECTOR_HALF_WIDTH_TEXT, (hb_aat_layout_feature_selector_t) 7},
  {((hb_tag_t)((((uint32_t)('i')&0xFF)<<24)|(((uint32_t)('t')&0xFF)<<16)|(((uint32_t)('a')&0xFF)<<8)|((uint32_t)('l')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_ITALIC_CJK_ROMAN, HB_AAT_LAYOUT_FEATURE_SELECTOR_CJK_ITALIC_ROMAN_ON, HB_AAT_LAYOUT_FEATURE_SELECTOR_CJK_ITALIC_ROMAN_OFF},
  {((hb_tag_t)((((uint32_t)('j')&0xFF)<<24)|(((uint32_t)('p')&0xFF)<<16)|(((uint32_t)('0')&0xFF)<<8)|((uint32_t)('4')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE, HB_AAT_LAYOUT_FEATURE_SELECTOR_JIS2004_CHARACTERS, (hb_aat_layout_feature_selector_t) 16},
  {((hb_tag_t)((((uint32_t)('j')&0xFF)<<24)|(((uint32_t)('p')&0xFF)<<16)|(((uint32_t)('7')&0xFF)<<8)|((uint32_t)('8')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE, HB_AAT_LAYOUT_FEATURE_SELECTOR_JIS1978_CHARACTERS, (hb_aat_layout_feature_selector_t) 16},
  {((hb_tag_t)((((uint32_t)('j')&0xFF)<<24)|(((uint32_t)('p')&0xFF)<<16)|(((uint32_t)('8')&0xFF)<<8)|((uint32_t)('3')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE, HB_AAT_LAYOUT_FEATURE_SELECTOR_JIS1983_CHARACTERS, (hb_aat_layout_feature_selector_t) 16},
  {((hb_tag_t)((((uint32_t)('j')&0xFF)<<24)|(((uint32_t)('p')&0xFF)<<16)|(((uint32_t)('9')&0xFF)<<8)|((uint32_t)('0')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE, HB_AAT_LAYOUT_FEATURE_SELECTOR_JIS1990_CHARACTERS, (hb_aat_layout_feature_selector_t) 16},
  {((hb_tag_t)((((uint32_t)('l')&0xFF)<<24)|(((uint32_t)('i')&0xFF)<<16)|(((uint32_t)('g')&0xFF)<<8)|((uint32_t)('a')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES, HB_AAT_LAYOUT_FEATURE_SELECTOR_COMMON_LIGATURES_ON, HB_AAT_LAYOUT_FEATURE_SELECTOR_COMMON_LIGATURES_OFF},
  {((hb_tag_t)((((uint32_t)('l')&0xFF)<<24)|(((uint32_t)('n')&0xFF)<<16)|(((uint32_t)('u')&0xFF)<<8)|((uint32_t)('m')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_NUMBER_CASE, HB_AAT_LAYOUT_FEATURE_SELECTOR_UPPER_CASE_NUMBERS, (hb_aat_layout_feature_selector_t) 2},
  {((hb_tag_t)((((uint32_t)('m')&0xFF)<<24)|(((uint32_t)('g')&0xFF)<<16)|(((uint32_t)('r')&0xFF)<<8)|((uint32_t)('k')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_MATHEMATICAL_EXTRAS, HB_AAT_LAYOUT_FEATURE_SELECTOR_MATHEMATICAL_GREEK_ON, HB_AAT_LAYOUT_FEATURE_SELECTOR_MATHEMATICAL_GREEK_OFF},
  {((hb_tag_t)((((uint32_t)('n')&0xFF)<<24)|(((uint32_t)('l')&0xFF)<<16)|(((uint32_t)('c')&0xFF)<<8)|((uint32_t)('k')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE, HB_AAT_LAYOUT_FEATURE_SELECTOR_NLCCHARACTERS, (hb_aat_layout_feature_selector_t) 16},
  {((hb_tag_t)((((uint32_t)('o')&0xFF)<<24)|(((uint32_t)('n')&0xFF)<<16)|(((uint32_t)('u')&0xFF)<<8)|((uint32_t)('m')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_NUMBER_CASE, HB_AAT_LAYOUT_FEATURE_SELECTOR_LOWER_CASE_NUMBERS, (hb_aat_layout_feature_selector_t) 2},
  {((hb_tag_t)((((uint32_t)('o')&0xFF)<<24)|(((uint32_t)('r')&0xFF)<<16)|(((uint32_t)('d')&0xFF)<<8)|((uint32_t)('n')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_VERTICAL_POSITION, HB_AAT_LAYOUT_FEATURE_SELECTOR_ORDINALS, HB_AAT_LAYOUT_FEATURE_SELECTOR_NORMAL_POSITION},
  {((hb_tag_t)((((uint32_t)('p')&0xFF)<<24)|(((uint32_t)('a')&0xFF)<<16)|(((uint32_t)('l')&0xFF)<<8)|((uint32_t)('t')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_TEXT_SPACING, HB_AAT_LAYOUT_FEATURE_SELECTOR_ALT_PROPORTIONAL_TEXT, (hb_aat_layout_feature_selector_t) 7},
  {((hb_tag_t)((((uint32_t)('p')&0xFF)<<24)|(((uint32_t)('c')&0xFF)<<16)|(((uint32_t)('a')&0xFF)<<8)|((uint32_t)('p')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_LOWER_CASE, HB_AAT_LAYOUT_FEATURE_SELECTOR_LOWER_CASE_PETITE_CAPS, HB_AAT_LAYOUT_FEATURE_SELECTOR_DEFAULT_LOWER_CASE},
  {((hb_tag_t)((((uint32_t)('p')&0xFF)<<24)|(((uint32_t)('k')&0xFF)<<16)|(((uint32_t)('n')&0xFF)<<8)|((uint32_t)('a')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_TEXT_SPACING, HB_AAT_LAYOUT_FEATURE_SELECTOR_PROPORTIONAL_TEXT, (hb_aat_layout_feature_selector_t) 7},
  {((hb_tag_t)((((uint32_t)('p')&0xFF)<<24)|(((uint32_t)('n')&0xFF)<<16)|(((uint32_t)('u')&0xFF)<<8)|((uint32_t)('m')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_NUMBER_SPACING, HB_AAT_LAYOUT_FEATURE_SELECTOR_PROPORTIONAL_NUMBERS, (hb_aat_layout_feature_selector_t) 4},
  {((hb_tag_t)((((uint32_t)('p')&0xFF)<<24)|(((uint32_t)('w')&0xFF)<<16)|(((uint32_t)('i')&0xFF)<<8)|((uint32_t)('d')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_TEXT_SPACING, HB_AAT_LAYOUT_FEATURE_SELECTOR_PROPORTIONAL_TEXT, (hb_aat_layout_feature_selector_t) 7},
  {((hb_tag_t)((((uint32_t)('q')&0xFF)<<24)|(((uint32_t)('w')&0xFF)<<16)|(((uint32_t)('i')&0xFF)<<8)|((uint32_t)('d')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_TEXT_SPACING, HB_AAT_LAYOUT_FEATURE_SELECTOR_QUARTER_WIDTH_TEXT, (hb_aat_layout_feature_selector_t) 7},
  {((hb_tag_t)((((uint32_t)('r')&0xFF)<<24)|(((uint32_t)('l')&0xFF)<<16)|(((uint32_t)('i')&0xFF)<<8)|((uint32_t)('g')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES, HB_AAT_LAYOUT_FEATURE_SELECTOR_REQUIRED_LIGATURES_ON, HB_AAT_LAYOUT_FEATURE_SELECTOR_REQUIRED_LIGATURES_OFF},
  {((hb_tag_t)((((uint32_t)('r')&0xFF)<<24)|(((uint32_t)('u')&0xFF)<<16)|(((uint32_t)('b')&0xFF)<<8)|((uint32_t)('y')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_RUBY_KANA, HB_AAT_LAYOUT_FEATURE_SELECTOR_RUBY_KANA_ON, HB_AAT_LAYOUT_FEATURE_SELECTOR_RUBY_KANA_OFF},
  {((hb_tag_t)((((uint32_t)('s')&0xFF)<<24)|(((uint32_t)('i')&0xFF)<<16)|(((uint32_t)('n')&0xFF)<<8)|((uint32_t)('f')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_VERTICAL_POSITION, HB_AAT_LAYOUT_FEATURE_SELECTOR_SCIENTIFIC_INFERIORS, HB_AAT_LAYOUT_FEATURE_SELECTOR_NORMAL_POSITION},
  {((hb_tag_t)((((uint32_t)('s')&0xFF)<<24)|(((uint32_t)('m')&0xFF)<<16)|(((uint32_t)('c')&0xFF)<<8)|((uint32_t)('p')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_LOWER_CASE, HB_AAT_LAYOUT_FEATURE_SELECTOR_LOWER_CASE_SMALL_CAPS, HB_AAT_LAYOUT_FEATURE_SELECTOR_DEFAULT_LOWER_CASE},
  {((hb_tag_t)((((uint32_t)('s')&0xFF)<<24)|(((uint32_t)('m')&0xFF)<<16)|(((uint32_t)('p')&0xFF)<<8)|((uint32_t)('l')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE, HB_AAT_LAYOUT_FEATURE_SELECTOR_SIMPLIFIED_CHARACTERS, (hb_aat_layout_feature_selector_t) 16},
  {((hb_tag_t)((((uint32_t)('s')&0xFF)<<24)|(((uint32_t)('s')&0xFF)<<16)|(((uint32_t)('0')&0xFF)<<8)|((uint32_t)('1')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES, HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_ONE_ON, HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_ONE_OFF},
  {((hb_tag_t)((((uint32_t)('s')&0xFF)<<24)|(((uint32_t)('s')&0xFF)<<16)|(((uint32_t)('0')&0xFF)<<8)|((uint32_t)('2')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES, HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_TWO_ON, HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_TWO_OFF},
  {((hb_tag_t)((((uint32_t)('s')&0xFF)<<24)|(((uint32_t)('s')&0xFF)<<16)|(((uint32_t)('0')&0xFF)<<8)|((uint32_t)('3')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES, HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_THREE_ON, HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_THREE_OFF},
  {((hb_tag_t)((((uint32_t)('s')&0xFF)<<24)|(((uint32_t)('s')&0xFF)<<16)|(((uint32_t)('0')&0xFF)<<8)|((uint32_t)('4')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES, HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_FOUR_ON, HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_FOUR_OFF},
  {((hb_tag_t)((((uint32_t)('s')&0xFF)<<24)|(((uint32_t)('s')&0xFF)<<16)|(((uint32_t)('0')&0xFF)<<8)|((uint32_t)('5')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES, HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_FIVE_ON, HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_FIVE_OFF},
  {((hb_tag_t)((((uint32_t)('s')&0xFF)<<24)|(((uint32_t)('s')&0xFF)<<16)|(((uint32_t)('0')&0xFF)<<8)|((uint32_t)('6')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES, HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_SIX_ON, HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_SIX_OFF},
  {((hb_tag_t)((((uint32_t)('s')&0xFF)<<24)|(((uint32_t)('s')&0xFF)<<16)|(((uint32_t)('0')&0xFF)<<8)|((uint32_t)('7')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES, HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_SEVEN_ON, HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_SEVEN_OFF},
  {((hb_tag_t)((((uint32_t)('s')&0xFF)<<24)|(((uint32_t)('s')&0xFF)<<16)|(((uint32_t)('0')&0xFF)<<8)|((uint32_t)('8')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES, HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_EIGHT_ON, HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_EIGHT_OFF},
  {((hb_tag_t)((((uint32_t)('s')&0xFF)<<24)|(((uint32_t)('s')&0xFF)<<16)|(((uint32_t)('0')&0xFF)<<8)|((uint32_t)('9')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES, HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_NINE_ON, HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_NINE_OFF},
  {((hb_tag_t)((((uint32_t)('s')&0xFF)<<24)|(((uint32_t)('s')&0xFF)<<16)|(((uint32_t)('1')&0xFF)<<8)|((uint32_t)('0')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES, HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_TEN_ON, HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_TEN_OFF},
  {((hb_tag_t)((((uint32_t)('s')&0xFF)<<24)|(((uint32_t)('s')&0xFF)<<16)|(((uint32_t)('1')&0xFF)<<8)|((uint32_t)('1')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES, HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_ELEVEN_ON, HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_ELEVEN_OFF},
  {((hb_tag_t)((((uint32_t)('s')&0xFF)<<24)|(((uint32_t)('s')&0xFF)<<16)|(((uint32_t)('1')&0xFF)<<8)|((uint32_t)('2')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES, HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_TWELVE_ON, HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_TWELVE_OFF},
  {((hb_tag_t)((((uint32_t)('s')&0xFF)<<24)|(((uint32_t)('s')&0xFF)<<16)|(((uint32_t)('1')&0xFF)<<8)|((uint32_t)('3')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES, HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_THIRTEEN_ON, HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_THIRTEEN_OFF},
  {((hb_tag_t)((((uint32_t)('s')&0xFF)<<24)|(((uint32_t)('s')&0xFF)<<16)|(((uint32_t)('1')&0xFF)<<8)|((uint32_t)('4')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES, HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_FOURTEEN_ON, HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_FOURTEEN_OFF},
  {((hb_tag_t)((((uint32_t)('s')&0xFF)<<24)|(((uint32_t)('s')&0xFF)<<16)|(((uint32_t)('1')&0xFF)<<8)|((uint32_t)('5')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES, HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_FIFTEEN_ON, HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_FIFTEEN_OFF},
  {((hb_tag_t)((((uint32_t)('s')&0xFF)<<24)|(((uint32_t)('s')&0xFF)<<16)|(((uint32_t)('1')&0xFF)<<8)|((uint32_t)('6')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES, HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_SIXTEEN_ON, HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_SIXTEEN_OFF},
  {((hb_tag_t)((((uint32_t)('s')&0xFF)<<24)|(((uint32_t)('s')&0xFF)<<16)|(((uint32_t)('1')&0xFF)<<8)|((uint32_t)('7')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES, HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_SEVENTEEN_ON, HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_SEVENTEEN_OFF},
  {((hb_tag_t)((((uint32_t)('s')&0xFF)<<24)|(((uint32_t)('s')&0xFF)<<16)|(((uint32_t)('1')&0xFF)<<8)|((uint32_t)('8')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES, HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_EIGHTEEN_ON, HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_EIGHTEEN_OFF},
  {((hb_tag_t)((((uint32_t)('s')&0xFF)<<24)|(((uint32_t)('s')&0xFF)<<16)|(((uint32_t)('1')&0xFF)<<8)|((uint32_t)('9')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES, HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_NINETEEN_ON, HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_NINETEEN_OFF},
  {((hb_tag_t)((((uint32_t)('s')&0xFF)<<24)|(((uint32_t)('s')&0xFF)<<16)|(((uint32_t)('2')&0xFF)<<8)|((uint32_t)('0')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES, HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_TWENTY_ON, HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_TWENTY_OFF},
  {((hb_tag_t)((((uint32_t)('s')&0xFF)<<24)|(((uint32_t)('u')&0xFF)<<16)|(((uint32_t)('b')&0xFF)<<8)|((uint32_t)('s')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_VERTICAL_POSITION, HB_AAT_LAYOUT_FEATURE_SELECTOR_INFERIORS, HB_AAT_LAYOUT_FEATURE_SELECTOR_NORMAL_POSITION},
  {((hb_tag_t)((((uint32_t)('s')&0xFF)<<24)|(((uint32_t)('u')&0xFF)<<16)|(((uint32_t)('p')&0xFF)<<8)|((uint32_t)('s')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_VERTICAL_POSITION, HB_AAT_LAYOUT_FEATURE_SELECTOR_SUPERIORS, HB_AAT_LAYOUT_FEATURE_SELECTOR_NORMAL_POSITION},
  {((hb_tag_t)((((uint32_t)('s')&0xFF)<<24)|(((uint32_t)('w')&0xFF)<<16)|(((uint32_t)('s')&0xFF)<<8)|((uint32_t)('h')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_CONTEXTUAL_ALTERNATIVES, HB_AAT_LAYOUT_FEATURE_SELECTOR_SWASH_ALTERNATES_ON, HB_AAT_LAYOUT_FEATURE_SELECTOR_SWASH_ALTERNATES_OFF},
  {((hb_tag_t)((((uint32_t)('t')&0xFF)<<24)|(((uint32_t)('i')&0xFF)<<16)|(((uint32_t)('t')&0xFF)<<8)|((uint32_t)('l')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_STYLE_OPTIONS, HB_AAT_LAYOUT_FEATURE_SELECTOR_TITLING_CAPS, HB_AAT_LAYOUT_FEATURE_SELECTOR_NO_STYLE_OPTIONS},
  {((hb_tag_t)((((uint32_t)('t')&0xFF)<<24)|(((uint32_t)('n')&0xFF)<<16)|(((uint32_t)('a')&0xFF)<<8)|((uint32_t)('m')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE, HB_AAT_LAYOUT_FEATURE_SELECTOR_TRADITIONAL_NAMES_CHARACTERS, (hb_aat_layout_feature_selector_t) 16},
  {((hb_tag_t)((((uint32_t)('t')&0xFF)<<24)|(((uint32_t)('n')&0xFF)<<16)|(((uint32_t)('u')&0xFF)<<8)|((uint32_t)('m')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_NUMBER_SPACING, HB_AAT_LAYOUT_FEATURE_SELECTOR_MONOSPACED_NUMBERS, (hb_aat_layout_feature_selector_t) 4},
  {((hb_tag_t)((((uint32_t)('t')&0xFF)<<24)|(((uint32_t)('r')&0xFF)<<16)|(((uint32_t)('a')&0xFF)<<8)|((uint32_t)('d')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE, HB_AAT_LAYOUT_FEATURE_SELECTOR_TRADITIONAL_CHARACTERS, (hb_aat_layout_feature_selector_t) 16},
  {((hb_tag_t)((((uint32_t)('t')&0xFF)<<24)|(((uint32_t)('w')&0xFF)<<16)|(((uint32_t)('i')&0xFF)<<8)|((uint32_t)('d')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_TEXT_SPACING, HB_AAT_LAYOUT_FEATURE_SELECTOR_THIRD_WIDTH_TEXT, (hb_aat_layout_feature_selector_t) 7},
  {((hb_tag_t)((((uint32_t)('u')&0xFF)<<24)|(((uint32_t)('n')&0xFF)<<16)|(((uint32_t)('i')&0xFF)<<8)|((uint32_t)('c')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_LETTER_CASE, (hb_aat_layout_feature_selector_t) 14, (hb_aat_layout_feature_selector_t) 15},
  {((hb_tag_t)((((uint32_t)('v')&0xFF)<<24)|(((uint32_t)('a')&0xFF)<<16)|(((uint32_t)('l')&0xFF)<<8)|((uint32_t)('t')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_TEXT_SPACING, HB_AAT_LAYOUT_FEATURE_SELECTOR_ALT_PROPORTIONAL_TEXT, (hb_aat_layout_feature_selector_t) 7},
  {((hb_tag_t)((((uint32_t)('v')&0xFF)<<24)|(((uint32_t)('e')&0xFF)<<16)|(((uint32_t)('r')&0xFF)<<8)|((uint32_t)('t')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_VERTICAL_SUBSTITUTION, HB_AAT_LAYOUT_FEATURE_SELECTOR_SUBSTITUTE_VERTICAL_FORMS_ON, HB_AAT_LAYOUT_FEATURE_SELECTOR_SUBSTITUTE_VERTICAL_FORMS_OFF},
  {((hb_tag_t)((((uint32_t)('v')&0xFF)<<24)|(((uint32_t)('h')&0xFF)<<16)|(((uint32_t)('a')&0xFF)<<8)|((uint32_t)('l')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_TEXT_SPACING, HB_AAT_LAYOUT_FEATURE_SELECTOR_ALT_HALF_WIDTH_TEXT, (hb_aat_layout_feature_selector_t) 7},
  {((hb_tag_t)((((uint32_t)('v')&0xFF)<<24)|(((uint32_t)('k')&0xFF)<<16)|(((uint32_t)('n')&0xFF)<<8)|((uint32_t)('a')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_ALTERNATE_KANA, HB_AAT_LAYOUT_FEATURE_SELECTOR_ALTERNATE_VERT_KANA_ON, HB_AAT_LAYOUT_FEATURE_SELECTOR_ALTERNATE_VERT_KANA_OFF},
  {((hb_tag_t)((((uint32_t)('v')&0xFF)<<24)|(((uint32_t)('p')&0xFF)<<16)|(((uint32_t)('a')&0xFF)<<8)|((uint32_t)('l')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_TEXT_SPACING, HB_AAT_LAYOUT_FEATURE_SELECTOR_ALT_PROPORTIONAL_TEXT, (hb_aat_layout_feature_selector_t) 7},
  {((hb_tag_t)((((uint32_t)('v')&0xFF)<<24)|(((uint32_t)('r')&0xFF)<<16)|(((uint32_t)('t')&0xFF)<<8)|((uint32_t)('2')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_VERTICAL_SUBSTITUTION, HB_AAT_LAYOUT_FEATURE_SELECTOR_SUBSTITUTE_VERTICAL_FORMS_ON, HB_AAT_LAYOUT_FEATURE_SELECTOR_SUBSTITUTE_VERTICAL_FORMS_OFF},
  {((hb_tag_t)((((uint32_t)('v')&0xFF)<<24)|(((uint32_t)('r')&0xFF)<<16)|(((uint32_t)('t')&0xFF)<<8)|((uint32_t)('r')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_VERTICAL_SUBSTITUTION, (hb_aat_layout_feature_selector_t) 2, (hb_aat_layout_feature_selector_t) 3},
  {((hb_tag_t)((((uint32_t)('z')&0xFF)<<24)|(((uint32_t)('e')&0xFF)<<16)|(((uint32_t)('r')&0xFF)<<8)|((uint32_t)('o')&0xFF))), HB_AAT_LAYOUT_FEATURE_TYPE_TYPOGRAPHIC_EXTRAS, HB_AAT_LAYOUT_FEATURE_SELECTOR_SLASHED_ZERO_ON, HB_AAT_LAYOUT_FEATURE_SELECTOR_SLASHED_ZERO_OFF},
};
# 189 "../harfbuzz-6.0.0/src/hb-aat-layout.cc"
const hb_aat_feature_mapping_t *
hb_aat_layout_find_feature_mapping (hb_tag_t tag)
{
  return hb_sorted_array (feature_mappings).bsearch (tag);
}
# 204 "../harfbuzz-6.0.0/src/hb-aat-layout.cc"
void
hb_aat_layout_compile_map (const hb_aat_map_builder_t *mapper,
      hb_aat_map_t *map)
{
  const AAT::morx& morx = *mapper->face->table.morx;
  if (morx.has_data ())
  {
    morx.compile_flags (mapper, map);
    return;
  }

  const AAT::mort& mort = *mapper->face->table.mort;
  if (mort.has_data ())
  {
    mort.compile_flags (mapper, map);
    return;
  }
}
# 237 "../harfbuzz-6.0.0/src/hb-aat-layout.cc"
hb_bool_t
hb_aat_layout_has_substitution (hb_face_t *face)
{
  return face->table.morx->has_data () ||
  face->table.mort->has_data ();
}

void
hb_aat_layout_substitute (const hb_ot_shape_plan_t *plan,
     hb_font_t *font,
     hb_buffer_t *buffer,
     const hb_feature_t *features,
     unsigned num_features)
{
  hb_aat_map_builder_t builder (font->face, plan->props);
  for (unsigned i = 0; i < num_features; i++)
    builder.add_feature (features[i]);
  hb_aat_map_t map;
  builder.compile (map);

  hb_blob_t *morx_blob = font->face->table.morx.get_blob ();
  const AAT::morx& morx = *morx_blob->as<AAT::morx> ();
  if (morx.has_data ())
  {
    AAT::hb_aat_apply_context_t c (plan, font, buffer, morx_blob);
    if (!buffer->message (font, "start table morx")) return;
    morx.apply (&c, map);
    (void) buffer->message (font, "end table morx");
    return;
  }

  hb_blob_t *mort_blob = font->face->table.mort.get_blob ();
  const AAT::mort& mort = *mort_blob->as<AAT::mort> ();
  if (mort.has_data ())
  {
    AAT::hb_aat_apply_context_t c (plan, font, buffer, mort_blob);
    if (!buffer->message (font, "start table mort")) return;
    mort.apply (&c, map);
    (void) buffer->message (font, "end table mort");
    return;
  }
}

void
hb_aat_layout_zero_width_deleted_glyphs (hb_buffer_t *buffer)
{
  unsigned int count = buffer->len;
  hb_glyph_info_t *info = buffer->info;
  hb_glyph_position_t *pos = buffer->pos;
  for (unsigned int i = 0; i < count; i++)
    if ((__builtin_expect (!!(info[i].codepoint == AAT::DELETED_GLYPH), 0)))
      pos[i].x_advance = pos[i].y_advance = pos[i].x_offset = pos[i].y_offset = 0;
}

static bool
is_deleted_glyph (const hb_glyph_info_t *info)
{
  return info->codepoint == AAT::DELETED_GLYPH;
}

void
hb_aat_layout_remove_deleted_glyphs (hb_buffer_t *buffer)
{
  buffer->delete_glyphs_inplace (is_deleted_glyph);
}
# 316 "../harfbuzz-6.0.0/src/hb-aat-layout.cc"
hb_bool_t
hb_aat_layout_has_positioning (hb_face_t *face)
{
  return face->table.kerx->has_data ();
}

void
hb_aat_layout_position (const hb_ot_shape_plan_t *plan,
   hb_font_t *font,
   hb_buffer_t *buffer)
{
  hb_blob_t *kerx_blob = font->face->table.kerx.get_blob ();
  const AAT::kerx& kerx = *kerx_blob->as<AAT::kerx> ();

  AAT::hb_aat_apply_context_t c (plan, font, buffer, kerx_blob);
  if (!buffer->message (font, "start table kerx")) return;
  c.set_ankr_table (font->face->table.ankr.get ());
  kerx.apply (&c);
  (void) buffer->message (font, "end table kerx");
}
# 349 "../harfbuzz-6.0.0/src/hb-aat-layout.cc"
hb_bool_t
hb_aat_layout_has_tracking (hb_face_t *face)
{
  return face->table.trak->has_data ();
}

void
hb_aat_layout_track (const hb_ot_shape_plan_t *plan,
       hb_font_t *font,
       hb_buffer_t *buffer)
{
  const AAT::trak& trak = *font->face->table.trak;

  AAT::hb_aat_apply_context_t c (plan, font, buffer);
  trak.apply (&c);
}
# 380 "../harfbuzz-6.0.0/src/hb-aat-layout.cc"
unsigned int
hb_aat_layout_get_feature_types (hb_face_t *face,
     unsigned int start_offset,
     unsigned int *feature_count,
     hb_aat_layout_feature_type_t *features )
{
  return face->table.feat->get_feature_types (start_offset, feature_count, features);
}
# 400 "../harfbuzz-6.0.0/src/hb-aat-layout.cc"
hb_ot_name_id_t
hb_aat_layout_feature_type_get_name_id (hb_face_t *face,
     hb_aat_layout_feature_type_t feature_type)
{
  return face->table.feat->get_feature_name_id (feature_type);
}
# 428 "../harfbuzz-6.0.0/src/hb-aat-layout.cc"
unsigned int
hb_aat_layout_feature_type_get_selector_infos (hb_face_t *face,
            hb_aat_layout_feature_type_t feature_type,
            unsigned int start_offset,
            unsigned int *selector_count,
            hb_aat_layout_feature_selector_info_t *selectors,
            unsigned int *default_index )
{
  return face->table.feat->get_selector_infos (feature_type, start_offset, selector_count, selectors, default_index);
}
