// File: attractivechaos[P]udb2/stb/./stb.h
// Function: stb_regex
int stb_regex(char *regex, char *str)
{
   static stb_perfect p;
   static stb_matcher ** matchers;
   static char        ** regexps;
   static char        ** regexp_cache;
   static unsigned short *mapping;
   int z = stb_perfect_hash(&p, (int) regex);
   if (z >= 0) {
      if (strcmp(regex, regexp_cache[(int) mapping[z]])) {
         int i = mapping[z];
         stb_matcher_free(matchers[i]);
         free(regexp_cache[i]);
         regexps[i] = regex;
         regexp_cache[i] = strdup(regex);
         matchers[i] = stb_regex_matcher(regex);
      }
   } else {
      int i,n;
      if (regex == NULL) {
         for (i=0; i < stb_arr_len(matchers); ++i) {
            stb_matcher_free(matchers[i]);
            free(regexp_cache[i]);
         }
         stb_arr_free(matchers);
         stb_arr_free(regexps);
         stb_arr_free(regexp_cache);
         stb_perfect_destroy(&p);
         free(mapping); mapping = NULL;
         return -1;
      }
      stb_arr_push(regexps, regex);
      stb_arr_push(regexp_cache, strdup(regex));
      stb_arr_push(matchers, stb_regex_matcher(regex));
      stb_perfect_destroy(&p);
      n = stb_perfect_create(&p, (unsigned int *) (char **) regexps, stb_arr_len(regexps));
      mapping = (unsigned short *) realloc(mapping, n * sizeof(*mapping));
      for (i=0; i < stb_arr_len(regexps); ++i)
         mapping[stb_perfect_hash(&p, (int) regexps[i])] = i;
      z = stb_perfect_hash(&p, (int) regex);
   }
   return stb_matcher_find(matchers[(int) mapping[z]], str);
}

