import torch # 0000_1111_1111 FP12_MAX = 0.5 * (1+0.5+0.25+0.125+0.0625+0.03125) # 0000_0000_0000 FP12_MIN = 2 ** (-15) def to_fp12(data: torch.Tensor): data = data.to(dtype=torch.float16) assert (data.abs() <= FP12_MAX).all().item(), f'max value = {data.abs().max().item()}' # fp16: sEEE_EEff_ffff_ffff # # fp12 type-a: sEEE_ffff_ffff # where EEE != 000 # mantissa = E-12 = -5..-11 # fp12 type-b: s000_ffff_f0GG # mantissa = G-15 = -12..-15 # fp12 type-c: s000_ffff_f1HH # mantissa = H-4 = -1..-4 # # * significant bits # 0000_0000 = 1 + 0 # 1000_0000 = 1 + 0.5 # 0100_0000 = 1 + 0.25 # 0010_0000 = 1 + 0.125 # 0001_0000 = 1 + 0.0625 # 0000_1000 = 1 + 0.03125 # 0000_0100 = 1 + 0.015625 # 0000_0010 = 1 + 0.0078125 # 0000_0001 = 1 + 0.00390625 # idata = data.view(dtype=torch.int16).view(size=(-1,)) #assert idata.numel() % 2 == 0 mask_s = 0b1000_0000_0000_0000 mask_e = 0b0111_1100_0000_0000 mask_f = 0b0000_0011_1111_1111 # sign s = ((idata & mask_s) >> 12).to(dtype=torch.uint8) & 0b1000 # exponential e = ((idata & mask_e) >> 10) - 15 e = e.clamp(-15, -1) E_mask = torch.logical_and(-11 <= e, e <= -5) E = (e + 12).to(dtype=torch.int8).view(dtype=torch.uint8) E[~E_mask] = 0 E += s E[::2] <<= 4 E[::2] += E[1::2] E = E[::2] # significants f = idata & mask_f F = (f >> 2).to(dtype=torch.uint8) ## significants of type-b G_mask = e < -11 Ge = (e + 15).to(dtype=torch.int8).view(dtype=torch.uint8) Ge = Ge.clamp(0, 3) F[G_mask] = (F[G_mask] & 0b1111_1000) + Ge[G_mask] ## significants of type-c H_mask = -5 < e He = (e + 4).to(dtype=torch.int8).view(dtype=torch.uint8) He = He.clamp(0, 3) F[H_mask] = (F[H_mask] & 0b1111_1000) + He[H_mask] + 0b100 return E, F def fp12_to_fp16_2(exp: torch.Tensor, frac: torch.Tensor): assert exp.dtype == torch.uint8 assert frac.dtype == torch.uint8 assert exp.ndim == 1 assert frac.ndim == 1 assert exp.size(0) * 2 == frac.size(0) FP16 = torch.zeros(frac.shape, dtype=torch.int16, device=frac.device) exp = exp[..., None].expand(size=(-1,2)).contiguous().view((-1,)) exp[::2] >>= 4 exp[1::2] &= 0b0000_1111 # sign FP16[:] = exp & 0b0000_1000 FP16 <<= 12 # exponential exp_e = (exp & 0b0111).to(dtype=torch.int16) exp_gh = ((frac >> 5) & 0b11).to(dtype=torch.int16) E_mask = exp_e != 0 G_mask = torch.logical_and(exp_e == 0, (frac >> 7) == 0) H_mask = torch.logical_and(exp_e == 0, (frac >> 7) == 1) # EEE | EEE+3 | << 10 | e | # --- | ----- | ------------------- | ------ | # 001 | 0100 | s001_0000_0000_0000 | 00100 = 4 -> -11 # GG | << 10 | e | # ---| ------------------- | ------ | # 00 | s000_0000_0000_0000 | 00000 = 0 -> -15 # 01 | s000_0100_0000_0000 | 00001 = 1 -> -14 # 10 | s000_1000_0000_0000 | 00010 = 2 -> -13 # 11 | s000_1100_0000_0000 | 00011 = 3 -> -12 # HH | HH+11 | << 10 | e | # ---| ---- | ------------------- | ------ | # 00 | 1011 | s010_1100_0000_0000 | 01011 = 11 -> -4 # 01 | 1100 | s011_0000_0000_0000 | 01100 = 12 -> -3 # 10 | 1101 | s011_0100_0000_0000 | 01101 = 13 -> -2 # 11 | 1110 | s011_1000_0000_0000 | 01110 = 14 -> -1 FP16 += ( ## type-a E_mask * (exp_e + 3) + # ^ EEE - 12 = -15 + a <=> a = EEE + 3 ## type-b G_mask * exp_gh + # ^ GG - 15 = -15 + a <=> a = GG ## type-c H_mask * (exp_gh + 11) # ^ HH - 4 = -15 + a <=> a = HH + 11 ) << 10 # significants FP16 += ( ## type-a E_mask * frac + ## type-b and type-c (G_mask + H_mask) * (frac << 3) ).to(dtype=torch.int16) << 2 # TODO pad random value? return FP16.view(dtype=torch.float16) # s_eee_fff (fp12) -> S_EEEEE (fp16) #EXP_MAP = torch.tensor([ # # -15 -14 -13 -12 -4 -3 -2 -1 # # 0_000_000 0_000_001 0_000_010 0_000_011 0_000_100 0_000_101 0_000_110 0_000_111 # 0b0_00000, 0b0_00001, 0b0_00010, 0b0_00011, 0b0_01011, 0b0_01100, 0b0_01101, 0b0_01110, # # # -11 # # 0_001_000 0_001_001 0_001_010 0_001_011 0_001_100 0_001_101 0_001_110 0_001_111 # 0b0_00100, 0b0_00100, 0b0_00100, 0b0_00100, 0b0_00100, 0b0_00100, 0b0_00100, 0b0_00100, # # # -10 # # 0_010_000 0_010_001 0_010_010 0_010_011 0_010_100 0_010_101 0_010_110 0_010_111 # 0b0_00101, 0b0_00101, 0b0_00101, 0b0_00101, 0b0_00101, 0b0_00101, 0b0_00101, 0b0_00101, # # # -9 # # 0_011_000 0_011_001 0_011_010 0_011_011 0_011_100 0_011_101 0_011_110 0_011_111 # 0b0_00110, 0b0_00110, 0b0_00110, 0b0_00110, 0b0_00110, 0b0_00110, 0b0_00110, 0b0_00110, # # # -8 # # 0_100_000 0_100_001 0_100_010 0_100_011 0_100_100 0_100_101 0_100_110 0_100_111 # 0b0_00111, 0b0_00111, 0b0_00111, 0b0_00111, 0b0_00111, 0b0_00111, 0b0_00111, 0b0_00111, # # # -7 # # 0_101_000 0_101_001 0_101_010 0_101_011 0_101_100 0_101_101 0_101_110 0_101_111 # 0b0_01000, 0b0_01000, 0b0_01000, 0b0_01000, 0b0_01000, 0b0_01000, 0b0_01000, 0b0_01000, # # # -6 # # 0_110_000 0_110_001 0_110_010 0_110_011 0_110_100 0_110_101 0_110_110 0_110_111 # 0b0_01001, 0b0_01001, 0b0_01001, 0b0_01001, 0b0_01001, 0b0_01001, 0b0_01001, 0b0_01001, # # # -5 # # 0_111_000 0_111_001 0_111_010 0_111_011 0_111_100 0_111_101 0_111_110 0_111_111 # 0b0_01010, 0b0_01010, 0b0_01010, 0b0_01010, 0b0_01010, 0b0_01010, 0b0_01010, 0b0_01010, # # # -15 -14 -13 -12 -4 -3 -2 -1 # # 1_000_000 1_000_001 1_000_010 1_000_011 1_000_100 1_000_101 1_000_110 1_000_111 # 0b1_00000, 0b1_00001, 0b1_00010, 0b1_00011, 0b1_01011, 0b1_01100, 0b1_01101, 0b1_01110, # # # -11 # # 1_001_000 1_001_001 1_001_010 1_001_011 1_001_100 1_001_101 1_001_110 1_001_111 # 0b1_00100, 0b1_00100, 0b1_00100, 0b1_00100, 0b1_00100, 0b1_00100, 0b1_00100, 0b1_00100, # # # -10 # # 1_010_000 1_010_001 1_010_010 1_010_011 1_010_100 1_010_101 1_010_110 1_010_111 # 0b1_00101, 0b1_00101, 0b1_00101, 0b1_00101, 0b1_00101, 0b1_00101, 0b1_00101, 0b1_00101, # # # -9 # # 1_011_000 1_011_001 1_011_010 1_011_011 1_011_100 1_011_101 1_011_110 1_011_111 # 0b1_00110, 0b1_00110, 0b1_00110, 0b1_00110, 0b1_00110, 0b1_00110, 0b1_00110, 0b1_00110, # # # -8 # # 1_100_000 1_100_001 1_100_010 1_100_011 1_100_100 1_100_101 1_100_110 1_100_111 # 0b1_00111, 0b1_00111, 0b1_00111, 0b1_00111, 0b1_00111, 0b1_00111, 0b1_00111, 0b1_00111, # # # -7 # # 1_101_000 1_101_001 1_101_010 1_101_011 1_101_100 1_101_101 1_101_110 1_101_111 # 0b1_01000, 0b1_01000, 0b1_01000, 0b1_01000, 0b1_01000, 0b1_01000, 0b1_01000, 0b1_01000, # # # -6 # # 1_110_000 1_110_001 1_110_010 1_110_011 1_110_100 1_110_101 1_110_110 1_110_111 # 0b1_01001, 0b1_01001, 0b1_01001, 0b1_01001, 0b1_01001, 0b1_01001, 0b1_01001, 0b1_01001, # # # -5 # # 1_111_000 1_111_001 1_111_010 1_111_011 1_111_100 1_111_101 1_111_110 1_111_111 # 0b1_01010, 0b1_01010, 0b1_01010, 0b1_01010, 0b1_01010, 0b1_01010, 0b1_01010, 0b1_01010, #], dtype=torch.int16) << 10 EXP_MASK = torch.tensor([ 0b1111_0000, 0b0000_1111 ], dtype=torch.uint8) #def fp12_to_fp16_1(exp: torch.Tensor, frac: torch.Tensor): # global EXP_MAP, EXP_MASK # # assert exp.dtype == torch.uint8 # assert frac.dtype == torch.uint8 # assert exp.ndim == 1 # assert frac.ndim == 1 # assert exp.size(0) * 2 == frac.size(0) # # if EXP_MAP.device != exp.device: # EXP_MAP = EXP_MAP.to(exp.device) # if EXP_MASK.device != exp.device: # EXP_MASK = EXP_MASK.to(exp.device) # # exp = exp.repeat_interleave(2).view((-1,2)) # exp.bitwise_and_(EXP_MASK) # exp[..., 0] >>= 1 # exp[..., 1] <<= 3 # exp = exp.view((-1,)) # # 0111_1000 0111_1000 # # E_mask = torch.logical_and(exp != 0, exp != 0b0100_0000).to(dtype=torch.int16) # # # take upper 6-bits from bitmap # exp = torch.take(EXP_MAP, (exp + (frac & 0b0000_0111)).long()) # # f_mask = (0b0000_0111 * E_mask) + 0b1111_1000 # frac = frac.to(dtype=torch.int16) # frac.bitwise_and_(f_mask) # frac.bitwise_left_shift_(2) # # FP16 = exp.add_(frac) # # return FP16.view(dtype=torch.float16) FP12_TO_FP16 = torch.tensor([ 0b0_00000_0000000000, 0b0_00001_0000000000, 0b0_00010_0000000000, 0b0_00011_0000000000, 0b0_01011_0000000000, 0b0_01100_0000000000, 0b0_01101_0000000000, 0b0_01110_0000000000, 0b0_00000_0000100000, 0b0_00001_0000100000, 0b0_00010_0000100000, 0b0_00011_0000100000, 0b0_01011_0000100000, 0b0_01100_0000100000, 0b0_01101_0000100000, 0b0_01110_0000100000, 0b0_00000_0001000000, 0b0_00001_0001000000, 0b0_00010_0001000000, 0b0_00011_0001000000, 0b0_01011_0001000000, 0b0_01100_0001000000, 0b0_01101_0001000000, 0b0_01110_0001000000, 0b0_00000_0001100000, 0b0_00001_0001100000, 0b0_00010_0001100000, 0b0_00011_0001100000, 0b0_01011_0001100000, 0b0_01100_0001100000, 0b0_01101_0001100000, 0b0_01110_0001100000, 0b0_00000_0010000000, 0b0_00001_0010000000, 0b0_00010_0010000000, 0b0_00011_0010000000, 0b0_01011_0010000000, 0b0_01100_0010000000, 0b0_01101_0010000000, 0b0_01110_0010000000, 0b0_00000_0010100000, 0b0_00001_0010100000, 0b0_00010_0010100000, 0b0_00011_0010100000, 0b0_01011_0010100000, 0b0_01100_0010100000, 0b0_01101_0010100000, 0b0_01110_0010100000, 0b0_00000_0011000000, 0b0_00001_0011000000, 0b0_00010_0011000000, 0b0_00011_0011000000, 0b0_01011_0011000000, 0b0_01100_0011000000, 0b0_01101_0011000000, 0b0_01110_0011000000, 0b0_00000_0011100000, 0b0_00001_0011100000, 0b0_00010_0011100000, 0b0_00011_0011100000, 0b0_01011_0011100000, 0b0_01100_0011100000, 0b0_01101_0011100000, 0b0_01110_0011100000, 0b0_00000_0100000000, 0b0_00001_0100000000, 0b0_00010_0100000000, 0b0_00011_0100000000, 0b0_01011_0100000000, 0b0_01100_0100000000, 0b0_01101_0100000000, 0b0_01110_0100000000, 0b0_00000_0100100000, 0b0_00001_0100100000, 0b0_00010_0100100000, 0b0_00011_0100100000, 0b0_01011_0100100000, 0b0_01100_0100100000, 0b0_01101_0100100000, 0b0_01110_0100100000, 0b0_00000_0101000000, 0b0_00001_0101000000, 0b0_00010_0101000000, 0b0_00011_0101000000, 0b0_01011_0101000000, 0b0_01100_0101000000, 0b0_01101_0101000000, 0b0_01110_0101000000, 0b0_00000_0101100000, 0b0_00001_0101100000, 0b0_00010_0101100000, 0b0_00011_0101100000, 0b0_01011_0101100000, 0b0_01100_0101100000, 0b0_01101_0101100000, 0b0_01110_0101100000, 0b0_00000_0110000000, 0b0_00001_0110000000, 0b0_00010_0110000000, 0b0_00011_0110000000, 0b0_01011_0110000000, 0b0_01100_0110000000, 0b0_01101_0110000000, 0b0_01110_0110000000, 0b0_00000_0110100000, 0b0_00001_0110100000, 0b0_00010_0110100000, 0b0_00011_0110100000, 0b0_01011_0110100000, 0b0_01100_0110100000, 0b0_01101_0110100000, 0b0_01110_0110100000, 0b0_00000_0111000000, 0b0_00001_0111000000, 0b0_00010_0111000000, 0b0_00011_0111000000, 0b0_01011_0111000000, 0b0_01100_0111000000, 0b0_01101_0111000000, 0b0_01110_0111000000, 0b0_00000_0111100000, 0b0_00001_0111100000, 0b0_00010_0111100000, 0b0_00011_0111100000, 0b0_01011_0111100000, 0b0_01100_0111100000, 0b0_01101_0111100000, 0b0_01110_0111100000, 0b0_00000_1000000000, 0b0_00001_1000000000, 0b0_00010_1000000000, 0b0_00011_1000000000, 0b0_01011_1000000000, 0b0_01100_1000000000, 0b0_01101_1000000000, 0b0_01110_1000000000, 0b0_00000_1000100000, 0b0_00001_1000100000, 0b0_00010_1000100000, 0b0_00011_1000100000, 0b0_01011_1000100000, 0b0_01100_1000100000, 0b0_01101_1000100000, 0b0_01110_1000100000, 0b0_00000_1001000000, 0b0_00001_1001000000, 0b0_00010_1001000000, 0b0_00011_1001000000, 0b0_01011_1001000000, 0b0_01100_1001000000, 0b0_01101_1001000000, 0b0_01110_1001000000, 0b0_00000_1001100000, 0b0_00001_1001100000, 0b0_00010_1001100000, 0b0_00011_1001100000, 0b0_01011_1001100000, 0b0_01100_1001100000, 0b0_01101_1001100000, 0b0_01110_1001100000, 0b0_00000_1010000000, 0b0_00001_1010000000, 0b0_00010_1010000000, 0b0_00011_1010000000, 0b0_01011_1010000000, 0b0_01100_1010000000, 0b0_01101_1010000000, 0b0_01110_1010000000, 0b0_00000_1010100000, 0b0_00001_1010100000, 0b0_00010_1010100000, 0b0_00011_1010100000, 0b0_01011_1010100000, 0b0_01100_1010100000, 0b0_01101_1010100000, 0b0_01110_1010100000, 0b0_00000_1011000000, 0b0_00001_1011000000, 0b0_00010_1011000000, 0b0_00011_1011000000, 0b0_01011_1011000000, 0b0_01100_1011000000, 0b0_01101_1011000000, 0b0_01110_1011000000, 0b0_00000_1011100000, 0b0_00001_1011100000, 0b0_00010_1011100000, 0b0_00011_1011100000, 0b0_01011_1011100000, 0b0_01100_1011100000, 0b0_01101_1011100000, 0b0_01110_1011100000, 0b0_00000_1100000000, 0b0_00001_1100000000, 0b0_00010_1100000000, 0b0_00011_1100000000, 0b0_01011_1100000000, 0b0_01100_1100000000, 0b0_01101_1100000000, 0b0_01110_1100000000, 0b0_00000_1100100000, 0b0_00001_1100100000, 0b0_00010_1100100000, 0b0_00011_1100100000, 0b0_01011_1100100000, 0b0_01100_1100100000, 0b0_01101_1100100000, 0b0_01110_1100100000, 0b0_00000_1101000000, 0b0_00001_1101000000, 0b0_00010_1101000000, 0b0_00011_1101000000, 0b0_01011_1101000000, 0b0_01100_1101000000, 0b0_01101_1101000000, 0b0_01110_1101000000, 0b0_00000_1101100000, 0b0_00001_1101100000, 0b0_00010_1101100000, 0b0_00011_1101100000, 0b0_01011_1101100000, 0b0_01100_1101100000, 0b0_01101_1101100000, 0b0_01110_1101100000, 0b0_00000_1110000000, 0b0_00001_1110000000, 0b0_00010_1110000000, 0b0_00011_1110000000, 0b0_01011_1110000000, 0b0_01100_1110000000, 0b0_01101_1110000000, 0b0_01110_1110000000, 0b0_00000_1110100000, 0b0_00001_1110100000, 0b0_00010_1110100000, 0b0_00011_1110100000, 0b0_01011_1110100000, 0b0_01100_1110100000, 0b0_01101_1110100000, 0b0_01110_1110100000, 0b0_00000_1111000000, 0b0_00001_1111000000, 0b0_00010_1111000000, 0b0_00011_1111000000, 0b0_01011_1111000000, 0b0_01100_1111000000, 0b0_01101_1111000000, 0b0_01110_1111000000, 0b0_00000_1111100000, 0b0_00001_1111100000, 0b0_00010_1111100000, 0b0_00011_1111100000, 0b0_01011_1111100000, 0b0_01100_1111100000, 0b0_01101_1111100000, 0b0_01110_1111100000, 0b0_00100_0000000000, 0b0_00100_0000000100, 0b0_00100_0000001000, 0b0_00100_0000001100, 0b0_00100_0000010000, 0b0_00100_0000010100, 0b0_00100_0000011000, 0b0_00100_0000011100, 0b0_00100_0000100000, 0b0_00100_0000100100, 0b0_00100_0000101000, 0b0_00100_0000101100, 0b0_00100_0000110000, 0b0_00100_0000110100, 0b0_00100_0000111000, 0b0_00100_0000111100, 0b0_00100_0001000000, 0b0_00100_0001000100, 0b0_00100_0001001000, 0b0_00100_0001001100, 0b0_00100_0001010000, 0b0_00100_0001010100, 0b0_00100_0001011000, 0b0_00100_0001011100, 0b0_00100_0001100000, 0b0_00100_0001100100, 0b0_00100_0001101000, 0b0_00100_0001101100, 0b0_00100_0001110000, 0b0_00100_0001110100, 0b0_00100_0001111000, 0b0_00100_0001111100, 0b0_00100_0010000000, 0b0_00100_0010000100, 0b0_00100_0010001000, 0b0_00100_0010001100, 0b0_00100_0010010000, 0b0_00100_0010010100, 0b0_00100_0010011000, 0b0_00100_0010011100, 0b0_00100_0010100000, 0b0_00100_0010100100, 0b0_00100_0010101000, 0b0_00100_0010101100, 0b0_00100_0010110000, 0b0_00100_0010110100, 0b0_00100_0010111000, 0b0_00100_0010111100, 0b0_00100_0011000000, 0b0_00100_0011000100, 0b0_00100_0011001000, 0b0_00100_0011001100, 0b0_00100_0011010000, 0b0_00100_0011010100, 0b0_00100_0011011000, 0b0_00100_0011011100, 0b0_00100_0011100000, 0b0_00100_0011100100, 0b0_00100_0011101000, 0b0_00100_0011101100, 0b0_00100_0011110000, 0b0_00100_0011110100, 0b0_00100_0011111000, 0b0_00100_0011111100, 0b0_00100_0100000000, 0b0_00100_0100000100, 0b0_00100_0100001000, 0b0_00100_0100001100, 0b0_00100_0100010000, 0b0_00100_0100010100, 0b0_00100_0100011000, 0b0_00100_0100011100, 0b0_00100_0100100000, 0b0_00100_0100100100, 0b0_00100_0100101000, 0b0_00100_0100101100, 0b0_00100_0100110000, 0b0_00100_0100110100, 0b0_00100_0100111000, 0b0_00100_0100111100, 0b0_00100_0101000000, 0b0_00100_0101000100, 0b0_00100_0101001000, 0b0_00100_0101001100, 0b0_00100_0101010000, 0b0_00100_0101010100, 0b0_00100_0101011000, 0b0_00100_0101011100, 0b0_00100_0101100000, 0b0_00100_0101100100, 0b0_00100_0101101000, 0b0_00100_0101101100, 0b0_00100_0101110000, 0b0_00100_0101110100, 0b0_00100_0101111000, 0b0_00100_0101111100, 0b0_00100_0110000000, 0b0_00100_0110000100, 0b0_00100_0110001000, 0b0_00100_0110001100, 0b0_00100_0110010000, 0b0_00100_0110010100, 0b0_00100_0110011000, 0b0_00100_0110011100, 0b0_00100_0110100000, 0b0_00100_0110100100, 0b0_00100_0110101000, 0b0_00100_0110101100, 0b0_00100_0110110000, 0b0_00100_0110110100, 0b0_00100_0110111000, 0b0_00100_0110111100, 0b0_00100_0111000000, 0b0_00100_0111000100, 0b0_00100_0111001000, 0b0_00100_0111001100, 0b0_00100_0111010000, 0b0_00100_0111010100, 0b0_00100_0111011000, 0b0_00100_0111011100, 0b0_00100_0111100000, 0b0_00100_0111100100, 0b0_00100_0111101000, 0b0_00100_0111101100, 0b0_00100_0111110000, 0b0_00100_0111110100, 0b0_00100_0111111000, 0b0_00100_0111111100, 0b0_00100_1000000000, 0b0_00100_1000000100, 0b0_00100_1000001000, 0b0_00100_1000001100, 0b0_00100_1000010000, 0b0_00100_1000010100, 0b0_00100_1000011000, 0b0_00100_1000011100, 0b0_00100_1000100000, 0b0_00100_1000100100, 0b0_00100_1000101000, 0b0_00100_1000101100, 0b0_00100_1000110000, 0b0_00100_1000110100, 0b0_00100_1000111000, 0b0_00100_1000111100, 0b0_00100_1001000000, 0b0_00100_1001000100, 0b0_00100_1001001000, 0b0_00100_1001001100, 0b0_00100_1001010000, 0b0_00100_1001010100, 0b0_00100_1001011000, 0b0_00100_1001011100, 0b0_00100_1001100000, 0b0_00100_1001100100, 0b0_00100_1001101000, 0b0_00100_1001101100, 0b0_00100_1001110000, 0b0_00100_1001110100, 0b0_00100_1001111000, 0b0_00100_1001111100, 0b0_00100_1010000000, 0b0_00100_1010000100, 0b0_00100_1010001000, 0b0_00100_1010001100, 0b0_00100_1010010000, 0b0_00100_1010010100, 0b0_00100_1010011000, 0b0_00100_1010011100, 0b0_00100_1010100000, 0b0_00100_1010100100, 0b0_00100_1010101000, 0b0_00100_1010101100, 0b0_00100_1010110000, 0b0_00100_1010110100, 0b0_00100_1010111000, 0b0_00100_1010111100, 0b0_00100_1011000000, 0b0_00100_1011000100, 0b0_00100_1011001000, 0b0_00100_1011001100, 0b0_00100_1011010000, 0b0_00100_1011010100, 0b0_00100_1011011000, 0b0_00100_1011011100, 0b0_00100_1011100000, 0b0_00100_1011100100, 0b0_00100_1011101000, 0b0_00100_1011101100, 0b0_00100_1011110000, 0b0_00100_1011110100, 0b0_00100_1011111000, 0b0_00100_1011111100, 0b0_00100_1100000000, 0b0_00100_1100000100, 0b0_00100_1100001000, 0b0_00100_1100001100, 0b0_00100_1100010000, 0b0_00100_1100010100, 0b0_00100_1100011000, 0b0_00100_1100011100, 0b0_00100_1100100000, 0b0_00100_1100100100, 0b0_00100_1100101000, 0b0_00100_1100101100, 0b0_00100_1100110000, 0b0_00100_1100110100, 0b0_00100_1100111000, 0b0_00100_1100111100, 0b0_00100_1101000000, 0b0_00100_1101000100, 0b0_00100_1101001000, 0b0_00100_1101001100, 0b0_00100_1101010000, 0b0_00100_1101010100, 0b0_00100_1101011000, 0b0_00100_1101011100, 0b0_00100_1101100000, 0b0_00100_1101100100, 0b0_00100_1101101000, 0b0_00100_1101101100, 0b0_00100_1101110000, 0b0_00100_1101110100, 0b0_00100_1101111000, 0b0_00100_1101111100, 0b0_00100_1110000000, 0b0_00100_1110000100, 0b0_00100_1110001000, 0b0_00100_1110001100, 0b0_00100_1110010000, 0b0_00100_1110010100, 0b0_00100_1110011000, 0b0_00100_1110011100, 0b0_00100_1110100000, 0b0_00100_1110100100, 0b0_00100_1110101000, 0b0_00100_1110101100, 0b0_00100_1110110000, 0b0_00100_1110110100, 0b0_00100_1110111000, 0b0_00100_1110111100, 0b0_00100_1111000000, 0b0_00100_1111000100, 0b0_00100_1111001000, 0b0_00100_1111001100, 0b0_00100_1111010000, 0b0_00100_1111010100, 0b0_00100_1111011000, 0b0_00100_1111011100, 0b0_00100_1111100000, 0b0_00100_1111100100, 0b0_00100_1111101000, 0b0_00100_1111101100, 0b0_00100_1111110000, 0b0_00100_1111110100, 0b0_00100_1111111000, 0b0_00100_1111111100, 0b0_00101_0000000000, 0b0_00101_0000000100, 0b0_00101_0000001000, 0b0_00101_0000001100, 0b0_00101_0000010000, 0b0_00101_0000010100, 0b0_00101_0000011000, 0b0_00101_0000011100, 0b0_00101_0000100000, 0b0_00101_0000100100, 0b0_00101_0000101000, 0b0_00101_0000101100, 0b0_00101_0000110000, 0b0_00101_0000110100, 0b0_00101_0000111000, 0b0_00101_0000111100, 0b0_00101_0001000000, 0b0_00101_0001000100, 0b0_00101_0001001000, 0b0_00101_0001001100, 0b0_00101_0001010000, 0b0_00101_0001010100, 0b0_00101_0001011000, 0b0_00101_0001011100, 0b0_00101_0001100000, 0b0_00101_0001100100, 0b0_00101_0001101000, 0b0_00101_0001101100, 0b0_00101_0001110000, 0b0_00101_0001110100, 0b0_00101_0001111000, 0b0_00101_0001111100, 0b0_00101_0010000000, 0b0_00101_0010000100, 0b0_00101_0010001000, 0b0_00101_0010001100, 0b0_00101_0010010000, 0b0_00101_0010010100, 0b0_00101_0010011000, 0b0_00101_0010011100, 0b0_00101_0010100000, 0b0_00101_0010100100, 0b0_00101_0010101000, 0b0_00101_0010101100, 0b0_00101_0010110000, 0b0_00101_0010110100, 0b0_00101_0010111000, 0b0_00101_0010111100, 0b0_00101_0011000000, 0b0_00101_0011000100, 0b0_00101_0011001000, 0b0_00101_0011001100, 0b0_00101_0011010000, 0b0_00101_0011010100, 0b0_00101_0011011000, 0b0_00101_0011011100, 0b0_00101_0011100000, 0b0_00101_0011100100, 0b0_00101_0011101000, 0b0_00101_0011101100, 0b0_00101_0011110000, 0b0_00101_0011110100, 0b0_00101_0011111000, 0b0_00101_0011111100, 0b0_00101_0100000000, 0b0_00101_0100000100, 0b0_00101_0100001000, 0b0_00101_0100001100, 0b0_00101_0100010000, 0b0_00101_0100010100, 0b0_00101_0100011000, 0b0_00101_0100011100, 0b0_00101_0100100000, 0b0_00101_0100100100, 0b0_00101_0100101000, 0b0_00101_0100101100, 0b0_00101_0100110000, 0b0_00101_0100110100, 0b0_00101_0100111000, 0b0_00101_0100111100, 0b0_00101_0101000000, 0b0_00101_0101000100, 0b0_00101_0101001000, 0b0_00101_0101001100, 0b0_00101_0101010000, 0b0_00101_0101010100, 0b0_00101_0101011000, 0b0_00101_0101011100, 0b0_00101_0101100000, 0b0_00101_0101100100, 0b0_00101_0101101000, 0b0_00101_0101101100, 0b0_00101_0101110000, 0b0_00101_0101110100, 0b0_00101_0101111000, 0b0_00101_0101111100, 0b0_00101_0110000000, 0b0_00101_0110000100, 0b0_00101_0110001000, 0b0_00101_0110001100, 0b0_00101_0110010000, 0b0_00101_0110010100, 0b0_00101_0110011000, 0b0_00101_0110011100, 0b0_00101_0110100000, 0b0_00101_0110100100, 0b0_00101_0110101000, 0b0_00101_0110101100, 0b0_00101_0110110000, 0b0_00101_0110110100, 0b0_00101_0110111000, 0b0_00101_0110111100, 0b0_00101_0111000000, 0b0_00101_0111000100, 0b0_00101_0111001000, 0b0_00101_0111001100, 0b0_00101_0111010000, 0b0_00101_0111010100, 0b0_00101_0111011000, 0b0_00101_0111011100, 0b0_00101_0111100000, 0b0_00101_0111100100, 0b0_00101_0111101000, 0b0_00101_0111101100, 0b0_00101_0111110000, 0b0_00101_0111110100, 0b0_00101_0111111000, 0b0_00101_0111111100, 0b0_00101_1000000000, 0b0_00101_1000000100, 0b0_00101_1000001000, 0b0_00101_1000001100, 0b0_00101_1000010000, 0b0_00101_1000010100, 0b0_00101_1000011000, 0b0_00101_1000011100, 0b0_00101_1000100000, 0b0_00101_1000100100, 0b0_00101_1000101000, 0b0_00101_1000101100, 0b0_00101_1000110000, 0b0_00101_1000110100, 0b0_00101_1000111000, 0b0_00101_1000111100, 0b0_00101_1001000000, 0b0_00101_1001000100, 0b0_00101_1001001000, 0b0_00101_1001001100, 0b0_00101_1001010000, 0b0_00101_1001010100, 0b0_00101_1001011000, 0b0_00101_1001011100, 0b0_00101_1001100000, 0b0_00101_1001100100, 0b0_00101_1001101000, 0b0_00101_1001101100, 0b0_00101_1001110000, 0b0_00101_1001110100, 0b0_00101_1001111000, 0b0_00101_1001111100, 0b0_00101_1010000000, 0b0_00101_1010000100, 0b0_00101_1010001000, 0b0_00101_1010001100, 0b0_00101_1010010000, 0b0_00101_1010010100, 0b0_00101_1010011000, 0b0_00101_1010011100, 0b0_00101_1010100000, 0b0_00101_1010100100, 0b0_00101_1010101000, 0b0_00101_1010101100, 0b0_00101_1010110000, 0b0_00101_1010110100, 0b0_00101_1010111000, 0b0_00101_1010111100, 0b0_00101_1011000000, 0b0_00101_1011000100, 0b0_00101_1011001000, 0b0_00101_1011001100, 0b0_00101_1011010000, 0b0_00101_1011010100, 0b0_00101_1011011000, 0b0_00101_1011011100, 0b0_00101_1011100000, 0b0_00101_1011100100, 0b0_00101_1011101000, 0b0_00101_1011101100, 0b0_00101_1011110000, 0b0_00101_1011110100, 0b0_00101_1011111000, 0b0_00101_1011111100, 0b0_00101_1100000000, 0b0_00101_1100000100, 0b0_00101_1100001000, 0b0_00101_1100001100, 0b0_00101_1100010000, 0b0_00101_1100010100, 0b0_00101_1100011000, 0b0_00101_1100011100, 0b0_00101_1100100000, 0b0_00101_1100100100, 0b0_00101_1100101000, 0b0_00101_1100101100, 0b0_00101_1100110000, 0b0_00101_1100110100, 0b0_00101_1100111000, 0b0_00101_1100111100, 0b0_00101_1101000000, 0b0_00101_1101000100, 0b0_00101_1101001000, 0b0_00101_1101001100, 0b0_00101_1101010000, 0b0_00101_1101010100, 0b0_00101_1101011000, 0b0_00101_1101011100, 0b0_00101_1101100000, 0b0_00101_1101100100, 0b0_00101_1101101000, 0b0_00101_1101101100, 0b0_00101_1101110000, 0b0_00101_1101110100, 0b0_00101_1101111000, 0b0_00101_1101111100, 0b0_00101_1110000000, 0b0_00101_1110000100, 0b0_00101_1110001000, 0b0_00101_1110001100, 0b0_00101_1110010000, 0b0_00101_1110010100, 0b0_00101_1110011000, 0b0_00101_1110011100, 0b0_00101_1110100000, 0b0_00101_1110100100, 0b0_00101_1110101000, 0b0_00101_1110101100, 0b0_00101_1110110000, 0b0_00101_1110110100, 0b0_00101_1110111000, 0b0_00101_1110111100, 0b0_00101_1111000000, 0b0_00101_1111000100, 0b0_00101_1111001000, 0b0_00101_1111001100, 0b0_00101_1111010000, 0b0_00101_1111010100, 0b0_00101_1111011000, 0b0_00101_1111011100, 0b0_00101_1111100000, 0b0_00101_1111100100, 0b0_00101_1111101000, 0b0_00101_1111101100, 0b0_00101_1111110000, 0b0_00101_1111110100, 0b0_00101_1111111000, 0b0_00101_1111111100, 0b0_00110_0000000000, 0b0_00110_0000000100, 0b0_00110_0000001000, 0b0_00110_0000001100, 0b0_00110_0000010000, 0b0_00110_0000010100, 0b0_00110_0000011000, 0b0_00110_0000011100, 0b0_00110_0000100000, 0b0_00110_0000100100, 0b0_00110_0000101000, 0b0_00110_0000101100, 0b0_00110_0000110000, 0b0_00110_0000110100, 0b0_00110_0000111000, 0b0_00110_0000111100, 0b0_00110_0001000000, 0b0_00110_0001000100, 0b0_00110_0001001000, 0b0_00110_0001001100, 0b0_00110_0001010000, 0b0_00110_0001010100, 0b0_00110_0001011000, 0b0_00110_0001011100, 0b0_00110_0001100000, 0b0_00110_0001100100, 0b0_00110_0001101000, 0b0_00110_0001101100, 0b0_00110_0001110000, 0b0_00110_0001110100, 0b0_00110_0001111000, 0b0_00110_0001111100, 0b0_00110_0010000000, 0b0_00110_0010000100, 0b0_00110_0010001000, 0b0_00110_0010001100, 0b0_00110_0010010000, 0b0_00110_0010010100, 0b0_00110_0010011000, 0b0_00110_0010011100, 0b0_00110_0010100000, 0b0_00110_0010100100, 0b0_00110_0010101000, 0b0_00110_0010101100, 0b0_00110_0010110000, 0b0_00110_0010110100, 0b0_00110_0010111000, 0b0_00110_0010111100, 0b0_00110_0011000000, 0b0_00110_0011000100, 0b0_00110_0011001000, 0b0_00110_0011001100, 0b0_00110_0011010000, 0b0_00110_0011010100, 0b0_00110_0011011000, 0b0_00110_0011011100, 0b0_00110_0011100000, 0b0_00110_0011100100, 0b0_00110_0011101000, 0b0_00110_0011101100, 0b0_00110_0011110000, 0b0_00110_0011110100, 0b0_00110_0011111000, 0b0_00110_0011111100, 0b0_00110_0100000000, 0b0_00110_0100000100, 0b0_00110_0100001000, 0b0_00110_0100001100, 0b0_00110_0100010000, 0b0_00110_0100010100, 0b0_00110_0100011000, 0b0_00110_0100011100, 0b0_00110_0100100000, 0b0_00110_0100100100, 0b0_00110_0100101000, 0b0_00110_0100101100, 0b0_00110_0100110000, 0b0_00110_0100110100, 0b0_00110_0100111000, 0b0_00110_0100111100, 0b0_00110_0101000000, 0b0_00110_0101000100, 0b0_00110_0101001000, 0b0_00110_0101001100, 0b0_00110_0101010000, 0b0_00110_0101010100, 0b0_00110_0101011000, 0b0_00110_0101011100, 0b0_00110_0101100000, 0b0_00110_0101100100, 0b0_00110_0101101000, 0b0_00110_0101101100, 0b0_00110_0101110000, 0b0_00110_0101110100, 0b0_00110_0101111000, 0b0_00110_0101111100, 0b0_00110_0110000000, 0b0_00110_0110000100, 0b0_00110_0110001000, 0b0_00110_0110001100, 0b0_00110_0110010000, 0b0_00110_0110010100, 0b0_00110_0110011000, 0b0_00110_0110011100, 0b0_00110_0110100000, 0b0_00110_0110100100, 0b0_00110_0110101000, 0b0_00110_0110101100, 0b0_00110_0110110000, 0b0_00110_0110110100, 0b0_00110_0110111000, 0b0_00110_0110111100, 0b0_00110_0111000000, 0b0_00110_0111000100, 0b0_00110_0111001000, 0b0_00110_0111001100, 0b0_00110_0111010000, 0b0_00110_0111010100, 0b0_00110_0111011000, 0b0_00110_0111011100, 0b0_00110_0111100000, 0b0_00110_0111100100, 0b0_00110_0111101000, 0b0_00110_0111101100, 0b0_00110_0111110000, 0b0_00110_0111110100, 0b0_00110_0111111000, 0b0_00110_0111111100, 0b0_00110_1000000000, 0b0_00110_1000000100, 0b0_00110_1000001000, 0b0_00110_1000001100, 0b0_00110_1000010000, 0b0_00110_1000010100, 0b0_00110_1000011000, 0b0_00110_1000011100, 0b0_00110_1000100000, 0b0_00110_1000100100, 0b0_00110_1000101000, 0b0_00110_1000101100, 0b0_00110_1000110000, 0b0_00110_1000110100, 0b0_00110_1000111000, 0b0_00110_1000111100, 0b0_00110_1001000000, 0b0_00110_1001000100, 0b0_00110_1001001000, 0b0_00110_1001001100, 0b0_00110_1001010000, 0b0_00110_1001010100, 0b0_00110_1001011000, 0b0_00110_1001011100, 0b0_00110_1001100000, 0b0_00110_1001100100, 0b0_00110_1001101000, 0b0_00110_1001101100, 0b0_00110_1001110000, 0b0_00110_1001110100, 0b0_00110_1001111000, 0b0_00110_1001111100, 0b0_00110_1010000000, 0b0_00110_1010000100, 0b0_00110_1010001000, 0b0_00110_1010001100, 0b0_00110_1010010000, 0b0_00110_1010010100, 0b0_00110_1010011000, 0b0_00110_1010011100, 0b0_00110_1010100000, 0b0_00110_1010100100, 0b0_00110_1010101000, 0b0_00110_1010101100, 0b0_00110_1010110000, 0b0_00110_1010110100, 0b0_00110_1010111000, 0b0_00110_1010111100, 0b0_00110_1011000000, 0b0_00110_1011000100, 0b0_00110_1011001000, 0b0_00110_1011001100, 0b0_00110_1011010000, 0b0_00110_1011010100, 0b0_00110_1011011000, 0b0_00110_1011011100, 0b0_00110_1011100000, 0b0_00110_1011100100, 0b0_00110_1011101000, 0b0_00110_1011101100, 0b0_00110_1011110000, 0b0_00110_1011110100, 0b0_00110_1011111000, 0b0_00110_1011111100, 0b0_00110_1100000000, 0b0_00110_1100000100, 0b0_00110_1100001000, 0b0_00110_1100001100, 0b0_00110_1100010000, 0b0_00110_1100010100, 0b0_00110_1100011000, 0b0_00110_1100011100, 0b0_00110_1100100000, 0b0_00110_1100100100, 0b0_00110_1100101000, 0b0_00110_1100101100, 0b0_00110_1100110000, 0b0_00110_1100110100, 0b0_00110_1100111000, 0b0_00110_1100111100, 0b0_00110_1101000000, 0b0_00110_1101000100, 0b0_00110_1101001000, 0b0_00110_1101001100, 0b0_00110_1101010000, 0b0_00110_1101010100, 0b0_00110_1101011000, 0b0_00110_1101011100, 0b0_00110_1101100000, 0b0_00110_1101100100, 0b0_00110_1101101000, 0b0_00110_1101101100, 0b0_00110_1101110000, 0b0_00110_1101110100, 0b0_00110_1101111000, 0b0_00110_1101111100, 0b0_00110_1110000000, 0b0_00110_1110000100, 0b0_00110_1110001000, 0b0_00110_1110001100, 0b0_00110_1110010000, 0b0_00110_1110010100, 0b0_00110_1110011000, 0b0_00110_1110011100, 0b0_00110_1110100000, 0b0_00110_1110100100, 0b0_00110_1110101000, 0b0_00110_1110101100, 0b0_00110_1110110000, 0b0_00110_1110110100, 0b0_00110_1110111000, 0b0_00110_1110111100, 0b0_00110_1111000000, 0b0_00110_1111000100, 0b0_00110_1111001000, 0b0_00110_1111001100, 0b0_00110_1111010000, 0b0_00110_1111010100, 0b0_00110_1111011000, 0b0_00110_1111011100, 0b0_00110_1111100000, 0b0_00110_1111100100, 0b0_00110_1111101000, 0b0_00110_1111101100, 0b0_00110_1111110000, 0b0_00110_1111110100, 0b0_00110_1111111000, 0b0_00110_1111111100, 0b0_00111_0000000000, 0b0_00111_0000000100, 0b0_00111_0000001000, 0b0_00111_0000001100, 0b0_00111_0000010000, 0b0_00111_0000010100, 0b0_00111_0000011000, 0b0_00111_0000011100, 0b0_00111_0000100000, 0b0_00111_0000100100, 0b0_00111_0000101000, 0b0_00111_0000101100, 0b0_00111_0000110000, 0b0_00111_0000110100, 0b0_00111_0000111000, 0b0_00111_0000111100, 0b0_00111_0001000000, 0b0_00111_0001000100, 0b0_00111_0001001000, 0b0_00111_0001001100, 0b0_00111_0001010000, 0b0_00111_0001010100, 0b0_00111_0001011000, 0b0_00111_0001011100, 0b0_00111_0001100000, 0b0_00111_0001100100, 0b0_00111_0001101000, 0b0_00111_0001101100, 0b0_00111_0001110000, 0b0_00111_0001110100, 0b0_00111_0001111000, 0b0_00111_0001111100, 0b0_00111_0010000000, 0b0_00111_0010000100, 0b0_00111_0010001000, 0b0_00111_0010001100, 0b0_00111_0010010000, 0b0_00111_0010010100, 0b0_00111_0010011000, 0b0_00111_0010011100, 0b0_00111_0010100000, 0b0_00111_0010100100, 0b0_00111_0010101000, 0b0_00111_0010101100, 0b0_00111_0010110000, 0b0_00111_0010110100, 0b0_00111_0010111000, 0b0_00111_0010111100, 0b0_00111_0011000000, 0b0_00111_0011000100, 0b0_00111_0011001000, 0b0_00111_0011001100, 0b0_00111_0011010000, 0b0_00111_0011010100, 0b0_00111_0011011000, 0b0_00111_0011011100, 0b0_00111_0011100000, 0b0_00111_0011100100, 0b0_00111_0011101000, 0b0_00111_0011101100, 0b0_00111_0011110000, 0b0_00111_0011110100, 0b0_00111_0011111000, 0b0_00111_0011111100, 0b0_00111_0100000000, 0b0_00111_0100000100, 0b0_00111_0100001000, 0b0_00111_0100001100, 0b0_00111_0100010000, 0b0_00111_0100010100, 0b0_00111_0100011000, 0b0_00111_0100011100, 0b0_00111_0100100000, 0b0_00111_0100100100, 0b0_00111_0100101000, 0b0_00111_0100101100, 0b0_00111_0100110000, 0b0_00111_0100110100, 0b0_00111_0100111000, 0b0_00111_0100111100, 0b0_00111_0101000000, 0b0_00111_0101000100, 0b0_00111_0101001000, 0b0_00111_0101001100, 0b0_00111_0101010000, 0b0_00111_0101010100, 0b0_00111_0101011000, 0b0_00111_0101011100, 0b0_00111_0101100000, 0b0_00111_0101100100, 0b0_00111_0101101000, 0b0_00111_0101101100, 0b0_00111_0101110000, 0b0_00111_0101110100, 0b0_00111_0101111000, 0b0_00111_0101111100, 0b0_00111_0110000000, 0b0_00111_0110000100, 0b0_00111_0110001000, 0b0_00111_0110001100, 0b0_00111_0110010000, 0b0_00111_0110010100, 0b0_00111_0110011000, 0b0_00111_0110011100, 0b0_00111_0110100000, 0b0_00111_0110100100, 0b0_00111_0110101000, 0b0_00111_0110101100, 0b0_00111_0110110000, 0b0_00111_0110110100, 0b0_00111_0110111000, 0b0_00111_0110111100, 0b0_00111_0111000000, 0b0_00111_0111000100, 0b0_00111_0111001000, 0b0_00111_0111001100, 0b0_00111_0111010000, 0b0_00111_0111010100, 0b0_00111_0111011000, 0b0_00111_0111011100, 0b0_00111_0111100000, 0b0_00111_0111100100, 0b0_00111_0111101000, 0b0_00111_0111101100, 0b0_00111_0111110000, 0b0_00111_0111110100, 0b0_00111_0111111000, 0b0_00111_0111111100, 0b0_00111_1000000000, 0b0_00111_1000000100, 0b0_00111_1000001000, 0b0_00111_1000001100, 0b0_00111_1000010000, 0b0_00111_1000010100, 0b0_00111_1000011000, 0b0_00111_1000011100, 0b0_00111_1000100000, 0b0_00111_1000100100, 0b0_00111_1000101000, 0b0_00111_1000101100, 0b0_00111_1000110000, 0b0_00111_1000110100, 0b0_00111_1000111000, 0b0_00111_1000111100, 0b0_00111_1001000000, 0b0_00111_1001000100, 0b0_00111_1001001000, 0b0_00111_1001001100, 0b0_00111_1001010000, 0b0_00111_1001010100, 0b0_00111_1001011000, 0b0_00111_1001011100, 0b0_00111_1001100000, 0b0_00111_1001100100, 0b0_00111_1001101000, 0b0_00111_1001101100, 0b0_00111_1001110000, 0b0_00111_1001110100, 0b0_00111_1001111000, 0b0_00111_1001111100, 0b0_00111_1010000000, 0b0_00111_1010000100, 0b0_00111_1010001000, 0b0_00111_1010001100, 0b0_00111_1010010000, 0b0_00111_1010010100, 0b0_00111_1010011000, 0b0_00111_1010011100, 0b0_00111_1010100000, 0b0_00111_1010100100, 0b0_00111_1010101000, 0b0_00111_1010101100, 0b0_00111_1010110000, 0b0_00111_1010110100, 0b0_00111_1010111000, 0b0_00111_1010111100, 0b0_00111_1011000000, 0b0_00111_1011000100, 0b0_00111_1011001000, 0b0_00111_1011001100, 0b0_00111_1011010000, 0b0_00111_1011010100, 0b0_00111_1011011000, 0b0_00111_1011011100, 0b0_00111_1011100000, 0b0_00111_1011100100, 0b0_00111_1011101000, 0b0_00111_1011101100, 0b0_00111_1011110000, 0b0_00111_1011110100, 0b0_00111_1011111000, 0b0_00111_1011111100, 0b0_00111_1100000000, 0b0_00111_1100000100, 0b0_00111_1100001000, 0b0_00111_1100001100, 0b0_00111_1100010000, 0b0_00111_1100010100, 0b0_00111_1100011000, 0b0_00111_1100011100, 0b0_00111_1100100000, 0b0_00111_1100100100, 0b0_00111_1100101000, 0b0_00111_1100101100, 0b0_00111_1100110000, 0b0_00111_1100110100, 0b0_00111_1100111000, 0b0_00111_1100111100, 0b0_00111_1101000000, 0b0_00111_1101000100, 0b0_00111_1101001000, 0b0_00111_1101001100, 0b0_00111_1101010000, 0b0_00111_1101010100, 0b0_00111_1101011000, 0b0_00111_1101011100, 0b0_00111_1101100000, 0b0_00111_1101100100, 0b0_00111_1101101000, 0b0_00111_1101101100, 0b0_00111_1101110000, 0b0_00111_1101110100, 0b0_00111_1101111000, 0b0_00111_1101111100, 0b0_00111_1110000000, 0b0_00111_1110000100, 0b0_00111_1110001000, 0b0_00111_1110001100, 0b0_00111_1110010000, 0b0_00111_1110010100, 0b0_00111_1110011000, 0b0_00111_1110011100, 0b0_00111_1110100000, 0b0_00111_1110100100, 0b0_00111_1110101000, 0b0_00111_1110101100, 0b0_00111_1110110000, 0b0_00111_1110110100, 0b0_00111_1110111000, 0b0_00111_1110111100, 0b0_00111_1111000000, 0b0_00111_1111000100, 0b0_00111_1111001000, 0b0_00111_1111001100, 0b0_00111_1111010000, 0b0_00111_1111010100, 0b0_00111_1111011000, 0b0_00111_1111011100, 0b0_00111_1111100000, 0b0_00111_1111100100, 0b0_00111_1111101000, 0b0_00111_1111101100, 0b0_00111_1111110000, 0b0_00111_1111110100, 0b0_00111_1111111000, 0b0_00111_1111111100, 0b0_01000_0000000000, 0b0_01000_0000000100, 0b0_01000_0000001000, 0b0_01000_0000001100, 0b0_01000_0000010000, 0b0_01000_0000010100, 0b0_01000_0000011000, 0b0_01000_0000011100, 0b0_01000_0000100000, 0b0_01000_0000100100, 0b0_01000_0000101000, 0b0_01000_0000101100, 0b0_01000_0000110000, 0b0_01000_0000110100, 0b0_01000_0000111000, 0b0_01000_0000111100, 0b0_01000_0001000000, 0b0_01000_0001000100, 0b0_01000_0001001000, 0b0_01000_0001001100, 0b0_01000_0001010000, 0b0_01000_0001010100, 0b0_01000_0001011000, 0b0_01000_0001011100, 0b0_01000_0001100000, 0b0_01000_0001100100, 0b0_01000_0001101000, 0b0_01000_0001101100, 0b0_01000_0001110000, 0b0_01000_0001110100, 0b0_01000_0001111000, 0b0_01000_0001111100, 0b0_01000_0010000000, 0b0_01000_0010000100, 0b0_01000_0010001000, 0b0_01000_0010001100, 0b0_01000_0010010000, 0b0_01000_0010010100, 0b0_01000_0010011000, 0b0_01000_0010011100, 0b0_01000_0010100000, 0b0_01000_0010100100, 0b0_01000_0010101000, 0b0_01000_0010101100, 0b0_01000_0010110000, 0b0_01000_0010110100, 0b0_01000_0010111000, 0b0_01000_0010111100, 0b0_01000_0011000000, 0b0_01000_0011000100, 0b0_01000_0011001000, 0b0_01000_0011001100, 0b0_01000_0011010000, 0b0_01000_0011010100, 0b0_01000_0011011000, 0b0_01000_0011011100, 0b0_01000_0011100000, 0b0_01000_0011100100, 0b0_01000_0011101000, 0b0_01000_0011101100, 0b0_01000_0011110000, 0b0_01000_0011110100, 0b0_01000_0011111000, 0b0_01000_0011111100, 0b0_01000_0100000000, 0b0_01000_0100000100, 0b0_01000_0100001000, 0b0_01000_0100001100, 0b0_01000_0100010000, 0b0_01000_0100010100, 0b0_01000_0100011000, 0b0_01000_0100011100, 0b0_01000_0100100000, 0b0_01000_0100100100, 0b0_01000_0100101000, 0b0_01000_0100101100, 0b0_01000_0100110000, 0b0_01000_0100110100, 0b0_01000_0100111000, 0b0_01000_0100111100, 0b0_01000_0101000000, 0b0_01000_0101000100, 0b0_01000_0101001000, 0b0_01000_0101001100, 0b0_01000_0101010000, 0b0_01000_0101010100, 0b0_01000_0101011000, 0b0_01000_0101011100, 0b0_01000_0101100000, 0b0_01000_0101100100, 0b0_01000_0101101000, 0b0_01000_0101101100, 0b0_01000_0101110000, 0b0_01000_0101110100, 0b0_01000_0101111000, 0b0_01000_0101111100, 0b0_01000_0110000000, 0b0_01000_0110000100, 0b0_01000_0110001000, 0b0_01000_0110001100, 0b0_01000_0110010000, 0b0_01000_0110010100, 0b0_01000_0110011000, 0b0_01000_0110011100, 0b0_01000_0110100000, 0b0_01000_0110100100, 0b0_01000_0110101000, 0b0_01000_0110101100, 0b0_01000_0110110000, 0b0_01000_0110110100, 0b0_01000_0110111000, 0b0_01000_0110111100, 0b0_01000_0111000000, 0b0_01000_0111000100, 0b0_01000_0111001000, 0b0_01000_0111001100, 0b0_01000_0111010000, 0b0_01000_0111010100, 0b0_01000_0111011000, 0b0_01000_0111011100, 0b0_01000_0111100000, 0b0_01000_0111100100, 0b0_01000_0111101000, 0b0_01000_0111101100, 0b0_01000_0111110000, 0b0_01000_0111110100, 0b0_01000_0111111000, 0b0_01000_0111111100, 0b0_01000_1000000000, 0b0_01000_1000000100, 0b0_01000_1000001000, 0b0_01000_1000001100, 0b0_01000_1000010000, 0b0_01000_1000010100, 0b0_01000_1000011000, 0b0_01000_1000011100, 0b0_01000_1000100000, 0b0_01000_1000100100, 0b0_01000_1000101000, 0b0_01000_1000101100, 0b0_01000_1000110000, 0b0_01000_1000110100, 0b0_01000_1000111000, 0b0_01000_1000111100, 0b0_01000_1001000000, 0b0_01000_1001000100, 0b0_01000_1001001000, 0b0_01000_1001001100, 0b0_01000_1001010000, 0b0_01000_1001010100, 0b0_01000_1001011000, 0b0_01000_1001011100, 0b0_01000_1001100000, 0b0_01000_1001100100, 0b0_01000_1001101000, 0b0_01000_1001101100, 0b0_01000_1001110000, 0b0_01000_1001110100, 0b0_01000_1001111000, 0b0_01000_1001111100, 0b0_01000_1010000000, 0b0_01000_1010000100, 0b0_01000_1010001000, 0b0_01000_1010001100, 0b0_01000_1010010000, 0b0_01000_1010010100, 0b0_01000_1010011000, 0b0_01000_1010011100, 0b0_01000_1010100000, 0b0_01000_1010100100, 0b0_01000_1010101000, 0b0_01000_1010101100, 0b0_01000_1010110000, 0b0_01000_1010110100, 0b0_01000_1010111000, 0b0_01000_1010111100, 0b0_01000_1011000000, 0b0_01000_1011000100, 0b0_01000_1011001000, 0b0_01000_1011001100, 0b0_01000_1011010000, 0b0_01000_1011010100, 0b0_01000_1011011000, 0b0_01000_1011011100, 0b0_01000_1011100000, 0b0_01000_1011100100, 0b0_01000_1011101000, 0b0_01000_1011101100, 0b0_01000_1011110000, 0b0_01000_1011110100, 0b0_01000_1011111000, 0b0_01000_1011111100, 0b0_01000_1100000000, 0b0_01000_1100000100, 0b0_01000_1100001000, 0b0_01000_1100001100, 0b0_01000_1100010000, 0b0_01000_1100010100, 0b0_01000_1100011000, 0b0_01000_1100011100, 0b0_01000_1100100000, 0b0_01000_1100100100, 0b0_01000_1100101000, 0b0_01000_1100101100, 0b0_01000_1100110000, 0b0_01000_1100110100, 0b0_01000_1100111000, 0b0_01000_1100111100, 0b0_01000_1101000000, 0b0_01000_1101000100, 0b0_01000_1101001000, 0b0_01000_1101001100, 0b0_01000_1101010000, 0b0_01000_1101010100, 0b0_01000_1101011000, 0b0_01000_1101011100, 0b0_01000_1101100000, 0b0_01000_1101100100, 0b0_01000_1101101000, 0b0_01000_1101101100, 0b0_01000_1101110000, 0b0_01000_1101110100, 0b0_01000_1101111000, 0b0_01000_1101111100, 0b0_01000_1110000000, 0b0_01000_1110000100, 0b0_01000_1110001000, 0b0_01000_1110001100, 0b0_01000_1110010000, 0b0_01000_1110010100, 0b0_01000_1110011000, 0b0_01000_1110011100, 0b0_01000_1110100000, 0b0_01000_1110100100, 0b0_01000_1110101000, 0b0_01000_1110101100, 0b0_01000_1110110000, 0b0_01000_1110110100, 0b0_01000_1110111000, 0b0_01000_1110111100, 0b0_01000_1111000000, 0b0_01000_1111000100, 0b0_01000_1111001000, 0b0_01000_1111001100, 0b0_01000_1111010000, 0b0_01000_1111010100, 0b0_01000_1111011000, 0b0_01000_1111011100, 0b0_01000_1111100000, 0b0_01000_1111100100, 0b0_01000_1111101000, 0b0_01000_1111101100, 0b0_01000_1111110000, 0b0_01000_1111110100, 0b0_01000_1111111000, 0b0_01000_1111111100, 0b0_01001_0000000000, 0b0_01001_0000000100, 0b0_01001_0000001000, 0b0_01001_0000001100, 0b0_01001_0000010000, 0b0_01001_0000010100, 0b0_01001_0000011000, 0b0_01001_0000011100, 0b0_01001_0000100000, 0b0_01001_0000100100, 0b0_01001_0000101000, 0b0_01001_0000101100, 0b0_01001_0000110000, 0b0_01001_0000110100, 0b0_01001_0000111000, 0b0_01001_0000111100, 0b0_01001_0001000000, 0b0_01001_0001000100, 0b0_01001_0001001000, 0b0_01001_0001001100, 0b0_01001_0001010000, 0b0_01001_0001010100, 0b0_01001_0001011000, 0b0_01001_0001011100, 0b0_01001_0001100000, 0b0_01001_0001100100, 0b0_01001_0001101000, 0b0_01001_0001101100, 0b0_01001_0001110000, 0b0_01001_0001110100, 0b0_01001_0001111000, 0b0_01001_0001111100, 0b0_01001_0010000000, 0b0_01001_0010000100, 0b0_01001_0010001000, 0b0_01001_0010001100, 0b0_01001_0010010000, 0b0_01001_0010010100, 0b0_01001_0010011000, 0b0_01001_0010011100, 0b0_01001_0010100000, 0b0_01001_0010100100, 0b0_01001_0010101000, 0b0_01001_0010101100, 0b0_01001_0010110000, 0b0_01001_0010110100, 0b0_01001_0010111000, 0b0_01001_0010111100, 0b0_01001_0011000000, 0b0_01001_0011000100, 0b0_01001_0011001000, 0b0_01001_0011001100, 0b0_01001_0011010000, 0b0_01001_0011010100, 0b0_01001_0011011000, 0b0_01001_0011011100, 0b0_01001_0011100000, 0b0_01001_0011100100, 0b0_01001_0011101000, 0b0_01001_0011101100, 0b0_01001_0011110000, 0b0_01001_0011110100, 0b0_01001_0011111000, 0b0_01001_0011111100, 0b0_01001_0100000000, 0b0_01001_0100000100, 0b0_01001_0100001000, 0b0_01001_0100001100, 0b0_01001_0100010000, 0b0_01001_0100010100, 0b0_01001_0100011000, 0b0_01001_0100011100, 0b0_01001_0100100000, 0b0_01001_0100100100, 0b0_01001_0100101000, 0b0_01001_0100101100, 0b0_01001_0100110000, 0b0_01001_0100110100, 0b0_01001_0100111000, 0b0_01001_0100111100, 0b0_01001_0101000000, 0b0_01001_0101000100, 0b0_01001_0101001000, 0b0_01001_0101001100, 0b0_01001_0101010000, 0b0_01001_0101010100, 0b0_01001_0101011000, 0b0_01001_0101011100, 0b0_01001_0101100000, 0b0_01001_0101100100, 0b0_01001_0101101000, 0b0_01001_0101101100, 0b0_01001_0101110000, 0b0_01001_0101110100, 0b0_01001_0101111000, 0b0_01001_0101111100, 0b0_01001_0110000000, 0b0_01001_0110000100, 0b0_01001_0110001000, 0b0_01001_0110001100, 0b0_01001_0110010000, 0b0_01001_0110010100, 0b0_01001_0110011000, 0b0_01001_0110011100, 0b0_01001_0110100000, 0b0_01001_0110100100, 0b0_01001_0110101000, 0b0_01001_0110101100, 0b0_01001_0110110000, 0b0_01001_0110110100, 0b0_01001_0110111000, 0b0_01001_0110111100, 0b0_01001_0111000000, 0b0_01001_0111000100, 0b0_01001_0111001000, 0b0_01001_0111001100, 0b0_01001_0111010000, 0b0_01001_0111010100, 0b0_01001_0111011000, 0b0_01001_0111011100, 0b0_01001_0111100000, 0b0_01001_0111100100, 0b0_01001_0111101000, 0b0_01001_0111101100, 0b0_01001_0111110000, 0b0_01001_0111110100, 0b0_01001_0111111000, 0b0_01001_0111111100, 0b0_01001_1000000000, 0b0_01001_1000000100, 0b0_01001_1000001000, 0b0_01001_1000001100, 0b0_01001_1000010000, 0b0_01001_1000010100, 0b0_01001_1000011000, 0b0_01001_1000011100, 0b0_01001_1000100000, 0b0_01001_1000100100, 0b0_01001_1000101000, 0b0_01001_1000101100, 0b0_01001_1000110000, 0b0_01001_1000110100, 0b0_01001_1000111000, 0b0_01001_1000111100, 0b0_01001_1001000000, 0b0_01001_1001000100, 0b0_01001_1001001000, 0b0_01001_1001001100, 0b0_01001_1001010000, 0b0_01001_1001010100, 0b0_01001_1001011000, 0b0_01001_1001011100, 0b0_01001_1001100000, 0b0_01001_1001100100, 0b0_01001_1001101000, 0b0_01001_1001101100, 0b0_01001_1001110000, 0b0_01001_1001110100, 0b0_01001_1001111000, 0b0_01001_1001111100, 0b0_01001_1010000000, 0b0_01001_1010000100, 0b0_01001_1010001000, 0b0_01001_1010001100, 0b0_01001_1010010000, 0b0_01001_1010010100, 0b0_01001_1010011000, 0b0_01001_1010011100, 0b0_01001_1010100000, 0b0_01001_1010100100, 0b0_01001_1010101000, 0b0_01001_1010101100, 0b0_01001_1010110000, 0b0_01001_1010110100, 0b0_01001_1010111000, 0b0_01001_1010111100, 0b0_01001_1011000000, 0b0_01001_1011000100, 0b0_01001_1011001000, 0b0_01001_1011001100, 0b0_01001_1011010000, 0b0_01001_1011010100, 0b0_01001_1011011000, 0b0_01001_1011011100, 0b0_01001_1011100000, 0b0_01001_1011100100, 0b0_01001_1011101000, 0b0_01001_1011101100, 0b0_01001_1011110000, 0b0_01001_1011110100, 0b0_01001_1011111000, 0b0_01001_1011111100, 0b0_01001_1100000000, 0b0_01001_1100000100, 0b0_01001_1100001000, 0b0_01001_1100001100, 0b0_01001_1100010000, 0b0_01001_1100010100, 0b0_01001_1100011000, 0b0_01001_1100011100, 0b0_01001_1100100000, 0b0_01001_1100100100, 0b0_01001_1100101000, 0b0_01001_1100101100, 0b0_01001_1100110000, 0b0_01001_1100110100, 0b0_01001_1100111000, 0b0_01001_1100111100, 0b0_01001_1101000000, 0b0_01001_1101000100, 0b0_01001_1101001000, 0b0_01001_1101001100, 0b0_01001_1101010000, 0b0_01001_1101010100, 0b0_01001_1101011000, 0b0_01001_1101011100, 0b0_01001_1101100000, 0b0_01001_1101100100, 0b0_01001_1101101000, 0b0_01001_1101101100, 0b0_01001_1101110000, 0b0_01001_1101110100, 0b0_01001_1101111000, 0b0_01001_1101111100, 0b0_01001_1110000000, 0b0_01001_1110000100, 0b0_01001_1110001000, 0b0_01001_1110001100, 0b0_01001_1110010000, 0b0_01001_1110010100, 0b0_01001_1110011000, 0b0_01001_1110011100, 0b0_01001_1110100000, 0b0_01001_1110100100, 0b0_01001_1110101000, 0b0_01001_1110101100, 0b0_01001_1110110000, 0b0_01001_1110110100, 0b0_01001_1110111000, 0b0_01001_1110111100, 0b0_01001_1111000000, 0b0_01001_1111000100, 0b0_01001_1111001000, 0b0_01001_1111001100, 0b0_01001_1111010000, 0b0_01001_1111010100, 0b0_01001_1111011000, 0b0_01001_1111011100, 0b0_01001_1111100000, 0b0_01001_1111100100, 0b0_01001_1111101000, 0b0_01001_1111101100, 0b0_01001_1111110000, 0b0_01001_1111110100, 0b0_01001_1111111000, 0b0_01001_1111111100, 0b0_01010_0000000000, 0b0_01010_0000000100, 0b0_01010_0000001000, 0b0_01010_0000001100, 0b0_01010_0000010000, 0b0_01010_0000010100, 0b0_01010_0000011000, 0b0_01010_0000011100, 0b0_01010_0000100000, 0b0_01010_0000100100, 0b0_01010_0000101000, 0b0_01010_0000101100, 0b0_01010_0000110000, 0b0_01010_0000110100, 0b0_01010_0000111000, 0b0_01010_0000111100, 0b0_01010_0001000000, 0b0_01010_0001000100, 0b0_01010_0001001000, 0b0_01010_0001001100, 0b0_01010_0001010000, 0b0_01010_0001010100, 0b0_01010_0001011000, 0b0_01010_0001011100, 0b0_01010_0001100000, 0b0_01010_0001100100, 0b0_01010_0001101000, 0b0_01010_0001101100, 0b0_01010_0001110000, 0b0_01010_0001110100, 0b0_01010_0001111000, 0b0_01010_0001111100, 0b0_01010_0010000000, 0b0_01010_0010000100, 0b0_01010_0010001000, 0b0_01010_0010001100, 0b0_01010_0010010000, 0b0_01010_0010010100, 0b0_01010_0010011000, 0b0_01010_0010011100, 0b0_01010_0010100000, 0b0_01010_0010100100, 0b0_01010_0010101000, 0b0_01010_0010101100, 0b0_01010_0010110000, 0b0_01010_0010110100, 0b0_01010_0010111000, 0b0_01010_0010111100, 0b0_01010_0011000000, 0b0_01010_0011000100, 0b0_01010_0011001000, 0b0_01010_0011001100, 0b0_01010_0011010000, 0b0_01010_0011010100, 0b0_01010_0011011000, 0b0_01010_0011011100, 0b0_01010_0011100000, 0b0_01010_0011100100, 0b0_01010_0011101000, 0b0_01010_0011101100, 0b0_01010_0011110000, 0b0_01010_0011110100, 0b0_01010_0011111000, 0b0_01010_0011111100, 0b0_01010_0100000000, 0b0_01010_0100000100, 0b0_01010_0100001000, 0b0_01010_0100001100, 0b0_01010_0100010000, 0b0_01010_0100010100, 0b0_01010_0100011000, 0b0_01010_0100011100, 0b0_01010_0100100000, 0b0_01010_0100100100, 0b0_01010_0100101000, 0b0_01010_0100101100, 0b0_01010_0100110000, 0b0_01010_0100110100, 0b0_01010_0100111000, 0b0_01010_0100111100, 0b0_01010_0101000000, 0b0_01010_0101000100, 0b0_01010_0101001000, 0b0_01010_0101001100, 0b0_01010_0101010000, 0b0_01010_0101010100, 0b0_01010_0101011000, 0b0_01010_0101011100, 0b0_01010_0101100000, 0b0_01010_0101100100, 0b0_01010_0101101000, 0b0_01010_0101101100, 0b0_01010_0101110000, 0b0_01010_0101110100, 0b0_01010_0101111000, 0b0_01010_0101111100, 0b0_01010_0110000000, 0b0_01010_0110000100, 0b0_01010_0110001000, 0b0_01010_0110001100, 0b0_01010_0110010000, 0b0_01010_0110010100, 0b0_01010_0110011000, 0b0_01010_0110011100, 0b0_01010_0110100000, 0b0_01010_0110100100, 0b0_01010_0110101000, 0b0_01010_0110101100, 0b0_01010_0110110000, 0b0_01010_0110110100, 0b0_01010_0110111000, 0b0_01010_0110111100, 0b0_01010_0111000000, 0b0_01010_0111000100, 0b0_01010_0111001000, 0b0_01010_0111001100, 0b0_01010_0111010000, 0b0_01010_0111010100, 0b0_01010_0111011000, 0b0_01010_0111011100, 0b0_01010_0111100000, 0b0_01010_0111100100, 0b0_01010_0111101000, 0b0_01010_0111101100, 0b0_01010_0111110000, 0b0_01010_0111110100, 0b0_01010_0111111000, 0b0_01010_0111111100, 0b0_01010_1000000000, 0b0_01010_1000000100, 0b0_01010_1000001000, 0b0_01010_1000001100, 0b0_01010_1000010000, 0b0_01010_1000010100, 0b0_01010_1000011000, 0b0_01010_1000011100, 0b0_01010_1000100000, 0b0_01010_1000100100, 0b0_01010_1000101000, 0b0_01010_1000101100, 0b0_01010_1000110000, 0b0_01010_1000110100, 0b0_01010_1000111000, 0b0_01010_1000111100, 0b0_01010_1001000000, 0b0_01010_1001000100, 0b0_01010_1001001000, 0b0_01010_1001001100, 0b0_01010_1001010000, 0b0_01010_1001010100, 0b0_01010_1001011000, 0b0_01010_1001011100, 0b0_01010_1001100000, 0b0_01010_1001100100, 0b0_01010_1001101000, 0b0_01010_1001101100, 0b0_01010_1001110000, 0b0_01010_1001110100, 0b0_01010_1001111000, 0b0_01010_1001111100, 0b0_01010_1010000000, 0b0_01010_1010000100, 0b0_01010_1010001000, 0b0_01010_1010001100, 0b0_01010_1010010000, 0b0_01010_1010010100, 0b0_01010_1010011000, 0b0_01010_1010011100, 0b0_01010_1010100000, 0b0_01010_1010100100, 0b0_01010_1010101000, 0b0_01010_1010101100, 0b0_01010_1010110000, 0b0_01010_1010110100, 0b0_01010_1010111000, 0b0_01010_1010111100, 0b0_01010_1011000000, 0b0_01010_1011000100, 0b0_01010_1011001000, 0b0_01010_1011001100, 0b0_01010_1011010000, 0b0_01010_1011010100, 0b0_01010_1011011000, 0b0_01010_1011011100, 0b0_01010_1011100000, 0b0_01010_1011100100, 0b0_01010_1011101000, 0b0_01010_1011101100, 0b0_01010_1011110000, 0b0_01010_1011110100, 0b0_01010_1011111000, 0b0_01010_1011111100, 0b0_01010_1100000000, 0b0_01010_1100000100, 0b0_01010_1100001000, 0b0_01010_1100001100, 0b0_01010_1100010000, 0b0_01010_1100010100, 0b0_01010_1100011000, 0b0_01010_1100011100, 0b0_01010_1100100000, 0b0_01010_1100100100, 0b0_01010_1100101000, 0b0_01010_1100101100, 0b0_01010_1100110000, 0b0_01010_1100110100, 0b0_01010_1100111000, 0b0_01010_1100111100, 0b0_01010_1101000000, 0b0_01010_1101000100, 0b0_01010_1101001000, 0b0_01010_1101001100, 0b0_01010_1101010000, 0b0_01010_1101010100, 0b0_01010_1101011000, 0b0_01010_1101011100, 0b0_01010_1101100000, 0b0_01010_1101100100, 0b0_01010_1101101000, 0b0_01010_1101101100, 0b0_01010_1101110000, 0b0_01010_1101110100, 0b0_01010_1101111000, 0b0_01010_1101111100, 0b0_01010_1110000000, 0b0_01010_1110000100, 0b0_01010_1110001000, 0b0_01010_1110001100, 0b0_01010_1110010000, 0b0_01010_1110010100, 0b0_01010_1110011000, 0b0_01010_1110011100, 0b0_01010_1110100000, 0b0_01010_1110100100, 0b0_01010_1110101000, 0b0_01010_1110101100, 0b0_01010_1110110000, 0b0_01010_1110110100, 0b0_01010_1110111000, 0b0_01010_1110111100, 0b0_01010_1111000000, 0b0_01010_1111000100, 0b0_01010_1111001000, 0b0_01010_1111001100, 0b0_01010_1111010000, 0b0_01010_1111010100, 0b0_01010_1111011000, 0b0_01010_1111011100, 0b0_01010_1111100000, 0b0_01010_1111100100, 0b0_01010_1111101000, 0b0_01010_1111101100, 0b0_01010_1111110000, 0b0_01010_1111110100, 0b0_01010_1111111000, 0b0_01010_1111111100, 0b0_00000_0000000000, 0b0_00001_0000000000, 0b0_00010_0000000000, 0b0_00011_0000000000, 0b0_01011_0000000000, 0b0_01100_0000000000, 0b0_01101_0000000000, 0b0_01110_0000000000, 0b0_00000_0000100000, 0b0_00001_0000100000, 0b0_00010_0000100000, 0b0_00011_0000100000, 0b0_01011_0000100000, 0b0_01100_0000100000, 0b0_01101_0000100000, 0b0_01110_0000100000, 0b0_00000_0001000000, 0b0_00001_0001000000, 0b0_00010_0001000000, 0b0_00011_0001000000, 0b0_01011_0001000000, 0b0_01100_0001000000, 0b0_01101_0001000000, 0b0_01110_0001000000, 0b0_00000_0001100000, 0b0_00001_0001100000, 0b0_00010_0001100000, 0b0_00011_0001100000, 0b0_01011_0001100000, 0b0_01100_0001100000, 0b0_01101_0001100000, 0b0_01110_0001100000, 0b0_00000_0010000000, 0b0_00001_0010000000, 0b0_00010_0010000000, 0b0_00011_0010000000, 0b0_01011_0010000000, 0b0_01100_0010000000, 0b0_01101_0010000000, 0b0_01110_0010000000, 0b0_00000_0010100000, 0b0_00001_0010100000, 0b0_00010_0010100000, 0b0_00011_0010100000, 0b0_01011_0010100000, 0b0_01100_0010100000, 0b0_01101_0010100000, 0b0_01110_0010100000, 0b0_00000_0011000000, 0b0_00001_0011000000, 0b0_00010_0011000000, 0b0_00011_0011000000, 0b0_01011_0011000000, 0b0_01100_0011000000, 0b0_01101_0011000000, 0b0_01110_0011000000, 0b0_00000_0011100000, 0b0_00001_0011100000, 0b0_00010_0011100000, 0b0_00011_0011100000, 0b0_01011_0011100000, 0b0_01100_0011100000, 0b0_01101_0011100000, 0b0_01110_0011100000, 0b0_00000_0100000000, 0b0_00001_0100000000, 0b0_00010_0100000000, 0b0_00011_0100000000, 0b0_01011_0100000000, 0b0_01100_0100000000, 0b0_01101_0100000000, 0b0_01110_0100000000, 0b0_00000_0100100000, 0b0_00001_0100100000, 0b0_00010_0100100000, 0b0_00011_0100100000, 0b0_01011_0100100000, 0b0_01100_0100100000, 0b0_01101_0100100000, 0b0_01110_0100100000, 0b0_00000_0101000000, 0b0_00001_0101000000, 0b0_00010_0101000000, 0b0_00011_0101000000, 0b0_01011_0101000000, 0b0_01100_0101000000, 0b0_01101_0101000000, 0b0_01110_0101000000, 0b0_00000_0101100000, 0b0_00001_0101100000, 0b0_00010_0101100000, 0b0_00011_0101100000, 0b0_01011_0101100000, 0b0_01100_0101100000, 0b0_01101_0101100000, 0b0_01110_0101100000, 0b0_00000_0110000000, 0b0_00001_0110000000, 0b0_00010_0110000000, 0b0_00011_0110000000, 0b0_01011_0110000000, 0b0_01100_0110000000, 0b0_01101_0110000000, 0b0_01110_0110000000, 0b0_00000_0110100000, 0b0_00001_0110100000, 0b0_00010_0110100000, 0b0_00011_0110100000, 0b0_01011_0110100000, 0b0_01100_0110100000, 0b0_01101_0110100000, 0b0_01110_0110100000, 0b0_00000_0111000000, 0b0_00001_0111000000, 0b0_00010_0111000000, 0b0_00011_0111000000, 0b0_01011_0111000000, 0b0_01100_0111000000, 0b0_01101_0111000000, 0b0_01110_0111000000, 0b0_00000_0111100000, 0b0_00001_0111100000, 0b0_00010_0111100000, 0b0_00011_0111100000, 0b0_01011_0111100000, 0b0_01100_0111100000, 0b0_01101_0111100000, 0b0_01110_0111100000, 0b0_00000_1000000000, 0b0_00001_1000000000, 0b0_00010_1000000000, 0b0_00011_1000000000, 0b0_01011_1000000000, 0b0_01100_1000000000, 0b0_01101_1000000000, 0b0_01110_1000000000, 0b0_00000_1000100000, 0b0_00001_1000100000, 0b0_00010_1000100000, 0b0_00011_1000100000, 0b0_01011_1000100000, 0b0_01100_1000100000, 0b0_01101_1000100000, 0b0_01110_1000100000, 0b0_00000_1001000000, 0b0_00001_1001000000, 0b0_00010_1001000000, 0b0_00011_1001000000, 0b0_01011_1001000000, 0b0_01100_1001000000, 0b0_01101_1001000000, 0b0_01110_1001000000, 0b0_00000_1001100000, 0b0_00001_1001100000, 0b0_00010_1001100000, 0b0_00011_1001100000, 0b0_01011_1001100000, 0b0_01100_1001100000, 0b0_01101_1001100000, 0b0_01110_1001100000, 0b0_00000_1010000000, 0b0_00001_1010000000, 0b0_00010_1010000000, 0b0_00011_1010000000, 0b0_01011_1010000000, 0b0_01100_1010000000, 0b0_01101_1010000000, 0b0_01110_1010000000, 0b0_00000_1010100000, 0b0_00001_1010100000, 0b0_00010_1010100000, 0b0_00011_1010100000, 0b0_01011_1010100000, 0b0_01100_1010100000, 0b0_01101_1010100000, 0b0_01110_1010100000, 0b0_00000_1011000000, 0b0_00001_1011000000, 0b0_00010_1011000000, 0b0_00011_1011000000, 0b0_01011_1011000000, 0b0_01100_1011000000, 0b0_01101_1011000000, 0b0_01110_1011000000, 0b0_00000_1011100000, 0b0_00001_1011100000, 0b0_00010_1011100000, 0b0_00011_1011100000, 0b0_01011_1011100000, 0b0_01100_1011100000, 0b0_01101_1011100000, 0b0_01110_1011100000, 0b0_00000_1100000000, 0b0_00001_1100000000, 0b0_00010_1100000000, 0b0_00011_1100000000, 0b0_01011_1100000000, 0b0_01100_1100000000, 0b0_01101_1100000000, 0b0_01110_1100000000, 0b0_00000_1100100000, 0b0_00001_1100100000, 0b0_00010_1100100000, 0b0_00011_1100100000, 0b0_01011_1100100000, 0b0_01100_1100100000, 0b0_01101_1100100000, 0b0_01110_1100100000, 0b0_00000_1101000000, 0b0_00001_1101000000, 0b0_00010_1101000000, 0b0_00011_1101000000, 0b0_01011_1101000000, 0b0_01100_1101000000, 0b0_01101_1101000000, 0b0_01110_1101000000, 0b0_00000_1101100000, 0b0_00001_1101100000, 0b0_00010_1101100000, 0b0_00011_1101100000, 0b0_01011_1101100000, 0b0_01100_1101100000, 0b0_01101_1101100000, 0b0_01110_1101100000, 0b0_00000_1110000000, 0b0_00001_1110000000, 0b0_00010_1110000000, 0b0_00011_1110000000, 0b0_01011_1110000000, 0b0_01100_1110000000, 0b0_01101_1110000000, 0b0_01110_1110000000, 0b0_00000_1110100000, 0b0_00001_1110100000, 0b0_00010_1110100000, 0b0_00011_1110100000, 0b0_01011_1110100000, 0b0_01100_1110100000, 0b0_01101_1110100000, 0b0_01110_1110100000, 0b0_00000_1111000000, 0b0_00001_1111000000, 0b0_00010_1111000000, 0b0_00011_1111000000, 0b0_01011_1111000000, 0b0_01100_1111000000, 0b0_01101_1111000000, 0b0_01110_1111000000, 0b0_00000_1111100000, 0b0_00001_1111100000, 0b0_00010_1111100000, 0b0_00011_1111100000, 0b0_01011_1111100000, 0b0_01100_1111100000, 0b0_01101_1111100000, 0b0_01110_1111100000, 0b0_00100_0000000000, 0b0_00100_0000000100, 0b0_00100_0000001000, 0b0_00100_0000001100, 0b0_00100_0000010000, 0b0_00100_0000010100, 0b0_00100_0000011000, 0b0_00100_0000011100, 0b0_00100_0000100000, 0b0_00100_0000100100, 0b0_00100_0000101000, 0b0_00100_0000101100, 0b0_00100_0000110000, 0b0_00100_0000110100, 0b0_00100_0000111000, 0b0_00100_0000111100, 0b0_00100_0001000000, 0b0_00100_0001000100, 0b0_00100_0001001000, 0b0_00100_0001001100, 0b0_00100_0001010000, 0b0_00100_0001010100, 0b0_00100_0001011000, 0b0_00100_0001011100, 0b0_00100_0001100000, 0b0_00100_0001100100, 0b0_00100_0001101000, 0b0_00100_0001101100, 0b0_00100_0001110000, 0b0_00100_0001110100, 0b0_00100_0001111000, 0b0_00100_0001111100, 0b0_00100_0010000000, 0b0_00100_0010000100, 0b0_00100_0010001000, 0b0_00100_0010001100, 0b0_00100_0010010000, 0b0_00100_0010010100, 0b0_00100_0010011000, 0b0_00100_0010011100, 0b0_00100_0010100000, 0b0_00100_0010100100, 0b0_00100_0010101000, 0b0_00100_0010101100, 0b0_00100_0010110000, 0b0_00100_0010110100, 0b0_00100_0010111000, 0b0_00100_0010111100, 0b0_00100_0011000000, 0b0_00100_0011000100, 0b0_00100_0011001000, 0b0_00100_0011001100, 0b0_00100_0011010000, 0b0_00100_0011010100, 0b0_00100_0011011000, 0b0_00100_0011011100, 0b0_00100_0011100000, 0b0_00100_0011100100, 0b0_00100_0011101000, 0b0_00100_0011101100, 0b0_00100_0011110000, 0b0_00100_0011110100, 0b0_00100_0011111000, 0b0_00100_0011111100, 0b0_00100_0100000000, 0b0_00100_0100000100, 0b0_00100_0100001000, 0b0_00100_0100001100, 0b0_00100_0100010000, 0b0_00100_0100010100, 0b0_00100_0100011000, 0b0_00100_0100011100, 0b0_00100_0100100000, 0b0_00100_0100100100, 0b0_00100_0100101000, 0b0_00100_0100101100, 0b0_00100_0100110000, 0b0_00100_0100110100, 0b0_00100_0100111000, 0b0_00100_0100111100, 0b0_00100_0101000000, 0b0_00100_0101000100, 0b0_00100_0101001000, 0b0_00100_0101001100, 0b0_00100_0101010000, 0b0_00100_0101010100, 0b0_00100_0101011000, 0b0_00100_0101011100, 0b0_00100_0101100000, 0b0_00100_0101100100, 0b0_00100_0101101000, 0b0_00100_0101101100, 0b0_00100_0101110000, 0b0_00100_0101110100, 0b0_00100_0101111000, 0b0_00100_0101111100, 0b0_00100_0110000000, 0b0_00100_0110000100, 0b0_00100_0110001000, 0b0_00100_0110001100, 0b0_00100_0110010000, 0b0_00100_0110010100, 0b0_00100_0110011000, 0b0_00100_0110011100, 0b0_00100_0110100000, 0b0_00100_0110100100, 0b0_00100_0110101000, 0b0_00100_0110101100, 0b0_00100_0110110000, 0b0_00100_0110110100, 0b0_00100_0110111000, 0b0_00100_0110111100, 0b0_00100_0111000000, 0b0_00100_0111000100, 0b0_00100_0111001000, 0b0_00100_0111001100, 0b0_00100_0111010000, 0b0_00100_0111010100, 0b0_00100_0111011000, 0b0_00100_0111011100, 0b0_00100_0111100000, 0b0_00100_0111100100, 0b0_00100_0111101000, 0b0_00100_0111101100, 0b0_00100_0111110000, 0b0_00100_0111110100, 0b0_00100_0111111000, 0b0_00100_0111111100, 0b0_00100_1000000000, 0b0_00100_1000000100, 0b0_00100_1000001000, 0b0_00100_1000001100, 0b0_00100_1000010000, 0b0_00100_1000010100, 0b0_00100_1000011000, 0b0_00100_1000011100, 0b0_00100_1000100000, 0b0_00100_1000100100, 0b0_00100_1000101000, 0b0_00100_1000101100, 0b0_00100_1000110000, 0b0_00100_1000110100, 0b0_00100_1000111000, 0b0_00100_1000111100, 0b0_00100_1001000000, 0b0_00100_1001000100, 0b0_00100_1001001000, 0b0_00100_1001001100, 0b0_00100_1001010000, 0b0_00100_1001010100, 0b0_00100_1001011000, 0b0_00100_1001011100, 0b0_00100_1001100000, 0b0_00100_1001100100, 0b0_00100_1001101000, 0b0_00100_1001101100, 0b0_00100_1001110000, 0b0_00100_1001110100, 0b0_00100_1001111000, 0b0_00100_1001111100, 0b0_00100_1010000000, 0b0_00100_1010000100, 0b0_00100_1010001000, 0b0_00100_1010001100, 0b0_00100_1010010000, 0b0_00100_1010010100, 0b0_00100_1010011000, 0b0_00100_1010011100, 0b0_00100_1010100000, 0b0_00100_1010100100, 0b0_00100_1010101000, 0b0_00100_1010101100, 0b0_00100_1010110000, 0b0_00100_1010110100, 0b0_00100_1010111000, 0b0_00100_1010111100, 0b0_00100_1011000000, 0b0_00100_1011000100, 0b0_00100_1011001000, 0b0_00100_1011001100, 0b0_00100_1011010000, 0b0_00100_1011010100, 0b0_00100_1011011000, 0b0_00100_1011011100, 0b0_00100_1011100000, 0b0_00100_1011100100, 0b0_00100_1011101000, 0b0_00100_1011101100, 0b0_00100_1011110000, 0b0_00100_1011110100, 0b0_00100_1011111000, 0b0_00100_1011111100, 0b0_00100_1100000000, 0b0_00100_1100000100, 0b0_00100_1100001000, 0b0_00100_1100001100, 0b0_00100_1100010000, 0b0_00100_1100010100, 0b0_00100_1100011000, 0b0_00100_1100011100, 0b0_00100_1100100000, 0b0_00100_1100100100, 0b0_00100_1100101000, 0b0_00100_1100101100, 0b0_00100_1100110000, 0b0_00100_1100110100, 0b0_00100_1100111000, 0b0_00100_1100111100, 0b0_00100_1101000000, 0b0_00100_1101000100, 0b0_00100_1101001000, 0b0_00100_1101001100, 0b0_00100_1101010000, 0b0_00100_1101010100, 0b0_00100_1101011000, 0b0_00100_1101011100, 0b0_00100_1101100000, 0b0_00100_1101100100, 0b0_00100_1101101000, 0b0_00100_1101101100, 0b0_00100_1101110000, 0b0_00100_1101110100, 0b0_00100_1101111000, 0b0_00100_1101111100, 0b0_00100_1110000000, 0b0_00100_1110000100, 0b0_00100_1110001000, 0b0_00100_1110001100, 0b0_00100_1110010000, 0b0_00100_1110010100, 0b0_00100_1110011000, 0b0_00100_1110011100, 0b0_00100_1110100000, 0b0_00100_1110100100, 0b0_00100_1110101000, 0b0_00100_1110101100, 0b0_00100_1110110000, 0b0_00100_1110110100, 0b0_00100_1110111000, 0b0_00100_1110111100, 0b0_00100_1111000000, 0b0_00100_1111000100, 0b0_00100_1111001000, 0b0_00100_1111001100, 0b0_00100_1111010000, 0b0_00100_1111010100, 0b0_00100_1111011000, 0b0_00100_1111011100, 0b0_00100_1111100000, 0b0_00100_1111100100, 0b0_00100_1111101000, 0b0_00100_1111101100, 0b0_00100_1111110000, 0b0_00100_1111110100, 0b0_00100_1111111000, 0b0_00100_1111111100, 0b0_00101_0000000000, 0b0_00101_0000000100, 0b0_00101_0000001000, 0b0_00101_0000001100, 0b0_00101_0000010000, 0b0_00101_0000010100, 0b0_00101_0000011000, 0b0_00101_0000011100, 0b0_00101_0000100000, 0b0_00101_0000100100, 0b0_00101_0000101000, 0b0_00101_0000101100, 0b0_00101_0000110000, 0b0_00101_0000110100, 0b0_00101_0000111000, 0b0_00101_0000111100, 0b0_00101_0001000000, 0b0_00101_0001000100, 0b0_00101_0001001000, 0b0_00101_0001001100, 0b0_00101_0001010000, 0b0_00101_0001010100, 0b0_00101_0001011000, 0b0_00101_0001011100, 0b0_00101_0001100000, 0b0_00101_0001100100, 0b0_00101_0001101000, 0b0_00101_0001101100, 0b0_00101_0001110000, 0b0_00101_0001110100, 0b0_00101_0001111000, 0b0_00101_0001111100, 0b0_00101_0010000000, 0b0_00101_0010000100, 0b0_00101_0010001000, 0b0_00101_0010001100, 0b0_00101_0010010000, 0b0_00101_0010010100, 0b0_00101_0010011000, 0b0_00101_0010011100, 0b0_00101_0010100000, 0b0_00101_0010100100, 0b0_00101_0010101000, 0b0_00101_0010101100, 0b0_00101_0010110000, 0b0_00101_0010110100, 0b0_00101_0010111000, 0b0_00101_0010111100, 0b0_00101_0011000000, 0b0_00101_0011000100, 0b0_00101_0011001000, 0b0_00101_0011001100, 0b0_00101_0011010000, 0b0_00101_0011010100, 0b0_00101_0011011000, 0b0_00101_0011011100, 0b0_00101_0011100000, 0b0_00101_0011100100, 0b0_00101_0011101000, 0b0_00101_0011101100, 0b0_00101_0011110000, 0b0_00101_0011110100, 0b0_00101_0011111000, 0b0_00101_0011111100, 0b0_00101_0100000000, 0b0_00101_0100000100, 0b0_00101_0100001000, 0b0_00101_0100001100, 0b0_00101_0100010000, 0b0_00101_0100010100, 0b0_00101_0100011000, 0b0_00101_0100011100, 0b0_00101_0100100000, 0b0_00101_0100100100, 0b0_00101_0100101000, 0b0_00101_0100101100, 0b0_00101_0100110000, 0b0_00101_0100110100, 0b0_00101_0100111000, 0b0_00101_0100111100, 0b0_00101_0101000000, 0b0_00101_0101000100, 0b0_00101_0101001000, 0b0_00101_0101001100, 0b0_00101_0101010000, 0b0_00101_0101010100, 0b0_00101_0101011000, 0b0_00101_0101011100, 0b0_00101_0101100000, 0b0_00101_0101100100, 0b0_00101_0101101000, 0b0_00101_0101101100, 0b0_00101_0101110000, 0b0_00101_0101110100, 0b0_00101_0101111000, 0b0_00101_0101111100, 0b0_00101_0110000000, 0b0_00101_0110000100, 0b0_00101_0110001000, 0b0_00101_0110001100, 0b0_00101_0110010000, 0b0_00101_0110010100, 0b0_00101_0110011000, 0b0_00101_0110011100, 0b0_00101_0110100000, 0b0_00101_0110100100, 0b0_00101_0110101000, 0b0_00101_0110101100, 0b0_00101_0110110000, 0b0_00101_0110110100, 0b0_00101_0110111000, 0b0_00101_0110111100, 0b0_00101_0111000000, 0b0_00101_0111000100, 0b0_00101_0111001000, 0b0_00101_0111001100, 0b0_00101_0111010000, 0b0_00101_0111010100, 0b0_00101_0111011000, 0b0_00101_0111011100, 0b0_00101_0111100000, 0b0_00101_0111100100, 0b0_00101_0111101000, 0b0_00101_0111101100, 0b0_00101_0111110000, 0b0_00101_0111110100, 0b0_00101_0111111000, 0b0_00101_0111111100, 0b0_00101_1000000000, 0b0_00101_1000000100, 0b0_00101_1000001000, 0b0_00101_1000001100, 0b0_00101_1000010000, 0b0_00101_1000010100, 0b0_00101_1000011000, 0b0_00101_1000011100, 0b0_00101_1000100000, 0b0_00101_1000100100, 0b0_00101_1000101000, 0b0_00101_1000101100, 0b0_00101_1000110000, 0b0_00101_1000110100, 0b0_00101_1000111000, 0b0_00101_1000111100, 0b0_00101_1001000000, 0b0_00101_1001000100, 0b0_00101_1001001000, 0b0_00101_1001001100, 0b0_00101_1001010000, 0b0_00101_1001010100, 0b0_00101_1001011000, 0b0_00101_1001011100, 0b0_00101_1001100000, 0b0_00101_1001100100, 0b0_00101_1001101000, 0b0_00101_1001101100, 0b0_00101_1001110000, 0b0_00101_1001110100, 0b0_00101_1001111000, 0b0_00101_1001111100, 0b0_00101_1010000000, 0b0_00101_1010000100, 0b0_00101_1010001000, 0b0_00101_1010001100, 0b0_00101_1010010000, 0b0_00101_1010010100, 0b0_00101_1010011000, 0b0_00101_1010011100, 0b0_00101_1010100000, 0b0_00101_1010100100, 0b0_00101_1010101000, 0b0_00101_1010101100, 0b0_00101_1010110000, 0b0_00101_1010110100, 0b0_00101_1010111000, 0b0_00101_1010111100, 0b0_00101_1011000000, 0b0_00101_1011000100, 0b0_00101_1011001000, 0b0_00101_1011001100, 0b0_00101_1011010000, 0b0_00101_1011010100, 0b0_00101_1011011000, 0b0_00101_1011011100, 0b0_00101_1011100000, 0b0_00101_1011100100, 0b0_00101_1011101000, 0b0_00101_1011101100, 0b0_00101_1011110000, 0b0_00101_1011110100, 0b0_00101_1011111000, 0b0_00101_1011111100, 0b0_00101_1100000000, 0b0_00101_1100000100, 0b0_00101_1100001000, 0b0_00101_1100001100, 0b0_00101_1100010000, 0b0_00101_1100010100, 0b0_00101_1100011000, 0b0_00101_1100011100, 0b0_00101_1100100000, 0b0_00101_1100100100, 0b0_00101_1100101000, 0b0_00101_1100101100, 0b0_00101_1100110000, 0b0_00101_1100110100, 0b0_00101_1100111000, 0b0_00101_1100111100, 0b0_00101_1101000000, 0b0_00101_1101000100, 0b0_00101_1101001000, 0b0_00101_1101001100, 0b0_00101_1101010000, 0b0_00101_1101010100, 0b0_00101_1101011000, 0b0_00101_1101011100, 0b0_00101_1101100000, 0b0_00101_1101100100, 0b0_00101_1101101000, 0b0_00101_1101101100, 0b0_00101_1101110000, 0b0_00101_1101110100, 0b0_00101_1101111000, 0b0_00101_1101111100, 0b0_00101_1110000000, 0b0_00101_1110000100, 0b0_00101_1110001000, 0b0_00101_1110001100, 0b0_00101_1110010000, 0b0_00101_1110010100, 0b0_00101_1110011000, 0b0_00101_1110011100, 0b0_00101_1110100000, 0b0_00101_1110100100, 0b0_00101_1110101000, 0b0_00101_1110101100, 0b0_00101_1110110000, 0b0_00101_1110110100, 0b0_00101_1110111000, 0b0_00101_1110111100, 0b0_00101_1111000000, 0b0_00101_1111000100, 0b0_00101_1111001000, 0b0_00101_1111001100, 0b0_00101_1111010000, 0b0_00101_1111010100, 0b0_00101_1111011000, 0b0_00101_1111011100, 0b0_00101_1111100000, 0b0_00101_1111100100, 0b0_00101_1111101000, 0b0_00101_1111101100, 0b0_00101_1111110000, 0b0_00101_1111110100, 0b0_00101_1111111000, 0b0_00101_1111111100, 0b0_00110_0000000000, 0b0_00110_0000000100, 0b0_00110_0000001000, 0b0_00110_0000001100, 0b0_00110_0000010000, 0b0_00110_0000010100, 0b0_00110_0000011000, 0b0_00110_0000011100, 0b0_00110_0000100000, 0b0_00110_0000100100, 0b0_00110_0000101000, 0b0_00110_0000101100, 0b0_00110_0000110000, 0b0_00110_0000110100, 0b0_00110_0000111000, 0b0_00110_0000111100, 0b0_00110_0001000000, 0b0_00110_0001000100, 0b0_00110_0001001000, 0b0_00110_0001001100, 0b0_00110_0001010000, 0b0_00110_0001010100, 0b0_00110_0001011000, 0b0_00110_0001011100, 0b0_00110_0001100000, 0b0_00110_0001100100, 0b0_00110_0001101000, 0b0_00110_0001101100, 0b0_00110_0001110000, 0b0_00110_0001110100, 0b0_00110_0001111000, 0b0_00110_0001111100, 0b0_00110_0010000000, 0b0_00110_0010000100, 0b0_00110_0010001000, 0b0_00110_0010001100, 0b0_00110_0010010000, 0b0_00110_0010010100, 0b0_00110_0010011000, 0b0_00110_0010011100, 0b0_00110_0010100000, 0b0_00110_0010100100, 0b0_00110_0010101000, 0b0_00110_0010101100, 0b0_00110_0010110000, 0b0_00110_0010110100, 0b0_00110_0010111000, 0b0_00110_0010111100, 0b0_00110_0011000000, 0b0_00110_0011000100, 0b0_00110_0011001000, 0b0_00110_0011001100, 0b0_00110_0011010000, 0b0_00110_0011010100, 0b0_00110_0011011000, 0b0_00110_0011011100, 0b0_00110_0011100000, 0b0_00110_0011100100, 0b0_00110_0011101000, 0b0_00110_0011101100, 0b0_00110_0011110000, 0b0_00110_0011110100, 0b0_00110_0011111000, 0b0_00110_0011111100, 0b0_00110_0100000000, 0b0_00110_0100000100, 0b0_00110_0100001000, 0b0_00110_0100001100, 0b0_00110_0100010000, 0b0_00110_0100010100, 0b0_00110_0100011000, 0b0_00110_0100011100, 0b0_00110_0100100000, 0b0_00110_0100100100, 0b0_00110_0100101000, 0b0_00110_0100101100, 0b0_00110_0100110000, 0b0_00110_0100110100, 0b0_00110_0100111000, 0b0_00110_0100111100, 0b0_00110_0101000000, 0b0_00110_0101000100, 0b0_00110_0101001000, 0b0_00110_0101001100, 0b0_00110_0101010000, 0b0_00110_0101010100, 0b0_00110_0101011000, 0b0_00110_0101011100, 0b0_00110_0101100000, 0b0_00110_0101100100, 0b0_00110_0101101000, 0b0_00110_0101101100, 0b0_00110_0101110000, 0b0_00110_0101110100, 0b0_00110_0101111000, 0b0_00110_0101111100, 0b0_00110_0110000000, 0b0_00110_0110000100, 0b0_00110_0110001000, 0b0_00110_0110001100, 0b0_00110_0110010000, 0b0_00110_0110010100, 0b0_00110_0110011000, 0b0_00110_0110011100, 0b0_00110_0110100000, 0b0_00110_0110100100, 0b0_00110_0110101000, 0b0_00110_0110101100, 0b0_00110_0110110000, 0b0_00110_0110110100, 0b0_00110_0110111000, 0b0_00110_0110111100, 0b0_00110_0111000000, 0b0_00110_0111000100, 0b0_00110_0111001000, 0b0_00110_0111001100, 0b0_00110_0111010000, 0b0_00110_0111010100, 0b0_00110_0111011000, 0b0_00110_0111011100, 0b0_00110_0111100000, 0b0_00110_0111100100, 0b0_00110_0111101000, 0b0_00110_0111101100, 0b0_00110_0111110000, 0b0_00110_0111110100, 0b0_00110_0111111000, 0b0_00110_0111111100, 0b0_00110_1000000000, 0b0_00110_1000000100, 0b0_00110_1000001000, 0b0_00110_1000001100, 0b0_00110_1000010000, 0b0_00110_1000010100, 0b0_00110_1000011000, 0b0_00110_1000011100, 0b0_00110_1000100000, 0b0_00110_1000100100, 0b0_00110_1000101000, 0b0_00110_1000101100, 0b0_00110_1000110000, 0b0_00110_1000110100, 0b0_00110_1000111000, 0b0_00110_1000111100, 0b0_00110_1001000000, 0b0_00110_1001000100, 0b0_00110_1001001000, 0b0_00110_1001001100, 0b0_00110_1001010000, 0b0_00110_1001010100, 0b0_00110_1001011000, 0b0_00110_1001011100, 0b0_00110_1001100000, 0b0_00110_1001100100, 0b0_00110_1001101000, 0b0_00110_1001101100, 0b0_00110_1001110000, 0b0_00110_1001110100, 0b0_00110_1001111000, 0b0_00110_1001111100, 0b0_00110_1010000000, 0b0_00110_1010000100, 0b0_00110_1010001000, 0b0_00110_1010001100, 0b0_00110_1010010000, 0b0_00110_1010010100, 0b0_00110_1010011000, 0b0_00110_1010011100, 0b0_00110_1010100000, 0b0_00110_1010100100, 0b0_00110_1010101000, 0b0_00110_1010101100, 0b0_00110_1010110000, 0b0_00110_1010110100, 0b0_00110_1010111000, 0b0_00110_1010111100, 0b0_00110_1011000000, 0b0_00110_1011000100, 0b0_00110_1011001000, 0b0_00110_1011001100, 0b0_00110_1011010000, 0b0_00110_1011010100, 0b0_00110_1011011000, 0b0_00110_1011011100, 0b0_00110_1011100000, 0b0_00110_1011100100, 0b0_00110_1011101000, 0b0_00110_1011101100, 0b0_00110_1011110000, 0b0_00110_1011110100, 0b0_00110_1011111000, 0b0_00110_1011111100, 0b0_00110_1100000000, 0b0_00110_1100000100, 0b0_00110_1100001000, 0b0_00110_1100001100, 0b0_00110_1100010000, 0b0_00110_1100010100, 0b0_00110_1100011000, 0b0_00110_1100011100, 0b0_00110_1100100000, 0b0_00110_1100100100, 0b0_00110_1100101000, 0b0_00110_1100101100, 0b0_00110_1100110000, 0b0_00110_1100110100, 0b0_00110_1100111000, 0b0_00110_1100111100, 0b0_00110_1101000000, 0b0_00110_1101000100, 0b0_00110_1101001000, 0b0_00110_1101001100, 0b0_00110_1101010000, 0b0_00110_1101010100, 0b0_00110_1101011000, 0b0_00110_1101011100, 0b0_00110_1101100000, 0b0_00110_1101100100, 0b0_00110_1101101000, 0b0_00110_1101101100, 0b0_00110_1101110000, 0b0_00110_1101110100, 0b0_00110_1101111000, 0b0_00110_1101111100, 0b0_00110_1110000000, 0b0_00110_1110000100, 0b0_00110_1110001000, 0b0_00110_1110001100, 0b0_00110_1110010000, 0b0_00110_1110010100, 0b0_00110_1110011000, 0b0_00110_1110011100, 0b0_00110_1110100000, 0b0_00110_1110100100, 0b0_00110_1110101000, 0b0_00110_1110101100, 0b0_00110_1110110000, 0b0_00110_1110110100, 0b0_00110_1110111000, 0b0_00110_1110111100, 0b0_00110_1111000000, 0b0_00110_1111000100, 0b0_00110_1111001000, 0b0_00110_1111001100, 0b0_00110_1111010000, 0b0_00110_1111010100, 0b0_00110_1111011000, 0b0_00110_1111011100, 0b0_00110_1111100000, 0b0_00110_1111100100, 0b0_00110_1111101000, 0b0_00110_1111101100, 0b0_00110_1111110000, 0b0_00110_1111110100, 0b0_00110_1111111000, 0b0_00110_1111111100, 0b0_00111_0000000000, 0b0_00111_0000000100, 0b0_00111_0000001000, 0b0_00111_0000001100, 0b0_00111_0000010000, 0b0_00111_0000010100, 0b0_00111_0000011000, 0b0_00111_0000011100, 0b0_00111_0000100000, 0b0_00111_0000100100, 0b0_00111_0000101000, 0b0_00111_0000101100, 0b0_00111_0000110000, 0b0_00111_0000110100, 0b0_00111_0000111000, 0b0_00111_0000111100, 0b0_00111_0001000000, 0b0_00111_0001000100, 0b0_00111_0001001000, 0b0_00111_0001001100, 0b0_00111_0001010000, 0b0_00111_0001010100, 0b0_00111_0001011000, 0b0_00111_0001011100, 0b0_00111_0001100000, 0b0_00111_0001100100, 0b0_00111_0001101000, 0b0_00111_0001101100, 0b0_00111_0001110000, 0b0_00111_0001110100, 0b0_00111_0001111000, 0b0_00111_0001111100, 0b0_00111_0010000000, 0b0_00111_0010000100, 0b0_00111_0010001000, 0b0_00111_0010001100, 0b0_00111_0010010000, 0b0_00111_0010010100, 0b0_00111_0010011000, 0b0_00111_0010011100, 0b0_00111_0010100000, 0b0_00111_0010100100, 0b0_00111_0010101000, 0b0_00111_0010101100, 0b0_00111_0010110000, 0b0_00111_0010110100, 0b0_00111_0010111000, 0b0_00111_0010111100, 0b0_00111_0011000000, 0b0_00111_0011000100, 0b0_00111_0011001000, 0b0_00111_0011001100, 0b0_00111_0011010000, 0b0_00111_0011010100, 0b0_00111_0011011000, 0b0_00111_0011011100, 0b0_00111_0011100000, 0b0_00111_0011100100, 0b0_00111_0011101000, 0b0_00111_0011101100, 0b0_00111_0011110000, 0b0_00111_0011110100, 0b0_00111_0011111000, 0b0_00111_0011111100, 0b0_00111_0100000000, 0b0_00111_0100000100, 0b0_00111_0100001000, 0b0_00111_0100001100, 0b0_00111_0100010000, 0b0_00111_0100010100, 0b0_00111_0100011000, 0b0_00111_0100011100, 0b0_00111_0100100000, 0b0_00111_0100100100, 0b0_00111_0100101000, 0b0_00111_0100101100, 0b0_00111_0100110000, 0b0_00111_0100110100, 0b0_00111_0100111000, 0b0_00111_0100111100, 0b0_00111_0101000000, 0b0_00111_0101000100, 0b0_00111_0101001000, 0b0_00111_0101001100, 0b0_00111_0101010000, 0b0_00111_0101010100, 0b0_00111_0101011000, 0b0_00111_0101011100, 0b0_00111_0101100000, 0b0_00111_0101100100, 0b0_00111_0101101000, 0b0_00111_0101101100, 0b0_00111_0101110000, 0b0_00111_0101110100, 0b0_00111_0101111000, 0b0_00111_0101111100, 0b0_00111_0110000000, 0b0_00111_0110000100, 0b0_00111_0110001000, 0b0_00111_0110001100, 0b0_00111_0110010000, 0b0_00111_0110010100, 0b0_00111_0110011000, 0b0_00111_0110011100, 0b0_00111_0110100000, 0b0_00111_0110100100, 0b0_00111_0110101000, 0b0_00111_0110101100, 0b0_00111_0110110000, 0b0_00111_0110110100, 0b0_00111_0110111000, 0b0_00111_0110111100, 0b0_00111_0111000000, 0b0_00111_0111000100, 0b0_00111_0111001000, 0b0_00111_0111001100, 0b0_00111_0111010000, 0b0_00111_0111010100, 0b0_00111_0111011000, 0b0_00111_0111011100, 0b0_00111_0111100000, 0b0_00111_0111100100, 0b0_00111_0111101000, 0b0_00111_0111101100, 0b0_00111_0111110000, 0b0_00111_0111110100, 0b0_00111_0111111000, 0b0_00111_0111111100, 0b0_00111_1000000000, 0b0_00111_1000000100, 0b0_00111_1000001000, 0b0_00111_1000001100, 0b0_00111_1000010000, 0b0_00111_1000010100, 0b0_00111_1000011000, 0b0_00111_1000011100, 0b0_00111_1000100000, 0b0_00111_1000100100, 0b0_00111_1000101000, 0b0_00111_1000101100, 0b0_00111_1000110000, 0b0_00111_1000110100, 0b0_00111_1000111000, 0b0_00111_1000111100, 0b0_00111_1001000000, 0b0_00111_1001000100, 0b0_00111_1001001000, 0b0_00111_1001001100, 0b0_00111_1001010000, 0b0_00111_1001010100, 0b0_00111_1001011000, 0b0_00111_1001011100, 0b0_00111_1001100000, 0b0_00111_1001100100, 0b0_00111_1001101000, 0b0_00111_1001101100, 0b0_00111_1001110000, 0b0_00111_1001110100, 0b0_00111_1001111000, 0b0_00111_1001111100, 0b0_00111_1010000000, 0b0_00111_1010000100, 0b0_00111_1010001000, 0b0_00111_1010001100, 0b0_00111_1010010000, 0b0_00111_1010010100, 0b0_00111_1010011000, 0b0_00111_1010011100, 0b0_00111_1010100000, 0b0_00111_1010100100, 0b0_00111_1010101000, 0b0_00111_1010101100, 0b0_00111_1010110000, 0b0_00111_1010110100, 0b0_00111_1010111000, 0b0_00111_1010111100, 0b0_00111_1011000000, 0b0_00111_1011000100, 0b0_00111_1011001000, 0b0_00111_1011001100, 0b0_00111_1011010000, 0b0_00111_1011010100, 0b0_00111_1011011000, 0b0_00111_1011011100, 0b0_00111_1011100000, 0b0_00111_1011100100, 0b0_00111_1011101000, 0b0_00111_1011101100, 0b0_00111_1011110000, 0b0_00111_1011110100, 0b0_00111_1011111000, 0b0_00111_1011111100, 0b0_00111_1100000000, 0b0_00111_1100000100, 0b0_00111_1100001000, 0b0_00111_1100001100, 0b0_00111_1100010000, 0b0_00111_1100010100, 0b0_00111_1100011000, 0b0_00111_1100011100, 0b0_00111_1100100000, 0b0_00111_1100100100, 0b0_00111_1100101000, 0b0_00111_1100101100, 0b0_00111_1100110000, 0b0_00111_1100110100, 0b0_00111_1100111000, 0b0_00111_1100111100, 0b0_00111_1101000000, 0b0_00111_1101000100, 0b0_00111_1101001000, 0b0_00111_1101001100, 0b0_00111_1101010000, 0b0_00111_1101010100, 0b0_00111_1101011000, 0b0_00111_1101011100, 0b0_00111_1101100000, 0b0_00111_1101100100, 0b0_00111_1101101000, 0b0_00111_1101101100, 0b0_00111_1101110000, 0b0_00111_1101110100, 0b0_00111_1101111000, 0b0_00111_1101111100, 0b0_00111_1110000000, 0b0_00111_1110000100, 0b0_00111_1110001000, 0b0_00111_1110001100, 0b0_00111_1110010000, 0b0_00111_1110010100, 0b0_00111_1110011000, 0b0_00111_1110011100, 0b0_00111_1110100000, 0b0_00111_1110100100, 0b0_00111_1110101000, 0b0_00111_1110101100, 0b0_00111_1110110000, 0b0_00111_1110110100, 0b0_00111_1110111000, 0b0_00111_1110111100, 0b0_00111_1111000000, 0b0_00111_1111000100, 0b0_00111_1111001000, 0b0_00111_1111001100, 0b0_00111_1111010000, 0b0_00111_1111010100, 0b0_00111_1111011000, 0b0_00111_1111011100, 0b0_00111_1111100000, 0b0_00111_1111100100, 0b0_00111_1111101000, 0b0_00111_1111101100, 0b0_00111_1111110000, 0b0_00111_1111110100, 0b0_00111_1111111000, 0b0_00111_1111111100, 0b0_01000_0000000000, 0b0_01000_0000000100, 0b0_01000_0000001000, 0b0_01000_0000001100, 0b0_01000_0000010000, 0b0_01000_0000010100, 0b0_01000_0000011000, 0b0_01000_0000011100, 0b0_01000_0000100000, 0b0_01000_0000100100, 0b0_01000_0000101000, 0b0_01000_0000101100, 0b0_01000_0000110000, 0b0_01000_0000110100, 0b0_01000_0000111000, 0b0_01000_0000111100, 0b0_01000_0001000000, 0b0_01000_0001000100, 0b0_01000_0001001000, 0b0_01000_0001001100, 0b0_01000_0001010000, 0b0_01000_0001010100, 0b0_01000_0001011000, 0b0_01000_0001011100, 0b0_01000_0001100000, 0b0_01000_0001100100, 0b0_01000_0001101000, 0b0_01000_0001101100, 0b0_01000_0001110000, 0b0_01000_0001110100, 0b0_01000_0001111000, 0b0_01000_0001111100, 0b0_01000_0010000000, 0b0_01000_0010000100, 0b0_01000_0010001000, 0b0_01000_0010001100, 0b0_01000_0010010000, 0b0_01000_0010010100, 0b0_01000_0010011000, 0b0_01000_0010011100, 0b0_01000_0010100000, 0b0_01000_0010100100, 0b0_01000_0010101000, 0b0_01000_0010101100, 0b0_01000_0010110000, 0b0_01000_0010110100, 0b0_01000_0010111000, 0b0_01000_0010111100, 0b0_01000_0011000000, 0b0_01000_0011000100, 0b0_01000_0011001000, 0b0_01000_0011001100, 0b0_01000_0011010000, 0b0_01000_0011010100, 0b0_01000_0011011000, 0b0_01000_0011011100, 0b0_01000_0011100000, 0b0_01000_0011100100, 0b0_01000_0011101000, 0b0_01000_0011101100, 0b0_01000_0011110000, 0b0_01000_0011110100, 0b0_01000_0011111000, 0b0_01000_0011111100, 0b0_01000_0100000000, 0b0_01000_0100000100, 0b0_01000_0100001000, 0b0_01000_0100001100, 0b0_01000_0100010000, 0b0_01000_0100010100, 0b0_01000_0100011000, 0b0_01000_0100011100, 0b0_01000_0100100000, 0b0_01000_0100100100, 0b0_01000_0100101000, 0b0_01000_0100101100, 0b0_01000_0100110000, 0b0_01000_0100110100, 0b0_01000_0100111000, 0b0_01000_0100111100, 0b0_01000_0101000000, 0b0_01000_0101000100, 0b0_01000_0101001000, 0b0_01000_0101001100, 0b0_01000_0101010000, 0b0_01000_0101010100, 0b0_01000_0101011000, 0b0_01000_0101011100, 0b0_01000_0101100000, 0b0_01000_0101100100, 0b0_01000_0101101000, 0b0_01000_0101101100, 0b0_01000_0101110000, 0b0_01000_0101110100, 0b0_01000_0101111000, 0b0_01000_0101111100, 0b0_01000_0110000000, 0b0_01000_0110000100, 0b0_01000_0110001000, 0b0_01000_0110001100, 0b0_01000_0110010000, 0b0_01000_0110010100, 0b0_01000_0110011000, 0b0_01000_0110011100, 0b0_01000_0110100000, 0b0_01000_0110100100, 0b0_01000_0110101000, 0b0_01000_0110101100, 0b0_01000_0110110000, 0b0_01000_0110110100, 0b0_01000_0110111000, 0b0_01000_0110111100, 0b0_01000_0111000000, 0b0_01000_0111000100, 0b0_01000_0111001000, 0b0_01000_0111001100, 0b0_01000_0111010000, 0b0_01000_0111010100, 0b0_01000_0111011000, 0b0_01000_0111011100, 0b0_01000_0111100000, 0b0_01000_0111100100, 0b0_01000_0111101000, 0b0_01000_0111101100, 0b0_01000_0111110000, 0b0_01000_0111110100, 0b0_01000_0111111000, 0b0_01000_0111111100, 0b0_01000_1000000000, 0b0_01000_1000000100, 0b0_01000_1000001000, 0b0_01000_1000001100, 0b0_01000_1000010000, 0b0_01000_1000010100, 0b0_01000_1000011000, 0b0_01000_1000011100, 0b0_01000_1000100000, 0b0_01000_1000100100, 0b0_01000_1000101000, 0b0_01000_1000101100, 0b0_01000_1000110000, 0b0_01000_1000110100, 0b0_01000_1000111000, 0b0_01000_1000111100, 0b0_01000_1001000000, 0b0_01000_1001000100, 0b0_01000_1001001000, 0b0_01000_1001001100, 0b0_01000_1001010000, 0b0_01000_1001010100, 0b0_01000_1001011000, 0b0_01000_1001011100, 0b0_01000_1001100000, 0b0_01000_1001100100, 0b0_01000_1001101000, 0b0_01000_1001101100, 0b0_01000_1001110000, 0b0_01000_1001110100, 0b0_01000_1001111000, 0b0_01000_1001111100, 0b0_01000_1010000000, 0b0_01000_1010000100, 0b0_01000_1010001000, 0b0_01000_1010001100, 0b0_01000_1010010000, 0b0_01000_1010010100, 0b0_01000_1010011000, 0b0_01000_1010011100, 0b0_01000_1010100000, 0b0_01000_1010100100, 0b0_01000_1010101000, 0b0_01000_1010101100, 0b0_01000_1010110000, 0b0_01000_1010110100, 0b0_01000_1010111000, 0b0_01000_1010111100, 0b0_01000_1011000000, 0b0_01000_1011000100, 0b0_01000_1011001000, 0b0_01000_1011001100, 0b0_01000_1011010000, 0b0_01000_1011010100, 0b0_01000_1011011000, 0b0_01000_1011011100, 0b0_01000_1011100000, 0b0_01000_1011100100, 0b0_01000_1011101000, 0b0_01000_1011101100, 0b0_01000_1011110000, 0b0_01000_1011110100, 0b0_01000_1011111000, 0b0_01000_1011111100, 0b0_01000_1100000000, 0b0_01000_1100000100, 0b0_01000_1100001000, 0b0_01000_1100001100, 0b0_01000_1100010000, 0b0_01000_1100010100, 0b0_01000_1100011000, 0b0_01000_1100011100, 0b0_01000_1100100000, 0b0_01000_1100100100, 0b0_01000_1100101000, 0b0_01000_1100101100, 0b0_01000_1100110000, 0b0_01000_1100110100, 0b0_01000_1100111000, 0b0_01000_1100111100, 0b0_01000_1101000000, 0b0_01000_1101000100, 0b0_01000_1101001000, 0b0_01000_1101001100, 0b0_01000_1101010000, 0b0_01000_1101010100, 0b0_01000_1101011000, 0b0_01000_1101011100, 0b0_01000_1101100000, 0b0_01000_1101100100, 0b0_01000_1101101000, 0b0_01000_1101101100, 0b0_01000_1101110000, 0b0_01000_1101110100, 0b0_01000_1101111000, 0b0_01000_1101111100, 0b0_01000_1110000000, 0b0_01000_1110000100, 0b0_01000_1110001000, 0b0_01000_1110001100, 0b0_01000_1110010000, 0b0_01000_1110010100, 0b0_01000_1110011000, 0b0_01000_1110011100, 0b0_01000_1110100000, 0b0_01000_1110100100, 0b0_01000_1110101000, 0b0_01000_1110101100, 0b0_01000_1110110000, 0b0_01000_1110110100, 0b0_01000_1110111000, 0b0_01000_1110111100, 0b0_01000_1111000000, 0b0_01000_1111000100, 0b0_01000_1111001000, 0b0_01000_1111001100, 0b0_01000_1111010000, 0b0_01000_1111010100, 0b0_01000_1111011000, 0b0_01000_1111011100, 0b0_01000_1111100000, 0b0_01000_1111100100, 0b0_01000_1111101000, 0b0_01000_1111101100, 0b0_01000_1111110000, 0b0_01000_1111110100, 0b0_01000_1111111000, 0b0_01000_1111111100, 0b0_01001_0000000000, 0b0_01001_0000000100, 0b0_01001_0000001000, 0b0_01001_0000001100, 0b0_01001_0000010000, 0b0_01001_0000010100, 0b0_01001_0000011000, 0b0_01001_0000011100, 0b0_01001_0000100000, 0b0_01001_0000100100, 0b0_01001_0000101000, 0b0_01001_0000101100, 0b0_01001_0000110000, 0b0_01001_0000110100, 0b0_01001_0000111000, 0b0_01001_0000111100, 0b0_01001_0001000000, 0b0_01001_0001000100, 0b0_01001_0001001000, 0b0_01001_0001001100, 0b0_01001_0001010000, 0b0_01001_0001010100, 0b0_01001_0001011000, 0b0_01001_0001011100, 0b0_01001_0001100000, 0b0_01001_0001100100, 0b0_01001_0001101000, 0b0_01001_0001101100, 0b0_01001_0001110000, 0b0_01001_0001110100, 0b0_01001_0001111000, 0b0_01001_0001111100, 0b0_01001_0010000000, 0b0_01001_0010000100, 0b0_01001_0010001000, 0b0_01001_0010001100, 0b0_01001_0010010000, 0b0_01001_0010010100, 0b0_01001_0010011000, 0b0_01001_0010011100, 0b0_01001_0010100000, 0b0_01001_0010100100, 0b0_01001_0010101000, 0b0_01001_0010101100, 0b0_01001_0010110000, 0b0_01001_0010110100, 0b0_01001_0010111000, 0b0_01001_0010111100, 0b0_01001_0011000000, 0b0_01001_0011000100, 0b0_01001_0011001000, 0b0_01001_0011001100, 0b0_01001_0011010000, 0b0_01001_0011010100, 0b0_01001_0011011000, 0b0_01001_0011011100, 0b0_01001_0011100000, 0b0_01001_0011100100, 0b0_01001_0011101000, 0b0_01001_0011101100, 0b0_01001_0011110000, 0b0_01001_0011110100, 0b0_01001_0011111000, 0b0_01001_0011111100, 0b0_01001_0100000000, 0b0_01001_0100000100, 0b0_01001_0100001000, 0b0_01001_0100001100, 0b0_01001_0100010000, 0b0_01001_0100010100, 0b0_01001_0100011000, 0b0_01001_0100011100, 0b0_01001_0100100000, 0b0_01001_0100100100, 0b0_01001_0100101000, 0b0_01001_0100101100, 0b0_01001_0100110000, 0b0_01001_0100110100, 0b0_01001_0100111000, 0b0_01001_0100111100, 0b0_01001_0101000000, 0b0_01001_0101000100, 0b0_01001_0101001000, 0b0_01001_0101001100, 0b0_01001_0101010000, 0b0_01001_0101010100, 0b0_01001_0101011000, 0b0_01001_0101011100, 0b0_01001_0101100000, 0b0_01001_0101100100, 0b0_01001_0101101000, 0b0_01001_0101101100, 0b0_01001_0101110000, 0b0_01001_0101110100, 0b0_01001_0101111000, 0b0_01001_0101111100, 0b0_01001_0110000000, 0b0_01001_0110000100, 0b0_01001_0110001000, 0b0_01001_0110001100, 0b0_01001_0110010000, 0b0_01001_0110010100, 0b0_01001_0110011000, 0b0_01001_0110011100, 0b0_01001_0110100000, 0b0_01001_0110100100, 0b0_01001_0110101000, 0b0_01001_0110101100, 0b0_01001_0110110000, 0b0_01001_0110110100, 0b0_01001_0110111000, 0b0_01001_0110111100, 0b0_01001_0111000000, 0b0_01001_0111000100, 0b0_01001_0111001000, 0b0_01001_0111001100, 0b0_01001_0111010000, 0b0_01001_0111010100, 0b0_01001_0111011000, 0b0_01001_0111011100, 0b0_01001_0111100000, 0b0_01001_0111100100, 0b0_01001_0111101000, 0b0_01001_0111101100, 0b0_01001_0111110000, 0b0_01001_0111110100, 0b0_01001_0111111000, 0b0_01001_0111111100, 0b0_01001_1000000000, 0b0_01001_1000000100, 0b0_01001_1000001000, 0b0_01001_1000001100, 0b0_01001_1000010000, 0b0_01001_1000010100, 0b0_01001_1000011000, 0b0_01001_1000011100, 0b0_01001_1000100000, 0b0_01001_1000100100, 0b0_01001_1000101000, 0b0_01001_1000101100, 0b0_01001_1000110000, 0b0_01001_1000110100, 0b0_01001_1000111000, 0b0_01001_1000111100, 0b0_01001_1001000000, 0b0_01001_1001000100, 0b0_01001_1001001000, 0b0_01001_1001001100, 0b0_01001_1001010000, 0b0_01001_1001010100, 0b0_01001_1001011000, 0b0_01001_1001011100, 0b0_01001_1001100000, 0b0_01001_1001100100, 0b0_01001_1001101000, 0b0_01001_1001101100, 0b0_01001_1001110000, 0b0_01001_1001110100, 0b0_01001_1001111000, 0b0_01001_1001111100, 0b0_01001_1010000000, 0b0_01001_1010000100, 0b0_01001_1010001000, 0b0_01001_1010001100, 0b0_01001_1010010000, 0b0_01001_1010010100, 0b0_01001_1010011000, 0b0_01001_1010011100, 0b0_01001_1010100000, 0b0_01001_1010100100, 0b0_01001_1010101000, 0b0_01001_1010101100, 0b0_01001_1010110000, 0b0_01001_1010110100, 0b0_01001_1010111000, 0b0_01001_1010111100, 0b0_01001_1011000000, 0b0_01001_1011000100, 0b0_01001_1011001000, 0b0_01001_1011001100, 0b0_01001_1011010000, 0b0_01001_1011010100, 0b0_01001_1011011000, 0b0_01001_1011011100, 0b0_01001_1011100000, 0b0_01001_1011100100, 0b0_01001_1011101000, 0b0_01001_1011101100, 0b0_01001_1011110000, 0b0_01001_1011110100, 0b0_01001_1011111000, 0b0_01001_1011111100, 0b0_01001_1100000000, 0b0_01001_1100000100, 0b0_01001_1100001000, 0b0_01001_1100001100, 0b0_01001_1100010000, 0b0_01001_1100010100, 0b0_01001_1100011000, 0b0_01001_1100011100, 0b0_01001_1100100000, 0b0_01001_1100100100, 0b0_01001_1100101000, 0b0_01001_1100101100, 0b0_01001_1100110000, 0b0_01001_1100110100, 0b0_01001_1100111000, 0b0_01001_1100111100, 0b0_01001_1101000000, 0b0_01001_1101000100, 0b0_01001_1101001000, 0b0_01001_1101001100, 0b0_01001_1101010000, 0b0_01001_1101010100, 0b0_01001_1101011000, 0b0_01001_1101011100, 0b0_01001_1101100000, 0b0_01001_1101100100, 0b0_01001_1101101000, 0b0_01001_1101101100, 0b0_01001_1101110000, 0b0_01001_1101110100, 0b0_01001_1101111000, 0b0_01001_1101111100, 0b0_01001_1110000000, 0b0_01001_1110000100, 0b0_01001_1110001000, 0b0_01001_1110001100, 0b0_01001_1110010000, 0b0_01001_1110010100, 0b0_01001_1110011000, 0b0_01001_1110011100, 0b0_01001_1110100000, 0b0_01001_1110100100, 0b0_01001_1110101000, 0b0_01001_1110101100, 0b0_01001_1110110000, 0b0_01001_1110110100, 0b0_01001_1110111000, 0b0_01001_1110111100, 0b0_01001_1111000000, 0b0_01001_1111000100, 0b0_01001_1111001000, 0b0_01001_1111001100, 0b0_01001_1111010000, 0b0_01001_1111010100, 0b0_01001_1111011000, 0b0_01001_1111011100, 0b0_01001_1111100000, 0b0_01001_1111100100, 0b0_01001_1111101000, 0b0_01001_1111101100, 0b0_01001_1111110000, 0b0_01001_1111110100, 0b0_01001_1111111000, 0b0_01001_1111111100, 0b0_01010_0000000000, 0b0_01010_0000000100, 0b0_01010_0000001000, 0b0_01010_0000001100, 0b0_01010_0000010000, 0b0_01010_0000010100, 0b0_01010_0000011000, 0b0_01010_0000011100, 0b0_01010_0000100000, 0b0_01010_0000100100, 0b0_01010_0000101000, 0b0_01010_0000101100, 0b0_01010_0000110000, 0b0_01010_0000110100, 0b0_01010_0000111000, 0b0_01010_0000111100, 0b0_01010_0001000000, 0b0_01010_0001000100, 0b0_01010_0001001000, 0b0_01010_0001001100, 0b0_01010_0001010000, 0b0_01010_0001010100, 0b0_01010_0001011000, 0b0_01010_0001011100, 0b0_01010_0001100000, 0b0_01010_0001100100, 0b0_01010_0001101000, 0b0_01010_0001101100, 0b0_01010_0001110000, 0b0_01010_0001110100, 0b0_01010_0001111000, 0b0_01010_0001111100, 0b0_01010_0010000000, 0b0_01010_0010000100, 0b0_01010_0010001000, 0b0_01010_0010001100, 0b0_01010_0010010000, 0b0_01010_0010010100, 0b0_01010_0010011000, 0b0_01010_0010011100, 0b0_01010_0010100000, 0b0_01010_0010100100, 0b0_01010_0010101000, 0b0_01010_0010101100, 0b0_01010_0010110000, 0b0_01010_0010110100, 0b0_01010_0010111000, 0b0_01010_0010111100, 0b0_01010_0011000000, 0b0_01010_0011000100, 0b0_01010_0011001000, 0b0_01010_0011001100, 0b0_01010_0011010000, 0b0_01010_0011010100, 0b0_01010_0011011000, 0b0_01010_0011011100, 0b0_01010_0011100000, 0b0_01010_0011100100, 0b0_01010_0011101000, 0b0_01010_0011101100, 0b0_01010_0011110000, 0b0_01010_0011110100, 0b0_01010_0011111000, 0b0_01010_0011111100, 0b0_01010_0100000000, 0b0_01010_0100000100, 0b0_01010_0100001000, 0b0_01010_0100001100, 0b0_01010_0100010000, 0b0_01010_0100010100, 0b0_01010_0100011000, 0b0_01010_0100011100, 0b0_01010_0100100000, 0b0_01010_0100100100, 0b0_01010_0100101000, 0b0_01010_0100101100, 0b0_01010_0100110000, 0b0_01010_0100110100, 0b0_01010_0100111000, 0b0_01010_0100111100, 0b0_01010_0101000000, 0b0_01010_0101000100, 0b0_01010_0101001000, 0b0_01010_0101001100, 0b0_01010_0101010000, 0b0_01010_0101010100, 0b0_01010_0101011000, 0b0_01010_0101011100, 0b0_01010_0101100000, 0b0_01010_0101100100, 0b0_01010_0101101000, 0b0_01010_0101101100, 0b0_01010_0101110000, 0b0_01010_0101110100, 0b0_01010_0101111000, 0b0_01010_0101111100, 0b0_01010_0110000000, 0b0_01010_0110000100, 0b0_01010_0110001000, 0b0_01010_0110001100, 0b0_01010_0110010000, 0b0_01010_0110010100, 0b0_01010_0110011000, 0b0_01010_0110011100, 0b0_01010_0110100000, 0b0_01010_0110100100, 0b0_01010_0110101000, 0b0_01010_0110101100, 0b0_01010_0110110000, 0b0_01010_0110110100, 0b0_01010_0110111000, 0b0_01010_0110111100, 0b0_01010_0111000000, 0b0_01010_0111000100, 0b0_01010_0111001000, 0b0_01010_0111001100, 0b0_01010_0111010000, 0b0_01010_0111010100, 0b0_01010_0111011000, 0b0_01010_0111011100, 0b0_01010_0111100000, 0b0_01010_0111100100, 0b0_01010_0111101000, 0b0_01010_0111101100, 0b0_01010_0111110000, 0b0_01010_0111110100, 0b0_01010_0111111000, 0b0_01010_0111111100, 0b0_01010_1000000000, 0b0_01010_1000000100, 0b0_01010_1000001000, 0b0_01010_1000001100, 0b0_01010_1000010000, 0b0_01010_1000010100, 0b0_01010_1000011000, 0b0_01010_1000011100, 0b0_01010_1000100000, 0b0_01010_1000100100, 0b0_01010_1000101000, 0b0_01010_1000101100, 0b0_01010_1000110000, 0b0_01010_1000110100, 0b0_01010_1000111000, 0b0_01010_1000111100, 0b0_01010_1001000000, 0b0_01010_1001000100, 0b0_01010_1001001000, 0b0_01010_1001001100, 0b0_01010_1001010000, 0b0_01010_1001010100, 0b0_01010_1001011000, 0b0_01010_1001011100, 0b0_01010_1001100000, 0b0_01010_1001100100, 0b0_01010_1001101000, 0b0_01010_1001101100, 0b0_01010_1001110000, 0b0_01010_1001110100, 0b0_01010_1001111000, 0b0_01010_1001111100, 0b0_01010_1010000000, 0b0_01010_1010000100, 0b0_01010_1010001000, 0b0_01010_1010001100, 0b0_01010_1010010000, 0b0_01010_1010010100, 0b0_01010_1010011000, 0b0_01010_1010011100, 0b0_01010_1010100000, 0b0_01010_1010100100, 0b0_01010_1010101000, 0b0_01010_1010101100, 0b0_01010_1010110000, 0b0_01010_1010110100, 0b0_01010_1010111000, 0b0_01010_1010111100, 0b0_01010_1011000000, 0b0_01010_1011000100, 0b0_01010_1011001000, 0b0_01010_1011001100, 0b0_01010_1011010000, 0b0_01010_1011010100, 0b0_01010_1011011000, 0b0_01010_1011011100, 0b0_01010_1011100000, 0b0_01010_1011100100, 0b0_01010_1011101000, 0b0_01010_1011101100, 0b0_01010_1011110000, 0b0_01010_1011110100, 0b0_01010_1011111000, 0b0_01010_1011111100, 0b0_01010_1100000000, 0b0_01010_1100000100, 0b0_01010_1100001000, 0b0_01010_1100001100, 0b0_01010_1100010000, 0b0_01010_1100010100, 0b0_01010_1100011000, 0b0_01010_1100011100, 0b0_01010_1100100000, 0b0_01010_1100100100, 0b0_01010_1100101000, 0b0_01010_1100101100, 0b0_01010_1100110000, 0b0_01010_1100110100, 0b0_01010_1100111000, 0b0_01010_1100111100, 0b0_01010_1101000000, 0b0_01010_1101000100, 0b0_01010_1101001000, 0b0_01010_1101001100, 0b0_01010_1101010000, 0b0_01010_1101010100, 0b0_01010_1101011000, 0b0_01010_1101011100, 0b0_01010_1101100000, 0b0_01010_1101100100, 0b0_01010_1101101000, 0b0_01010_1101101100, 0b0_01010_1101110000, 0b0_01010_1101110100, 0b0_01010_1101111000, 0b0_01010_1101111100, 0b0_01010_1110000000, 0b0_01010_1110000100, 0b0_01010_1110001000, 0b0_01010_1110001100, 0b0_01010_1110010000, 0b0_01010_1110010100, 0b0_01010_1110011000, 0b0_01010_1110011100, 0b0_01010_1110100000, 0b0_01010_1110100100, 0b0_01010_1110101000, 0b0_01010_1110101100, 0b0_01010_1110110000, 0b0_01010_1110110100, 0b0_01010_1110111000, 0b0_01010_1110111100, 0b0_01010_1111000000, 0b0_01010_1111000100, 0b0_01010_1111001000, 0b0_01010_1111001100, 0b0_01010_1111010000, 0b0_01010_1111010100, 0b0_01010_1111011000, 0b0_01010_1111011100, 0b0_01010_1111100000, 0b0_01010_1111100100, 0b0_01010_1111101000, 0b0_01010_1111101100, 0b0_01010_1111110000, 0b0_01010_1111110100, 0b0_01010_1111111000, 0b0_01010_1111111100, ], dtype=torch.int16) # torch does not have torch.uint16 (x_x) FP12_TO_FP16 = FP12_TO_FP16.view((2,-1)) FP12_TO_FP16[1,:].bitwise_or_(0x8000) FP12_TO_FP16 = FP12_TO_FP16.view((-1,)) def fp12_to_fp16(exp: torch.Tensor, frac: torch.Tensor): global FP12_TO_FP16, EXP_MASK assert exp.dtype == torch.uint8 assert frac.dtype == torch.uint8 assert exp.ndim == 1 assert frac.ndim == 1 assert exp.size(0) * 2 == frac.size(0) if FP12_TO_FP16.device != exp.device: FP12_TO_FP16 = FP12_TO_FP16.to(exp.device) if EXP_MASK.device != exp.device: EXP_MASK = EXP_MASK.to(exp.device) exp = exp.repeat_interleave(2).view((-1,2)) exp.bitwise_and_(EXP_MASK) indices = exp.to(dtype=torch.int16) indices[..., 0] <<= 4 # 1111_0000 => 1111_0000_0000 indices[..., 1] <<= 8 # 0000_1111 => 1111_0000_0000 indices = indices.view((-1,)) indices.add_(frac) FP16 = torch.take(FP12_TO_FP16, indices.long()) return FP16.view(dtype=torch.float16)