LyogbGludXgvYW5kcm9pZF9wb3dlci5oCioqIAoqKiBDb3B5cmlnaHQgMjAwNS0yMDA2LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CioqIEF1dGhvcjogQXJ2ZSBIavhubmV25WcKKioKKiogVGhpcyBmaWxlIGlzIGR1YWwgbGljZW5zZWQuICBJdCBtYXkgYmUgcmVkaXN0cmlidXRlZCBhbmQvb3IgbW9kaWZpZWQKKiogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBBcGFjaGUgMi4wIExpY2Vuc2UgT1IgdmVyc2lvbiAyIG9mIHRoZSBHTlUKKiogR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKi8KCiNpZm5kZWYgX0xJTlVYX0FORFJPSURfUE9XRVJfSAojZGVmaW5lIF9MSU5VWF9BTkRST0lEX1BPV0VSX0gKCiNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Cgp0eXBlZGVmIHN0cnVjdAp7CglzdHJ1Y3QgbGlzdF9oZWFkICAgIGxpbms7CglpbnQgICAgICAgICAgICAgICAgIGxvY2tfY291bnQ7CglpbnQgICAgICAgICAgICAgICAgIGZsYWdzOwoJY29uc3QgY2hhciAgICAgICAgICpuYW1lOwoJaW50ICAgICAgICAgICAgICAgICBleHBpcmVzOwp9IGFuZHJvaWRfc3VzcGVuZF9sb2NrX3Q7CgojZGVmaW5lIEFORFJPSURfU1VTUEVORF9MT0NLX0ZMQUdfQ09VTlRFRCAoMVUgPDwgMCkKI2RlZmluZSBBTkRST0lEX1NVU1BFTkRfTE9DS19GTEFHX1VTRVJfUkVBREFCTEUgKDFVIDw8IDEpCiNkZWZpbmUgQU5EUk9JRF9TVVNQRU5EX0xPQ0tfRkxBR19VU0VSX1NFVCAoMVUgPDwgMikKI2RlZmluZSBBTkRST0lEX1NVU1BFTkRfTE9DS19GTEFHX1VTRVJfQ0xFQVIgKDFVIDw8IDMpCiNkZWZpbmUgQU5EUk9JRF9TVVNQRU5EX0xPQ0tfRkxBR19VU0VSX0lOQyAoMVUgPDwgNCkKI2RlZmluZSBBTkRST0lEX1NVU1BFTkRfTE9DS19GTEFHX1VTRVJfREVDICgxVSA8PCA1KQojZGVmaW5lIEFORFJPSURfU1VTUEVORF9MT0NLX0ZMQUdfVVNFUl9WSVNJQkxFX01BU0sgKDB4MWZVIDw8IDEpCiNkZWZpbmUgQU5EUk9JRF9TVVNQRU5EX0xPQ0tfQVVUT19FWFBJUkUgKDFVIDw8IDYpCgoKdHlwZWRlZiBzdHJ1Y3QgYW5kcm9pZF9lYXJseV9zdXNwZW5kIGFuZHJvaWRfZWFybHlfc3VzcGVuZF90OwpzdHJ1Y3QgYW5kcm9pZF9lYXJseV9zdXNwZW5kCnsKCXN0cnVjdCBsaXN0X2hlYWQgbGluazsKCWludCBsZXZlbDsKCXZvaWQgKCpzdXNwZW5kKShhbmRyb2lkX2Vhcmx5X3N1c3BlbmRfdCAqaCk7Cgl2b2lkICgqcmVzdW1lKShhbmRyb2lkX2Vhcmx5X3N1c3BlbmRfdCAqaCk7Cn07Cgp0eXBlZGVmIGVudW0gewoJQU5EUk9JRF9DSEFSR0lOR19TVEFURV9VTktOT1dOLAoJQU5EUk9JRF9DSEFSR0lOR19TVEFURV9ESVNDSEFSR0UsCglBTkRST0lEX0NIQVJHSU5HX1NUQVRFX01BSU5UQUlOLCAvLyBvciB0cmlja2xlCglBTkRST0lEX0NIQVJHSU5HX1NUQVRFX1NMT1csCglBTkRST0lEX0NIQVJHSU5HX1NUQVRFX05PUk1BTCwKCUFORFJPSURfQ0hBUkdJTkdfU1RBVEVfRkFTVCwKCUFORFJPSURfQ0hBUkdJTkdfU1RBVEVfT1ZFUkhFQVQKfSBhbmRyb2lkX2NoYXJnaW5nX3N0YXRlX3Q7CgovL2FuZHJvaWRfc3VzcGVuZF9sb2NrX3QgKmFuZHJvaWRfYWxsb2NhdGVfc3VzcGVuZF9sb2NrKGNvbnN0IGNoYXIgKmRlYnVnX25hbWUpOwovL3ZvaWQgYW5kcm9pZF9mcmVlX3N1c3BlbmRfbG9jayhhbmRyb2lkX3N1c3BlbmRfbG9ja190ICpsb2NrKTsKaW50IGFuZHJvaWRfaW5pdF9zdXNwZW5kX2xvY2soYW5kcm9pZF9zdXNwZW5kX2xvY2tfdCAqbG9jayk7CnZvaWQgYW5kcm9pZF91bmluaXRfc3VzcGVuZF9sb2NrKGFuZHJvaWRfc3VzcGVuZF9sb2NrX3QgKmxvY2spOwp2b2lkIGFuZHJvaWRfbG9ja19zdXNwZW5kKGFuZHJvaWRfc3VzcGVuZF9sb2NrX3QgKmxvY2spOwp2b2lkIGFuZHJvaWRfbG9ja19zdXNwZW5kX2F1dG9fZXhwaXJlKGFuZHJvaWRfc3VzcGVuZF9sb2NrX3QgKmxvY2ssIGludCB0aW1lb3V0KTsKdm9pZCBhbmRyb2lkX3VubG9ja19zdXNwZW5kKGFuZHJvaWRfc3VzcGVuZF9sb2NrX3QgKmxvY2spOwp2b2lkIGFuZHJvaWRfcG93ZXJfd2FrZXVwKGludCBub3RpZmljYXRpb24pOyAvKiBub3RpZmljYXRpb24gPSAwOiBub3JtYWwgd2FrZXVwLCBub3RpZmljYXRpb24gPSAxOiB0ZW1wb3Jhcnkgd2FrZXVwICovCgppbnQgYW5kcm9pZF9wb3dlcl9pc19kcml2ZXJfc3VzcGVuZGVkKHZvaWQpOwoKdm9pZCBhbmRyb2lkX3JlZ2lzdGVyX2Vhcmx5X3N1c3BlbmQoYW5kcm9pZF9lYXJseV9zdXNwZW5kX3QgKmhhbmRsZXIpOwp2b2lkIGFuZHJvaWRfdW5yZWdpc3Rlcl9lYXJseV9zdXNwZW5kKGFuZHJvaWRfZWFybHlfc3VzcGVuZF90ICpoYW5kbGVyKTsKCnZvaWQgYW5kcm9pZF9wb3dlcl9zZXRfYmF0dGVyeV9sZXZlbChpbnQgbGV2ZWwpOyAvLyBsZXZlbCAwLTEwMAp2b2lkIGFuZHJvaWRfcG93ZXJfc2V0X2NoYXJnaW5nX3N0YXRlKGFuZHJvaWRfY2hhcmdpbmdfc3RhdGVfdCBzdGF0ZSk7CgojZW5kaWYKCg==