// File: greenpau[P]mnpa/main.cpp
// Function: help(int)
void help(int code) {
    cout << endl;
    cout << APP_NAME << " - " << APP_DESCR << endl;
    cout << endl;
    cout << "usage: " << APP_NAME << " [-h] [-d] [--sender PATTERN] ";
    cout << "[--sender PATTERN] [--receiver PATTERN] [--threads THREADS]" << endl;
    cout << endl;
    cout << "examples:" << endl;
    cout << endl;
    cout << "  " << APP_NAME << " --threads 5 --sender ";
    cout << "eth1/1000/64-127/0/0/239.1.2.4/5001/TEST1 --verbose" << endl;
    cout << "  " << APP_NAME << " --threads 5 ";
    cout << "--sender eth1/5/64-128/60/0/224.0.0.1/5001/TEST2 ";
    cout << "--sender eth1/5/64-128/60/0/224.0.0.1/5001/TEST3" << endl;
    cout << "  " << APP_NAME << " --threads 1 ";
    cout << "--receiver 10.254.0.12/239.1.1.1/5001/600" << endl;
    cout << "  " << APP_NAME << " --help" << endl;
    cout << "  " << endl;
    cout << "arguments:" << endl;
    cout << endl;
    cout << "  -s, --sender          sourcing pattern" << endl;
    cout << endl;
    cout << "    A multicast sourcing traffic pattern consists of:" << endl;
    cout << endl;
    cout << "      1. interface name, default: eth0" << endl;
    cout << "      2. number of packets, default: 5" << endl;
    cout << "      3. packet size, e.g. 64, 64-127, 128-255, 300-312" << endl;
    cout << "      4. traffic duration in seconds, default: 2" << endl;
    cout << "      5. thread start offset in seconds, default: 0" << endl;
    cout << "      6. destination ip address, default: 224.0.0.1" << endl;
    cout << "      7. destination port, default: 5001" << endl;
    cout << "      8. traffic tag, default: MNPA" << endl;
    cout << endl;
    cout << "  -r, --receiver      subscription pattern" << endl;
    cout << endl;
    cout << "    A multicast subscription pattern consists of:" << endl;
    cout << endl;
    cout << "      1. interface ip address, e.g 127.0.0.1, or name, e.g. eth1" << endl;
    cout << "      2. multicast group ip address, e.g. 239.1.1.1" << endl;
    cout << "      3. destination port, e.g. 5001" << endl;
    cout << "      4. subscription duration in seconds, default: unlimited (0)" << endl;
    cout << endl;
    cout << "  --igmp-v2-report      send IGMPv2 membership report only" << endl;
    cout << "  --igmp-v3-report      send IGMPv3 membership report only" << endl;
    cout << endl;
    cout << "    The above IGMP v2 or v3 Membership Report switches are used" << endl;
    cout << "    with the --receiver argument. Also, when one of the switches" << endl;
    cout << "    is enabled, the application sends raw membership report packets," << endl;
    cout << "    without responding to membership queries." << endl;
    cout << endl;
    cout << "  -t, --threads         number of concurrent threads, default: 1" << endl;
    cout << "  -p, --priority        program scheduling priority, default: 0" << endl;
    cout << "  -d, --daemonize       run in background, default: disabled" << endl;
    cout << "  -v, --verbose         enable logging, default: disabled" << endl;
    cout << "  --random-payload      enable payload randomization, default: disabled" << endl;
    cout << "  --packet-storm        send packets w/out waiting for conditions, default: disabled" << endl;
    cout << endl;
    cout << "  --stop                stop service" << endl;
    cout << "  --status              status service" << endl;
    cout << endl;
    cout << "documentation: https://github.com/greenpau/mnpa" <<endl;
    cout << endl;
    exit(code);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x10, %rsp
movl %edi, -0x4(%rbp)
leaq 0x1468ae(%rip), %rdi    # 0x160980
leaq 0xa4917(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x14689b(%rip), %rdi    # 0x160980
leaq 0xe8990(%rip), %rsi     # 0x102a7c
callq 0xbf110
movq %rax, %rdi
leaq 0xe8168(%rip), %rsi     # 0x102263
callq 0xbf110
movq %rax, %rdi
leaq 0xe815d(%rip), %rsi     # 0x102267
callq 0xbf110
movq %rax, %rdi
leaq 0xa48d7(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x14685b(%rip), %rdi    # 0x160980
leaq 0xa48c4(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x146848(%rip), %rdi    # 0x160980
leaq 0xe814f(%rip), %rsi     # 0x10228e
callq 0xbf110
movq %rax, %rdi
leaq 0xe892e(%rip), %rsi     # 0x102a7c
callq 0xbf110
movq %rax, %rdi
leaq 0xe8139(%rip), %rsi     # 0x102296
callq 0xbf110
leaq 0x146817(%rip), %rdi    # 0x160980
leaq 0xe8145(%rip), %rsi     # 0x1022b5
callq 0xbf110
movq %rax, %rdi
leaq 0xa4871(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x1467f5(%rip), %rdi    # 0x160980
leaq 0xa485e(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x1467e2(%rip), %rdi    # 0x160980
leaq 0xe814c(%rip), %rsi     # 0x1022f1
callq 0xbf110
movq %rax, %rdi
leaq 0xa483c(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x1467c0(%rip), %rdi    # 0x160980
leaq 0xa4829(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x1467ad(%rip), %rdi    # 0x160980
leaq 0xe924d(%rip), %rsi     # 0x103427
callq 0xbf110
movq %rax, %rdi
leaq 0xe8893(%rip), %rsi     # 0x102a7c
callq 0xbf110
movq %rax, %rdi
leaq 0xe8103(%rip), %rsi     # 0x1022fb
callq 0xbf110
leaq 0x14677c(%rip), %rdi    # 0x160980
leaq 0xe8107(%rip), %rsi     # 0x102312
callq 0xbf110
movq %rax, %rdi
leaq 0xa47d6(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x14675a(%rip), %rdi    # 0x160980
leaq 0xe91fa(%rip), %rsi     # 0x103427
callq 0xbf110
movq %rax, %rdi
leaq 0xe8840(%rip), %rsi     # 0x102a7c
callq 0xbf110
movq %rax, %rdi
leaq 0xe80fb(%rip), %rsi     # 0x102346
callq 0xbf110
leaq 0x146729(%rip), %rdi    # 0x160980
leaq 0xe80f6(%rip), %rsi     # 0x102354
callq 0xbf110
leaq 0x146716(%rip), %rdi    # 0x160980
leaq 0xe8115(%rip), %rsi     # 0x102386
callq 0xbf110
movq %rax, %rdi
leaq 0xa4770(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x1466f4(%rip), %rdi    # 0x160980
leaq 0xe9194(%rip), %rsi     # 0x103427
callq 0xbf110
movq %rax, %rdi
leaq 0xe87da(%rip), %rsi     # 0x102a7c
callq 0xbf110
movq %rax, %rdi
leaq 0xe8106(%rip), %rsi     # 0x1023b7
callq 0xbf110
leaq 0x1466c3(%rip), %rdi    # 0x160980
leaq 0xe8101(%rip), %rsi     # 0x1023c5
callq 0xbf110
movq %rax, %rdi
leaq 0xa471d(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x1466a1(%rip), %rdi    # 0x160980
leaq 0xe9141(%rip), %rsi     # 0x103427
callq 0xbf110
movq %rax, %rdi
leaq 0xe8787(%rip), %rsi     # 0x102a7c
callq 0xbf110
movq %rax, %rdi
leaq 0xe80eb(%rip), %rsi     # 0x1023ef
callq 0xbf110
movq %rax, %rdi
leaq 0xa46dd(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x146661(%rip), %rdi    # 0x160980
leaq 0xe9101(%rip), %rsi     # 0x103427
callq 0xbf110
movq %rax, %rdi
leaq 0xa46bb(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x14663f(%rip), %rdi    # 0x160980
leaq 0xe80af(%rip), %rsi     # 0x1023f7
callq 0xbf110
movq %rax, %rdi
leaq 0xa4699(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x14661d(%rip), %rdi    # 0x160980
leaq 0xa4686(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x14660a(%rip), %rdi    # 0x160980
leaq 0xe8085(%rip), %rsi     # 0x102402
callq 0xbf110
movq %rax, %rdi
leaq 0xa4664(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x1465e8(%rip), %rdi    # 0x160980
leaq 0xa4651(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x1465d5(%rip), %rdi    # 0x160980
leaq 0xe8079(%rip), %rsi     # 0x10242b
callq 0xbf110
movq %rax, %rdi
leaq 0xa462f(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x1465b3(%rip), %rdi    # 0x160980
leaq 0xa461c(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x1465a0(%rip), %rdi    # 0x160980
leaq 0xe807a(%rip), %rsi     # 0x102461
callq 0xbf110
movq %rax, %rdi
leaq 0xa45fa(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x14657e(%rip), %rdi    # 0x160980
leaq 0xe807f(%rip), %rsi     # 0x102488
callq 0xbf110
movq %rax, %rdi
leaq 0xa45d8(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x14655c(%rip), %rdi    # 0x160980
leaq 0xe8084(%rip), %rsi     # 0x1024af
callq 0xbf110
movq %rax, %rdi
leaq 0xa45b6(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x14653a(%rip), %rdi    # 0x160980
leaq 0xe809a(%rip), %rsi     # 0x1024e7
callq 0xbf110
movq %rax, %rdi
leaq 0xa4594(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x146518(%rip), %rdi    # 0x160980
leaq 0xe80a9(%rip), %rsi     # 0x102518
callq 0xbf110
movq %rax, %rdi
leaq 0xa4572(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x1464f6(%rip), %rdi    # 0x160980
leaq 0xe80bb(%rip), %rsi     # 0x10254c
callq 0xbf110
movq %rax, %rdi
leaq 0xa4550(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x1464d4(%rip), %rdi    # 0x160980
leaq 0xe80cd(%rip), %rsi     # 0x102580
callq 0xbf110
movq %rax, %rdi
leaq 0xa452e(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x1464b2(%rip), %rdi    # 0x160980
leaq 0xe80d4(%rip), %rsi     # 0x1025a9
callq 0xbf110
movq %rax, %rdi
leaq 0xa450c(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x146490(%rip), %rdi    # 0x160980
leaq 0xa44f9(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x14647d(%rip), %rdi    # 0x160980
leaq 0xe80c3(%rip), %rsi     # 0x1025cd
callq 0xbf110
movq %rax, %rdi
leaq 0xa44d7(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x14645b(%rip), %rdi    # 0x160980
leaq 0xa44c4(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x146448(%rip), %rdi    # 0x160980
leaq 0xe80b9(%rip), %rsi     # 0x1025f8
callq 0xbf110
movq %rax, %rdi
leaq 0xa44a2(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x146426(%rip), %rdi    # 0x160980
leaq 0xa448f(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x146413(%rip), %rdi    # 0x160980
leaq 0xe80b6(%rip), %rsi     # 0x10262a
callq 0xbf110
movq %rax, %rdi
leaq 0xa446d(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x1463f1(%rip), %rdi    # 0x160980
leaq 0xe80d5(%rip), %rsi     # 0x10266b
callq 0xbf110
movq %rax, %rdi
leaq 0xa444b(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x1463cf(%rip), %rdi    # 0x160980
leaq 0xe80e7(%rip), %rsi     # 0x10269f
callq 0xbf110
movq %rax, %rdi
leaq 0xa4429(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x1463ad(%rip), %rdi    # 0x160980
leaq 0xe80ea(%rip), %rsi     # 0x1026c4
callq 0xbf110
movq %rax, %rdi
leaq 0xa4407(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x14638b(%rip), %rdi    # 0x160980
leaq 0xa43f4(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x146378(%rip), %rdi    # 0x160980
leaq 0xe80f7(%rip), %rsi     # 0x102706
callq 0xbf110
movq %rax, %rdi
leaq 0xa43d2(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x146356(%rip), %rdi    # 0x160980
leaq 0xe8110(%rip), %rsi     # 0x102741
callq 0xbf110
movq %rax, %rdi
leaq 0xa43b0(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x146334(%rip), %rdi    # 0x160980
leaq 0xa439d(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x146321(%rip), %rdi    # 0x160980
leaq 0xe8116(%rip), %rsi     # 0x10277c
callq 0xbf110
movq %rax, %rdi
leaq 0xa437b(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x1462ff(%rip), %rdi    # 0x160980
leaq 0xe8134(%rip), %rsi     # 0x1027bc
callq 0xbf110
movq %rax, %rdi
leaq 0xa4359(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x1462dd(%rip), %rdi    # 0x160980
leaq 0xe8153(%rip), %rsi     # 0x1027fd
callq 0xbf110
movq %rax, %rdi
leaq 0xa4337(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x1462bb(%rip), %rdi    # 0x160980
leaq 0xe8176(%rip), %rsi     # 0x102842
callq 0xbf110
movq %rax, %rdi
leaq 0xa4315(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x146299(%rip), %rdi    # 0x160980
leaq 0xa4302(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x146286(%rip), %rdi    # 0x160980
leaq 0xe816f(%rip), %rsi     # 0x102870
callq 0xbf110
movq %rax, %rdi
leaq 0xa42e0(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x146264(%rip), %rdi    # 0x160980
leaq 0xe818e(%rip), %rsi     # 0x1028b1
callq 0xbf110
movq %rax, %rdi
leaq 0xa42be(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x146242(%rip), %rdi    # 0x160980
leaq 0xe81ac(%rip), %rsi     # 0x1028f1
callq 0xbf110
movq %rax, %rdi
leaq 0xa429c(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x146220(%rip), %rdi    # 0x160980
leaq 0xe81c7(%rip), %rsi     # 0x10292e
callq 0xbf110
movq %rax, %rdi
leaq 0xa427a(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x1461fe(%rip), %rdi    # 0x160980
leaq 0xe81df(%rip), %rsi     # 0x102968
callq 0xbf110
movq %rax, %rdi
leaq 0xa4258(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x1461dc(%rip), %rdi    # 0x160980
leaq 0xe8205(%rip), %rsi     # 0x1029b0
callq 0xbf110
movq %rax, %rdi
leaq 0xa4236(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x1461ba(%rip), %rdi    # 0x160980
leaq 0xa4223(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x1461a7(%rip), %rdi    # 0x160980
leaq 0xe8225(%rip), %rsi     # 0x102a05
callq 0xbf110
movq %rax, %rdi
leaq 0xa4201(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x146185(%rip), %rdi    # 0x160980
leaq 0xe8228(%rip), %rsi     # 0x102a2a
callq 0xbf110
movq %rax, %rdi
leaq 0xa41df(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x146163(%rip), %rdi    # 0x160980
leaq 0xa41cc(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x146150(%rip), %rdi    # 0x160980
leaq 0xe821a(%rip), %rsi     # 0x102a51
callq 0xbf110
movq %rax, %rdi
leaq 0xa41aa(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
leaq 0x14612e(%rip), %rdi    # 0x160980
leaq 0xa4197(%rip), %rsi     # 0xbe9f0
callq 0xbdc00
movl -0x4(%rbp), %edi
callq 0x161b0
nopw %cs:(%rax,%rax)