LyogQm9vc3QgaW50ZXJ2YWwvZGV0YWlsL2M5OXN1Yl9yb3VuZGluZ19jb250cm9sLmhwcCBmaWxlCiAqCiAqIENvcHlyaWdodCAyMDAwIEplbnMgTWF1cmVyCiAqIENvcHlyaWdodCAyMDAyIEhlcnbpIEJy9m5uaW1hbm4sIEd1aWxsYXVtZSBNZWxxdWlvbmQsIFN5bHZhaW4gUGlvbgogKgogKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCiAqIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yCiAqIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQogKi8KCiNpZm5kZWYgQk9PU1RfTlVNRVJJQ19JTlRFUlZBTF9ERVRBSUxfQzk5U1VCX1JPVU5ESU5HX0NPTlRST0xfSFBQCiNkZWZpbmUgQk9PU1RfTlVNRVJJQ19JTlRFUlZBTF9ERVRBSUxfQzk5U1VCX1JPVU5ESU5HX0NPTlRST0xfSFBQCgojaW5jbHVkZSA8ZmVudi5oPiAgICAgIC8vIElTTyBDIDk5IHJvdW5kaW5nIG1vZGUgY29udHJvbAoKbmFtZXNwYWNlIGJvb3N0IHsKbmFtZXNwYWNlIG51bWVyaWMgewpuYW1lc3BhY2UgaW50ZXJ2YWxfbGliIHsKbmFtZXNwYWNlIGRldGFpbCB7CgpleHRlcm4gIkMiIHsgZG91YmxlIHJpbnQoZG91YmxlKTsgfQoKc3RydWN0IGM5OV9yb3VuZGluZwp7CiAgdHlwZWRlZiBpbnQgcm91bmRpbmdfbW9kZTsKCiAgc3RhdGljIHZvaWQgc2V0X3JvdW5kaW5nX21vZGUoY29uc3Qgcm91bmRpbmdfbW9kZSBtb2RlKSB7IGZlc2V0cm91bmQobW9kZSk7IH0KICBzdGF0aWMgdm9pZCBnZXRfcm91bmRpbmdfbW9kZShyb3VuZGluZ19tb2RlICZtb2RlKSB7IG1vZGUgPSBmZWdldHJvdW5kKCk7IH0KICBzdGF0aWMgdm9pZCBkb3dud2FyZCgpICAgIHsgc2V0X3JvdW5kaW5nX21vZGUoRkVfRE9XTldBUkQpOyAgIH0KICBzdGF0aWMgdm9pZCB1cHdhcmQoKSAgICAgIHsgc2V0X3JvdW5kaW5nX21vZGUoRkVfVVBXQVJEKTsgICAgIH0KICBzdGF0aWMgdm9pZCB0b19uZWFyZXN0KCkgIHsgc2V0X3JvdW5kaW5nX21vZGUoRkVfVE9ORUFSRVNUKTsgIH0KICBzdGF0aWMgdm9pZCB0b3dhcmRfemVybygpIHsgc2V0X3JvdW5kaW5nX21vZGUoRkVfVE9XQVJEWkVSTyk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgVD4KICBzdGF0aWMgVCB0b19pbnQoY29uc3QgVCYgcikgeyByZXR1cm4gcmludChyKTsgfQp9OwoKfSAvLyBuYW1lc3BhY2UgZGV0YWlsCn0gLy8gbmFtZXNwYWNlIGludGVydmFsX2xpYgp9IC8vIG5hbWVzcGFjZSBudW1lcmljCn0gLy8gbmFtZXNwYWNlIGJvb3N0CgojZW5kaWYgLy8gQk9PU1RfTlVNRVJJQ19JTlRFUlZBTF9ERVRBSUxfQzk5U1VCX1JPVUJESU5HX0NPTlRST0xfSFBQCg==