LyoKICogRmxhc2ggbWVtb3J5IGFjY2VzcyBvbiA0RyBTeXN0ZW1zIE1UWC0xIGJvYXJkcwogKgogKiAkSWQ6IG10eC0xX2ZsYXNoLmMsdiAxLjEgMjAwNS8wOS8xOCAxMDo0Njo0MSBqb2VybiBFeHAgJAogKgogKiAoQykgMjAwNSBCcnVubyBSYW5kb2xmIDxicnVuby5yYW5kb2xmQDRnLXN5c3RlbXMuYml6PgogKiAoQykgMjAwNSBK9nJuIEVuZ2VsIDxqb2VybkB3b2huaGVpbS5maC13ZWRlbC5kZT4KICoKICovCgojaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KCiNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+CiNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgoKI2luY2x1ZGUgPGFzbS9pby5oPgoKc3RhdGljIHN0cnVjdCBtYXBfaW5mbyBtdHgxX21hcCA9IHsKCS5uYW1lID0gIk1UWC0xIGZsYXNoIiwKCS5iYW5rd2lkdGggPSA0LAoJLnNpemUgPSAweDIwMDAwMDAsCgkucGh5cyA9IDB4MUUwMDAwMDAsCn07CgpzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gbXR4MV9wYXJ0aXRpb25zW10gPSB7CiAgICAgICAgewogICAgICAgICAgICAgICAgLm5hbWUgPSAiZmlsZXN5c3RlbSIsCiAgICAgICAgICAgICAgICAuc2l6ZSA9IDB4MDFDMDAwMDAsCiAgICAgICAgICAgICAgICAub2Zmc2V0ID0gMCwKICAgICAgICB9LHsKICAgICAgICAgICAgICAgIC5uYW1lID0gInlhbW9uIiwKICAgICAgICAgICAgICAgIC5zaXplID0gMHgwMDEwMDAwMCwKICAgICAgICAgICAgICAgIC5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQsCiAgICAgICAgICAgICAgICAubWFza19mbGFncyA9IE1URF9XUklURUFCTEUsCiAgICAgICAgfSx7CiAgICAgICAgICAgICAgICAubmFtZSA9ICJrZXJuZWwiLAogICAgICAgICAgICAgICAgLnNpemUgPSAweDAwMmMwMDAwLAogICAgICAgICAgICAgICAgLm9mZnNldCA9IE1URFBBUlRfT0ZTX0FQUEVORCwKICAgICAgICB9LHsKICAgICAgICAgICAgICAgIC5uYW1lID0gInlhbW9uIGVudiIsCiAgICAgICAgICAgICAgICAuc2l6ZSA9IDB4MDAwNDAwMDAsCiAgICAgICAgICAgICAgICAub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5ELAogICAgICAgIH0KfTsKCnN0YXRpYyBzdHJ1Y3QgbXRkX2luZm8gKm10eDFfbXRkOwoKaW50IF9faW5pdCBtdHgxX210ZF9pbml0KHZvaWQpCnsKCWludCByZXQgPSAtRU5YSU87CgoJc2ltcGxlX21hcF9pbml0KCZtdHgxX21hcCk7CgoJbXR4MV9tYXAudmlydCA9IGlvcmVtYXAobXR4MV9tYXAucGh5cywgbXR4MV9tYXAuc2l6ZSk7CglpZiAoIW10eDFfbWFwLnZpcnQpCgkJcmV0dXJuIC1FSU87CgoJbXR4MV9tdGQgPSBkb19tYXBfcHJvYmUoImNmaV9wcm9iZSIsICZtdHgxX21hcCk7CglpZiAoIW10eDFfbXRkKQoJCWdvdG8gZXJyOwoKCW10eDFfbXRkLT5vd25lciA9IFRISVNfTU9EVUxFOwoKCXJldCA9IGFkZF9tdGRfcGFydGl0aW9ucyhtdHgxX210ZCwgbXR4MV9wYXJ0aXRpb25zLCAKCQkJQVJSQVlfU0laRShtdHgxX3BhcnRpdGlvbnMpKTsKCWlmIChyZXQpCgkJZ290byBlcnI7CgoJcmV0dXJuIDA7CgplcnI6CiAgICAgICBpb3VubWFwKG10eDFfbWFwLnZpcnQpOwogICAgICAgcmV0dXJuIHJldDsKfQoKc3RhdGljIHZvaWQgX19leGl0IG10eDFfbXRkX2NsZWFudXAodm9pZCkKewoJaWYgKG10eDFfbXRkKSB7CgkJZGVsX210ZF9wYXJ0aXRpb25zKG10eDFfbXRkKTsKCQltYXBfZGVzdHJveShtdHgxX210ZCk7Cgl9CglpZiAobXR4MV9tYXAudmlydCkKCQlpb3VubWFwKG10eDFfbWFwLnZpcnQpOwp9Cgptb2R1bGVfaW5pdChtdHgxX210ZF9pbml0KTsKbW9kdWxlX2V4aXQobXR4MV9tdGRfY2xlYW51cCk7CgpNT0RVTEVfQVVUSE9SKCJCcnVubyBSYW5kb2xmIDxicnVuby5yYW5kb2xmQDRnLXN5c3RlbXMuYml6PiIpOwpNT0RVTEVfREVTQ1JJUFRJT04oIk1UWC0xIGZsYXNoIG1hcCIpOwpNT0RVTEVfTElDRU5TRSgiR1BMIik7Cg==