// File: xbai0624[P]dnn/src/ConstructLayer.cpp
// Function: ConstructLayer::BatchNormalization_GetGradientOnParameters_1DLayer()
void ConstructLayer::BatchNormalization_GetGradientOnParameters_1DLayer() //TO-DO: need to parallelize
{
    // gradients of cost function on \sigma_B^2, \mu_B, \gamma, \beta
    double epsilon = 1e-8;
    size_t batch_size = __p_data_interface->GetBatchSize();

    // mu_B
    // both cnn and fc have one average and variance
    Matrix & mu_B = __imageAverage_BN[0].OutputImageFromKernel[0]; // 1D layer has one kernel
    // sigma_B^2
    Matrix & sigma_B = __imageVariance_BN[0].OutputImageFromKernel[0];

    Matrix Var_inverse_half_cubic = sigma_B + epsilon;
    Var_inverse_half_cubic(inverse_half_cubic);
    Var_inverse_half_cubic = Var_inverse_half_cubic * (-1./2.);

    Matrix Var_inverse_square_root = sigma_B + epsilon;
    Var_inverse_square_root(inverse_square_root);
    Var_inverse_square_root = Var_inverse_square_root * (-1.);

    // 1) \partial{C}/\partial{\sigma_B^2}
    Matrix partial_C_over_partial_sigma_B2(__imageZ[0].OutputImageFromKernel[0].Dimension(), 0.);
    for(size_t i=0;i<batch_size;i++)
    {
        Matrix partial_C_over_partial_hat_x = __imageDelta[i].OutputImageFromKernel[0] ^ __gamma_BN[0];

        Matrix tmp = __imageZ[i].OutputImageFromKernel[0] - mu_B;
        tmp = tmp ^ partial_C_over_partial_hat_x;

        partial_C_over_partial_sigma_B2 = partial_C_over_partial_sigma_B2 + tmp;
    }
    partial_C_over_partial_sigma_B2 = partial_C_over_partial_sigma_B2 ^ Var_inverse_half_cubic;

    // \partial{C}/\partial{\sigma_B^2}  result
    __v_partial_C_over_partial_sigma_square.push_back(partial_C_over_partial_sigma_B2);

    // 2) \partial{C}/\partial{mu_B}
    Matrix part1(__imageZ[0].OutputImageFromKernel[0].Dimension(), 0.);
    Matrix part2(__imageZ[0].OutputImageFromKernel[0].Dimension(), 0.);
    for(size_t i=0;i<batch_size;i++)
    {
        Matrix partial_C_over_partial_hat_x = __imageDelta[i].OutputImageFromKernel[0] ^ __gamma_BN[0];
        part1 = part1 + partial_C_over_partial_hat_x;

        part2 = part2 + __imageZ[i].OutputImageFromKernel[0];
        part2 = part2 - mu_B;
    }
    part1 = part1 ^ Var_inverse_square_root;

    part2 = part2 * (-2./(double)batch_size);
    part2 = part2 ^ partial_C_over_partial_sigma_B2;
    Matrix partial_C_over_partial_mu_B = part1 + part2;

    // \partial{C}/\partial{mu_B}   result
    __v_partial_C_over_partial_mu.push_back(partial_C_over_partial_mu_B);

    // 3) \partial{C}/\partial{\gamma} and \partial{C}/\partial{beta}
    Matrix partial_C_over_partial_gamma(__imageZ[0].OutputImageFromKernel[0].Dimension(), 0.);
    Matrix partial_C_over_partial_beta(__imageZ[0].OutputImageFromKernel[0].Dimension(), 0.);
    for(size_t i=0;i<batch_size;i++)
    {
        Matrix tmp = __imageDelta[i].OutputImageFromKernel[0] ^ __imageZ_BN[i].OutputImageFromKernel[0];
        partial_C_over_partial_gamma = partial_C_over_partial_gamma +  tmp;

        partial_C_over_partial_beta = partial_C_over_partial_beta + __imageDelta[i].OutputImageFromKernel[0];
    }

    // \partial{C}/\partial{\gamma} and \partial{C}/\partial{beta} result
    __v_partial_C_over_partial_gamma.push_back(partial_C_over_partial_gamma);
    __v_partial_C_over_partial_beta.push_back(partial_C_over_partial_beta);
}