// Assembly:
subq $0xd8, %rsp
movq %rdi, 0xc8(%rsp)
movq %rsi, 0xc0(%rsp)
movq 0xc8(%rsp), %rax
movl %eax, %esi
leaq 0x12e30(%rip), %rdi     # 0x2bf48
callq 0x87c0
movl %eax, 0xbc(%rsp)
cmpl $0x0, 0xbc(%rsp)
jl 0x19219
movq 0xc8(%rsp), %rdi
movq 0x12e4f(%rip), %rax     # 0x2bf90
movq 0x12e50(%rip), %rcx     # 0x2bf98
movslq 0xbc(%rsp), %rdx
movzwl (%rcx,%rdx,2), %ecx
movslq %ecx, %rcx
movq (%rax,%rcx,8), %rsi
callq 0x21e0
cmpl $0x0, %eax
je 0x19214
movq 0x12e28(%rip), %rax     # 0x2bf98
movslq 0xbc(%rsp), %rcx
movzwl (%rax,%rcx,2), %eax
movl %eax, 0xb8(%rsp)
movq 0x12df6(%rip), %rax     # 0x2bf80
movslq 0xb8(%rsp), %rcx
movq (%rax,%rcx,8), %rdi
callq 0x17020
movq 0x12dee(%rip), %rax     # 0x2bf90
movslq 0xb8(%rsp), %rcx
movq (%rax,%rcx,8), %rdi
callq 0x23c0
movq 0xc8(%rsp), %rdx
movq 0x12dc6(%rip), %rax     # 0x2bf88
movslq 0xb8(%rsp), %rcx
movq %rdx, (%rax,%rcx,8)
movq 0xc8(%rsp), %rdi
callq 0x2390
movq %rax, %rdx
movq 0x12dab(%rip), %rax     # 0x2bf90
movslq 0xb8(%rsp), %rcx
movq %rdx, (%rax,%rcx,8)
movq 0xc8(%rsp), %rdi
callq 0x17030
movq %rax, %rdx
movq 0x12d78(%rip), %rax     # 0x2bf80
movslq 0xb8(%rsp), %rcx
movq %rdx, (%rax,%rcx,8)
jmp 0x19702
cmpq $0x0, 0xc8(%rsp)
jne 0x19318
movl $0x0, 0xb4(%rsp)
movl 0xb4(%rsp), %eax
movl %eax, 0xac(%rsp)
cmpq $0x0, 0x12d37(%rip)     # 0x2bf80
je 0x1925e
movq 0x12d2e(%rip), %rax     # 0x2bf80
movl -0x10(%rax), %eax
movl %eax, 0xa8(%rsp)
jmp 0x19269
xorl %eax, %eax
movl %eax, 0xa8(%rsp)
jmp 0x19269
movl 0xac(%rsp), %eax
movl 0xa8(%rsp), %ecx
cmpl %ecx, %eax
jge 0x192c1
movq 0x12cfe(%rip), %rax     # 0x2bf80
movslq 0xb4(%rsp), %rcx
movq (%rax,%rcx,8), %rdi
callq 0x17020
movq 0x12cf6(%rip), %rax     # 0x2bf90
movslq 0xb4(%rsp), %rcx
movq (%rax,%rcx,8), %rdi
callq 0x23c0
movl 0xb4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0xb4(%rsp)
jmp 0x19233
leaq 0x12cb8(%rip), %rdi     # 0x2bf80
callq 0x7d20
leaq 0x12cb4(%rip), %rdi     # 0x2bf88
callq 0x7d20
leaq 0x12cb0(%rip), %rdi     # 0x2bf90
callq 0x7d20
leaq 0x12c5c(%rip), %rdi     # 0x2bf48
callq 0x9670
movq 0x12ca0(%rip), %rdi     # 0x2bf98
callq 0x23c0
movq $0x0, 0x12c90(%rip) # 0x2bf98
movl $0xffffffff, 0xd4(%rsp) # imm = 0xFFFFFFFF
jmp 0x19737
movq 0xc8(%rsp), %rax
movq %rax, 0xa0(%rsp)
cmpq $0x0, 0x12c58(%rip)     # 0x2bf88
je 0x19345
movq 0x12c4f(%rip), %rax     # 0x2bf88
movl -0x10(%rax), %eax
movl %eax, 0x9c(%rsp)
jmp 0x19350
xorl %eax, %eax
movl %eax, 0x9c(%rsp)
jmp 0x19350
movl 0x9c(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x98(%rsp)
cmpq $0x0, 0x12c1f(%rip)     # 0x2bf88
je 0x1937e
movq 0x12c16(%rip), %rax     # 0x2bf88
movl -0xc(%rax), %eax
movl %eax, 0x94(%rsp)
jmp 0x19389
xorl %eax, %eax
movl %eax, 0x94(%rsp)
jmp 0x19389
movl 0x98(%rsp), %eax
movl 0x94(%rsp), %ecx
cmpl %ecx, %eax
jle 0x193b3
leaq 0x12be6(%rip), %rdi     # 0x2bf88
movl $0x8, %esi
movl $0x1, %edx
callq 0x8030
jmp 0x193c3
movq 0x12bce(%rip), %rax     # 0x2bf88
movl -0x10(%rax), %ecx
addl $0x1, %ecx
movl %ecx, -0x10(%rax)
movq 0x12bbe(%rip), %rax     # 0x2bf88
movq %rax, 0x88(%rsp)
cmpq $0x0, 0x12bae(%rip)     # 0x2bf88
je 0x193ef
movq 0x12ba5(%rip), %rax     # 0x2bf88
movl -0x10(%rax), %eax
movl %eax, 0x84(%rsp)
jmp 0x193fa
xorl %eax, %eax
movl %eax, 0x84(%rsp)
jmp 0x193fa
movq 0x88(%rsp), %rax
movq 0xa0(%rsp), %rdx
movl 0x84(%rsp), %ecx
movslq %ecx, %rcx
movq %rdx, -0x8(%rax,%rcx,8)
movq 0xc8(%rsp), %rdi
callq 0x2390
movq %rax, 0x78(%rsp)
cmpq $0x0, 0x12b5d(%rip)     # 0x2bf90
je 0x19445
movq 0x12b54(%rip), %rax     # 0x2bf90
movl -0x10(%rax), %eax
movl %eax, 0x74(%rsp)
jmp 0x1944d
xorl %eax, %eax
movl %eax, 0x74(%rsp)
jmp 0x1944d
movl 0x74(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x70(%rsp)
cmpq $0x0, 0x12b30(%rip)     # 0x2bf90
je 0x19472
movq 0x12b27(%rip), %rax     # 0x2bf90
movl -0xc(%rax), %eax
movl %eax, 0x6c(%rsp)
jmp 0x1947a
xorl %eax, %eax
movl %eax, 0x6c(%rsp)
jmp 0x1947a
movl 0x70(%rsp), %eax
movl 0x6c(%rsp), %ecx
cmpl %ecx, %eax
jle 0x1949e
leaq 0x12b03(%rip), %rdi     # 0x2bf90
movl $0x8, %esi
movl $0x1, %edx
callq 0x8030
jmp 0x194ae
movq 0x12aeb(%rip), %rax     # 0x2bf90
movl -0x10(%rax), %ecx
addl $0x1, %ecx
movl %ecx, -0x10(%rax)
movq 0x12adb(%rip), %rax     # 0x2bf90
movq %rax, 0x60(%rsp)
cmpq $0x0, 0x12ace(%rip)     # 0x2bf90
je 0x194d4
movq 0x12ac5(%rip), %rax     # 0x2bf90
movl -0x10(%rax), %eax
movl %eax, 0x5c(%rsp)
jmp 0x194dc
xorl %eax, %eax
movl %eax, 0x5c(%rsp)
jmp 0x194dc
movq 0x60(%rsp), %rax
movq 0x78(%rsp), %rdx
movl 0x5c(%rsp), %ecx
movslq %ecx, %rcx
movq %rdx, -0x8(%rax,%rcx,8)
movq 0xc8(%rsp), %rdi
callq 0x17030
movq %rax, 0x50(%rsp)
cmpq $0x0, 0x12a74(%rip)     # 0x2bf80
je 0x1951e
movq 0x12a6b(%rip), %rax     # 0x2bf80
movl -0x10(%rax), %eax
movl %eax, 0x4c(%rsp)
jmp 0x19526
xorl %eax, %eax
movl %eax, 0x4c(%rsp)
jmp 0x19526
movl 0x4c(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x48(%rsp)
cmpq $0x0, 0x12a47(%rip)     # 0x2bf80
je 0x1954b
movq 0x12a3e(%rip), %rax     # 0x2bf80
movl -0xc(%rax), %eax
movl %eax, 0x44(%rsp)
jmp 0x19553
xorl %eax, %eax
movl %eax, 0x44(%rsp)
jmp 0x19553
movl 0x48(%rsp), %eax
movl 0x44(%rsp), %ecx
cmpl %ecx, %eax
jle 0x19577
leaq 0x12a1a(%rip), %rdi     # 0x2bf80
movl $0x8, %esi
movl $0x1, %edx
callq 0x8030
jmp 0x19587
movq 0x12a02(%rip), %rax     # 0x2bf80
movl -0x10(%rax), %ecx
addl $0x1, %ecx
movl %ecx, -0x10(%rax)
movq 0x129f2(%rip), %rax     # 0x2bf80
movq %rax, 0x38(%rsp)
cmpq $0x0, 0x129e5(%rip)     # 0x2bf80
je 0x195ad
movq 0x129dc(%rip), %rax     # 0x2bf80
movl -0x10(%rax), %eax
movl %eax, 0x34(%rsp)
jmp 0x195b5
xorl %eax, %eax
movl %eax, 0x34(%rsp)
jmp 0x195b5
movq 0x38(%rsp), %rax
movq 0x50(%rsp), %rdx
movl 0x34(%rsp), %ecx
movslq %ecx, %rcx
movq %rdx, -0x8(%rax,%rcx,8)
leaq 0x12976(%rip), %rdi     # 0x2bf48
callq 0x9670
movq 0x129aa(%rip), %rax     # 0x2bf88
movq %rax, 0x28(%rsp)
cmpq $0x0, 0x1299d(%rip)     # 0x2bf88
je 0x195fd
movq 0x12994(%rip), %rax     # 0x2bf88
movl -0x10(%rax), %eax
movl %eax, 0x24(%rsp)
jmp 0x19605
xorl %eax, %eax
movl %eax, 0x24(%rsp)
jmp 0x19605
movq 0x28(%rsp), %rsi
movl 0x24(%rsp), %edx
leaq 0x12933(%rip), %rdi     # 0x2bf48
callq 0x88c0
movl %eax, 0xb0(%rsp)
movq 0x12970(%rip), %rdi     # 0x2bf98
movslq 0xb0(%rsp), %rsi
shlq %rsi
callq 0x22b0
movq %rax, 0x12959(%rip)     # 0x2bf98
movl $0x0, 0xb4(%rsp)
movl 0xb4(%rsp), %eax
movl %eax, 0x20(%rsp)
cmpq $0x0, 0x1292b(%rip)     # 0x2bf88
je 0x1966f
movq 0x12922(%rip), %rax     # 0x2bf88
movl -0x10(%rax), %eax
movl %eax, 0x1c(%rsp)
jmp 0x19677
xorl %eax, %eax
movl %eax, 0x1c(%rsp)
jmp 0x19677
movl 0x20(%rsp), %eax
movl 0x1c(%rsp), %ecx
cmpl %ecx, %eax
jge 0x196e5
movl 0xb4(%rsp), %eax
movw %ax, 0xe(%rsp)
movq 0x12902(%rip), %rax     # 0x2bf98
movq %rax, 0x10(%rsp)
movq 0x128e6(%rip), %rax     # 0x2bf88
movslq 0xb4(%rsp), %rcx
movq (%rax,%rcx,8), %rax
movl %eax, %esi
leaq 0x12891(%rip), %rdi     # 0x2bf48
callq 0x87c0
movw 0xe(%rsp), %dx
movl %eax, %ecx
movq 0x10(%rsp), %rax
movslq %ecx, %rcx
movw %dx, (%rax,%rcx,2)
movl 0xb4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0xb4(%rsp)
jmp 0x1964a
movq 0xc8(%rsp), %rax
movl %eax, %esi
leaq 0x12852(%rip), %rdi     # 0x2bf48
callq 0x87c0
movl %eax, 0xbc(%rsp)
movq 0x12877(%rip), %rax     # 0x2bf80
movq 0x12888(%rip), %rcx     # 0x2bf98
movslq 0xbc(%rsp), %rdx
movzwl (%rcx,%rdx,2), %ecx
movslq %ecx, %rcx
movq (%rax,%rcx,8), %rdi
movq 0xc0(%rsp), %rsi
callq 0x185a0
movl %eax, 0xd4(%rsp)
movl 0xd4(%rsp), %eax
addq $0xd8, %rsp
retq
nopw %cs:(%rax,%rax)