12        : m_client(std::make_unique<decltype(m_client)::element_type>(
 
   13            std::move(endpoints))) {}
 
 
   16        return m_client->init();
 
 
   24            std::unique_lock l(m_mut);
 
   25            constexpr auto fetch_threshold = 500;
 
   26            if(m_tickets.size() < fetch_threshold && !m_fetching_tickets) {
 
   27                auto res = fetch_tickets();
 
   29                    m_fetching_tickets = 
true;
 
   31                if(m_tickets.empty() && !res) {
 
   35            if(m_tickets.empty()) {
 
   36                m_callbacks.emplace(std::move(result_callback));
 
   40            num = m_tickets.front();
 
 
   48    auto client::fetch_tickets() -> 
bool {
 
   49        return m_client->call(
 
   51            [
this](std::optional<get_ticket_number_return_type> res) {
 
   52                assert(res.has_value());
 
   53                std::visit(
overloaded{[&](ticket_number_range_type range) {
 
   54                                          handle_ticket_numbers(range);
 
   58                                              = 
decltype(m_callbacks)();
 
   60                                              std::unique_lock ll(m_mut);
 
   61                                              m_fetching_tickets = 
false;
 
   62                                              callbacks.swap(m_callbacks);
 
   64                                          while(!callbacks.empty()) {
 
   73    void client::handle_ticket_numbers(ticket_number_range_type range) {
 
   74        auto callbacks = 
decltype(m_callbacks)();
 
   75        auto tickets = 
decltype(m_tickets)();
 
   77            std::unique_lock ll(m_mut);
 
   81            while(!m_tickets.empty() && !m_callbacks.empty()) {
 
   82                callbacks.push(std::move(m_callbacks.front()));
 
   84                tickets.push(m_tickets.front());
 
   87            if(m_callbacks.empty()) {
 
   88                m_fetching_tickets = 
false;
 
   90                auto fetch_res = fetch_tickets();
 
   92                    m_fetching_tickets = 
false;
 
   96        while(!callbacks.empty()) {
 
   97            assert(!tickets.empty());