LyoKICogUkVHLkVYRSAtIFdpbmUtY29tcGF0aWJsZSByZWcgcHJvZ3JhbS4KICogUG9saXNoIGxhbmd1YWdlIHN1cHBvcnQKICoKICogQ29weXJpZ2h0IDIwMDggQW5kcmV3IFJpZWRpCiAqIENvcHlyaWdodCAyMDA4IE1pa29sYWogWmFsZXdza2kKICogQ29weXJpZ2h0IDIwMTAgo3VrYXN6IFdvam5ps293aWN6CiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCiNpbmNsdWRlICJyZWcuaCIKCkxBTkdVQUdFIExBTkdfUE9MSVNILCBTVUJMQU5HX0RFRkFVTFQKClNUUklOR1RBQkxFCnsKICAgIFNUUklOR19VU0FHRSwgIlNrs2FkbmlhIHRlZ28gcG9sZWNlbmlhOlxuXG5SRUcgWyBBREQgfCBERUxFVEUgfCBRVUVSWSBdXG5SRUcgcG9sZWNlbmllIC8/XG4iCiAgICBTVFJJTkdfQUREX1VTQUdFLCAiUkVHIEFERCBuYXp3YV9rbHVjemEgWy92IG5hendhX3dhcnRvnGNpIHwgL3ZlXSBbL3QgdHlwXSBbL3Mgc2VwYXJhdG9yXSBbL2QgZGFuZV0gWy9mXVxuIgogICAgU1RSSU5HX0RFTEVURV9VU0FHRSwgIlJFRyBERUxFVEUgbmF6d2Ffa2x1Y3phIFsvdiBuYXp3YV93YXJ0b5xjaSB8IC92ZSB8IC92YV0gWy9mXVxuIgogICAgU1RSSU5HX1FVRVJZX1VTQUdFLCAiUkVHIFFVRVJZIG5hendhX2tsdWN6YSBbL3YgbmF6d2Ffd2FydG+cY2kgfCAvdmVdIFsvc11cbiIKICAgIFNUUklOR19TVUNDRVNTLCAiT3BlcmFjamEgemFrb/Fjem9uYSBwb215nGxuaWVcbiIKICAgIFNUUklOR19JTlZBTElEX0tFWSwgIkKzuWQ6IE5pZXezYZxjaXdhIG5hendhIGtsdWN6YVxuIgogICAgU1RSSU5HX0lOVkFMSURfQ01ETElORSwgIkKzuWQ6IE5pZXezYZxjaXdlIHBhcmFtZXRyeSB3aWVyc3phIHBvbGVjZfFcbiIKICAgIFNUUklOR19OT19SRU1PVEUsICJCs7lkOiBOaWUgbW+/bmEgZG9kYeYga2x1Y3p5IGRvIHpkYWxuZWogbWFzenlueVxuIgogICAgU1RSSU5HX0NBTk5PVF9GSU5ELCAiQrO5ZDogU3lzdGVtIG5pZSBt82ezIHpuYWxln+YgcG9kYW5laiB3YXJ0b5xjaSBsdWIga2x1Y3phIHJlamVzdHJ1XG4iCn0K