#include <vector>
#include <list>
#include <map>
#include <set>
#include <stack>
#include <queue>
#include <bitset>
#include <algorithm>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <string>
#include <cstring>
#include <complex>

#define FOR(i,b,n) for(int i=b;i<n;i++)
#define RFOR(i,b,n) for(int i=n-1;i>=b;i--)
#define CLR(mat) memset(mat, 0, sizeof(mat))
#define NCLR(mat) memset(mat, -1, sizeof(mat))
#define EPS 1e-15

using namespace std;

typedef complex<double> point;
typedef pair<int, int> paii;
typedef long long ll;

double dot(point va, point vb){
	return real(va) * real(vb) + imag(va) * imag(vb);
}

bool is_orthogonal(point a, point b, point c, point d)
{
	return abs(dot(b-a, d-c)) < EPS;
}

int main()
{
	point pt[4];
	
	while( cin >> pt[0].real() >> pt[0].imag() >> pt[1].real() >> pt[1].imag() >>
			pt[2].real() >> pt[2].imag() >> pt[3].real() >> pt[3].imag(), !cin.eof())
	{
		cout << (is_orthogonal(pt[0], pt[1], pt[2], pt[3]) ? "YES" : "NO") << endl;
	}
	
	return 0;
}