text: float pred_x;
  float pred_y;
  float pred_dx;
  float pred_dy;
  float sqr_err = FLT_MAX;
  for(int k=0;k<5&&sqr_err > 1e-4f;k++)
  {
    const float begin_x = x + dist * dx;
    const float begin_y = y + dist * dy;
    const float begin_dx = dx;
    const float begin_dy = dy;
    __attribute__((unused)) const float begin_lambda = lambda;
    pred_x =  + 33.436 *begin_dx + 0.620268 *begin_x + -0.0997683 *begin_x*begin_lambda + -1.02423 *begin_dx*begin_lambda + 0.0779104 *begin_x*begin_y*begin_dy + 0.11032 *lens_ipow(begin_x, 2)*begin_dx + 22.3258 *lens_ipow(begin_dx, 3) + 0.066893 *begin_x*lens_ipow(begin_lambda, 2) + 28.7753 *begin_dx*lens_ipow(begin_dy, 2) + 0.00114721 *begin_x*lens_ipow(begin_y, 2) + 0.00104281 *lens_ipow(begin_x, 3) + 1.05782 *begin_x*lens_ipow(begin_dy, 2) + 3.30806 *begin_x*lens_ipow(begin_dx, 2) + 0.622831 *begin_dx*lens_ipow(begin_lambda, 3) + 0.252479 *lens_ipow(begin_y, 2)*begin_dx*begin_lambda + 15.3869 *begin_y*begin_dx*begin_dy*begin_lambda + 0.000265991 *lens_ipow(begin_x, 4)*begin_dx + 17.5869 *begin_x*lens_ipow(begin_dx, 4) + 0.849033 *lens_ipow(begin_x, 2)*lens_ipow(begin_dx, 3) + -28.4185 *begin_y*begin_dx*begin_dy*lens_ipow(begin_lambda, 2) + 147.745 *lens_ipow(begin_dx, 5) + 1.40136e-06 *lens_ipow(begin_x, 5) + -0.469428 *lens_ipow(begin_y, 2)*begin_dx*lens_ipow(begin_lambda, 2) + 0.020917 *lens_ipow(begin_x, 3)*lens_ipow(begin_dx, 2) + 17.1989 *begin_y*begin_dx*begin_dy*lens_ipow(begin_lambda, 3) + 0.285723 *lens_ipow(begin_y, 2)*begin_dx*lens_ipow(begin_lambda, 3) + 4.60929e-13 *lens_ipow(begin_x, 7)*lens_ipow(begin_y, 4) + -3.19292e-09 *lens_ipow(begin_x, 6)*lens_ipow(begin_y, 3)*begin_dx*begin_dy;
    pred_y =  + 0.620382 *begin_y + 33.2697 *begin_dy + -0.0988428 *begin_y*begin_lambda + 1.03903 *begin_y*lens_ipow(begin_dx, 2) + 0.108851 *lens_ipow(begin_y, 2)*begin_dy + 3.26034 *begin_y*lens_ipow(begin_dy, 2) + 2.71107 *begin_x*begin_dx*begin_dy + 0.0773918 *begin_x*begin_y*begin_dx + 28.2928 *lens_ipow(begin_dx, 2)*begin_dy + 0.0661776 *begin_y*lens_ipow(begin_lambda, 2) + 0.00113968 *lens_ipow(begin_x, 2)*begin_y + -1.94549 *begin_dy*lens_ipow(begin_lambda, 2) + 0.00102739 *lens_ipow(begin_y, 3) + 0.0442643 *lens_ipow(begin_x, 2)*begin_dy + 21.7286 *lens_ipow(begin_dy, 3) + 1.83525 *begin_dy*lens_ipow(begin_lambda, 3) + 0.000304092 *lens_ipow(begin_y, 4)*begin_dy + 156.877 *lens_ipow(begin_dy, 5) + 0.920891 *lens_ipow(begin_y, 2)*lens_ipow(begin_dy, 3) + 18.733 *begin_y*lens_ipow(begin_dy, 4) + 1.5905e-06 *lens_ipow(begin_y, 5) + 0.0233247 *lens_ipow(begin_y, 3)*lens_ipow(begin_dy, 2) + 9.47641e-06 *lens_ipow(begin_y, 5)*lens_ipow(begin_dx, 2) + 0.000414172 *lens_ipow(begin_y, 4)*lens_ipow(begin_dx, 2)*begin_dy + 7.77217e-09 *begin_x*lens_ipow(begin_y, 7)*begin_dx*begin_lambda + 3.2448e-13 *lens_ipow(begin_x, 2)*lens_ipow(begin_y, 9) + 2.5744e-13 *lens_ipow(begin_x, 8)*lens_ipow(begin_y, 3) + 6.2086e-07 *begin_x*lens_ipow(begin_y, 6)*begin_dx*begin_dy*lens_ipow(begin_lambda, 2);
    pred_dx =  + -0.028575 *begin_x + -0.00932014 *begin_x*begin_lambda + -0.0549223 *begin_y*begin_dx*begin_dy + 0.00203034 *lens_ipow(begin_x, 2)*begin_dx + -3.2338 *lens_ipow(begin_dx, 3) + 0.00683675 *begin_x*lens_ipow(begin_lambda, 2) + 3.22939e-05 *begin_x*lens_ipow(begin_y, 2) + 3.53345e-05 *lens_ipow(begin_x, 3) + -0.0206119 *begin_x*lens_ipow(begin_dy, 2) + -0.0612014 *begin_x*lens_ipow(begin_dx, 2) + 0.000172077 *lens_ipow(begin_y, 2)*begin_dx + -0.51415 *begin_dx*lens_ipow(begin_lambda, 2) + -0.0284093 *begin_x*lens_ipow(begin_dx, 2)*begin_lambda + 0.50677 *begin_dx*lens_ipow(begin_lambda, 3) + -7.7071e-06 *begin_x*lens_ipow(begin_y, 2)*begin_lambda + -1.47665e-05 *lens_ipow(begin_x, 3)*begin_lambda + 0.00842516 *begin_x*begin_y*begin_dy*begin_lambda + -0.00120913 *lens_ipow(begin_x, 2)*begin_dx*begin_lambda + -17.3322 *begin_dx*lens_ipow(begin_dy, 2)*begin_lambda + 25.3256 *begin_dx*lens_ipow(begin_dy, 2)*lens_ipow(begin_lambda, 2) + -0.0171832 *begin_x*begin_y*begin_dy*lens_ipow(begin_lambda, 2) + 0.0109504 *begin_x*begin_y*begin_dy*lens_ipow(begin_lambda, 3) + -14.6692 *begin_dx*lens_ipow(begin_dy, 2)*lens_ipow(begin_lambda, 4) + 1.3924e-14 *lens_ipow(begin_x, 11) + 8.00155e-12 *lens_ipow(begin_x, 7)*lens_ipow(begin_y, 3)*begin_dy + 2.8413e-13 *lens_ipow(begin_x, 7)*lens_ipow(begin_y, 4) + 1.22356e-12 *lens_ipow(begin_x, 10)*begin_dx + 1.62527e-11 *lens_ipow(begin_x, 6)*lens_ipow(begin_y, 4)*begin_dx;
    pred_dy =  + -0.028835 *begin_y + 0.0581261 *begin_dy + -0.382108 *begin_dy*begin_lambda + -0.00834163 *begin_y*begin_lambda + -0.0206117 *begin_y*lens_ipow(begin_dx, 2) + 0.00200626 *lens_ipow(begin_y, 2)*begin_dy + -0.0624634 *begin_y*lens_ipow(begin_dy, 2) + -0.0548905 *begin_x*begin_dx*begin_dy + 0.00124677 *begin_x*begin_y*begin_dx + -3.2151 *lens_ipow(begin_dx, 2)*begin_dy + 0.00594847 *begin_y*lens_ipow(begin_lambda, 2) + 2.77024e-05 *lens_ipow(begin_x, 2)*begin_y + 0.266371 *begin_dy*lens_ipow(begin_lambda, 2) + 3.50767e-05 *lens_ipow(begin_y, 3) + 0.000195321 *lens_ipow(begin_x, 2)*begin_dy + -3.20615 *lens_ipow(begin_dy, 3) + -0.0275655 *begin_y*lens_ipow(begin_dy, 2)*begin_lambda + -0.0012689 *lens_ipow(begin_y, 2)*begin_dy*begin_lambda + -1.4775e-05 *lens_ipow(begin_y, 3)*begin_lambda + -0.00384855 *lens_ipow(begin_x, 2)*lens_ipow(begin_dy, 3)*lens_ipow(begin_lambda, 2) + 4.9258e-10 *lens_ipow(begin_y, 8)*begin_dy + 3.13678e-12 *lens_ipow(begin_y, 9) + 1.88125e-09 *lens_ipow(begin_x, 4)*lens_ipow(begin_y, 4)*begin_dy*begin_lambda + 1.45253e-10 *lens_ipow(begin_y, 9)*lens_ipow(begin_dy, 2) + 1.06796e-13 *lens_ipow(begin_x, 8)*lens_ipow(begin_y, 3) + 6.69022e-12 *lens_ipow(begin_x, 3)*lens_ipow(begin_y, 7)*begin_dx + 6.62722e-12 *lens_ipow(begin_x, 7)*lens_ipow(begin_y, 3)*begin_dx + 2.23917e-13 *lens_ipow(begin_x, 4)*lens_ipow(begin_y, 7);
    float dx1_domega0[2][2];
    dx1_domega0[0][0] =  + 33.436  + -1.02423 *begin_lambda + 0.11032 *lens_ipow(begin_x, 2) + 66.9774 *lens_ipow(begin_dx, 2) + 28.7753 *lens_ipow(begin_dy, 2) + 6.61613 *begin_x*begin_dx + 0.622831 *lens_ipow(begin_lambda, 3) + 0.252479 *lens_ipow(begin_y, 2)*begin_lambda + 15.3869 *begin_y*begin_dy*begin_lambda + 0.000265991 *lens_ipow(begin_x, 4) + 70.3475 *begin_x*lens_ipow(begin_dx, 3) + 2.5471 *lens_ipow(begin_x, 2)*lens_ipow(begin_dx, 2) + -28.4185 *begin_y*begin_dy*lens_ipow(begin_lambda, 2) + 738.725 *lens_ipow(begin_dx, 4) + -0.469428 *lens_ipow(begin_y, 2)*lens_ipow(begin_lambda, 2) + 0.041834 *lens_ipow(begin_x, 3)*begin_dx + 17.1989 *begin_y*begin_dy*lens_ipow(begin_lambda, 3) + 0.285723 *lens_ipow(begin_y, 2)*lens_ipow(begin_lambda, 3) + -3.19292e-09 *lens_ipow(begin_x, 6)*lens_ipow(begin_y, 3)*begin_dy+0.0f;
    dx1_domega0[0][1] =  + 0.0779104 *begin_x*begin_y + 57.5505 *begin_dx*begin_dy + 2.11564 *begin_x*begin_dy + 15.3869 *begin_y*begin_dx*begin_lambda + -28.4185 *begin_y*begin_dx*lens_ipow(begin_lambda, 2) + 17.1989 *begin_y*begin_dx*lens_ipow(begin_lambda, 3) + -3.19292e-09 *lens_ipow(begin_x, 6)*lens_ipow(begin_y, 3)*begin_dx+0.0f;
    dx1_domega0[1][0] =  + 2.07807 *begin_y*begin_dx + 2.71107 *begin_x*begin_dy + 0.0773918 *begin_x*begin_y + 56.5856 *begin_dx*begin_dy + 1.89528e-05 *lens_ipow(begin_y, 5)*begin_dx + 0.000828343 *lens_ipow(begin_y, 4)*begin_dx*begin_dy + 7.77217e-09 *begin_x*lens_ipow(begin_y, 7)*begin_lambda + 6.2086e-07 *begin_x*lens_ipow(begin_y, 6)*begin_dy*lens_ipow(begin_lambda, 2)+0.0f;
    dx1_domega0[1][1] =  + 33.2697  + 0.108851 *lens_ipow(begin_y, 2) + 6.52068 *begin_y*begin_dy + 2.71107 *begin_x*begin_dx + 28.2928 *lens_ipow(begin_dx, 2) + -1.94549 *lens_ipow(begin_lambda, 2) + 0.0442643 *lens_ipow(begin_x, 2) + 65.1857 *lens_ipow(begin_dy, 2) + 1.83525 *lens_ipow(begin_lambda, 3) + 0.000304092 *lens_ipow(begin_y, 4) + 784.387 *lens_ipow(begin_dy, 4) + 2.76267 *lens_ipow(begin_y, 2)*lens_ipow(begin_dy, 2) + 74.9321 *begin_y*lens_ipow(begin_dy, 3) + 0.0466494 *lens_ipow(begin_y, 3)*begin_dy + 0.000414172 *lens_ipow(begin_y, 4)*lens_ipow(begin_dx, 2) + 6.2086e-07 *begin_x*lens_ipow(begin_y, 6)*begin_dx*lens_ipow(begin_lambda, 2)+0.0f;
    float invJ[2][2];
    const float invdet = 1.0f/(dx1_domega0[0][0]*dx1_domega0[1][1] - dx1_domega0[0][1]*dx1_domega0[1][0]);
    invJ[0][0] =  dx1_domega0[1][1]*invdet;
    invJ[1][1] =  dx1_domega0[0][0]*invdet;
    invJ[0][1] = -dx1_domega0[0][1]*invdet;
    invJ[1][0] = -dx1_domega0[1][0]*invdet;
    const float dx1[2] = {out_x - pred_x, out_y - pred_y};
    for(int i=0;i<2;i++)
    {
      dx += invJ[0][i]*dx1[i];
      dy += invJ[1][i]*dx1[i];
    }
    sqr_err = dx1[0]*dx1[0] + dx1[1]*dx1[1];
  }
  out_dx = pred_dx;
  out_dy = pred_dy;
  