// Assembly:
subq $0x3b8, %rsp            # imm = 0x3B8
movq %rdi, 0x3b0(%rsp)
movq 0x3b0(%rsp), %rax
movq %rax, 0xa8(%rsp)
movabsq $0x3e45798ee2308c3a, %rcx # imm = 0x3E45798EE2308C3A
movq %rcx, 0x3a8(%rsp)
movq 0x400(%rax), %rdi
callq 0x1f310
movq 0xa8(%rsp), %rdi
cltq
movq %rax, 0x3a0(%rsp)
addq $0x278, %rdi            # imm = 0x278
xorl %eax, %eax
movl %eax, %esi
movq %rsi, 0xb0(%rsp)
callq 0x1fd40
movq 0xb0(%rsp), %rsi
movq %rax, %rdi
callq 0x1f9e0
movq 0xa8(%rsp), %rdi
movq 0xb0(%rsp), %rsi
movq %rax, 0x398(%rsp)
addq $0x2a8, %rdi            # imm = 0x2A8
callq 0x1fd40
movq 0xb0(%rsp), %rsi
movq %rax, %rdi
callq 0x1f9e0
movq %rax, 0x390(%rsp)
movq 0x390(%rsp), %rsi
movsd 0x3a8(%rsp), %xmm0
leaq 0x378(%rsp), %rdi
movq %rdi, 0xb8(%rsp)
callq 0x3ca80
movq 0xb8(%rsp), %rdi
leaq 0x1f58(%rip), %rsi      # 0xef20
callq 0x3dc20
jmp 0xcfcf
leaq 0x350(%rsp), %rdi
leaq 0x378(%rsp), %rsi
movsd 0x45039(%rip), %xmm0    # 0x52020
callq 0x3cfd0
jmp 0xcfee
leaq 0x378(%rsp), %rdi
leaq 0x350(%rsp), %rsi
callq 0x1fa20
jmp 0xd005
leaq 0x350(%rsp), %rdi
callq 0x3bb80
movq 0x390(%rsp), %rsi
movsd 0x3a8(%rsp), %xmm0
leaq 0x338(%rsp), %rdi
callq 0x3ca80
jmp 0xd032
leaq 0x1f57(%rip), %rsi      # 0xef90
leaq 0x338(%rsp), %rdi
callq 0x3dc20
jmp 0xd048
leaq 0x320(%rsp), %rdi
leaq 0x338(%rsp), %rsi
movsd 0x44fc8(%rip), %xmm0    # 0x52028
callq 0x3cfd0
jmp 0xd067
leaq 0x338(%rsp), %rdi
leaq 0x320(%rsp), %rsi
callq 0x1fa20
jmp 0xd07e
leaq 0x320(%rsp), %rdi
callq 0x3bb80
movq 0xa8(%rsp), %rdi
addq $0x150, %rdi            # imm = 0x150
xorl %eax, %eax
movl %eax, %esi
movq %rsi, 0x90(%rsp)
callq 0x1fd40
movq 0x90(%rsp), %rsi
movq %rax, %rdi
callq 0x1f9e0
movq %rax, %rdi
callq 0x3bae0
movq %rdx, 0x98(%rsp)
movq %rax, 0xa0(%rsp)
jmp 0xd0d5
movq 0x98(%rsp), %rax
movq 0xa0(%rsp), %rcx
movq %rcx, 0x2f8(%rsp)
movq %rax, 0x300(%rsp)
movq 0x2f8(%rsp), %rsi
movq 0x300(%rsp), %rdx
leaq 0x308(%rsp), %rdi
xorps %xmm0, %xmm0
callq 0x3b680
jmp 0xd117
movq $0x0, 0x2f0(%rsp)
movq 0x2f0(%rsp), %rax
cmpq 0x3a0(%rsp), %rax
jae 0xd3c8
movq 0xa8(%rsp), %rdi
addq $0x180, %rdi            # imm = 0x180
movq 0x2f0(%rsp), %rsi
callq 0x1fd40
movq %rax, %rdi
xorl %eax, %eax
movl %eax, %esi
movq %rsi, 0x80(%rsp)
callq 0x1f9e0
movq 0xa8(%rsp), %rdi
movq 0x80(%rsp), %rsi
movq %rax, 0x88(%rsp)
addq $0x308, %rdi            # imm = 0x308
callq 0x1f9e0
movq 0x88(%rsp), %rsi
movq %rax, %rdx
leaq 0x2d8(%rsp), %rdi
callq 0x3c680
jmp 0xd1a7
movq 0xa8(%rsp), %rdi
addq $0x150, %rdi            # imm = 0x150
movq 0x2f0(%rsp), %rsi
callq 0x1fd40
movq %rax, %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x1f9e0
movq %rax, %rsi
movq 0x398(%rsp), %rdx
leaq 0x2c0(%rsp), %rdi
callq 0x3c480
jmp 0xd1e9
leaq 0x2a8(%rsp), %rdi
leaq 0x2c0(%rsp), %rsi
leaq 0x2d8(%rsp), %rdx
callq 0x3c680
jmp 0xd208
leaq 0x2c0(%rsp), %rdi
leaq 0x2a8(%rsp), %rsi
callq 0x1fa20
jmp 0xd21f
leaq 0x2a8(%rsp), %rdi
callq 0x3bb80
leaq 0x290(%rsp), %rdi
leaq 0x308(%rsp), %rsi
leaq 0x2c0(%rsp), %rdx
callq 0x3bf90
jmp 0xd24b
leaq 0x308(%rsp), %rdi
leaq 0x290(%rsp), %rsi
callq 0x1fa20
jmp 0xd262
leaq 0x290(%rsp), %rdi
callq 0x3bb80
leaq 0x2c0(%rsp), %rdi
callq 0x3bb80
leaq 0x2d8(%rsp), %rdi
callq 0x3bb80
movq 0x2f0(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x2f0(%rsp)
jmp 0xd123
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x370(%rsp)
movl %eax, 0x36c(%rsp)
jmp 0xdd54
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x370(%rsp)
movl %eax, 0x36c(%rsp)
leaq 0x350(%rsp), %rdi
callq 0x3bb80
jmp 0xdd54
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x370(%rsp)
movl %eax, 0x36c(%rsp)
jmp 0xdd47
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x370(%rsp)
movl %eax, 0x36c(%rsp)
leaq 0x320(%rsp), %rdi
callq 0x3bb80
jmp 0xdd47
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x370(%rsp)
movl %eax, 0x36c(%rsp)
jmp 0xdd3a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x370(%rsp)
movl %eax, 0x36c(%rsp)
jmp 0xd3b6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x370(%rsp)
movl %eax, 0x36c(%rsp)
jmp 0xd3a9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x370(%rsp)
movl %eax, 0x36c(%rsp)
leaq 0x2a8(%rsp), %rdi
callq 0x3bb80
jmp 0xd3a9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x370(%rsp)
movl %eax, 0x36c(%rsp)
leaq 0x290(%rsp), %rdi
callq 0x3bb80
leaq 0x2c0(%rsp), %rdi
callq 0x3bb80
leaq 0x2d8(%rsp), %rdi
callq 0x3bb80
jmp 0xdd3a
leaq 0x278(%rsp), %rdi
leaq 0x308(%rsp), %rsi
leaq 0x378(%rsp), %rdx
callq 0x3c680
jmp 0xd3e7
leaq 0x308(%rsp), %rdi
leaq 0x278(%rsp), %rsi
callq 0x1fa20
jmp 0xd3fe
leaq 0x278(%rsp), %rdi
callq 0x3bb80
movq 0xa8(%rsp), %rdi
addq $0x338, %rdi            # imm = 0x338
leaq 0x308(%rsp), %rsi
callq 0x1fa50
jmp 0xd429
movq 0xa8(%rsp), %rdi
addq $0x150, %rdi            # imm = 0x150
xorl %eax, %eax
movl %eax, %esi
movq %rsi, 0x68(%rsp)
callq 0x1fd40
movq 0x68(%rsp), %rsi
movq %rax, %rdi
callq 0x1f9e0
movq %rax, %rdi
callq 0x3bae0
movq %rdx, 0x70(%rsp)
movq %rax, 0x78(%rsp)
jmp 0xd467
movq 0x70(%rsp), %rax
movq 0x78(%rsp), %rcx
movq %rcx, 0x250(%rsp)
movq %rax, 0x258(%rsp)
movq 0x250(%rsp), %rsi
movq 0x258(%rsp), %rdx
leaq 0x260(%rsp), %rdi
xorps %xmm0, %xmm0
callq 0x3b680
jmp 0xd4a3
movq 0xa8(%rsp), %rdi
addq $0x150, %rdi            # imm = 0x150
xorl %eax, %eax
movl %eax, %esi
movq %rsi, 0x50(%rsp)
callq 0x1fd40
movq 0x50(%rsp), %rsi
movq %rax, %rdi
callq 0x1f9e0
movq %rax, %rdi
callq 0x3bae0
movq %rdx, 0x58(%rsp)
movq %rax, 0x60(%rsp)
jmp 0xd4e1
movq 0x58(%rsp), %rax
movq 0x60(%rsp), %rcx
movq %rcx, 0x228(%rsp)
movq %rax, 0x230(%rsp)
movq 0x228(%rsp), %rsi
movq 0x230(%rsp), %rdx
leaq 0x238(%rsp), %rdi
xorps %xmm0, %xmm0
callq 0x3b680
jmp 0xd51d
movq $0x0, 0x220(%rsp)
movq 0x220(%rsp), %rax
cmpq 0x3a0(%rsp), %rax
jae 0xd79a
movq 0xa8(%rsp), %rdi
addq $0x180, %rdi            # imm = 0x180
movq 0x220(%rsp), %rsi
callq 0x1fd40
movq %rax, %rdi
xorl %eax, %eax
movl %eax, %esi
movq %rsi, 0x40(%rsp)
callq 0x1f9e0
movq 0xa8(%rsp), %rdi
movq 0x40(%rsp), %rsi
movq %rax, 0x48(%rsp)
addq $0x308, %rdi            # imm = 0x308
callq 0x1f9e0
movq 0x48(%rsp), %rsi
movq %rax, %rdx
leaq 0x208(%rsp), %rdi
callq 0x3c680
jmp 0xd5a1
leaq 0x1f0(%rsp), %rdi
leaq 0x260(%rsp), %rsi
leaq 0x208(%rsp), %rdx
callq 0x3bf90
jmp 0xd5c0
leaq 0x260(%rsp), %rdi
leaq 0x1f0(%rsp), %rsi
callq 0x1fa20
jmp 0xd5d7
leaq 0x1f0(%rsp), %rdi
callq 0x3bb80
movq 0xa8(%rsp), %rdi
addq $0x150, %rdi            # imm = 0x150
movq 0x220(%rsp), %rsi
callq 0x1fd40
movq %rax, %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x1f9e0
movq %rax, %rdx
leaq 0x1d8(%rsp), %rdi
leaq 0x238(%rsp), %rsi
callq 0x3bf90
jmp 0xd626
leaq 0x238(%rsp), %rdi
leaq 0x1d8(%rsp), %rsi
callq 0x1fa20
jmp 0xd63d
leaq 0x1d8(%rsp), %rdi
callq 0x3bb80
movq 0x398(%rsp), %rdx
leaq 0x1c0(%rsp), %rdi
leaq 0x238(%rsp), %rsi
callq 0x3c480
jmp 0xd669
leaq 0x238(%rsp), %rdi
leaq 0x1c0(%rsp), %rsi
callq 0x1fa20
jmp 0xd680
leaq 0x1c0(%rsp), %rdi
callq 0x3bb80
leaq 0x208(%rsp), %rdi
callq 0x3bb80
movq 0x220(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x220(%rsp)
jmp 0xd529
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x370(%rsp)
movl %eax, 0x36c(%rsp)
leaq 0x278(%rsp), %rdi
callq 0x3bb80
jmp 0xdd3a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x370(%rsp)
movl %eax, 0x36c(%rsp)
jmp 0xdd2d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x370(%rsp)
movl %eax, 0x36c(%rsp)
jmp 0xdd20
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x370(%rsp)
movl %eax, 0x36c(%rsp)
jmp 0xd788
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x370(%rsp)
movl %eax, 0x36c(%rsp)
leaq 0x1f0(%rsp), %rdi
callq 0x3bb80
jmp 0xd788
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x370(%rsp)
movl %eax, 0x36c(%rsp)
leaq 0x1d8(%rsp), %rdi
callq 0x3bb80
jmp 0xd788
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x370(%rsp)
movl %eax, 0x36c(%rsp)
leaq 0x1c0(%rsp), %rdi
callq 0x3bb80
leaq 0x208(%rsp), %rdi
callq 0x3bb80
jmp 0xdd20
leaq 0x1a8(%rsp), %rdi
leaq 0x260(%rsp), %rsi
leaq 0x338(%rsp), %rdx
callq 0x3c680
jmp 0xd7b9
leaq 0x260(%rsp), %rdi
leaq 0x1a8(%rsp), %rsi
callq 0x1fa20
jmp 0xd7d0
leaq 0x1a8(%rsp), %rdi
callq 0x3bb80
movaps 0x4487c(%rip), %xmm0    # 0x52060
movq 0x3a0(%rsp), %xmm1
punpckldq %xmm0, %xmm1    # xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
movapd 0x44877(%rip), %xmm0    # 0x52070
subpd %xmm0, %xmm1
movaps %xmm1, %xmm0
unpckhpd %xmm1, %xmm1            # xmm1 = xmm1[1,1]
addsd %xmm0, %xmm1
movsd 0x44820(%rip), %xmm0    # 0x52030
divsd %xmm1, %xmm0
leaq 0x190(%rsp), %rdi
leaq 0x238(%rsp), %rsi
callq 0x3cfd0
jmp 0xd82b
leaq 0x238(%rsp), %rdi
leaq 0x190(%rsp), %rsi
callq 0x1fa20
jmp 0xd842
leaq 0x190(%rsp), %rdi
callq 0x3bb80
leaq 0x178(%rsp), %rdi
leaq 0x238(%rsp), %rsi
leaq 0x308(%rsp), %rdx
callq 0x3c680
jmp 0xd86e
leaq 0x238(%rsp), %rdi
leaq 0x178(%rsp), %rsi
callq 0x1fa20
jmp 0xd885
leaq 0x178(%rsp), %rdi
callq 0x3bb80
leaq 0x160(%rsp), %rdi
leaq 0x260(%rsp), %rsi
leaq 0x238(%rsp), %rdx
callq 0x3bf90
jmp 0xd8b1
movq 0xa8(%rsp), %rdi
addq $0x350, %rdi            # imm = 0x350
leaq 0x160(%rsp), %rsi
callq 0x1fa50
jmp 0xd8cf
movq 0xa8(%rsp), %rdi
addq $0x150, %rdi            # imm = 0x150
xorl %eax, %eax
movl %eax, %esi
movq %rsi, 0x28(%rsp)
callq 0x1fd40
movq 0x28(%rsp), %rsi
movq %rax, %rdi
callq 0x1f9e0
movq %rax, %rdi
callq 0x3bae0
movq %rdx, 0x30(%rsp)
movq %rax, 0x38(%rsp)
jmp 0xd90d
movq 0x30(%rsp), %rax
movq 0x38(%rsp), %rcx
movq %rcx, 0x138(%rsp)
movq %rax, 0x140(%rsp)
movq 0x138(%rsp), %rsi
movq 0x140(%rsp), %rdx
leaq 0x148(%rsp), %rdi
xorps %xmm0, %xmm0
callq 0x3b680
jmp 0xd949
movq 0xa8(%rsp), %rdi
addq $0x150, %rdi            # imm = 0x150
xorl %eax, %eax
movl %eax, %esi
movq %rsi, 0x10(%rsp)
callq 0x1fd40
movq 0x10(%rsp), %rsi
movq %rax, %rdi
callq 0x1f9e0
movq %rax, %rdi
callq 0x3bae0
movq %rdx, 0x18(%rsp)
movq %rax, 0x20(%rsp)
jmp 0xd987
movq 0x18(%rsp), %rax
movq 0x20(%rsp), %rcx
movq %rcx, 0x110(%rsp)
movq %rax, 0x118(%rsp)
movq 0x110(%rsp), %rsi
movq 0x118(%rsp), %rdx
leaq 0x120(%rsp), %rdi
xorps %xmm0, %xmm0
callq 0x3b680
jmp 0xd9c3
movq $0x0, 0x108(%rsp)
movq 0x108(%rsp), %rax
cmpq 0x3a0(%rsp), %rax
jae 0xdc4d
movq 0xa8(%rsp), %rdi
addq $0x180, %rdi            # imm = 0x180
movq 0x108(%rsp), %rsi
callq 0x1fd40
movq %rax, %rdi
xorl %eax, %eax
movl %eax, %esi
movq %rsi, (%rsp)
callq 0x1f9e0
movq 0xa8(%rsp), %rdi
movq %rax, 0x8(%rsp)
addq $0x218, %rdi            # imm = 0x218
movq 0x108(%rsp), %rsi
callq 0x1fd40
movq (%rsp), %rsi
movq %rax, %rdi
callq 0x1f9e0
movq 0x8(%rsp), %rsi
movq %rax, %rdx
leaq 0xf0(%rsp), %rdi
callq 0x3c680
jmp 0xda55
leaq 0xd8(%rsp), %rdi
leaq 0x148(%rsp), %rsi
leaq 0xf0(%rsp), %rdx
callq 0x3bf90
jmp 0xda74
leaq 0x148(%rsp), %rdi
leaq 0xd8(%rsp), %rsi
callq 0x1fa20
jmp 0xda8b
leaq 0xd8(%rsp), %rdi
callq 0x3bb80
movq 0xa8(%rsp), %rdi
addq $0x180, %rdi            # imm = 0x180
movq 0x108(%rsp), %rsi
callq 0x1fd40
movq %rax, %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x1f9e0
movq %rax, %rdx
leaq 0xc0(%rsp), %rdi
leaq 0x120(%rsp), %rsi
callq 0x3bf90
jmp 0xdada
leaq 0x120(%rsp), %rdi
leaq 0xc0(%rsp), %rsi
callq 0x1fa20
jmp 0xdaf1
leaq 0xc0(%rsp), %rdi
callq 0x3bb80
leaq 0xf0(%rsp), %rdi
callq 0x3bb80
movq 0x108(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x108(%rsp)
jmp 0xd9cf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x370(%rsp)
movl %eax, 0x36c(%rsp)
leaq 0x1a8(%rsp), %rdi
callq 0x3bb80
jmp 0xdd20
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x370(%rsp)
movl %eax, 0x36c(%rsp)
leaq 0x190(%rsp), %rdi
callq 0x3bb80
jmp 0xdd20
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x370(%rsp)
movl %eax, 0x36c(%rsp)
leaq 0x178(%rsp), %rdi
callq 0x3bb80
jmp 0xdd20
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x370(%rsp)
movl %eax, 0x36c(%rsp)
jmp 0xdd13
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x370(%rsp)
movl %eax, 0x36c(%rsp)
jmp 0xdd06
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x370(%rsp)
movl %eax, 0x36c(%rsp)
jmp 0xdcf9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x370(%rsp)
movl %eax, 0x36c(%rsp)
jmp 0xdc3b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x370(%rsp)
movl %eax, 0x36c(%rsp)
leaq 0xd8(%rsp), %rdi
callq 0x3bb80
jmp 0xdc3b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x370(%rsp)
movl %eax, 0x36c(%rsp)
leaq 0xc0(%rsp), %rdi
callq 0x3bb80
leaq 0xf0(%rsp), %rdi
callq 0x3bb80
jmp 0xdcf9
movq 0xa8(%rsp), %rdi
addq $0x368, %rdi            # imm = 0x368
leaq 0x148(%rsp), %rsi
callq 0x1fa50
jmp 0xdc6b
movq 0xa8(%rsp), %rdi
addq $0x380, %rdi            # imm = 0x380
leaq 0x120(%rsp), %rsi
callq 0x1fa50
jmp 0xdc89
leaq 0x120(%rsp), %rdi
callq 0x3bb80
leaq 0x148(%rsp), %rdi
callq 0x3bb80
leaq 0x160(%rsp), %rdi
callq 0x3bb80
leaq 0x238(%rsp), %rdi
callq 0x3bb80
leaq 0x260(%rsp), %rdi
callq 0x3bb80
leaq 0x308(%rsp), %rdi
callq 0x3bb80
leaq 0x338(%rsp), %rdi
callq 0x3bb80
leaq 0x378(%rsp), %rdi
callq 0x3bb80
addq $0x3b8, %rsp            # imm = 0x3B8
retq
leaq 0x120(%rsp), %rdi
callq 0x3bb80
leaq 0x148(%rsp), %rdi
callq 0x3bb80
leaq 0x160(%rsp), %rdi
callq 0x3bb80
leaq 0x238(%rsp), %rdi
callq 0x3bb80
leaq 0x260(%rsp), %rdi
callq 0x3bb80
leaq 0x308(%rsp), %rdi
callq 0x3bb80
leaq 0x338(%rsp), %rdi
callq 0x3bb80
leaq 0x378(%rsp), %rdi
callq 0x3bb80
movq 0x370(%rsp), %rdi
callq 0x43f0
nop