// File: /workspace/github_cpp_makefile_star2_O2/pc260533[P]ITC313-TP1/main.cpp
// Function: main
int main() {
    /* Partie 1 Question 1
    Date date(28, 2, 2019);
    Date dateBissextile(28, 2, 2020);
    std::cout << "La date est de : " << date.toString() << endl;
    std::cout << "La date bissextile est de : " << dateBissextile.toString() << endl;
    date.jourProchain();
    dateBissextile.jourProchain();
    std::cout << "La date est de : " << date.toString() << endl;
    std::cout << "La date bissextile est de : " << dateBissextile.toString() << endl;
    */

    /* Question 2
    Client client("1", "Chassagne", "Pierre-Nicolas", 0);
    std::cout << "La client est : " << client.toString() << endl;
    client.setNomClient("Polybe");
    client.setPrenomClient("Polybe");
    client.ajouterReservation();
    std::cout << "La client est : " << client.toString() << endl;
    */

    /* Question 3
    Chambre chambre(1,TypeDeChambre::Simple, 10.0);
    std::cout << "La chambre est : " << chambre.toString() << endl;
    */

    /* Question 4
    Chambre chambre1(1,TypeDeChambre::Simple, 10.0);
    std::cout << "La chambre est : " << chambre1.toString() << endl << endl;
    Chambre chambre2(2,TypeDeChambre::Double, 20.0);
    std::cout << "La chambre est : " << chambre2.toString() << endl << endl;
    std::vector<Chambre> listeChambre;
    listeChambre.push_back(chambre1);
    listeChambre.push_back(chambre2);
    Hotel hotel("HOTEL", "Nom", "Ville", listeChambre);
    std::cout << "L'hotel est : " << hotel.toString() << endl;
    */

    /* Question 5
    Date date1(2, 6, 2019);
    Date date2(3, 8, 2021);
    std::cout << date1.nombreDeJoursAvecCetteDate(date2) << endl;

    Chambre chambre1(1,TypeDeChambre::Simple, 10.0);
    std::cout << "La chambre est : " << chambre1.toString() << endl << endl;
    Chambre chambre2(2,TypeDeChambre::Double, 20.0);
    std::cout << "La chambre est : " << chambre2.toString() << endl << endl;

    std::vector<Chambre> listeChambre;
    listeChambre.push_back(chambre1);
    listeChambre.push_back(chambre2);
    Hotel hotel("HOTEL", "Nom", "Ville", listeChambre);
    std::cout << "L'hotel est : " << hotel.toString() << endl;

    Client client("1", "Chassagne", "Pierre-Nicolas", 0);

    Reservation reservation(0, hotel, chambre1, client);
    reservation.setPeriodeDeReservation(date1, date2);;
    std::cout <<  "La reservation est : " << reservation.toString() << endl;
    */

    /* Partie 2 Question 6 */
    std::vector<Chambre> listeChambres;
    for (int i = 0; i < 10; i++) {
        if (i < 3) {
            listeChambres.push_back(Chambre(i, TypeDeChambre::Simple, 100.0));
        }
        else if (i < 8) {
            listeChambres.push_back(Chambre(i, TypeDeChambre::Double, 125.0));
        }
        else {
            listeChambres.push_back(Chambre(i, TypeDeChambre::Suite, 210.0));
        }
    }
    Hotel hotel("HOTEL", "Nom", "Ville", listeChambres);
    std::cout << "L'hotel est : " << hotel.toString() << endl;

    std::vector<Client> listeClients;
    for (int i = 0; i < 10; i++) {
        listeClients.push_back(Client("Client" + std::to_string(i), "Client" + std::to_string(i), "Client" + std::to_string(i), 0));
    }
    for (Client client : listeClients) {
        std::cout << "Le client est : " << client.toString() << std::endl;
    }
    std::cout << std::endl;

    std::vector<Reservation> listeReservations;
    for(int i = 0; i < 1; i++) {
        Reservation reservation;

        /* Question 7 */
        bool quitDatesReservation = false;
        while (!quitDatesReservation) {
            int jourDebut;
            int jourFin;
            int moisDebut;
            int moisFin;
            int anneeDebut;
            int anneeFin;
            std::cout << "Entrer la date de debut et la date de fin de la reservation :" << std::endl;
            std::cout << "Jour de debut : ";
            cin >> jourDebut;
            std::cout << "Mois de debut : ";
            cin >> moisDebut;
            std::cout << "Annee de debut : ";
            cin >> anneeDebut;
            std::cout << "Jour de fin : ";
            cin >> jourFin;
            std::cout << "Mois de fin : ";
            cin >> moisFin;
            std::cout << "Annee de fin : ";
            cin >> anneeFin;
            Date dateDebut(jourDebut, moisDebut, anneeDebut);
            Date dateFin(jourFin, moisFin, anneeFin);
            if ((dateDebut.estValide()) && (dateFin.estValide()) && (reservation.setPeriodeDeReservation(dateDebut, dateFin))) {
                quitDatesReservation = true;
            }
            else {
                std::cout << "Erreur de saisie : Veuillez resaisir les dates." << std::endl;
            }
        }

        /* Question 8 */
        bool quitChambreReservation = false;
        while (!quitChambreReservation) {
            std::cout << "Entrer le type de chambre désirer :" << std::endl;
            int choixTypeDeChambre = 0;
            std::vector<std::string> listeTypesDeChambre = listeChambres.at(0).getListeTypesDeChambre();
            for (int i = 0; i < listeTypesDeChambre.size(); i++) {
                std::cout << "Taper " << std::to_string(i) << " pour " << listeTypesDeChambre.at(i) << std::endl;
            }
            cin >> choixTypeDeChambre;
            TypeDeChambre typeDeChambreChoisi = listeChambres.at(0).getTypeDeChambreAvecString(listeTypesDeChambre.at(choixTypeDeChambre));
            if (hotel.chambreDeCeTypeEstDisponible(typeDeChambreChoisi)) {
                quitChambreReservation = true;
                reservation.setChambreReservation(hotel.reservePremiereChambreDeCeType(typeDeChambreChoisi));
            }
            else {
                std::cout << "Ce type de chambre n'est pas disponible." << std::endl;
            }
        }

        /* Question 9 */
        bool quitClientReservation = false;
        while (!quitClientReservation) {
            std::string nomClientReservation = "";
            std::cout << "Entrer le nom du client :" << std::endl;
            cin >> nomClientReservation;
            std::vector<Client> listeClientsSelectionnes;
            int choixClient = 0;
            Client clientReservation;
            for (Client client : listeClients) {
                if (client.getNomClient() == nomClientReservation) {
                    listeClientsSelectionnes.push_back(client);
                }
            }
            if (listeClientsSelectionnes.size() != 0) {
                for (int i = 0; i < listeClientsSelectionnes.size(); i++) {
                    std::cout << "Taper " << std::to_string(i) << " pour le client" << listeClientsSelectionnes.at(i).toString() << std::endl;
                }
                cin >> choixClient;
                clientReservation = listeClientsSelectionnes.at(choixClient);
                std::cout << "Le client est : " << clientReservation.toString() << std::endl;
                reservation.setClientReservation(clientReservation);
                quitClientReservation = true;
            }
            else {
                std::cout << "Aucun client ne possede ce nom." << std::endl;
            }
        }
        /* Question 10 */
        reservation.setHotelReservation(hotel);
        reservation.calculMontantTotal();
        listeReservations.push_back(reservation);
    }

    /* Question 10 */
    for (Reservation reservation : listeReservations) {
        std::cout << "La reservation est : " << listeReservations.at(0).toString() << std::endl;
    }
    return 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x548, %rsp            # imm = 0x548
xorps %xmm0, %xmm0
leaq 0xa0(%rsp), %rbx
andq $0x0, 0x10(%rbx)
movaps %xmm0, (%rbx)
xorl %ebp, %ebp
leaq 0x290(%rsp), %r14
pushq $0x1
popq %r15
pushq $0x2
popq %r12
cmpl $0xa, %ebp
je 0x24a8
cmpl $0x2, %ebp
ja 0x245d
movq %r14, %rdi
movl %ebp, %esi
xorl %edx, %edx
movsd 0x4bcd(%rip), %xmm0     # 0x7018
callq 0x4fcc
movq %rbx, %rdi
movq %r14, %rsi
callq 0x3650
jmp 0x24a4
cmpl $0x7, %ebp
ja 0x2484
movq %r14, %rdi
movl %ebp, %esi
movl %r15d, %edx
movsd 0x4b9e(%rip), %xmm0     # 0x7010
callq 0x4fcc
movq %rbx, %rdi
movq %r14, %rsi
callq 0x3650
jmp 0x24a4
movq %r14, %rdi
movl %ebp, %esi
movl %r12d, %edx
movsd 0x4b74(%rip), %xmm0     # 0x7008
callq 0x4fcc
movq %rbx, %rdi
movq %r14, %rsi
callq 0x3650
incl %ebp
jmp 0x2432
leaq 0x4b81(%rip), %rsi      # 0x7030
leaq 0x250(%rsp), %rdi
leaq 0x290(%rsp), %rdx
callq 0x30f4
leaq 0x4b6b(%rip), %rsi      # 0x7036
leaq 0x230(%rsp), %rdi
leaq 0xd0(%rsp), %rdx
callq 0x30f4
leaq 0x4b53(%rip), %rsi      # 0x703a
leaq 0x210(%rsp), %rdi
leaq 0x150(%rsp), %rdx
callq 0x30f4
leaq 0x138(%rsp), %rdi
leaq 0xa0(%rsp), %rsi
callq 0x3130
leaq 0x3f0(%rsp), %rdi
leaq 0x250(%rsp), %rsi
leaq 0x230(%rsp), %rdx
leaq 0x210(%rsp), %rcx
leaq 0x138(%rsp), %r8
callq 0x5790
leaq 0x138(%rsp), %rdi
callq 0x3614
leaq 0x210(%rsp), %rdi
callq 0x20b0
leaq 0x230(%rsp), %rdi
callq 0x20b0
leaq 0x250(%rsp), %rdi
callq 0x20b0
movq 0x8a57(%rip), %rdi      # 0xafd0
leaq 0x4ac0(%rip), %rsi      # 0x7040
callq 0x2150
movq %rax, %rbx
leaq 0x290(%rsp), %rdi
leaq 0x3f0(%rsp), %rsi
callq 0x5942
leaq 0x290(%rsp), %rsi
movq %rbx, %rdi
callq 0x2140
movq %rax, %rdi
callq 0x20c0
leaq 0x290(%rsp), %rdi
callq 0x20b0
xorps %xmm0, %xmm0
leaq 0x40(%rsp), %rax
movaps %xmm0, (%rax)
andq $0x0, 0x10(%rax)
xorl %ebp, %ebp
leaq 0x150(%rsp), %r14
leaq 0x3d0(%rsp), %rbx
leaq 0x60(%rsp), %r15
leaq 0x3b0(%rsp), %r12
cmpl $0xa, %ebp
je 0x26d2
leaq 0xd0(%rsp), %r13
movq %r13, %rdi
movl %ebp, %esi
callq 0x31b3
leaq 0x1f0(%rsp), %rdi
leaq 0x4a34(%rip), %rsi      # 0x704f
movq %r13, %rdx
callq 0x318f
movq %r14, %rdi
movl %ebp, %esi
callq 0x31b3
movq %rbx, %rdi
leaq 0x4a18(%rip), %rsi      # 0x704f
movq %r14, %rdx
callq 0x318f
movq %r15, %rdi
movl %ebp, %esi
callq 0x31b3
movq %r12, %rdi
leaq 0x49fc(%rip), %rsi      # 0x704f
movq %r15, %rdx
callq 0x318f
leaq 0x290(%rsp), %r13
movq %r13, %rdi
leaq 0x1f0(%rsp), %rsi
movq %rbx, %rdx
movq %r12, %rcx
xorl %r8d, %r8d
callq 0x4d70
leaq 0x40(%rsp), %rdi
movq %r13, %rsi
callq 0x3922
movq %r13, %rdi
callq 0x320c
movq %r12, %rdi
callq 0x20b0
movq %r15, %rdi
callq 0x20b0
movq %rbx, %rdi
callq 0x20b0
movq %r14, %rdi
callq 0x20b0
leaq 0x1f0(%rsp), %rdi
callq 0x20b0
leaq 0xd0(%rsp), %rdi
callq 0x20b0
incl %ebp
jmp 0x25f1
movq 0x40(%rsp), %rbx
movq 0x48(%rsp), %r15
leaq 0x290(%rsp), %r14
leaq 0x496b(%rip), %r12      # 0x7056
leaq 0xd0(%rsp), %r13
cmpq %r15, %rbx
je 0x2749
movq %r14, %rdi
movq %rbx, %rsi
callq 0x322c
movq 0x88c6(%rip), %rdi      # 0xafd0
movq %r12, %rsi
callq 0x2150
movq %rax, %rbp
movq %r13, %rdi
movq %r14, %rsi
callq 0x4dd4
movq %rbp, %rdi
movq %r13, %rsi
callq 0x2140
movq %rax, %rdi
callq 0x20c0
movq %r13, %rdi
callq 0x20b0
movq %r14, %rdi
callq 0x320c
addq $0x68, %rbx
jmp 0x26f3
movq 0x8880(%rip), %rdi      # 0xafd0
callq 0x20c0
xorps %xmm0, %xmm0
movaps %xmm0, 0x80(%rsp)
andq $0x0, 0x90(%rsp)
leaq 0x290(%rsp), %rdi
callq 0x5f1e
movq 0x8853(%rip), %rbx      # 0xafd0
movq 0x885c(%rip), %r12      # 0xafe0
leaq 0x38(%rsp), %r14
leaq 0xd0(%rsp), %r15
leaq 0x150(%rsp), %r13
leaq 0x4967(%rip), %rbp      # 0x7107
movq %rbx, %rdi
leaq 0x48bd(%rip), %rsi      # 0x7067
callq 0x2150
movq %rax, %rdi
callq 0x20c0
movq %rbx, %rdi
leaq 0x48e4(%rip), %rsi      # 0x70a5
callq 0x2150
movq %r12, %rdi
leaq 0x60(%rsp), %rsi
callq 0x20f0
movq %rbx, %rdi
leaq 0x48d9(%rip), %rsi      # 0x70b6
callq 0x2150
movq %r12, %rdi
leaq 0x20(%rsp), %rsi
callq 0x20f0
movq %rbx, %rdi
leaq 0x48ce(%rip), %rsi      # 0x70c7
callq 0x2150
movq %r12, %rdi
leaq 0x3c(%rsp), %rsi
callq 0x20f0
movq %rbx, %rdi
leaq 0x48c4(%rip), %rsi      # 0x70d9
callq 0x2150
movq %r12, %rdi
leaq 0x1b8(%rsp), %rsi
callq 0x20f0
movq %rbx, %rdi
leaq 0x48b4(%rip), %rsi      # 0x70e8
callq 0x2150
movq %r12, %rdi
leaq 0x1c(%rsp), %rsi
callq 0x20f0
movq %rbx, %rdi
leaq 0x48a7(%rip), %rsi      # 0x70f7
callq 0x2150
movq %r12, %rdi
movq %r14, %rsi
callq 0x20f0
movl 0x60(%rsp), %esi
movl 0x20(%rsp), %edx
movl 0x3c(%rsp), %ecx
movq %r15, %rdi
callq 0x4454
movl 0x1b8(%rsp), %esi
movl 0x1c(%rsp), %edx
movl 0x38(%rsp), %ecx
movq %r13, %rdi
callq 0x4454
movq %r15, %rdi
callq 0x45a8
testb %al, %al
je 0x28d3
movq %r13, %rdi
callq 0x45a8
testb %al, %al
je 0x28d3
movq 0xd0(%rsp), %rsi
movl 0xd8(%rsp), %edx
movq 0x150(%rsp), %rcx
movl 0x158(%rsp), %r8d
leaq 0x290(%rsp), %rdi
callq 0x6030
testb %al, %al
jne 0x28eb
movq %rbx, %rdi
movq %rbp, %rsi
callq 0x2150
movq %rax, %rdi
callq 0x20c0
jmp 0x27a0
movq 0x86de(%rip), %rbx      # 0xafd0
leaq 0x150(%rsp), %r12
leaq 0xd0(%rsp), %rbp
leaq 0x485a(%rip), %r14      # 0x7163
movq %rbx, %rdi
leaq 0x4824(%rip), %rsi      # 0x7137
callq 0x2150
movq %rax, %rdi
callq 0x20c0
andl $0x0, 0x60(%rsp)
leaq 0xa0(%rsp), %rdi
xorl %esi, %esi
callq 0x3286
movq %r12, %rdi
movq %rax, %rsi
callq 0x4fdc
xorl %r15d, %r15d
movq 0x158(%rsp), %rax
subq 0x150(%rsp), %rax
sarq $0x5, %rax
cmpq %r15, %rax
jbe 0x29bc
movq %rbx, %rdi
leaq 0x47f7(%rip), %rsi      # 0x715c
callq 0x2150
movq %rax, %r13
movq %rbp, %rdi
movl %r15d, %esi
callq 0x31b3
movq %r13, %rdi
movq %rbp, %rsi
callq 0x2140
movq %rax, %rdi
movq %r14, %rsi
callq 0x2150
movq %rax, %r13
movq %r12, %rdi
movq %r15, %rsi
callq 0x32a4
movq %r13, %rdi
movq %rax, %rsi
callq 0x2140
movq %rax, %rdi
callq 0x20c0
movq %rbp, %rdi
callq 0x20b0
incq %r15
jmp 0x2942
movq 0x861d(%rip), %rdi      # 0xafe0
leaq 0x60(%rsp), %rsi
callq 0x20f0
leaq 0xa0(%rsp), %rdi
xorl %esi, %esi
callq 0x3286
movq %rax, %r15
movslq 0x60(%rsp), %rsi
movq %r12, %rdi
callq 0x32a4
leaq 0x270(%rsp), %rdi
movq %rax, %rsi
callq 0x21b0
movq %r15, %rdi
leaq 0x270(%rsp), %r15
movq %r15, %rsi
callq 0x5092
movl %eax, %r13d
movq %r15, %rdi
callq 0x20b0
leaq 0x3f0(%rsp), %rdi
movl %r13d, %esi
callq 0x5820
movl %eax, %r15d
testb %al, %al
je 0x2a71
leaq 0x1d8(%rsp), %rdi
leaq 0x3f0(%rsp), %rsi
movl %r13d, %edx
callq 0x5886
movq 0x1e8(%rsp), %rax
movq %rax, 0x10(%rsp)
movups 0x1d8(%rsp), %xmm0
movups %xmm0, (%rsp)
leaq 0x290(%rsp), %rdi
callq 0x5ee4
jmp 0x2a88
movq %rbx, %rdi
leaq 0x46ef(%rip), %rsi      # 0x716a
callq 0x2150
movq %rax, %rdi
callq 0x20c0
movq %r12, %rdi
callq 0x32c6
testb %r15b, %r15b
je 0x2909
leaq 0x60(%rsp), %rdi
leaq 0xd0(%rsp), %r14
leaq 0x150(%rsp), %rbp
leaq 0x1b8(%rsp), %r13
movq %rdi, %rbx
leaq 0x4993(%rip), %rsi      # 0x7453
movq %r14, %rdx
callq 0x30f4
movq 0x8501(%rip), %rdi      # 0xafd0
leaq 0x46bd(%rip), %rsi      # 0x7193
callq 0x2150
movq %rax, %rdi
callq 0x20c0
movq 0x84f6(%rip), %rdi      # 0xafe0
movq %rbx, %rsi
callq 0x2190
andq $0x0, 0x30(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, 0x20(%rsp)
andl $0x0, 0x1c(%rsp)
leaq 0xd0(%rsp), %rdi
callq 0x4cf8
movq 0x40(%rsp), %r15
movq 0x48(%rsp), %r14
cmpq %r14, %r15
je 0x2b6d
movq %rbp, %rdi
movq %r15, %rsi
callq 0x322c
movq %r13, %rdi
movq %rbp, %rsi
callq 0x4cb8
movq %r13, %rdi
movq %rbx, %rsi
callq 0x32e7
movl %eax, %r12d
movq %r13, %rdi
callq 0x20b0
testb %r12b, %r12b
je 0x2b5f
leaq 0x20(%rsp), %rdi
movq %rbp, %rsi
callq 0x3310
movq %rbp, %rdi
callq 0x320c
addq $0x68, %r15
jmp 0x2b1c
movq 0x20(%rsp), %rcx
movq 0x28(%rsp), %rax
cmpq %rcx, %rax
movq %rcx, 0xc8(%rsp)
movq %rax, 0xc0(%rsp)
je 0x2cda
xorl %r15d, %r15d
subq %rcx, %rax
cqto
pushq $0x68
popq %rcx
idivq %rcx
cmpq %r15, %rax
jbe 0x2c32
movq 0x8422(%rip), %rdi      # 0xafd0
leaq 0x45a7(%rip), %rsi      # 0x715c
callq 0x2150
movq %rax, %r12
movq %rbp, %rdi
movl %r15d, %esi
callq 0x31b3
movq %r12, %rdi
movq %rbp, %rsi
callq 0x2140
movq %rax, %rdi
leaq 0x45d0(%rip), %rsi      # 0x71ad
callq 0x2150
movq %rax, %r12
leaq 0x20(%rsp), %rdi
movq %r15, %rsi
callq 0x333c
movq %r13, %rdi
movq %rax, %rsi
callq 0x4dd4
movq %r12, %rdi
movq %r13, %rsi
callq 0x2140
movq %rax, %rdi
callq 0x20c0
movq %r13, %rdi
callq 0x20b0
movq %rbp, %rdi
callq 0x20b0
incq %r15
movq 0x20(%rsp), %rcx
movq 0x28(%rsp), %rax
jmp 0x2b93
movq 0x83a7(%rip), %rdi      # 0xafe0
leaq 0x1c(%rsp), %rsi
callq 0x20f0
movslq 0x1c(%rsp), %rsi
leaq 0x20(%rsp), %rdi
callq 0x333c
leaq 0xd0(%rsp), %rdi
movq %rax, %rsi
callq 0x335a
movq 0x8367(%rip), %rdi      # 0xafd0
leaq 0x43e6(%rip), %rsi      # 0x7056
callq 0x2150
movq %rax, %r15
movq %rbp, %rdi
leaq 0xd0(%rsp), %rsi
callq 0x4dd4
movq %r15, %rdi
movq %rbp, %rsi
callq 0x2140
movq %rax, %rdi
callq 0x20c0
movq %rbp, %rdi
callq 0x20b0
leaq 0x4e0(%rsp), %rdi
leaq 0xd0(%rsp), %rsi
callq 0x322c
leaq 0x290(%rsp), %rdi
leaq 0x4e0(%rsp), %r14
movq %r14, %rsi
callq 0x5f12
movq %r14, %rdi
callq 0x320c
jmp 0x2cf5
movq 0x82ef(%rip), %rdi      # 0xafd0
leaq 0x44d5(%rip), %rsi      # 0x71bd
callq 0x2150
movq %rax, %rdi
callq 0x20c0
leaq 0xd0(%rsp), %r14
movq %r14, %rdi
callq 0x320c
leaq 0x20(%rsp), %rdi
callq 0x3396
movq %rbx, %rdi
callq 0x20b0
movq %rbx, %rdi
movq 0xc0(%rsp), %rax
cmpq 0xc8(%rsp), %rax
je 0x2ab6
leaq 0x468(%rsp), %rdi
leaq 0x3f0(%rsp), %rsi
callq 0x33b8
leaq 0x290(%rsp), %rdi
leaq 0x468(%rsp), %rsi
callq 0x5ec0
leaq 0x468(%rsp), %rdi
callq 0x3434
leaq 0x290(%rsp), %rdi
callq 0x5e5c
leaq 0x80(%rsp), %rdi
leaq 0x290(%rsp), %rsi
callq 0x345c
leaq 0x290(%rsp), %rbx
movq %rbx, %rdi
callq 0x348c
leaq 0x80(%rsp), %r14
movq (%r14), %r15
movq 0x8(%r14), %r13
leaq 0xd0(%rsp), %rbp
cmpq %r13, %r15
je 0x2e17
movq %rbx, %rdi
movq %r15, %rsi
callq 0x34aa
movq 0x8209(%rip), %rdi      # 0xafd0
leaq 0x440f(%rip), %rsi      # 0x71dd
callq 0x2150
movq %rax, %r12
movq %r14, %rdi
xorl %esi, %esi
callq 0x352c
movq %rbp, %rdi
movq %rax, %rsi
callq 0x608e
movq %r12, %rdi
movq %rbp, %rsi
callq 0x2140
movq %rax, %rdi
callq 0x20c0
movq %rbp, %rdi
callq 0x20b0
movq %rbx, %rdi
callq 0x348c
addq $0x120, %r15            # imm = 0x120
jmp 0x2db0
leaq 0x80(%rsp), %rdi
callq 0x354e
leaq 0x40(%rsp), %rdi
callq 0x3396
leaq 0x3f0(%rsp), %rdi
callq 0x3434
leaq 0xa0(%rsp), %rdi
callq 0x3614
xorl %eax, %eax
addq $0x548, %rsp            # imm = 0x548
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
leaq 0x468(%rsp), %rdi
callq 0x3434
jmp 0x30ae
jmp 0x2f0e
jmp 0x2f6c
jmp 0x2e7d
movq %rax, %rbx
jmp 0x30d2
movq %rax, %rbx
leaq 0x138(%rsp), %rdi
callq 0x3614
jmp 0x2e9a
movq %rax, %rbx
leaq 0x210(%rsp), %rdi
callq 0x20b0
jmp 0x2eac
movq %rax, %rbx
leaq 0x230(%rsp), %rdi
callq 0x20b0
jmp 0x2ebe
movq %rax, %rbx
leaq 0x250(%rsp), %rdi
callq 0x20b0
jmp 0x30df
jmp 0x2fad
movq %rax, %rbx
leaq 0x290(%rsp), %rdi
callq 0x20b0
jmp 0x30d2
jmp 0x308c
jmp 0x2fad
jmp 0x2fad
movq %rax, %rbx
leaq 0x4e0(%rsp), %rdi
jmp 0x3037
jmp 0x3027
movq %rax, %rbx
jmp 0x30bb
jmp 0x308c
jmp 0x2f1d
movq %rax, %rbx
jmp 0x2ffe
jmp 0x2f6c
movq %rax, %rbx
jmp 0x2f5d
movq %rax, %rbx
jmp 0x2f53
movq %rax, %rbx
jmp 0x2f46
movq %rax, %rbx
leaq 0x290(%rsp), %rdi
callq 0x320c
leaq 0x3b0(%rsp), %rdi
callq 0x20b0
leaq 0x60(%rsp), %rdi
callq 0x20b0
leaq 0x3d0(%rsp), %rdi
callq 0x20b0
jmp 0x2f81
movq %rax, %rbx
jmp 0x30c8
movq %rax, %rbx
jmp 0x2f9b
movq %rax, %rbx
jmp 0x2f8e
movq %rax, %rbx
leaq 0x150(%rsp), %rdi
callq 0x20b0
leaq 0x1f0(%rsp), %rdi
callq 0x20b0
leaq 0xd0(%rsp), %rdi
callq 0x20b0
jmp 0x30c8
movq %rax, %rbx
jmp 0x30df
jmp 0x308c
movq %rax, %rbx
jmp 0x3076
jmp 0x3040
movq %rax, %rbx
leaq 0x270(%rsp), %rdi
jmp 0x309c
jmp 0x3059
movq %rax, %rbx
leaq 0xd0(%rsp), %rdi
jmp 0x3085
jmp 0x308c
movq %rax, %rbx
leaq 0xd0(%rsp), %rdi
callq 0x20b0
leaq 0x290(%rsp), %rdi
callq 0x320c
jmp 0x30c8
jmp 0x308c
jmp 0x308c
movq %rax, %rbx
jmp 0x3080
jmp 0x3027
jmp 0x308c
jmp 0x3040
jmp 0x302c
jmp 0x308c
jmp 0x3027
jmp 0x3027
movq %rax, %rbx
jmp 0x3069
movq %rax, %rbx
leaq 0x150(%rsp), %rdi
callq 0x320c
jmp 0x3069
jmp 0x3040
movq %rax, %rbx
jmp 0x30a1
jmp 0x3059
movq %rax, %rbx
leaq 0x1b8(%rsp), %rdi
callq 0x20b0
jmp 0x305c
movq %rax, %rbx
leaq 0x150(%rsp), %rdi
callq 0x20b0
leaq 0xd0(%rsp), %rdi
callq 0x320c
leaq 0x20(%rsp), %rdi
callq 0x3396
leaq 0x60(%rsp), %rdi
callq 0x20b0
jmp 0x30ae
movq %rax, %rbx
jmp 0x30ae
movq %rax, %rbx
leaq 0xd0(%rsp), %rdi
callq 0x20b0
leaq 0x150(%rsp), %rdi
callq 0x32c6
leaq 0x290(%rsp), %rdi
callq 0x348c
leaq 0x80(%rsp), %rdi
callq 0x354e
leaq 0x40(%rsp), %rdi
callq 0x3396
leaq 0x3f0(%rsp), %rdi
callq 0x3434
leaq 0xa0(%rsp), %rdi
callq 0x3614
movq %rbx, %rdi
callq 0x2230