// File: /workspace/github_cpp_makefile_star2_O3/tenup-coin[P]seeder/util.cpp
// Function: EncodeBase32[abi:cxx11](unsigned char const*, unsigned long)
string EncodeBase32(const unsigned char* pch, size_t len)
{
    static const char *pbase32 = "abcdefghijklmnopqrstuvwxyz234567";

    string strRet="";
    strRet.reserve((len+4)/5*8);

    int mode=0, left=0;
    const unsigned char *pchEnd = pch+len;

    while (pch<pchEnd)
    {
        int enc = *(pch++);
        switch (mode)
        {
            case 0: // we have no bits
                strRet += pbase32[enc >> 3];
                left = (enc & 7) << 2;
                mode = 1;
                break;

            case 1: // we have three bits
                strRet += pbase32[left | (enc >> 6)];
                strRet += pbase32[(enc >> 1) & 31];
                left = (enc & 1) << 4;
                mode = 2;
                break;

            case 2: // we have one bit
                strRet += pbase32[left | (enc >> 4)];
                left = (enc & 15) << 1;
                mode = 3;
                break;

            case 3: // we have four bits
                strRet += pbase32[left | (enc >> 7)];
                strRet += pbase32[(enc >> 2) & 31];
                left = (enc & 3) << 3;
                mode = 4;
                break;

            case 4: // we have two bits
                strRet += pbase32[left | (enc >> 5)];
                strRet += pbase32[enc & 31];
                mode = 0;
        }
    }

    static const int nPadding[5] = {0, 6, 4, 3, 1};
    if (mode)
    {
        strRet += pbase32[left];
        for (int n=0; n<nPadding[mode]; n++)
             strRet += '=';
    }

    return strRet;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rdx, %r14
movq %rsi, %r15
movq %rdi, %rbx
leaq 0x10(%rdi), %rax
movq %rax, (%rsp)
movq %rax, (%rdi)
leaq 0x1170(%rip), %rdx      # 0x13745
movq %rdx, %rsi
callq 0x5b14
leaq 0x4(%r14), %rax
movabsq $-0x3333333333333333, %rcx # imm = 0xCCCCCCCCCCCCCCCD
mulq %rcx
leaq (%rdx,%rdx), %rsi
andq $-0x8, %rsi
movq %rbx, %rdi
callq 0x35e0
testq %r14, %r14
jle 0x1279b
addq %r15, %r14
xorl %ebp, %ebp
xorl %r13d, %r13d
movzbl (%r15), %r12d
cmpl $0x4, %r13d
jne 0x12656
movl %r12d, %eax
shrl $0x5, %eax
orl %ebp, %eax
leaq 0x20e8(%rip), %r13      # 0x14710
movsbl (%rax,%r13), %esi
movq %rbx, %rdi
callq 0x3370
andl $0x1f, %r12d
movsbl (%r12,%r13), %esi
movq %rbx, %rdi
callq 0x3370
incq %r15
xorl %r13d, %r13d
cmpq %r14, %r15
jb 0x1260f
jmp 0x1279b
jae 0x1274c
movl %r13d, %eax
leaq 0x1c3a(%rip), %rcx      # 0x142a0
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl %r12d, %eax
shrl $0x3, %eax
leaq 0x2094(%rip), %rcx      # 0x14710
movsbl (%rax,%rcx), %esi
movq %rbx, %rdi
callq 0x3370
shll $0x2, %r12d
andl $0x1c, %r12d
movl $0x1, %r13d
jmp 0x12749
movl %r12d, %eax
shrl $0x4, %eax
orl %ebp, %eax
leaq 0x2066(%rip), %rcx      # 0x14710
movsbl (%rax,%rcx), %esi
movq %rbx, %rdi
callq 0x3370
addl %r12d, %r12d
andl $0x1e, %r12d
movl $0x3, %r13d
jmp 0x12749
movl %r12d, %eax
shrl $0x7, %eax
orl %ebp, %eax
leaq 0x2039(%rip), %r13      # 0x14710
movsbl (%rax,%r13), %esi
movq %rbx, %rdi
callq 0x3370
movl %r12d, %eax
shrl $0x2, %eax
andl $0x1f, %eax
movsbl (%rax,%r13), %esi
movq %rbx, %rdi
callq 0x3370
shll $0x3, %r12d
andl $0x18, %r12d
movl $0x4, %r13d
jmp 0x12749
movl %r12d, %eax
shrl $0x6, %eax
orl %ebp, %eax
leaq 0x1ff7(%rip), %r13      # 0x14710
movsbl (%rax,%r13), %esi
movq %rbx, %rdi
callq 0x3370
movl %r12d, %eax
shrl %eax
andl $0x1f, %eax
movsbl (%rax,%r13), %esi
movq %rbx, %rdi
callq 0x3370
shll $0x4, %r12d
andl $0x10, %r12d
movl $0x2, %r13d
movl %r12d, %ebp
incq %r15
cmpq %r14, %r15
jb 0x1260f
testl %r13d, %r13d
je 0x1279b
movl %ebp, %eax
leaq 0x1faa(%rip), %rcx      # 0x14710
movsbl (%rax,%rcx), %esi
movq %rbx, %rdi
callq 0x3370
movslq %r13d, %rax
leaq 0x1b74(%rip), %rcx      # 0x142f0
movl (%rcx,%rax,4), %eax
cmpl $0x2, %eax
movl $0x1, %ebp
cmovgel %eax, %ebp
movq %rbx, %rdi
movl $0x3d, %esi
callq 0x3370
decl %ebp
jne 0x1278a
movq %rbx, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x127b5
jmp 0x127b5
jmp 0x127b5
jmp 0x127b5
movq %rax, %r14
movq (%rbx), %rdi
cmpq (%rsp), %rdi
je 0x127c6
callq 0x33d0
movq %r14, %rdi
callq 0x3650