LyoKICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jCiAqCiAqIE9NQVAyIEkvTyBtYXBwaW5nIGNvZGUKICoKICogQ29weXJpZ2h0IChDKSAyMDA1IE5va2lhIENvcnBvcmF0aW9uCiAqIEF1dGhvcjogSnVoYSBZcmr2bOQgPGp1aGEueXJqb2xhQG5va2lhLmNvbT4KICogVXBkYXRlZCBtYXAgZGVzYyB0byBhZGQgMjQzMCBzdXBwb3J0IDogPHgwa2hhc2ltQHRpLmNvbT4KICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAqLwoKI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgojaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CgojaW5jbHVkZSA8YXNtL3RsYi5oPgojaW5jbHVkZSA8YXNtL2lvLmg+CgojaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CgojaW5jbHVkZSA8bWFjaC9tdXguaD4KI2luY2x1ZGUgPG1hY2gvb21hcGZiLmg+CgpleHRlcm4gdm9pZCBvbWFwX3NyYW1faW5pdCh2b2lkKTsKZXh0ZXJuIGludCBvbWFwMl9jbGtfaW5pdCh2b2lkKTsKZXh0ZXJuIHZvaWQgb21hcDJfY2hlY2tfcmV2aXNpb24odm9pZCk7CmV4dGVybiB2b2lkIG9tYXAyX2luaXRfbWVtb3J5KHZvaWQpOwpleHRlcm4gdm9pZCBncG1jX2luaXQodm9pZCk7CmV4dGVybiB2b2lkIG9tYXBmYl9yZXNlcnZlX3NkcmFtKHZvaWQpOwoKLyoKICogVGhlIG1hY2hpbmUgc3BlY2lmaWMgY29kZSBtYXkgcHJvdmlkZSB0aGUgZXh0cmEgbWFwcGluZyBiZXNpZGVzIHRoZQogKiBkZWZhdWx0IG1hcHBpbmcgcHJvdmlkZWQgaGVyZS4KICovCnN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2Mgb21hcDJfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7Cgl7CgkJLnZpcnR1YWwJPSBMM18yNFhYX1ZJUlQsCgkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEwzXzI0WFhfUEhZUyksCgkJLmxlbmd0aAkJPSBMM18yNFhYX1NJWkUsCgkJLnR5cGUJCT0gTVRfREVWSUNFCgl9LAoJewoJCS52aXJ0dWFsICAgICAgICA9IEw0XzI0WFhfVklSVCwKCQkucGZuICAgICAgICAgICAgPSBfX3BoeXNfdG9fcGZuKEw0XzI0WFhfUEhZUyksCgkJLmxlbmd0aCAgICAgICAgID0gTDRfMjRYWF9TSVpFLAoJCS50eXBlICAgICAgICAgICA9IE1UX0RFVklDRQoJfSwKI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNDMwCgl7CgkJLnZpcnR1YWwJPSBMNF9XS18yNDNYX1ZJUlQsCgkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEw0X1dLXzI0M1hfUEhZUyksCgkJLmxlbmd0aAkJPSBMNF9XS18yNDNYX1NJWkUsCgkJLnR5cGUJCT0gTVRfREVWSUNFCgl9LAoJewoJCS52aXJ0dWFsCT0gT01BUDI0M1hfR1BNQ19WSVJULAoJCS5wZm4JCT0gX19waHlzX3RvX3BmbihPTUFQMjQzWF9HUE1DX1BIWVMpLAoJCS5sZW5ndGgJCT0gT01BUDI0M1hfR1BNQ19TSVpFLAoJCS50eXBlCQk9IE1UX0RFVklDRQoJfSwKI2VuZGlmCgl7CgkJLnZpcnR1YWwJPSBEU1BfTUVNXzI0WFhfVklSVCwKCQkucGZuCQk9IF9fcGh5c190b19wZm4oRFNQX01FTV8yNFhYX1BIWVMpLAoJCS5sZW5ndGgJCT0gRFNQX01FTV8yNFhYX1NJWkUsCgkJLnR5cGUJCT0gTVRfREVWSUNFCgl9LAoJewoJCS52aXJ0dWFsCT0gRFNQX0lQSV8yNFhYX1ZJUlQsCgkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKERTUF9JUElfMjRYWF9QSFlTKSwKCQkubGVuZ3RoCQk9IERTUF9JUElfMjRYWF9TSVpFLAoJCS50eXBlCQk9IE1UX0RFVklDRQoJfSwKCXsKCQkudmlydHVhbAk9IERTUF9NTVVfMjRYWF9WSVJULAoJCS5wZm4JCT0gX19waHlzX3RvX3BmbihEU1BfTU1VXzI0WFhfUEhZUyksCgkJLmxlbmd0aAkJPSBEU1BfTU1VXzI0WFhfU0laRSwKCQkudHlwZQkJPSBNVF9ERVZJQ0UKCX0KfTsKCnZvaWQgX19pbml0IG9tYXAyX21hcF9jb21tb25faW8odm9pZCkKewoJaW90YWJsZV9pbml0KG9tYXAyX2lvX2Rlc2MsIEFSUkFZX1NJWkUob21hcDJfaW9fZGVzYykpOwoKCS8qIE5vcm1hbGx5IGRldmljZW1hcHNfaW5pdCgpIHdvdWxkIGZsdXNoIGNhY2hlcyBhbmQgdGxiIGFmdGVyCgkgKiBtZGVzYy0+bWFwX2lvKCksIGJ1dCB3ZSBtdXN0IGFsc28gZG8gaXQgaGVyZSBiZWNhdXNlIG9mIHRoZSBDUFUKCSAqIHJldmlzaW9uIGNoZWNrIGJlbG93LgoJICovCglsb2NhbF9mbHVzaF90bGJfYWxsKCk7CglmbHVzaF9jYWNoZV9hbGwoKTsKCglvbWFwMl9jaGVja19yZXZpc2lvbigpOwoJb21hcF9zcmFtX2luaXQoKTsKCW9tYXBmYl9yZXNlcnZlX3NkcmFtKCk7Cn0KCnZvaWQgX19pbml0IG9tYXAyX2luaXRfY29tbW9uX2h3KHZvaWQpCnsKCW9tYXAyX211eF9pbml0KCk7CglvbWFwMl9jbGtfaW5pdCgpOwovKgogKiBOZWVkIHRvIEZpeCB0aGlzIGZvciAyNDMwCiAqLwojaWZuZGVmIENPTkZJR19BUkNIX09NQVAyNDMwCglvbWFwMl9pbml0X21lbW9yeSgpOwojZW5kaWYKCWdwbWNfaW5pdCgpOwp9Cg==