LyoKICogRnVuY3Rpb25zIHRvIGFjY2VzcyB0aGUgVFNDMjAwMCBjb250cm9sbGVyIG9uIFRSQUIgYm9hcmQgKHVzZWQgZm9yIHNjYW5uaW5nCiAqIHRoZXJtbyBzZW5zb3JzKQogKgogKiBDb3B5cmlnaHQgKEMpIDIwMDMgTWFydGluIEtyYXVzZSwgVFEtU3lzdGVtcyBHbWJILCBtYXJ0aW4ua3JhdXNlQHRxcy5kZQogKgogKiBDb3B5cmlnaHQgKEMpIDIwMDIgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgV29sZmdhbmcgRGVuaywgd2RAZGVueC5kZQogKgogKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwogKiBwcm9qZWN0LgogKgogKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCiAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCiAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAogKiBNQSAwMjExMS0xMzA3IFVTQQogKi8KCiNpbmNsdWRlIDxjb21tb24uaD4KI2luY2x1ZGUgPHMzYzI0MDAuaD4KI2luY2x1ZGUgInRzYzIwMDAuaCIKCiNpbmNsdWRlICJQdDEwMDBfdGVtcF9kYXRhLmgiCgovKiBoZWxwZXIgZnVuY3Rpb24gKi8KI2RlZmluZSBhYnModmFsdWUpICgoKHZhbHVlKSA8IDApID8gKCh2YWx1ZSkqLTEpIDogKHZhbHVlKSkKCi8qCiAqIE1heGltYWwgYWxsb3dlZCBkZXZpYXRpb24gYmV0d2VlbiB0d28gaW1tZWRpYXRlIG1lYXNzdXJtZW50cyBvZiBhbiBhbmFsb2cKICogdGhlcm1vIGNoYW5uZWwuIDEgRElHSVQgPSAwLjAyNzYgsEMuIFRoaXMgaXMgdXNlZCB0byBmaWx0ZXIgc3BvcmFkaWMKICogImp1bXBzIiBpbiBtZWFzdXJtZW50LgogKi8KI2RlZmluZSBNQVhfREVWSUFUSU9OCTE4CS8qIHVuaXQ6IERJR0lUcyBvZiBhZGM7IDE4IERJR0lUID0gMC41ILBDICovCgp2b2lkIHNwaV9pbml0KHZvaWQpCnsKCVMzQzI0WDBfR1BJTyAqIGNvbnN0IGdwaW8gPSBTM0MyNFgwX0dldEJhc2VfR1BJTygpOwoJUzNDMjRYMF9TUEkgKiBjb25zdCBzcGkgPSBTM0MyNFgwX0dldEJhc2VfU1BJKCk7CglpbnQgaTsKCgkvKiBDb25maWd1cmUgSS9PIHBvcnRzLiAqLwoJZ3Bpby0+UERDT04gPSAoZ3Bpby0+UERDT04gJiAweEYzRkZGRikgfCAweDA0MDAwMDsKCWdwaW8tPlBHQ09OID0gKGdwaW8tPlBHQ09OICYgMHgwRjNGRkYpIHwgMHgwMDgwMDA7CglncGlvLT5QR0NPTiA9IChncGlvLT5QR0NPTiAmIDB4MENGRkZGKSB8IDB4MDIwMDAwOwoJZ3Bpby0+UEdDT04gPSAoZ3Bpby0+UEdDT04gJiAweDAzRkZGRikgfCAweDA4MDAwMDsKCglDTFJfQ1NfVE9VQ0goKTsKCglzcGktPmNoWzBdLlNQUFJFID0gMHgxRjsgLyogQmF1ZC1yYXRlIGNhLiA1MTRrSHogKi8KCXNwaS0+Y2hbMF0uU1BQSU4gPSAweDAxOyAvKiBTUEktTU9TSSBob2xkcyBMZXZlbCBhZnRlciBsYXN0IGJpdCAqLwoJc3BpLT5jaFswXS5TUENPTiA9IDB4MUE7IC8qIFBvbGxpbmcsIFByZXNjYWxlciwgTWFzdGVyLCBDUE9MPTAsCgkJCQkgICAgQ1BIQT0xICovCgoJLyogRHVtbXkgYnl0ZSBlbnN1cmVzIGNsb2NrIHRvIGJlIGxvdy4gKi8KCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CgkJc3BpLT5jaFswXS5TUFREQVQgPSAweEZGOwoJfQoJc3BpX3dhaXRfdHJhbnNtaXRfZG9uZSgpOwp9CgoKdm9pZCBzcGlfd2FpdF90cmFuc21pdF9kb25lKHZvaWQpCnsKCVMzQzI0WDBfU1BJICogY29uc3Qgc3BpID0gUzNDMjRYMF9HZXRCYXNlX1NQSSgpOwoKCXdoaWxlICghKHNwaS0+Y2hbMF0uU1BTVEEgJiAweDAxKSk7IC8qIHdhaXQgdW50aWwgdHJhbnNmZXIgaXMgZG9uZSAqLwp9CgoKdm9pZCB0c2MyMDAwX3dyaXRlKHVuc2lnbmVkIHNob3J0IHJlZywgdW5zaWduZWQgc2hvcnQgZGF0YSkKewoJUzNDMjRYMF9TUEkgKiBjb25zdCBzcGkgPSBTM0MyNFgwX0dldEJhc2VfU1BJKCk7Cgl1bnNpZ25lZCBpbnQgY29tbWFuZDsKCglTRVRfQ1NfVE9VQ0goKTsKCWNvbW1hbmQgPSByZWc7CglzcGktPmNoWzBdLlNQVERBVCA9IChjb21tYW5kICYgMHhGRjAwKSA+PiA4OwoJc3BpX3dhaXRfdHJhbnNtaXRfZG9uZSgpOwoJc3BpLT5jaFswXS5TUFREQVQgPSAoY29tbWFuZCAmIDB4MDBGRik7CglzcGlfd2FpdF90cmFuc21pdF9kb25lKCk7CglzcGktPmNoWzBdLlNQVERBVCA9IChkYXRhICYgMHhGRjAwKSA+PiA4OwoJc3BpX3dhaXRfdHJhbnNtaXRfZG9uZSgpOwoJc3BpLT5jaFswXS5TUFREQVQgPSAoZGF0YSAmIDB4MDBGRik7CglzcGlfd2FpdF90cmFuc21pdF9kb25lKCk7CgoJQ0xSX0NTX1RPVUNIKCk7Cn0KCgp1bnNpZ25lZCBzaG9ydCB0c2MyMDAwX3JlYWQgKHVuc2lnbmVkIHNob3J0IHJlZykKewoJdW5zaWduZWQgc2hvcnQgY29tbWFuZCwgZGF0YTsKCVMzQzI0WDBfU1BJICogY29uc3Qgc3BpID0gUzNDMjRYMF9HZXRCYXNlX1NQSSgpOwoKCVNFVF9DU19UT1VDSCgpOwoJY29tbWFuZCA9IDB4ODAwMCB8IHJlZzsKCglzcGktPmNoWzBdLlNQVERBVCA9IChjb21tYW5kICYgMHhGRjAwKSA+PiA4OwoJc3BpX3dhaXRfdHJhbnNtaXRfZG9uZSgpOwoJc3BpLT5jaFswXS5TUFREQVQgPSAoY29tbWFuZCAmIDB4MDBGRik7CglzcGlfd2FpdF90cmFuc21pdF9kb25lKCk7CgoJc3BpLT5jaFswXS5TUFREQVQgPSAweEZGOwoJc3BpX3dhaXRfdHJhbnNtaXRfZG9uZSgpOwoJZGF0YSA9IHNwaS0+Y2hbMF0uU1BSREFUOwoJc3BpLT5jaFswXS5TUFREQVQgPSAweEZGOwoJc3BpX3dhaXRfdHJhbnNtaXRfZG9uZSgpOwoKCUNMUl9DU19UT1VDSCgpOwoJcmV0dXJuIChzcGktPmNoWzBdLlNQUkRBVCAmIDB4MEZGKSB8IChkYXRhIDw8IDgpOwp9CgoKdm9pZCB0c2MyMDAwX3NldF9tdXggKHVuc2lnbmVkIGludCBjaGFubmVsKQp7CglTM0MyNFgwX0dQSU8gKiBjb25zdCBncGlvID0gUzNDMjRYMF9HZXRCYXNlX0dQSU8oKTsKCglDTFJfTVVYMV9FTkFCTEU7IENMUl9NVVgyX0VOQUJMRTsKCUNMUl9NVVgzX0VOQUJMRTsgQ0xSX01VWDRfRU5BQkxFOwoJc3dpdGNoIChjaGFubmVsKSB7CgljYXNlIDA6CgkJQ0xSX01VWDA7IENMUl9NVVgxOwoJCVNFVF9NVVgxX0VOQUJMRTsKCQlicmVhazsKCWNhc2UgMToKCQlTRVRfTVVYMDsgQ0xSX01VWDE7CgkJU0VUX01VWDFfRU5BQkxFOwoJCWJyZWFrOwoJY2FzZSAyOgoJCUNMUl9NVVgwOyBTRVRfTVVYMTsKCQlTRVRfTVVYMV9FTkFCTEU7CgkJYnJlYWs7CgljYXNlIDM6CgkJU0VUX01VWDA7IFNFVF9NVVgxOwoJCVNFVF9NVVgxX0VOQUJMRTsKCQlicmVhazsKCWNhc2UgNDoKCQlDTFJfTVVYMDsgQ0xSX01VWDE7CgkJU0VUX01VWDJfRU5BQkxFOwoJCWJyZWFrOwoJY2FzZSA1OgoJCVNFVF9NVVgwOyBDTFJfTVVYMTsKCQlTRVRfTVVYMl9FTkFCTEU7CgkJYnJlYWs7CgljYXNlIDY6CgkJQ0xSX01VWDA7IFNFVF9NVVgxOwoJCVNFVF9NVVgyX0VOQUJMRTsKCQlicmVhazsKCWNhc2UgNzoKCQlTRVRfTVVYMDsgU0VUX01VWDE7CgkJU0VUX01VWDJfRU5BQkxFOwoJCWJyZWFrOwoJY2FzZSA4OgoJCUNMUl9NVVgwOyBDTFJfTVVYMTsKCQlTRVRfTVVYM19FTkFCTEU7CgkJYnJlYWs7CgljYXNlIDk6CgkJU0VUX01VWDA7IENMUl9NVVgxOwoJCVNFVF9NVVgzX0VOQUJMRTsKCQlicmVhazsKCWNhc2UgMTA6CgkJQ0xSX01VWDA7IFNFVF9NVVgxOwoJCVNFVF9NVVgzX0VOQUJMRTsKCQlicmVhazsKCWNhc2UgMTE6CgkJU0VUX01VWDA7IFNFVF9NVVgxOwoJCVNFVF9NVVgzX0VOQUJMRTsKCQlicmVhazsKCWNhc2UgMTI6CgkJQ0xSX01VWDA7IENMUl9NVVgxOwoJCVNFVF9NVVg0X0VOQUJMRTsKCQlicmVhazsKCWNhc2UgMTM6CgkJU0VUX01VWDA7IENMUl9NVVgxOwoJCVNFVF9NVVg0X0VOQUJMRTsKCQlicmVhazsKCWNhc2UgMTQ6CgkJQ0xSX01VWDA7IFNFVF9NVVgxOwoJCVNFVF9NVVg0X0VOQUJMRTsKCQlicmVhazsKCWNhc2UgMTU6CgkJU0VUX01VWDA7IFNFVF9NVVgxOwoJCVNFVF9NVVg0X0VOQUJMRTsKCQlicmVhazsKCWRlZmF1bHQ6CgkJQ0xSX01VWDA7IENMUl9NVVgxOwoJfQp9CgoKdm9pZCB0c2MyMDAwX3NldF9yYW5nZSAodW5zaWduZWQgaW50IHJhbmdlKQp7CglTM0MyNFgwX0dQSU8gKiBjb25zdCBncGlvID0gUzNDMjRYMF9HZXRCYXNlX0dQSU8oKTsKCglzd2l0Y2ggKHJhbmdlKSB7CgljYXNlIDE6CgkJQ0xSX1NFTF9URU1QX1ZfMDsgU0VUX1NFTF9URU1QX1ZfMTsKCQlDTFJfU0VMX1RFTVBfVl8yOyBDTFJfU0VMX1RFTVBfVl8zOwoJCWJyZWFrOwoJY2FzZSAyOgoJCUNMUl9TRUxfVEVNUF9WXzA7IENMUl9TRUxfVEVNUF9WXzE7CgkJQ0xSX1NFTF9URU1QX1ZfMjsgU0VUX1NFTF9URU1QX1ZfMzsKCQlicmVhazsKCWNhc2UgMzoKCQlTRVRfU0VMX1RFTVBfVl8wOyBDTFJfU0VMX1RFTVBfVl8xOwoJCVNFVF9TRUxfVEVNUF9WXzI7IENMUl9TRUxfVEVNUF9WXzM7CgkJYnJlYWs7Cgl9Cn0KCgp1MTYgdHNjMjAwMF9yZWFkX2NoYW5uZWwgKHVuc2lnbmVkIGludCBjaGFubmVsKQp7Cgl1MTYgcmVzOwoKCXRzYzIwMDBfc2V0X211eChjaGFubmVsKTsKCXVkZWxheSgzICogVFNDMjAwMF9ERUxBWV9CQVNFKTsKCgl0c2MyMDAwX3dyaXRlKFRTQzIwMDBfUkVHX0FEQywgMHgyMDM2KTsKCWFkY193YWl0X2NvbnZlcnNpb25fZG9uZSAoKTsKCXJlcyA9IHRzYzIwMDBfcmVhZChUU0MyMDAwX1JFR19BVVgxKTsKCXJldHVybiByZXM7Cn0KCgpzMzIgdHNjMjAwMF9jb250YWN0X3RlbXAgKHZvaWQpCnsKCWxvbmcgYWRjX3B0MTAwMCwgb2Zmc2V0OwoJbG9uZyB1X3B0MTAwMDsKCWxvbmcgY29udGFjdF90ZW1wOwoJbG9uZyB0ZW1wMSwgdGVtcDI7CgoJdHNjMjAwMF9yZWdfaW5pdCAoKTsKCXRzYzIwMDBfc2V0X3JhbmdlICgzKTsKCgkvKgoJICogQmVjYXVzZSBvZiBzcG9yYWRpYyAianVtcHMiIGluIHRoZSBtZWFzdXJlZCBhZGMgdmFsdWVzIGV2ZXJ5CgkgKiBjaGFubmVsIGlzIHJlYWQgdHdvIHRpbWVzLiBJZiB0aGVyZSBpcyBhIHNpZ25pZmljYW50IGRpZmZlcmVuY2UKCSAqIGJldHdlZW4gdGhlIHR3byBtZWFzdXJlbWVudHMsIHRoZW4gcHJpbnQgYW4gZXJyb3IgYW5kIGRvIGEgdGhpcmQKCSAqIG1lYXN1cmVtZW50LCBiZWNhdXNlIGl0IGlzIHZlcnkgdW5saWtlbHkgdGhhdCBhIHN1Y2Nlc3NpdmUgdGhpcmQKCSAqIG1lYXN1cmVtZW50IGdvZXMgYWxzbyB3cm9uZy4KCSAqLwoJdGVtcDEgPSB0c2MyMDAwX3JlYWRfY2hhbm5lbCAoMTQpOwoJdGVtcDIgPSB0c2MyMDAwX3JlYWRfY2hhbm5lbCAoMTQpOwoJaWYgKGFicyh0ZW1wMiAtIHRlbXAxKSA8IE1BWF9ERVZJQVRJT04pCgkJYWRjX3B0MTAwMCA9IHRlbXAyOwoJZWxzZSB7CgkJcHJpbnRmICgiJXM6IHJlYWQgYWRjIHZhbHVlIChjaGFubmVsIDE0KSBleGNlZWRlZCBtYXggYWxsb3dlZCAiCgkJCSJkZXZpYXRpb246ICVkICogMC4wMjc2ILBDXG4iLAoJCQlfX0ZVTkNUSU9OX18sIE1BWF9ERVZJQVRJT04pOwoJCXByaW50ZiAoImFkYyB2YWx1ZSAxOiAlbGQgRElHSVRzXG5hZGMgdmFsdWUgMjogJWxkIERJR0lUc1xuIiwKCQkJdGVtcDEsIHRlbXAyKTsKCQlhZGNfcHQxMDAwID0gdHNjMjAwMF9yZWFkX2NoYW5uZWwgKDE0KTsKCQlwcmludGYgKCJ1c2UgKHRoaXJkIHJlYWQpIGFkYyB2YWx1ZTogYWRjX3B0MTAwMCA9ICIKCQkJIiVsZCBESUdJVHNcbiIsCWFkY19wdDEwMDApOwoJfQoJZGVidWcgKCJyZWFkIGNoYW5uZWwgMTQgKHB0MTAwMCBhZGMgdmFsdWUpOiAlbGRcbiIsIGFkY19wdDEwMDApOwoKCXRlbXAxID0gdHNjMjAwMF9yZWFkX2NoYW5uZWwgKDE1KTsKCXRlbXAyID0gdHNjMjAwMF9yZWFkX2NoYW5uZWwgKDE1KTsKCWlmIChhYnModGVtcDIgLSB0ZW1wMSkgPCBNQVhfREVWSUFUSU9OKQoJCW9mZnNldCA9IHRlbXAyOwoJZWxzZSB7CgkJcHJpbnRmICgiJXM6IHJlYWQgYWRjIHZhbHVlIChjaGFubmVsIDE1KSBleGNlZWRlZCBtYXggYWxsb3dlZCAiCgkJCSJkZXZpYXRpb246ICVkICogMC4wMjc2ILBDXG4iLAoJCQlfX0ZVTkNUSU9OX18sIE1BWF9ERVZJQVRJT04pOwoJCXByaW50ZiAoImFkYyB2YWx1ZSAxOiAlbGQgRElHSVRzXG5hZGMgdmFsdWUgMjogJWxkIERJR0lUc1xuIiwKCQkJdGVtcDEsIHRlbXAyKTsKCQlvZmZzZXQgPSB0c2MyMDAwX3JlYWRfY2hhbm5lbCAoMTUpOwoJCXByaW50ZiAoInVzZSAodGhpcmQgcmVhZCkgYWRjIHZhbHVlOiBvZmZzZXQgPSAlbGQgRElHSVRzXG4iLAoJCQlvZmZzZXQpOwoJfQoJZGVidWcgKCJyZWFkIGNoYW5uZWwgMTUgKG9mZnNldCk6ICVsZFxuIiwgb2Zmc2V0KTsKCgkvKgoJICogRm9ybXVsYSBmb3IgY2FsY3VsYXRpbmcgdm9sdGFnZSBkcm9wIG9uIFBUMTAwMCByZXNpc3RvcjogdV9wdDEwMDAgPQoJICogeF9yYW5nZTMgKiAoYWRjX3JhdyAtIG9mZnNldCkgLyAxMC4gRm9ybXVsYSB0byBjYWxjdWxhdGUgeF9yYW5nZTM6CgkgKiB4X3JhbmdlMyA9ICgyNTAwICogKDEwMDAwMDAgKyBlcnJfdnJlZiArIGVycl9hbXAzKSkgLyAoNDA5NSo2KS4gVGhlCgkgKiBlcnJvciBjb3JyZWN0aW9uIFZhbHVlcyBlcnJfdnJlZiBhbmQgZXJyX2FtcDMgYXJlIGFzc3VtZWQgYXMgMCBpbgoJICogdS1ib290LCBiZWNhdXNlIHRoaXMgY291bGQgY2F1c2Ugb25seSBhIHZlcnkgc21hbGwgZXJyb3IgKDwgMSUpLgoJICovCgl1X3B0MTAwMCA9ICgxMDE3NTAgKiAoYWRjX3B0MTAwMCAtIG9mZnNldCkpIC8gMTA7CglkZWJ1ZyAoInVfcHQxMDAwOiAlbGRcbiIsIHVfcHQxMDAwKTsKCglpZiAodHNjMjAwMF9pbnRlcnBvbGF0ZSh1X3B0MTAwMCwgUHQxMDAwX3RlbXBfdGFibGUsCgkJCQkmY29udGFjdF90ZW1wKSA9PSAtMSkgewoJCXByaW50ZiAoIiVzOiBlcnJvciBpbnRlcnBvbGF0aW5nIFBUMTAwMCB2bGF1ZVxuIiwKCQkJIF9fRlVOQ1RJT05fXyk7CgkJcmV0dXJuICgtMTAwMCk7Cgl9CglkZWJ1ZyAoImNvbnRhY3RfdGVtcDogJWxkXG4iLCBjb250YWN0X3RlbXApOwoKCXJldHVybiBjb250YWN0X3RlbXA7Cn0KCgp2b2lkIHRzYzIwMDBfcmVnX2luaXQgKHZvaWQpCnsKCVMzQzI0WDBfR1BJTyAqIGNvbnN0IGdwaW8gPSBTM0MyNFgwX0dldEJhc2VfR1BJTygpOwoKCXRzYzIwMDBfd3JpdGUoVFNDMjAwMF9SRUdfQURDLCAweDIwMzYpOwoJdHNjMjAwMF93cml0ZShUU0MyMDAwX1JFR19SRUYsIDB4MDAxMSk7Cgl0c2MyMDAwX3dyaXRlKFRTQzIwMDBfUkVHX0RBQ0NUTCwgMHgwMDAwKTsKCglDT05fTVVYMDsKCUNPTl9NVVgxOwoKCUNPTl9NVVgxX0VOQUJMRTsKCUNPTl9NVVgyX0VOQUJMRTsKCUNPTl9NVVgzX0VOQUJMRTsKCUNPTl9NVVg0X0VOQUJMRTsKCglDT05fU0VMX1RFTVBfVl8wOwoJQ09OX1NFTF9URU1QX1ZfMTsKCUNPTl9TRUxfVEVNUF9WXzI7CglDT05fU0VMX1RFTVBfVl8zOwoKCXRzYzIwMDBfc2V0X211eCgwKTsKCXRzYzIwMDBfc2V0X3JhbmdlKDApOwp9CgoKaW50IHRzYzIwMDBfaW50ZXJwb2xhdGUobG9uZyB2YWx1ZSwgbG9uZyBkYXRhW11bMl0sIGxvbmcgKnJlc3VsdCkKewoJaW50IGk7CgoJLyogdGhlIGRhdGEgaXMgc29ydGVkIGFuZCB0aGUgZmlyc3QgZWxlbWVudCBpcyB1cHBlcgoJICogbGltaXQgc28gd2UgY2FuIGVhc2lseSBjaGVjayBmb3Igb3V0LW9mLWJhbmQgdmFsdWVzCgkgKi8KCWlmIChkYXRhWzBdWzBdIDwgdmFsdWUgfHwgZGF0YVsxXVswXSA+IHZhbHVlKQoJCXJldHVybiAtMTsKCglpID0gMTsKCXdoaWxlIChkYXRhW2ldWzBdIDwgdmFsdWUpCgkJaSsrOwoKCS8qIFRvIHByZXZlbnQgb3ZlcmZsb3cgd2UgaGF2ZSB0byBzdG9yZSB0aGUgaW50ZXJtZWRpYXRlCgkgICByZXN1bHQgaW4gJ2xvbmcgbG9uZycuCgkqLwoKCSpyZXN1bHQgPSBkYXRhW2ktMV1bMV0gKwoJCSgodW5zaWduZWQgbG9uZyBsb25nKShkYXRhW2ldWzFdIC0gZGF0YVtpLTFdWzFdKQoJCSAqICh1bnNpZ25lZCBsb25nIGxvbmcpKHZhbHVlIC0gZGF0YVtpLTFdWzBdKSkKCQkvIChkYXRhW2ldWzBdIC0gZGF0YVtpLTFdWzBdKTsKCglyZXR1cm4gMDsKfQoKCnZvaWQgYWRjX3dhaXRfY29udmVyc2lvbl9kb25lKHZvaWQpCnsKCXdoaWxlICghKHRzYzIwMDBfcmVhZChUU0MyMDAwX1JFR19BREMpICYgKDEgPDwgMTQpKSk7Cn0K