#define DIVIDE_ITER_0_0(i) \
" lsl %D[n]\n" \
" rol %A[p]\n" \
" cp %A[p],%A[d]\n" \
" cpc %B[p],%B[d]\n" \
" cpc %C[p],%C[d]\n" \
" cpc %D[p],%D[d]\n" \
" brcs zero_bit_" #i "_%=\n" \
" or %D[q],__tmp_reg__\n" \
"zero_bit_" #i "_%=:\n" \
" lsr __tmp_reg__\n"
#define DIVIDE_ITER_1_6(i) \
" lsl %D[n]\n" \
" rol %A[p]\n" \
" cp %A[p],%A[d]\n" \
" cpc %B[p],%B[d]\n" \
" cpc %C[p],%C[d]\n" \
" cpc %D[p],%D[d]\n" \
" brcs zero_bit_" #i "_%=\n" \
" sub %A[p],%A[d]\n" \
" or %D[q],__tmp_reg__\n" \
"zero_bit_" #i "_%=:\n" \
" lsr __tmp_reg__\n"
#define DIVIDE_ITER_7_7(i) \
" lsl %D[n]\n" \
" rol %A[p]\n" \
" cp %A[p],%A[d]\n" \
" cpc %B[p],%B[d]\n" \
" cpc %C[p],%C[d]\n" \
" cpc %D[p],%D[d]\n" \
" brcs zero_bit_" #i "_%=\n" \
" sub %A[p],%A[d]\n" \
" or %D[q],__tmp_reg__\n" \
"zero_bit_" #i "_%=:\n" \
" mov __tmp_reg__,%A[q]\n"
#define DIVIDE_ITER_8_8(i) \
" lsl %C[n]\n" \
" rol %A[p]\n" \
" rol %B[p]\n" \
" cp %A[p],%A[d]\n" \
" cpc %B[p],%B[d]\n" \
" cpc %C[p],%C[d]\n" \
" cpc %D[p],%D[d]\n" \
" brcs zero_bit_" #i "_%=\n" \
" sub %A[p],%A[d]\n" \
" or %C[q],__tmp_reg__\n" \
"zero_bit_" #i "_%=:\n" \
" lsr __tmp_reg__\n"
#define DIVIDE_ITER_9_14(i) \
" lsl %C[n]\n" \
" rol %A[p]\n" \
" rol %B[p]\n" \
" cp %A[p],%A[d]\n" \
" cpc %B[p],%B[d]\n" \
" cpc %C[p],%C[d]\n" \
" cpc %D[p],%D[d]\n" \
" brcs zero_bit_" #i "_%=\n" \
" sub %A[p],%A[d]\n" \
" sbc %B[p],%B[d]\n" \
" or %C[q],__tmp_reg__\n" \
"zero_bit_" #i "_%=:\n" \
" lsr __tmp_reg__\n"
#define DIVIDE_ITER_15_15(i) \
" lsl %C[n]\n" \
" rol %A[p]\n" \
" rol %B[p]\n" \
" cp %A[p],%A[d]\n" \
" cpc %B[p],%B[d]\n" \
" cpc %C[p],%C[d]\n" \
" cpc %D[p],%D[d]\n" \
" brcs zero_bit_" #i "_%=\n" \
" sub %A[p],%A[d]\n" \
" sbc %B[p],%B[d]\n" \
" or %C[q],__tmp_reg__\n" \
"zero_bit_" #i "_%=:\n" \
" mov __tmp_reg__,%A[q]\n"
#define DIVIDE_ITER_16_16(i) \
" lsl %B[n]\n" \
" rol %A[p]\n" \
" rol %B[p]\n" \
" rol %C[p]\n" \
" cp %A[p],%A[d]\n" \
" cpc %B[p],%B[d]\n" \
" cpc %C[p],%C[d]\n" \
" cpc %D[p],%D[d]\n" \
" brcs zero_bit_" #i "_%=\n" \
" sub %A[p],%A[d]\n" \
" sbc %B[p],%B[d]\n" \
" or %B[q],__tmp_reg__\n" \
"zero_bit_" #i "_%=:\n" \
" lsr __tmp_reg__\n"
#define DIVIDE_ITER_17_22(i) \
" lsl %B[n]\n" \
" rol %A[p]\n" \
" rol %B[p]\n" \
" rol %C[p]\n" \
" cp %A[p],%A[d]\n" \
" cpc %B[p],%B[d]\n" \
" cpc %C[p],%C[d]\n" \
" cpc %D[p],%D[d]\n" \
" brcs zero_bit_" #i "_%=\n" \
" sub %A[p],%A[d]\n" \
" sbc %B[p],%B[d]\n" \
" sbc %C[p],%C[d]\n" \
" or %B[q],__tmp_reg__\n" \
"zero_bit_" #i "_%=:\n" \
" lsr __tmp_reg__\n"
#define DIVIDE_ITER_23_23(i) \
" lsl %B[n]\n" \
" rol %A[p]\n" \
" rol %B[p]\n" \
" rol %C[p]\n" \
" cp %A[p],%A[d]\n" \
" cpc %B[p],%B[d]\n" \
" cpc %C[p],%C[d]\n" \
" cpc %D[p],%D[d]\n" \
" brcs zero_bit_" #i "_%=\n" \
" sub %A[p],%A[d]\n" \
" sbc %B[p],%B[d]\n" \
" sbc %C[p],%C[d]\n" \
" or %B[q],__tmp_reg__\n" \
"zero_bit_" #i "_%=:\n" \
" mov __tmp_reg__,%A[q]\n" \
" clr %A[q]\n"
#define DIVIDE_ITER_24_24(i) \
" lsl %A[n]\n" \
" rol %A[p]\n" \
" rol %B[p]\n" \
" rol %C[p]\n" \
" rol %D[p]\n" \
" cp %A[p],%A[d]\n" \
" cpc %B[p],%B[d]\n" \
" cpc %C[p],%C[d]\n" \
" cpc %D[p],%D[d]\n" \
" brcs zero_bit_" #i "_%=\n" \
" sub %A[p],%A[d]\n" \
" sbc %B[p],%B[d]\n" \
" sbc %C[p],%C[d]\n" \
" or %A[q],__tmp_reg__\n" \
"zero_bit_" #i "_%=:\n" \
" lsr __tmp_reg__\n"
#define DIVIDE_ITER_25_29(i) \
" lsl %A[n]\n" \
" rol %A[p]\n" \
" rol %B[p]\n" \
" rol %C[p]\n" \
" rol %D[p]\n" \
" cp %A[p],%A[d]\n" \
" cpc %B[p],%B[d]\n" \
" cpc %C[p],%C[d]\n" \
" cpc %D[p],%D[d]\n" \
" brcs zero_bit_" #i "_%=\n" \
" sub %A[p],%A[d]\n" \
" sbc %B[p],%B[d]\n" \
" sbc %C[p],%C[d]\n" \
" sbc %D[p],%D[d]\n" \
" or %A[q],__tmp_reg__\n" \
"zero_bit_" #i "_%=:\n" \
" lsr __tmp_reg__\n"
#define DIVIDE_ITER_30_30(i) \
" lsl %A[n]\n" \
" rol %A[p]\n" \
" rol %B[p]\n" \
" rol %C[p]\n" \
" rol %D[p]\n" \
" cp %A[p],%A[d]\n" \
" cpc %B[p],%B[d]\n" \
" cpc %C[p],%C[d]\n" \
" cpc %D[p],%D[d]\n" \
" brcs zero_bit_" #i "_%=\n" \
" sub %A[p],%A[d]\n" \
" sbc %B[p],%B[d]\n" \
" sbc %C[p],%C[d]\n" \
" sbc %D[p],%D[d]\n" \
" or %A[q],__tmp_reg__\n" \
"zero_bit_" #i "_%=:\n" \
static uint32_t div32 (uint32_t n, uint32_t d)
{
uint32_t p = 0;
uint32_t q = 0x80;
asm(
" mov __tmp_reg__,%A[q]\n"
DIVIDE_ITER_0_0(0)
DIVIDE_ITER_1_6(1)
DIVIDE_ITER_1_6(2)
DIVIDE_ITER_1_6(3)
DIVIDE_ITER_1_6(4)
DIVIDE_ITER_1_6(5)
DIVIDE_ITER_1_6(6)
DIVIDE_ITER_7_7(7)
DIVIDE_ITER_8_8(8)
DIVIDE_ITER_9_14(9)
DIVIDE_ITER_9_14(10)
DIVIDE_ITER_9_14(11)
DIVIDE_ITER_9_14(12)
DIVIDE_ITER_9_14(13)
DIVIDE_ITER_9_14(14)
DIVIDE_ITER_15_15(15)
DIVIDE_ITER_16_16(16)
DIVIDE_ITER_17_22(17)
DIVIDE_ITER_17_22(18)
DIVIDE_ITER_17_22(19)
DIVIDE_ITER_17_22(20)
DIVIDE_ITER_17_22(21)
DIVIDE_ITER_17_22(22)
DIVIDE_ITER_23_23(23)
DIVIDE_ITER_24_24(24)
DIVIDE_ITER_25_29(25)
DIVIDE_ITER_25_29(26)
DIVIDE_ITER_25_29(27)
DIVIDE_ITER_25_29(28)
DIVIDE_ITER_25_29(29)
DIVIDE_ITER_30_30(30)
" lsl %A[n]\n"
" rol %A[p]\n"
" rol %B[p]\n"
" rol %C[p]\n"
" rol %D[p]\n"
" cp %A[p],%A[d]\n"
" cpc %B[p],%B[d]\n"
" cpc %C[p],%C[d]\n"
" cpc %D[p],%D[d]\n"
" brcs end_zero_bit%=\n"
" inc %A[q]\n"
"end_zero_bit%=:\n"
: [p] "=&r" (p),
[q] "=&r" (q),
[n] "=&r" (n)
: "[p]" (p),
"[q]" (q),
"[n]" (n),
[d] "r" (d)
);
return q;
}
I2RlZmluZSBESVZJREVfSVRFUl8wXzAoaSkgXAoiICAgIGxzbCAlRFtuXVxuIiBcCiIgICAgcm9sICVBW3BdXG4iIFwKIiAgICBjcCAlQVtwXSwlQVtkXVxuIiBcCiIgICAgY3BjICVCW3BdLCVCW2RdXG4iIFwKIiAgICBjcGMgJUNbcF0sJUNbZF1cbiIgXAoiICAgIGNwYyAlRFtwXSwlRFtkXVxuIiBcCiIgICAgYnJjcyB6ZXJvX2JpdF8iICNpICJfJT1cbiIgXAoiICAgIG9yICVEW3FdLF9fdG1wX3JlZ19fXG4iIFwKInplcm9fYml0XyIgI2kgIl8lPTpcbiIgXAoiICAgIGxzciBfX3RtcF9yZWdfX1xuIgoKI2RlZmluZSBESVZJREVfSVRFUl8xXzYoaSkgXAoiICAgIGxzbCAlRFtuXVxuIiBcCiIgICAgcm9sICVBW3BdXG4iIFwKIiAgICBjcCAlQVtwXSwlQVtkXVxuIiBcCiIgICAgY3BjICVCW3BdLCVCW2RdXG4iIFwKIiAgICBjcGMgJUNbcF0sJUNbZF1cbiIgXAoiICAgIGNwYyAlRFtwXSwlRFtkXVxuIiBcCiIgICAgYnJjcyB6ZXJvX2JpdF8iICNpICJfJT1cbiIgXAoiICAgIHN1YiAlQVtwXSwlQVtkXVxuIiBcCiIgICAgb3IgJURbcV0sX190bXBfcmVnX19cbiIgXAoiemVyb19iaXRfIiAjaSAiXyU9OlxuIiBcCiIgICAgbHNyIF9fdG1wX3JlZ19fXG4iCgojZGVmaW5lIERJVklERV9JVEVSXzdfNyhpKSBcCiIgICAgbHNsICVEW25dXG4iIFwKIiAgICByb2wgJUFbcF1cbiIgXAoiICAgIGNwICVBW3BdLCVBW2RdXG4iIFwKIiAgICBjcGMgJUJbcF0sJUJbZF1cbiIgXAoiICAgIGNwYyAlQ1twXSwlQ1tkXVxuIiBcCiIgICAgY3BjICVEW3BdLCVEW2RdXG4iIFwKIiAgICBicmNzIHplcm9fYml0XyIgI2kgIl8lPVxuIiBcCiIgICAgc3ViICVBW3BdLCVBW2RdXG4iIFwKIiAgICBvciAlRFtxXSxfX3RtcF9yZWdfX1xuIiBcCiJ6ZXJvX2JpdF8iICNpICJfJT06XG4iIFwKIiAgICBtb3YgX190bXBfcmVnX18sJUFbcV1cbiIKCiNkZWZpbmUgRElWSURFX0lURVJfOF84KGkpIFwKIiAgICBsc2wgJUNbbl1cbiIgXAoiICAgIHJvbCAlQVtwXVxuIiBcCiIgICAgcm9sICVCW3BdXG4iIFwKIiAgICBjcCAlQVtwXSwlQVtkXVxuIiBcCiIgICAgY3BjICVCW3BdLCVCW2RdXG4iIFwKIiAgICBjcGMgJUNbcF0sJUNbZF1cbiIgXAoiICAgIGNwYyAlRFtwXSwlRFtkXVxuIiBcCiIgICAgYnJjcyB6ZXJvX2JpdF8iICNpICJfJT1cbiIgXAoiICAgIHN1YiAlQVtwXSwlQVtkXVxuIiBcCiIgICAgb3IgJUNbcV0sX190bXBfcmVnX19cbiIgXAoiemVyb19iaXRfIiAjaSAiXyU9OlxuIiBcCiIgICAgbHNyIF9fdG1wX3JlZ19fXG4iCgojZGVmaW5lIERJVklERV9JVEVSXzlfMTQoaSkgXAoiICAgIGxzbCAlQ1tuXVxuIiBcCiIgICAgcm9sICVBW3BdXG4iIFwKIiAgICByb2wgJUJbcF1cbiIgXAoiICAgIGNwICVBW3BdLCVBW2RdXG4iIFwKIiAgICBjcGMgJUJbcF0sJUJbZF1cbiIgXAoiICAgIGNwYyAlQ1twXSwlQ1tkXVxuIiBcCiIgICAgY3BjICVEW3BdLCVEW2RdXG4iIFwKIiAgICBicmNzIHplcm9fYml0XyIgI2kgIl8lPVxuIiBcCiIgICAgc3ViICVBW3BdLCVBW2RdXG4iIFwKIiAgICBzYmMgJUJbcF0sJUJbZF1cbiIgXAoiICAgIG9yICVDW3FdLF9fdG1wX3JlZ19fXG4iIFwKInplcm9fYml0XyIgI2kgIl8lPTpcbiIgXAoiICAgIGxzciBfX3RtcF9yZWdfX1xuIgoKI2RlZmluZSBESVZJREVfSVRFUl8xNV8xNShpKSBcCiIgICAgbHNsICVDW25dXG4iIFwKIiAgICByb2wgJUFbcF1cbiIgXAoiICAgIHJvbCAlQltwXVxuIiBcCiIgICAgY3AgJUFbcF0sJUFbZF1cbiIgXAoiICAgIGNwYyAlQltwXSwlQltkXVxuIiBcCiIgICAgY3BjICVDW3BdLCVDW2RdXG4iIFwKIiAgICBjcGMgJURbcF0sJURbZF1cbiIgXAoiICAgIGJyY3MgemVyb19iaXRfIiAjaSAiXyU9XG4iIFwKIiAgICBzdWIgJUFbcF0sJUFbZF1cbiIgXAoiICAgIHNiYyAlQltwXSwlQltkXVxuIiBcCiIgICAgb3IgJUNbcV0sX190bXBfcmVnX19cbiIgXAoiemVyb19iaXRfIiAjaSAiXyU9OlxuIiBcCiIgICAgbW92IF9fdG1wX3JlZ19fLCVBW3FdXG4iCgojZGVmaW5lIERJVklERV9JVEVSXzE2XzE2KGkpIFwKIiAgICBsc2wgJUJbbl1cbiIgXAoiICAgIHJvbCAlQVtwXVxuIiBcCiIgICAgcm9sICVCW3BdXG4iIFwKIiAgICByb2wgJUNbcF1cbiIgXAoiICAgIGNwICVBW3BdLCVBW2RdXG4iIFwKIiAgICBjcGMgJUJbcF0sJUJbZF1cbiIgXAoiICAgIGNwYyAlQ1twXSwlQ1tkXVxuIiBcCiIgICAgY3BjICVEW3BdLCVEW2RdXG4iIFwKIiAgICBicmNzIHplcm9fYml0XyIgI2kgIl8lPVxuIiBcCiIgICAgc3ViICVBW3BdLCVBW2RdXG4iIFwKIiAgICBzYmMgJUJbcF0sJUJbZF1cbiIgXAoiICAgIG9yICVCW3FdLF9fdG1wX3JlZ19fXG4iIFwKInplcm9fYml0XyIgI2kgIl8lPTpcbiIgXAoiICAgIGxzciBfX3RtcF9yZWdfX1xuIgoKI2RlZmluZSBESVZJREVfSVRFUl8xN18yMihpKSBcCiIgICAgbHNsICVCW25dXG4iIFwKIiAgICByb2wgJUFbcF1cbiIgXAoiICAgIHJvbCAlQltwXVxuIiBcCiIgICAgcm9sICVDW3BdXG4iIFwKIiAgICBjcCAlQVtwXSwlQVtkXVxuIiBcCiIgICAgY3BjICVCW3BdLCVCW2RdXG4iIFwKIiAgICBjcGMgJUNbcF0sJUNbZF1cbiIgXAoiICAgIGNwYyAlRFtwXSwlRFtkXVxuIiBcCiIgICAgYnJjcyB6ZXJvX2JpdF8iICNpICJfJT1cbiIgXAoiICAgIHN1YiAlQVtwXSwlQVtkXVxuIiBcCiIgICAgc2JjICVCW3BdLCVCW2RdXG4iIFwKIiAgICBzYmMgJUNbcF0sJUNbZF1cbiIgXAoiICAgIG9yICVCW3FdLF9fdG1wX3JlZ19fXG4iIFwKInplcm9fYml0XyIgI2kgIl8lPTpcbiIgXAoiICAgIGxzciBfX3RtcF9yZWdfX1xuIgoKI2RlZmluZSBESVZJREVfSVRFUl8yM18yMyhpKSBcCiIgICAgbHNsICVCW25dXG4iIFwKIiAgICByb2wgJUFbcF1cbiIgXAoiICAgIHJvbCAlQltwXVxuIiBcCiIgICAgcm9sICVDW3BdXG4iIFwKIiAgICBjcCAlQVtwXSwlQVtkXVxuIiBcCiIgICAgY3BjICVCW3BdLCVCW2RdXG4iIFwKIiAgICBjcGMgJUNbcF0sJUNbZF1cbiIgXAoiICAgIGNwYyAlRFtwXSwlRFtkXVxuIiBcCiIgICAgYnJjcyB6ZXJvX2JpdF8iICNpICJfJT1cbiIgXAoiICAgIHN1YiAlQVtwXSwlQVtkXVxuIiBcCiIgICAgc2JjICVCW3BdLCVCW2RdXG4iIFwKIiAgICBzYmMgJUNbcF0sJUNbZF1cbiIgXAoiICAgIG9yICVCW3FdLF9fdG1wX3JlZ19fXG4iIFwKInplcm9fYml0XyIgI2kgIl8lPTpcbiIgXAoiICAgIG1vdiBfX3RtcF9yZWdfXywlQVtxXVxuIiBcCiIgICAgY2xyICVBW3FdXG4iCgojZGVmaW5lIERJVklERV9JVEVSXzI0XzI0KGkpIFwKIiAgICBsc2wgJUFbbl1cbiIgXAoiICAgIHJvbCAlQVtwXVxuIiBcCiIgICAgcm9sICVCW3BdXG4iIFwKIiAgICByb2wgJUNbcF1cbiIgXAoiICAgIHJvbCAlRFtwXVxuIiBcCiIgICAgY3AgJUFbcF0sJUFbZF1cbiIgXAoiICAgIGNwYyAlQltwXSwlQltkXVxuIiBcCiIgICAgY3BjICVDW3BdLCVDW2RdXG4iIFwKIiAgICBjcGMgJURbcF0sJURbZF1cbiIgXAoiICAgIGJyY3MgemVyb19iaXRfIiAjaSAiXyU9XG4iIFwKIiAgICBzdWIgJUFbcF0sJUFbZF1cbiIgXAoiICAgIHNiYyAlQltwXSwlQltkXVxuIiBcCiIgICAgc2JjICVDW3BdLCVDW2RdXG4iIFwKIiAgICBvciAlQVtxXSxfX3RtcF9yZWdfX1xuIiBcCiJ6ZXJvX2JpdF8iICNpICJfJT06XG4iIFwKIiAgICBsc3IgX190bXBfcmVnX19cbiIKCiNkZWZpbmUgRElWSURFX0lURVJfMjVfMjkoaSkgXAoiICAgIGxzbCAlQVtuXVxuIiBcCiIgICAgcm9sICVBW3BdXG4iIFwKIiAgICByb2wgJUJbcF1cbiIgXAoiICAgIHJvbCAlQ1twXVxuIiBcCiIgICAgcm9sICVEW3BdXG4iIFwKIiAgICBjcCAlQVtwXSwlQVtkXVxuIiBcCiIgICAgY3BjICVCW3BdLCVCW2RdXG4iIFwKIiAgICBjcGMgJUNbcF0sJUNbZF1cbiIgXAoiICAgIGNwYyAlRFtwXSwlRFtkXVxuIiBcCiIgICAgYnJjcyB6ZXJvX2JpdF8iICNpICJfJT1cbiIgXAoiICAgIHN1YiAlQVtwXSwlQVtkXVxuIiBcCiIgICAgc2JjICVCW3BdLCVCW2RdXG4iIFwKIiAgICBzYmMgJUNbcF0sJUNbZF1cbiIgXAoiICAgIHNiYyAlRFtwXSwlRFtkXVxuIiBcCiIgICAgb3IgJUFbcV0sX190bXBfcmVnX19cbiIgXAoiemVyb19iaXRfIiAjaSAiXyU9OlxuIiBcCiIgICAgbHNyIF9fdG1wX3JlZ19fXG4iCgojZGVmaW5lIERJVklERV9JVEVSXzMwXzMwKGkpIFwKIiAgICBsc2wgJUFbbl1cbiIgXAoiICAgIHJvbCAlQVtwXVxuIiBcCiIgICAgcm9sICVCW3BdXG4iIFwKIiAgICByb2wgJUNbcF1cbiIgXAoiICAgIHJvbCAlRFtwXVxuIiBcCiIgICAgY3AgJUFbcF0sJUFbZF1cbiIgXAoiICAgIGNwYyAlQltwXSwlQltkXVxuIiBcCiIgICAgY3BjICVDW3BdLCVDW2RdXG4iIFwKIiAgICBjcGMgJURbcF0sJURbZF1cbiIgXAoiICAgIGJyY3MgemVyb19iaXRfIiAjaSAiXyU9XG4iIFwKIiAgICBzdWIgJUFbcF0sJUFbZF1cbiIgXAoiICAgIHNiYyAlQltwXSwlQltkXVxuIiBcCiIgICAgc2JjICVDW3BdLCVDW2RdXG4iIFwKIiAgICBzYmMgJURbcF0sJURbZF1cbiIgXAoiICAgIG9yICVBW3FdLF9fdG1wX3JlZ19fXG4iIFwKInplcm9fYml0XyIgI2kgIl8lPTpcbiIgXAoKc3RhdGljIHVpbnQzMl90IGRpdjMyICh1aW50MzJfdCBuLCB1aW50MzJfdCBkKQp7CiAgICB1aW50MzJfdCBwID0gMDsKICAgIHVpbnQzMl90IHEgPSAweDgwOwogICAgCiAgICBhc20oCiAgICAgICAgIiAgICBtb3YgX190bXBfcmVnX18sJUFbcV1cbiIKICAgICAgICBESVZJREVfSVRFUl8wXzAoMCkKICAgICAgICBESVZJREVfSVRFUl8xXzYoMSkKICAgICAgICBESVZJREVfSVRFUl8xXzYoMikKICAgICAgICBESVZJREVfSVRFUl8xXzYoMykKICAgICAgICBESVZJREVfSVRFUl8xXzYoNCkKICAgICAgICBESVZJREVfSVRFUl8xXzYoNSkKICAgICAgICBESVZJREVfSVRFUl8xXzYoNikKICAgICAgICBESVZJREVfSVRFUl83XzcoNykKICAgICAgICBESVZJREVfSVRFUl84XzgoOCkKICAgICAgICBESVZJREVfSVRFUl85XzE0KDkpCiAgICAgICAgRElWSURFX0lURVJfOV8xNCgxMCkKICAgICAgICBESVZJREVfSVRFUl85XzE0KDExKQogICAgICAgIERJVklERV9JVEVSXzlfMTQoMTIpCiAgICAgICAgRElWSURFX0lURVJfOV8xNCgxMykKICAgICAgICBESVZJREVfSVRFUl85XzE0KDE0KQogICAgICAgIERJVklERV9JVEVSXzE1XzE1KDE1KQogICAgICAgIERJVklERV9JVEVSXzE2XzE2KDE2KQogICAgICAgIERJVklERV9JVEVSXzE3XzIyKDE3KQogICAgICAgIERJVklERV9JVEVSXzE3XzIyKDE4KQogICAgICAgIERJVklERV9JVEVSXzE3XzIyKDE5KQogICAgICAgIERJVklERV9JVEVSXzE3XzIyKDIwKQogICAgICAgIERJVklERV9JVEVSXzE3XzIyKDIxKQogICAgICAgIERJVklERV9JVEVSXzE3XzIyKDIyKQogICAgICAgIERJVklERV9JVEVSXzIzXzIzKDIzKQogICAgICAgIERJVklERV9JVEVSXzI0XzI0KDI0KQogICAgICAgIERJVklERV9JVEVSXzI1XzI5KDI1KQogICAgICAgIERJVklERV9JVEVSXzI1XzI5KDI2KQogICAgICAgIERJVklERV9JVEVSXzI1XzI5KDI3KQogICAgICAgIERJVklERV9JVEVSXzI1XzI5KDI4KQogICAgICAgIERJVklERV9JVEVSXzI1XzI5KDI5KQogICAgICAgIERJVklERV9JVEVSXzMwXzMwKDMwKQogICAgICAgICIgICAgbHNsICVBW25dXG4iCiAgICAgICAgIiAgICByb2wgJUFbcF1cbiIKICAgICAgICAiICAgIHJvbCAlQltwXVxuIgogICAgICAgICIgICAgcm9sICVDW3BdXG4iCiAgICAgICAgIiAgICByb2wgJURbcF1cbiIKICAgICAgICAiICAgIGNwICVBW3BdLCVBW2RdXG4iCiAgICAgICAgIiAgICBjcGMgJUJbcF0sJUJbZF1cbiIKICAgICAgICAiICAgIGNwYyAlQ1twXSwlQ1tkXVxuIgogICAgICAgICIgICAgY3BjICVEW3BdLCVEW2RdXG4iCiAgICAgICAgIiAgICBicmNzIGVuZF96ZXJvX2JpdCU9XG4iCiAgICAgICAgIiAgICBpbmMgJUFbcV1cbiIKICAgICAgICAiZW5kX3plcm9fYml0JT06XG4iCiAgICAgICAgCiAgICAgICAgOiBbcF0gIj0mciIgKHApLAogICAgICAgICAgW3FdICI9JnIiIChxKSwKICAgICAgICAgIFtuXSAiPSZyIiAobikKICAgICAgICA6ICJbcF0iIChwKSwKICAgICAgICAgICJbcV0iIChxKSwKICAgICAgICAgICJbbl0iIChuKSwKICAgICAgICAgIFtkXSAiciIgKGQpCiAgICApOwogICAgCiAgICByZXR1cm4gcTsKfQ==