LLM4Binary/decompile-bench-makefile huggingface dataset:
// File: /workspace/github_cpp_makefile_star2_O2/bonetblai[P]mdp-engine/ctp3/../engine/dispatcher.h
// Function: Dispatcher::dispatcher_t<state_t>::~dispatcher_t()
virtual ~dispatcher_t() {
        for( typename std::map<std::string, Algorithm::algorithm_t<T>*>::const_iterator it = algorithms_.begin(); it != algorithms_.end(); ++it )
            delete it->second;
        for( typename std::map<std::string, Heuristic::heuristic_t<T>*>::const_iterator it = heuristics_.begin(); it != heuristics_.end(); ++it )
            delete it->second;
        for( typename std::map<std::string, Online::Policy::policy_t<T>*>::const_iterator it = policies_.begin(); it != policies_.end(); ++it )
            delete it->second;
    }

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rdi, %rbx
leaq 0x2bed5(%rip), %rax     # 0x34100
movq %rax, (%rdi)
movq 0x20(%rdi), %r14
leaq 0x10(%rdi), %r15
cmpq %r15, %r14
je 0x8257
movq 0x40(%r14), %rdi
testq %rdi, %rdi
je 0x824a
movq (%rdi), %rax
callq *0x8(%rax)
movq %r14, %rdi
callq 0x52e0
movq %rax, %r14
jmp 0x8236
movq 0x50(%rbx), %r14
leaq 0x40(%rbx), %r15
cmpq %r15, %r14
je 0x8280
movq 0x40(%r14), %rdi
testq %rdi, %rdi
je 0x8273
movq (%rdi), %rax
callq *0x8(%rax)
movq %r14, %rdi
callq 0x52e0
movq %rax, %r14
jmp 0x825f
movq 0x80(%rbx), %r14
leaq 0x70(%rbx), %r15
cmpq %r15, %r14
je 0x82ac
movq 0x40(%r14), %rdi
testq %rdi, %rdi
je 0x829f
movq (%rdi), %rax
callq *0x8(%rax)
movq %r14, %rdi
callq 0x52e0
movq %rax, %r14
jmp 0x828b
leaq 0x68(%rbx), %rdi
leaq 0x38(%rbx), %r14
addq $0x8, %rbx
callq 0xbca6
movq %r14, %rdi
callq 0xbd06
movq %rbx, %rdi
popq %rbx
popq %r14
popq %r15
jmp 0xbd66
// File: /workspace/github_cpp_makefile_star2_O2/bonetblai[P]mdp-engine/ctp3/./graph.h
// Function: CTP::graph_t::degree() const
int degree() const {
        int d = 0;
        for( int node = 0; node < num_nodes_; ++node ) {
            int dn = degree(node);
            d = dn > d ? dn : d;
        }
        return d;
    }

// Assembly:
movl (%rdi), %eax
movq 0x28(%rdi), %rcx
xorl %edx, %edx
testl %eax, %eax
cmovlel %edx, %eax
imulq $0x18, %rax, %rsi
xorl %eax, %eax
cmpq %rdx, %rsi
je 0x8550
movq 0x8(%rcx,%rdx), %rdi
subq (%rcx,%rdx), %rdi
shrq $0x2, %rdi
cmpl %eax, %edi
cmovgl %edi, %eax
addq $0x18, %rdx
jmp 0x8533
retq
nop
// File: /workspace/github_cpp_makefile_star2_O2/bonetblai[P]mdp-engine/ctp3/./ctp3.h
// Function: shortest_path_cache_t::initialize(int, unsigned int)
void initialize(int num_nodes, unsigned capacity) {
        num_nodes_ = num_nodes;
        capacity_ = capacity;
        distances_ = new int[num_nodes_];
        items_ = new shortest_path_cache_item_t*[num_nodes_];
        for( int i = 0; i < num_nodes_; ++i )
            items_[i] = new shortest_path_cache_item_t;
    }

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movslq %esi, %rax
xorl %r15d, %r15d
testl %eax, %eax
movl $0x0, %r12d
cmovgl %eax, %r12d
leaq (,%rax,8), %r14
testl %eax, %eax
pushq $-0x1
popq %rcx
cmovsq %rcx, %r14
movq %rdi, %rbx
movq %rax, %rdi
shlq $0x2, %rdi
testl %eax, %eax
movl %eax, (%rbx)
movl %edx, 0x18(%rbx)
cmovsq %rcx, %rdi
callq 0x5030
movq %rax, 0x8(%rbx)
movq %r14, %rdi
callq 0x5030
movq %rax, 0x10(%rbx)
pushq $0x38
popq %r14
cmpq %r15, %r12
je 0x8dbe
movq %r14, %rdi
callq 0x52a0
leaq 0x30(%rax), %rcx
movq %rcx, (%rax)
movq $0x1, 0x8(%rax)
xorps %xmm0, %xmm0
movups %xmm0, 0x10(%rax)
movl $0x3f800000, 0x20(%rax) # imm = 0x3F800000
movups %xmm0, 0x28(%rax)
movq 0x10(%rbx), %rcx
movq %rax, (%rcx,%r15,8)
incq %r15
jmp 0x8d83
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
// File: /workspace/github_cpp_makefile_star2_O2/bonetblai[P]mdp-engine/ctp3/./ctp3.h
// Function: next_cache_t::initialize(int, unsigned int)
void initialize(int num_actions, unsigned capacity) {
        num_actions_ = num_actions;
        capacity_ = capacity;
        items_ = new next_cache_item_t*[num_actions_];
        for( int i = 0; i < num_actions_; ++i )
            items_[i] = new next_cache_item_t;
    }

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movl %esi, %ebx
movq %rdi, %r14
movl %esi, (%rdi)
movl %edx, 0x10(%rdi)
movl %esi, %eax
shlq $0x3, %rax
xorl %r12d, %r12d
testl %esi, %esi
pushq $-0x1
popq %rdi
cmovnsq %rax, %rdi
cmovlel %r12d, %ebx
callq 0x5030
movq %rax, 0x8(%r14)
pushq $0x38
popq %r15
cmpq %r12, %rbx
je 0x8e3a
movq %r15, %rdi
callq 0x52a0
leaq 0x30(%rax), %rcx
movq %rcx, (%rax)
movq $0x1, 0x8(%rax)
xorps %xmm0, %xmm0
movups %xmm0, 0x10(%rax)
movl $0x3f800000, 0x20(%rax) # imm = 0x3F800000
movups %xmm0, 0x28(%rax)
movq 0x8(%r14), %rcx
movq %rax, (%rcx,%r12,8)
incq %r12
jmp 0x8dff
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
// File: /workspace/github_cpp_makefile_star2_O2/bonetblai[P]mdp-engine/ctp3/./ctp3.h
// Function: state_t::preprocess() const
void preprocess() const {
        if( distances_ == 0 ) {
            assert(shared_);
            std::pair<bool, const int*> p(false, 0);
            if( use_cache_ ) p = cache_.lookup(*graph_, current_, info_);
            if( p.first ) {
                if( !shared_ ) delete[] distances_;
                distances_ = const_cast<int*>(p.second);
                shared_ = true;
            } else {
                if( shared_ ) distances_ = new int[num_nodes_];
                assert(distances_ != 0);
                shared_ = false;
                if( p.second ) {
                    memcpy(const_cast<int*>(distances_), p.second, num_nodes_ * sizeof(int));
                } else {
                    graph_->dijkstra(current_, distances_, info_.known_, info_.blocked_, false);
                    //distances_[current_] = graph_->bfs(current_, num_nodes_ - 1, info_.known_, info_.blocked_, true);
                }
            }
            //heuristic_ = distances_[current_];
        }
    }

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
cmpq $0x0, 0x60(%rdi)
je 0x9a2f
addq $0x8, %rsp
popq %rbx
popq %r14
retq
movq %rdi, %rbx
movb 0x5c(%rdi), %cl
testb %cl, %cl
je 0x9b07
cmpb $0x1, 0x2b874(%rip)     # 0x352b8
jne 0x9a86
movq 0x2b82b(%rip), %rsi     # 0x35278
movl (%rbx), %edx
leaq 0x4(%rbx), %rcx
leaq 0x2b836(%rip), %rdi     # 0x35290
callq 0x9b46
movq %rdx, %r14
movb 0x5c(%rbx), %cl
testb $0x1, %al
je 0x9a89
testb $0x1, %cl
jne 0x9a7c
movq 0x60(%rbx), %rdi
testq %rdi, %rdi
je 0x9a7c
callq 0x5330
movq %r14, 0x60(%rbx)
movb $0x1, 0x5c(%rbx)
jmp 0x9a27
xorl %r14d, %r14d
testb $0x1, %cl
je 0x9ab2
movslq 0x2b7eb(%rip), %rax     # 0x35280
leaq (,%rax,4), %rcx
testq %rax, %rax
pushq $-0x1
popq %rdi
cmovnsq %rcx, %rdi
callq 0x5030
movq %rax, 0x60(%rbx)
jmp 0x9abb
movq 0x60(%rbx), %rax
testq %rax, %rax
je 0x9b26
movb $0x0, 0x5c(%rbx)
testq %r14, %r14
je 0x9ae1
movslq 0x2b7b5(%rip), %rdx     # 0x35280
shlq $0x2, %rdx
movq %rax, %rdi
movq %r14, %rsi
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x5230
movq 0x2b790(%rip), %rdi     # 0x35278
movl (%rbx), %esi
leaq 0x4(%rbx), %rcx
addq $0x28, %rbx
movq %rax, %rdx
movq %rbx, %r8
xorl %r9d, %r9d
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x9c70
leaq 0x16994(%rip), %rdi     # 0x204a2
leaq 0x16995(%rip), %rsi     # 0x204aa
leaq 0x16997(%rip), %rcx     # 0x204b3
movl $0x160, %edx            # imm = 0x160
callq 0x51b0
leaq 0x16a33(%rip), %rdi     # 0x20560
leaq 0x16976(%rip), %rsi     # 0x204aa
leaq 0x16978(%rip), %rcx     # 0x204b3
movl $0x169, %edx            # imm = 0x169
callq 0x51b0
nop
// File: /workspace/github_cpp_makefile_star2_O2/bonetblai[P]mdp-engine/ctp3/./ctp3.h
// Function: shortest_path_cache_t::lookup(CTP::graph_t const&, int, state_info_t const&)
std::pair<bool, const int*> lookup(const CTP::graph_t &graph, int source, const state_info_t &info) {
        ++lookups_;
        shortest_path_cache_item_t *item = items_[source];
        shortest_path_cache_item_t::const_iterator it = item->find(info);
        if( it != item->end() ) {
            ++hits_;
            return std::make_pair(true, it->second);
        } else {
            if( size_ < capacity_ ) {
                ++size_;
                int *distances = new int[num_nodes_];
                graph.dijkstra(source, distances, info.known_, info.blocked_, false);
                distances[source] = graph.bfs(source, num_nodes_ - 1, info.known_, info.blocked_, true);
                item->insert(std::make_pair(info, distances));
                return std::make_pair(true, distances);
            } else {
                graph.dijkstra(source, distances_, info.known_, info.blocked_, false);
                distances_[source] = graph.bfs(source, num_nodes_ - 1, info.known_, info.blocked_, true);
                return std::make_pair(false, distances_);
            }
        }
    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x58, %rsp
movq %rcx, %rbx
movq %rdi, %r15
incl 0x20(%rdi)
movq %rsi, %r12
movq 0x10(%rdi), %rax
movslq %edx, %r14
movq (%rax,%r14,8), %r13
movq %r13, %rdi
movq %rcx, %rsi
callq 0x9e2e
testq %rax, %rax
je 0x9b88
incl 0x24(%r15)
movq 0x50(%rax), %rbp
jmp 0x9c14
movl 0x1c(%r15), %eax
cmpl 0x18(%r15), %eax
jae 0x9c2c
incl %eax
movl %eax, 0x1c(%r15)
movslq (%r15), %rax
leaq (,%rax,4), %rcx
testq %rax, %rax
pushq $-0x1
popq %rdi
cmovnsq %rcx, %rdi
callq 0x5030
movq %rax, %rbp
leaq 0x24(%rbx), %r8
movq %r8, (%rsp)
movq %r12, %rdi
movl %r14d, %esi
movq %rax, %rdx
movq %rbx, %rcx
xorl %r9d, %r9d
callq 0x9c70
movl (%r15), %edx
decl %edx
pushq $0x1
popq %r9
movq %r12, %rdi
movl %r14d, %esi
movq %rbx, %rcx
movq (%rsp), %r8
callq 0x941a
movl %eax, (%rbp,%r14,4)
pushq $0x12
popq %rcx
leaq 0x8(%rsp), %rax
movq %rax, %rdi
movq %rbx, %rsi
rep  movsl (%rsi), %es:(%rdi)
movq %rbp, 0x48(%rax)
movq %r13, %rdi
movq %rax, %rsi
callq 0x9f7c
movb $0x1, %r13b
movl %r13d, %eax
movq %rbp, %rdx
addq $0x58, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq 0x8(%r15), %rdx
leaq 0x24(%rbx), %rbp
xorl %r13d, %r13d
movq %r12, %rdi
movl %r14d, %esi
movq %rbx, %rcx
movq %rbp, %r8
xorl %r9d, %r9d
callq 0x9c70
movl (%r15), %edx
decl %edx
pushq $0x1
popq %r9
movq %r12, %rdi
movl %r14d, %esi
movq %rbx, %rcx
movq %rbp, %r8
callq 0x941a
movq 0x8(%r15), %rbp
movl %eax, (%rbp,%r14,4)
jmp 0x9c17
// File: /workspace/github_cpp_makefile_star2_O2/bonetblai[P]mdp-engine/ctp3/./ctp3.h
// Function: state_info_t::hash() const
size_t hash() const {
        unsigned rv = 0;
        for( int i = 0; i < words_for_edges_; ++i )
            rv = rv ^ known_[i];
        for( int i = 0; i < words_for_edges_; ++i )
            rv = rv ^ rotation(blocked_[i]);
        return rv;
    }

// Assembly:
movl 0x2b3fc(%rip), %eax     # 0x35274
xorl %edx, %edx
testl %eax, %eax
cmovlel %edx, %eax
xorl %ecx, %ecx
cmpq %rdx, %rax
je 0x9e8e
xorl (%rdi,%rdx,4), %ecx
incq %rdx
jmp 0x9e81
xorl %edx, %edx
cmpq %rdx, %rax
je 0x9ea3
movl 0x24(%rdi,%rdx,4), %esi
roll $0x10, %esi
xorl %esi, %ecx
incq %rdx
jmp 0x9e90
movl %ecx, %eax
retq
// File: /workspace/github_cpp_makefile_star2_O2/bonetblai[P]mdp-engine/ctp3/./ctp3.h
// Function: next_cache_t::lookup(state_t const&, int) const
const std::vector<std::pair<state_t, float> >* lookup(const state_t &state,
                                                          Problem::action_t a) const {
        ++lookups_;
        next_cache_item_t *item = items_[a];
        next_cache_item_t::const_iterator it = item->find(state);
        if( it != item->end() ) {
            ++hits_;
            return it->second;
        } else
            return 0;
    }

// Assembly:
pushq %rbx
movq %rdi, %rbx
incl 0x18(%rdi)
movq 0x8(%rdi), %rax
movslq %edx, %rcx
movq (%rax,%rcx,8), %rdi
callq 0xa5ae
testq %rax, %rax
je 0xa2dd
incl 0x1c(%rbx)
movq 0x78(%rax), %rax
jmp 0xa2df
xorl %eax, %eax
popq %rbx
retq
nop
// File: /workspace/github_cpp_makefile_star2_O2/bonetblai[P]mdp-engine/ctp3/./ctp3.h
// Function: state_info_t::set_edge_status(int, bool)
void set_edge_status(int edge, bool blocked) {
        int n = edge >> 5, offset = edge & 0x1F;
        int mask = 1 << offset;
        known_[n] |= mask;
        if( blocked )
            blocked_[n] |= mask;
        else
            blocked_[n] &= ~mask;
    }

// Assembly:
movl %esi, %ecx
sarl $0x5, %esi
pushq $0x1
popq %rax
shll %cl, %eax
movslq %esi, %rcx
orl %eax, (%rdi,%rcx,4)
testl %edx, %edx
je 0xa517
orl %eax, 0x24(%rdi,%rcx,4)
retq
notl %eax
andl %eax, 0x24(%rdi,%rcx,4)
retq
// File: /workspace/github_cpp_makefile_star2_O2/bonetblai[P]mdp-engine/ctp3/./ctp3.h
// Function: next_cache_t::insert(state_t const&, int, std::vector<std::pair<state_t, float>, std::allocator<std::pair<state_t, float>>>&)
void insert(const state_t &state,
                Problem::action_t a,
                std::vector<std::pair<state_t, float> > &next) {
        if( size_ < capacity_ ) {
            ++size_;
            next_cache_item_t *item = items_[a];
            std::vector<std::pair<state_t, float> > *ptr
              = new std::vector<std::pair<state_t, float> >(next);
            item->insert(std::make_pair(state, ptr));
        }
    }

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x78, %rsp
movl 0x14(%rdi), %eax
cmpl 0x10(%rdi), %eax
jae 0xa582
movq %rcx, %r15
movq %rsi, %rbx
incl %eax
movl %eax, 0x14(%rdi)
movq 0x8(%rdi), %rax
movslq %edx, %rcx
movq (%rax,%rcx,8), %r14
pushq $0x18
popq %rdi
callq 0x52a0
movq %rax, %r12
movq %rax, %rdi
movq %r15, %rsi
callq 0xad16
movq %rsp, %r15
movq %r15, %rdi
movq %rbx, %rsi
callq 0xa4d8
movq %r12, 0x70(%r15)
movq %r14, %rdi
movq %r15, %rsi
callq 0xada8
movq %rsp, %rdi
callq 0x8e90
addq $0x78, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
movq %rax, %rbx
movq %rsp, %rdi
callq 0x8e90
jmp 0xa5a6
movq %rax, %rbx
movq %r12, %rdi
callq 0x5270
movq %rbx, %rdi
callq 0x5410
// File: /workspace/github_cpp_makefile_star2_O2/bonetblai[P]mdp-engine/ctp3/./ctp3.h
// Function: state_t::operator=(state_t const&)
const state_t& operator=(const state_t &s) {
        current_ = s.current_;
        info_ = s.info_;
        memcpy(visited_, s.visited_, words_for_nodes_ * sizeof(unsigned));
        if( s.shared_ ) {
            if( !shared_ ) delete[] distances_;
            distances_ = s.distances_;
            shared_ = true;
        } else {
            if( shared_ ) {
                distances_ = new int[num_nodes_];
                shared_ = false;
            }
            assert(distances_ != 0);
            memcpy(const_cast<int*>(distances_), s.distances_, num_nodes_ * sizeof(int));
        }
        heuristic_ = s.heuristic_;
        return *this;
    }

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rsi, %r14
movq %rdi, %rbx
movl (%rsi), %eax
movl %eax, (%rdi)
addq $0x4, %rsi
addq $0x4, %rdi
movslq 0x2a98e(%rip), %r15     # 0x35274
shlq $0x2, %r15
movq %r15, %rdx
callq 0x5230
leaq 0x28(%rbx), %rdi
leaq 0x28(%r14), %rsi
movq %r15, %rdx
callq 0x5230
leaq 0x4c(%rbx), %rdi
leaq 0x4c(%r14), %rsi
movslq 0x2a977(%rip), %rdx     # 0x35288
shlq $0x2, %rdx
callq 0x5230
movb 0x5c(%rbx), %al
cmpb $0x1, 0x5c(%r14)
jne 0xa944
testb %al, %al
jne 0xa936
movq 0x60(%rbx), %rdi
testq %rdi, %rdi
je 0xa936
callq 0x5330
movq 0x60(%r14), %rax
movq %rax, 0x60(%rbx)
movb $0x1, 0x5c(%rbx)
jmp 0xa990
testb %al, %al
je 0xa973
movslq 0x2a931(%rip), %rax     # 0x35280
leaq (,%rax,4), %rcx
testq %rax, %rax
pushq $-0x1
popq %rdi
cmovnsq %rcx, %rdi
callq 0x5030
movq %rax, %rdi
movq %rax, 0x60(%rbx)
movb $0x0, 0x5c(%rbx)
jmp 0xa97c
movq 0x60(%rbx), %rdi
testq %rdi, %rdi
je 0xa9a0
movq 0x60(%r14), %rsi
movslq 0x2a8f9(%rip), %rdx     # 0x35280
shlq $0x2, %rdx
callq 0x5230
movl 0x68(%r14), %eax
movl %eax, 0x68(%rbx)
movq %rbx, %rax
popq %rbx
popq %r14
popq %r15
retq
leaq 0x15bb9(%rip), %rdi     # 0x20560
leaq 0x15afc(%rip), %rsi     # 0x204aa
leaq 0x15bbb(%rip), %rcx     # 0x20570
movl $0x18f, %edx            # imm = 0x18F
callq 0x51b0
nop
// File: /workspace/github_cpp_makefile_star2_O2/bonetblai[P]mdp-engine/ctp3/./ctp3.h
// Function: sample_weather(CTP::graph_t const&, state_t&)
inline void sample_weather(const CTP::graph_t &graph, state_t &state) {
    state.clear();
    int num_edges = graph.with_shortcut_ ? graph.num_edges_ - 1 : graph.num_edges_;
    for( int e = 0; e < num_edges; ++e ) {
        float p = graph.prob(e);
        if( Random::real() < p ) {
            state.info_.set_edge_status(e, false);
        } else {
            state.info_.set_edge_status(e, true);
        }
    }
    if( graph.with_shortcut_ ) state.info_.set_edge_status(graph.num_edges_ - 1, true);
}

// Assembly:
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x10, %rsp
movq %rsi, %rbx
movq %rdi, %r14
movq %rsi, %rdi
callq 0xb1a6
movzbl 0x8(%r14), %eax
movl 0x4(%r14), %r12d
subl %eax, %r12d
addq $0x4, %rbx
xorl %r15d, %r15d
testl %r12d, %r12d
cmovlel %r15d, %r12d
pushq $0xc
popq %r13
cmpq %r15, %r12
je 0xb173
movq 0x10(%r14), %rax
movss (%rax,%r13), %xmm0
movss %xmm0, 0xc(%rsp)
callq 0xb216
xorl %edx, %edx
ucomiss 0xc(%rsp), %xmm0
setae %dl
movq %rbx, %rdi
movl %r15d, %esi
callq 0xa4fe
incq %r15
addq $0x10, %r13
jmp 0xb13b
cmpb $0x0, 0x8(%r14)
je 0xb198
movl 0x4(%r14), %esi
decl %esi
pushq $0x1
popq %rdx
movq %rbx, %rdi
addq $0x10, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
jmp 0xa4fe
addq $0x10, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq
// File: /workspace/github_cpp_makefile_star2_O2/bonetblai[P]mdp-engine/ctp3/./ctp3.h
// Function: state_t::clear()
void clear() {
        current_ = 0;
        info_.clear();
        memset(visited_, 0, words_for_nodes_ * sizeof(unsigned));
        if( !shared_ ) {
            delete[] distances_;
            shared_ = true;
        }
        distances_ = 0;
        heuristic_ = -1;
    }

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %rbx
andl $0x0, (%rdi)
addq $0x4, %rdi
movslq 0x2a0b9(%rip), %r14     # 0x35274
shlq $0x2, %r14
xorl %esi, %esi
movq %r14, %rdx
callq 0x5170
leaq 0x28(%rbx), %rdi
xorl %esi, %esi
movq %r14, %rdx
callq 0x5170
leaq 0x4c(%rbx), %rdi
movslq 0x2a0a6(%rip), %rdx     # 0x35288
shlq $0x2, %rdx
xorl %esi, %esi
callq 0x5170
cmpb $0x0, 0x5c(%rbx)
jne 0xb205
movq 0x60(%rbx), %rdi
testq %rdi, %rdi
je 0xb201
callq 0x5330
movb $0x1, 0x5c(%rbx)
andq $0x0, 0x60(%rbx)
orl $-0x1, 0x68(%rbx)
addq $0x8, %rsp
popq %rbx
popq %r14
retq
// File: /workspace/github_cpp_makefile_star2_O2/bonetblai[P]mdp-engine/ctp3/../engine/base_policies.h
// Function: Online::Policy::random_t<state_t>::operator()(state_t const&) const
virtual Problem::action_t operator()(const T &s) const {
        ++policy_t<T>::decisions_;
        if( problem_.dead_end(s) ) return Problem::noop;
        std::vector<Problem::action_t> actions;
        actions.reserve(problem_.number_actions(s));
        for( Problem::action_t a = 0; a < problem_.number_actions(s); ++a ) {
            if( problem_.applicable(s, a) ) {
                actions.push_back(a);
            }
        }
        return actions.empty() ? Problem::noop : actions[Random::random(actions.size())];
    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x30, %rsp
movq %rdi, %rbx
incl 0x20(%rdi)
movq %rsi, %r14
movq 0x8(%rdi), %rdi
movq (%rdi), %rax
callq *0x28(%rax)
testb %al, %al
je 0xb24d
pushq $-0x1
popq %rbx
jmp 0xb2f2
andq $0x0, 0x20(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, 0x10(%rsp)
movq 0x8(%rbx), %rdi
movq (%rdi), %rax
movq %r14, %rsi
callq *0x10(%rax)
movslq %eax, %rsi
leaq 0x10(%rsp), %rdi
callq 0xa3aa
xorl %ebp, %ebp
leaq 0x10(%rsp), %r15
leaq 0xc(%rsp), %r12
movl %ebp, 0xc(%rsp)
movq 0x8(%rbx), %rdi
movq (%rdi), %rax
movq %r14, %rsi
callq *0x10(%rax)
cmpl %eax, %ebp
jge 0xb2be
movq 0x8(%rbx), %rdi
movl 0xc(%rsp), %edx
movq (%rdi), %rax
movq %r14, %rsi
callq *0x30(%rax)
testb %al, %al
je 0xb2b6
movq %r15, %rdi
movq %r12, %rsi
callq 0x8804
movl 0xc(%rsp), %ebp
incl %ebp
jmp 0xb281
movq 0x10(%rsp), %rax
movq 0x18(%rsp), %rdi
cmpq %rdi, %rax
je 0xb2e5
subq %rax, %rdi
shrq $0x2, %rdi
callq 0xb503
movl %eax, %eax
movq 0x10(%rsp), %rcx
movl (%rcx,%rax,4), %ebx
jmp 0xb2e8
pushq $-0x1
popq %rbx
leaq 0x10(%rsp), %rdi
callq 0x85dc
movl %ebx, %eax
addq $0x30, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
jmp 0xb303
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
callq 0x85dc
movq %rbx, %rdi
callq 0x5410
// File: /workspace/github_cpp_makefile_star2_O2/bonetblai[P]mdp-engine/ctp3/../engine/problem.h
// Function: Problem::problem_t<state_t>::sample(state_t const&, int) const
std::pair<T, bool> sample(const T &s, action_t a) const {
        std::vector<std::pair<T, float> > outcomes;
        next(s, a, outcomes);
        unsigned osize = outcomes.size();
        assert(osize > 0);

        float r = Random::real();
        for( unsigned i = 0; i < osize; ++i ) {
            if( r < outcomes[i].second ) {
                return std::make_pair(outcomes[i].first, true);
            }
            r -= outcomes[i].second;
        }
        return std::make_pair(outcomes[0].first, true);
    }

// Assembly:
pushq %r14
pushq %rbx
subq $0x18, %rsp
movq %rdi, %rbx
xorps %xmm0, %xmm0
movq %rsp, %rax
movaps %xmm0, (%rax)
andq $0x0, 0x10(%rax)
movq (%rsi), %r8
movq %rsi, %rdi
movq %rdx, %rsi
movl %ecx, %edx
movq %rax, %rcx
callq *0x60(%r8)
movq 0x8(%rsp), %rax
subq (%rsp), %rax
pushq $0x78
popq %rcx
cqto
idivq %rcx
movq %rax, %r14
testl %r14d, %r14d
je 0xb3b3
callq 0xb216
movq (%rsp), %rsi
movl %r14d, %eax
imulq $0x78, %rax, %rcx
xorl %eax, %eax
cmpq %rax, %rcx
je 0xb387
movss 0x70(%rsi,%rax), %xmm1
ucomiss %xmm1, %xmm0
jb 0xb391
subss %xmm1, %xmm0
addq $0x78, %rax
jmp 0xb36d
movq %rbx, %rdi
callq 0xa4d8
jmp 0xb39c
addq %rax, %rsi
movq %rbx, %rdi
callq 0xa4d8
movb $0x1, 0x70(%rbx)
movq %rsp, %rdi
callq 0xb53c
movq %rbx, %rax
addq $0x18, %rsp
popq %rbx
popq %r14
retq
leaq 0x15266(%rip), %rdi     # 0x20620
leaq 0x15269(%rip), %rsi     # 0x2062a
leaq 0x15276(%rip), %rcx     # 0x2063e
movl $0x94, %edx
callq 0x51b0
jmp 0xb3d6
jmp 0xb3d6
movq %rax, %rbx
movq %rsp, %rdi
callq 0xb53c
movq %rbx, %rdi
callq 0x5410
nop
// File: /workspace/github_cpp_makefile_star2_O2/bonetblai[P]mdp-engine/ctp3/../engine/base_policies.h
// Function: Online::Policy::random_t<state_t>::reset_stats() const
virtual void reset_stats() const {
        policy_t<T>::setup_time_ = 0;
        policy_t<T>::base_policy_time_ = 0;
        policy_t<T>::heuristic_time_ = 0;
        problem_.clear_expansions();
    }

// Assembly:
andq $0x0, 0x14(%rdi)
andl $0x0, 0x1c(%rdi)
movq 0x8(%rdi), %rax
andq $0x0, 0x10(%rax)
retq
nop
// File: /workspace/github_cpp_makefile_star2_O2/bonetblai[P]mdp-engine/ctp3/../engine/base_policies.h
// Function: Online::Policy::random_t<state_t>::print_other_stats(std::ostream&, int) const
virtual void print_other_stats(std::ostream &os, int indent) const {
        os << std::setw(indent) << ""
           << "other-stats: name=" << name()
           << " decisions=" << policy_t<T>::decisions_
           << std::endl;
    }

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x20, %rsp
movq %rsi, %rax
movq %rdi, %rbx
movq (%rsi), %rcx
movq -0x18(%rcx), %rcx
movslq %edx, %rdx
movq %rdx, 0x10(%rsi,%rcx)
leaq 0x15aa7(%rip), %rsi     # 0x20f22
movq %rax, %rdi
callq 0x5290
leaq 0x15132(%rip), %rsi     # 0x205bc
movq %rax, %rdi
callq 0x5290
movq %rax, %r14
movq (%rbx), %rax
movq %rsp, %r15
movq %r15, %rdi
movq %rbx, %rsi
callq *0x18(%rax)
movq %r14, %rdi
movq %r15, %rsi
callq 0x5250
leaq 0x15119(%rip), %rsi     # 0x205cf
movq %rax, %rdi
callq 0x5290
movl 0x20(%rbx), %esi
movq %rax, %rdi
callq 0x51c0
movq %rax, %rdi
callq 0x5130
movq %rsp, %rdi
callq 0x5120
addq $0x20, %rsp
popq %rbx
popq %r14
popq %r15
retq
movq %rax, %rbx
movq %rsp, %rdi
callq 0x5120
movq %rbx, %rdi
callq 0x5410
// File: /workspace/github_cpp_makefile_star2_O2/bonetblai[P]mdp-engine/ctp3/./ctp3.h
// Function: ctp_optimistic_policy_t::operator()(state_t const&) const
virtual Problem::action_t operator()(const state_t &s) const {
        float best_cost = FLT_MAX;
        Problem::action_t best_action = Problem::noop;
        for( Problem::action_t a = 0; a < problem().number_actions(s); ++a ) {
            if( problem().applicable(s, a) ) {
                float cost = problem().cost(s, a);
                cost += graph_.bfs(a, graph_.num_nodes_ - 1, s.info_.known_, s.info_.blocked_, true) * multiplier_;
                if( cost < best_cost ) {
                    best_cost = cost;
                    best_action = a;
                }
            }
        }
        return best_action;
    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rsi, %rbx
movq %rdi, %r14
leaq 0x4(%rsi), %r15
leaq 0x28(%rsi), %r12
xorl %r13d, %r13d
pushq $-0x1
popq %rbp
movss 0x149af(%rip), %xmm0    # 0x20014
movss %xmm0, (%rsp)
movq 0x8(%r14), %rdi
movq (%rdi), %rax
movq %rbx, %rsi
callq *0x10(%rax)
cmpl %eax, %r13d
jge 0xb6ea
movq 0x8(%r14), %rdi
movq (%rdi), %rax
movq %rbx, %rsi
movl %r13d, %edx
callq *0x30(%rax)
testb %al, %al
je 0xb6e5
movq 0x8(%r14), %rdi
movq (%rdi), %rax
movq %rbx, %rsi
movl %r13d, %edx
callq *0x48(%rax)
movss %xmm0, 0x4(%rsp)
movq 0x28(%r14), %rdi
movl (%rdi), %edx
decl %edx
movl %r13d, %esi
movq %r15, %rcx
movq %r12, %r8
pushq $0x1
popq %r9
callq 0x941a
cvtsi2ss %eax, %xmm0
mulss 0x30(%r14), %xmm0
addss 0x4(%rsp), %xmm0
movss (%rsp), %xmm1
ucomiss %xmm1, %xmm0
minss %xmm0, %xmm1
movss %xmm1, (%rsp)
cmovbl %r13d, %ebp
incl %r13d
jmp 0xb66a
movl %ebp, %eax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nop
// File: /workspace/github_cpp_makefile_star2_O2/bonetblai[P]mdp-engine/ctp3/../engine/utils.h
// Function: Utils::split_request(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&)
inline void split_request(const std::string &request, std::string &name, std::string &parameter_str) {
    size_t first = request.find_first_of("(");
    size_t last = request.find_last_of(")");
    if( (first != std::string::npos) && (last != std::string::npos) ) {
        name = request.substr(0, first);
        parameter_str = request.substr(1 + first, last - first - 1);
    } else {
        name = request;
    }
    //std::cout << "name=" << name << ", parameters=|" << parameter_str << "|" << std::endl;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x28, %rsp
movq %rdx, %rbx
movq %rsi, %r15
movq %rdi, %r14
leaq 0x14e32(%rip), %rsi     # 0x2102f
xorl %edx, %edx
callq 0x5140
movq %rax, %r12
leaq 0x1421f(%rip), %rsi     # 0x2042d
pushq $-0x1
popq %rdx
movq %r14, %rdi
callq 0x5280
movq %rax, %r13
cmpq $-0x1, %r12
sete %al
cmpq $-0x1, %r13
sete %cl
orb %al, %cl
jne 0xc296
leaq 0x8(%rsp), %rbp
movq %rbp, %rdi
movq %r14, %rsi
xorl %edx, %edx
movq %r12, %rcx
callq 0x52c0
movq %r15, %rdi
movq %rbp, %rsi
callq 0x5310
movq %rbp, %rdi
callq 0x5120
leaq 0x1(%r12), %rdx
notq %r12
addq %r12, %r13
leaq 0x8(%rsp), %r15
movq %r15, %rdi
movq %r14, %rsi
movq %r13, %rcx
callq 0x52c0
movq %rbx, %rdi
movq %r15, %rsi
callq 0x5310
movq %r15, %rdi
callq 0x5120
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %r15, %rdi
movq %r14, %rsi
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x5160
nop
// File: /workspace/github_cpp_makefile_star2_O2/bonetblai[P]mdp-engine/ctp3/../engine/hdp.h
// Function: Algorithm::hdp_t<state_t>::set_parameters(std::multimap<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>> const&, Dispatcher::dispatcher_t<state_t>&)
virtual void set_parameters(const std::multimap<std::string, std::string> &parameters, Dispatcher::dispatcher_t<T> &dispatcher) {
        std::multimap<std::string, std::string>::const_iterator it = parameters.find("epsilon");
        if( it != parameters.end() ) epsilon_ = strtof(it->second.c_str(), 0);
        it = parameters.find("heuristic");
        if( it != parameters.end() ) {
            delete heuristic_;
            dispatcher.create_request(problem_, it->first, it->second);
            heuristic_ = dispatcher.fetch_heuristic(it->second);
        }
        it = parameters.find("seed");
        if( it != parameters.end() ) seed_ = strtol(it->second.c_str(), 0, 0);
#ifdef DEBUG
        std::cout << "debug: hdp(): params:"
                  << " epsilon=" << epsilon_
                  << " heuristic=" << (heuristic_ == 0 ? std::string("null") : heuristic_->name())
                  << " seed=" << seed_
                  << std::endl;
#endif
    }

// Assembly:
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x30, %rsp
movq %rdx, %r15
movq %rsi, %r14
movq %rdi, %rbx
leaq 0x14044(%rip), %rsi     # 0x209ef
leaq 0x10(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x50e0
leaq 0x10(%rsp), %rsi
movq %r14, %rdi
callq 0xcea2
movq %rax, %r12
leaq 0x10(%rsp), %rdi
callq 0x5120
leaq 0x8(%r14), %r13
cmpq %r13, %r12
je 0xc9ee
movq 0x40(%r12), %rdi
xorl %esi, %esi
callq 0x5360
movss %xmm0, 0x1c(%rbx)
leaq 0x13dad(%rip), %rsi     # 0x207a2
leaq 0x10(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x50e0
leaq 0x10(%rsp), %rsi
movq %r14, %rdi
callq 0xcea2
movq %rax, %r12
leaq 0x10(%rsp), %rdi
callq 0x5120
cmpq %r13, %r12
je 0xca59
movq 0x10(%rbx), %rdi
testq %rdi, %rdi
je 0xca32
movq (%rdi), %rax
callq *0x8(%rax)
movq 0x8(%rbx), %rsi
leaq 0x20(%r12), %rdx
addq $0x40, %r12
movq %r15, %rdi
movq %r12, %rcx
callq 0x6dfe
movq %r15, %rdi
movq %r12, %rsi
callq 0xc328
movq %rax, 0x10(%rbx)
leaq 0x13740(%rip), %rsi     # 0x201a0
leaq 0x10(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x50e0
leaq 0x10(%rsp), %rsi
movq %r14, %rdi
callq 0xcea2
movq %rax, %r14
leaq 0x10(%rsp), %rdi
callq 0x5120
cmpq %r13, %r14
je 0xca9e
movq 0x40(%r14), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x5380
movl %eax, 0x18(%rbx)
addq $0x30, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq
jmp 0xcab4
jmp 0xcac3
jmp 0xcab4
jmp 0xcac3
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
callq 0x5120
jmp 0xcac6
movq %rax, %rbx
movq %rbx, %rdi
callq 0x5410
// File: /workspace/github_cpp_makefile_star2_O2/bonetblai[P]mdp-engine/ctp3/../engine/hdp.h
// Function: Algorithm::hdp_t<state_t>::solve(state_t const&, Problem::hash_t<state_t>&) const
virtual void solve(const T &s, Problem::hash_t<T> &hash) const {
        reset_stats(hash);
        Heuristic::wrapper_t<T> eval_function(heuristic_);
        hash.set_eval_function(&eval_function);

        std::list<Hash::data_t*> stack, visited;
        Hash::data_t *dptr = hash.data_ptr(s);
        size_t trials = 0;
        while( !dptr->solved() ) {
            size_t index = 0;
            hdp(s, hash, dptr, index, stack, visited);
            assert(stack.empty());
            while( !visited.empty() ) {
                visited.front()->unmark();
                assert(visited.front()->scc_low() == std::numeric_limits<unsigned>::max());
                assert(visited.front()->scc_idx() == std::numeric_limits<unsigned>::max());
                visited.pop_front();
            }
            ++trials;
        }
        hash.set_eval_function(0);
    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x58, %rsp
movq %rdx, %rbx
movq %rsi, %r14
movq %rdi, %r15
movq (%rdi), %rax
movq %rdx, %rsi
callq *0x30(%rax)
movq %r15, 0x8(%rsp)
movq 0x10(%r15), %rax
leaq 0x276a2(%rip), %rcx     # 0x341a0
leaq 0x48(%rsp), %rdx
movq %rcx, (%rdx)
movq %rax, 0x8(%rdx)
movq %rdx, 0x40(%rbx)
leaq 0x30(%rsp), %r12
movq %r12, 0x8(%r12)
movq %r12, (%r12)
andq $0x0, 0x10(%r12)
leaq 0x18(%rsp), %r13
movq %r13, 0x8(%r13)
movq %r13, (%r13)
andq $0x0, 0x10(%r13)
movq %rbx, %r15
movq %rbx, %rdi
movq %r14, %rbx
movq %r14, %rsi
callq 0xcf18
movq %rax, %rbp
movl $0xffffffff, %r14d      # imm = 0xFFFFFFFF
cmpb $0x0, 0x4(%rbp)
jne 0xcbac
andq $0x0, 0x10(%rsp)
movq %r13, (%rsp)
movq 0x8(%rsp), %rdi
movq %rbx, %rsi
movq %r15, %rdx
movq %rbp, %rcx
leaq 0x10(%rsp), %r8
movq %r12, %r9
callq 0xcfa6
cmpq %r12, 0x30(%rsp)
jne 0xcc0a
movq 0x18(%rsp), %rax
cmpq %r13, %rax
je 0xcb4e
movq 0x10(%rax), %rax
movb $0x0, 0x5(%rax)
cmpq %r14, 0x18(%rax)
jne 0xcbd4
cmpq %r14, 0x20(%rax)
jne 0xcbed
movq %r13, %rdi
callq 0xd26a
jmp 0xcb84
andq $0x0, 0x40(%r15)
leaq 0x18(%rsp), %rdi
callq 0xd8d0
leaq 0x30(%rsp), %rdi
callq 0xd8d0
addq $0x58, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x13e9d(%rip), %rdi     # 0x20a78
leaq 0x13e23(%rip), %rsi     # 0x20a05
leaq 0x13e2c(%rip), %rcx     # 0x20a15
pushq $0x60
jmp 0xcc04
leaq 0x13ec7(%rip), %rdi     # 0x20abb
leaq 0x13e0a(%rip), %rsi     # 0x20a05
leaq 0x13e13(%rip), %rcx     # 0x20a15
pushq $0x61
popq %rdx
callq 0x51b0
leaq 0x13de6(%rip), %rdi     # 0x209f7
leaq 0x13ded(%rip), %rsi     # 0x20a05
leaq 0x13df6(%rip), %rcx     # 0x20a15
pushq $0x5d
jmp 0xcc04
jmp 0xcc25
movq %rax, %rbx
leaq 0x18(%rsp), %rdi
callq 0xd8d0
leaq 0x30(%rsp), %rdi
callq 0xd8d0
movq %rbx, %rdi
callq 0x5410
// File: /workspace/github_cpp_makefile_star2_O2/bonetblai[P]mdp-engine/ctp3/../engine/hash.h
// Function: Hash::hash_map_t<state_t, Hash::hash_function_t<state_t>>::data_ptr(state_t const&)
Hash::data_t* data_ptr(const T &s) {
        iterator di = lookup(s);
        if( di == end() )
            return push(s, new Hash::data_t(default_value(s)) );
         else
            return (*di).second;
    }

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rsi, %rbx
movq %rdi, %r14
addq $0x8, %rdi
callq 0xd2f2
testq %rax, %rax
je 0xcf3b
movq 0x78(%rax), %rax
popq %rbx
popq %r14
popq %r15
retq
pushq $0x28
popq %rdi
callq 0x52a0
movq %rax, %r15
movq 0x40(%r14), %rdi
testq %rdi, %rdi
je 0xcf5a
movq (%rdi), %rax
movq %rbx, %rsi
callq *0x10(%rax)
jmp 0xcf5d
xorps %xmm0, %xmm0
movss %xmm0, (%r15)
andw $0x0, 0x4(%r15)
andq $0x0, 0x8(%r15)
orl $-0x1, 0x10(%r15)
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
movq %rax, 0x18(%r15)
movq %rax, 0x20(%r15)
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
popq %rbx
popq %r14
popq %r15
jmp 0xd290
movq %rax, %rbx
movq %r15, %rdi
callq 0x5270
movq %rbx, %rdi
callq 0x5410
nop
// File: /workspace/github_cpp_makefile_star2_O2/bonetblai[P]mdp-engine/ctp3/../engine/problem.h
// Function: Problem::hash_t<state_t>::best_q_value(state_t const&) const
std::pair<action_t, float> best_q_value(const T &s) const {
        action_t best_action = noop;
        float best_value = std::numeric_limits<float>::max();
        for( action_t a = 0; a < problem_.number_actions(s); ++a ) {
            if( problem_.applicable(s, a) ) {
                float value = q_value(s, a);
                if( value < best_value ) {
                    best_value = value;
                    best_action = a;
                }
            }
        }
        return std::make_pair(best_action, best_value);
    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rsi, %rbx
movq %rdi, %r14
xorl %ebp, %ebp
movss 0x128b1(%rip), %xmm0    # 0x20014
movss %xmm0, 0x4(%rsp)
pushq $-0x1
popq %r15
movq 0x48(%r14), %rdi
movq (%rdi), %rax
movq %rbx, %rsi
callq *0x10(%rax)
cmpl %eax, %ebp
jge 0xd7b3
movq 0x48(%r14), %rdi
movq (%rdi), %rax
movq %rbx, %rsi
movl %ebp, %edx
callq *0x30(%rax)
testb %al, %al
je 0xd7af
movq (%r14), %rax
movq %r14, %rdi
movq %rbx, %rsi
movl %ebp, %edx
callq *0x10(%rax)
ucomiss 0x4(%rsp), %xmm0
jae 0xd7af
movl %ebp, %r15d
movss %xmm0, 0x4(%rsp)
incl %ebp
jmp 0xd76d
movd 0x4(%rsp), %xmm0
movd %xmm0, %ecx
shlq $0x20, %rcx
movl %r15d, %eax
orq %rcx, %rax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_cpp_makefile_star2_O2/bonetblai[P]mdp-engine/ctp3/../engine/hash.h
// Function: Hash::hash_map_t<state_t, Hash::hash_function_t<state_t>>::scc_low(state_t const&) const
size_t scc_low(const T &s) const {
        const_iterator di = lookup(s);
        if( di == end() )
            return std::numeric_limits<unsigned>::max();
        else
            return (*di).second->scc_low();
    }

// Assembly:
pushq %rax
addq $0x8, %rdi
callq 0xd2f2
testq %rax, %rax
je 0xd7f7
movq 0x78(%rax), %rax
movq 0x18(%rax), %rax
jmp 0xd7fc
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
popq %rcx
retq
// File: /workspace/github_cpp_makefile_star2_O2/bonetblai[P]mdp-engine/ctp3/../engine/improved_lao.h
// Function: Algorithm::improved_lao_t<state_t>::policy_graph_t::update(std::__cxx11::list<std::pair<state_t, Hash::data_t*>, std::allocator<std::pair<state_t, Hash::data_t*>>>&)
void update(pair_list &visited) {
            for( list_iterator si = visited.begin(); si != visited.end(); ++si ) {
                std::pair<Problem::action_t, float> p = hash_.best_q_value(si->first);
                si->second->update(p.second);
                hash_.inc_updates();
            }
        }

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rsi, %rbx
movq %rdi, %r14
movq %rsi, %r15
movq (%r15), %r15
cmpq %rbx, %r15
je 0xe4f7
movq 0x8(%r14), %rdi
leaq 0x10(%r15), %rsi
callq 0xd74c
shrq $0x20, %rax
movq 0x80(%r15), %rcx
movl %eax, (%rcx)
movq 0x8(%r14), %rax
incl 0x50(%rax)
jmp 0xe4cc
popq %rbx
popq %r14
popq %r15
retq
nop
// File: /workspace/github_cpp_makefile_star2_O2/bonetblai[P]mdp-engine/ctp3/../engine/hash.h
// Function: Hash::hash_map_t<state_t, Hash::hash_function_t<state_t>>::solve(state_t const&)
void solve(const T &s) {
        iterator di = lookup(s);
        if( di == end() )
            push(s, new Hash::data_t(default_value(s), true, false));
        else
            (*di).second->solve();
    }

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rsi, %rbx
movq %rdi, %r14
addq $0x8, %rdi
callq 0xd2f2
testq %rax, %rax
je 0xe9ef
movq 0x78(%rax), %rax
movb $0x1, 0x4(%rax)
popq %rbx
popq %r14
popq %r15
retq
pushq $0x28
popq %rdi
callq 0x52a0
movq %rax, %r15
movq 0x40(%r14), %rdi
testq %rdi, %rdi
je 0xea0e
movq (%rdi), %rax
movq %rbx, %rsi
callq *0x10(%rax)
jmp 0xea11
xorps %xmm0, %xmm0
movss %xmm0, (%r15)
movw $0x1, 0x4(%r15)
andq $0x0, 0x8(%r15)
orl $-0x1, 0x10(%r15)
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
movq %rax, 0x18(%r15)
movq %rax, 0x20(%r15)
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
popq %rbx
popq %r14
popq %r15
jmp 0xd290
movq %rax, %rbx
movq %r15, %rdi
callq 0x5270
movq %rbx, %rdi
callq 0x5410
// File: /workspace/github_cpp_makefile_star2_O2/bonetblai[P]mdp-engine/ctp3/../engine/ldfs.h
// Function: Algorithm::ldfs_t<state_t>::solve(state_t const&, Problem::hash_t<state_t>&) const
virtual void solve(const T &s, Problem::hash_t<T> &hash) const {
        reset_stats(hash);
        Heuristic::wrapper_t<T> eval_function(heuristic_);
        hash.set_eval_function(&eval_function);

        std::list<Hash::data_t*> stack, visited;
        size_t trials = 0;
        Hash::data_t *dptr = hash.data_ptr(s);
        while( !dptr->solved() ) {
            size_t index = 0;
            ldfs_base_t<T>::ldfs(s, hash, dptr, index, stack, visited);
            assert(stack.empty());
            while( !visited.empty() ) {
                visited.front()->unmark();
                visited.pop_front();
            }
            ++trials;
        }
        hash.set_eval_function(0);
    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x58, %rsp
movq %rdx, %rbx
movq %rsi, %r14
movq %rdi, %r15
movq (%rdi), %rax
movq %rdx, %rsi
callq *0x30(%rax)
movq 0x10(%r15), %rax
leaq 0x2534b(%rip), %rcx     # 0x341a0
leaq 0x48(%rsp), %rdx
movq %rcx, (%rdx)
movq %rax, 0x8(%rdx)
movq %rdx, 0x40(%rbx)
leaq 0x30(%rsp), %r12
movq %r12, 0x8(%r12)
movq %r12, (%r12)
andq $0x0, 0x10(%r12)
leaq 0x18(%rsp), %r13
movq %r13, 0x8(%r13)
movq %r13, (%r13)
andq $0x0, 0x10(%r13)
movq %rbx, %rdi
movq %r14, %rsi
callq 0xcf18
movq %rax, %rbp
cmpb $0x0, 0x4(%rbp)
jne 0xeee7
andq $0x0, 0x10(%rsp)
movq %r13, (%rsp)
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
movq %rbp, %rcx
leaq 0x10(%rsp), %r8
movq %r12, %r9
callq 0xf0ba
cmpq %r12, 0x30(%rsp)
je 0xeedb
jmp 0xef0f
movq 0x10(%rax), %rax
movb $0x0, 0x5(%rax)
movq %r13, %rdi
callq 0xd26a
movq 0x18(%rsp), %rax
cmpq %r13, %rax
jne 0xeecb
jmp 0xee99
andq $0x0, 0x40(%rbx)
leaq 0x18(%rsp), %rdi
callq 0xd8d0
leaq 0x30(%rsp), %rdi
callq 0xd8d0
addq $0x58, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x11ae1(%rip), %rdi     # 0x209f7
leaq 0x11d1d(%rip), %rsi     # 0x20c3a
leaq 0x11d27(%rip), %rcx     # 0x20c4b
movl $0xcf, %edx
callq 0x51b0
jmp 0xef30
movq %rax, %rbx
leaq 0x18(%rsp), %rdi
callq 0xd8d0
leaq 0x30(%rsp), %rdi
callq 0xd8d0
movq %rbx, %rdi
callq 0x5410
nop
// File: /workspace/github_cpp_makefile_star2_O2/bonetblai[P]mdp-engine/ctp3/../engine/lrtdp.h
// Function: Algorithm::lrtdp_base_t<state_t>::lrtdp(state_t const&, Problem::hash_t<state_t>&) const
size_t lrtdp(const T &s, Problem::hash_t<T> &hash) const {
        Heuristic::wrapper_t<T> eval_function(heuristic_);
        hash.set_eval_function(&eval_function);

        size_t trials = 0, max_steps = 0;
        while( !hash.solved(s) ) {
            size_t steps = lrtdp_trial(s, hash);
            max_steps = Utils::max(max_steps, steps);
            ++trials;
        }

        hash.set_eval_function(0);
        return trials;
    }

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %rdx, %rbx
movq %rsi, %r14
movq %rdi, %r15
movq 0x10(%rdi), %rax
leaq 0x24315(%rip), %rcx     # 0x341a0
leaq 0x8(%rsp), %rdx
movq %rcx, (%rdx)
movq %rax, 0x8(%rdx)
movq %rdx, 0x40(%rbx)
xorl %r12d, %r12d
movq %rbx, %rdi
movq %r14, %rsi
callq 0xe7c8
testb %al, %al
jne 0xfec0
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0xfed4
incq %r12
jmp 0xfe9e
andq $0x0, 0x40(%rbx)
movq %r12, %rax
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
// File: /workspace/github_cpp_makefile_star2_O2/bonetblai[P]mdp-engine/ctp3/../engine/problem.h
// Function: Problem::problem_t<state_t>::usample(state_t const&, int) const
std::pair<T, bool> usample(const T &s, action_t a) const {
        std::vector<std::pair<T, float> > outcomes;
        next(s, a, outcomes);
        unsigned osize = outcomes.size();
        return std::make_pair(outcomes[Random::random(osize)].first, true);
    }

// Assembly:
pushq %rbx
subq $0x20, %rsp
movq %rdi, %rbx
xorps %xmm0, %xmm0
movq %rsp, %rax
movaps %xmm0, (%rax)
andq $0x0, 0x10(%rax)
movq (%rsi), %r8
movq %rsi, %rdi
movq %rdx, %rsi
movl %ecx, %edx
movq %rax, %rcx
callq *0x60(%r8)
movq 0x8(%rsp), %rax
subq (%rsp), %rax
pushq $0x78
popq %rcx
cqto
idivq %rcx
movl %eax, %edi
callq 0xb503
movl %eax, %eax
imulq $0x78, %rax, %rsi
addq (%rsp), %rsi
movq %rbx, %rdi
callq 0xa4d8
movb $0x1, 0x70(%rbx)
movq %rsp, %rdi
callq 0xb53c
movq %rbx, %rax
addq $0x20, %rsp
popq %rbx
retq
jmp 0x10257
jmp 0x10257
movq %rax, %rbx
movq %rsp, %rdi
callq 0xb53c
movq %rbx, %rdi
callq 0x5410
// File: /workspace/github_cpp_makefile_star2_O2/bonetblai[P]mdp-engine/ctp3/../engine/plain_check.h
// Function: Algorithm::plain_check_t<state_t>::solve(state_t const&, Problem::hash_t<state_t>&) const
virtual void solve(const T &s, Problem::hash_t<T> &hash) const {
        reset_stats(hash);
        Heuristic::wrapper_t<T> eval_function(heuristic_);
        hash.set_eval_function(&eval_function);

        size_t trials = 0;
        while( !hash.solved(s) ) {
            check_solved(problem_, s, hash, epsilon_);
            ++trials;
        }
        hash.set_eval_function(0);
    }

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x10, %rsp
movq %rdx, %rbx
movq %rsi, %r14
movq %rdi, %r15
movq (%rdi), %rax
movq %rdx, %rsi
callq *0x30(%rax)
movq 0x10(%r15), %rax
leaq 0x23168(%rip), %rcx     # 0x341a0
movq %rsp, %rdx
movq %rcx, (%rdx)
movq %rax, 0x8(%rdx)
movq %rdx, 0x40(%rbx)
movq %rbx, %rdi
movq %r14, %rsi
callq 0xe7c8
testb %al, %al
jne 0x1106c
movq 0x8(%r15), %rdi
movss 0x1c(%r15), %xmm0
movq %r14, %rsi
movq %rbx, %rdx
callq 0x104f8
jmp 0x11046
andq $0x0, 0x40(%rbx)
addq $0x10, %rsp
popq %rbx
popq %r14
popq %r15
retq
nop
// File: /workspace/github_cpp_makefile_star2_O2/bonetblai[P]mdp-engine/ctp3/../engine/simple_astar.h
// Function: Algorithm::simple_astar_t<state_t>::set_parameters(std::multimap<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>> const&, Dispatcher::dispatcher_t<state_t>&)
virtual void set_parameters(const std::multimap<std::string, std::string> &parameters, Dispatcher::dispatcher_t<T> &dispatcher) {
        std::multimap<std::string, std::string>::const_iterator it = parameters.find("heuristic");
        if( it != parameters.end() ) {
            delete heuristic_;
            dispatcher.create_request(problem_, it->first, it->second);
            heuristic_ = dispatcher.fetch_heuristic(it->second);
        }
        it = parameters.find("seed");
        if( it != parameters.end() ) seed_ = strtol(it->second.c_str(), 0, 0);
#ifdef DEBUG
        std::cout << "debug: simple-a*(): params:"
                  << " heuristic=" << (heuristic_ == 0 ? std::string("null") : heuristic_->name())
                  << " seed=" << seed_
                  << std::endl;
#endif
    }

// Assembly:
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x30, %rsp
movq %rdx, %r15
movq %rsi, %r14
movq %rdi, %rbx
leaq 0xf4f5(%rip), %rsi      # 0x207a2
leaq 0x10(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x50e0
leaq 0x10(%rsp), %rsi
movq %r14, %rdi
callq 0xcea2
movq %rax, %r12
leaq 0x10(%rsp), %rdi
callq 0x5120
leaq 0x8(%r14), %r13
cmpq %r13, %r12
je 0x11315
movq 0x10(%rbx), %rdi
testq %rdi, %rdi
je 0x112ee
movq (%rdi), %rax
callq *0x8(%rax)
movq 0x8(%rbx), %rsi
leaq 0x20(%r12), %rdx
addq $0x40, %r12
movq %r15, %rdi
movq %r12, %rcx
callq 0x6dfe
movq %r15, %rdi
movq %r12, %rsi
callq 0xc328
movq %rax, 0x10(%rbx)
leaq 0xee84(%rip), %rsi      # 0x201a0
leaq 0x10(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x50e0
leaq 0x10(%rsp), %rsi
movq %r14, %rdi
callq 0xcea2
movq %rax, %r14
leaq 0x10(%rsp), %rdi
callq 0x5120
cmpq %r13, %r14
je 0x1135a
movq 0x40(%r14), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x5380
movl %eax, 0x18(%rbx)
addq $0x30, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq
jmp 0x1136c
jmp 0x1137b
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
callq 0x5120
jmp 0x1137e
movq %rax, %rbx
movq %rbx, %rdi
callq 0x5410