ZGlmZiAtLWdpdCBhL2puaS9saWJwanNpcC9zb3VyY2VzL3BqbWVkaWEvaW5jbHVkZS9wam1lZGlhLWNvZGVjL2Ftcl9oZWxwZXIuaCBiL2puaS9saWJwanNpcC9zb3VyY2VzL3BqbWVkaWEvaW5jbHVkZS9wam1lZGlhLWNvZGVjL2Ftcl9oZWxwZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzFmNmU3Ci0tLSAvZGV2L251bGwKKysrIGIvam5pL2xpYnBqc2lwL3NvdXJjZXMvcGptZWRpYS9pbmNsdWRlL3BqbWVkaWEtY29kZWMvYW1yX2hlbHBlci5oCkBAIC0wLDAgKzEsMTIyOCBAQAorLyogJElkOiBhbXJfaGVscGVyLmggMzg0MSAyMDExLTEwLTI0IDA5OjI4OjEzWiBtaW5nICQgKi8KKy8qIAorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTEgVGVsdXUgSW5jLiAoaHR0cDovL3d3dy50ZWx1dS5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOCBCZW5ueSBQcmlqb25vIDxiZW5ueUBwcmlqb25vLm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBIAorICovCisKKyNpZm5kZWYgX19QSk1FRElBX0NPREVDU19BTVJfSEVMUEVSX0hfXworI2RlZmluZSBfX1BKTUVESUFfQ09ERUNTX0FNUl9IRUxQRVJfSF9fCisKKy8qKgorICogQGZpbGUgcGptZWRpYS1jb2RlYy9hbXJfaGVscGVyLmgKKyAqIEBicmllZiBDb21tb24gdGFibGVzIGFuZCBoZWxwZXIgZnVuY3Rpb25zIGZvciBBTVIgY29kZWMgKE5CICYgV0IpLgorICovCisKKworI2lmZGVmIF9NU0NfVkVSCisjICAgcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0MjE0KSAgICAvLyBiaXQgZmllbGQgdHlwZXMgb3RoZXIgdGhhbiBpbnQKKyNlbmRpZgorCisvKioKKyAqIEBkZWZncm91cCBQSk1FRF9BTVJfQ09ERUNfSEVMUEVSIEFNUiBDb2RlYyBIZWxwZXIKKyAqIEBpbmdyb3VwIFBKTUVESUFfQ09ERUNfQ09ERUNTCisgKiBAYnJpZWYgQU1SIGNvbW1vbiB0YWJsZXMgYW5kIGhlbHBlciBmdW5jdGlvbnMuCisgKiBAeworICoKKyAqIFRoaXMgc2VjdGlvbnMgZGVzY3JpYmVzIGNvbW1vbiBBTVIgY29uc3RhbnRzIHRhYmxlcyAoZS5nOiBiaXRzIHNlbnNpdGl2aXR5IAorICogb3JkZXIgbWFwLCBmcmFtZSBsZW5ndGhzLCBiaXRyYXRlcykgYW5kIGhlbHBlciBmdW5jdGlvbnMgKGUuZzogcGFjayBBTVIKKyAqIHBheWxvYWQgaW4gb2N0ZXQtYWxpZ25lZCBtb2RlIG9yIGJhbmR3aWR0aC1lZmZpY2llbnQgbW9kZSwgcGF5bG9hZCBwYXJzZXIsCisgKiByZW9yZGVyIEFNUiBiaXRzdHJlYW0pLgorICovCisKK1BKX0JFR0lOX0RFQ0wKKworCisvKiBBTVIgYml0cyBzZW5zaXRpdml0eSBvcmRlciBtYXBzICovCisKK2NvbnN0IHBqX2ludDE2X3QgcGptZWRpYV9jb2RlY19hbXJuYl9vcmRlcm1hcDEyMlsyNDRdID0KK3sKKyAgICAgIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgOSwKKyAgICAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDIzLCAgMTUsICAxNiwgIDE3LCAgMTgsCisgICAgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDM4LAorICAgIDE0MSwgIDM5LCAxNDIsICA0MCwgMTQzLCAgNDEsIDE0NCwgIDQyLCAxNDUsICA0MywKKyAgICAxNDYsICA0NCwgMTQ3LCAgNDUsIDE0OCwgIDQ2LCAxNDksICA0NywgIDk3LCAxNTAsCisgICAgMjAwLCAgNDgsICA5OCwgMTUxLCAyMDEsICA0OSwgIDk5LCAxNTIsIDIwMiwgIDg2LAorICAgIDEzNiwgMTg5LCAyMzksICA4NywgMTM3LCAxOTAsIDI0MCwgIDg4LCAxMzgsIDE5MSwKKyAgICAyNDEsICA5MSwgMTk0LCAgOTIsIDE5NSwgIDkzLCAxOTYsICA5NCwgMTk3LCAgOTUsCisgICAgMTk4LCAgMjksICAzMCwgIDMxLCAgMzIsICAzMywgIDM0LCAgMzUsICA1MCwgMTAwLAorICAgIDE1MywgMjAzLCAgODksIDEzOSwgMTkyLCAyNDIsICA1MSwgMTAxLCAxNTQsIDIwNCwKKyAgICAgNTUsIDEwNSwgMTU4LCAyMDgsICA5MCwgMTQwLCAxOTMsIDI0MywgIDU5LCAxMDksCisgICAgMTYyLCAyMTIsICA2MywgMTEzLCAxNjYsIDIxNiwgIDY3LCAxMTcsIDE3MCwgMjIwLAorICAgICAzNiwgIDM3LCAgNTQsICA1MywgIDUyLCAgNTgsICA1NywgIDU2LCAgNjIsICA2MSwKKyAgICAgNjAsICA2NiwgIDY1LCAgNjQsICA3MCwgIDY5LCAgNjgsIDEwNCwgMTAzLCAxMDIsCisgICAgMTA4LCAxMDcsIDEwNiwgMTEyLCAxMTEsIDExMCwgMTE2LCAxMTUsIDExNCwgMTIwLAorICAgIDExOSwgMTE4LCAxNTcsIDE1NiwgMTU1LCAxNjEsIDE2MCwgMTU5LCAxNjUsIDE2NCwKKyAgICAxNjMsIDE2OSwgMTY4LCAxNjcsIDE3MywgMTcyLCAxNzEsIDIwNywgMjA2LCAyMDUsCisgICAgMjExLCAyMTAsIDIwOSwgMjE1LCAyMTQsIDIxMywgMjE5LCAyMTgsIDIxNywgMjIzLAorICAgIDIyMiwgMjIxLCAgNzMsICA3MiwgIDcxLCAgNzYsICA3NSwgIDc0LCAgNzksICA3OCwKKyAgICAgNzcsICA4MiwgIDgxLCAgODAsICA4NSwgIDg0LCAgODMsIDEyMywgMTIyLCAxMjEsCisgICAgMTI2LCAxMjUsIDEyNCwgMTI5LCAxMjgsIDEyNywgMTMyLCAxMzEsIDEzMCwgMTM1LAorICAgIDEzNCwgMTMzLCAxNzYsIDE3NSwgMTc0LCAxNzksIDE3OCwgMTc3LCAxODIsIDE4MSwKKyAgICAxODAsIDE4NSwgMTg0LCAxODMsIDE4OCwgMTg3LCAxODYsIDIyNiwgMjI1LCAyMjQsCisgICAgMjI5LCAyMjgsIDIyNywgMjMyLCAyMzEsIDIzMCwgMjM1LCAyMzQsIDIzMywgMjM4LAorICAgIDIzNywgMjM2LCAgOTYsIDE5OQorfTsKKworY29uc3QgcGpfaW50MTZfdCBwam1lZGlhX2NvZGVjX2Ftcm5iX29yZGVybWFwMTAyWzIwNF0gPQoreworICAgICAgNywgICA2LCAgIDUsICAgNCwgICAzLCAgIDIsICAgMSwgICAwLCAgMTYsICAxNSwKKyAgICAgMTQsICAxMywgIDEyLCAgMTEsICAxMCwgICA5LCAgIDgsICAyNiwgIDI3LCAgMjgsCisgICAgIDI5LCAgMzAsICAzMSwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwgIDcyLAorICAgICA3MywgMTYxLCAxNjIsICA2NSwgIDY4LCAgNjksIDEwOCwgMTExLCAxMTIsIDE1NCwKKyAgICAxNTcsIDE1OCwgMTk3LCAyMDAsIDIwMSwgIDMyLCAgMzMsIDEyMSwgMTIyLCAgNzQsCisgICAgIDc1LCAxNjMsIDE2NCwgIDY2LCAxMDksIDE1NSwgMTk4LCAgMTksICAyMywgIDIxLAorICAgICAyMiwgIDE4LCAgMTcsICAyMCwgIDI0LCAgMjUsICAzNywgIDM2LCAgMzUsICAzNCwKKyAgICAgODAsICA3OSwgIDc4LCAgNzcsIDEyNiwgMTI1LCAxMjQsIDEyMywgMTY5LCAxNjgsCisgICAgMTY3LCAxNjYsICA3MCwgIDY3LCAgNzEsIDExMywgMTEwLCAxMTQsIDE1OSwgMTU2LAorICAgIDE2MCwgMjAyLCAxOTksIDIwMywgIDc2LCAxNjUsICA4MSwgIDgyLCAgOTIsICA5MSwKKyAgICAgOTMsICA4MywgIDk1LCAgODUsICA4NCwgIDk0LCAxMDEsIDEwMiwgIDk2LCAxMDQsCisgICAgIDg2LCAxMDMsICA4NywgIDk3LCAxMjcsIDEyOCwgMTM4LCAxMzcsIDEzOSwgMTI5LAorICAgIDE0MSwgMTMxLCAxMzAsIDE0MCwgMTQ3LCAxNDgsIDE0MiwgMTUwLCAxMzIsIDE0OSwKKyAgICAxMzMsIDE0MywgMTcwLCAxNzEsIDE4MSwgMTgwLCAxODIsIDE3MiwgMTg0LCAxNzQsCisgICAgMTczLCAxODMsIDE5MCwgMTkxLCAxODUsIDE5MywgMTc1LCAxOTIsIDE3NiwgMTg2LAorICAgICAzOCwgIDM5LCAgNDksICA0OCwgIDUwLCAgNDAsICA1MiwgIDQyLCAgNDEsICA1MSwKKyAgICAgNTgsICA1OSwgIDUzLCAgNjEsICA0MywgIDYwLCAgNDQsICA1NCwgMTk0LCAxNzksCisgICAgMTg5LCAxOTYsIDE3NywgMTk1LCAxNzgsIDE4NywgMTg4LCAxNTEsIDEzNiwgMTQ2LAorICAgIDE1MywgMTM0LCAxNTIsIDEzNSwgMTQ0LCAxNDUsIDEwNSwgIDkwLCAxMDAsIDEwNywKKyAgICAgODgsIDEwNiwgIDg5LCAgOTgsICA5OSwgIDYyLCAgNDcsICA1NywgIDY0LCAgNDUsCisgICAgIDYzLCAgNDYsICA1NSwgIDU2Cit9OworCitjb25zdCBwal9pbnQxNl90IHBqbWVkaWFfY29kZWNfYW1ybmJfb3JkZXJtYXA3OTVbMTU5XSA9Cit7CisgICAgICA4LCAgIDcsICAgNiwgICA1LCAgIDQsICAgMywgICAyLCAgMTQsICAxNiwgICA5LAorICAgICAxMCwgIDEyLCAgMTMsICAxNSwgIDExLCAgMTcsICAyMCwgIDIyLCAgMjQsICAyMywKKyAgICAgMTksICAxOCwgIDIxLCAgNTYsICA4OCwgMTIyLCAxNTQsICA1NywgIDg5LCAxMjMsCisgICAgMTU1LCAgNTgsICA5MCwgMTI0LCAxNTYsICA1MiwgIDg0LCAxMTgsIDE1MCwgIDUzLAorICAgICA4NSwgMTE5LCAxNTEsICAyNywgIDkzLCAgMjgsICA5NCwgIDI5LCAgOTUsICAzMCwKKyAgICAgOTYsICAzMSwgIDk3LCAgNjEsIDEyNywgIDYyLCAxMjgsICA2MywgMTI5LCAgNTksCisgICAgIDkxLCAxMjUsIDE1NywgIDMyLCAgOTgsICA2NCwgMTMwLCAgIDEsICAgMCwgIDI1LAorICAgICAyNiwgIDMzLCAgOTksICAzNCwgMTAwLCAgNjUsIDEzMSwgIDY2LCAxMzIsICA1NCwKKyAgICAgODYsIDEyMCwgMTUyLCAgNjAsICA5MiwgMTI2LCAxNTgsICA1NSwgIDg3LCAxMjEsCisgICAgMTUzLCAxMTcsIDExNiwgMTE1LCAgNDYsICA3OCwgMTEyLCAxNDQsICA0MywgIDc1LAorICAgIDEwOSwgMTQxLCAgNDAsICA3MiwgMTA2LCAxMzgsICAzNiwgIDY4LCAxMDIsIDEzNCwKKyAgICAxMTQsIDE0OSwgMTQ4LCAxNDcsIDE0NiwgIDgzLCAgODIsICA4MSwgIDgwLCAgNTEsCisgICAgIDUwLCAgNDksICA0OCwgIDQ3LCAgNDUsICA0NCwgIDQyLCAgMzksICAzNSwgIDc5LAorICAgIDc3LCAgIDc2LCAgNzQsICA3MSwgIDY3LCAxMTMsIDExMSwgMTEwLCAxMDgsIDEwNSwKKyAgICAxMDEsIDE0NSwgMTQzLCAxNDIsIDE0MCwgMTM3LCAxMzMsICA0MSwgIDczLCAxMDcsCisgICAgMTM5LCAgMzcsICA2OSwgMTAzLCAxMzUsICAzOCwgIDcwLCAxMDQsIDEzNgorfTsKKworY29uc3QgcGpfaW50MTZfdCBwam1lZGlhX2NvZGVjX2Ftcm5iX29yZGVybWFwNzRbMTQ4XSA9Cit7CisgICAgICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAgIDcsICAgOCwgICA5LAorICAgICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsICAxNiwgIDI2LCAgODcsICAyNywKKyAgICAgODgsICAyOCwgIDg5LCAgMjksICA5MCwgIDMwLCAgOTEsICA1MSwgIDgwLCAxMTIsCisgICAgMTQxLCAgNTIsICA4MSwgMTEzLCAxNDIsICA1NCwgIDgzLCAxMTUsIDE0NCwgIDU1LAorICAgICA4NCwgMTE2LCAxNDUsICA1OCwgMTE5LCAgNTksIDEyMCwgIDIxLCAgMjIsICAyMywKKyAgICAgMTcsICAxOCwgIDE5LCAgMzEsICA2MCwgIDkyLCAxMjEsICA1NiwgIDg1LCAxMTcsCisgICAgMTQ2LCAgMjAsICAyNCwgIDI1LCAgNTAsICA3OSwgMTExLCAxNDAsICA1NywgIDg2LAorICAgIDExOCwgMTQ3LCAgNDksICA3OCwgMTEwLCAxMzksICA0OCwgIDc3LCAgNTMsICA4MiwKKyAgICAxMTQsIDE0MywgMTA5LCAxMzgsICA0NywgIDc2LCAxMDgsIDEzNywgIDMyLCAgMzMsCisgICAgIDYxLCAgNjIsICA5MywgIDk0LCAxMjIsIDEyMywgIDQxLCAgNDIsICA0MywgIDQ0LAorICAgICA0NSwgIDQ2LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAxMDIsIDEwMywKKyAgICAxMDQsIDEwNSwgMTA2LCAxMDcsIDEzMSwgMTMyLCAxMzMsIDEzNCwgMTM1LCAxMzYsCisgICAgIDM0LCAgNjMsICA5NSwgMTI0LCAgMzUsICA2NCwgIDk2LCAxMjUsICAzNiwgIDY1LAorICAgICA5NywgMTI2LCAgMzcsICA2NiwgIDk4LCAxMjcsICAzOCwgIDY3LCAgOTksIDEyOCwKKyAgICAgMzksICA2OCwgMTAwLCAxMjksICA0MCwgIDY5LCAxMDEsIDEzMAorfTsKKworY29uc3QgcGpfaW50MTZfdCBwam1lZGlhX2NvZGVjX2Ftcm5iX29yZGVybWFwNjdbMTM0XSA9Cit7CisgICAgICAwLCAgIDEsICAgNCwgICAzLCAgIDUsICAgNiwgIDEzLCAgIDcsICAgMiwgICA4LAorICAgICAgOSwgIDExLCAgMTUsICAxMiwgIDE0LCAgMTAsICAyOCwgIDgyLCAgMjksICA4MywKKyAgICAgMjcsICA4MSwgIDI2LCAgODAsICAzMCwgIDg0LCAgMTYsICA1NSwgMTA5LCAgNTYsCisgICAgMTEwLCAgMzEsICA4NSwgIDU3LCAxMTEsICA0OCwgIDczLCAxMDIsIDEyNywgIDMyLAorICAgICA4NiwgIDUxLCAgNzYsIDEwNSwgMTMwLCAgNTIsICA3NywgMTA2LCAxMzEsICA1OCwKKyAgICAxMTIsICAzMywgIDg3LCAgMTksICAyMywgIDUzLCAgNzgsIDEwNywgMTMyLCAgMjEsCisgICAgIDIyLCAgMTgsICAxNywgIDIwLCAgMjQsICAyNSwgIDUwLCAgNzUsIDEwNCwgMTI5LAorICAgICA0NywgIDcyLCAxMDEsIDEyNiwgIDU0LCAgNzksIDEwOCwgMTMzLCAgNDYsICA3MSwKKyAgICAxMDAsIDEyNSwgMTI4LCAxMDMsICA3NCwgIDQ5LCAgNDUsICA3MCwgIDk5LCAxMjQsCisgICAgIDQyLCAgNjcsICA5NiwgMTIxLCAgMzksICA2NCwgIDkzLCAxMTgsICAzOCwgIDYzLAorICAgICA5MiwgMTE3LCAgMzUsICA2MCwgIDg5LCAxMTQsICAzNCwgIDU5LCAgODgsIDExMywKKyAgICAgNDQsICA2OSwgIDk4LCAxMjMsICA0MywgIDY4LCAgOTcsIDEyMiwgIDQxLCAgNjYsCisgICAgIDk1LCAxMjAsICA0MCwgIDY1LCAgOTQsIDExOSwgIDM3LCAgNjIsICA5MSwgMTE2LAorICAgICAzNiwgIDYxLCAgOTAsIDExNQorfTsKKworY29uc3QgcGpfaW50MTZfdCBwam1lZGlhX2NvZGVjX2Ftcm5iX29yZGVybWFwNTlbMTE4XSA9Cit7CisgICAgICAwLCAgIDEsICAgNCwgICA1LCAgIDMsICAgNiwgICA3LCAgIDIsICAxMywgIDE1LAorICAgICAgOCwgICA5LCAgMTEsICAxMiwgIDE0LCAgMTAsICAxNiwgIDI4LCAgNzQsICAyOSwKKyAgICAgNzUsICAyNywgIDczLCAgMjYsICA3MiwgIDMwLCAgNzYsICA1MSwgIDk3LCAgNTAsCisgICAgIDcxLCAgOTYsIDExNywgIDMxLCAgNzcsICA1MiwgIDk4LCAgNDksICA3MCwgIDk1LAorICAgIDExNiwgIDUzLCAgOTksICAzMiwgIDc4LCAgMzMsICA3OSwgIDQ4LCAgNjksICA5NCwKKyAgICAxMTUsICA0NywgIDY4LCAgOTMsIDExNCwgIDQ2LCAgNjcsICA5MiwgMTEzLCAgMTksCisgICAgIDIxLCAgMjMsICAyMiwgIDE4LCAgMTcsICAyMCwgIDI0LCAxMTEsICA0MywgIDg5LAorICAgIDExMCwgIDY0LCAgNjUsICA0NCwgIDkwLCAgMjUsICA0NSwgIDY2LCAgOTEsIDExMiwKKyAgICAgNTQsIDEwMCwgIDQwLCAgNjEsICA4NiwgMTA3LCAgMzksICA2MCwgIDg1LCAxMDYsCisgICAgIDM2LCAgNTcsICA4MiwgMTAzLCAgMzUsICA1NiwgIDgxLCAxMDIsICAzNCwgIDU1LAorICAgICA4MCwgMTAxLCAgNDIsICA2MywgIDg4LCAxMDksICA0MSwgIDYyLCAgODcsIDEwOCwKKyAgICAgMzgsICA1OSwgIDg0LCAxMDUsICAzNywgIDU4LCAgODMsIDEwNAorfTsKKworY29uc3QgcGpfaW50MTZfdCBwam1lZGlhX2NvZGVjX2Ftcm5iX29yZGVybWFwNTE1WzEwM10gPQoreworICAgICA3LCAgIDYsICAgNSwgICA0LCAgIDMsICAgMiwgICAxLCAgIDAsICAxNSwgIDE0LAorICAgIDEzLCAgMTIsICAxMSwgIDEwLCAgIDksICAgOCwgIDIzLCAgMjQsICAyNSwgIDI2LAorICAgIDI3LCAgNDYsICA2NSwgIDg0LCAgNDUsICA0NCwgIDQzLCAgNjQsICA2MywgIDYyLAorICAgIDgzLCAgODIsICA4MSwgMTAyLCAxMDEsIDEwMCwgIDQyLCAgNjEsICA4MCwgIDk5LAorICAgIDI4LCAgNDcsICA2NiwgIDg1LCAgMTgsICA0MSwgIDYwLCAgNzksICA5OCwgIDI5LAorICAgIDQ4LCAgNjcsICAxNywgIDIwLCAgMjIsICA0MCwgIDU5LCAgNzgsICA5NywgIDIxLAorICAgIDMwLCAgNDksICA2OCwgIDg2LCAgMTksICAxNiwgIDg3LCAgMzksICAzOCwgIDU4LAorICAgIDU3LCAgNzcsICAzNSwgIDU0LCAgNzMsICA5MiwgIDc2LCAgOTYsICA5NSwgIDM2LAorICAgIDU1LCAgNzQsICA5MywgIDMyLCAgNTEsICAzMywgIDUyLCAgNzAsICA3MSwgIDg5LAorICAgIDkwLCAgMzEsICA1MCwgIDY5LCAgODgsICAzNywgIDU2LCAgNzUsICA5NCwgIDM0LAorICAgIDUzLCAgNzIsICA5MQorfTsKKworY29uc3QgcGpfaW50MTZfdCBwam1lZGlhX2NvZGVjX2Ftcm5iX29yZGVybWFwNDc1Wzk1XSA9Cit7CisgICAgIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDksCisgICAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LCAgMjMsICAyNCwgIDI1LCAgMjYsCisgICAgMjcsICAyOCwgIDQ4LCAgNDksICA2MSwgIDYyLCAgODIsICA4MywgIDQ3LCAgNDYsCisgICAgNDUsICA0NCwgIDgxLCAgODAsICA3OSwgIDc4LCAgMTcsICAxOCwgIDIwLCAgMjIsCisgICAgNzcsICA3NiwgIDc1LCAgNzQsICAyOSwgIDMwLCAgNDMsICA0MiwgIDQxLCAgNDAsCisgICAgMzgsICAzOSwgIDE2LCAgMTksICAyMSwgIDUwLCAgNTEsICA1OSwgIDYwLCAgNjMsCisgICAgNjQsICA3MiwgIDczLCAgODQsICA4NSwgIDkzLCAgOTQsICAzMiwgIDMzLCAgMzUsCisgICAgMzYsICA1MywgIDU0LCAgNTYsICA1NywgIDY2LCAgNjcsICA2OSwgIDcwLCAgODcsCisgICAgODgsICA5MCwgIDkxLCAgMzQsICA1NSwgIDY4LCAgODksICAzNywgIDU4LCAgNzEsCisgICAgOTIsICAzMSwgIDUyLCAgNjUsICA4NgorfTsKKworCitjb25zdCBwal9pbnQxNl90IHBqbWVkaWFfY29kZWNfYW1yd2Jfb3JkZXJtYXBfNjYwW10gPQoreworICAgICAgMCwgICA1LCAgIDYsICAgNywgIDYxLCAgODQsIDEwNywgMTMwLCAgNjIsICA4NSwKKyAgICAgIDgsICAgNCwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNTgsICA4MSwgMTA0LCAxMjcsCisgICAgIDYwLCAgODMsIDEwNiwgMTI5LCAxMDgsIDEzMSwgMTI4LCAgNDEsICA0MiwgIDgwLAorICAgIDEyNiwgICAxLCAgIDMsICA1NywgMTAzLCAgODIsIDEwNSwgIDU5LCAgIDIsICA2MywKKyAgICAxMDksIDExMCwgIDg2LCAgMTksICAyMiwgIDIzLCAgNjQsICA4NywgIDE4LCAgMjAsCisgICAgIDIxLCAgMTcsICAxMywgIDg4LCAgNDMsICA4OSwgIDY1LCAxMTEsICAxNCwgIDI0LAorICAgICAyNSwgIDI2LCAgMjcsICAyOCwgIDE1LCAgMTYsICA0NCwgIDkwLCAgNjYsIDExMiwKKyAgICAgIDksICAxMSwgIDEwLCAgMTIsICA2NywgMTEzLCAgMjksICAzMCwgIDMxLCAgMzIsCisgICAgIDM0LCAgMzMsICAzNSwgIDM2LCAgNDUsICA1MSwgIDY4LCAgNzQsICA5MSwgIDk3LAorICAgIDExNCwgMTIwLCAgNDYsICA2OSwgIDkyLCAxMTUsICA1MiwgIDc1LCAgOTgsIDEyMSwKKyAgICAgNDcsICA3MCwgIDkzLCAxMTYsICA1MywgIDc2LCAgOTksIDEyMiwgIDQ4LCAgNzEsCisgICAgIDk0LCAxMTcsICA1NCwgIDc3LCAxMDAsIDEyMywgIDQ5LCAgNzIsICA5NSwgMTE4LAorICAgICA1NSwgIDc4LCAxMDEsIDEyNCwgIDUwLCAgNzMsICA5NiwgMTE5LCAgNTYsICA3OSwKKyAgICAxMDIsIDEyNQorfTsKKworY29uc3QgcGpfaW50MTZfdCBwam1lZGlhX2NvZGVjX2FtcndiX29yZGVybWFwXzg4NVtdID0KK3sKKyAgICAgIDAsICAgNCwgICA2LCAgIDcsICAgNSwgICAzLCAgNDcsICA0OCwgIDQ5LCAxMTIsCisgICAgMTEzLCAxMTQsICA3NSwgMTA2LCAxNDAsIDE3MSwgIDgwLCAxMTEsIDE0NSwgMTc2LAorICAgICA3NywgMTA4LCAxNDIsIDE3MywgIDc4LCAxMDksIDE0MywgMTc0LCAgNzksIDExMCwKKyAgICAxNDQsIDE3NSwgIDc2LCAxMDcsIDE0MSwgMTcyLCAgNTAsIDExNSwgIDUxLCAgIDIsCisgICAgICAxLCAgODEsIDExNiwgMTQ2LCAgMTksICAyMSwgIDEyLCAgMTcsICAxOCwgIDIwLAorICAgICAxNiwgIDI1LCAgMTMsICAxMCwgIDE0LCAgMjQsICAyMywgIDIyLCAgMjYsICAgOCwKKyAgICAgMTUsICA1MiwgMTE3LCAgMzEsICA4MiwgMTQ3LCAgIDksICAzMywgIDExLCAgODMsCisgICAgMTQ4LCAgNTMsIDExOCwgIDI4LCAgMjcsICA4NCwgMTQ5LCAgMzQsICAzNSwgIDI5LAorICAgICA0NiwgIDMyLCAgMzAsICA1NCwgMTE5LCAgMzcsICAzNiwgIDM5LCAgMzgsICA0MCwKKyAgICAgODUsIDE1MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA1NSwgIDYwLCAgNjUsCisgICAgIDcwLCAgODYsICA5MSwgIDk2LCAxMDEsIDEyMCwgMTI1LCAxMzAsIDEzNSwgMTUxLAorICAgIDE1NiwgMTYxLCAxNjYsICA1NiwgIDg3LCAxMjEsIDE1MiwgIDYxLCAgOTIsIDEyNiwKKyAgICAxNTcsICA2NiwgIDk3LCAxMzEsIDE2MiwgIDcxLCAxMDIsIDEzNiwgMTY3LCAgNTcsCisgICAgIDg4LCAxMjIsIDE1MywgIDYyLCAgOTMsIDEyNywgMTU4LCAgNjcsICA5OCwgMTMyLAorICAgIDE2MywgIDcyLCAxMDMsIDEzNywgMTY4LCAgNTgsICA4OSwgMTIzLCAxNTQsICA2MywKKyAgICAgOTQsIDEyOCwgMTU5LCAgNjgsICA5OSwgMTMzLCAxNjQsICA3MywgMTA0LCAxMzgsCisgICAgMTY5LCAgNTksICA5MCwgMTI0LCAxNTUsICA2NCwgIDk1LCAxMjksIDE2MCwgIDY5LAorICAgIDEwMCwgMTM0LCAxNjUsICA3NCwgMTA1LCAxMzksIDE3MAorfTsKKworY29uc3QgcGpfaW50MTZfdCBwam1lZGlhX2NvZGVjX2FtcndiX29yZGVybWFwXzEyNjVbXSA9Cit7CisgICAgICAwLCAgIDQsICAgNiwgIDkzLCAxNDMsIDE5NiwgMjQ2LCAgIDcsICAgNSwgICAzLAorICAgICA0NywgIDQ4LCAgNDksICA1MCwgIDUxLCAxNTAsIDE1MSwgMTUyLCAxNTMsIDE1NCwKKyAgICAgOTQsIDE0NCwgMTk3LCAyNDcsICA5OSwgMTQ5LCAyMDIsIDI1MiwgIDk2LCAxNDYsCisgICAgMTk5LCAyNDksICA5NywgMTQ3LCAyMDAsIDI1MCwgMTAwLCAyMDMsICA5OCwgMTQ4LAorICAgIDIwMSwgMjUxLCAgOTUsIDE0NSwgMTk4LCAyNDgsICA1MiwgICAyLCAgIDEsIDEwMSwKKyAgICAyMDQsIDE1NSwgIDE5LCAgMjEsICAxMiwgIDE3LCAgMTgsICAyMCwgIDE2LCAgMjUsCisgICAgIDEzLCAgMTAsICAxNCwgIDI0LCAgMjMsICAyMiwgIDI2LCAgIDgsICAxNSwgIDUzLAorICAgIDE1NiwgIDMxLCAxMDIsIDIwNSwgICA5LCAgMzMsICAxMSwgMTAzLCAyMDYsICA1NCwKKyAgICAxNTcsICAyOCwgIDI3LCAxMDQsIDIwNywgIDM0LCAgMzUsICAyOSwgIDQ2LCAgMzIsCisgICAgIDMwLCAgNTUsIDE1OCwgIDM3LCAgMzYsICAzOSwgIDM4LCAgNDAsIDEwNSwgMjA4LAorICAgICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNTYsIDEwNiwgMTU5LCAyMDksICA1NywKKyAgICAgNjYsICA3NSwgIDg0LCAxMDcsIDExNiwgMTI1LCAxMzQsIDE2MCwgMTY5LCAxNzgsCisgICAgMTg3LCAyMTAsIDIxOSwgMjI4LCAyMzcsICA1OCwgMTA4LCAxNjEsIDIxMSwgIDYyLAorICAgIDExMiwgMTY1LCAyMTUsICA2NywgMTE3LCAxNzAsIDIyMCwgIDcxLCAxMjEsIDE3NCwKKyAgICAyMjQsICA3NiwgMTI2LCAxNzksIDIyOSwgIDgwLCAxMzAsIDE4MywgMjMzLCAgODUsCisgICAgMTM1LCAxODgsIDIzOCwgIDg5LCAxMzksIDE5MiwgMjQyLCAgNTksIDEwOSwgMTYyLAorICAgIDIxMiwgIDYzLCAxMTMsIDE2NiwgMjE2LCAgNjgsIDExOCwgMTcxLCAyMjEsICA3MiwKKyAgICAxMjIsIDE3NSwgMjI1LCAgNzcsIDEyNywgMTgwLCAyMzAsICA4MSwgMTMxLCAxODQsCisgICAgMjM0LCAgODYsIDEzNiwgMTg5LCAyMzksICA5MCwgMTQwLCAxOTMsIDI0MywgIDYwLAorICAgIDExMCwgMTYzLCAyMTMsICA2NCwgMTE0LCAxNjcsIDIxNywgIDY5LCAxMTksIDE3MiwKKyAgICAyMjIsICA3MywgMTIzLCAxNzYsIDIyNiwgIDc4LCAxMjgsIDE4MSwgMjMxLCAgODIsCisgICAgMTMyLCAxODUsIDIzNSwgIDg3LCAxMzcsIDE5MCwgMjQwLCAgOTEsIDE0MSwgMTk0LAorICAgIDI0NCwgIDYxLCAxMTEsIDE2NCwgMjE0LCAgNjUsIDExNSwgMTY4LCAyMTgsICA3MCwKKyAgICAxMjAsIDE3MywgMjIzLCAgNzQsIDEyNCwgMTc3LCAyMjcsICA3OSwgMTI5LCAxODIsCisgICAgMjMyLCAgODMsIDEzMywgMTg2LCAyMzYsICA4OCwgMTM4LCAxOTEsIDI0MSwgIDkyLAorICAgIDE0MiwgMTk1LCAyNDUKK307CisKK2NvbnN0IHBqX2ludDE2X3QgcGptZWRpYV9jb2RlY19hbXJ3Yl9vcmRlcm1hcF8xNDI1W10gPQoreworICAgICAgMCwgICA0LCAgIDYsIDEwMSwgMTU5LCAyMjAsIDI3OCwgICA3LCAgIDUsICAgMywKKyAgICAgNDcsICA0OCwgIDQ5LCAgNTAsICA1MSwgMTY2LCAxNjcsIDE2OCwgMTY5LCAxNzAsCisgICAgMTAyLCAxNjAsIDIyMSwgMjc5LCAxMDcsIDE2NSwgMjI2LCAyODQsIDEwNCwgMTYyLAorICAgIDIyMywgMjgxLCAxMDUsIDE2MywgMjI0LCAyODIsIDEwOCwgMjI3LCAxMDYsIDE2NCwKKyAgICAyMjUsIDI4MywgMTAzLCAxNjEsIDIyMiwgMjgwLCAgNTIsICAgMiwgICAxLCAxMDksCisgICAgMjI4LCAxNzEsICAxOSwgIDIxLCAgMTIsICAxNywgIDE4LCAgMjAsICAxNiwgIDI1LAorICAgICAxMywgIDEwLCAgMTQsICAyNCwgIDIzLCAgMjIsICAyNiwgICA4LCAgMTUsICA1MywKKyAgICAxNzIsICAzMSwgMTEwLCAyMjksICAgOSwgIDMzLCAgMTEsIDExMSwgMjMwLCAgNTQsCisgICAgMTczLCAgMjgsICAyNywgMTEyLCAyMzEsICAzNCwgIDM1LCAgMjksICA0NiwgIDMyLAorICAgICAzMCwgIDU1LCAxNzQsICAzNywgIDM2LCAgMzksICAzOCwgIDQwLCAxMTMsIDIzMiwKKyAgICAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDU2LCAxMTQsIDE3NSwgMjMzLCAgNjIsCisgICAgMTIwLCAxODEsIDIzOSwgIDc1LCAxMzMsIDE5NCwgMjUyLCAgNTcsIDExNSwgMTc2LAorICAgIDIzNCwgIDYzLCAxMjEsIDE4MiwgMjQwLCAgNzAsIDEyOCwgMTg5LCAyNDcsICA3NiwKKyAgICAxMzQsIDE5NSwgMjUzLCAgODMsIDE0MSwgMjAyLCAyNjAsICA5MiwgMTUwLCAyMTEsCisgICAgMjY5LCAgODQsIDE0MiwgMjAzLCAyNjEsICA5MywgMTUxLCAyMTIsIDI3MCwgIDg1LAorICAgIDE0MywgMjA0LCAyNjIsICA5NCwgMTUyLCAyMTMsIDI3MSwgIDg2LCAxNDQsIDIwNSwKKyAgICAyNjMsICA5NSwgMTUzLCAyMTQsIDI3MiwgIDY0LCAxMjIsIDE4MywgMjQxLCAgNzcsCisgICAgMTM1LCAxOTYsIDI1NCwgIDY1LCAxMjMsIDE4NCwgMjQyLCAgNzgsIDEzNiwgMTk3LAorICAgIDI1NSwgIDg3LCAxNDUsIDIwNiwgMjY0LCAgOTYsIDE1NCwgMjE1LCAyNzMsICA1OCwKKyAgICAxMTYsIDE3NywgMjM1LCAgNjYsIDEyNCwgMTg1LCAyNDMsICA3MSwgMTI5LCAxOTAsCisgICAgMjQ4LCAgNzksIDEzNywgMTk4LCAyNTYsICA4OCwgMTQ2LCAyMDcsIDI2NSwgIDk3LAorICAgIDE1NSwgMjE2LCAyNzQsICA1OSwgMTE3LCAxNzgsIDIzNiwgIDY3LCAxMjUsIDE4NiwKKyAgICAyNDQsICA3MiwgMTMwLCAxOTEsIDI0OSwgIDgwLCAxMzgsIDE5OSwgMjU3LCAgODksCisgICAgMTQ3LCAyMDgsIDI2NiwgIDk4LCAxNTYsIDIxNywgMjc1LCAgNjAsIDExOCwgMTc5LAorICAgIDIzNywgIDY4LCAxMjYsIDE4NywgMjQ1LCAgNzMsIDEzMSwgMTkyLCAyNTAsICA4MSwKKyAgICAxMzksIDIwMCwgMjU4LCAgOTAsIDE0OCwgMjA5LCAyNjcsICA5OSwgMTU3LCAyMTgsCisgICAgMjc2LCAgNjEsIDExOSwgMTgwLCAyMzgsICA2OSwgMTI3LCAxODgsIDI0NiwgIDc0LAorICAgIDEzMiwgMTkzLCAyNTEsICA4MiwgMTQwLCAyMDEsIDI1OSwgIDkxLCAxNDksIDIxMCwKKyAgICAyNjgsIDEwMCwgMTU4LCAyMTksIDI3NworfTsKKworY29uc3QgcGpfaW50MTZfdCBwam1lZGlhX2NvZGVjX2FtcndiX29yZGVybWFwXzE1ODVbXSA9Cit7CisgICAgICAwLCAgIDQsICAgNiwgMTA5LCAxNzUsIDI0NCwgMzEwLCAgIDcsICAgNSwgICAzLAorICAgICA0NywgIDQ4LCAgNDksICA1MCwgIDUxLCAxODIsIDE4MywgMTg0LCAxODUsIDE4NiwKKyAgICAxMTAsIDE3NiwgMjQ1LCAzMTEsIDExNSwgMTgxLCAyNTAsIDMxNiwgMTEyLCAxNzgsCisgICAgMjQ3LCAzMTMsIDExMywgMTc5LCAyNDgsIDMxNCwgMTE2LCAyNTEsIDExNCwgMTgwLAorICAgIDI0OSwgMzE1LCAxMTEsIDE3NywgMjQ2LCAzMTIsICA1MiwgICAyLCAgIDEsIDExNywKKyAgICAyNTIsIDE4NywgIDE5LCAgMjEsICAxMiwgIDE3LCAgMTgsICAyMCwgIDE2LCAgMjUsCisgICAgIDEzLCAgMTAsICAxNCwgIDI0LCAgMjMsICAyMiwgIDI2LCAgIDgsICAxNSwgIDUzLAorICAgIDE4OCwgIDMxLCAxMTgsIDI1MywgICA5LCAgMzMsICAxMSwgMTE5LCAyNTQsICA1NCwKKyAgICAxODksICAyOCwgIDI3LCAxMjAsIDI1NSwgIDM0LCAgMzUsICAyOSwgIDQ2LCAgMzIsCisgICAgIDMwLCAgNTUsIDE5MCwgIDM3LCAgMzYsICAzOSwgIDM4LCAgNDAsIDEyMSwgMjU2LAorICAgICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNTYsIDEyMiwgMTkxLCAyNTcsICA2MywKKyAgICAxMjksIDE5OCwgMjY0LCAgNzYsIDE0MiwgMjExLCAyNzcsICA4OSwgMTU1LCAyMjQsCisgICAgMjkwLCAxMDIsIDE2OCwgMjM3LCAzMDMsICA1NywgMTIzLCAxOTIsIDI1OCwgIDcwLAorICAgIDEzNiwgMjA1LCAyNzEsICA4MywgMTQ5LCAyMTgsIDI4NCwgIDk2LCAxNjIsIDIzMSwKKyAgICAyOTcsICA2MiwgMTI4LCAxOTcsIDI2MywgIDc1LCAxNDEsIDIxMCwgMjc2LCAgODgsCisgICAgMTU0LCAyMjMsIDI4OSwgMTAxLCAxNjcsIDIzNiwgMzAyLCAgNTgsIDEyNCwgMTkzLAorICAgIDI1OSwgIDcxLCAxMzcsIDIwNiwgMjcyLCAgODQsIDE1MCwgMjE5LCAyODUsICA5NywKKyAgICAxNjMsIDIzMiwgMjk4LCAgNTksIDEyNSwgMTk0LCAyNjAsICA2NCwgMTMwLCAxOTksCisgICAgMjY1LCAgNjcsIDEzMywgMjAyLCAyNjgsICA3MiwgMTM4LCAyMDcsIDI3MywgIDc3LAorICAgIDE0MywgMjEyLCAyNzgsICA4MCwgMTQ2LCAyMTUsIDI4MSwgIDg1LCAxNTEsIDIyMCwKKyAgICAyODYsICA5MCwgMTU2LCAyMjUsIDI5MSwgIDkzLCAxNTksIDIyOCwgMjk0LCAgOTgsCisgICAgMTY0LCAyMzMsIDI5OSwgMTAzLCAxNjksIDIzOCwgMzA0LCAxMDYsIDE3MiwgMjQxLAorICAgIDMwNywgIDYwLCAxMjYsIDE5NSwgMjYxLCAgNjUsIDEzMSwgMjAwLCAyNjYsICA2OCwKKyAgICAxMzQsIDIwMywgMjY5LCAgNzMsIDEzOSwgMjA4LCAyNzQsICA3OCwgMTQ0LCAyMTMsCisgICAgMjc5LCAgODEsIDE0NywgMjE2LCAyODIsICA4NiwgMTUyLCAyMjEsIDI4NywgIDkxLAorICAgIDE1NywgMjI2LCAyOTIsICA5NCwgMTYwLCAyMjksIDI5NSwgIDk5LCAxNjUsIDIzNCwKKyAgICAzMDAsIDEwNCwgMTcwLCAyMzksIDMwNSwgMTA3LCAxNzMsIDI0MiwgMzA4LCAgNjEsCisgICAgMTI3LCAxOTYsIDI2MiwgIDY2LCAxMzIsIDIwMSwgMjY3LCAgNjksIDEzNSwgMjA0LAorICAgIDI3MCwgIDc0LCAxNDAsIDIwOSwgMjc1LCAgNzksIDE0NSwgMjE0LCAyODAsICA4MiwKKyAgICAxNDgsIDIxNywgMjgzLCAgODcsIDE1MywgMjIyLCAyODgsICA5MiwgMTU4LCAyMjcsCisgICAgMjkzLCAgOTUsIDE2MSwgMjMwLCAyOTYsIDEwMCwgMTY2LCAyMzUsIDMwMSwgMTA1LAorICAgIDE3MSwgMjQwLCAzMDYsIDEwOCwgMTc0LCAyNDMsIDMwOQorfTsKKworY29uc3QgcGpfaW50MTZfdCBwam1lZGlhX2NvZGVjX2FtcndiX29yZGVybWFwXzE4MjVbXSA9Cit7CisgICAgICAwLCAgIDQsICAgNiwgMTIxLCAxOTksIDI4MCwgMzU4LCAgIDcsICAgNSwgICAzLAorICAgICA0NywgIDQ4LCAgNDksICA1MCwgIDUxLCAyMDYsIDIwNywgMjA4LCAyMDksIDIxMCwKKyAgICAxMjIsIDIwMCwgMjgxLCAzNTksIDEyNywgMjA1LCAyODYsIDM2NCwgMTI0LCAyMDIsCisgICAgMjgzLCAzNjEsIDEyNSwgMjAzLCAyODQsIDM2MiwgMTI4LCAyODcsIDEyNiwgMjA0LAorICAgIDI4NSwgMzYzLCAxMjMsIDIwMSwgMjgyLCAzNjAsICA1MiwgICAyLCAgIDEsIDEyOSwKKyAgICAyODgsIDIxMSwgIDE5LCAgMjEsICAxMiwgIDE3LCAgMTgsICAyMCwgIDE2LCAgMjUsCisgICAgIDEzLCAgMTAsICAxNCwgIDI0LCAgMjMsICAyMiwgIDI2LCAgIDgsICAxNSwgIDUzLAorICAgIDIxMiwgIDMxLCAxMzAsIDI4OSwgICA5LCAgMzMsICAxMSwgMTMxLCAyOTAsICA1NCwKKyAgICAyMTMsICAyOCwgIDI3LCAxMzIsIDI5MSwgIDM0LCAgMzUsICAyOSwgIDQ2LCAgMzIsCisgICAgIDMwLCAgNTUsIDIxNCwgIDM3LCAgMzYsICAzOSwgIDM4LCAgNDAsIDEzMywgMjkyLAorICAgICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNTYsIDEzNCwgMjE1LCAyOTMsIDE5OCwKKyAgICAyOTksIDEzNiwgMTIwLCAxMzgsICA2MCwgMjc5LCAgNTgsICA2MiwgMzU3LCAxMzksCisgICAgMTQwLCAyOTUsIDE1NiwgIDU3LCAyMTksIDI5NywgIDYzLCAyMTcsIDEzNywgMTcwLAorICAgIDMwMCwgMjIyLCAgNjQsIDEwNiwgIDYxLCAgNzgsIDI5NCwgIDkyLCAxNDIsIDE0MSwKKyAgICAxMzUsIDIyMSwgMjk2LCAzMDEsIDM0MywgIDU5LCAyOTgsIDE4NCwgMzI5LCAzMTUsCisgICAgMjIwLCAyMTYsIDI2NSwgMjUxLCAyMTgsIDIzNywgMzUyLCAyMjMsIDE1NywgIDg2LAorICAgIDE3MSwgIDg3LCAxNjQsIDM1MSwgMTExLCAzMDIsICA2NSwgMTc4LCAxMTUsIDMyMywKKyAgICAgNzIsIDE5MiwgMTAxLCAxNzksICA5MywgIDczLCAxOTMsIDE1MSwgMzM3LCAzMDksCisgICAgMTQzLCAyNzQsICA2OSwgMzI0LCAxNjUsIDE1MCwgIDk3LCAzMzgsIDExMCwgMzEwLAorICAgIDMzMCwgMjczLCAgNjgsIDEwNywgMTc1LCAyNDUsIDExNCwgIDc5LCAxMTMsIDE4OSwKKyAgICAyNDYsIDI1OSwgMTc0LCAgNzEsIDE4NSwgIDk2LCAzNDQsIDEwMCwgMzIyLCAgODMsCisgICAgMzM0LCAzMTYsIDMzMywgMjUyLCAxNjEsIDM0OCwgMTQ3LCAgODIsIDI2OSwgMjMyLAorICAgIDI2MCwgMzA4LCAzNTMsIDM0NywgMTYzLCAyMzEsIDMwNiwgMzIwLCAxODgsIDI3MCwKKyAgICAxNDYsIDE3NywgMjY2LCAzNTAsIDI1NiwgIDg1LCAxNDksIDExNiwgMTkxLCAxNjAsCisgICAgMjM4LCAyNTgsIDMzNiwgMzA1LCAyNTUsICA4OCwgMjI0LCAgOTksIDMzOSwgMjMwLAorICAgIDIyOCwgMjI3LCAyNzIsIDI0MiwgMjQxLCAzMTksIDIzMywgMzExLCAxMDIsICA3NCwKKyAgICAxODAsIDI3NSwgIDY2LCAxOTQsIDE1MiwgMzI1LCAxNzIsIDI0NywgMjQ0LCAyNjEsCisgICAgMTE3LCAxNTgsIDE2NiwgMzU0LCAgNzUsIDE0NCwgMTA4LCAzMTIsICA5NCwgMTg2LAorICAgIDMwMywgIDgwLCAyMzQsICA4OSwgMTk1LCAxMTIsIDM0MCwgMTgxLCAzNDUsIDMxNywKKyAgICAzMjYsIDI3NiwgMjM5LCAxNjcsIDExOCwgMzEzLCAgNzAsIDM1NSwgMzI3LCAyNTMsCisgICAgMTkwLCAxNzYsIDI3MSwgMTA0LCAgOTgsIDE1MywgMTAzLCAgOTAsICA3NiwgMjY3LAorICAgIDI3NywgMjQ4LCAyMjUsIDI2MiwgMTgyLCAgODQsIDE1NCwgMjM1LCAzMzUsIDE2OCwKKyAgICAzMzEsIDE5NiwgMzQxLCAyNDksIDE2MiwgMzA3LCAxNDgsIDM0OSwgMjYzLCAzMjEsCisgICAgMjU3LCAyNDMsIDIyOSwgMzU2LCAxNTksIDExOSwgIDY3LCAxODcsIDE3MywgMTQ1LAorICAgIDI0MCwgIDc3LCAzMDQsIDMzMiwgMzE0LCAzNDIsIDEwOSwgMjU0LCAgODEsIDI3OCwKKyAgICAxMDUsICA5MSwgMzQ2LCAzMTgsIDE4MywgMjUwLCAxOTcsIDMyOCwgIDk1LCAxNTUsCisgICAgMTY5LCAyNjgsIDIyNiwgMjM2LCAyNjQKK307CisKK2NvbnN0IHBqX2ludDE2X3QgcGptZWRpYV9jb2RlY19hbXJ3Yl9vcmRlcm1hcF8xOTg1W10gPQoreworICAgICAgMCwgICA0LCAgIDYsIDEyOSwgMjE1LCAzMDQsIDM5MCwgICA3LCAgIDUsICAgMywKKyAgICAgNDcsICA0OCwgIDQ5LCAgNTAsICA1MSwgMjIyLCAyMjMsIDIyNCwgMjI1LCAyMjYsCisgICAgMTMwLCAyMTYsIDMwNSwgMzkxLCAxMzUsIDIyMSwgMzEwLCAzOTYsIDEzMiwgMjE4LAorICAgIDMwNywgMzkzLCAxMzMsIDIxOSwgMzA4LCAzOTQsIDEzNiwgMzExLCAxMzQsIDIyMCwKKyAgICAzMDksIDM5NSwgMTMxLCAyMTcsIDMwNiwgMzkyLCAgNTIsICAgMiwgICAxLCAxMzcsCisgICAgMzEyLCAyMjcsICAxOSwgIDIxLCAgMTIsICAxNywgIDE4LCAgMjAsICAxNiwgIDI1LAorICAgICAxMywgIDEwLCAgMTQsICAyNCwgIDIzLCAgMjIsICAyNiwgICA4LCAgMTUsICA1MywKKyAgICAyMjgsICAzMSwgMTM4LCAzMTMsICAgOSwgIDMzLCAgMTEsIDEzOSwgMzE0LCAgNTQsCisgICAgMjI5LCAgMjgsICAyNywgMTQwLCAzMTUsICAzNCwgIDM1LCAgMjksICA0NiwgIDMyLAorICAgICAzMCwgIDU1LCAyMzAsICAzNywgIDM2LCAgMzksICAzOCwgIDQwLCAxNDEsIDMxNiwKKyAgICAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDU2LCAxNDIsIDIzMSwgMzE3LCAgNjMsCisgICAgIDczLCAgOTIsIDM0MCwgIDgyLCAzMjQsIDE0OSwgMzUzLCAxNTksIDMzNCwgMTY1LAorICAgIDMzOCwgMTc4LCAxNjMsIDI1NCwgIDc3LCAxNjgsIDI1NywgMTUzLCAzNDMsICA1NywKKyAgICAyNDgsIDIzOCwgIDc5LCAyNTIsIDE2NiwgIDY3LCAgODAsIDIwMSwgMTAxLCAyNjcsCisgICAgMTQzLCAxNjQsIDM0MSwgMjU1LCAzMzksIDE4NywgMzc2LCAzMTgsICA3OCwgMzI4LAorICAgIDM2MiwgMTE1LCAyMzIsIDI0MiwgMjUzLCAyOTAsIDI3NiwgIDYyLCAgNTgsIDE1OCwKKyAgICAgNjgsICA5MywgMTc5LCAzMTksIDE0OCwgMTY5LCAxNTQsICA3MiwgMzg1LCAzMjksCisgICAgMzMzLCAzNDQsIDEwMiwgIDgzLCAxNDQsIDIzMywgMzIzLCAxMjQsIDI0MywgMTkyLAorICAgIDM1NCwgMjM3LCAgNjQsIDI0NywgMjAyLCAyMDksIDE1MCwgMTE2LCAzMzUsIDI2OCwKKyAgICAyMzksIDI5OSwgMTg4LCAxOTYsIDI5OCwgIDk0LCAxOTUsIDI1OCwgMTIzLCAzNjMsCisgICAgMzg0LCAxMDksIDMyNSwgMzcxLCAxNzAsIDM3MCwgIDg0LCAxMTAsIDI5NSwgMTgwLAorICAgICA3NCwgMjEwLCAxOTEsIDEwNiwgMjkxLCAyMDUsIDM2NywgMzgxLCAzNzcsIDIwNiwKKyAgICAzNTUsIDEyMiwgMTE5LCAxMjAsIDM4MywgMTYwLCAxMDUsIDEwOCwgMjc3LCAzODAsCisgICAgMjk0LCAyODQsIDI4NSwgMzQ1LCAyMDgsIDI2OSwgMjQ5LCAzNjYsIDM4NiwgMzAwLAorICAgIDI5NywgMjU5LCAxMjUsIDM2OSwgMTk3LCAgOTcsIDE5NCwgMjg2LCAyMTEsIDI4MSwKKyAgICAyODAsIDE4MywgMzcyLCAgODcsIDE1NSwgMjgzLCAgNTksIDM0OCwgMzI3LCAxODQsCisgICAgIDc2LCAxMTEsIDMzMCwgMjAzLCAzNDksICA2OSwgIDk4LCAxNTIsIDE0NSwgMTg5LAorICAgICA2NiwgMzIwLCAzMzcsIDE3MywgMzU4LCAyNTEsIDE5OCwgMTc0LCAyNjMsIDI2MiwKKyAgICAxMjYsIDI0MSwgMTkzLCAgODgsIDM4OCwgMTE3LCAgOTUsIDM4NywgMTEyLCAzNTksCisgICAgMjg3LCAyNDQsIDEwMywgMjcyLCAzMDEsIDE3MSwgMTYyLCAyMzQsIDI3MywgMTI3LAorICAgIDM3MywgMTgxLCAyOTIsICA4NSwgMzc4LCAzMDIsIDEyMSwgMTA3LCAzNjQsIDM0NiwKKyAgICAzNTYsIDIxMiwgMjc4LCAyMTMsICA2NSwgMzgyLCAyODgsIDIwNywgMTEzLCAxNzUsCisgICAgIDk5LCAyOTYsIDM3NCwgMzY4LCAxOTksIDI2MCwgMTg1LCAzMzYsIDMzMSwgMTYxLAorICAgIDI3MCwgMjY0LCAyNTAsIDI0MCwgIDc1LCAzNTAsIDE1MSwgIDYwLCAgODksIDMyMSwKKyAgICAxNTYsIDI3NCwgMzYwLCAzMjYsICA3MCwgMjgyLCAxNjcsIDE0NiwgMzUyLCAgODEsCisgICAgIDkxLCAzODksIDI2NiwgMjQ1LCAxNzcsIDIzNSwgMTkwLCAyNTYsIDIwNCwgMzQyLAorICAgIDEyOCwgMTE4LCAzMDMsIDEwNCwgMzc5LCAxODIsIDExNCwgMzc1LCAyMDAsICA5NiwKKyAgICAyOTMsIDE3MiwgMjE0LCAzNjUsIDI3OSwgIDg2LCAyODksIDM1MSwgMzQ3LCAzNTcsCisgICAgMjYxLCAxODYsIDE3NiwgMjcxLCAgOTAsIDEwMCwgMTQ3LCAzMjIsIDI3NSwgMzYxLAorICAgICA3MSwgMzMyLCAgNjEsIDI2NSwgMTU3LCAyNDYsIDIzNgorfTsKKworY29uc3QgcGpfaW50MTZfdCBwam1lZGlhX2NvZGVjX2FtcndiX29yZGVybWFwXzIzMDVbXSA9Cit7CisgICAgICAwLCAgIDQsICAgNiwgMTQ1LCAyNDcsIDM1MiwgNDU0LCAgIDcsICAgNSwgICAzLAorICAgICA0NywgIDQ4LCAgNDksICA1MCwgIDUxLCAyNTQsIDI1NSwgMjU2LCAyNTcsIDI1OCwKKyAgICAxNDYsIDI0OCwgMzUzLCA0NTUsIDE1MSwgMjUzLCAzNTgsIDQ2MCwgMTQ4LCAyNTAsCisgICAgMzU1LCA0NTcsIDE0OSwgMjUxLCAzNTYsIDQ1OCwgMTUyLCAzNTksIDE1MCwgMjUyLAorICAgIDM1NywgNDU5LCAxNDcsIDI0OSwgMzU0LCA0NTYsICA1MiwgICAyLCAgIDEsIDE1MywKKyAgICAzNjAsIDI1OSwgIDE5LCAgMjEsICAxMiwgIDE3LCAgMTgsICAyMCwgIDE2LCAgMjUsCisgICAgIDEzLCAgMTAsICAxNCwgIDI0LCAgMjMsICAyMiwgIDI2LCAgIDgsICAxNSwgIDUzLAorICAgIDI2MCwgIDMxLCAxNTQsIDM2MSwgICA5LCAgMzMsICAxMSwgMTU1LCAzNjIsICA1NCwKKyAgICAyNjEsICAyOCwgIDI3LCAxNTYsIDM2MywgIDM0LCAgMzUsICAyOSwgIDQ2LCAgMzIsCisgICAgIDMwLCAgNTUsIDI2MiwgIDM3LCAgMzYsICAzOSwgIDM4LCAgNDAsIDE1NywgMzY0LAorICAgICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNTYsIDE1OCwgMjYzLCAzNjUsIDE4MSwKKyAgICAxOTIsIDE3MCwgIDc5LCAgNTcsIDM5OSwgIDkwLCAxNTksIDI5NywgMzc3LCAzNjYsCisgICAgMjc1LCAgNjgsIDE4MywgMzg4LCAyODYsIDE5NCwgMjk5LCAgOTIsICA3MCwgMTgyLAorICAgIDQwMSwgMTcyLCAgNTksICA5MSwgIDU4LCA0MDAsIDM2OCwgMTYxLCAgODEsIDE2MCwKKyAgICAyNjQsIDE3MSwgIDgwLCAzODksIDM5MCwgMzc4LCAzNzksIDE5MywgMjk4LCAgNjksCisgICAgMjY2LCAyNjUsIDM2NywgMjc3LCAyODgsIDI3NiwgMjg3LCAxODQsICA2MCwgMTk1LAorICAgICA4MiwgIDkzLCAgNzEsIDM2OSwgNDAyLCAxNzMsIDE2MiwgNDQ0LCAzMDAsIDM5MSwKKyAgICAgOTgsICA3NiwgMjc4LCAgNjEsIDI2NywgMzc0LCAxMzUsIDQxMSwgMTY3LCAxMDIsCisgICAgMzgwLCAyMDAsICA4NywgMTc4LCAgNjUsICA5NCwgMjA0LCAxMjQsICA3MiwgMzQyLAorICAgIDE4OSwgMzA1LCAzODEsIDM5NiwgNDMzLCAzMDEsIDIyNiwgNDA3LCAyODksIDIzNywKKyAgICAxMTMsIDIxNSwgMTg1LCAxMjgsIDMwOSwgNDAzLCAxMTYsIDMyMCwgMTk2LCAzMzEsCisgICAgMzcwLCA0MjIsIDE3NCwgIDY0LCAzOTIsICA4MywgNDI1LCAyMTksIDEzNCwgMTg4LAorICAgIDQzMiwgMTEyLCA0MjcsIDEzOSwgMjc5LCAxNjMsIDQzNiwgMjA4LCA0NDcsIDIxOCwKKyAgICAyMzYsIDIyOSwgIDk3LCAyOTQsIDM4NSwgMjMwLCAxNjYsIDI2OCwgMTc3LCA0NDMsCisgICAgMjI1LCA0MjYsIDEwMSwgMjcyLCAxMzgsIDEyNywgMjkwLCAxMTcsIDM0NywgMTk5LAorICAgIDQxNCwgIDk1LCAxNDAsIDI0MCwgNDEwLCAzOTUsIDIwOSwgMTI5LCAyODMsIDM0NiwKKyAgICAxMDUsIDI0MSwgNDM3LCAgODYsIDMwOCwgNDQ4LCAyMDMsIDM0NSwgMTg2LCAxMDcsCisgICAgMjIwLCA0MTUsIDMzNCwgMzE5LCAxMDYsIDMxMywgMTE4LCAxMjMsICA3MywgMjA3LAorICAgIDQyMSwgMjE0LCAzODQsIDM3MywgNDM4LCAgNjIsIDM3MSwgMzQxLCAgNzUsIDQ0OSwKKyAgICAxNjgsIDMyMywgMTY0LCAyNDIsIDQxNiwgMzI0LCAzMDQsIDE5NywgMzM1LCA0MDQsCisgICAgMjcxLCAgNjMsIDE5MSwgMzI1LCAgOTYsIDE2OSwgMjMxLCAyODAsIDMxMiwgMTg3LAorICAgIDQwNiwgIDg0LCAyMDEsIDEwMCwgIDY3LCAzODIsIDE3NSwgMzM2LCAyMDIsIDMzMCwKKyAgICAyNjksIDM5MywgMzc2LCAzODMsIDI5MywgMzA3LCA0MDksIDE3OSwgMjg1LCAzMTQsCisgICAgMzAyLCAzNzIsIDM5OCwgMTkwLCAxODAsICA4OSwgIDk5LCAxMDMsIDIzMiwgIDc4LAorICAgICA4OCwgIDc3LCAxMzYsIDM4NywgMTY1LCAxOTgsIDM5NCwgMTI1LCAxNzYsIDQyOCwKKyAgICAgNzQsIDM3NSwgMjM4LCAyMjcsICA2NiwgMjczLCAyODIsIDE0MSwgMzA2LCA0MTIsCisgICAgMTE0LCAgODUsIDEzMCwgMzQ4LCAxMTksIDI5MSwgMjk2LCAzODYsIDIzMywgMzk3LAorICAgIDMwMywgNDA1LCAyODQsIDQ0NSwgNDIzLCAyMjEsIDIxMCwgMjA1LCA0NTAsIDEwOCwKKyAgICAyNzQsIDQzNCwgMjE2LCAzNDMsIDMzNywgMTQyLCAyNDMsIDMyMSwgNDA4LCA0NTEsCisgICAgMzEwLCAyOTIsIDEyMCwgMTA5LCAyODEsIDQzOSwgMjcwLCA0MjksIDMzMiwgMjk1LAorICAgIDQxOCwgMjExLCAzMTUsIDIyMiwgMzI2LCAxMzEsIDQzMCwgMjQ0LCAzMjcsIDM0OSwKKyAgICA0MTcsIDMxNiwgMTQzLCAzMzgsIDQ0MCwgMjM0LCAxMTAsIDIxMiwgNDUyLCAyNDUsCisgICAgMTIxLCA0MTksIDM1MCwgMjIzLCAxMzIsIDQ0MSwgMzI4LCA0MTMsIDMxNywgMzM5LAorICAgIDEyNiwgMTA0LCAxMzcsIDQ0NiwgMzQ0LCAyMzksIDQzNSwgMTE1LCAzMzMsIDIwNiwKKyAgICAzMjIsIDIxNywgMjI4LCA0MjQsIDQ1MywgMzExLCAzNTEsIDExMSwgNDQyLCAyMjQsCisgICAgMjEzLCAxMjIsIDQzMSwgMzQwLCAyMzUsIDI0NiwgMTMzLCAxNDQsIDQyMCwgMzI5LAorICAgIDMxOAorfTsKKworY29uc3QgcGpfaW50MTZfdCBwam1lZGlhX2NvZGVjX2FtcndiX29yZGVybWFwXzIzODVbXSA9Cit7CisgICAgICAwLCAgIDQsICAgNiwgMTQ1LCAyNTEsIDM2MCwgNDY2LCAgIDcsICAgNSwgICAzLAorICAgICA0NywgIDQ4LCAgNDksICA1MCwgIDUxLCAyNjIsIDI2MywgMjY0LCAyNjUsIDI2NiwKKyAgICAxNDYsIDI1MiwgMzYxLCA0NjcsIDE1MSwgMjU3LCAzNjYsIDQ3MiwgMTQ4LCAyNTQsCisgICAgMzYzLCA0NjksIDE0OSwgMjU1LCAzNjQsIDQ3MCwgMTU2LCAzNzEsIDE1MCwgMjU2LAorICAgIDM2NSwgNDcxLCAxNDcsIDI1MywgMzYyLCA0NjgsICA1MiwgICAyLCAgIDEsIDE1NywKKyAgICAzNzIsIDI2NywgIDE5LCAgMjEsICAxMiwgIDE3LCAgMTgsICAyMCwgIDE2LCAgMjUsCisgICAgIDEzLCAgMTAsICAxNCwgIDI0LCAgMjMsICAyMiwgIDI2LCAgIDgsICAxNSwgIDUzLAorICAgIDI2OCwgIDMxLCAxNTIsIDE1MywgMTU0LCAxNTUsIDI1OCwgMjU5LCAyNjAsIDI2MSwKKyAgICAzNjcsIDM2OCwgMzY5LCAzNzAsIDQ3MywgNDc0LCA0NzUsIDQ3NiwgMTU4LCAzNzMsCisgICAgICA5LCAgMzMsICAxMSwgMTU5LCAzNzQsICA1NCwgMjY5LCAgMjgsICAyNywgMTYwLAorICAgIDM3NSwgIDM0LCAgMzUsICAyOSwgIDQ2LCAgMzIsICAzMCwgIDU1LCAyNzAsICAzNywKKyAgICAgMzYsICAzOSwgIDM4LCAgNDAsIDE2MSwgMzc2LCAgNDEsICA0MiwgIDQzLCAgNDQsCisgICAgIDQ1LCAgNTYsIDE2MiwgMjcxLCAzNzcsIDE4NSwgMTk2LCAxNzQsICA3OSwgIDU3LAorICAgIDQxMSwgIDkwLCAxNjMsIDMwNSwgMzg5LCAzNzgsIDI4MywgIDY4LCAxODcsIDQwMCwKKyAgICAyOTQsIDE5OCwgMzA3LCAgOTIsICA3MCwgMTg2LCA0MTMsIDE3NiwgIDU5LCAgOTEsCisgICAgIDU4LCA0MTIsIDM4MCwgMTY1LCAgODEsIDE2NCwgMjcyLCAxNzUsICA4MCwgNDAxLAorICAgIDQwMiwgMzkwLCAzOTEsIDE5NywgMzA2LCAgNjksIDI3NCwgMjczLCAzNzksIDI4NSwKKyAgICAyOTYsIDI4NCwgMjk1LCAxODgsICA2MCwgMTk5LCAgODIsICA5MywgIDcxLCAzODEsCisgICAgNDE0LCAxNzcsIDE2NiwgNDU2LCAzMDgsIDQwMywgIDk4LCAgNzYsIDI4NiwgIDYxLAorICAgIDI3NSwgMzg2LCAxMzUsIDQyMywgMTcxLCAxMDIsIDM5MiwgMjA0LCAgODcsIDE4MiwKKyAgICAgNjUsICA5NCwgMjA4LCAxMjQsICA3MiwgMzUwLCAxOTMsIDMxMywgMzkzLCA0MDgsCisgICAgNDQ1LCAzMDksIDIzMCwgNDE5LCAyOTcsIDI0MSwgMTEzLCAyMTksIDE4OSwgMTI4LAorICAgIDMxNywgNDE1LCAxMTYsIDMyOCwgMjAwLCAzMzksIDM4MiwgNDM0LCAxNzgsICA2NCwKKyAgICA0MDQsICA4MywgNDM3LCAyMjMsIDEzNCwgMTkyLCA0NDQsIDExMiwgNDM5LCAxMzksCisgICAgMjg3LCAxNjcsIDQ0OCwgMjEyLCA0NTksIDIyMiwgMjQwLCAyMzMsICA5NywgMzAyLAorICAgIDM5NywgMjM0LCAxNzAsIDI3NiwgMTgxLCA0NTUsIDIyOSwgNDM4LCAxMDEsIDI4MCwKKyAgICAxMzgsIDEyNywgMjk4LCAxMTcsIDM1NSwgMjAzLCA0MjYsICA5NSwgMTQwLCAyNDQsCisgICAgNDIyLCA0MDcsIDIxMywgMTI5LCAyOTEsIDM1NCwgMTA1LCAyNDUsIDQ0OSwgIDg2LAorICAgIDMxNiwgNDYwLCAyMDcsIDM1MywgMTkwLCAxMDcsIDIyNCwgNDI3LCAzNDIsIDMyNywKKyAgICAxMDYsIDMyMSwgMTE4LCAxMjMsICA3MywgMjExLCA0MzMsIDIxOCwgMzk2LCAzODUsCisgICAgNDUwLCAgNjIsIDM4MywgMzQ5LCAgNzUsIDQ2MSwgMTcyLCAzMzEsIDE2OCwgMjQ2LAorICAgIDQyOCwgMzMyLCAzMTIsIDIwMSwgMzQzLCA0MTYsIDI3OSwgIDYzLCAxOTUsIDMzMywKKyAgICAgOTYsIDE3MywgMjM1LCAyODgsIDMyMCwgMTkxLCA0MTgsICA4NCwgMjA1LCAxMDAsCisgICAgIDY3LCAzOTQsIDE3OSwgMzQ0LCAyMDYsIDMzOCwgMjc3LCA0MDUsIDM4OCwgMzk1LAorICAgIDMwMSwgMzE1LCA0MjEsIDE4MywgMjkzLCAzMjIsIDMxMCwgMzg0LCA0MTAsIDE5NCwKKyAgICAxODQsICA4OSwgIDk5LCAxMDMsIDIzNiwgIDc4LCAgODgsICA3NywgMTM2LCAzOTksCisgICAgMTY5LCAyMDIsIDQwNiwgMTI1LCAxODAsIDQ0MCwgIDc0LCAzODcsIDI0MiwgMjMxLAorICAgICA2NiwgMjgxLCAyOTAsIDE0MSwgMzE0LCA0MjQsIDExNCwgIDg1LCAxMzAsIDM1NiwKKyAgICAxMTksIDI5OSwgMzA0LCAzOTgsIDIzNywgNDA5LCAzMTEsIDQxNywgMjkyLCA0NTcsCisgICAgNDM1LCAyMjUsIDIxNCwgMjA5LCA0NjIsIDEwOCwgMjgyLCA0NDYsIDIyMCwgMzUxLAorICAgIDM0NSwgMTQyLCAyNDcsIDMyOSwgNDIwLCA0NjMsIDMxOCwgMzAwLCAxMjAsIDEwOSwKKyAgICAyODksIDQ1MSwgMjc4LCA0NDEsIDM0MCwgMzAzLCA0MzAsIDIxNSwgMzIzLCAyMjYsCisgICAgMzM0LCAxMzEsIDQ0MiwgMjQ4LCAzMzUsIDM1NywgNDI5LCAzMjQsIDE0MywgMzQ2LAorICAgIDQ1MiwgMjM4LCAxMTAsIDIxNiwgNDY0LCAyNDksIDEyMSwgNDMxLCAzNTgsIDIyNywKKyAgICAxMzIsIDQ1MywgMzM2LCA0MjUsIDMyNSwgMzQ3LCAxMjYsIDEwNCwgMTM3LCA0NTgsCisgICAgMzUyLCAyNDMsIDQ0NywgMTE1LCAzNDEsIDIxMCwgMzMwLCAyMjEsIDIzMiwgNDM2LAorICAgIDQ2NSwgMzE5LCAzNTksIDExMSwgNDU0LCAyMjgsIDIxNywgMTIyLCA0NDMsIDM0OCwKKyAgICAyMzksIDI1MCwgMTMzLCAxNDQsIDQzMiwgMzM3LCAzMjYKK307CisKKy8qKgorICogQU1SLU5CIGJpdHN0cmVhbSBzZW5zaXRpdml0eSBvcmRlciBtYXBzLgorICovCitjb25zdCBwal9pbnQxNl90KiBjb25zdCBwam1lZGlhX2NvZGVjX2Ftcm5iX29yZGVybWFwc1s4XSA9Cit7CisgICAgcGptZWRpYV9jb2RlY19hbXJuYl9vcmRlcm1hcDQ3NSwKKyAgICBwam1lZGlhX2NvZGVjX2Ftcm5iX29yZGVybWFwNTE1LAorICAgIHBqbWVkaWFfY29kZWNfYW1ybmJfb3JkZXJtYXA1OSwKKyAgICBwam1lZGlhX2NvZGVjX2Ftcm5iX29yZGVybWFwNjcsCisgICAgcGptZWRpYV9jb2RlY19hbXJuYl9vcmRlcm1hcDc0LAorICAgIHBqbWVkaWFfY29kZWNfYW1ybmJfb3JkZXJtYXA3OTUsCisgICAgcGptZWRpYV9jb2RlY19hbXJuYl9vcmRlcm1hcDEwMiwKKyAgICBwam1lZGlhX2NvZGVjX2Ftcm5iX29yZGVybWFwMTIyCit9OworCisvKioKKyAqIEFNUi1XQiBiaXRzdHJlYW0gc2Vuc2l0aXZpdHkgb3JkZXIgbWFwcy4KKyAqLworY29uc3QgcGpfaW50MTZfdCogY29uc3QgcGptZWRpYV9jb2RlY19hbXJ3Yl9vcmRlcm1hcHNbOV0gPQoreworICAgIHBqbWVkaWFfY29kZWNfYW1yd2Jfb3JkZXJtYXBfNjYwLAorICAgIHBqbWVkaWFfY29kZWNfYW1yd2Jfb3JkZXJtYXBfODg1LAorICAgIHBqbWVkaWFfY29kZWNfYW1yd2Jfb3JkZXJtYXBfMTI2NSwKKyAgICBwam1lZGlhX2NvZGVjX2FtcndiX29yZGVybWFwXzE0MjUsCisgICAgcGptZWRpYV9jb2RlY19hbXJ3Yl9vcmRlcm1hcF8xNTg1LAorICAgIHBqbWVkaWFfY29kZWNfYW1yd2Jfb3JkZXJtYXBfMTgyNSwKKyAgICBwam1lZGlhX2NvZGVjX2FtcndiX29yZGVybWFwXzE5ODUsCisgICAgcGptZWRpYV9jb2RlY19hbXJ3Yl9vcmRlcm1hcF8yMzA1LAorICAgIHBqbWVkaWFfY29kZWNfYW1yd2Jfb3JkZXJtYXBfMjM4NQorfTsKKworLyoqCisgKiBDb25zdGFudCBvZiBBTVItTkIgZnJhbWUgbGVuZ3RocyBpbiBieXRlcy4KKyAqLworY29uc3QgcGpfdWludDhfdCAgcGptZWRpYV9jb2RlY19hbXJuYl9mcmFtZWxlblsxNl0gPSAKKyAgICB7MTIsIDEzLCAxNSwgMTcsIDE5LCAyMCwgMjYsIDMxLCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwfTsKKy8qKgorICogQ29uc3RhbnQgb2YgQU1SLU5CIGZyYW1lIGxlbmd0aHMgaW4gYml0cy4KKyAqLworY29uc3QgcGpfdWludDE2X3QgcGptZWRpYV9jb2RlY19hbXJuYl9mcmFtZWxlbmJpdHNbOV0gPSAKKyAgICB7OTUsIDEwMywgMTE4LCAxMzQsIDE0OCwgMTU5LCAyMDQsIDI0NCwgMzl9OworLyoqCisgKiBDb25zdGFudCBvZiBBTVItTkIgYml0cmF0ZXMuCisgKi8KK2NvbnN0IHBqX3VpbnQxNl90IHBqbWVkaWFfY29kZWNfYW1ybmJfYml0cmF0ZXNbOF0gPSAKKyAgICB7NDc1MCwgNTE1MCwgNTkwMCwgNjcwMCwgNzQwMCwgNzk1MCwgMTAyMDAsIDEyMjAwfTsKKworLyoqCisgKiBDb25zdGFudCBvZiBBTVItV0IgZnJhbWUgbGVuZ3RocyBpbiBieXRlcy4KKyAqLworY29uc3QgcGpfdWludDhfdCAgcGptZWRpYV9jb2RlY19hbXJ3Yl9mcmFtZWxlblsxNl0gPSAKKyAgICB7MTcsIDIzLCAzMiwgMzcsIDQwLCA0NiwgNTAsIDU4LCA2MCwgNSwgMCwgMCwgMCwgMCwgMCwgMH07CisvKioKKyAqIENvbnN0YW50IG9mIEFNUi1XQiBmcmFtZSBsZW5ndGhzIGluIGJpdHMuCisgKi8KK2NvbnN0IHBqX3VpbnQxNl90IHBqbWVkaWFfY29kZWNfYW1yd2JfZnJhbWVsZW5iaXRzWzEwXSA9IAorICAgIHsxMzIsIDE3NywgMjUzLCAyODUsIDMxNywgMzY1LCAzOTcsIDQ2MSwgNDc3LCA0MH07CisvKioKKyAqIENvbnN0YW50IG9mIEFNUi1XQiBiaXRyYXRlcy4KKyAqLworY29uc3QgcGpfdWludDE2X3QgcGptZWRpYV9jb2RlY19hbXJ3Yl9iaXRyYXRlc1s5XSA9IAorICAgIHs2NjAwLCA4ODUwLCAxMjY1MCwgMTQyNTAsIDE1ODUwLCAxODI1MCwgMTk4NTAsIDIzMDUwLCAyMzg1MH07CisKKworLyoqCisgKiBUaGlzIHN0cnVjdHVyZSBkZXNjcmliZXMgQU1SIGZyYW1lIGluZm8sIHRvIGJlIGZpdHRlZCBpbnRvICNwam1lZGlhX2ZyYW1lCisgKiBiaXQgaW5mby4KKyAqLworI3ByYWdtYSBwYWNrKDEpCit0eXBlZGVmIHN0cnVjdCBwam1lZGlhX2NvZGVjX2Ftcl9iaXRfaW5mbyB7CisgICAgcGpfdWludDhfdCBmcmFtZV90eXBlOwkvKio8IEFNUiBmcmFtZSB0eXBlLgkJCSovCisgICAgcGpfaW50OF90ICBtb2RlOwkJLyoqPCBBTVIgbW9kZS4JCQkJKi8KKyAgICBwal91aW50OF90IHN0YXJ0X2JpdDsJLyoqPCBGcmFtZSBzdGFydCBiaXQuCQkJKi8KKyAgICBwal91aW50OF90IGdvb2RfcXVhbGl0eToxOwkvKio8IEZsYWcgaWYgZnJhbWUgaXMgZ29vZC9kZWdyYWRlZC4JKi8KKyAgICBwal91aW50OF90IFNUSToxOwkJLyoqPCBTVEkgbW9kZSAoZmlyc3QvdXBkYXRlKS4JCSovCit9IHBqbWVkaWFfY29kZWNfYW1yX2JpdF9pbmZvOworI3ByYWdtYSBwYWNrKCkKKworCisvKioKKyAqIFRoaXMgc3RydWN0dXJlIGRlc2NyaWJlcyBBTVIgc2V0dGluZ3MuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBqbWVkaWFfY29kZWNfYW1yX3BhY2tfc2V0dGluZyB7CisgICAgcGpfdWludDhfdCBhbXJfbmI6MTsJLyoqPCBTZXQgMSBmb3IgQU1SLU5CLCAwIGZvciBBTVItV0IuCSovCisgICAgcGpfdWludDhfdCByZW9yZGVyOjE7CS8qKjwgUmVvcmRlciBiaXRzdHJlYW0gaW50byBkZXNjZW5kaW5nIAorCQkJCSAgICAgc2Vuc2l0aXZpdHkgb3JkZXIgb3IgdmljZSB2ZXJzYS4JKi8KKyAgICBwal91aW50OF90IG9jdGV0X2FsaWduZWQ6MTsJLyoqPCBUUlVFIGlmIHBheWxvYWQgaXMgaW4gb2N0ZXQtYWxpZ25lZCBtb2RlLAorCQkJCSAgICAgRkFMU0UgaWYgcGF5bG9hZCBpcyBpbiBiYW5kd2lkdGggCisJCQkJICAgICBlZmZpY2llbnQgbW9kZS4JCQkqLworICAgIHBqX3VpbnQ4X3QgY21yOjQ7CQkvKio8IENoYW5nZSBNb2RlIFJlcXVlc3QgZm9yIHJlbW90ZQorCQkJCSAgICAgZW5jb2Rlci4JCQkJKi8KK30gcGptZWRpYV9jb2RlY19hbXJfcGFja19zZXR0aW5nOworCisKKy8qKgorICogR2V0IEFNUiBtb2RlIGJhc2VkIG9uIGJpdHJhdGUuCisgKgorICogQHBhcmFtIGJpdHJhdGUgICBBTVIgYml0cmF0ZS4KKyAqCisgKiBAcmV0dXJuCSAgICBBTVIgbW9kZS4KKyAqLworUEpfSU5MSU5FKHBqX2ludDhfdCkgcGptZWRpYV9jb2RlY19hbXJfZ2V0X21vZGUodW5zaWduZWQgYml0cmF0ZSkKK3sKKyAgICBwal9pbnQ4X3QgbW9kZSA9IC0xOworCisgICAgaWYoYml0cmF0ZT09NDc1MCl7CisJbW9kZSA9IDA7CisgICAgfSBlbHNlIGlmKGJpdHJhdGU9PTUxNTApeworCW1vZGUgPSAxOworICAgIH0gZWxzZSBpZihiaXRyYXRlPT01OTAwKXsKKwltb2RlID0gMjsKKyAgICB9IGVsc2UgaWYoYml0cmF0ZT09NjcwMCl7CisJbW9kZSA9IDM7CisgICAgfSBlbHNlIGlmKGJpdHJhdGU9PTc0MDApeworCW1vZGUgPSA0OworICAgIH0gZWxzZSBpZihiaXRyYXRlPT03OTUwKXsKKwltb2RlID0gNTsKKyAgICB9IGVsc2UgaWYoYml0cmF0ZT09MTAyMDApeworCW1vZGUgPSA2OworICAgIH0gZWxzZSBpZihiaXRyYXRlPT0xMjIwMCl7CisJbW9kZSA9IDc7CisKKyAgICAvKiBBTVJXQiAqLworICAgIH0gZWxzZSBpZihiaXRyYXRlPT02NjAwKXsKKwltb2RlID0gMDsKKyAgICB9IGVsc2UgaWYoYml0cmF0ZT09ODg1MCl7CisJbW9kZSA9IDE7CisgICAgfSBlbHNlIGlmKGJpdHJhdGU9PTEyNjUwKXsKKwltb2RlID0gMjsKKyAgICB9IGVsc2UgaWYoYml0cmF0ZT09MTQyNTApeworCW1vZGUgPSAzOworICAgIH0gZWxzZSBpZihiaXRyYXRlPT0xNTg1MCl7CisJbW9kZSA9IDQ7CisgICAgfSBlbHNlIGlmKGJpdHJhdGU9PTE4MjUwKXsKKwltb2RlID0gNTsKKyAgICB9IGVsc2UgaWYoYml0cmF0ZT09MTk4NTApeworCW1vZGUgPSA2OworICAgIH0gZWxzZSBpZihiaXRyYXRlPT0yMzA1MCl7CisJbW9kZSA9IDc7CisgICAgfSBlbHNlIGlmKGJpdHJhdGU9PTIzODUwKXsKKwltb2RlID0gODsKKyAgICB9CisgICAgcmV0dXJuIG1vZGU7Cit9CisKKy8qKgorICogR2V0IEFNUiBtb2RlIGJhc2VkIG9uIGZyYW1lIGxlbmd0aC4KKyAqCisgKiBAcGFyYW0gYW1ybmIJICAgIFNldCB0byBQSl9UUlVFIGZvciBBTVItTkIgZG9tYWluIG9yIFBKX0ZBTFNFIGZvciBBTVItV0IuCisgKiBAcGFyYW0gZnJhbWVfbGVuIFRoZSBmcmFtZSBsZW5ndGguCisgKgorICogQHJldHVybgkgICAgQU1SIG1vZGUuCisgKi8KKworUEpfSU5MSU5FKHBqX2ludDhfdCkgcGptZWRpYV9jb2RlY19hbXJfZ2V0X21vZGUyKHBqX2Jvb2xfdCBhbXJuYiwKKwkJCQkJCSB1bnNpZ25lZCBmcmFtZV9sZW4pCit7CisgICAgaW50IGk7CisKKyAgICBpZiAoYW1ybmIpIHsKKwlmb3IgKGkgPSAwOyBpIDwgOTsgKytpKQorCSAgICBpZiAoZnJhbWVfbGVuID09IHBqbWVkaWFfY29kZWNfYW1ybmJfZnJhbWVsZW5baV0pCisJCXJldHVybiAocGpfaW50OF90KWk7CisgICAgfSBlbHNlIHsKKwlmb3IgKGkgPSAwOyBpIDwgMTA7ICsraSkgeworCSAgICBpZiAoZnJhbWVfbGVuID09IHBqbWVkaWFfY29kZWNfYW1yd2JfZnJhbWVsZW5baV0pCisJCXJldHVybiAocGpfaW50OF90KWk7CisJfQorICAgIH0KKyAgICAKKyAgICBwal9hc3NlcnQoISJJbnZhbGlkIEFNUiBmcmFtZSBsZW5ndGgiKTsKKyAgICByZXR1cm4gLTE7Cit9CisKKy8qKgorICogUHJlcGFyZSBhIGZyYW1lIGJlZm9yZSBwYXNzIGl0IHRvIGRlY29kZXIuIFRoaXMgZnVuY3Rpb24gd2lsbCBkbzoKKyAqIC0gcmVvcmRlciBBTVIgYml0c3RyZWFtIGZyb20gZGVzY2VuZGluZyBzZW5zaXRpdml0eSBvcmRlciBpbnRvIAorICogICBlbmNvZGVyIGJpdHMgb3JkZXIuIFRoaXMgY2FuIGJlIGVuYWJsZWQvZGlzYWJsZWQgdmlhIHBhcmFtIAorICogICAnc2V0dGluZycgYnkgc2V0dGluZy9yZXNldHRpbmcgZmllbGQgJ3Jlb3JkZXInLgorICogLSBhbGlnbiBsZWZ0IHRoZSBzdGFydCBiaXQgKG1ha2UgdGhlIHN0YXJ0X2JpdCB0byBiZSAwKS4KKyAqCisgKiBAcGFyYW0gaW4JICAgIElucHV0IGZyYW1lLgorICogQHBhcmFtIHNldHRpbmcgICBTZXR0aW5ncywgc2VlICNwam1lZGlhX2NvZGVjX2Ftcl9wYWNrX3NldHRpbmcuCisgKiBAcGFyYW0gb3V0CSAgICBPdXRwdXQgZnJhbWUuCisgKgorICogQHJldHVybgkgICAgUEpfU1VDQ0VTUyBvbiBzdWNjZXNzLgorICovCitQSl9JTkxJTkUocGpfc3RhdHVzX3QpIHBqbWVkaWFfY29kZWNfYW1yX3ByZWRlY29kZSgKKwkJCSAgICBjb25zdCBwam1lZGlhX2ZyYW1lICppbiwKKwkJCSAgICBjb25zdCBwam1lZGlhX2NvZGVjX2Ftcl9wYWNrX3NldHRpbmcgKnNldHRpbmcsCisJCQkgICAgcGptZWRpYV9mcmFtZSAqb3V0KQoreworICAgIHBqX2ludDhfdCAgICBhbXJfYml0c1s0NzcgKyA3XSA9IHswfTsKKyAgICBwal9pbnQ4X3QgICAqcF9hbXJfYml0cyA9ICZhbXJfYml0c1swXTsKKworICAgIHBqX3VpbnQ4X3QgICpyID0gKHBqX3VpbnQ4X3QqKSBpbi0+YnVmOyAgLyogcmVhZCBjdXJzb3IgKi8KKyAgICBwal91aW50OF90ICAqdyA9IChwal91aW50OF90Kikgb3V0LT5idWY7IC8qIHdyaXRlIGN1cnNvciAqLworCisgICAgLyogZW52IHZhcnMgZm9yIEFNUiBvciBBTVJXQiAqLworICAgIHBqX3VpbnQ4X3QJCSAgICAgU0lEX0ZUOworICAgIGNvbnN0IHBqX3VpbnQ4X3QJICAgICpmcmFtZWxlbl90Ymw7CisgICAgY29uc3QgcGpfdWludDE2X3QJICAgICpmcmFtZWxlbmJpdF90Ymw7CisgICAgY29uc3QgcGpfdWludDE2X3QJICAgICpiaXRyYXRlX3RibDsKKyAgICBjb25zdCBwal9pbnQxNl90KiBjb25zdCAqb3JkZXJfbWFwczsKKworICAgIHBqbWVkaWFfY29kZWNfYW1yX2JpdF9pbmZvICppbl9pbmZvID0KKwkJCSAgICAocGptZWRpYV9jb2RlY19hbXJfYml0X2luZm8qKSAmaW4tPmJpdF9pbmZvOworICAgIHBqbWVkaWFfY29kZWNfYW1yX2JpdF9pbmZvICpvdXRfaW5mbyA9CisJCQkgICAgKHBqbWVkaWFfY29kZWNfYW1yX2JpdF9pbmZvKikgJm91dC0+Yml0X2luZm87CisKKyAgICB1bnNpZ25lZCBpOworCisgICAgKm91dF9pbmZvID0gKmluX2luZm87CisKKyAgICBpZiAoc2V0dGluZy0+YW1yX25iKSB7CisJU0lEX0ZUCQk9IDg7CisJZnJhbWVsZW5fdGJsCT0gcGptZWRpYV9jb2RlY19hbXJuYl9mcmFtZWxlbjsKKwlmcmFtZWxlbmJpdF90YmwgPSBwam1lZGlhX2NvZGVjX2Ftcm5iX2ZyYW1lbGVuYml0czsKKwliaXRyYXRlX3RibAk9IHBqbWVkaWFfY29kZWNfYW1ybmJfYml0cmF0ZXM7CisJb3JkZXJfbWFwcwk9IHBqbWVkaWFfY29kZWNfYW1ybmJfb3JkZXJtYXBzOworICAgIH0gZWxzZSB7CisJU0lEX0ZUCQk9IDk7CisJZnJhbWVsZW5fdGJsCT0gcGptZWRpYV9jb2RlY19hbXJ3Yl9mcmFtZWxlbjsKKwlmcmFtZWxlbmJpdF90YmwgPSBwam1lZGlhX2NvZGVjX2FtcndiX2ZyYW1lbGVuYml0czsKKwliaXRyYXRlX3RibAk9IHBqbWVkaWFfY29kZWNfYW1yd2JfYml0cmF0ZXM7CisJb3JkZXJfbWFwcwk9IHBqbWVkaWFfY29kZWNfYW1yd2Jfb3JkZXJtYXBzOworICAgIH0KKworICAgIC8qIHVucGFjayBBTVIgYml0c3RyZWFtIGlmIHRoZXJlIGlzIGFueSBkYXRhICovCisgICAgaWYgKGluX2luZm8tPmZyYW1lX3R5cGUgPD0gU0lEX0ZUKSB7CisJaSA9IDA7CisJaWYgKGluX2luZm8tPnN0YXJ0X2JpdCkgeworCSAgICBmb3IgKDsgaSA8ICh1bnNpZ25lZCkoOC1pbl9pbmZvLT5zdGFydF9iaXQpOyArK2kpCisJCSpwX2Ftcl9iaXRzKysgPSAocGpfdWludDhfdCkKKwkJCQkoKCpyID4+ICg3LWluX2luZm8tPnN0YXJ0X2JpdC1pKSkgJiAxKTsKKwkgICAgKytyOworCX0KKwlmb3IoOyBpIDwgZnJhbWVsZW5iaXRfdGJsW2luX2luZm8tPmZyYW1lX3R5cGVdOyBpICs9IDgsICsrcikgeworCSAgICAqcF9hbXJfYml0cysrID0gKHBqX3VpbnQ4X3QpKCgqciA+PiA3KSAmIDEpOworCSAgICAqcF9hbXJfYml0cysrID0gKHBqX3VpbnQ4X3QpKCgqciA+PiA2KSAmIDEpOworCSAgICAqcF9hbXJfYml0cysrID0gKHBqX3VpbnQ4X3QpKCgqciA+PiA1KSAmIDEpOworCSAgICAqcF9hbXJfYml0cysrID0gKHBqX3VpbnQ4X3QpKCgqciA+PiA0KSAmIDEpOworCSAgICAqcF9hbXJfYml0cysrID0gKHBqX3VpbnQ4X3QpKCgqciA+PiAzKSAmIDEpOworCSAgICAqcF9hbXJfYml0cysrID0gKHBqX3VpbnQ4X3QpKCgqciA+PiAyKSAmIDEpOworCSAgICAqcF9hbXJfYml0cysrID0gKHBqX3VpbnQ4X3QpKCgqciA+PiAxKSAmIDEpOworCSAgICAqcF9hbXJfYml0cysrID0gKHBqX3VpbnQ4X3QpKCgqciApICYgMSk7CisJfQorICAgIH0KKworICAgIGlmIChpbl9pbmZvLT5mcmFtZV90eXBlIDwgU0lEX0ZUKSB7CisKKwkvKiBTcGVlY2ggKi8KKwlvdXRfaW5mby0+bW9kZSA9IGluX2luZm8tPmZyYW1lX3R5cGU7CisJb3V0LT5zaXplID0gZnJhbWVsZW5fdGJsW291dF9pbmZvLT5tb2RlXTsKKworCXBqX2J6ZXJvKG91dC0+YnVmLCBvdXQtPnNpemUpOworCisJaWYgKHNldHRpbmctPnJlb3JkZXIpIHsKKwkgICAgY29uc3QgcGpfaW50MTZfdCAqb3JkZXJfbWFwOworCisJICAgIG9yZGVyX21hcCA9IG9yZGVyX21hcHNbb3V0X2luZm8tPm1vZGVdOworCSAgICBmb3IoaSA9IDA7IGkgPCBmcmFtZWxlbmJpdF90Ymxbb3V0X2luZm8tPm1vZGVdOyArK2kpIHsKKwkJaWYgKGFtcl9iaXRzW2ldKSB7CisJCSAgICBwal91aW50MTZfdCBiaXRwb3M7CisJCSAgICBiaXRwb3MgPSBvcmRlcl9tYXBbaV07CisJCSAgICB3W2JpdHBvcz4+M10gfD0gMSA8PCAoNyAtIChiaXRwb3MgJSA4KSk7CisJCX0KKwkgICAgfQorCX0gZWxzZSB7CisJICAgIGZvcihpID0gMDsgaSA8IGZyYW1lbGVuYml0X3RibFtvdXRfaW5mby0+bW9kZV07ICsraSkgeworCQlpZiAoYW1yX2JpdHNbaV0pCisJCSAgICB3W2kgPj4gM10gfD0gMSA8PCAoNyAtIChpICUgOCkpOworCSAgICB9CisJfQorCisgICAgfSBlbHNlIGlmIChpbl9pbmZvLT5mcmFtZV90eXBlID09IFNJRF9GVCkgeworCisJLyogU0lEICovCisJcGpfdWludDhfdCB3X2JpdHB0ciA9IDA7CisJcGpfdWludDhfdCBGVF87CisKKwlpZiAoc2V0dGluZy0+YW1yX25iKQorCSAgICBGVF8gPSAocGpfdWludDhfdCkoKGFtcl9iaXRzWzM2XSA8PCAyKSB8IChhbXJfYml0c1szN10gPDwgMSkgfCAKKwkgICAgICAgICAgICAgICAgICAgICAgIGFtcl9iaXRzWzM4XSk7CisJZWxzZQorCSAgICBGVF8gPSAocGpfdWludDhfdCkoKGFtcl9iaXRzWzM2XSA8PCAzKSB8IChhbXJfYml0c1szN10gPDwgMikgfAorCQkgICAgICAgICAgICAgICAoYW1yX2JpdHNbMzhdIDw8IDEpIHwgYW1yX2JpdHNbMzldKTsKKworCW91dF9pbmZvLT5tb2RlID0gRlRfOworCW91dC0+c2l6ZSA9IDU7CisKKwlwal9iemVybyhvdXQtPmJ1Ziwgb3V0LT5zaXplKTsKKwlmb3IoaSA9IDA7IGkgPCBmcmFtZWxlbmJpdF90YmxbU0lEX0ZUXTsgKytpKSB7CisJICAgIGlmIChhbXJfYml0c1tpXSkKKwkJKncgfD0gKDEgPDwgKDctd19iaXRwdHIpKTsKKworCSAgICBpZiAoKyt3X2JpdHB0ciA9PSA4KSB7CisJCSsrdzsKKwkJd19iaXRwdHIgPSAwOworCSAgICB9CisJfQorCisgICAgfSBlbHNlIHsKKworCS8qIE5PIERBVEEgKi8KKwlvdXQtPnNpemUgPSAwOworCW91dF9pbmZvLT5tb2RlID0gLTE7CisgICAgfQorCisgICAgb3V0X2luZm8tPnN0YXJ0X2JpdCA9IDA7CisKKyAgICByZXR1cm4gUEpfU1VDQ0VTUzsKK30KKworCisvKioKKyAqIFBhY2sgZW5jb2RlZCBBTVIgZnJhbWUocykgaW50byBhbiBSVFAgcGF5bG9hZC4KKyAqCisgKiBAcGFyYW0gZnJhbWVzICAgIEFNUiBmcmFtZXMgdG8gYmUgcGFja2VkLgorICogQHBhcmFtIG5mcmFtZXMgICBOdW1iZXIgb2YgZnJhbWVzIHRvIGJlIHBhY2tlZC4KKyAqIEBwYXJhbSBzZXR0aW5nICAgU2V0dGluZ3MsIHNlZSAjcGptZWRpYV9jb2RlY19hbXJfcGFja19zZXR0aW5nLgorICogQHBhcmFtIHBrdAkgICAgUGF5bG9hZC4KKyAqIEBwYXJhbSBwa3Rfc2l6ZSAgUGF5bG9hZCBzaXplLCBhcyBpbnB1dCB0aGlzIHNwZWNpZmllcyBwYXlsb2FkIG1heGltdW0gc2l6ZSwKKyAqCQkgICAgYXMgb3V0cHV0IHRoaXMgc3BlY2lmaWVzIHBheWxvYWQgcGFja2VkIHNpemUuCisgKgorICogQHJldHVybgkgICAgUEpfU1VDQ0VTUyBvbiBzdWNjZXNzLgorICovCitQSl9JTkxJTkUgKHBqX3N0YXR1c190KSBwam1lZGlhX2NvZGVjX2Ftcl9wYWNrKAorCQkJICAgIGNvbnN0IHBqbWVkaWFfZnJhbWUgZnJhbWVzW10sCisJCQkgICAgdW5zaWduZWQgbmZyYW1lcywKKwkJCSAgICBjb25zdCBwam1lZGlhX2NvZGVjX2Ftcl9wYWNrX3NldHRpbmcgKnNldHRpbmcsCisJCQkgICAgdm9pZCAqcGt0LCAKKwkJCSAgICBwal9zaXplX3QgKnBrdF9zaXplKQoreworICAgIC8qIFdyaXRlIGN1cnNvciAqLworICAgIHBqX3VpbnQ4X3QgKncgPSAocGpfdWludDhfdCopcGt0OworICAgIHBqX3VpbnQ4X3Qgd19iaXRwdHIgPSAwOworCisgICAgLyogUmVhZCBjdXJzb3IgKi8KKyAgICBwal91aW50OF90ICpyOworCisgICAgLyogZW52IHZhcnMgZm9yIEFNUiBvciBBTVJXQiAqLworICAgIHBqX3VpbnQ4X3QJCSAgICAgU0lEX0ZUOworICAgIGNvbnN0IHBqX3VpbnQ4X3QJICAgICpmcmFtZWxlbl90Ymw7CisgICAgY29uc3QgcGpfdWludDE2X3QJICAgICpmcmFtZWxlbmJpdF90Ymw7CisgICAgY29uc3QgcGpfdWludDE2X3QJICAgICpiaXRyYXRlX3RibDsKKyAgICBjb25zdCBwal9pbnQxNl90KiBjb25zdCAqb3JkZXJfbWFwczsKKworICAgIC8qIGZyYW1lIGluZm8gKi8KKyAgICBwam1lZGlhX2NvZGVjX2Ftcl9iaXRfaW5mbyAqaW5mbzsKKworICAgIHVuc2lnbmVkIGksIG1heF9wa3Rfc2l6ZTsKKworICAgIG1heF9wa3Rfc2l6ZSA9ICpwa3Rfc2l6ZTsKKworICAgIGlmIChzZXR0aW5nLT5hbXJfbmIpIHsKKwlTSURfRlQJCT0gODsKKwlmcmFtZWxlbl90YmwJPSBwam1lZGlhX2NvZGVjX2Ftcm5iX2ZyYW1lbGVuOworCWZyYW1lbGVuYml0X3RibCA9IHBqbWVkaWFfY29kZWNfYW1ybmJfZnJhbWVsZW5iaXRzOworCWJpdHJhdGVfdGJsCT0gcGptZWRpYV9jb2RlY19hbXJuYl9iaXRyYXRlczsKKwlvcmRlcl9tYXBzCT0gcGptZWRpYV9jb2RlY19hbXJuYl9vcmRlcm1hcHM7CisgICAgfSBlbHNlIHsKKwlTSURfRlQJCT0gOTsKKwlmcmFtZWxlbl90YmwJPSBwam1lZGlhX2NvZGVjX2FtcndiX2ZyYW1lbGVuOworCWZyYW1lbGVuYml0X3RibCA9IHBqbWVkaWFfY29kZWNfYW1yd2JfZnJhbWVsZW5iaXRzOworCWJpdHJhdGVfdGJsCT0gcGptZWRpYV9jb2RlY19hbXJ3Yl9iaXRyYXRlczsKKwlvcmRlcl9tYXBzCT0gcGptZWRpYV9jb2RlY19hbXJ3Yl9vcmRlcm1hcHM7CisgICAgfQorCisgICAgLyogQ29kZSBNb2RlIFJlcXVlc3QsIDQgYml0cyAqLworICAgICp3ID0gKHBqX3VpbnQ4X3QpKHNldHRpbmctPmNtciA8PCA0KTsKKyAgICB3X2JpdHB0ciA9IDQ7CisgICAgaWYgKHNldHRpbmctPm9jdGV0X2FsaWduZWQpIHsKKwkrK3c7CisJd19iaXRwdHIgPSAwOworICAgIH0KKworICAgIC8qIFRhYmxlIE9mIENvbnRlbnRzLCA2IGJpdHMgZWFjaCAqLworICAgIGZvciAoaSA9IDA7IGkgPCBuZnJhbWVzOyArK2kpIHsKKwlwal91aW50OF90IFRPQywgRlQsIFE7CisJcGpfYm9vbF90IEY7CisKKwlpbmZvID0gKHBqbWVkaWFfY29kZWNfYW1yX2JpdF9pbmZvKikmZnJhbWVzW2ldLmJpdF9pbmZvOworCisJRiA9IChpICE9IG5mcmFtZXMtMSk7CisJRlQgPSBpbmZvLT5mcmFtZV90eXBlOworCVEgID0gKHBqX3VpbnQ4X3QpKGluZm8tPmdvb2RfcXVhbGl0eSA9PSAxKTsKKwlwal9hc3NlcnQoRlQgPD0gU0lEX0ZUIHx8IEZUID09IDE0IHx8IEZUID09IDE1KTsKKworCS8qIENoZWNrIGJ1ZmZlciBhdmFpbGFiaWxpdHkgKi8KKwkqcGt0X3NpemUgPSB3IC0gKHBqX3VpbnQ4X3QqKXBrdCArIDE7CisJUEpfQVNTRVJUX1JFVFVSTigqcGt0X3NpemUgPD0gbWF4X3BrdF9zaXplLCBQSl9FVE9PU01BTEwpOworCisJVE9DID0gKHBqX3VpbnQ4X3QpKChGPDw1KSB8IChGVDw8MSkgfCBRKTsKKwlpZiAod19iaXRwdHIgPT0gMCkgeworCSAgICAqdyA9IChwal91aW50OF90KShUT0M8PDIpOworCSAgICB3X2JpdHB0ciA9IDY7CisJfSBlbHNlIGlmICh3X2JpdHB0ciA9PSAyKSB7CisJICAgICp3KysgfD0gVE9DOworCSAgICB3X2JpdHB0ciA9IDA7CisJfSBlbHNlIGlmICh3X2JpdHB0ciA9PSA0KSB7CisJICAgICp3KysgfD0gVE9DPj4yOworCSAgICAqdyA9IChwal91aW50OF90KShUT0M8PDYpOworCSAgICB3X2JpdHB0ciA9IDI7CisJfSBlbHNlIGlmICh3X2JpdHB0ciA9PSA2KSB7CisJICAgICp3KysgfD0gVE9DPj40OworCSAgICAqdyA9IChwal91aW50OF90KShUT0M8PDQpOworCSAgICB3X2JpdHB0ciA9IDQ7CisJfQorCWlmIChzZXR0aW5nLT5vY3RldF9hbGlnbmVkKSB7CisJICAgICsrdzsKKwkgICAgd19iaXRwdHIgPSAwOworCX0KKyAgICB9CisKKyAgICAvKiBFbmNvZGVkIGRhdGEgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgbmZyYW1lczsgKytpKSB7CisJcGpfaW50OF90IGFtcl9iaXRzWzQ3NyArIDddID0gezB9OworCXBqX2ludDhfdCAqcF9hbXJfYml0cyA9ICZhbXJfYml0c1swXTsKKwl1bnNpZ25lZCBqOworCisJaW5mbyA9IChwam1lZGlhX2NvZGVjX2Ftcl9iaXRfaW5mbyopJmZyYW1lc1tpXS5iaXRfaW5mbzsKKworCS8qIENoZWNrIGJ1ZmZlciBhdmFpbGFiaWxpdHkgKi8KKwkqcGt0X3NpemUgPSB3IC0gKHBqX3VpbnQ4X3QqKXBrdDsKKwlpZiAoaW5mby0+ZnJhbWVfdHlwZSA8PSBTSURfRlQpCisJICAgICpwa3Rfc2l6ZSArPSBmcmFtZWxlbl90YmxbaW5mby0+ZnJhbWVfdHlwZV0gKyAxOworCVBKX0FTU0VSVF9SRVRVUk4oKnBrdF9zaXplIDw9IG1heF9wa3Rfc2l6ZSwgUEpfRVRPT1NNQUxMKTsKKworCS8qIFNraXAgaWYgdGhlcmUgaXMgbm8gZGF0YSAqLworCWlmIChpbmZvLT5mcmFtZV90eXBlID4gU0lEX0ZUKQorCSAgICBjb250aW51ZTsKKworCS8qIFVucGFjayBiaXRzICovCisJciA9IChwal91aW50OF90KikgZnJhbWVzW2ldLmJ1ZjsKKwlqID0gMDsKKwlpZiAoaW5mby0+c3RhcnRfYml0KSB7CisJICAgIGZvciAoOyBqIDwgKHVuc2lnbmVkKSg4LWluZm8tPnN0YXJ0X2JpdCk7ICsraikKKwkJKnBfYW1yX2JpdHMrKyA9IChwal91aW50OF90KQorCQkJCSgoKnIgPj4gKDctaW5mby0+c3RhcnRfYml0LWopKSAmIDEpOworCSAgICArK3I7CisJfQorCWZvcig7IGogPCBmcmFtZWxlbmJpdF90YmxbaW5mby0+ZnJhbWVfdHlwZV07IGorPTgsICsrcikgeworCSAgICAqcF9hbXJfYml0cysrID0gKHBqX3VpbnQ4X3QpKCgqciA+PiA3KSAmIDEpOworCSAgICAqcF9hbXJfYml0cysrID0gKHBqX3VpbnQ4X3QpKCgqciA+PiA2KSAmIDEpOworCSAgICAqcF9hbXJfYml0cysrID0gKHBqX3VpbnQ4X3QpKCgqciA+PiA1KSAmIDEpOworCSAgICAqcF9hbXJfYml0cysrID0gKHBqX3VpbnQ4X3QpKCgqciA+PiA0KSAmIDEpOworCSAgICAqcF9hbXJfYml0cysrID0gKHBqX3VpbnQ4X3QpKCgqciA+PiAzKSAmIDEpOworCSAgICAqcF9hbXJfYml0cysrID0gKHBqX3VpbnQ4X3QpKCgqciA+PiAyKSAmIDEpOworCSAgICAqcF9hbXJfYml0cysrID0gKHBqX3VpbnQ4X3QpKCgqciA+PiAxKSAmIDEpOworCSAgICAqcF9hbXJfYml0cysrID0gKHBqX3VpbnQ4X3QpKCgqciApICYgMSk7CisJfQorCisJaWYgKGluZm8tPmZyYW1lX3R5cGUgPCBTSURfRlQpIHsKKworCSAgICAvKiBTcGVlY2ggKi8KKwkgICAgaWYgKHdfYml0cHRyID09IDApICp3ID0gMDsKKworCSAgICBpZiAoc2V0dGluZy0+cmVvcmRlcikgeworCQljb25zdCBwal9pbnQxNl90ICpvcmRlcl9tYXA7CisKKwkJLyogUHV0IGJpdHMgaW4gdGhlIHBhY2tldCwgc2Vuc2l0aXZpdHkgZGVzY2VuZGluZyBvcmRlcmVkICovCisJCW9yZGVyX21hcCA9IG9yZGVyX21hcHNbaW5mby0+ZnJhbWVfdHlwZV07CisJCWZvcihqID0gMDsgaiA8IGZyYW1lbGVuYml0X3RibFtpbmZvLT5mcmFtZV90eXBlXTsgKytqKSB7CisJCSAgICBpZiAoYW1yX2JpdHNbb3JkZXJfbWFwW2pdXSkKKwkJCSp3IHw9ICgxIDw8ICg3LXdfYml0cHRyKSk7CisKKwkJICAgIGlmICgrK3dfYml0cHRyID09IDgpIHsKKwkJCXdfYml0cHRyID0gMDsKKwkJCSsrdzsKKwkJCSp3ID0gMDsKKwkJICAgIH0KKwkJfQorCSAgICB9IGVsc2UgeworCQlmb3IoaiA9IDA7IGogPCBmcmFtZWxlbmJpdF90YmxbaW5mby0+ZnJhbWVfdHlwZV07ICsraikgeworCQkgICAgaWYgKGFtcl9iaXRzW2pdKQorCQkJKncgfD0gKDEgPDwgKDctd19iaXRwdHIpKTsKKworCQkgICAgaWYgKCsrd19iaXRwdHIgPT0gOCkgeworCQkJd19iaXRwdHIgPSAwOworCQkJKyt3OworCQkJKncgPSAwOworCQkgICAgfQorCQl9CisJICAgIH0KKworCX0gZWxzZSBpZiAoaW5mby0+ZnJhbWVfdHlwZSA9PSBTSURfRlQpIHsKKworCSAgICAvKiBTSUQgKi8KKwkgICAgYW1yX2JpdHNbMzVdIHw9IGluZm8tPlNUSTsKKworCSAgICBpZiAoc2V0dGluZy0+YW1yX25iKSB7CisJCWFtcl9iaXRzWzM2XSA9IChwal91aW50OF90KSgoaW5mby0+bW9kZSA+PiAyKSAmIDEpOworCQlhbXJfYml0c1szN10gPSAocGpfdWludDhfdCkoKGluZm8tPm1vZGUgPj4gMSkgJiAxKTsKKwkJYW1yX2JpdHNbMzhdID0gKHBqX3VpbnQ4X3QpKChpbmZvLT5tb2RlKSAmIDEpOworCSAgICB9IGVsc2UgeworCQlhbXJfYml0c1szNl0gPSAocGpfdWludDhfdCkoKGluZm8tPm1vZGUgPj4gMykgJiAxKTsKKwkJYW1yX2JpdHNbMzddID0gKHBqX3VpbnQ4X3QpKChpbmZvLT5tb2RlID4+IDIpICYgMSk7CisJCWFtcl9iaXRzWzM4XSA9IChwal91aW50OF90KSgoaW5mby0+bW9kZSA+PiAxKSAmIDEpOworCQlhbXJfYml0c1szOV0gPSAocGpfdWludDhfdCkoKGluZm8tPm1vZGUpICYgMSk7CisJICAgIH0KKworCSAgICBpZiAod19iaXRwdHIgPT0gMCkgKncgPSAwOworCSAgICBmb3IoaiA9IDA7IGogPCBmcmFtZWxlbmJpdF90YmxbaW5mby0+ZnJhbWVfdHlwZV07ICsraikgeworCQlpZiAoYW1yX2JpdHNbal0pCisJCSAgICAqdyB8PSAoMSA8PCAoNy13X2JpdHB0cikpOworCisJCWlmICgrK3dfYml0cHRyID09IDgpIHsKKwkJICAgIHdfYml0cHRyID0gMDsKKwkJICAgICsrdzsKKwkJICAgICp3ID0gMDsKKwkJfQorCSAgICB9CisJfQorCisJaWYgKHNldHRpbmctPm9jdGV0X2FsaWduZWQpIHsKKwkgICAgKyt3OworCSAgICB3X2JpdHB0ciA9IDA7CisJfQorICAgIH0KKworICAgICpwa3Rfc2l6ZSA9IHcgLSAocGpfdWludDhfdCopcGt0OworICAgIGlmICh3X2JpdHB0cikKKwkqcGt0X3NpemUgKz0gMTsKKworICAgIHJldHVybiBQSl9TVUNDRVNTOworfQorCisKKy8qKgorICogUGFyc2UgQU1SIHBheWxvYWQgaW50byBmcmFtZXMuCisgKgorICogQHBhcmFtIHBrdAkgICAgUGF5bG9hZC4KKyAqIEBwYXJhbSBwa3Rfc2l6ZSAgUGF5bG9hZCBzaXplLgorICogQHBhcmFtIHRzCSAgICBCYXNlIHRpbWVzdGFtcC4KKyAqIEBwYXJhbSBzZXR0aW5nICAgU2V0dGluZ3MsIHNlZSAjcGptZWRpYV9jb2RlY19hbXJfcGFja19zZXR0aW5nLgorICogQHBhcmFtIGZyYW1lcyAgICBGcmFtZXMgcGFyc2VkLgorICogQHBhcmFtIG5mcmFtZXMgICBOdW1iZXIgb2YgZnJhbWVzIHBhcnNlZC4KKyAqIEBwYXJhbSBjbXIJICAgIENoYW5nZSBNb2RlIFJlcXVlc3QgbWVzc2FnZSBmb3IgbG9jYWwgZW5jb2Rlci4KKyAqCisgKiBAcmV0dXJuCSAgICBQSl9TVUNDRVNTIG9uIHN1Y2Nlc3MuCisgKi8KK1BKX0lOTElORShwal9zdGF0dXNfdCkgcGptZWRpYV9jb2RlY19hbXJfcGFyc2UoCisJCQkgICAgIHZvaWQgKnBrdCwgCisJCQkgICAgIHBqX3NpemVfdCBwa3Rfc2l6ZSwgCisJCQkgICAgIGNvbnN0IHBqX3RpbWVzdGFtcCAqdHMsCisJCQkgICAgIGNvbnN0IHBqbWVkaWFfY29kZWNfYW1yX3BhY2tfc2V0dGluZyogc2V0dGluZywKKwkJCSAgICAgcGptZWRpYV9mcmFtZSBmcmFtZXNbXSwgCisJCQkgICAgIHVuc2lnbmVkICpuZnJhbWVzLAorCQkJICAgICBwal91aW50OF90ICpjbXIpCit7CisgICAgdW5zaWduZWQgY250ID0gMDsKKyAgICBwal90aW1lc3RhbXAgdHNfID0gKnRzOworCisgICAgLyogUmVhZCBjdXJzb3IgKi8KKyAgICBwal91aW50OF90IHJfYml0cHRyID0gMDsKKyAgICBwal91aW50OF90ICpyID0gKHBqX3VpbnQ4X3QqKXBrdDsKKworICAgIC8qIGVudiB2YXJzIGZvciBBTVIgb3IgQU1SV0IgKi8KKyAgICBwal91aW50OF90CQkgICAgIFNJRF9GVDsKKyAgICBjb25zdCBwal91aW50OF90CSAgICAqZnJhbWVsZW5fdGJsOworICAgIGNvbnN0IHBqX3VpbnQxNl90CSAgICAqZnJhbWVsZW5iaXRfdGJsOworICAgIGNvbnN0IHBqX2ludDE2X3QqIGNvbnN0ICpvcmRlcl9tYXBzOworCisgICAgLyogZnJhbWUgaW5mbyAqLworICAgIHBqbWVkaWFfY29kZWNfYW1yX2JpdF9pbmZvICppbmZvOworCisgICAgaWYgKHNldHRpbmctPmFtcl9uYikgeworCVNJRF9GVAkJPSA4OworCWZyYW1lbGVuX3RibAk9IHBqbWVkaWFfY29kZWNfYW1ybmJfZnJhbWVsZW47CisJZnJhbWVsZW5iaXRfdGJsID0gcGptZWRpYV9jb2RlY19hbXJuYl9mcmFtZWxlbmJpdHM7CisJb3JkZXJfbWFwcwk9IHBqbWVkaWFfY29kZWNfYW1ybmJfb3JkZXJtYXBzOworICAgIH0gZWxzZSB7CisJU0lEX0ZUCQk9IDk7CisJZnJhbWVsZW5fdGJsCT0gcGptZWRpYV9jb2RlY19hbXJ3Yl9mcmFtZWxlbjsKKwlmcmFtZWxlbmJpdF90YmwgPSBwam1lZGlhX2NvZGVjX2FtcndiX2ZyYW1lbGVuYml0czsKKwlvcmRlcl9tYXBzCT0gcGptZWRpYV9jb2RlY19hbXJ3Yl9vcmRlcm1hcHM7CisgICAgfQorCisgICAgUEpfVU5VU0VEX0FSRyhwa3Rfc2l6ZSk7CisKKyAgICAvKiBDb2RlIE1vZGUgUmVxdWVzdCwgNCBiaXRzICovCisgICAgKmNtciA9IChwal91aW50OF90KSgoKnIgPj4gNCkgJiAweDBGKTsKKyAgICByX2JpdHB0ciA9IDQ7CisgICAgaWYgKHNldHRpbmctPm9jdGV0X2FsaWduZWQpIHsKKwkrK3I7CisJcl9iaXRwdHIgPSAwOworICAgIH0KKworICAgIC8qIFRhYmxlIE9mIENvbnRlbnRzLCA2IGJpdHMgZWFjaCAqLworICAgIGZvciAoOzspIHsKKwlwal91aW50OF90IFRPQyA9IDA7CisJcGpfdWludDhfdCBGLCBGVCwgUTsKKworCWlmIChyX2JpdHB0ciA9PSAwKSB7CisJICAgIFRPQyA9IChwal91aW50OF90KSgqciA+PiAyKTsKKwkgICAgcl9iaXRwdHIgPSA2OworCX0gZWxzZSBpZiAocl9iaXRwdHIgPT0gMikgeworCSAgICBUT0MgPSAocGpfdWludDhfdCkoKnIrKyAmIDB4M0YpOworCSAgICByX2JpdHB0ciA9IDA7CisJfSBlbHNlIGlmIChyX2JpdHB0ciA9PSA0KSB7CisJICAgIFRPQyA9IChwal91aW50OF90KSgoKnIrKyAmIDB4MGYpIDw8IDIpOworCSAgICBUT0MgfD0gKnIgPj4gNjsKKwkgICAgcl9iaXRwdHIgPSAyOworCX0gZWxzZSBpZiAocl9iaXRwdHIgPT0gNikgeworCSAgICBUT0MgPSAocGpfdWludDhfdCkoKCpyKysgJiAweDAzKSA8PCA0KTsKKwkgICAgVE9DIHw9ICpyID4+IDQ7CisJICAgIHJfYml0cHRyID0gNDsKKwl9CisKKwlGID0gKHBqX3VpbnQ4X3QpKFRPQyA+PiA1KTsKKwlGVCA9IChwal91aW50OF90KSgoVE9DID4+IDEpICYgMHgwRik7CisJUSA9IChwal91aW50OF90KShUT0MgJiAxKTsKKworCWlmIChGVCA+IFNJRF9GVCAmJiBGVCA8IDE0KSB7CisJICAgIHBqX2Fzc2VydCghIkludmFsaWQgQU1SIGZyYW1ldHlwZSwgc3RyZWFtIG1heSBiZSBjb3JydXB0ZWQhIik7CisJICAgIGJyZWFrOworCX0KKworCWlmIChzZXR0aW5nLT5vY3RldF9hbGlnbmVkKSB7CisJICAgICsrcjsKKwkgICAgcl9iaXRwdHIgPSAwOworCX0KKworCS8qIFNldCBmcmFtZSBhdHRyaWJ1dGVzICovCisJaW5mbyA9IChwam1lZGlhX2NvZGVjX2Ftcl9iaXRfaW5mbyopICZmcmFtZXNbY250XS5iaXRfaW5mbzsKKwlpbmZvLT5mcmFtZV90eXBlID0gRlQ7CisJaW5mby0+bW9kZSA9IChwal9pbnQ4X3QpKChGVCA8IFNJRF9GVCk/IEZUIDogLTEpOworCWluZm8tPmdvb2RfcXVhbGl0eSA9IChwal91aW50OF90KShRID09IDEpOworCWluZm8tPnN0YXJ0X2JpdCA9IDA7CisJaW5mby0+U1RJID0gMDsKKwlmcmFtZXNbY250XS50aW1lc3RhbXAgPSB0c187CisJZnJhbWVzW2NudF0udHlwZSA9IFBKTUVESUFfRlJBTUVfVFlQRV9BVURJTzsKKworCS8qIEFNUiBmcmFtZSBsZW5ndGggaXMgMjBtcyAqLworCXRzXy51NjQgKz0gc2V0dGluZy0+YW1yX25iPyAxNjAgOiAzMjA7CisJCisJaWYgKCsrY250ID09ICpuZnJhbWVzIHx8ICFGKQorCSAgICBicmVhazsKKyAgICB9CisgICAgKm5mcmFtZXMgPSBjbnQ7CisKKyAgICBjbnQgPSAwOworCisgICAgLyogU3BlZWNoIGZyYW1lcyAqLworICAgIHdoaWxlIChjbnQgPCAqbmZyYW1lcykgeworCXBqX3VpbnQ4X3QgRlQ7CisKKwlpbmZvID0gKHBqbWVkaWFfY29kZWNfYW1yX2JpdF9pbmZvKikgJmZyYW1lc1tjbnRdLmJpdF9pbmZvOworCUZUID0gaW5mby0+ZnJhbWVfdHlwZTsKKworCWZyYW1lc1tjbnRdLmJ1ZiA9IHI7CisJaW5mby0+c3RhcnRfYml0ID0gcl9iaXRwdHI7CisKKwlpZiAoRlQgPT0gU0lEX0ZUKSB7CisJICAgIHVuc2lnbmVkIHN0aV9iaXRwdHI7CisJICAgIHN0aV9iaXRwdHIgPSByX2JpdHB0ciArIDM1OworCSAgICBpbmZvLT5TVEkgPSAocGpfdWludDhfdCkKKwkJCShyW3N0aV9iaXRwdHIgPj4gM10gPj4gKDcgLSAoc3RpX2JpdHB0ciAlIDgpKSkgJiAxOworCX0KKworCWlmIChzZXR0aW5nLT5vY3RldF9hbGlnbmVkKSB7CisJICAgIHIgKz0gZnJhbWVsZW5fdGJsW0ZUXTsKKwkgICAgZnJhbWVzW2NudF0uc2l6ZSA9IGZyYW1lbGVuX3RibFtGVF07CisJfSBlbHNlIHsKKwkgICAgaWYgKEZUID09IDE0IHx8IEZUID09IDE1KSB7CisJCS8qIE5PIERBVEEgKi8KKwkJZnJhbWVzW2NudF0uc2l6ZSA9IDA7CisJICAgIH0gZWxzZSB7CisJCXVuc2lnbmVkIGFkdl9iaXQ7CisKKwkJYWR2X2JpdCA9IGZyYW1lbGVuYml0X3RibFtGVF0gKyByX2JpdHB0cjsKKwkJciArPSBhZHZfYml0ID4+IDM7CisJCXJfYml0cHRyID0gKHBqX3VpbnQ4X3QpKGFkdl9iaXQgJSA4KTsKKworCQlmcmFtZXNbY250XS5zaXplID0gYWR2X2JpdCA+PiAzOworCQlpZiAocl9iaXRwdHIpCisJCSAgICArK2ZyYW1lc1tjbnRdLnNpemU7CisJICAgIH0KKwl9CisJKytjbnQ7CisgICAgfQorCisgICAgcmV0dXJuIFBKX1NVQ0NFU1M7Cit9CisKKworUEpfRU5EX0RFQ0wKKworLyoqCisgKiBAfQorICovCisKKyNlbmRpZiAvKiBfX1BKTUVESUFfQ09ERUNTX0FNUl9IRUxQRVJfSF9fICovCmRpZmYgLS1naXQgYS9qbmkvbGlicGpzaXAvc291cmNlcy9wam1lZGlhL2luY2x1ZGUvcGptZWRpYS1jb2RlYy9hbXJfc2RwX21hdGNoLmggYi9qbmkvbGlicGpzaXAvc291cmNlcy9wam1lZGlhL2luY2x1ZGUvcGptZWRpYS1jb2RlYy9hbXJfc2RwX21hdGNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2YzNzlhYgotLS0gL2Rldi9udWxsCisrKyBiL2puaS9saWJwanNpcC9zb3VyY2VzL3BqbWVkaWEvaW5jbHVkZS9wam1lZGlhLWNvZGVjL2Ftcl9zZHBfbWF0Y2guaApAQCAtMCwwICsxLDYxIEBACisvKiAkSWQ6IGFtcl9zZHBfbWF0Y2guaCAzOTExIDIwMTEtMTItMTUgMDY6NDU6MjNaIG5hbmFuZyAkICovCisvKiAKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDExIFRlbHV1IEluYy4gKGh0dHA6Ly93d3cudGVsdXUuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDggQmVubnkgUHJpam9ubyA8YmVubnlAcHJpam9uby5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQSAKKyAqLworI2lmbmRlZiBfX1BKTUVESUFfQ09ERUNfQU1SX1NEUF9NQVRDSF9IX18KKyNkZWZpbmUgX19QSk1FRElBX0NPREVDX0FNUl9TRFBfTUFUQ0hfSF9fCisKKworLyoqCisgKiBAZmlsZSBnNzIyMV9zZHBfbWF0Y2guaAorICogQGJyaWVmIFNwZWNpYWwgU0RQIGZvcm1hdCBtYXRjaCBmb3IgQU1SLU5CIGFuZCBBTVItV0IuCisgKi8KKworI2luY2x1ZGUgPHBqbWVkaWEvc2RwX25lZy5oPgorCitQSl9CRUdJTl9ERUNMCisKKworLyogTWF0Y2ggQU1SLU5CIGFuZCBBTVItV0IgZm9ybWF0IGluIHRoZSBTRFAgbWVkaWEgb2ZmZXIgYW5kIGFuc3dlci4gVGhpcworICogZnVuY3Rpb24gd2lsbCBtYXRjaCBzb21lIEFNUiBzZXR0aW5ncyBpbiB0aGUgU0RQIGZvcm1hdCBwYXJhbWV0ZXJzLCBpLmU6CisgKiBvY3RldC1hbGlnbiwgY3JjLCByb2J1c3Qtc29ydGluZywgaW50ZXJsZWF2aW5nLiBOb3RlIHRoYXQsIGZvciBhbnN3ZXJlciwKKyAqIGlmIG9jdGV0LWFsaWduIG1vZGUgbmVlZHMgdG8gYmUgYWRhcHRhYmxlIHRvIG9mZmVyZXIgc2V0dGluZywgYXBwbGljYXRpb24KKyAqIHNob3VsZCBzZXQgI1BKTUVESUFfU0RQX05FR19GTVRfTUFUQ0hfQUxMT1dfTU9ESUZZX0FOU1dFUiBpbiB0aGUgb3B0aW9uLgorICoKKyAqIEBwYXJhbSBwb29sCQlUaGUgbWVtb3J5IHBvb2wuCisgKiBAcGFyYW0gb2ZmZXIJCVRoZSBTRFAgbWVkaWEgb2ZmZXIuCisgKiBAcGFyYW0gb19mbXRfaWR4CUluZGV4IG9mIHRoZSBBTVIgZm9ybWF0IGluIHRoZSBTRFAgbWVkaWEgb2ZmZXIuCisgKiBAcGFyYW0gYW5zd2VyCVRoZSBTRFAgbWVkaWEgYW5zd2VyLgorICogQHBhcmFtIGFfZm10X2lkeAlJbmRleCBvZiB0aGUgQU1SIGZvcm1hdCBpbiB0aGUgU0RQIG1lZGlhIGFuc3dlci4KKyAqIEBwYXJhbSBvcHRpb24JVGhlIGZvcm1hdCBtYXRjaGluZyBvcHRpb24sIHNlZQorICoJCQkjcGptZWRpYV9zZHBfbmVnX2ZtdF9tYXRjaF9mbGFnLgorICoKKyAqIEByZXR1cm4JCVBKX1NVQ0NFU1Mgd2hlbiB0aGUgZm9ybWF0cyBpbiBvZmZlciBhbmQgYW5zd2VyIG1hdGNoLgorICovCitQSl9ERUNMKHBqX3N0YXR1c190KSBwam1lZGlhX2NvZGVjX2Ftcl9tYXRjaF9zZHAoIHBqX3Bvb2xfdCAqcG9vbCwKKwkJCQkJCSAgcGptZWRpYV9zZHBfbWVkaWEgKm9mZmVyLAorCQkJCQkJICB1bnNpZ25lZCBvX2ZtdF9pZHgsCisJCQkJCQkgIHBqbWVkaWFfc2RwX21lZGlhICphbnN3ZXIsCisJCQkJCQkgIHVuc2lnbmVkIGFfZm10X2lkeCwKKwkJCQkJCSAgdW5zaWduZWQgb3B0aW9uKTsKKworCitQSl9FTkRfREVDTAorCisKKyNlbmRpZgkvKiBfX1BKTUVESUFfQ09ERUNfQU1SX1NEUF9NQVRDSF9IX18gKi8KZGlmZiAtLWdpdCBhL2puaS9saWJwanNpcC9zb3VyY2VzL3BqbWVkaWEvaW5jbHVkZS9wam1lZGlhLWNvZGVjL2F1ZGlvX2NvZGVjcy5oIGIvam5pL2xpYnBqc2lwL3NvdXJjZXMvcGptZWRpYS9pbmNsdWRlL3BqbWVkaWEtY29kZWMvYXVkaW9fY29kZWNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYwNWM1YwotLS0gL2Rldi9udWxsCisrKyBiL2puaS9saWJwanNpcC9zb3VyY2VzL3BqbWVkaWEvaW5jbHVkZS9wam1lZGlhLWNvZGVjL2F1ZGlvX2NvZGVjcy5oCkBAIC0wLDAgKzEsOTggQEAKKy8qICRJZDogYXVkaW9fY29kZWNzLmggMzY2NiAyMDExLTA3LTE5IDA4OjQwOjIwWiBuYW5hbmcgJCAqLworLyogCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMSBUZWx1dSBJbmMuIChodHRwOi8vd3d3LnRlbHV1LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBIAorICovCisjaWZuZGVmIF9fUEpNRURJQV9DT0RFQ19BTExfQ09ERUNTX0hfXworI2RlZmluZSBfX1BKTUVESUFfQ09ERUNfQUxMX0NPREVDU19IX18KKworLyoqCisgKiBAZmlsZSBwam1lZGlhLWNvZGVjL2FsbF9jb2RlY3MuaAorICogQGJyaWVmIEhlbHBlciBmdW5jdGlvbiB0byByZWdpc3RlciBhbGwgY29kZWNzCisgKi8KKyNpbmNsdWRlIDxwam1lZGlhL2VuZHBvaW50Lmg+CisjaW5jbHVkZSA8cGptZWRpYS1jb2RlYy9wYXNzdGhyb3VnaC5oPgorCisKK1BKX0JFR0lOX0RFQ0wKKworLyoqCisgKiBAZGVmZ3JvdXAgUEpNRURJQV9DT0RFQ19SRUdJU1RFUl9BTEwgQ29kZWMgcmVnaXN0cmF0aW9uIGhlbHBlcgorICogQGluZ3JvdXAgUEpNRURJQV9DT0RFQ19DT0RFQ1MKKyAqIEBicmllZiBIZWxwZXIgZnVuY3Rpb24gdG8gcmVnaXN0ZXIgYWxsIGNvZGVjcworICogQHsKKyAqCisgKiBIZWxwZXIgZnVuY3Rpb24gdG8gcmVnaXN0ZXIgYWxsIGNvZGVjcyB0aGF0IGFyZSBpbXBsZW1lbnRlZCBpbgorICogUEpNRURJQS1DT0RFQyBsaWJyYXJ5LgorICovCisKKy8qKgorICogQ29kZWMgY29uZmlndXJhdGlvbi4gQ2FsbCAjcGptZWRpYV9hdWRpb19jb2RlY19jb25maWdfZGVmYXVsdCgpIHRvIGluaXRpYWxpemUKKyAqIHRoaXMgc3RydWN0dXJlIHdpdGggdGhlIGRlZmF1bHQgdmFsdWVzLgorICovCit0eXBlZGVmIHN0cnVjdCBwam1lZGlhX2F1ZGlvX2NvZGVjX2NvbmZpZworeworICAgIC8qKiBTcGVleCBjb2RlYyBzZXR0aW5ncy4gU2VlICNwam1lZGlhX2NvZGVjX3NwZWV4X2luaXQoKSBmb3IgbW9yZSBpbmZvICovCisgICAgc3RydWN0IHsKKwl1bnNpZ25lZAlvcHRpb247CQkvKio8IEJpdG1hc2sgb2Ygb3B0aW9ucy4JKi8KKwlpbnQJCXF1YWxpdHk7CS8qKjwgQ29kZWMgcXVhbGl0eS4JCSovCisJaW50CQljb21wbGV4aXR5OwkvKio8IENvZGVjIGNvbXBsZXhpdHkuCQkqLworICAgIH0gc3BlZXg7CisKKyAgICAvKiogaUxCQyBzZXR0aW5ncyAqLworICAgIHN0cnVjdCB7CisJdW5zaWduZWQJbW9kZTsJCS8qKjwgaUxCQyBtb2RlLgkJCSovCisgICAgfSBpbGJjOworCisgICAgLyoqIFBhc3N0aHJvdWdoICovCisgICAgc3RydWN0IHsKKwlwam1lZGlhX2NvZGVjX3Bhc3N0aHJvdWdoX3NldHRpbmcgc2V0dGluZzsgLyoqPCBQYXNzdGhyb3VnaAkqLworICAgIH0gcGFzc3Rocm91Z2g7CisKK30gcGptZWRpYV9hdWRpb19jb2RlY19jb25maWc7CisKKworLyoqCisgKiBJbml0aWFsaXplIHBqbWVkaWFfYXVkaW9fY29kZWNfY29uZmlnIHN0cnVjdHVyZSB3aXRoIGRlZmF1bHQgdmFsdWVzLgorICoKKyAqIEBwYXJhbSBjZmcJCVRoZSBjb2RlYyBjb25maWcgdG8gYmUgaW5pdGlhbGl6ZWQuCisgKi8KK1BKX0RFQ0wodm9pZCkKK3BqbWVkaWFfYXVkaW9fY29kZWNfY29uZmlnX2RlZmF1bHQocGptZWRpYV9hdWRpb19jb2RlY19jb25maWcgKmNmZyk7CisKKy8qKgorICogUmVnaXN0ZXIgYWxsIGtub3duIGF1ZGlvIGNvZGVjcyBpbXBsZW1lbnRlZCBpbiBQSk1FREEtQ09ERUMgbGlicmFyeSB0byB0aGUKKyAqIHNwZWNpZmllZCBtZWRpYSBlbmRwb2ludC4KKyAqCisgKiBAcGFyYW0gZW5kcHQJCVRoZSBtZWRpYSBlbmRwb2ludC4KKyAqIEBwYXJhbSBjCQlPcHRpb25hbCBjb2RlYyBjb25maWd1cmF0aW9uLCBvciBOVUxMIHRvIHVzZSBkZWZhdWx0CisgKiAJCQl2YWx1ZXMuCisgKgorICogQHJldHVybgkJUEpfU1VDQ0VTUyBvbiBzdWNjZXNzIG9yIHRoZSBhcHByb3ByaWF0ZSBlcnJvciBjb2RlLgorICovCitQSl9ERUNMKHBqX3N0YXR1c190KQorcGptZWRpYV9jb2RlY19yZWdpc3Rlcl9hdWRpb19jb2RlY3MocGptZWRpYV9lbmRwdCAqZW5kcHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwam1lZGlhX2F1ZGlvX2NvZGVjX2NvbmZpZyAqYyk7CisKKworLyoqCisgKiBAfSAgUEpNRURJQV9DT0RFQ19SRUdJU1RFUl9BTEwKKyAqLworCisKK1BKX0VORF9ERUNMCisKKyNlbmRpZgkvKiBfX1BKTUVESUFfQ09ERUNfQUxMX0NPREVDU19IX18gKi8KZGlmZiAtLWdpdCBhL2puaS9saWJwanNpcC9zb3VyY2VzL3BqbWVkaWEvaW5jbHVkZS9wam1lZGlhLWNvZGVjL2NvbmZpZy5oIGIvam5pL2xpYnBqc2lwL3NvdXJjZXMvcGptZWRpYS9pbmNsdWRlL3BqbWVkaWEtY29kZWMvY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkzNTBkYgotLS0gL2Rldi9udWxsCisrKyBiL2puaS9saWJwanNpcC9zb3VyY2VzL3BqbWVkaWEvaW5jbHVkZS9wam1lZGlhLWNvZGVjL2NvbmZpZy5oCkBAIC0wLDAgKzEsNDY1IEBACisvKiAkSWQ6IGNvbmZpZy5oIDQzMzEgMjAxMy0wMS0yMyAwNjoxODoxOFogbWluZyAkICovCisvKiAKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDExIFRlbHV1IEluYy4gKGh0dHA6Ly93d3cudGVsdXUuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDggQmVubnkgUHJpam9ubyA8YmVubnlAcHJpam9uby5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQSAKKyAqLworI2lmbmRlZiBfX1BKTUVESUFfQ09ERUNfQ09ORklHX0hfXworI2RlZmluZSBfX1BKTUVESUFfQ09ERUNfQ09ORklHX0hfXworCisvKioKKyAqIEBmaWxlIGNvbmZpZy5oCisgKiBAYnJpZWYgUEpNRURJQS1DT0RFQyBjb21waWxlIHRpbWUgc2V0dGluZ3MKKyAqLworCisvKioKKyAqIEBkZWZncm91cCBwam1lZGlhX2NvZGVjX2NvbmZpZyBQSk1FRElBLUNPREVDIENvbXBpbGUgVGltZSBTZXR0aW5ncworICogQGluZ3JvdXAgUEpNRURJQV9DT0RFQworICogQGJyaWVmIFZhcmlvdXMgY29tcGlsZSB0aW1lIHNldHRpbmdzIHN1Y2ggYXMgdG8gZW5hYmxlL2Rpc2FibGUgY29kZWNzCisgKiBAeworICovCisKKyNpbmNsdWRlIDxwam1lZGlhL3R5cGVzLmg+CisKKy8qCisgKiBJbmNsdWRlIGNvbmZpZ19hdXRvLmggaWYgYXV0b2NvbmYgaXMgdXNlZCAoUEpfQVVUT0NPTkYgaXMgc2V0KQorICovCisjaWYgZGVmaW5lZChQSl9BVVRPQ09ORikKKyMgICBpbmNsdWRlIDxwam1lZGlhLWNvZGVjL2NvbmZpZ19hdXRvLmg+CisjZW5kaWYKKworCisvKioKKyAqIFVubGVzcyBzcGVjaWZpZWQgb3RoZXJ3aXNlLCBMMTYgY29kZWMgaXMgaW5jbHVkZWQgYnkgZGVmYXVsdC4KKyAqLworI2lmbmRlZiBQSk1FRElBX0hBU19MMTZfQ09ERUMKKyMgICBkZWZpbmUgUEpNRURJQV9IQVNfTDE2X0NPREVDICAgIDEKKyNlbmRpZgorCisKKy8qKgorICogVW5sZXNzIHNwZWNpZmllZCBvdGhlcndpc2UsIEdTTSBjb2RlYyBpcyBpbmNsdWRlZCBieSBkZWZhdWx0LgorICovCisjaWZuZGVmIFBKTUVESUFfSEFTX0dTTV9DT0RFQworIyAgIGRlZmluZSBQSk1FRElBX0hBU19HU01fQ09ERUMgICAgMQorI2VuZGlmCisKKworLyoqCisgKiBVbmxlc3Mgc3BlY2lmaWVkIG90aGVyd2lzZSwgU3BlZXggY29kZWMgaXMgaW5jbHVkZWQgYnkgZGVmYXVsdC4KKyAqLworI2lmbmRlZiBQSk1FRElBX0hBU19TUEVFWF9DT0RFQworIyAgIGRlZmluZSBQSk1FRElBX0hBU19TUEVFWF9DT0RFQyAgICAxCisjZW5kaWYKKworLyoqCisgKiBTcGVleCBjb2RlYyBkZWZhdWx0IGNvbXBsZXhpdHkgc2V0dGluZy4KKyAqLworI2lmbmRlZiBQSk1FRElBX0NPREVDX1NQRUVYX0RFRkFVTFRfQ09NUExFWElUWQorIyAgIGRlZmluZSBQSk1FRElBX0NPREVDX1NQRUVYX0RFRkFVTFRfQ09NUExFWElUWSAgIDIKKyNlbmRpZgorCisvKioKKyAqIFNwZWV4IGNvZGVjIGRlZmF1bHQgcXVhbGl0eSBzZXR0aW5nLiBQbGVhc2Ugbm90ZSB0aGF0IHBqc3VhLWxpYiBtYXkgb3ZlcnJpZGUKKyAqIHRoaXMgc2V0dGluZyB2aWEgaXRzIGNvZGVjIHF1YWxpdHkgc2V0dGluZyAoaS5lIFBKU1VBX0RFRkFVTFRfQ09ERUNfUVVBTElUWSkuCisgKi8KKyNpZm5kZWYgUEpNRURJQV9DT0RFQ19TUEVFWF9ERUZBVUxUX1FVQUxJVFkKKyMgICBkZWZpbmUgUEpNRURJQV9DT0RFQ19TUEVFWF9ERUZBVUxUX1FVQUxJVFkJICAgIDgKKyNlbmRpZgorCisKKy8qKgorICogVW5sZXNzIHNwZWNpZmllZCBvdGhlcndpc2UsIGlMQkMgY29kZWMgaXMgaW5jbHVkZWQgYnkgZGVmYXVsdC4KKyAqLworI2lmbmRlZiBQSk1FRElBX0hBU19JTEJDX0NPREVDCisjICAgZGVmaW5lIFBKTUVESUFfSEFTX0lMQkNfQ09ERUMgICAgMQorI2VuZGlmCisKKworLyoqCisgKiBVbmxlc3Mgc3BlY2lmaWVkIG90aGVyd2lzZSwgRy43MjIgY29kZWMgaXMgaW5jbHVkZWQgYnkgZGVmYXVsdC4KKyAqLworI2lmbmRlZiBQSk1FRElBX0hBU19HNzIyX0NPREVDCisjICAgZGVmaW5lIFBKTUVESUFfSEFTX0c3MjJfQ09ERUMgICAgMQorI2VuZGlmCisKKworLyoqCisgKiBEZWZhdWx0IEcuNzIyIGNvZGVjIGVuY29kZXIgYW5kIGRlY29kZXIgbGV2ZWwgYWRqdXN0bWVudC4gVGhlIEcuNzIyCisgKiBzcGVjaWZpZXMgdGhhdCBpdCB1c2VzIDE0IGJpdCBQQ00gZm9yIGlucHV0IGFuZCBvdXRwdXQsIHdoaWxlIFBKTUVESUEKKyAqIG5vcm1hbGx5IHVzZXMgMTYgYml0IFBDTSwgc28gdGhlIGNvbnZlcnNpb24gaXMgZG9uZSBieSBhcHBseWluZworICogbGV2ZWwgYWRqdXN0bWVudC4gSWYgdGhlIHZhbHVlIGlzIG5vbi16ZXJvLCB0aGVuIFBDTSBpbnB1dCBzYW1wbGVzIHRvCisgKiB0aGUgZW5jb2RlciB3aWxsIGJlIHNoaWZ0ZWQgcmlnaHQgYnkgdGhpcyB2YWx1ZSwgYW5kIHNpbWlsYXJseSBQQ00KKyAqIG91dHB1dCBzYW1wbGVzIGZyb20gdGhlIGRlY29kZXIgd2lsbCBiZSBzaGlmdGVkIGxlZnQgYnkgdGhpcyB2YWx1ZS4KKyAqCisgKiBUaGlzIGNhbiBiZSBjaGFuZ2VkIGF0IHJ1bi10aW1lIGFmdGVyIGluaXRpYWxpemF0aW9uIGJ5IGNhbGxpbmcKKyAqICNwam1lZGlhX2NvZGVjX2c3MjJfc2V0X3BjbV9zaGlmdCgpLgorICoKKyAqIERlZmF1bHQ6IDIuCisgKi8KKyNpZm5kZWYgUEpNRURJQV9HNzIyX0RFRkFVTFRfUENNX1NISUZUCisjICAgZGVmaW5lIFBKTUVESUFfRzcyMl9ERUZBVUxUX1BDTV9TSElGVAkgICAgMgorI2VuZGlmCisKKworLyoqCisgKiBTcGVjaWZpZXMgd2hldGhlciBHLjcyMiBQQ00gc2hpZnRpbmcgc2hvdWxkIGJlIHN0b3BwZWQgd2hlbiBjbGlwcGluZworICogZGV0ZWN0ZWQgaW4gdGhlIGRlY29kZXIuIEVuYWJsaW5nIHRoaXMgZmVhdHVyZSBjYW4gYmUgdXNlZnVsIHdoZW4KKyAqIHRhbGtpbmcgdG8gRy43MjIgaW1wbGVtZW50YXRpb24gdGhhdCB1c2VzIDE2IGJpdCBQQ00gZm9yIEcuNzIyIGlucHV0LworICogb3V0cHV0IChmb3IgYW55IHJlYXNvbiBpdCBzZWVtcyB0byB3b3JrKSBhbmQgdGhlIFBDTSBzaGlmdGluZyBjYXVzZXMKKyAqIGF1ZGlvIGNsaXBwaW5nLgorICoKKyAqIFNlZSBhbHNvICNQSk1FRElBX0c3MjJfREVGQVVMVF9QQ01fU0hJRlQuCisgKgorICogRGVmYXVsdDogZW5hYmxlZC4KKyAqLworI2lmbmRlZiBQSk1FRElBX0c3MjJfU1RPUF9QQ01fU0hJRlRfT05fQ0xJUFBJTkcKKyMgICBkZWZpbmUgUEpNRURJQV9HNzIyX1NUT1BfUENNX1NISUZUX09OX0NMSVBQSU5HICAxCisjZW5kaWYKKworCisvKioKKyAqIEVuYWJsZSB0aGUgZmVhdHVyZXMgcHJvdmlkZWQgYnkgSW50ZWwgSVBQIGxpYnJhcmllcywgZm9yIGV4YW1wbGUKKyAqIGNvZGVjcyBzdWNoIGFzIEcuNzI5LCBHLjcyMy4xLCBHLjcyNiwgRy43MjgsIEcuNzIyLjEsIGFuZCBBTVIuCisgKgorICogQnkgZGVmYXVsdCB0aGlzIGlzIGRpc2FibGVkLiBQbGVhc2UgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgaW4KKyAqIGh0dHA6Ly90cmFjLnBqc2lwLm9yZy9yZXBvcy93aWtpL0ludGVsX0lQUF9Db2RlY3Mgb24gaG93IHRvIHNldHVwCisgKiBJbnRlbCBJUFAgd2l0aCBQSk1FRElBLgorICovCisjaWZuZGVmIFBKTUVESUFfSEFTX0lOVEVMX0lQUAorIyAgIGRlZmluZSBQSk1FRElBX0hBU19JTlRFTF9JUFAJCTAKKyNlbmRpZgorCisKKy8qKgorICogVmlzdWFsIFN0dWRpbyBvbmx5OiB3aGVuIHRoaXMgb3B0aW9uIGlzIHNldCwgdGhlIEludGVsIElQUCBsaWJyYXJpZXMKKyAqIHdpbGwgYmUgYXV0b21hdGljYWxseSBsaW5rZWQgdG8gYXBwbGljYXRpb24gdXNpbmcgcHJhZ21hKGNvbW1lbnQpCisgKiBjb25zdHJ1Y3RzLiBUaGlzIGlzIGNvbnZlbmllbnQsIGhvd2V2ZXIgaXQgd2lsbCBvbmx5IGxpbmsgd2l0aAorICogdGhlIHN0dWIgbGlicmFyaWVzIGFuZCB0aGUgSW50ZWwgSVBQIERMTCdzIHdpbGwgYmUgcmVxdWlyZWQgd2hlbgorICogZGlzdHJpYnV0aW5nIHRoZSBhcHBsaWNhdGlvbi4KKyAqCisgKiBJZiBhcHBsaWNhdGlvbiB3YW50cyB0byBsaW5rIHdpdGggdGhlIGRpZmZlcmVudCB0eXBlcyBvZiB0aGUgSW50ZWwgSVBQCisgKiBsaWJyYXJpZXMgKGZvciBleGFtcGxlLCB0aGUgc3RhdGljIGxpYnJhcmllcyksIGl0IG11c3Qgc2V0IHRoaXMgb3B0aW9uCisgKiB0byB6ZXJvIGFuZCBzcGVjaWZ5IHRoZSBJbnRlbCBJUFAgbGlicmFyaWVzIGluIHRoZSBhcHBsaWNhdGlvbidzIGlucHV0CisgKiBsaWJyYXJ5IHNwZWNpZmljYXRpb24gbWFudWFsbHkuCisgKgorICogRGVmYXVsdCAxLgorICovCisjaWZuZGVmIFBKTUVESUFfQVVUT19MSU5LX0lQUF9MSUJTCisjICAgZGVmaW5lIFBKTUVESUFfQVVUT19MSU5LX0lQUF9MSUJTCQkxCisjZW5kaWYKKworCisvKioKKyAqIEVuYWJsZSBJbnRlbCBJUFAgQU1SIGNvZGVjLiBUaGlzIGFsc28gbmVlZHMgdG8gYmUgZW5hYmxlZCB3aGVuIEFNUiBXQgorICogY29kZWMgaXMgZW5hYmxlZC4gVGhpcyBvcHRpb24gaXMgb25seSB1c2VkIHdoZW4gUEpNRURJQV9IQVNfSU5URUxfSVBQIAorICogaXMgZW5hYmxlZC4KKyAqCisgKiBEZWZhdWx0OiAxCisgKi8KKyNpZm5kZWYgUEpNRURJQV9IQVNfSU5URUxfSVBQX0NPREVDX0FNUgorIyAgIGRlZmluZSBQSk1FRElBX0hBU19JTlRFTF9JUFBfQ09ERUNfQU1SCTEKKyNlbmRpZgorCisKKy8qKgorICogRW5hYmxlIEludGVsIElQUCBBTVIgd2lkZWJhbmQgY29kZWMuIFRoZSBQSk1FRElBX0hBU19JTlRFTF9JUFBfQ09ERUNfQU1SCisgKiBvcHRpb24gbXVzdCBhbHNvIGJlIGVuYWJsZWQgdG8gdXNlIHRoaXMgY29kZWMuIFRoaXMgb3B0aW9uIGlzIG9ubHkgdXNlZCAKKyAqIHdoZW4gUEpNRURJQV9IQVNfSU5URUxfSVBQIGlzIGVuYWJsZWQuCisgKgorICogRGVmYXVsdDogMQorICovCisjaWZuZGVmIFBKTUVESUFfSEFTX0lOVEVMX0lQUF9DT0RFQ19BTVJXQgorIyAgIGRlZmluZSBQSk1FRElBX0hBU19JTlRFTF9JUFBfQ09ERUNfQU1SV0IJMQorI2VuZGlmCisKKworLyoqCisgKiBFbmFibGUgSW50ZWwgSVBQIEcuNzI5IGNvZGVjLiBUaGlzIG9wdGlvbiBpcyBvbmx5IHVzZWQgd2hlbgorICogUEpNRURJQV9IQVNfSU5URUxfSVBQIGlzIGVuYWJsZWQuCisgKgorICogRGVmYXVsdDogMQorICovCisjaWZuZGVmIFBKTUVESUFfSEFTX0lOVEVMX0lQUF9DT0RFQ19HNzI5CisjICAgZGVmaW5lIFBKTUVESUFfSEFTX0lOVEVMX0lQUF9DT0RFQ19HNzI5CTEKKyNlbmRpZgorCisKKy8qKgorICogRW5hYmxlIEludGVsIElQUCBHLjcyMy4xIGNvZGVjLiBUaGlzIG9wdGlvbiBpcyBvbmx5IHVzZWQgd2hlbgorICogUEpNRURJQV9IQVNfSU5URUxfSVBQIGlzIGVuYWJsZWQuCisgKgorICogRGVmYXVsdDogMQorICovCisjaWZuZGVmIFBKTUVESUFfSEFTX0lOVEVMX0lQUF9DT0RFQ19HNzIzXzEKKyMgICBkZWZpbmUgUEpNRURJQV9IQVNfSU5URUxfSVBQX0NPREVDX0c3MjNfMQkxCisjZW5kaWYKKworCisvKioKKyAqIEVuYWJsZSBJbnRlbCBJUFAgRy43MjYgY29kZWMuIFRoaXMgb3B0aW9uIGlzIG9ubHkgdXNlZCB3aGVuCisgKiBQSk1FRElBX0hBU19JTlRFTF9JUFAgaXMgZW5hYmxlZC4KKyAqCisgKiBEZWZhdWx0OiAxCisgKi8KKyNpZm5kZWYgUEpNRURJQV9IQVNfSU5URUxfSVBQX0NPREVDX0c3MjYKKyMgICBkZWZpbmUgUEpNRURJQV9IQVNfSU5URUxfSVBQX0NPREVDX0c3MjYJMQorI2VuZGlmCisKKworLyoqCisgKiBFbmFibGUgSW50ZWwgSVBQIEcuNzI4IGNvZGVjLiBUaGlzIG9wdGlvbiBpcyBvbmx5IHVzZWQgd2hlbgorICogUEpNRURJQV9IQVNfSU5URUxfSVBQIGlzIGVuYWJsZWQuCisgKgorICogRGVmYXVsdDogMQorICovCisjaWZuZGVmIFBKTUVESUFfSEFTX0lOVEVMX0lQUF9DT0RFQ19HNzI4CisjICAgZGVmaW5lIFBKTUVESUFfSEFTX0lOVEVMX0lQUF9DT0RFQ19HNzI4CTEKKyNlbmRpZgorCisKKy8qKgorICogRW5hYmxlIEludGVsIElQUCBHLjcyMi4xIGNvZGVjLiBUaGlzIG9wdGlvbiBpcyBvbmx5IHVzZWQgd2hlbgorICogUEpNRURJQV9IQVNfSU5URUxfSVBQIGlzIGVuYWJsZWQuCisgKgorICogRGVmYXVsdDogMQorICovCisjaWZuZGVmIFBKTUVESUFfSEFTX0lOVEVMX0lQUF9DT0RFQ19HNzIyXzEKKyMgICBkZWZpbmUgUEpNRURJQV9IQVNfSU5URUxfSVBQX0NPREVDX0c3MjJfMQkxCisjZW5kaWYKKworLyoqCisgKiBFbmFibGUgUGFzc3Rocm91Z2ggY29kZWNzLgorICoKKyAqIERlZmF1bHQ6IDAKKyAqLworI2lmbmRlZiBQSk1FRElBX0hBU19QQVNTVEhST1VHSF9DT0RFQ1MKKyMgICBkZWZpbmUgUEpNRURJQV9IQVNfUEFTU1RIUk9VR0hfQ09ERUNTCTAKKyNlbmRpZgorCisvKioKKyAqIEVuYWJsZSBBTVIgcGFzc3Rocm91Z2ggY29kZWMuCisgKgorICogRGVmYXVsdDogMQorICovCisjaWZuZGVmIFBKTUVESUFfSEFTX1BBU1NUSFJPVUdIX0NPREVDX0FNUgorIyAgIGRlZmluZSBQSk1FRElBX0hBU19QQVNTVEhST1VHSF9DT0RFQ19BTVIJMQorI2VuZGlmCisKKy8qKgorICogRW5hYmxlIEcuNzI5IHBhc3N0aHJvdWdoIGNvZGVjLgorICoKKyAqIERlZmF1bHQ6IDEKKyAqLworI2lmbmRlZiBQSk1FRElBX0hBU19QQVNTVEhST1VHSF9DT0RFQ19HNzI5CisjICAgZGVmaW5lIFBKTUVESUFfSEFTX1BBU1NUSFJPVUdIX0NPREVDX0c3MjkJMQorI2VuZGlmCisKKy8qKgorICogRW5hYmxlIGlMQkMgcGFzc3Rocm91Z2ggY29kZWMuCisgKgorICogRGVmYXVsdDogMQorICovCisjaWZuZGVmIFBKTUVESUFfSEFTX1BBU1NUSFJPVUdIX0NPREVDX0lMQkMKKyMgICBkZWZpbmUgUEpNRURJQV9IQVNfUEFTU1RIUk9VR0hfQ09ERUNfSUxCQwkxCisjZW5kaWYKKworLyoqCisgKiBFbmFibGUgUENNVSBwYXNzdGhyb3VnaCBjb2RlYy4KKyAqCisgKiBEZWZhdWx0OiAxCisgKi8KKyNpZm5kZWYgUEpNRURJQV9IQVNfUEFTU1RIUk9VR0hfQ09ERUNfUENNVQorIyAgIGRlZmluZSBQSk1FRElBX0hBU19QQVNTVEhST1VHSF9DT0RFQ19QQ01VCTEKKyNlbmRpZgorCisvKioKKyAqIEVuYWJsZSBQQ01BIHBhc3N0aHJvdWdoIGNvZGVjLgorICoKKyAqIERlZmF1bHQ6IDEKKyAqLworI2lmbmRlZiBQSk1FRElBX0hBU19QQVNTVEhST1VHSF9DT0RFQ19QQ01BCisjICAgZGVmaW5lIFBKTUVESUFfSEFTX1BBU1NUSFJPVUdIX0NPREVDX1BDTUEJMQorI2VuZGlmCisKKy8qIElmIHBhc3N0aHJvdWdoIGFuZCBQQ01VL1BDTUEgYXJlIGVuYWJsZWQsIGRpc2FibGUgdGhlIHNvZnR3YXJlCisgKiBHLjcxMSBjb2RlYworICovCisjaWYgUEpNRURJQV9IQVNfUEFTU1RIUk9VR0hfQ09ERUNTICYmIFwKKyAgICAoUEpNRURJQV9IQVNfUEFTU1RIUk9VR0hfQ09ERUNfUENNVSB8fCBQSk1FRElBX0hBU19QQVNTVEhST1VHSF9DT0RFQ19QQ01BKQorIyAgIHVuZGVmIFBKTUVESUFfSEFTX0c3MTFfQ09ERUMKKyMgICBkZWZpbmUgUEpNRURJQV9IQVNfRzcxMV9DT0RFQwkJMAorI2VuZGlmCisKKworLyoqCisgKiBHLjcyMi4xIGNvZGVjIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisgKi8KKyNpZm5kZWYgUEpNRURJQV9IQVNfRzcyMjFfQ09ERUMKKyMgICBkZWZpbmUgUEpNRURJQV9IQVNfRzcyMjFfQ09ERUMJCTAKKyNlbmRpZgorCisvKioKKyAqIEVuYWJsZSBPcGVuQ09SRSBBTVItTkIgY29kZWMuCisgKiBTZWUgaHR0cHM6Ly90cmFjLnBqc2lwLm9yZy9yZXBvcy90aWNrZXQvMTM4OCBmb3Igc29tZSBpbmZvLgorICoKKyAqIERlZmF1bHQ6IDAKKyAqLworI2lmbmRlZiBQSk1FRElBX0hBU19PUEVOQ09SRV9BTVJOQl9DT0RFQworIyAgIGRlZmluZSBQSk1FRElBX0hBU19PUEVOQ09SRV9BTVJOQl9DT0RFQwkwCisjZW5kaWYKKworLyoqCisgKiBFbmFibGUgT3BlbkNPUkUgQU1SLVdCIGNvZGVjLgorICogU2VlIGh0dHBzOi8vdHJhYy5wanNpcC5vcmcvcmVwb3MvdGlja2V0LzE2MDggZm9yIHNvbWUgaW5mby4KKyAqCisgKiBEZWZhdWx0OiAwCisgKi8KKyNpZm5kZWYgUEpNRURJQV9IQVNfT1BFTkNPUkVfQU1SV0JfQ09ERUMKKyMgICBkZWZpbmUgUEpNRURJQV9IQVNfT1BFTkNPUkVfQU1SV0JfQ09ERUMJMAorI2VuZGlmCisKKy8qKgorICogTGluayB3aXRoIGxpYm9wZW5jb3JlLWFtclhYIHZpYSBwcmFnbWEgY29tbWVudCBvbiBWaXN1YWwgU3R1ZGlvLgorICogVGhpcyBvcHRpb24gb25seSBtYWtlcyBzZW5zZSBpZiBQSk1FRElBX0hBU19PUEVOQ09SRV9BTVJOQi9XQl9DT0RFQworICogaXMgZW5hYmxlZC4KKyAqCisgKiBEZWZhdWx0OiAxCisgKi8KKyNpZm5kZWYgUEpNRURJQV9BVVRPX0xJTktfT1BFTkNPUkVfQU1SX0xJQlMKKyMgIGRlZmluZSBQSk1FRElBX0FVVE9fTElOS19PUEVOQ09SRV9BTVJfTElCUwkxCisjZW5kaWYKKworLyoqCisgKiBMaW5rIHdpdGggbGlib3BlbmNvcmUtYW1yWFguYSB0aGF0IGhhcyBiZWVuIHByb2R1Y2VkIHdpdGggZ2NjLgorICogVGhpcyBvcHRpb24gb25seSBtYWtlcyBzZW5zZSBpZiBQSk1FRElBX0hBU19PUEVOQ09SRV9BTVJOQi9XQl9DT0RFQworICogYW5kIFBKTUVESUFfQVVUT19MSU5LX09QRU5DT1JFX0FNUl9MSUJTIGFyZSBlbmFibGVkLgorICoKKyAqIERlZmF1bHQ6IDEKKyAqLworI2lmbmRlZiBQSk1FRElBX09QRU5DT1JFX0FNUl9CVUlMVF9XSVRIX0dDQworIyAgIGRlZmluZSBQSk1FRElBX09QRU5DT1JFX0FNUl9CVUlMVF9XSVRIX0dDQwkxCisjZW5kaWYKKworCisvKioKKyAqIERlZmF1bHQgRy43MjIuMSBjb2RlYyBlbmNvZGVyIGFuZCBkZWNvZGVyIGxldmVsIGFkanVzdG1lbnQuIAorICogSWYgdGhlIHZhbHVlIGlzIG5vbi16ZXJvLCB0aGVuIFBDTSBpbnB1dCBzYW1wbGVzIHRvIHRoZSBlbmNvZGVyIHdpbGwgCisgKiBiZSBzaGlmdGVkIHJpZ2h0IGJ5IHRoaXMgdmFsdWUsIGFuZCBzaW1pbGFybHkgUENNIG91dHB1dCBzYW1wbGVzIGZyb20KKyAqIHRoZSBkZWNvZGVyIHdpbGwgYmUgc2hpZnRlZCBsZWZ0IGJ5IHRoaXMgdmFsdWUuCisgKgorICogVGhpcyBjYW4gYmUgY2hhbmdlZCBhdCBydW4tdGltZSBhZnRlciBpbml0aWFsaXphdGlvbiBieSBjYWxsaW5nCisgKiAjcGptZWRpYV9jb2RlY19nNzIyMV9zZXRfcGNtX3NoaWZ0KCkuCisgKi8KKyNpZm5kZWYgUEpNRURJQV9HNzIyMV9ERUZBVUxUX1BDTV9TSElGVAorIyAgIGRlZmluZSBQSk1FRElBX0c3MjIxX0RFRkFVTFRfUENNX1NISUZUCTEKKyNlbmRpZgorCisKKy8qKgorICogRW5hYmxpbmcgYm90aCBHLjcyMi4xIGNvZGVjIGltcGxlbWVudGF0aW9ucywgaW50ZXJuYWwgUEpNRURJQSBhbmQgSVBQLAorICogbWF5IGNhdXNlIHByb2JsZW0gaW4gU0RQLCBpLmU6IHBheWxvYWQgdHlwZXMgZHVwbGljYXRpb25zLiBTbywgbGV0J3MgCisgKiBqdXN0IHRyYXAgc3VjaCBjYXNlIGhlcmUgYXQgY29tcGlsZSB0aW1lLgorICoKKyAqIEFwcGxpY2F0aW9uIGNhbiBjb250cm9sIHdoaWNoIGltcGxlbWVudGF0aW9uIHRvIGJlIHVzZWQgYnkgbWFuaXB1bGF0aW5nCisgKiBQSk1FRElBX0hBU19HNzIyMV9DT0RFQyBhbmQgUEpNRURJQV9IQVNfSU5URUxfSVBQX0NPREVDX0c3MjJfMSBpbgorICogY29uZmlnX3NpdGUuaC4KKyAqLworI2lmIChQSk1FRElBX0hBU19HNzIyMV9DT0RFQyAhPSAwKSAmJiAoUEpNRURJQV9IQVNfSU5URUxfSVBQICE9IDApICYmIFwKKyAgICAoUEpNRURJQV9IQVNfSU5URUxfSVBQX0NPREVDX0c3MjJfMSAhPSAwKQorIyAgIGVycm9yIE9ubHkgb25lIEcuNzIyLjEgaW1wbGVtZW50YXRpb24gY2FuIGJlIGVuYWJsZWQgYXQgdGhlIHNhbWUgdGltZS4gXAorCSAgUGxlYXNlIHVzZSBQSk1FRElBX0hBU19HNzIyMV9DT0RFQyBhbmQgXAorCSAgUEpNRURJQV9IQVNfSU5URUxfSVBQX0NPREVDX0c3MjJfMSBpbiB5b3VyIGNvbmZpZ19zaXRlLmggXAorCSAgdG8gY29udHJvbCB3aGljaCBpbXBsZW1lbnRhdGlvbiB0byBiZSB1c2VkLgorI2VuZGlmCisKKworLyoqCisgKiBFbmFibGUgU0lMSyBjb2RlYy4KKyAqCisgKiBEZWZhdWx0OiAwCisgKi8KKyNpZm5kZWYgUEpNRURJQV9IQVNfU0lMS19DT0RFQworIyAgIGRlZmluZSBQSk1FRElBX0hBU19TSUxLX0NPREVDCQkwCisjZW5kaWYKKworCisvKioKKyAqIFNJTEsgY29kZWMgZGVmYXVsdCBjb21wbGV4aXR5IHNldHRpbmcsIHZhbGlkIHZhbHVlcyBhcmUgMCAobG93ZXN0KSwgMSwKKyAqIGFuZCAyLgorICoKKyAqIERlZmF1bHQ6IDIKKyAqLworI2lmbmRlZiBQSk1FRElBX0NPREVDX1NJTEtfREVGQVVMVF9DT01QTEVYSVRZCisjICAgZGVmaW5lIFBKTUVESUFfQ09ERUNfU0lMS19ERUZBVUxUX0NPTVBMRVhJVFkgICAyCisjZW5kaWYKKworLyoqCisgKiBTSUxLIGNvZGVjIGRlZmF1bHQgcXVhbGl0eSBzZXR0aW5nLCB2YWxpZCB2YWx1ZXMgYXJlIHJhbmdpbmcgZnJvbQorICogMCAobG93ZXN0KSB0byAxMC4gUGxlYXNlIG5vdGUgdGhhdCBwanN1YS1saWIgbWF5IG92ZXJyaWRlIHRoaXMgc2V0dGluZworICogdmlhIGl0cyBjb2RlYyBxdWFsaXR5IHNldHRpbmcgKGkuZSBQSlNVQV9ERUZBVUxUX0NPREVDX1FVQUxJVFkpLgorICoKKyAqIERlZmF1bHQ6IDEwCisgKi8KKyNpZm5kZWYgUEpNRURJQV9DT0RFQ19TSUxLX0RFRkFVTFRfUVVBTElUWQorIyAgIGRlZmluZSBQSk1FRElBX0NPREVDX1NJTEtfREVGQVVMVF9RVUFMSVRZCSAgICAxMAorI2VuZGlmCisKKworLyoqCisgKiBTcGVjaWZ5IGlmIEZGTVBFRyBjb2RlY3MgYXJlIGF2YWlsYWJsZS4KKyAqCisgKiBEZWZhdWx0OiBQSk1FRElBX0hBU19MSUJBVkNPREVDCisgKi8KKyNpZm5kZWYgUEpNRURJQV9IQVNfRkZNUEVHX0NPREVDCisjICAgZGVmaW5lIFBKTUVESUFfSEFTX0ZGTVBFR19DT0RFQwkJUEpNRURJQV9IQVNfTElCQVZDT0RFQworI2VuZGlmCisKKworLyoqCisgKiBTcGVjaWZ5IGlmIEZGTVBFRyB2aWRlbyBjb2RlY3MgYXJlIGF2YWlsYWJsZS4KKyAqCisgKiBEZWZhdWx0OiBQSk1FRElBX0hBU19GRk1QRUdfQ09ERUMKKyAqLworI2lmbmRlZiBQSk1FRElBX0hBU19GRk1QRUdfVklEX0NPREVDCisjICAgZGVmaW5lIFBKTUVESUFfSEFTX0ZGTVBFR19WSURfQ09ERUMJCVBKTUVESUFfSEFTX0ZGTVBFR19DT0RFQworI2VuZGlmCisKKy8qKgorICogRW5hYmxlIEZGTVBFRyBIMjYzKy9IMjYzLTE5OTggY29kZWMuCisgKgorICogRGVmYXVsdDogMQorICovCisjaWZuZGVmIFBKTUVESUFfSEFTX0ZGTVBFR19DT0RFQ19IMjYzUAorIyAgIGRlZmluZSBQSk1FRElBX0hBU19GRk1QRUdfQ09ERUNfSDI2M1AJUEpNRURJQV9IQVNfRkZNUEVHX1ZJRF9DT0RFQworI2VuZGlmCisKKy8qKgorICogRW5hYmxlIEZGTVBFRyBIMjY0IGNvZGVjIChyZXF1aXJlcyBsaWJ4MjY0KS4KKyAqCisgKiBEZWZhdWx0OiAwCisgKi8KKyNpZm5kZWYgUEpNRURJQV9IQVNfRkZNUEVHX0NPREVDX0gyNjQKKyMgICBkZWZpbmUgUEpNRURJQV9IQVNfRkZNUEVHX0NPREVDX0gyNjQJUEpNRURJQV9IQVNfRkZNUEVHX1ZJRF9DT0RFQworI2VuZGlmCisKKy8qKgorICogQH0KKyAqLworCisKKworI2VuZGlmCS8qIF9fUEpNRURJQV9DT0RFQ19DT05GSUdfSF9fICovCmRpZmYgLS1naXQgYS9qbmkvbGlicGpzaXAvc291cmNlcy9wam1lZGlhL2luY2x1ZGUvcGptZWRpYS1jb2RlYy9jb25maWdfYXV0by5oIGIvam5pL2xpYnBqc2lwL3NvdXJjZXMvcGptZWRpYS9pbmNsdWRlL3BqbWVkaWEtY29kZWMvY29uZmlnX2F1dG8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzFiNzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvam5pL2xpYnBqc2lwL3NvdXJjZXMvcGptZWRpYS9pbmNsdWRlL3BqbWVkaWEtY29kZWMvY29uZmlnX2F1dG8uaApAQCAtMCwwICsxLDkwIEBACisvKiBwam1lZGlhL2luY2x1ZGUvcGptZWRpYS1jb2RlYy9jb25maWdfYXV0by5oLiAgR2VuZXJhdGVkIGZyb20gY29uZmlnX2F1dG8uaC5pbiBieSBjb25maWd1cmUuICAqLworLyogJElkOiBjb25maWdfYXV0by5oLmluIDQzMzEgMjAxMy0wMS0yMyAwNjoxODoxOFogbWluZyAkICovCisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgVGVsdXUgSW5jLiAoaHR0cDovL3d3dy50ZWx1dS5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOCBCZW5ueSBQcmlqb25vIDxiZW5ueUBwcmlqb25vLm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNpZm5kZWYgX19QSk1FRElBX0NPREVDX0NPTkZJR19BVVRPX0hfCisjZGVmaW5lIF9fUEpNRURJQV9DT0RFQ19DT05GSUdfQVVUT19IXworCisvKioKKyAqIEBmaWxlIGNvbmZpZ19hdXRvLmgKKyAqIEBicmllZiBQSk1FRElBLUNPREVDIGNvbmZpZ3VyYXRpb24gYXMgc2V0IGJ5IGF1dG9jb25mIHNjcmlwdAorICovCisKKy8qCisgKiBOb3RlOgorICoJVGhlIGNvbmZpZ3VyYXRpb24gaW4gY29uZmlnX3NpdGUuaCBvdmVycmlkZXMgYW55IG90aGVyIHNldHRpbmdzLAorICoJaW5jbHVkaW5nIHRoZSBzZXR0aW5nIGFzIGRldGVjdGVkIGJ5IGF1dG9jb25mLiAKKyAqLworIAorLyogTDE2IGNvZGVjICovCisjaWZuZGVmIFBKTUVESUFfSEFTX0wxNl9DT0RFQworI2RlZmluZSBQSk1FRElBX0hBU19MMTZfQ09ERUMgMAorI2VuZGlmCisKKworLyogR1NNIGNvZGVjICovCisjaWZuZGVmIFBKTUVESUFfSEFTX0dTTV9DT0RFQworI2RlZmluZSBQSk1FRElBX0hBU19HU01fQ09ERUMgMAorI2VuZGlmCisKKy8qICN1bmRlZiBQSk1FRElBX0VYVEVSTkFMX0dTTV9DT0RFQyAqLworLyogI3VuZGVmIFBKTUVESUFfRVhURVJOQUxfR1NNX0dTTV9IICovCisvKiAjdW5kZWYgUEpNRURJQV9FWFRFUk5BTF9HU01fSCAqLworCisvKiBTcGVleCBjb2RlYyAqLworI2lmbmRlZiBQSk1FRElBX0hBU19TUEVFWF9DT0RFQworI2RlZmluZSBQSk1FRElBX0hBU19TUEVFWF9DT0RFQyAwCisjZW5kaWYKKworLyogI3VuZGVmIFBKTUVESUFfRVhURVJOQUxfU1BFRVhfQ09ERUMgKi8KKworLyogaUxCQyBjb2RlYyAqLworI2lmbmRlZiBQSk1FRElBX0hBU19JTEJDX0NPREVDCisjZGVmaW5lIFBKTUVESUFfSEFTX0lMQkNfQ09ERUMgMAorI2VuZGlmCisKKworLyogRzcyMiBjb2RlYyAqLworI2lmbmRlZiBQSk1FRElBX0hBU19HNzIyX0NPREVDCisjZGVmaW5lIFBKTUVESUFfSEFTX0c3MjJfQ09ERUMgMAorI2VuZGlmCisKKy8qIEc3MjIxIGNvZGVjICovCisjaWZuZGVmIFBKTUVESUFfSEFTX0c3MjIxX0NPREVDCisjZGVmaW5lIFBKTUVESUFfSEFTX0c3MjIxX0NPREVDIDAKKyNlbmRpZgorCisvKiBPcGVuQ09SRSBBTVItTkIgY29kZWMgKi8KKyNpZm5kZWYgUEpNRURJQV9IQVNfT1BFTkNPUkVfQU1STkJfQ09ERUMKKyNkZWZpbmUgUEpNRURJQV9IQVNfT1BFTkNPUkVfQU1STkJfQ09ERUMgMAorI2VuZGlmCisKKy8qIE9wZW5DT1JFIEFNUi1XQiBjb2RlYyAqLworI2lmbmRlZiBQSk1FRElBX0hBU19PUEVOQ09SRV9BTVJXQl9DT0RFQworI2RlZmluZSBQSk1FRElBX0hBU19PUEVOQ09SRV9BTVJXQl9DT0RFQyAwCisjZW5kaWYKKworLyogU0lMSyBjb2RlYyAqLworI2lmbmRlZiBQSk1FRElBX0hBU19TSUxLX0NPREVDCisjZGVmaW5lIFBKTUVESUFfSEFTX1NJTEtfQ09ERUMgMAorI2VuZGlmCisKKyNlbmRpZgkvKiBfX1BKTUVESUFfQ09ERUNfQ09ORklHX0FVVE9fSF8gKi8KKworCmRpZmYgLS1naXQgYS9qbmkvbGlicGpzaXAvc291cmNlcy9wam1lZGlhL2luY2x1ZGUvcGptZWRpYS1jb2RlYy9jb25maWdfYXV0by5oLmluIGIvam5pL2xpYnBqc2lwL3NvdXJjZXMvcGptZWRpYS9pbmNsdWRlL3BqbWVkaWEtY29kZWMvY29uZmlnX2F1dG8uaC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWRhMTEwCi0tLSAvZGV2L251bGwKKysrIGIvam5pL2xpYnBqc2lwL3NvdXJjZXMvcGptZWRpYS9pbmNsdWRlL3BqbWVkaWEtY29kZWMvY29uZmlnX2F1dG8uaC5pbgpAQCAtMCwwICsxLDg5IEBACisvKiAkSWQ6IGNvbmZpZ19hdXRvLmguaW4gNDMzMSAyMDEzLTAxLTIzIDA2OjE4OjE4WiBtaW5nICQgKi8KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBUZWx1dSBJbmMuIChodHRwOi8vd3d3LnRlbHV1LmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA4IEJlbm55IFByaWpvbm8gPGJlbm55QHByaWpvbm8ub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2lmbmRlZiBfX1BKTUVESUFfQ09ERUNfQ09ORklHX0FVVE9fSF8KKyNkZWZpbmUgX19QSk1FRElBX0NPREVDX0NPTkZJR19BVVRPX0hfCisKKy8qKgorICogQGZpbGUgY29uZmlnX2F1dG8uaAorICogQGJyaWVmIFBKTUVESUEtQ09ERUMgY29uZmlndXJhdGlvbiBhcyBzZXQgYnkgYXV0b2NvbmYgc2NyaXB0CisgKi8KKworLyoKKyAqIE5vdGU6CisgKglUaGUgY29uZmlndXJhdGlvbiBpbiBjb25maWdfc2l0ZS5oIG92ZXJyaWRlcyBhbnkgb3RoZXIgc2V0dGluZ3MsCisgKglpbmNsdWRpbmcgdGhlIHNldHRpbmcgYXMgZGV0ZWN0ZWQgYnkgYXV0b2NvbmYuIAorICovCisgCisvKiBMMTYgY29kZWMgKi8KKyNpZm5kZWYgUEpNRURJQV9IQVNfTDE2X0NPREVDCisjdW5kZWYgUEpNRURJQV9IQVNfTDE2X0NPREVDCisjZW5kaWYKKworCisvKiBHU00gY29kZWMgKi8KKyNpZm5kZWYgUEpNRURJQV9IQVNfR1NNX0NPREVDCisjdW5kZWYgUEpNRURJQV9IQVNfR1NNX0NPREVDCisjZW5kaWYKKworI3VuZGVmIFBKTUVESUFfRVhURVJOQUxfR1NNX0NPREVDCisjdW5kZWYgUEpNRURJQV9FWFRFUk5BTF9HU01fR1NNX0gKKyN1bmRlZiBQSk1FRElBX0VYVEVSTkFMX0dTTV9ICisKKy8qIFNwZWV4IGNvZGVjICovCisjaWZuZGVmIFBKTUVESUFfSEFTX1NQRUVYX0NPREVDCisjdW5kZWYgUEpNRURJQV9IQVNfU1BFRVhfQ09ERUMKKyNlbmRpZgorCisjdW5kZWYgUEpNRURJQV9FWFRFUk5BTF9TUEVFWF9DT0RFQworCisvKiBpTEJDIGNvZGVjICovCisjaWZuZGVmIFBKTUVESUFfSEFTX0lMQkNfQ09ERUMKKyN1bmRlZiBQSk1FRElBX0hBU19JTEJDX0NPREVDCisjZW5kaWYKKworCisvKiBHNzIyIGNvZGVjICovCisjaWZuZGVmIFBKTUVESUFfSEFTX0c3MjJfQ09ERUMKKyN1bmRlZiBQSk1FRElBX0hBU19HNzIyX0NPREVDCisjZW5kaWYKKworLyogRzcyMjEgY29kZWMgKi8KKyNpZm5kZWYgUEpNRURJQV9IQVNfRzcyMjFfQ09ERUMKKyN1bmRlZiBQSk1FRElBX0hBU19HNzIyMV9DT0RFQworI2VuZGlmCisKKy8qIE9wZW5DT1JFIEFNUi1OQiBjb2RlYyAqLworI2lmbmRlZiBQSk1FRElBX0hBU19PUEVOQ09SRV9BTVJOQl9DT0RFQworI3VuZGVmIFBKTUVESUFfSEFTX09QRU5DT1JFX0FNUk5CX0NPREVDCisjZW5kaWYKKworLyogT3BlbkNPUkUgQU1SLVdCIGNvZGVjICovCisjaWZuZGVmIFBKTUVESUFfSEFTX09QRU5DT1JFX0FNUldCX0NPREVDCisjdW5kZWYgUEpNRURJQV9IQVNfT1BFTkNPUkVfQU1SV0JfQ09ERUMKKyNlbmRpZgorCisvKiBTSUxLIGNvZGVjICovCisjaWZuZGVmIFBKTUVESUFfSEFTX1NJTEtfQ09ERUMKKyN1bmRlZiBQSk1FRElBX0hBU19TSUxLX0NPREVDCisjZW5kaWYKKworI2VuZGlmCS8qIF9fUEpNRURJQV9DT0RFQ19DT05GSUdfQVVUT19IXyAqLworCisKZGlmZiAtLWdpdCBhL2puaS9saWJwanNpcC9zb3VyY2VzL3BqbWVkaWEvaW5jbHVkZS9wam1lZGlhLWNvZGVjL2ZmbXBlZ192aWRfY29kZWNzLmggYi9qbmkvbGlicGpzaXAvc291cmNlcy9wam1lZGlhL2luY2x1ZGUvcGptZWRpYS1jb2RlYy9mZm1wZWdfdmlkX2NvZGVjcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyMzhhZjIKLS0tIC9kZXYvbnVsbAorKysgYi9qbmkvbGlicGpzaXAvc291cmNlcy9wam1lZGlhL2luY2x1ZGUvcGptZWRpYS1jb2RlYy9mZm1wZWdfdmlkX2NvZGVjcy5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qICRJZDogZmZtcGVnX3ZpZF9jb2RlY3MuaCA0MDQ5IDIwMTItMDQtMTMgMDY6MjQ6MjNaIG1pbmcgJCAqLworLyogCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMSBUZWx1dSBJbmMuIChodHRwOi8vd3d3LnRlbHV1LmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA4IEJlbm55IFByaWpvbm8gPGJlbm55QHByaWpvbm8ub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EgCisgKi8KKyNpZm5kZWYgX19QSk1FRElBX0NPREVDU19GRk1QRUdfVklEX0hfXworI2RlZmluZSBfX1BKTUVESUFfQ09ERUNTX0ZGTVBFR19WSURfSF9fCisKKworI2luY2x1ZGUgPHBqbWVkaWEtY29kZWMvdHlwZXMuaD4KKyNpbmNsdWRlIDxwam1lZGlhL3ZpZF9jb2RlYy5oPgorCitQSl9CRUdJTl9ERUNMCisKKy8qKgorICogQGRlZmdyb3VwIFBKTUVESUFfQ09ERUNfVklEX0ZGTVBFRyBGRm1wZWcgQ29kZWNzCisgKiBAaW5ncm91cCBQSk1FRElBX0NPREVDX1ZJRF9DT0RFQ1MKKyAqIEB7CisgKi8KKworLyoqCisgKiBJbml0aWFsaXplIGFuZCByZWdpc3RlciBGRk1QRUcgdmlkZW8gY29kZWNzIGZhY3RvcnkgdG8gcGptZWRpYSBlbmRwb2ludC4KKyAqCisgKiBAcGFyYW0gbWdyCSAgICBUaGUgdmlkZW8gY29kZWMgbWFuYWdlciBpbnN0YW5jZSB3aGVyZSB0aGlzIGNvZGVjIHdpbGwKKyAqIAkJICAgIGJlIHJlZ2lzdGVyZWQgdG8uIFNwZWNpZnkgTlVMTCB0byB1c2UgZGVmYXVsdCBpbnN0YW5jZQorICogCQkgICAgKGluIHRoYXQgY2FzZSwgYW4gaW5zdGFuY2Ugb2YgdmlkZW8gY29kZWMgbWFuYWdlciBtdXN0CisgKiAJCSAgICBoYXZlIGJlZW4gY3JlYXRlZCBiZWZvcmVoYW5kKS4KKyAqIEBwYXJhbSBwZgkgICAgUG9vbCBmYWN0b3J5LgorICoKKyAqIEByZXR1cm4JICAgIFBKX1NVQ0NFU1Mgb24gc3VjY2Vzcy4KKyAqLworUEpfREVDTChwal9zdGF0dXNfdCkgcGptZWRpYV9jb2RlY19mZm1wZWdfdmlkX2luaXQocGptZWRpYV92aWRfY29kZWNfbWdyICptZ3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwal9wb29sX2ZhY3RvcnkgKnBmKTsKKworCisvKioKKyAqIFVucmVnaXN0ZXIgRkZNUEVHIHZpZGVvIGNvZGVjcyBmYWN0b3J5IGZyb20gdGhlIHZpZGVvIGNvZGVjIG1hbmFnZXIgYW5kCisgKiBkZWluaXRpYWxpemUgdGhlIGNvZGVjcyBsaWJyYXJ5LgorICoKKyAqIEByZXR1cm4JICAgIFBKX1NVQ0NFU1Mgb24gc3VjY2Vzcy4KKyAqLworUEpfREVDTChwal9zdGF0dXNfdCkgcGptZWRpYV9jb2RlY19mZm1wZWdfdmlkX2RlaW5pdCh2b2lkKTsKKworCitQSl9FTkRfREVDTAorCisKKy8qKgorICogQH0KKyAqLworCisjZW5kaWYJLyogX19QSk1FRElBX0NPREVDU19GRk1QRUdfVklEX0hfXyAqLworCmRpZmYgLS1naXQgYS9qbmkvbGlicGpzaXAvc291cmNlcy9wam1lZGlhL2luY2x1ZGUvcGptZWRpYS1jb2RlYy9nNzIyLmggYi9qbmkvbGlicGpzaXAvc291cmNlcy9wam1lZGlhL2luY2x1ZGUvcGptZWRpYS1jb2RlYy9nNzIyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY1YjcyZgotLS0gL2Rldi9udWxsCisrKyBiL2puaS9saWJwanNpcC9zb3VyY2VzL3BqbWVkaWEvaW5jbHVkZS9wam1lZGlhLWNvZGVjL2c3MjIuaApAQCAtMCwwICsxLDEwNCBAQAorLyogJElkOiBnNzIyLmggMzU1MyAyMDExLTA1LTA1IDA2OjE0OjE5WiBuYW5hbmcgJCAqLworLyogCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMSBUZWx1dSBJbmMuIChodHRwOi8vd3d3LnRlbHV1LmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA4IEJlbm55IFByaWpvbm8gPGJlbm55QHByaWpvbm8ub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EgCisgKi8KKyNpZm5kZWYgX19QSk1FRElBX0NPREVDX0c3MjJfSF9fCisjZGVmaW5lIF9fUEpNRURJQV9DT0RFQ19HNzIyX0hfXworCisvKioKKyAqIEBmaWxlIHBqbWVkaWEtY29kZWMvZzcyMi5oCisgKiBAYnJpZWYgRy43MjIgY29kZWMuCisgKi8KKworI2luY2x1ZGUgPHBqbWVkaWEtY29kZWMvdHlwZXMuaD4KKworLyoqCisgKiBAZGVmZ3JvdXAgUEpNRURfRzcyMiBHLjcyMiBDb2RlYworICogQGluZ3JvdXAgUEpNRURJQV9DT0RFQ19DT0RFQ1MKKyAqIEBicmllZiBJbXBsZW1lbnRhdGlvbiBvZiBHLjcyMiBDb2RlYworICogQHsKKyAqCisgKiBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGZ1bmN0aW9ucyB0byBpbml0aWFsaXplIGFuZCByZWdpc3RlciBHLjcyMiBjb2RlYworICogZmFjdG9yeSB0byB0aGUgY29kZWMgbWFuYWdlci4gQWZ0ZXIgdGhlIGNvZGVjIGZhY3RvcnkgaGFzIGJlZW4gcmVnaXN0ZXJlZCwKKyAqIGFwcGxpY2F0aW9uIGNhbiB1c2UgQHJlZiBQSk1FRElBX0NPREVDIEFQSSB0byBtYW5pcHVsYXRlIHRoZSBjb2RlYy4KKyAqCisgKiBUaGUgRy43MjIgaW1wbGVtZW50YXRpb24gdXNlcyAxNi1iaXQgUENNIHdpdGggc2FtcGxpbmcgcmF0ZSAxNjAwMEh6IGFuZCAKKyAqIDIwbXMgZnJhbWUgbGVuZ3RoIHJlc3VsdGluZyBpbiA2NGticHMgYml0cmF0ZS4KKyAqCisgKiBUaGUgRy43MjIgY29kZWMgaW1wbGVtZW50YXRpb24gaXMgcHJvdmlkZWQgYXMgcGFydCBvZiBwam1lZGlhLWNvZGVjCisgKiBsaWJyYXJ5LCBhbmQgZG9lcyBub3QgZGVwZW5kIG9uIGV4dGVybmFsIEcuNzIyIGNvZGVjIGltcGxlbWVudGF0aW9uLgorICoKKyAqIFxzZWN0aW9uIGNvZGVjX3NldHRpbmcgQ29kZWMgU2V0dGluZ3MKKyAqCisgKiBcc3Vic2VjdGlvbiBnZW5lcmFsX3NldHRpbmcgR2VuZXJhbCBTZXR0aW5ncworICoKKyAqIEdlbmVyYWwgY29kZWMgc2V0dGluZ3MgZm9yIHRoaXMgY29kZWMgc3VjaCBhcyBWQUQgYW5kIFBMQyBjYW4gYmUgCisgKiBtYW5pcHVsYXRlZCB0aHJvdWdoIHRoZSA8dHQ+c2V0dGluZzwvdHQ+IGZpZWxkIGluICNwam1lZGlhX2NvZGVjX3BhcmFtLiAKKyAqIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50YXRpb24gb2YgI3BqbWVkaWFfY29kZWNfcGFyYW0gZm9yIG1vcmUgaW5mby4KKyAqCisgKiBcc3Vic2VjdGlvbiBzcGVjaWZpY19zZXR0aW5nIENvZGVjIFNwZWNpZmljIFNldHRpbmdzCisgKgorICogQ3VycmVudGx5IG5vbmUuCisgKi8KKworUEpfQkVHSU5fREVDTAorCisKKy8qKgorICogSW5pdGlhbGl6ZSBhbmQgcmVnaXN0ZXIgRy43MjIgY29kZWMgZmFjdG9yeSB0byBwam1lZGlhIGVuZHBvaW50LgorICoKKyAqIEBwYXJhbSBlbmRwdAkgICAgVGhlIHBqbWVkaWEgZW5kcG9pbnQuCisgKgorICogQHJldHVybgkgICAgUEpfU1VDQ0VTUyBvbiBzdWNjZXNzLgorICovCitQSl9ERUNMKHBqX3N0YXR1c190KSBwam1lZGlhX2NvZGVjX2c3MjJfaW5pdChwam1lZGlhX2VuZHB0ICplbmRwdCk7CisKKworLyoqCisgKiBVbnJlZ2lzdGVyIEcuNzIyIGNvZGVjIGZhY3RvcnkgZnJvbSBwam1lZGlhIGVuZHBvaW50IGFuZCBjbGVhbnVwCisgKiByZXNvdXJjZXMgYWxsb2NhdGVkIGJ5IHRoZSBmYWN0b3J5LgorICoKKyAqIEByZXR1cm4JICAgIFBKX1NVQ0NFU1Mgb24gc3VjY2Vzcy4KKyAqLworUEpfREVDTChwal9zdGF0dXNfdCkgcGptZWRpYV9jb2RlY19nNzIyX2RlaW5pdCh2b2lkKTsKKworCisvKioKKyAqIFNldCB0aGUgRy43MjIgY29kZWMgZW5jb2RlciBhbmQgZGVjb2RlciBsZXZlbCBhZGp1c3RtZW50LgorICogSWYgdGhlIHZhbHVlIGlzIG5vbi16ZXJvLCB0aGVuIFBDTSBpbnB1dCBzYW1wbGVzIHRvIHRoZSBlbmNvZGVyIHdpbGwgCisgKiBiZSBzaGlmdGVkIHJpZ2h0IGJ5IHRoaXMgdmFsdWUsIGFuZCBzaW1pbGFybHkgUENNIG91dHB1dCBzYW1wbGVzIGZyb20KKyAqIHRoZSBkZWNvZGVyIHdpbGwgYmUgc2hpZnRlZCBsZWZ0IGJ5IHRoaXMgdmFsdWUuCisgKgorICogRGVmYXVsdCB2YWx1ZSBpcyBQSk1FRElBX0c3MjJfREVGQVVMVF9QQ01fU0hJRlQuCisgKgorICogQHBhcmFtIHZhbAkJVGhlIHZhbHVlCisgKgorICogQHJldHVybgkJUEpfU1VDQ0VTUyBvbiBzdWNjZXNzLgorICovCitQSl9ERUNMKHBqX3N0YXR1c190KSBwam1lZGlhX2NvZGVjX2c3MjJfc2V0X3BjbV9zaGlmdCh1bnNpZ25lZCB2YWwpOworCisKK1BKX0VORF9ERUNMCisKKworLyoqCisgKiBAfQorICovCisKKyNlbmRpZiAvKiBfX1BKTUVESUFfQ09ERUNfRzcyMl9IX18gKi8KKwpkaWZmIC0tZ2l0IGEvam5pL2xpYnBqc2lwL3NvdXJjZXMvcGptZWRpYS9pbmNsdWRlL3BqbWVkaWEtY29kZWMvZzcyMjEuaCBiL2puaS9saWJwanNpcC9zb3VyY2VzL3BqbWVkaWEvaW5jbHVkZS9wam1lZGlhLWNvZGVjL2c3MjIxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk2ZWVlMgotLS0gL2Rldi9udWxsCisrKyBiL2puaS9saWJwanNpcC9zb3VyY2VzL3BqbWVkaWEvaW5jbHVkZS9wam1lZGlhLWNvZGVjL2c3MjIxLmgKQEAgLTAsMCArMSwxNjIgQEAKKy8qICRJZDogZzcyMjEuaCAzNTUzIDIwMTEtMDUtMDUgMDY6MTQ6MTlaIG5hbmFuZyAkICovCisvKiAKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDExIFRlbHV1IEluYy4gKGh0dHA6Ly93d3cudGVsdXUuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDggQmVubnkgUHJpam9ubyA8YmVubnlAcHJpam9uby5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQSAKKyAqLworI2lmbmRlZiBfX1BKTUVESUFfQ09ERUNTX0c3MjIxX0hfXworI2RlZmluZSBfX1BKTUVESUFfQ09ERUNTX0c3MjIxX0hfXworCisvKioKKyAqIEBmaWxlIHBqbWVkaWEtY29kZWMvZzcyMjEuaAorICogQGJyaWVmIEc3MjIuMSBjb2RlYy4KKyAqLworCisjaW5jbHVkZSA8cGptZWRpYS1jb2RlYy90eXBlcy5oPgorCisvKioKKyAqIEBkZWZncm91cCBQSk1FRF9HNzIyMV9DT0RFQyBHLjcyMi4xIENvZGVjIChTaXJlbjcvU2lyZW4xNCkKKyAqIEBpbmdyb3VwIFBKTUVESUFfQ09ERUNfQ09ERUNTCisgKiBAYnJpZWYgSW1wbGVtZW50YXRpb24gb2YgRy43MjIuMSBjb2RlYworICogQHsKKyAqCisgKiA8Yj5HLjcyMi4xIGxpY2Vuc2VkIGZyb20gUG9seWNvba48L2I+PGJyIC8+CisgKiA8Yj5HLjcyMi4xIEFubmV4IEMgbGljZW5zZWQgZnJvbSBQb2x5Y29trjwvYj4KKyAqCisgKiBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGZ1bmN0aW9ucyB0byBpbml0aWFsaXplIGFuZCByZWdpc3RlciBHLjcyMi4xIGNvZGVjCisgKiBmYWN0b3J5IHRvIHRoZSBjb2RlYyBtYW5hZ2VyLiBBZnRlciB0aGUgY29kZWMgZmFjdG9yeSBoYXMgYmVlbiByZWdpc3RlcmVkLAorICogYXBwbGljYXRpb24gY2FuIHVzZSBAcmVmIFBKTUVESUFfQ09ERUMgQVBJIHRvIG1hbmlwdWxhdGUgdGhlIGNvZGVjLgorICoKKyAqIFBKTUVESUEgRzcyMi4xIGNvZGVjIGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uIElUVS1UIFJlY29tbWVuZGF0aW9uIAorICogRy43MjIuMSAoMDUvMjAwNSkgQyBmaXhlZCBwb2ludCBpbXBsZW1lbnRhdGlvbiBpbmNsdWRpbmcgaXRzIEFubmV4IEMuCisgKgorICogRy43MjIuMSBpcyBhIGxvdyBjb21wbGV4aXR5IGNvZGVjIHRoYXQgc3VwcG9ydHMgN2tIeiBhbmQgMTRrSHogYXVkaW8gCisgKiBiYW5kd2lkdGggd29ya2luZyBhdCBiaXRyYXRlcyByYW5naW5nIGZyb20gMTZrYnBzIHRvIDQ4a2Jwcy4gSXQgbWF5IGJlCisgKiB1c2VkIHdpdGggc3BlZWNoIG9yIG11c2ljIGlucHV0cy4KKyAqCisgKgorICogXHNlY3Rpb24gY29kZWNfc2V0dGluZyBDb2RlYyBTZXR0aW5ncworICoKKyAqIFxzdWJzZWN0aW9uIGdlbmVyYWxfc2V0dGluZyBHZW5lcmFsIFNldHRpbmdzCisgKgorICogR2VuZXJhbCBjb2RlYyBzZXR0aW5ncyBmb3IgdGhpcyBjb2RlYyBzdWNoIGFzIFZBRCBhbmQgUExDIGNhbiBiZSAKKyAqIG1hbmlwdWxhdGVkIHRocm91Z2ggdGhlIDx0dD5zZXR0aW5nPC90dD4gZmllbGQgaW4gI3BqbWVkaWFfY29kZWNfcGFyYW0uIAorICogUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnRhdGlvbiBvZiAjcGptZWRpYV9jb2RlY19wYXJhbSBmb3IgbW9yZSBpbmZvLgorICoKKyAqIFxzdWJzZWN0aW9uIHNwZWNpZmljX3NldHRpbmcgQ29kZWMgU3BlY2lmaWMgU2V0dGluZ3MKKyAqCisgKiBUaGUgZm9sbG93aW5nIHNldHRpbmdzIGFyZSBhcHBsaWNhYmxlIGZvciB0aGlzIGNvZGVjLgorICoKKyAqIFxzdWJzdWJzZWN0aW9uIGJpdHJhdGUgQml0cmF0ZQorICoKKyAqIFRoZSBjb2RlYyBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cyBzdGFuZGFyZCBhbmQgbm9uLXN0YW5kYXJkIGJpdHJhdGVzLgorICogVXNlICNwam1lZGlhX2NvZGVjX2c3MjIxX3NldF9tb2RlKCkgdG8gZW5hYmxlIG9yIGRpc2FibGUgdGhlIGJpdHJhdGVzLgorICoKKyAqIEJ5IGRlZmF1bHQsIG9ubHkgc3RhbmRhcmQgYml0cmF0ZXMgYXJlIGVuYWJsZWQgdXBvbiBpbml0aWFsaXphdGlvbjoKKyAqIC0gZm9yIDdrSHogYXVkaW8gYmFuZHdpZHRoICgxNmtIeiBzYW1wbGluZyByYXRlKTogMjRrYnBzIGFuZCAzMmticHMsCisgKiAtIGZvciAxNGtIeiBhdWRpbyBiYW5kd2lkdGggKDMya0h6IHNhbXBsaW5nIHJhdGUpOiAyNGticHMsIDMya2JwcywgYW5kCisgKiAgIDQ4a2Jwcy4KKyAqCisgKiBUaGUgdXNhZ2Ugb2Ygbm9uLXN0YW5kYXJkIGJpdHJhdGVzIG11c3QgZm9sbG93IHRoZXNlIHJlcXVpcmVtZW50czoKKyAqIC0gZm9yIDdrSHogYXVkaW8gYmFuZHdpZHRoICgxNmtIeiBzYW1wbGluZyByYXRlKTogMTYwMDAgdG8gMzIwMDAgYnBzLCAKKyAqICAgbXVsdGlwbGljYXRpb24gb2YgNDAwCisgKiAtIGZvciAxNGtIeiBhdWRpbyBiYW5kd2lkdGggKDMya0h6IHNhbXBsaW5nIHJhdGUpOiAyNDAwMCB0byA0ODAwMCBicHMsCisgKiAgIG11bHRpcGxpY2F0aW9uIG9mIDQwMAorICoKKyAqIFxub3RlCisgKiBDdXJyZW50bHkgb25seSB1cCB0byB0d28gbm9uLXN0YW5kYXJkIG1vZGVzIGNhbiBiZSBlbmFibGVkLgorICoKKyAqIFxyZW1hcmsKKyAqIFRoZXJlIGlzIGEgZmxhdyBpbiB0aGUgY29kZWMgbWFuYWdlciBhcyBjdXJyZW50bHkgaXQgY291bGQgbm90CisgKiBkaWZmZXJlbnRpYXRlIEcuNzIyLjEgY29kZWNzIGJ5IGJpdHJhdGVzLCBoZW5jZSBpbnZva2luZyAKKyAqICNwam1lZGlhX2NvZGVjX21ncl9zZXRfZGVmYXVsdF9wYXJhbSgpIG1heSBvbmx5IGFmZmVjdCBhIEcuNzIyLjEgY29kZWMKKyAqIHdpdGggdGhlIGhpZ2hlc3QgcHJpb3JpdHkgKG9yIGZpcnN0IGluZGV4IGZvdW5kIGluIGNvZGVjIGVudW1lcmF0aW9uIAorICogd2hlbiB0aGV5IGhhdmUgc2FtZSBwcmlvcml0eSkgYW5kIGludm9raW5nCisgKiAjcGptZWRpYV9jb2RlY19tZ3Jfc2V0X2NvZGVjX3ByaW9yaXR5KCkgd2lsbCBzZXQgcHJpb3JpdHkgb2YgYWxsIEcuNzIyLjEKKyAqIGNvZGVjcyB3aXRoIHNhbXBsaW5nIHJhdGUgYXMgc3BlY2lmaWVkLgorICovCisKK1BKX0JFR0lOX0RFQ0wKKworLyoqCisgKiBJbml0aWFsaXplIGFuZCByZWdpc3RlciBHLjcyMi4xIGNvZGVjIGZhY3RvcnkgdG8gcGptZWRpYSBlbmRwb2ludC4KKyAqCisgKiBAcGFyYW0gZW5kcHQJICAgIFRoZSBwam1lZGlhIGVuZHBvaW50LgorICoKKyAqIEByZXR1cm4JICAgIFBKX1NVQ0NFU1Mgb24gc3VjY2Vzcy4KKyAqLworUEpfREVDTChwal9zdGF0dXNfdCkgcGptZWRpYV9jb2RlY19nNzIyMV9pbml0KCBwam1lZGlhX2VuZHB0ICplbmRwdCApOworCisKKy8qKgorICogRW5hYmxlIGFuZCBkaXNhYmxlIEcuNzIyLjEgbW9kZS4gQnkgZGVmYXVsdCwgdGhlIHN0YW5kYXJkIG1vZGVzIGFyZSAKKyAqIGVuYWJsZWQgdXBvbiBpbml0aWFsaXphdGlvbiwgaS5lLjoKKyAqIC0gc2FtcGxpbmcgcmF0ZSAxNmtIeiwgYml0cmF0ZSAyNGticHMgYW5kIDMya2Jwcy4KKyAqIC0gc2FtcGxpbmcgcmF0ZSAzMmtIeiwgYml0cmF0ZSAyNGticHMsIDMya2JwcywgYW5kIDQ4a2Jwcy4KKyAqIFRoaXMgZnVuY3Rpb24gY2FuIGFsc28gYmUgdXNlZCBmb3IgZW5hYmxpbmcgbm9uLXN0YW5kYXJkIG1vZGVzLgorICogTm90ZSB0aGF0IGN1cnJlbnRseSBvbmx5IHVwIHRvIHR3byBub24tc3RhbmRhcmQgbW9kZXMgY2FuIGJlIGVuYWJsZWQKKyAqIGF0IG9uZSB0aW1lLgorICoKKyAqIEBwYXJhbSBzYW1wbGVfcmF0ZQlQQ00gc2FtcGxpbmcgcmF0ZSwgaW4gSHosIHZhbGlkIHZhbHVlcyBhcmUgb25seSAKKyAqCQkJMTYwMDAgYW5kIDMyMDAwLgorICogQHBhcmFtIGJpdHJhdGUJRzcyMi4xIGJpdHJhdGUsIGluIGJwcywgdGhlIHZhbGlkIHZhbHVlcyBhcmUKKyAqCQkJc3RhbmRhcmQgYW5kIG5vbi1zdGFuZGFyZCBiaXRyYXRlcyBhcyBkZXNjcmliZWQgCisgKgkJCWFib3ZlLgorICogQHBhcmFtIGVuYWJsZWQJUEpfVFJVRSBmb3IgZW5hYmxpbmcgc3BlY2lmaWVkIG1vZGUuCisgKgorICogQHJldHVybgkJUEpfU1VDQ0VTUyBvbiBzdWNjZXNzLgorICovCitQSl9ERUNMKHBqX3N0YXR1c190KSBwam1lZGlhX2NvZGVjX2c3MjIxX3NldF9tb2RlKHVuc2lnbmVkIHNhbXBsZV9yYXRlLCAKKwkJCQkJCSAgdW5zaWduZWQgYml0cmF0ZSwgCisJCQkJCQkgIHBqX2Jvb2xfdCBlbmFibGVkKTsKKworLyoqCisgKiBTZXQgdGhlIEcuNzIyLjEgY29kZWMgZW5jb2RlciBhbmQgZGVjb2RlciBsZXZlbCBhZGp1c3RtZW50LiAKKyAqIElmIHRoZSB2YWx1ZSBpcyBub24temVybywgdGhlbiBQQ00gaW5wdXQgc2FtcGxlcyB0byB0aGUgZW5jb2RlciB3aWxsIAorICogYmUgc2hpZnRlZCByaWdodCBieSB0aGlzIHZhbHVlLCBhbmQgc2ltaWxhcmx5IFBDTSBvdXRwdXQgc2FtcGxlcyBmcm9tCisgKiB0aGUgZGVjb2RlciB3aWxsIGJlIHNoaWZ0ZWQgbGVmdCBieSB0aGlzIHZhbHVlLgorICoKKyAqIFxub3RlCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGFsc28gYXBwbGljYWJsZSBmb3IgRzcyMi4xIGltcGxlbWVudGF0aW9uIHdpdGggSVBQCisgKiBiYWNrLWVuZC4KKyAqCisgKiBEZWZhdWx0IHZhbHVlIGlzIFBKTUVESUFfRzcyMjFfREVGQVVMVF9QQ01fU0hJRlQuCisgKgorICogQHBhcmFtIHZhbAkJVGhlIHZhbHVlCisgKgorICogQHJldHVybgkJUEpfU1VDQ0VTUyBvbiBzdWNjZXNzLgorICovCitQSl9ERUNMKHBqX3N0YXR1c190KSBwam1lZGlhX2NvZGVjX2c3MjIxX3NldF9wY21fc2hpZnQoaW50IHZhbCk7CisKKworCisvKioKKyAqIFVucmVnaXN0ZXIgRy43MjIuMSBjb2RlY3MgZmFjdG9yeSBmcm9tIHBqbWVkaWEgZW5kcG9pbnQuCisgKgorICogQHJldHVybgkgICAgUEpfU1VDQ0VTUyBvbiBzdWNjZXNzLgorICovCitQSl9ERUNMKHBqX3N0YXR1c190KSBwam1lZGlhX2NvZGVjX2c3MjIxX2RlaW5pdCh2b2lkKTsKKworCitQSl9FTkRfREVDTAorCisKKy8qKgorICogQH0KKyAqLworCisjZW5kaWYJLyogX19QSk1FRElBX0NPREVDU19HNzIyMV9IX18gKi8KKwpkaWZmIC0tZ2l0IGEvam5pL2xpYnBqc2lwL3NvdXJjZXMvcGptZWRpYS9pbmNsdWRlL3BqbWVkaWEtY29kZWMvZzcyMjFfc2RwX21hdGNoLmggYi9qbmkvbGlicGpzaXAvc291cmNlcy9wam1lZGlhL2luY2x1ZGUvcGptZWRpYS1jb2RlYy9nNzIyMV9zZHBfbWF0Y2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2FhNjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvam5pL2xpYnBqc2lwL3NvdXJjZXMvcGptZWRpYS9pbmNsdWRlL3BqbWVkaWEtY29kZWMvZzcyMjFfc2RwX21hdGNoLmgKQEAgLTAsMCArMSw1OSBAQAorLyogJElkOiBnNzIyMV9zZHBfbWF0Y2guaCAzOTExIDIwMTEtMTItMTUgMDY6NDU6MjNaIG5hbmFuZyAkICovCisvKiAKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDExIFRlbHV1IEluYy4gKGh0dHA6Ly93d3cudGVsdXUuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDggQmVubnkgUHJpam9ubyA8YmVubnlAcHJpam9uby5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQSAKKyAqLworI2lmbmRlZiBfX1BKTUVESUFfQ09ERUNfRzcyMjFfU0RQX01BVENIX0hfXworI2RlZmluZSBfX1BKTUVESUFfQ09ERUNfRzcyMjFfU0RQX01BVENIX0hfXworCisKKy8qKgorICogQGZpbGUgZzcyMjFfc2RwX21hdGNoLmgKKyAqIEBicmllZiBTcGVjaWFsIFNEUCBmb3JtYXQgbWF0Y2ggZm9yIEc3MjIuMS4KKyAqLworCisjaW5jbHVkZSA8cGptZWRpYS9zZHBfbmVnLmg+CisKK1BKX0JFR0lOX0RFQ0wKKworLyoqCisgKiBNYXRjaCBHLjcyMi4xIGZvcm1hdCBpbiB0aGUgU0RQIG1lZGlhIG9mZmVyIGFuZCBhbnN3ZXIuIFRoaXMgZnVuY3Rpb24KKyAqIHdpbGwgbWF0Y2ggRy43MjIuMSBiaXRyYXRlIHNldHRpbmcgaW4gdGhlIFNEUCBmb3JtYXQgcGFyYW1ldGVyIG9mCisgKiBvZmZlciBhbmQgYW5zd2VyLgorICoKKyAqIEBwYXJhbSBwb29sCQlUaGUgbWVtb3J5IHBvb2wuCisgKiBAcGFyYW0gb2ZmZXIJCVRoZSBTRFAgbWVkaWEgb2ZmZXIuCisgKiBAcGFyYW0gb19mbXRfaWR4CUluZGV4IG9mIHRoZSBHLjcyMi4xIGZvcm1hdCBpbiB0aGUgU0RQIG1lZGlhIG9mZmVyLgorICogQHBhcmFtIGFuc3dlcglUaGUgU0RQIG1lZGlhIGFuc3dlci4KKyAqIEBwYXJhbSBhX2ZtdF9pZHgJSW5kZXggb2YgdGhlIEcuNzIyLjEgZm9ybWF0IGluIHRoZSBTRFAgbWVkaWEgYW5zd2VyLgorICogQHBhcmFtIG9wdGlvbglUaGUgZm9ybWF0IG1hdGNoaW5nIG9wdGlvbiwgc2VlCisgKgkJCSNwam1lZGlhX3NkcF9uZWdfZm10X21hdGNoX2ZsYWcuCisgKgorICogQHJldHVybgkJUEpfU1VDQ0VTUyB3aGVuIHRoZSBmb3JtYXRzIGluIG9mZmVyIGFuZCBhbnN3ZXIgbWF0Y2guCisgKi8KK1BKX0RFQ0wocGpfc3RhdHVzX3QpIHBqbWVkaWFfY29kZWNfZzcyMjFfbWF0Y2hfc2RwKCBwal9wb29sX3QgKnBvb2wsCisJCQkJCQkgICAgcGptZWRpYV9zZHBfbWVkaWEgKm9mZmVyLAorCQkJCQkJICAgIHVuc2lnbmVkIG9fZm10X2lkeCwKKwkJCQkJCSAgICBwam1lZGlhX3NkcF9tZWRpYSAqYW5zd2VyLAorCQkJCQkJICAgIHVuc2lnbmVkIGFfZm10X2lkeCwKKwkJCQkJCSAgICB1bnNpZ25lZCBvcHRpb24pOworCisKK1BKX0VORF9ERUNMCisKKworI2VuZGlmCS8qIF9fUEpNRURJQV9DT0RFQ19HNzIyMV9TRFBfTUFUQ0hfSF9fICovCmRpZmYgLS1naXQgYS9qbmkvbGlicGpzaXAvc291cmNlcy9wam1lZGlhL2luY2x1ZGUvcGptZWRpYS1jb2RlYy9nc20uaCBiL2puaS9saWJwanNpcC9zb3VyY2VzL3BqbWVkaWEvaW5jbHVkZS9wam1lZGlhLWNvZGVjL2dzbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhOTM5ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9qbmkvbGlicGpzaXAvc291cmNlcy9wam1lZGlhL2luY2x1ZGUvcGptZWRpYS1jb2RlYy9nc20uaApAQCAtMCwwICsxLDg3IEBACisvKiAkSWQ6IGdzbS5oIDM1NTMgMjAxMS0wNS0wNSAwNjoxNDoxOVogbmFuYW5nICQgKi8KKy8qIAorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTEgVGVsdXUgSW5jLiAoaHR0cDovL3d3dy50ZWx1dS5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOCBCZW5ueSBQcmlqb25vIDxiZW5ueUBwcmlqb25vLm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBIAorICovCisjaWZuZGVmIF9fUEpNRURJQV9DT0RFQ19HU01fSF9fCisjZGVmaW5lIF9fUEpNRURJQV9DT0RFQ19HU01fSF9fCisKKy8qKgorICogQGZpbGUgcGptZWRpYS1jb2RlYy9nc20uaAorICogQGJyaWVmIEdTTSAwNi4xMCBjb2RlYy4KKyAqLworCisjaW5jbHVkZSA8cGptZWRpYS1jb2RlYy90eXBlcy5oPgorCisvKioKKyAqIEBkZWZncm91cCBQSk1FRF9HU00gR1NNIDA2LjEwIENvZGVjCisgKiBAaW5ncm91cCBQSk1FRElBX0NPREVDX0NPREVDUworICogQGJyaWVmIEltcGxlbWVudGF0aW9uIG9mIEdTTSBGUiBiYXNlZCBvbiBHU00gMDYuMTAgbGlicmFyeQorICogQHsKKyAqCisgKiBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGZ1bmN0aW9ucyB0byBpbml0aWFsaXplIGFuZCByZWdpc3RlciBHU00gY29kZWMKKyAqIGZhY3RvcnkgdG8gdGhlIGNvZGVjIG1hbmFnZXIuIEFmdGVyIHRoZSBjb2RlYyBmYWN0b3J5IGhhcyBiZWVuIHJlZ2lzdGVyZWQsCisgKiBhcHBsaWNhdGlvbiBjYW4gdXNlIEByZWYgUEpNRURJQV9DT0RFQyBBUEkgdG8gbWFuaXB1bGF0ZSB0aGUgY29kZWMuCisgKgorICogVGhlIEdTTSBjb2RlYyBzdXBwb3J0cyAxNi1iaXQgUENNIHdpdGggc2FtcGxpbmcgcmF0ZSBvZiA4MDAwSHogcmVzdWx0aW5nCisgKiBpbiAxMy4ya2JwcyBiaXRyYXRlLgorICoKKyAqIFxzZWN0aW9uIGNvZGVjX3NldHRpbmcgQ29kZWMgU2V0dGluZ3MKKyAqCisgKiBcc3Vic2VjdGlvbiBnZW5lcmFsX3NldHRpbmcgR2VuZXJhbCBTZXR0aW5ncworICoKKyAqIEdlbmVyYWwgY29kZWMgc2V0dGluZ3MgZm9yIHRoaXMgY29kZWMgc3VjaCBhcyBWQUQgYW5kIFBMQyBjYW4gYmUgCisgKiBtYW5pcHVsYXRlZCB0aHJvdWdoIHRoZSA8dHQ+c2V0dGluZzwvdHQ+IGZpZWxkIGluICNwam1lZGlhX2NvZGVjX3BhcmFtLiAKKyAqIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50YXRpb24gb2YgI3BqbWVkaWFfY29kZWNfcGFyYW0gZm9yIG1vcmUgaW5mby4KKyAqCisgKiBcc3Vic2VjdGlvbiBzcGVjaWZpY19zZXR0aW5nIENvZGVjIFNwZWNpZmljIFNldHRpbmdzCisgKgorICogQ3VycmVudGx5IG5vbmUuCisgKi8KKworUEpfQkVHSU5fREVDTAorCisKKy8qKgorICogSW5pdGlhbGl6ZSBhbmQgcmVnaXN0ZXIgR1NNIGNvZGVjIGZhY3RvcnkgdG8gcGptZWRpYSBlbmRwb2ludC4KKyAqCisgKiBAcGFyYW0gZW5kcHQJICAgIFRoZSBwam1lZGlhIGVuZHBvaW50LgorICoKKyAqIEByZXR1cm4JICAgIFBKX1NVQ0NFU1Mgb24gc3VjY2Vzcy4KKyAqLworUEpfREVDTChwal9zdGF0dXNfdCkgcGptZWRpYV9jb2RlY19nc21faW5pdCggcGptZWRpYV9lbmRwdCAqZW5kcHQgKTsKKworCisKKy8qKgorICogVW5yZWdpc3RlciBHU00gY29kZWMgZmFjdG9yeSBmcm9tIHBqbWVkaWEgZW5kcG9pbnQgYW5kIGRlaW5pdGlhbGl6ZQorICogdGhlIEdTTSBjb2RlYyBsaWJyYXJ5LgorICoKKyAqIEByZXR1cm4JICAgIFBKX1NVQ0NFU1Mgb24gc3VjY2Vzcy4KKyAqLworUEpfREVDTChwal9zdGF0dXNfdCkgcGptZWRpYV9jb2RlY19nc21fZGVpbml0KHZvaWQpOworCisKK1BKX0VORF9ERUNMCisKKworLyoqCisgKiBAfQorICovCisKKyNlbmRpZgkvKiBfX1BKTUVESUFfQ09ERUNfR1NNX0hfXyAqLworCmRpZmYgLS1naXQgYS9qbmkvbGlicGpzaXAvc291cmNlcy9wam1lZGlhL2luY2x1ZGUvcGptZWRpYS1jb2RlYy9oMjYzX3BhY2tldGl6ZXIuaCBiL2puaS9saWJwanNpcC9zb3VyY2VzL3BqbWVkaWEvaW5jbHVkZS9wam1lZGlhLWNvZGVjL2gyNjNfcGFja2V0aXplci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNjQ0YTAKLS0tIC9kZXYvbnVsbAorKysgYi9qbmkvbGlicGpzaXAvc291cmNlcy9wam1lZGlhL2luY2x1ZGUvcGptZWRpYS1jb2RlYy9oMjYzX3BhY2tldGl6ZXIuaApAQCAtMCwwICsxLDE0NiBAQAorLyogJElkOiBoMjYzX3BhY2tldGl6ZXIuaCAzNzE1IDIwMTEtMDgtMTkgMDk6MzU6MjVaIG5hbmFuZyAkICovCisvKiAKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDExIFRlbHV1IEluYy4gKGh0dHA6Ly93d3cudGVsdXUuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EgCisgKi8KKyNpZm5kZWYgX19QSk1FRElBX0gyNjNfUEFDS0VUSVpFUl9IX18KKyNkZWZpbmUgX19QSk1FRElBX0gyNjNfUEFDS0VUSVpFUl9IX18KKworCisvKioKKyAqIEBmaWxlIGgyNjNfcGFja2V0aXplci5oCisgKiBAYnJpZWYgUGFja2V0aXplcy91bnBhY2tldGl6ZXMgSC4yNjMgYml0c3RyZWFtIGludG8gUlRQIHBheWxvYWQuCisgKi8KKworI2luY2x1ZGUgPHBqL3Bvb2wuaD4KKyNpbmNsdWRlIDxwai90eXBlcy5oPgorCitQSl9CRUdJTl9ERUNMCisKKworLyoqCisgKiBPcGFxdWUgZGVjbGFyYXRpb24gZm9yIEguMjYzIHBhY2tldGl6ZXIuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBqbWVkaWFfaDI2M19wYWNrZXRpemVyIHBqbWVkaWFfaDI2M19wYWNrZXRpemVyOworCisKKy8qKgorICogRW51bWVyYXRpb24gb2YgSC4yNjMgcGFja2V0aXphdGlvbiBtb2Rlcy4KKyAqLwordHlwZWRlZiBlbnVtCit7CisgICAgLyoqCisgICAgICogSC4yNjMgUlRQIHBhY2tldGl6YXRpb24gdXNpbmcgUkZDIDQ2MjkuCisgICAgICovCisgICAgUEpNRURJQV9IMjYzX1BBQ0tFVElaRVJfTU9ERV9SRkM0NjI5LAorCisgICAgLyoqCisgICAgICogSC4yNjMgUlRQIHBhY2tldGl6YXRpb24gdXNpbmcgbGVnYWN5IFJGQyAyMTkwLgorICAgICAqIFRoaXMgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQuCisgICAgICovCisgICAgUEpNRURJQV9IMjYzX1BBQ0tFVElaRVJfTU9ERV9SRkMyMTkwLAorCit9IHBqbWVkaWFfaDI2M19wYWNrZXRpemVyX21vZGU7CisKKworLyoqCisgKiBILjI2MyBwYWNrZXRpemVyIGNvbmZpZ3VyYXRpb24uCisgKi8KK3R5cGVkZWYgc3RydWN0IHBqbWVkaWFfaDI2M19wYWNrZXRpemVyX2NmZworeworICAgIC8qKgorICAgICAqIE1heGltdW0gcGF5bG9hZCBsZW5ndGguCisgICAgICogRGVmYXVsdDogUEpNRURJQV9NQVhfTVRVCisgICAgICovCisgICAgaW50CW10dTsKKworICAgIC8qKgorICAgICAqIFBhY2tldGl6YXRpb24gbW9kZS4KKyAgICAgKiBEZWZhdWx0OiBQSk1FRElBX0gyNjNfUEFDS0VUSVpFUl9NT0RFX1JGQzQ2MjkKKyAgICAgKi8KKyAgICBwam1lZGlhX2gyNjNfcGFja2V0aXplcl9tb2RlIG1vZGU7CisKK30gcGptZWRpYV9oMjYzX3BhY2tldGl6ZXJfY2ZnOworCisKKy8qKgorICogQ3JlYXRlIEguMjYzIHBhY2tldGl6ZXIuCisgKgorICogQHBhcmFtIHBvb2wJCVRoZSBtZW1vcnkgcG9vbC4KKyAqIEBwYXJhbSBjZmcJCVBhY2tldGl6ZXIgc2V0dGluZ3MsIGlmIE5VTEwsIGRlZmF1bHQgc2V0dGluZworICoJCQl3aWxsIGJlIHVzZWQuCisgKiBAcGFyYW0gcF9wa3R6CVBvaW50ZXIgdG8gcmVjZWl2ZSB0aGUgcGFja2V0aXplci4KKyAqCisgKiBAcmV0dXJuCQlQSl9TVUNDRVNTIG9uIHN1Y2Nlc3MuCisgKi8KK1BKX0RFQ0wocGpfc3RhdHVzX3QpIHBqbWVkaWFfaDI2M19wYWNrZXRpemVyX2NyZWF0ZSgKKwkJCQkgICAgcGpfcG9vbF90ICpwb29sLAorCQkJCSAgICBjb25zdCBwam1lZGlhX2gyNjNfcGFja2V0aXplcl9jZmcgKmNmZywKKwkJCQkgICAgcGptZWRpYV9oMjYzX3BhY2tldGl6ZXIgKipwX3BrdHopOworCisKKy8qKgorICogR2VuZXJhdGUgYW4gUlRQIHBheWxvYWQgZnJvbSBhIEguMjYzIHBpY3R1cmUgYml0c3RyZWFtLiBOb3RlIHRoYXQgdGhpcworICogZnVuY3Rpb24gd2lsbCBhcHBseSBpbi1wbGFjZSBwcm9jZXNzaW5nLCBzbyB0aGUgYml0c3RyZWFtIG1heSBiZSBtb2RpZmllZAorICogZHVyaW5nIHRoZSBwYWNrZXRpemF0aW9uLgorICoKKyAqIEBwYXJhbSBwa3R6CQlUaGUgcGFja2V0aXplci4KKyAqIEBwYXJhbSBiaXRzCQlUaGUgcGljdHVyZSBiaXRzdHJlYW0gdG8gYmUgcGFja2V0aXplZC4KKyAqIEBwYXJhbSBiaXRzX2xlbglUaGUgbGVuZ3RoIG9mIHRoZSBiaXRzdHJlYW0uCisgKiBAcGFyYW0gYml0c19wb3MJVGhlIGJpdHN0cmVhbSBvZmZzZXQgdG8gYmUgcGFja2V0aXplZC4KKyAqIEBwYXJhbSBwYXlsb2FkCVRoZSBvdXRwdXQgcGF5bG9hZC4KKyAqIEBwYXJhbSBwYXlsb2FkX2xlbglUaGUgb3V0cHV0IHBheWxvYWQgbGVuZ3RoLgorICoKKyAqIEByZXR1cm4JCVBKX1NVQ0NFU1Mgb24gc3VjY2Vzcy4KKyAqLworUEpfREVDTChwal9zdGF0dXNfdCkgcGptZWRpYV9oMjYzX3BhY2tldGl6ZShwam1lZGlhX2gyNjNfcGFja2V0aXplciAqcGt0eiwKKwkJCQkJICAgIHBqX3VpbnQ4X3QgKmJpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBqX3NpemVfdCBiaXRzX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgKmJpdHNfcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwal91aW50OF90ICoqcGF5bG9hZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGpfc2l6ZV90ICpwYXlsb2FkX2xlbik7CisKKworLyoqCisgKiBBcHBlbmQgYW4gUlRQIHBheWxvYWQgdG8gYW4gSC4yNjMgcGljdHVyZSBiaXRzdHJlYW0uIE5vdGUgdGhhdCBpbiBjYXNlIG9mCisgKiBub3RpY2luZyBwYWNrZXQgbG9zdCwgYXBwbGljYXRpb24gc2hvdWxkIGtlZXAgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpdGgKKyAqIHBheWxvYWQgcG9pbnRlciBzZXQgdG8gTlVMTCwgYXMgdGhlIHBhY2tldGl6ZXIgbmVlZCB0byB1cGRhdGUgaXRzIGludGVybmFsCisgKiBzdGF0ZS4KKyAqCisgKiBAcGFyYW0gcGt0egkJVGhlIHBhY2tldGl6ZXIuCisgKiBAcGFyYW0gcGF5bG9hZAlUaGUgcGF5bG9hZCB0byBiZSB1bnBhY2tldGl6ZWQuCisgKiBAcGFyYW0gcGF5bG9hZF9sZW4JVGhlIHBheWxvYWQgbGVuZ3RoLgorICogQHBhcmFtIGJpdHMJCVRoZSBiaXRzdHJlYW0gYnVmZmVyLgorICogQHBhcmFtIGJpdHNfc2l6ZQlUaGUgYml0c3RyZWFtIGJ1ZmZlciBzaXplLgorICogQHBhcmFtIGJpdHNfcG9zCVRoZSBiaXRzdHJlYW0gb2Zmc2V0IHRvIHB1dCB0aGUgdW5wYWNrZXRpemVkIHBheWxvYWQKKyAqCQkJaW4gdGhlIGJpdHN0cmVhbSwgdXBvbiByZXR1cm4sIHRoaXMgd2lsbCBiZSB1cGRhdGVkCisgKgkJCXRvIHRoZSBsYXRlc3Qgb2Zmc2V0IGFzIGEgcmVzdWx0IG9mIHRoZSB1bnBhY2tldGl6ZWQKKyAqCQkJcGF5bG9hZC4KKyAqCisgKiBAcmV0dXJuCQlQSl9TVUNDRVNTIG9uIHN1Y2Nlc3MuCisgKi8KK1BKX0RFQ0wocGpfc3RhdHVzX3QpIHBqbWVkaWFfaDI2M191bnBhY2tldGl6ZShwam1lZGlhX2gyNjNfcGFja2V0aXplciAqcGt0eiwKKwkJCQkJICAgICAgY29uc3QgcGpfdWludDhfdCAqcGF5bG9hZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwal9zaXplX3QgcGF5bG9hZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGpfdWludDhfdCAqYml0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwal9zaXplX3QgYml0c19zaXplLAorCQkJCQkgICAgICB1bnNpZ25lZCAqYml0c19wb3MpOworCisKK1BKX0VORF9ERUNMCisKKworI2VuZGlmCS8qIF9fUEpNRURJQV9IMjYzX1BBQ0tFVElaRVJfSF9fICovCmRpZmYgLS1naXQgYS9qbmkvbGlicGpzaXAvc291cmNlcy9wam1lZGlhL2luY2x1ZGUvcGptZWRpYS1jb2RlYy9oMjY0X3BhY2tldGl6ZXIuaCBiL2puaS9saWJwanNpcC9zb3VyY2VzL3BqbWVkaWEvaW5jbHVkZS9wam1lZGlhLWNvZGVjL2gyNjRfcGFja2V0aXplci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlMjYxODAKLS0tIC9kZXYvbnVsbAorKysgYi9qbmkvbGlicGpzaXAvc291cmNlcy9wam1lZGlhL2luY2x1ZGUvcGptZWRpYS1jb2RlYy9oMjY0X3BhY2tldGl6ZXIuaApAQCAtMCwwICsxLDE1NyBAQAorLyogJElkOiBoMjY0X3BhY2tldGl6ZXIuaCAzNjY0IDIwMTEtMDctMTkgMDM6NDI6MjhaIG5hbmFuZyAkICovCisvKiAKKyAqIENvcHlyaWdodCAoQykgMjAxMSBUZWx1dSBJbmMuIChodHRwOi8vd3d3LnRlbHV1LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBIAorICovCisjaWZuZGVmIF9fUEpNRURJQV9IMjY0X1BBQ0tFVElaRVJfSF9fCisjZGVmaW5lIF9fUEpNRURJQV9IMjY0X1BBQ0tFVElaRVJfSF9fCisKKy8qKgorICogQGZpbGUgaDI2NF9wYWNrZXRpemVyLmgKKyAqIEBicmllZiBQYWNrZXRpemVzIEguMjY0IGJpdHN0cmVhbSBpbnRvIFJUUCBwYXlsb2FkIGFuZCB2aWNlIHZlcnNhLgorICovCisKKyNpbmNsdWRlIDxwai90eXBlcy5oPgorCitQSl9CRUdJTl9ERUNMCisKKy8qKgorICogT3BhcXVlIGRlY2xhcmF0aW9uIGZvciBILjI2NCBwYWNrZXRpemVyLgorICovCit0eXBlZGVmIHN0cnVjdCBwam1lZGlhX2gyNjRfcGFja2V0aXplciBwam1lZGlhX2gyNjRfcGFja2V0aXplcjsKKworCisvKioKKyAqIEVudW1lcmF0aW9uIG9mIEguMjY0IHBhY2tldGl6YXRpb24gbW9kZXMuCisgKi8KK3R5cGVkZWYgZW51bQoreworICAgIC8qKgorICAgICAqIFNpbmdsZSBOQUwgdW5pdCBwYWNrZXRpemF0aW9uIG1vZGUgd2lsbCBvbmx5IGdlbmVyYXRlIHBheWxvYWRzCisgICAgICogY29udGFpbmluZyBhIGNvbXBsZXRlIHNpbmdsZSBOQUwgdW5pdCBwYWNrZXQuIEFzIEguMjY0IE5BTCB1bml0CisgICAgICogc2l6ZSBjYW4gYmUgdmVyeSBsYXJnZSwgdGhpcyBtb2RlIGlzIHVzdWFsbHkgbm90IGFwcGxpY2FibGUgZm9yCisgICAgICogbmV0d29yayBlbnZpcm9ubWVudHMgd2l0aCBNVFUgc2l6ZSBsaW1pdGF0aW9uLgorICAgICAqLworICAgIFBKTUVESUFfSDI2NF9QQUNLRVRJWkVSX01PREVfU0lOR0xFX05BTCwKKyAgICAKKyAgICAvKioKKyAgICAgKiBOb24taW50ZXJsZWF2ZWQgcGFja2V0aXphdGlvbiBtb2RlIHdpbGwgZ2VuZXJhdGUgcGF5bG9hZHMgd2l0aCB0aGUKKyAgICAgKiBmb2xsb3dpbmcgcG9zc2libGUgZm9ybWF0czoKKyAgICAgKiAtIHNpbmdsZSBOQUwgdW5pdCBwYWNrZXRzLAorICAgICAqIC0gTkFMIHVuaXRzIGFnZ3JlZ2F0aW9uIFNUQVAtQSBwYWNrZXRzLAorICAgICAqIC0gZnJhZ21lbnRlZCBOQUwgdW5pdCBGVS1BIHBhY2tldHMuCisgICAgICovCisgICAgUEpNRURJQV9IMjY0X1BBQ0tFVElaRVJfTU9ERV9OT05fSU5URVJMRUFWRUQsCisKKyAgICAvKioKKyAgICAgKiBJbnRlcmxlYXZlZCBwYWNrZXRpemF0aW9uIG1vZGUgd2lsbCBnZW5lcmF0ZSBwYXlsb2FkcyB3aXRoIHRoZQorICAgICAqIGZvbGxvd2luZyBwb3NzaWJsZSBmb3JtYXRzOgorICAgICAqIC0gc2luZ2xlIE5BTCB1bml0IHBhY2tldHMsCisgICAgICogLSBOQUwgdW5pdHMgYWdncmVnYXRpb24gU1RBUC1BICYgU1RBUC1CIHBhY2tldHMsCisgICAgICogLSBmcmFnbWVudGVkIE5BTCB1bml0IEZVLUEgJiBGVS1CIHBhY2tldHMuCisgICAgICogVGhpcyBwYWNrZXRpemF0aW9uIG1vZGUgaXMgY3VycmVudGx5IHVuc3VwcG9ydGVkLgorICAgICAqLworICAgIFBKTUVESUFfSDI2NF9QQUNLRVRJWkVSX01PREVfSU5URVJMRUFWRUQsCit9IHBqbWVkaWFfaDI2NF9wYWNrZXRpemVyX21vZGU7CisKKworLyoqCisgKiBILjI2NCBwYWNrZXRpemVyIHNldHRpbmcuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBqbWVkaWFfaDI2NF9wYWNrZXRpemVyX2NmZworeworICAgIC8qKgorICAgICAqIE1heGltdW0gcGF5bG9hZCBsZW5ndGguCisgICAgICogRGVmYXVsdDogUEpNRURJQV9NQVhfTVRVCisgICAgICovCisgICAgaW50CW10dTsKKworICAgIC8qKgorICAgICAqIFBhY2tldGl6YXRpb24gbW9kZS4KKyAgICAgKiBEZWZhdWx0OiBQSk1FRElBX0gyNjRfUEFDS0VUSVpFUl9NT0RFX05PTl9JTlRFUkxFQVZFRAorICAgICAqLworICAgIHBqbWVkaWFfaDI2NF9wYWNrZXRpemVyX21vZGUgbW9kZTsKK30KK3BqbWVkaWFfaDI2NF9wYWNrZXRpemVyX2NmZzsKKworCisvKioKKyAqIENyZWF0ZSBILjI2NCBwYWNrZXRpemVyLgorICoKKyAqIEBwYXJhbSBwb29sCQlUaGUgbWVtb3J5IHBvb2wuCisgKiBAcGFyYW0gY2ZnCQlQYWNrZXRpemVyIHNldHRpbmdzLCBpZiBOVUxMLCBkZWZhdWx0IHNldHRpbmcKKyAqCQkJd2lsbCBiZSB1c2VkLgorICogQHBhcmFtIHBfcGt0eglQb2ludGVyIHRvIHJlY2VpdmUgdGhlIHBhY2tldGl6ZXIuCisgKgorICogQHJldHVybgkJUEpfU1VDQ0VTUyBvbiBzdWNjZXNzLgorICovCitQSl9ERUNMKHBqX3N0YXR1c190KSBwam1lZGlhX2gyNjRfcGFja2V0aXplcl9jcmVhdGUoCisJCQkJICAgIHBqX3Bvb2xfdCAqcG9vbCwKKwkJCQkgICAgY29uc3QgcGptZWRpYV9oMjY0X3BhY2tldGl6ZXJfY2ZnICpjZmcsCisJCQkJICAgIHBqbWVkaWFfaDI2NF9wYWNrZXRpemVyICoqcF9wa3R6KTsKKworCisvKioKKyAqIEdlbmVyYXRlIGFuIFJUUCBwYXlsb2FkIGZyb20gYSBILjI2NCBwaWN0dXJlIGJpdHN0cmVhbS4gTm90ZSB0aGF0IHRoaXMKKyAqIGZ1bmN0aW9uIHdpbGwgYXBwbHkgaW4tcGxhY2UgcHJvY2Vzc2luZywgc28gdGhlIGJpdHN0cmVhbSBtYXkgYmUgbW9kaWZpZWQKKyAqIGR1cmluZyB0aGUgcGFja2V0aXphdGlvbi4KKyAqCisgKiBAcGFyYW0gcGt0egkJVGhlIHBhY2tldGl6ZXIuCisgKiBAcGFyYW0gYml0cwkJVGhlIHBpY3R1cmUgYml0c3RyZWFtIHRvIGJlIHBhY2tldGl6ZWQuCisgKiBAcGFyYW0gYml0c19sZW4JVGhlIGxlbmd0aCBvZiB0aGUgYml0c3RyZWFtLgorICogQHBhcmFtIGJpdHNfcG9zCVRoZSBiaXRzdHJlYW0gb2Zmc2V0IHRvIGJlIHBhY2tldGl6ZWQuCisgKiBAcGFyYW0gcGF5bG9hZAlUaGUgb3V0cHV0IHBheWxvYWQuCisgKiBAcGFyYW0gcGF5bG9hZF9sZW4JVGhlIG91dHB1dCBwYXlsb2FkIGxlbmd0aC4KKyAqCisgKiBAcmV0dXJuCQlQSl9TVUNDRVNTIG9uIHN1Y2Nlc3MuCisgKi8KK1BKX0RFQ0wocGpfc3RhdHVzX3QpIHBqbWVkaWFfaDI2NF9wYWNrZXRpemUocGptZWRpYV9oMjY0X3BhY2tldGl6ZXIgKnBrdHosCisJCQkJCSAgICBwal91aW50OF90ICpiaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwal9zaXplX3QgYml0c19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkICpiaXRzX3BvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGpfdWludDhfdCAqKnBheWxvYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBqX3NpemVfdCAqcGF5bG9hZF9sZW4pOworCisKKy8qKgorICogQXBwZW5kIGFuIFJUUCBwYXlsb2FkIHRvIGFuIEguMjY0IHBpY3R1cmUgYml0c3RyZWFtLiBOb3RlIHRoYXQgaW4gY2FzZSBvZgorICogbm90aWNpbmcgcGFja2V0IGxvc3QsIGFwcGxpY2F0aW9uIHNob3VsZCBrZWVwIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoCisgKiBwYXlsb2FkIHBvaW50ZXIgc2V0IHRvIE5VTEwsIGFzIHRoZSBwYWNrZXRpemVyIG5lZWQgdG8gdXBkYXRlIGl0cyBpbnRlcm5hbAorICogc3RhdGUuCisgKgorICogQHBhcmFtIHBrdHoJCVRoZSBwYWNrZXRpemVyLgorICogQHBhcmFtIHBheWxvYWQJVGhlIHBheWxvYWQgdG8gYmUgdW5wYWNrZXRpemVkLgorICogQHBhcmFtIHBheWxvYWRfbGVuCVRoZSBwYXlsb2FkIGxlbmd0aC4KKyAqIEBwYXJhbSBiaXRzCQlUaGUgYml0c3RyZWFtIGJ1ZmZlci4KKyAqIEBwYXJhbSBiaXRzX3NpemUJVGhlIGJpdHN0cmVhbSBidWZmZXIgc2l6ZS4KKyAqIEBwYXJhbSBiaXRzX3BvcwlUaGUgYml0c3RyZWFtIG9mZnNldCB0byBwdXQgdGhlIHVucGFja2V0aXplZCBwYXlsb2FkCisgKgkJCWluIHRoZSBiaXRzdHJlYW0sIHVwb24gcmV0dXJuLCB0aGlzIHdpbGwgYmUgdXBkYXRlZAorICoJCQl0byB0aGUgbGF0ZXN0IG9mZnNldCBhcyBhIHJlc3VsdCBvZiB0aGUgdW5wYWNrZXRpemVkCisgKgkJCXBheWxvYWQuCisgKgorICogQHJldHVybgkJUEpfU1VDQ0VTUyBvbiBzdWNjZXNzLgorICovCitQSl9ERUNMKHBqX3N0YXR1c190KSBwam1lZGlhX2gyNjRfdW5wYWNrZXRpemUocGptZWRpYV9oMjY0X3BhY2tldGl6ZXIgKnBrdHosCisJCQkJCSAgICAgIGNvbnN0IHBqX3VpbnQ4X3QgKnBheWxvYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGpfc2l6ZV90ICAgcGF5bG9hZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGpfdWludDhfdCAqYml0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwal9zaXplX3QgICBiaXRzX2xlbiwKKwkJCQkJICAgICAgdW5zaWduZWQgICAqYml0c19wb3MpOworCisKK1BKX0VORF9ERUNMCisKKyNlbmRpZgkvKiBfX1BKTUVESUFfSDI2NF9QQUNLRVRJWkVSX0hfXyAqLwpkaWZmIC0tZ2l0IGEvam5pL2xpYnBqc2lwL3NvdXJjZXMvcGptZWRpYS9pbmNsdWRlL3BqbWVkaWEtY29kZWMvaWxiYy5oIGIvam5pL2xpYnBqc2lwL3NvdXJjZXMvcGptZWRpYS9pbmNsdWRlL3BqbWVkaWEtY29kZWMvaWxiYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5MmY2MzcKLS0tIC9kZXYvbnVsbAorKysgYi9qbmkvbGlicGpzaXAvc291cmNlcy9wam1lZGlhL2luY2x1ZGUvcGptZWRpYS1jb2RlYy9pbGJjLmgKQEAgLTAsMCArMSwxMTkgQEAKKy8qICRJZDogaWxiYy5oIDM1NTMgMjAxMS0wNS0wNSAwNjoxNDoxOVogbmFuYW5nICQgKi8KKy8qIAorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTEgVGVsdXUgSW5jLiAoaHR0cDovL3d3dy50ZWx1dS5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOCBCZW5ueSBQcmlqb25vIDxiZW5ueUBwcmlqb25vLm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBIAorICovCisjaWZuZGVmIF9fUEpNRURJQV9DT0RFQ19JTEJDX0hfXworI2RlZmluZSBfX1BKTUVESUFfQ09ERUNfSUxCQ19IX18KKworLyoqCisgKiBAZmlsZSBwam1lZGlhLWNvZGVjL2lsYmMuaAorICogQGJyaWVmIGlMQkMgY29kZWMuCisgKi8KKworI2luY2x1ZGUgPHBqbWVkaWEtY29kZWMvdHlwZXMuaD4KKworLyoqCisgKiBAZGVmZ3JvdXAgUEpNRURfSUxCQyBpTEJDIENvZGVjCisgKiBAaW5ncm91cCBQSk1FRElBX0NPREVDX0NPREVDUworICogQGJyaWVmIEltcGxlbWVudGF0aW9uIG9mIGlMQkMgQ29kZWMKKyAqIEB7CisgKgorICogVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBmdW5jdGlvbnMgdG8gaW5pdGlhbGl6ZSBhbmQgcmVnaXN0ZXIgaUxCQyBjb2RlYworICogZmFjdG9yeSB0byB0aGUgY29kZWMgbWFuYWdlci4gQWZ0ZXIgdGhlIGNvZGVjIGZhY3RvcnkgaGFzIGJlZW4gcmVnaXN0ZXJlZCwKKyAqIGFwcGxpY2F0aW9uIGNhbiB1c2UgQHJlZiBQSk1FRElBX0NPREVDIEFQSSB0byBtYW5pcHVsYXRlIHRoZSBjb2RlYy4KKyAqCisgKiBUaGUgaUxCQyBjb2RlYyBpcyBkZXZlbG9wZWQgYnkgR2xvYmFsIElQIFNvbHV0aW9ucyAoR0lQUyksIGZvcm1lcmx5IAorICogR2xvYmFsIElQIFNvdW5kLiBUaGUgaUxCQyBvZmZlcnMgbG93IGJpdHJhdGUgYW5kIGdyYWNlZnVsIGF1ZGlvIHF1YWxpdHkgCisgKiBkZWdyYWRhdGlvbiBvbiBmcmFtZSBsb3NzZXMuCisgKgorICogVGhlIGlMQkMgY29kZWMgc3VwcG9ydHMgMTYtYml0IFBDTSBhdWRpbyBzaWduYWwgd2l0aCBzYW1wbGluZyByYXRlIG9mIAorICogODAwMEh6IG9wZXJhdGluZyBhdCB0d28gbW9kZXM6IDIwbXMgYW5kIDMwbXMgZnJhbWUgbGVuZ3RoIG1vZGVzLCByZXN1bHRpbmcKKyAqIGluIGJpdHJhdGVzIG9mIDE1LjJrYnBzIGZvciAyMG1zIG1vZGUgYW5kIDEzLjMza2JwcyBmb3IgMzBtcyBtb2RlLgorICoKKyAqCisgKiBcc2VjdGlvbiBjb2RlY19zZXR0aW5nIENvZGVjIFNldHRpbmdzCisgKgorICogXHN1YnNlY3Rpb24gZ2VuZXJhbF9zZXR0aW5nIEdlbmVyYWwgU2V0dGluZ3MKKyAqCisgKiBHZW5lcmFsIGNvZGVjIHNldHRpbmdzIGZvciB0aGlzIGNvZGVjIHN1Y2ggYXMgVkFEIGFuZCBQTEMgY2FuIGJlIAorICogbWFuaXB1bGF0ZWQgdGhyb3VnaCB0aGUgPHR0PnNldHRpbmc8L3R0PiBmaWVsZCBpbiAjcGptZWRpYV9jb2RlY19wYXJhbS4gCisgKiBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mICNwam1lZGlhX2NvZGVjX3BhcmFtIGZvciBtb3JlIGluZm8uCisgKgorICogXHN1YnNlY3Rpb24gc3BlY2lmaWNfc2V0dGluZyBDb2RlYyBTcGVjaWZpYyBTZXR0aW5ncworICoKKyAqIFRoZSBmb2xsb3dpbmcgc2V0dGluZ3MgYXJlIGFwcGxpY2FibGUgZm9yIHRoaXMgY29kZWMuCisgKgorICogXHN1YnN1YnNlY3Rpb24gbW9kZSBNb2RlCisgKgorICogVGhlIGRlZmF1bHQgbW9kZSBzaG91bGQgYmUgc2V0IHVwb24gaW5pdGlhbGl6YXRpb24sIHNlZQorICogI3BqbWVkaWFfY29kZWNfaWxiY19pbml0KCkuIEFmdGVyIHRoZSBjb2RlYyBpcyBpbml0aWFsaXplZCwgdGhlIGRlZmF1bHQKKyAqIG1vZGUgY2FuIGJlIG1vZGlmaWVkIHVzaW5nICNwam1lZGlhX2NvZGVjX21ncl9zZXRfZGVmYXVsdF9wYXJhbSgpLgorICoKKyAqIEluICNwam1lZGlhX2NvZGVjX3BhcmFtLCBpTEJDIG1vZGUgY2FuIGJlIHNldCBieSBzcGVjaWZ5aW5nIFNEUAorICogZm9ybWF0IHBhcmFtZXRlciAibW9kZSIgaW4gdGhlIFNEUCAiYT1mbXRwIiBhdHRyaWJ1dGUgZm9yIGRlY29kaW5nCisgKiBkaXJlY3Rpb24uIFZhbGlkIHZhbHVlcyBhcmUgIjIwIiBhbmQgIjMwIiAoZm9yIDIwbXMgYW5kIDMwbXMgbW9kZSAKKyAqIHJlc3BlY3RpdmVseSkuCisgKgorICogSGVyZSBpcyBhbiBleGFtcGxlIHRvIHNldCB1cCAjcGptZWRpYV9jb2RlY19wYXJhbSB0byB1c2UgbW9kZSAyMG1zOgorICogIFxjb2RlCisgICAgcGptZWRpYV9jb2RlY19wYXJhbSBwYXJhbTsKKyAgICAuLi4KKyAgICAvLyBzZXR0aW5nIGlMQkMgbW9kZSBpbiBTRFAKKyAgICBwYXJhbS5zZXR0aW5nLmRlY19mbXRwLmNudCA9IDE7CisgICAgcGFyYW0uc2V0dGluZy5kZWNfZm10cC5wYXJhbVswXS5uYW1lID0gcGpfc3RyKCJtb2RlIik7CisgICAgcGFyYW0uc2V0dGluZy5kZWNfZm10cC5wYXJhbVswXS52YWwgID0gcGpfc3RyKCIyMCIpOworICAgIC4uLgorIFxlbmRjb2RlCisgKi8KKworUEpfQkVHSU5fREVDTAorCisKKy8qKgorICogSW5pdGlhbGl6ZSBhbmQgcmVnaXN0ZXIgaUxCQyBjb2RlYyBmYWN0b3J5IHRvIHBqbWVkaWEgZW5kcG9pbnQuCisgKgorICogQHBhcmFtIGVuZHB0CSAgICBUaGUgcGptZWRpYSBlbmRwb2ludC4KKyAqIEBwYXJhbSBtb2RlCSAgICBEZWZhdWx0IGRlY29kZXIgbW9kZSB0byBiZSB1c2VkLiBWYWxpZCB2YWx1ZXMgYXJlCisgKgkJICAgIDIwIGFuZCAzMCBtcy4gTm90ZSB0aGF0IGVuY29kZXIgbW9kZSBmb2xsb3dzIHRoZQorICoJCSAgICBzZXR0aW5nIGFkdmVydGlzZWQgaW4gdGhlIHJlbW90ZSdzIFNEUC4KKyAqCisgKiBAcmV0dXJuCSAgICBQSl9TVUNDRVNTIG9uIHN1Y2Nlc3MuCisgKi8KK1BKX0RFQ0wocGpfc3RhdHVzX3QpIHBqbWVkaWFfY29kZWNfaWxiY19pbml0KCBwam1lZGlhX2VuZHB0ICplbmRwdCwKKwkJCQkJICAgICAgaW50IG1vZGUgKTsKKworCisKKy8qKgorICogVW5yZWdpc3RlciBpTEJDIGNvZGVjIGZhY3RvcnkgZnJvbSBwam1lZGlhIGVuZHBvaW50IGFuZCBkZWluaXRpYWxpemUKKyAqIHRoZSBpTEJDIGNvZGVjIGxpYnJhcnkuCisgKgorICogQHJldHVybgkgICAgUEpfU1VDQ0VTUyBvbiBzdWNjZXNzLgorICovCitQSl9ERUNMKHBqX3N0YXR1c190KSBwam1lZGlhX2NvZGVjX2lsYmNfZGVpbml0KHZvaWQpOworCisKK1BKX0VORF9ERUNMCisKKworLyoqCisgKiBAfQorICovCisKKyNlbmRpZgkvKiBfX1BKTUVESUFfQ09ERUNfSUxCQ19IX18gKi8KKwpkaWZmIC0tZ2l0IGEvam5pL2xpYnBqc2lwL3NvdXJjZXMvcGptZWRpYS9pbmNsdWRlL3BqbWVkaWEtY29kZWMvaXBwX2NvZGVjcy5oIGIvam5pL2xpYnBqc2lwL3NvdXJjZXMvcGptZWRpYS9pbmNsdWRlL3BqbWVkaWEtY29kZWMvaXBwX2NvZGVjcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NDQzNjcKLS0tIC9kZXYvbnVsbAorKysgYi9qbmkvbGlicGpzaXAvc291cmNlcy9wam1lZGlhL2luY2x1ZGUvcGptZWRpYS1jb2RlYy9pcHBfY29kZWNzLmgKQEAgLTAsMCArMSwzMjIgQEAKKy8qICRJZDogaXBwX2NvZGVjcy5oIDM1NTMgMjAxMS0wNS0wNSAwNjoxNDoxOVogbmFuYW5nICQgKi8KKy8qIAorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTEgVGVsdXUgSW5jLiAoaHR0cDovL3d3dy50ZWx1dS5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOCBCZW5ueSBQcmlqb25vIDxiZW5ueUBwcmlqb25vLm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBIAorICovCisjaWZuZGVmIF9fUEpNRURJQV9DT0RFQ1NfSVBQX0hfXworI2RlZmluZSBfX1BKTUVESUFfQ09ERUNTX0lQUF9IX18KKworLyoqCisgKiBAZmlsZSBwam1lZGlhLWNvZGVjL2lwcF9jb2RlY3MuaAorICogQGJyaWVmIElQUCBjb2RlY3Mgd3JhcHBlci4KKyAqLworCisjaW5jbHVkZSA8cGptZWRpYS1jb2RlYy90eXBlcy5oPgorCisvKioKKyAqIEBkZWZncm91cCBQSk1FRF9JUFBfQ09ERUMgSVBQIENvZGVjcworICogQGluZ3JvdXAgUEpNRURJQV9DT0RFQ19DT0RFQ1MKKyAqIEBicmllZiBJbXBsZW1lbnRhdGlvbiBvZiBJUFAgY29kZWNzCisgKiBAeworICoKKyAqIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgZnVuY3Rpb25zIHRvIGluaXRpYWxpemUgYW5kIHJlZ2lzdGVyIElQUCBjb2RlYworICogZmFjdG9yeSB0byB0aGUgY29kZWMgbWFuYWdlci4gQWZ0ZXIgdGhlIGNvZGVjIGZhY3RvcnkgaGFzIGJlZW4gcmVnaXN0ZXJlZCwKKyAqIGFwcGxpY2F0aW9uIGNhbiB1c2UgQHJlZiBQSk1FRElBX0NPREVDIEFQSSB0byBtYW5pcHVsYXRlIHRoZSBjb2RlYy4KKyAqCisgKiBUaGlzIGNvZGVjIGZhY3RvcnkgY29udGFpbnMgdmFyaW91cyBjb2RlY3MsIGkuZTogRy43MjksIEcuNzIzLjEsIEcuNzI2LCAKKyAqIEcuNzI4LCBHLjcyMi4xLCBBTVIsIGFuZCBBTVItV0IuCisgKgorICoKKyAqIFxzZWN0aW9uIHBqbWVkaWFfY29kZWNfaXBwX2c3MjkgSVBQIEcuNzI5CisgKgorICogSVBQIEcuNzI5IGlzIGNvbXBsaWFudCB3aXRoIElUVS1UIEcuNzI5IGFuZCBBbm5leGVzIEEsIEIsIEMsIEMrLCBELCAKKyAqIEUsIEkgc3BlY2lmaWNhdGlvbnMuIEhvd2V2ZXIsIGN1cnJlbnRseSB0aGUgcGptZWRpYSBpbXBsZW1lbnRhdGlvbiBpcworICogdXNpbmcgQW5uZXhlcyBBIGFuZCBCIG9ubHkuCisgKgorICogSVBQIEcuNzI5IHN1cHBvcnRzIDE2LWJpdCBQQ00gYXVkaW8gc2lnbmFsIHdpdGggc2FtcGxpbmcgcmF0ZSA4MDAwSHosIAorICogZnJhbWUgbGVuZ3RoIDEwbXMsIGFuZCByZXN1bHRpbmcgaW4gYml0cmF0ZSA4MDAwYnBzIChhbm5leGVzIEQgYW5kIEUKKyAqIGludHJvZHVjZSBiaXRyYXRlcyA2NDAwYnBzIGFuZCAxMTgwMGJwcykuCisgKgorICogXHN1YnNlY3Rpb24gY29kZWNfc2V0dGluZyBDb2RlYyBTZXR0aW5ncworICoKKyAqIEdlbmVyYWwgY29kZWMgc2V0dGluZ3MgZm9yIHRoaXMgY29kZWMgc3VjaCBhcyBWQUQgYW5kIFBMQyBjYW4gYmUgCisgKiBtYW5pcHVsYXRlZCB0aHJvdWdoIHRoZSA8dHQ+c2V0dGluZzwvdHQ+IGZpZWxkIGluICNwam1lZGlhX2NvZGVjX3BhcmFtLiAKKyAqIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50YXRpb24gb2YgI3BqbWVkaWFfY29kZWNfcGFyYW0gZm9yIG1vcmUgaW5mby4KKyAqCisgKiBOb3RlIHRoYXQgRy43MjkgVkFEIHN0YXR1cyBzaG91bGQgYmUgc2lnbmFsbGVkIGluIFNEUCwgc2VlIG1vcmUKKyAqIGRlc2NyaXB0aW9uIGJlbG93LgorICoKKyAqIFxzdWJzdWJzZWN0aW9uIGFubmV4YiBBbm5leCBCCisgKgorICogVGhlIGNhcGFiaWxpdHkgb2YgVkFEL0RUWCBpcyBzcGVjaWZpZWQgaW4gQW5uZXggQi4KKyAqCisgKiBCeSBkZWZhdWx0LCBBbm5leCBCIGlzIGVuYWJsZWQuIFRoaXMgZGVmYXVsdCBzZXR0aW5nIG9mIEFubmV4IEIgY2FuIAorICogYmUgbW9kaWZpZWQgdXNpbmcgI3BqbWVkaWFfY29kZWNfbWdyX3NldF9kZWZhdWx0X3BhcmFtKCkuCisgKgorICogSW4gI3BqbWVkaWFfY29kZWNfcGFyYW0sIEFubmV4IEIgaXMgY29uZmlndXJlZCB2aWEgVkFEIHNldHRpbmcgYW5kCisgKiBmb3JtYXQgcGFyYW1ldGVyICJhbm5leGIiIGluIHRoZSBTRFAgImE9Zm10cCIgYXR0cmlidXRlIGluCisgKiBkZWNvZGluZyBmbXRwIGZpZWxkLiBWYWxpZCB2YWx1ZXMgYXJlICJ5ZXMiIGFuZCAibm8iLAorICogdGhlIGltcGxlbWVudGF0aW9uIGRlZmF1bHQgaXMgInllcyIuIFdoZW4gdGhpcyBwYXJhbWV0ZXIgaXMgb21pdHRlZAorICogaW4gdGhlIFNEUCwgdGhlIHZhbHVlIHdpbGwgYmUgInllcyIgKFJGQyA0ODU2IFNlY3Rpb24gMi4xLjkpLgorICoKKyAqIEhlcmUgaXMgYW4gZXhhbXBsZSBvZiBtb2RpZnlpbmcgZGVmYXVsdCBzZXR0aW5nIG9mIEFubmV4IEIgdG8KKyAqIGJlIGRpc2FibGVkIHVzaW5nICNwam1lZGlhX2NvZGVjX21ncl9zZXRfZGVmYXVsdF9wYXJhbSgpOgorIFxjb2RlCisgICAgcGptZWRpYV9jb2RlY19wYXJhbSBwYXJhbTsKKworICAgIHBqbWVkaWFfY29kZWNfbWdyX2dldF9kZWZhdWx0X3BhcmFtKC4uLCAmcGFyYW0pOworICAgIC4uLgorICAgIC8vIFNldCBWQUQKKyAgICBwYXJhbS5zZXR0aW5nLnZhZCA9IDA7CisgICAgLy8gU2V0IFNEUCBmb3JtYXQgcGFyYW1ldGVyCisgICAgcGFyYW0uc2V0dGluZy5kZWNfZm10cC5jbnQgPSAxOworICAgIHBhcmFtLnNldHRpbmcuZGVjX2ZtdHAucGFyYW1bMF0ubmFtZSA9IHBqX3N0cigiYW5uZXhiIik7CisgICAgcGFyYW0uc2V0dGluZy5kZWNfZm10cC5wYXJhbVswXS52YWwgID0gcGpfc3RyKCJubyIpOworICAgIC4uLgorICAgIHBqbWVkaWFfY29kZWNfbWdyX3NldF9kZWZhdWx0X3BhcmFtKC4uLCAmcGFyYW0pOworIFxlbmRjb2RlCisgKgorICogXG5vdGUKKyAqIFRoZSBkaWZmZXJlbmNlIG9mIEFubmV4IEIgc3RhdHVzIGluIFNEUCBvZmZlci9hbnN3ZXIgbWF5IGJlIGNvbnNpZGVyZWQgYXMgCisgKiBpbmNvbXBhdGlibGUgY29kZWMgaW4gU0RQIG5lZ290aWF0aW9uLgorICoKKyAqIAorICogXHNlY3Rpb24gcGptZWRpYV9jb2RlY19pcHBfZzcyMzEgSVBQIEcuNzIzLjEKKyAqCisgKiBJUFAgRy43MjMuMSBzcGVlY2ggY29kZWMgaXMgY29tcGxpYW50IHdpdGggSVRVLVQgRy43MjMuMSBhbmQgQW5uZXggQQorICogc3BlY2lmaWNhdGlvbnMuCisgKgorICogSVBQIEcuNzIzLjEgc3VwcG9ydHMgMTYtYml0IFBDTSBhdWRpbyBzaWduYWwgd2l0aCBzYW1wbGluZyByYXRlIDgwMDBIeiwgCisgKiBmcmFtZSBsZW5ndGggMzBtcywgYW5kIHJlc3VsdGluZyBpbiBiaXRyYXRlcyA1MzAwYnBzIGFuZCA2MzAwYnBzLgorICoKKyAqIEJ5IGRlZmF1bHQsIHBqbWVkaWEgaW1wbGVtZW50YXRpb24gdXNlcyBlbmNvZGluZyBiaXRyYXRlIG9mIDYzMDBicHMuCisgKiBUaGUgYml0cmF0ZSBpcyBzaWduYWxsZWQgaW4tYmFuZCBpbiBHLjcyMy4xIGZyYW1lcyBhbmQgaW50ZXJvcGVyYWJsZS4KKyAqCisgKiBcc3Vic2VjdGlvbiBjb2RlY19zZXR0aW5nIENvZGVjIFNldHRpbmdzCisgKgorICogR2VuZXJhbCBjb2RlYyBzZXR0aW5ncyBmb3IgdGhpcyBjb2RlYyBzdWNoIGFzIFZBRCBhbmQgUExDIGNhbiBiZSAKKyAqIG1hbmlwdWxhdGVkIHRocm91Z2ggdGhlIDx0dD5zZXR0aW5nPC90dD4gZmllbGQgaW4gI3BqbWVkaWFfY29kZWNfcGFyYW0uIAorICogUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnRhdGlvbiBvZiAjcGptZWRpYV9jb2RlY19wYXJhbSBmb3IgbW9yZSBpbmZvLgorICoKKyAqCisgKiBcc2VjdGlvbiBwam1lZGlhX2NvZGVjX2lwcF9nNzI2IElQUCBHLjcyNgorICoKKyAqIElQUCBHLjcyNiBpcyBjb21wbGlhbnQgd2l0aCBJVFUtVCBHLjcyNiBhbmQgRy43MjYgQW5uZXggQSBzcGVjaWZpY2F0aW9ucy4KKyAqCisgKiBJUFAgRy43MjYgc3VwcG9ydHMgMTYtYml0IFBDTSBhdWRpbyBzaWduYWwgd2l0aCBzYW1wbGluZyByYXRlIDgwMDBIeiwKKyAqIDEwbXMgZnJhbWUgbGVuZ3RoIGFuZCBwcm9kdWNpbmcgMTZrYnBzLCAyNGticHMsIDMya2JwcywgNDhrYnBzIGJpdHJhdGVzLgorICogVGhlIGJpdHJhdGUgaXMgc3BlY2lmaWVkIGV4cGxpY2l0bHkgaW4gaXRzIGVuY29kaW5nIG5hbWUsIGkuZTogRzcyNi0xNiwKKyAqIEc3MjYtMjQsIEc3MjYtMzIsIEc3MjYtNDguCisgKgorICogXHN1YnNlY3Rpb24gY29kZWNfc2V0dGluZyBDb2RlYyBTZXR0aW5ncworICoKKyAqIEdlbmVyYWwgY29kZWMgc2V0dGluZ3MgZm9yIHRoaXMgY29kZWMgc3VjaCBhcyBWQUQgYW5kIFBMQyBjYW4gYmUgCisgKiBtYW5pcHVsYXRlZCB0aHJvdWdoIHRoZSA8dHQ+c2V0dGluZzwvdHQ+IGZpZWxkIGluICNwam1lZGlhX2NvZGVjX3BhcmFtLiAKKyAqIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50YXRpb24gb2YgI3BqbWVkaWFfY29kZWNfcGFyYW0gZm9yIG1vcmUgaW5mby4KKyAqCisgKgorICogXHNlY3Rpb24gcGptZWRpYV9jb2RlY19pcHBfZzcyOCBJUFAgRy43MjgKKyAqCisgKiBJUFAgRy43MjggaXMgY29tcGxpYW50IHdpdGggSVRVLVQgRy43Mjggd2l0aCBJLCBHLCBIIEFwcGVuZGl4ZXMgCisgKiBzcGVjaWZpY2F0aW9ucyBmb3IgTG93LURlbGF5IENFTFAgY29kZXIuCisgKiAKKyAqIElQUCBHLjcyOCBzdXBwb3J0cyAxNi1iaXQgUENNIGF1ZGlvIHNpZ25hbCB3aXRoIHNhbXBsaW5nIHJhdGUgODAwMEh6LAorICogMjBtcyBmcmFtZSBsZW5ndGggYW5kIHByb2R1Y2luZyA5LjZrYnBzLCAxMi44a2JwcywgYW5kIDE2a2JwcyBiaXRyYXRlcy4KKyAqCisgKiBUaGUgcGptZWRpYSBpbXBsZW1lbnRhdGlvbiBjdXJyZW50bHkgdXNlcyAxNmticHMgYml0cmF0ZSBvbmx5LgorICoKKyAqIFxzdWJzZWN0aW9uIGNvZGVjX3NldHRpbmcgQ29kZWMgU2V0dGluZ3MKKyAqCisgKiBHZW5lcmFsIGNvZGVjIHNldHRpbmdzIGZvciB0aGlzIGNvZGVjIHN1Y2ggYXMgVkFEIGFuZCBQTEMgY2FuIGJlIAorICogbWFuaXB1bGF0ZWQgdGhyb3VnaCB0aGUgPHR0PnNldHRpbmc8L3R0PiBmaWVsZCBpbiAjcGptZWRpYV9jb2RlY19wYXJhbS4gCisgKiBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mICNwam1lZGlhX2NvZGVjX3BhcmFtIGZvciBtb3JlIGluZm8uCisgKgorICoKKyAqIFxzZWN0aW9uIHBqbWVkaWFfY29kZWNfaXBwX2c3MjIxIElQUCBHLjcyMi4xCisgKgorICogVGhlIHBqbWVkaWEgaW1wbGVtZW50YXRpb24gb2YgSVBQIEcuNzIyLjEgc3VwcG9ydHMgMTYtYml0IFBDTSBhdWRpbyAKKyAqIHNpZ25hbCB3aXRoIHNhbXBsaW5nIHJhdGUgMTYwMDBIeiwgMjBtcyBmcmFtZSBsZW5ndGggYW5kIHByb2R1Y2luZyAKKyAqIDE2a2JwcywgMjRrYnBzLCBhbmQgMzJrYnBzIGJpdHJhdGVzLgorICoKKyAqIFxzdWJzZWN0aW9uIGNvZGVjX3NldHRpbmcgQ29kZWMgU2V0dGluZ3MKKyAqCisgKiBHZW5lcmFsIGNvZGVjIHNldHRpbmdzIGZvciB0aGlzIGNvZGVjIHN1Y2ggYXMgVkFEIGFuZCBQTEMgY2FuIGJlIAorICogbWFuaXB1bGF0ZWQgdGhyb3VnaCB0aGUgPHR0PnNldHRpbmc8L3R0PiBmaWVsZCBpbiAjcGptZWRpYV9jb2RlY19wYXJhbS4gCisgKiBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mICNwam1lZGlhX2NvZGVjX3BhcmFtIGZvciBtb3JlIGluZm8uCisgKgorICogXHN1YnN1YnNlY3Rpb24gYml0cmF0ZSBCaXRyYXRlCisgKgorICogVGhlIGNvZGVjIGltcGxlbWVudGF0aW9uIHN1cHBvcnRzIG9ubHkgc3RhbmRhcmQgYml0cmF0ZXMsIGkuZToKKyAqIDI0a2JwcyBhbmQgMzJrYnBzLiBCb3RoIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQuCisgKgorICogXHJlbWFyaworICogVGhlcmUgaXMgYSBmbGF3IGluIHRoZSBjb2RlYyBtYW5hZ2VyIGFzIGN1cnJlbnRseSBpdCBjb3VsZCBub3QgCisgKiBkaWZmZXJlbnRpYXRlIEcuNzIyLjEgY29kZWNzIGJ5IGJpdHJhdGVzLCBoZW5jZSBpbnZva2luZyAKKyAqICNwam1lZGlhX2NvZGVjX21ncl9zZXRfZGVmYXVsdF9wYXJhbSgpIG1heSBvbmx5IGFmZmVjdCBhIEcuNzIyLjEgY29kZWMKKyAqIHdpdGggdGhlIGhpZ2hlc3QgcHJpb3JpdHkgKG9yIGZpcnN0IGluZGV4IGZvdW5kIGluIGNvZGVjIGVudW1lcmF0aW9uIAorICogd2hlbiB0aGV5IGhhdmUgc2FtZSBwcmlvcml0eSkgYW5kIGludm9raW5nCisgKiAjcGptZWRpYV9jb2RlY19tZ3Jfc2V0X2NvZGVjX3ByaW9yaXR5KCkgd2lsbCBzZXQgcHJpb3JpdHkgb2YgYWxsIEcuNzIyLjEKKyAqIGNvZGVjcyB3aXRoIHNhbXBsaW5nIHJhdGUgYXMgc3BlY2lmaWVkLgorICoKKyAqCisgKiBcc2VjdGlvbiBwam1lZGlhX2NvZGVjX2lwcF9hbXIgSVBQIEFNUgorICoKKyAqIFRoZSBJUFAgQU1SIGlzIGNvbXBsaWFudCB3aXRoIEdTTTA2LjkwLTk0IHNwZWNpZmljYXRpb25zIGZvciBHU00gQWRhcHRpdmUKKyAqIE11bHRpLVJhdGUgY29kZWMuCisgKgorICogSVBQIEFNUiBzdXBwb3J0cyAxNi1iaXQgUENNIGF1ZGlvIHNpZ25hbCB3aXRoIHNhbXBsaW5nIHJhdGUgODAwMEh6LAorICogMjBtcyBmcmFtZSBsZW5ndGggYW5kIHByb2R1Y2luZyB2YXJpb3VzIGJpdHJhdGVzIHRoYXQgcmFuZ2VzIGZyb20gNC43NWticHMKKyAqIHRvIDEyLjJrYnBzLgorICoKKyAqIFxzdWJzZWN0aW9uIGNvZGVjX3NldHRpbmcgQ29kZWMgU2V0dGluZ3MKKyAqCisgKiBHZW5lcmFsIGNvZGVjIHNldHRpbmdzIGZvciB0aGlzIGNvZGVjIHN1Y2ggYXMgVkFEIGFuZCBQTEMgY2FuIGJlIAorICogbWFuaXB1bGF0ZWQgdGhyb3VnaCB0aGUgPHR0PnNldHRpbmc8L3R0PiBmaWVsZCBpbiAjcGptZWRpYV9jb2RlY19wYXJhbS4gCisgKiBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mICNwam1lZGlhX2NvZGVjX3BhcmFtIGZvciBtb3JlIGluZm8uCisgKgorICogXHN1YnN1YnNlY3Rpb24gYml0cmF0ZSBCaXRyYXRlCisgKgorICogQnkgZGVmYXVsdCwgZW5jb2RpbmcgYml0cmF0ZSBpcyA3NDAwYnBzLiBUaGlzIGRlZmF1bHQgc2V0dGluZyBjYW4gYmUgCisgKiBtb2RpZmllZCB1c2luZyAjcGptZWRpYV9jb2RlY19tZ3Jfc2V0X2RlZmF1bHRfcGFyYW0oKSBieSBzcGVjaWZ5aW5nIAorICogcHJlZmVyZWQgQU1SIGJpdHJhdGUgaW4gZmllbGQgPHR0PmluZm86OmF2Z19icHM8L3R0PiBvZiAKKyAqICNwam1lZGlhX2NvZGVjX3BhcmFtLiBWYWxpZCBiaXRyYXRlcyBjb3VsZCBiZSBzZWVuIGluIAorICogI3BqbWVkaWFfY29kZWNfYW1ybmJfYml0cmF0ZXMuCisgKgorICogXHN1YnN1YnNlY3Rpb24gcGF5bG9hZF9mb3JtYXQgUGF5bG9hZCBGb3JtYXQKKyAqCisgKiBUaGVyZSBhcmUgdHdvIEFNUiBwYXlsb2FkIGZvcm1hdCB0eXBlcywgYmFuZHdpZHRoLWVmZmljaWVudCBhbmQKKyAqIG9jdGV0LWFsaWduZWQuIERlZmF1bHQgc2V0dGluZyBpcyB1c2luZyBvY3RldC1hbGlnbmVkLiBUaGlzIGRlZmF1bHQgcGF5bG9hZAorICogZm9ybWF0IGNhbiBiZSBtb2RpZmllZCB1c2luZyAjcGptZWRpYV9jb2RlY19tZ3Jfc2V0X2RlZmF1bHRfcGFyYW0oKS4KKyAqCisgKiBJbiAjcGptZWRpYV9jb2RlY19wYXJhbSwgcGF5bG9hZCBmb3JtYXQgY2FuIGJlIHNldCBieSBzcGVjaWZ5aW5nIFNEUCAKKyAqIGZvcm1hdCBwYXJhbWV0ZXJzICJvY3RldC1hbGlnbiIgaW4gdGhlIFNEUCAiYT1mbXRwIiBhdHRyaWJ1dGUgZm9yIAorICogZGVjb2RpbmcgZGlyZWN0aW9uLiBWYWxpZCB2YWx1ZXMgYXJlICIwIiAoZm9yIGJhbmR3aWR0aCBlZmZpY2llbnQgbW9kZSkKKyAqIGFuZCAiMSIgKGZvciBvY3RldC1hbGlnbmVkIG1vZGUpLgorICoKKyAqIFxzdWJzdWJzZWN0aW9uIG1vZGVfc2V0IE1vZGUtU2V0CisgKiAKKyAqIE1vZGUtc2V0IGlzIHVzZWQgZm9yIHJlc3RyaWN0aW5nIEFNUiBtb2RlcyBpbiBkZWNvZGluZyBkaXJlY3Rpb24uCisgKgorICogQnkgZGVmYXVsdCwgbm8gbW9kZS1zZXQgcmVzdHJpY3Rpb24gYXBwbGllZC4gVGhpcyBkZWZhdWx0IHNldHRpbmcgY2FuIGJlIAorICogYmUgbW9kaWZpZWQgdXNpbmcgI3BqbWVkaWFfY29kZWNfbWdyX3NldF9kZWZhdWx0X3BhcmFtKCkuCisgKgorICogSW4gI3BqbWVkaWFfY29kZWNfcGFyYW0sIG1vZGUtc2V0IGNvdWxkIGJlIHNwZWNpZmllZCB2aWEgZm9ybWF0IHBhcmFtZXRlcnMKKyAqICJtb2RlLXNldCIgaW4gdGhlIFNEUCAiYT1mbXRwIiBhdHRyaWJ1dGUgZm9yIGRlY29kaW5nIGRpcmVjdGlvbi4gVmFsaWQgCisgKiB2YWx1ZSBpcyBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIG1vZGVzIGZyb20gdGhlIHNldCAwIC0gNywgZS5nOiAKKyAqICI0LDUsNiw3Ii4gV2hlbiB0aGlzIHBhcmFtZXRlciBpcyBvbWl0dGVkLCBubyBtb2RlLXNldCByZXN0cmljdGlvbnMgYXBwbGllZC4KKyAqCisgKiBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgbW9kaWZ5aW5nIEFNUiBkZWZhdWx0IGNvZGVjIHBhcmFtOgorIFxjb2RlCisgICAgcGptZWRpYV9jb2RlY19wYXJhbSBwYXJhbTsKKworICAgIHBqbWVkaWFfY29kZWNfbWdyX2dldF9kZWZhdWx0X3BhcmFtKC4uLCAmcGFyYW0pOworICAgIC4uLgorICAgIC8vIHNldCBkZWZhdWx0IGVuY29kaW5nIGJpdHJhdGUgdG8gdGhlIGhpZ2hlc3QgMTIuMmticHMKKyAgICBwYXJhbS5pbmZvLmF2Z19icHMgPSAxMjIwMDsKKworICAgIC8vIHJlc3RyaWN0IGRlY29kaW5nIGJpdHJhdGUgdG8gMTAuMmticHMgYW5kIDEyLjJrYnBzIG9ubHkKKyAgICBwYXJhbS5zZXR0aW5nLmRlY19mbXRwLnBhcmFtWzBdLm5hbWUgPSBwal9zdHIoIm1vZGUtc2V0Iik7CisgICAgcGFyYW0uc2V0dGluZy5kZWNfZm10cC5wYXJhbVswXS52YWwgID0gcGpfc3RyKCI2LDciKTsKKworICAgIC8vIGFsc28gc2V0IHRvIHVzZSBiYW5kd2lkdGgtZWZmaWNpZW50IHBheWxvYWQgZm9ybWF0CisgICAgcGFyYW0uc2V0dGluZy5kZWNfZm10cC5wYXJhbVsxXS5uYW1lID0gcGpfc3RyKCJvY3RldC1hbGlnbiIpOworICAgIHBhcmFtLnNldHRpbmcuZGVjX2ZtdHAucGFyYW1bMV0udmFsICA9IHBqX3N0cigiMCIpOworCisgICAgcGFyYW0uc2V0dGluZy5kZWNfZm10cC5jbnQgPSAyOworICAgIC4uLgorICAgIHBqbWVkaWFfY29kZWNfbWdyX3NldF9kZWZhdWx0X3BhcmFtKC4uLCAmcGFyYW0pOworIFxlbmRjb2RlCisgKiAKKyAqCisgKiBcc2VjdGlvbiBwam1lZGlhX2NvZGVjX2lwcF9hbXJ3YiBJUFAgQU1SLVdCCisgKgorICogVGhlIElQUCBBTVItV0IgaXMgY29tcGxpYW50IHdpdGggM0dQUCBUUyAyNi4xOTAtMTkyLCAxOTQsIDIwMSAKKyAqIHNwZWNpZmljYXRpb25zIGZvciBBZGFwdGl2ZSBNdWx0aS1SYXRlIFdpZGVCYW5kIGNvZGVjLgorICoKKyAqIElQUCBBTVItV0Igc3VwcG9ydHMgMTYtYml0IFBDTSBhdWRpbyBzaWduYWwgd2l0aCBzYW1wbGluZyByYXRlIDE2MDAwSHosCisgKiAyMG1zIGZyYW1lIGxlbmd0aCBhbmQgcHJvZHVjaW5nIHZhcmlvdXMgYml0cmF0ZXMuIFZhbGlkIGJpdHJhdGVzIGNvdWxkIGJlCisgKiBzZWVuIGluICNwam1lZGlhX2NvZGVjX2FtcndiX2JpdHJhdGVzLiBUaGUgcGptZWRpYSBpbXBsZW1lbnRhdGlvbiBkZWZhdWx0CisgKiBiaXRyYXRlIGlzIDE1ODUwYnBzLgorICoKKyAqIFxzdWJzZWN0aW9uIGNvZGVjX3NldHRpbmcgQ29kZWMgU2V0dGluZ3MKKyAqCisgKiBHZW5lcmFsIGNvZGVjIHNldHRpbmdzIGZvciB0aGlzIGNvZGVjIHN1Y2ggYXMgVkFEIGFuZCBQTEMgY2FuIGJlIAorICogbWFuaXB1bGF0ZWQgdGhyb3VnaCB0aGUgPHR0PnNldHRpbmc8L3R0PiBmaWVsZCBpbiAjcGptZWRpYV9jb2RlY19wYXJhbS4gCisgKiBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mICNwam1lZGlhX2NvZGVjX3BhcmFtIGZvciBtb3JlIGluZm8uCisgKgorICogXHN1YnN1YnNlY3Rpb24gYml0cmF0ZSBCaXRyYXRlCisgKgorICogQnkgZGVmYXVsdCwgZW5jb2RpbmcgYml0cmF0ZSBpcyAxNTg1MGJwcy4gVGhpcyBkZWZhdWx0IHNldHRpbmcgY2FuIGJlIAorICogbW9kaWZpZWQgdXNpbmcgI3BqbWVkaWFfY29kZWNfbWdyX3NldF9kZWZhdWx0X3BhcmFtKCkgYnkgc3BlY2lmeWluZyAKKyAqIHByZWZlcmVkIEFNUiBiaXRyYXRlIGluIGZpZWxkIDx0dD5pbmZvOjphdmdfYnBzPC90dD4gb2YgCisgKiAjcGptZWRpYV9jb2RlY19wYXJhbS4KKyAqCisgKiBcc3Vic3Vic2VjdGlvbiBwYXlsb2FkX2Zvcm1hdCBQYXlsb2FkIEZvcm1hdAorICoKKyAqIFRoZXJlIGFyZSB0d28gQU1SIHBheWxvYWQgZm9ybWF0IHR5cGVzLCBiYW5kd2lkdGgtZWZmaWNpZW50IGFuZAorICogb2N0ZXQtYWxpZ25lZC4gRGVmYXVsdCBzZXR0aW5nIGlzIHVzaW5nIG9jdGV0LWFsaWduZWQuIFRoaXMgZGVmYXVsdCBwYXlsb2FkCisgKiBmb3JtYXQgY2FuIGJlIG1vZGlmaWVkIHVzaW5nICNwam1lZGlhX2NvZGVjX21ncl9zZXRfZGVmYXVsdF9wYXJhbSgpLgorICoKKyAqIEluICNwam1lZGlhX2NvZGVjX3BhcmFtLCBwYXlsb2FkIGZvcm1hdCBjYW4gYmUgc2V0IGJ5IHNwZWNpZnlpbmcgU0RQIAorICogZm9ybWF0IHBhcmFtZXRlcnMgIm9jdGV0LWFsaWduIiBpbiB0aGUgU0RQICJhPWZtdHAiIGF0dHJpYnV0ZSBmb3IgCisgKiBkZWNvZGluZyBkaXJlY3Rpb24uIFZhbGlkIHZhbHVlcyBhcmUgIjAiIChmb3IgYmFuZHdpZHRoIGVmZmljaWVudCBtb2RlKQorICogYW5kICIxIiAoZm9yIG9jdGV0LWFsaWduZWQgbW9kZSkuCisgKgorICogXHN1YnN1YnNlY3Rpb24gbW9kZV9zZXQgTW9kZS1TZXQKKyAqIAorICogTW9kZS1zZXQgaXMgdXNlZCBmb3IgcmVzdHJpY3RpbmcgQU1SIG1vZGVzIGluIGRlY29kaW5nIGRpcmVjdGlvbi4KKyAqCisgKiBCeSBkZWZhdWx0LCBubyBtb2RlLXNldCByZXN0cmljdGlvbiBhcHBsaWVkLiBUaGlzIGRlZmF1bHQgc2V0dGluZyBjYW4gYmUgCisgKiBiZSBtb2RpZmllZCB1c2luZyAjcGptZWRpYV9jb2RlY19tZ3Jfc2V0X2RlZmF1bHRfcGFyYW0oKS4KKyAqCisgKiBJbiAjcGptZWRpYV9jb2RlY19wYXJhbSwgbW9kZS1zZXQgY291bGQgYmUgc3BlY2lmaWVkIHZpYSBmb3JtYXQgcGFyYW1ldGVycworICogIm1vZGUtc2V0IiBpbiB0aGUgU0RQICJhPWZtdHAiIGF0dHJpYnV0ZSBmb3IgZGVjb2RpbmcgZGlyZWN0aW9uLiBWYWxpZCAKKyAqIHZhbHVlIGlzIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgbW9kZXMgZnJvbSB0aGUgc2V0IDAgLSA3LCBlLmc6IAorICogIjQsNSw2LDciLiBXaGVuIHRoaXMgcGFyYW1ldGVyIGlzIG9taXR0ZWQsIG5vIG1vZGUtc2V0IHJlc3RyaWN0aW9ucyBhcHBsaWVkLgorICovCisKK1BKX0JFR0lOX0RFQ0wKKworCisvKioKKyAqIEluaXRpYWxpemUgYW5kIHJlZ2lzdGVyIElQUCBjb2RlY3MgZmFjdG9yeSB0byBwam1lZGlhIGVuZHBvaW50LgorICoKKyAqIEBwYXJhbSBlbmRwdAkgICAgVGhlIHBqbWVkaWEgZW5kcG9pbnQuCisgKgorICogQHJldHVybgkgICAgUEpfU1VDQ0VTUyBvbiBzdWNjZXNzLgorICovCitQSl9ERUNMKHBqX3N0YXR1c190KSBwam1lZGlhX2NvZGVjX2lwcF9pbml0KCBwam1lZGlhX2VuZHB0ICplbmRwdCApOworCisKKy8qKgorICogVW5yZWdpc3RlciBJUFAgY29kZWNzIGZhY3RvcnkgZnJvbSBwam1lZGlhIGVuZHBvaW50IGFuZCBkZWluaXRpYWxpemUKKyAqIHRoZSBJUFAgY29kZWNzIGxpYnJhcnkuCisgKgorICogQHJldHVybgkgICAgUEpfU1VDQ0VTUyBvbiBzdWNjZXNzLgorICovCitQSl9ERUNMKHBqX3N0YXR1c190KSBwam1lZGlhX2NvZGVjX2lwcF9kZWluaXQodm9pZCk7CisKKworUEpfRU5EX0RFQ0wKKworCisvKioKKyAqIEB9CisgKi8KKworI2VuZGlmCS8qIF9fUEpNRURJQV9DT0RFQ1NfSVBQX0hfXyAqLworCmRpZmYgLS1naXQgYS9qbmkvbGlicGpzaXAvc291cmNlcy9wam1lZGlhL2luY2x1ZGUvcGptZWRpYS1jb2RlYy9sMTYuaCBiL2puaS9saWJwanNpcC9zb3VyY2VzL3BqbWVkaWEvaW5jbHVkZS9wam1lZGlhLWNvZGVjL2wxNi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0YjUwZDAKLS0tIC9kZXYvbnVsbAorKysgYi9qbmkvbGlicGpzaXAvc291cmNlcy9wam1lZGlhL2luY2x1ZGUvcGptZWRpYS1jb2RlYy9sMTYuaApAQCAtMCwwICsxLDgxIEBACisvKiAkSWQ6IGwxNi5oIDM1NTMgMjAxMS0wNS0wNSAwNjoxNDoxOVogbmFuYW5nICQgKi8KKy8qIAorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTEgVGVsdXUgSW5jLiAoaHR0cDovL3d3dy50ZWx1dS5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOCBCZW5ueSBQcmlqb25vIDxiZW5ueUBwcmlqb25vLm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBIAorICovCisjaWZuZGVmIF9fUEpNRURJQV9DT0RFQ19MMTZfSF9fCisjZGVmaW5lIF9fUEpNRURJQV9DT0RFQ19MMTZfSF9fCisKKyNpbmNsdWRlIDxwam1lZGlhLWNvZGVjL3R5cGVzLmg+CisKKworLyoqCisgKiBAZGVmZ3JvdXAgUEpNRURfTDE2IEwxNiBDb2RlYyBGYW1pbHkKKyAqIEBpbmdyb3VwIFBKTUVESUFfQ09ERUNfQ09ERUNTCisgKiBAYnJpZWYgSW1wbGVtZW50YXRpb24gb2YgUENNLzE2Yml0L2xpbmVhciBjb2RlY3MKKyAqIEB7CisgKgorICogVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBmdW5jdGlvbnMgdG8gaW5pdGlhbGl6ZSBhbmQgcmVnaXN0ZXIgTDE2IGNvZGVjCisgKiBmYWN0b3J5IHRvIHRoZSBjb2RlYyBtYW5hZ2VyLiBBZnRlciB0aGUgY29kZWMgZmFjdG9yeSBoYXMgYmVlbiByZWdpc3RlcmVkLAorICogYXBwbGljYXRpb24gY2FuIHVzZSBAcmVmIFBKTUVESUFfQ09ERUMgQVBJIHRvIG1hbmlwdWxhdGUgdGhlIGNvZGVjLgorICoKKyAqIE5vdGUgdGhhdCB0aGUgTDE2IGNvZGVjIGZhY3RvcnkgcmVnaXN0ZXJzIHNldmVyYWwgKGFib3V0IGZvdXJ0ZWVuISkgCisgKiBMMTYgY29kZWMgdHlwZXMgdG8gY29kZWMgbWFuYWdlciAoZGlmZmVyZW50IGNvbWJpbmF0aW9ucyBvZiBjbG9jaworICogcmF0ZSBhbmQgbnVtYmVyIG9mIGNoYW5uZWxzKS4KKyAqCisgKiBcc2VjdGlvbiBjb2RlY19zZXR0aW5nIENvZGVjIFNldHRpbmdzCisgKgorICogXHN1YnNlY3Rpb24gZ2VuZXJhbF9zZXR0aW5nIEdlbmVyYWwgU2V0dGluZ3MKKyAqCisgKiBHZW5lcmFsIGNvZGVjIHNldHRpbmdzIGZvciB0aGlzIGNvZGVjIHN1Y2ggYXMgVkFEIGFuZCBQTEMgY2FuIGJlIAorICogbWFuaXB1bGF0ZWQgdGhyb3VnaCB0aGUgPHR0PnNldHRpbmc8L3R0PiBmaWVsZCBpbiAjcGptZWRpYV9jb2RlY19wYXJhbS4gCisgKiBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mICNwam1lZGlhX2NvZGVjX3BhcmFtIGZvciBtb3JlIGluZm8uCisgKgorICogXHN1YnNlY3Rpb24gc3BlY2lmaWNfc2V0dGluZyBDb2RlYyBTcGVjaWZpYyBTZXR0aW5ncworICoKKyAqIEN1cnJlbnRseSBub25lLgorICovCisKK1BKX0JFR0lOX0RFQ0wKKworCisvKioKKyAqIEluaXRpYWxpemUgYW5kIHJlZ2lzdGVyIEwxNiBjb2RlYyBmYWN0b3J5IHRvIHBqbWVkaWEgZW5kcG9pbnQuCisgKgorICogQHBhcmFtIGVuZHB0CSAgICBUaGUgcGptZWRpYSBlbmRwb2ludC4KKyAqIEBwYXJhbSBvcHRpb25zICAgTXVzdCBiZSB6ZXJvIGZvciBub3cuCisgKgorICogQHJldHVybgkgICAgUEpfU1VDQ0VTUyBvbiBzdWNjZXNzLgorICovCitQSl9ERUNMKHBqX3N0YXR1c190KSBwam1lZGlhX2NvZGVjX2wxNl9pbml0KCBwam1lZGlhX2VuZHB0ICplbmRwdCwKKwkJCQkJICAgICB1bnNpZ25lZCBvcHRpb25zKTsKKworCisKKy8qKgorICogVW5yZWdpc3RlciBMMTYgY29kZWMgZmFjdG9yeSBmcm9tIHBqbWVkaWEgZW5kcG9pbnQuCisgKgorICogQHJldHVybgkgICAgUEpfU1VDQ0VTUyBvbiBzdWNjZXNzLgorICovCitQSl9ERUNMKHBqX3N0YXR1c190KSBwam1lZGlhX2NvZGVjX2wxNl9kZWluaXQodm9pZCk7CisKKworUEpfRU5EX0RFQ0wKKworCisjZW5kaWYJLyogX19QSk1FRElBX0NPREVDX0wxNl9IX18gKi8KKwpkaWZmIC0tZ2l0IGEvam5pL2xpYnBqc2lwL3NvdXJjZXMvcGptZWRpYS9pbmNsdWRlL3BqbWVkaWEtY29kZWMvb3BlbmNvcmVfYW1yLmggYi9qbmkvbGlicGpzaXAvc291cmNlcy9wam1lZGlhL2luY2x1ZGUvcGptZWRpYS1jb2RlYy9vcGVuY29yZV9hbXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDUwNDliCi0tLSAvZGV2L251bGwKKysrIGIvam5pL2xpYnBqc2lwL3NvdXJjZXMvcGptZWRpYS9pbmNsdWRlL3BqbWVkaWEtY29kZWMvb3BlbmNvcmVfYW1yLmgKQEAgLTAsMCArMSwxNDYgQEAKKy8qICRJZDogb3BlbmNvcmVfYW1yLmggNDMzNSAyMDEzLTAxLTI5IDA4OjA5OjE1WiBtaW5nICQgKi8KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBUZWx1dSBJbmMuIChodHRwOi8vd3d3LnRlbHV1LmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAxMSBEYW4gQXJyaGVuaXVzIDxkYW5Aa2V5c3RyZWFtLnNlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2lmbmRlZiBfX1BKTUVESUFfQ09ERUNfT1BFTkNPUkVfQU1SX0hfXworI2RlZmluZSBfX1BKTUVESUFfQ09ERUNfT1BFTkNPUkVfQU1SX0hfXworCisjaW5jbHVkZSA8cGptZWRpYS1jb2RlYy90eXBlcy5oPgorCisvKioKKyAqIEBkZWZncm91cCBQSk1FRF9PQ19BTVIgT3BlbkNPUkUgQU1SIENvZGVjCisgKiBAaW5ncm91cCBQSk1FRElBX0NPREVDX0NPREVDUworICogQGJyaWVmIEFNUkNvZGVjIHdyYXBwZXIgZm9yIE9wZW5DT1JFIEFNUiBjb2RlYworICogQHsKKyAqLworCitQSl9CRUdJTl9ERUNMCisKKy8qKgorICogQml0bWFzayBvcHRpb25zIHRvIGJlIHBhc3NlZCBkdXJpbmcgQU1SIGNvZGVjIGZhY3RvcnkgaW5pdGlhbGl6YXRpb24uCisgKi8KK2VudW0gcGptZWRpYV9hbXJfb3B0aW9ucworeworICAgIFBKTUVESUFfQU1SX05PX05CCSAgICA9IDEsICAgIC8qKjwgRGlzYWJsZSBuYXJyb3diYW5kIG1vZGUuCSovCisgICAgUEpNRURJQV9BTVJfTk9fV0IJICAgID0gMiwgICAgLyoqPCBEaXNhYmxlIHdpZGViYW5kIG1vZGUuCQkqLworfTsKKworLyoqCisgKiBTZXR0aW5ncy4gVXNlICNwam1lZGlhX2NvZGVjX29wZW5jb3JlX2Ftcm5iL3diX3NldF9jb25maWcoKSB0bworICogYWN0aXZhdGUuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBqbWVkaWFfY29kZWNfYW1yX2NvbmZpZworeworICAgIC8qKgorICAgICAqIENvbnRyb2wgd2hldGhlciB0byB1c2Ugb2N0ZW50IGFsaWduLgorICAgICAqLworICAgIHBqX2Jvb2xfdCBvY3RldF9hbGlnbjsKKworICAgIC8qKgorICAgICAqIFNldCB0aGUgYml0cmF0ZS4KKyAgICAgKi8KKyAgICB1bnNpZ25lZCBiaXRyYXRlOworCit9IHBqbWVkaWFfY29kZWNfYW1yX2NvbmZpZzsKKwordHlwZWRlZiBwam1lZGlhX2NvZGVjX2Ftcl9jb25maWcgcGptZWRpYV9jb2RlY19hbXJuYl9jb25maWc7Cit0eXBlZGVmIHBqbWVkaWFfY29kZWNfYW1yX2NvbmZpZyBwam1lZGlhX2NvZGVjX2FtcndiX2NvbmZpZzsKKworLyoqCisgKiBJbml0aWFsaXplIGFuZCByZWdpc3RlciBBTVIgY29kZWMgZmFjdG9yeSB0byBwam1lZGlhIGVuZHBvaW50LgorICoKKyAqIEBwYXJhbSBlbmRwdCAgICAgVGhlIHBqbWVkaWEgZW5kcG9pbnQuCisgKiBAcGFyYW0gb3B0aW9ucyAgIEJpdG1hc2sgb2YgcGptZWRpYV9hbXJfb3B0aW9ucyAoZGVmYXVsdD0wKS4KKyAqCisgKiBAcmV0dXJuICAgICAgICAgIFBKX1NVQ0NFU1Mgb24gc3VjY2Vzcy4KKyAqLworUEpfREVDTChwal9zdGF0dXNfdCkgcGptZWRpYV9jb2RlY19vcGVuY29yZV9hbXJfaW5pdChwam1lZGlhX2VuZHB0KiBlbmRwdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgb3B0aW9ucyk7CisKKy8qKgorICogSW5pdGlhbGl6ZSBhbmQgcmVnaXN0ZXIgQU1SIGNvZGVjIGZhY3RvcnkgdXNpbmcgZGVmYXVsdCBzZXR0aW5ncyB0bworICogcGptZWRpYSBlbmRwb2ludC4KKyAqCisgKiBAcGFyYW0gZW5kcHQgVGhlIHBqbWVkaWEgZW5kcG9pbnQuCisgKgorICogQHJldHVybglQSl9TVUNDRVNTIG9uIHN1Y2Nlc3MuCisgKi8KK1BKX0RFQ0wocGpfc3RhdHVzX3QpCitwam1lZGlhX2NvZGVjX29wZW5jb3JlX2Ftcl9pbml0X2RlZmF1bHQocGptZWRpYV9lbmRwdCogZW5kcHQpOworCisvKioKKyAqIFVucmVnaXN0ZXIgQU1SIGNvZGVjIGZhY3RvcnkgZnJvbSBwam1lZGlhIGVuZHBvaW50IGFuZCBkZWluaXRpYWxpemUKKyAqIHRoZSBPcGVuQ09SRSBjb2RlYyBsaWJyYXJ5LgorICoKKyAqIEByZXR1cm4JUEpfU1VDQ0VTUyBvbiBzdWNjZXNzLgorICovCitQSl9ERUNMKHBqX3N0YXR1c190KSBwam1lZGlhX2NvZGVjX29wZW5jb3JlX2Ftcl9kZWluaXQodm9pZCk7CisKKy8qKgorICogSW5pdGlhbGl6ZSBhbmQgcmVnaXN0ZXIgQU1SLU5CIGNvZGVjIGZhY3RvcnkgdG8gcGptZWRpYSBlbmRwb2ludC4gQ2FsbGluZworICogdGhpcyBmdW5jdGlvbiB3aWxsIGF1dG9tYXRpY2FsbHkgaW5pdGlhbGl6ZSBBTVIgY29kZWMgZmFjdG9yeSB3aXRob3V0CisgKiB0aGUgd2lkZWJhbmQgbW9kZSAoaS5lLiBpdCBpcyBlcXVpdmFsZW50IHRvIGNhbGxpbmcKKyAqICNwam1lZGlhX2NvZGVjX29wZW5jb3JlX2Ftcl9pbml0KCkgd2l0aCBQSk1FRElBX0FNUl9OT19XQikuIEFwcGxpY2F0aW9uCisgKiBzaG91bGQgY2FsbCAjcGptZWRpYV9jb2RlY19vcGVuY29yZV9hbXJfaW5pdCgpIGluc3RlYWQgaWYgd2lzaGluZyB0byB1c2UKKyAqIGJvdGggbW9kZXMuCisgKgorICogQHBhcmFtIGVuZHB0CVRoZSBwam1lZGlhIGVuZHBvaW50LgorICoKKyAqIEByZXR1cm4JUEpfU1VDQ0VTUyBvbiBzdWNjZXNzLgorICovCitQSl9ERUNMKHBqX3N0YXR1c190KSBwam1lZGlhX2NvZGVjX29wZW5jb3JlX2Ftcm5iX2luaXQocGptZWRpYV9lbmRwdCogZW5kcHQpOworCisvKioKKyAqIFVucmVnaXN0ZXIgQU1SLU5CIGNvZGVjIGZhY3RvcnkgZnJvbSBwam1lZGlhIGVuZHBvaW50IGFuZCBkZWluaXRpYWxpemUKKyAqIHRoZSBPcGVuQ09SRSBjb2RlYyBsaWJyYXJ5LgorICoKKyAqIEByZXR1cm4JUEpfU1VDQ0VTUyBvbiBzdWNjZXNzLgorICovCitQSl9ERUNMKHBqX3N0YXR1c190KSBwam1lZGlhX2NvZGVjX29wZW5jb3JlX2Ftcm5iX2RlaW5pdCh2b2lkKTsKKworCisvKioKKyAqIFNldCBBTVItTkIgcGFyYW1ldGVycy4KKyAqCisgKiBAcGFyYW0gY2ZnCVRoZSBzZXR0aW5nczsKKyAqCisgKiBAcmV0dXJuCVBKX1NVQ0NFU1Mgb24gc3VjY2Vzcy4KKyAqLworUEpfREVDTChwal9zdGF0dXNfdCkgcGptZWRpYV9jb2RlY19vcGVuY29yZV9hbXJuYl9zZXRfY29uZmlnKAorCQkJCWNvbnN0IHBqbWVkaWFfY29kZWNfYW1ybmJfY29uZmlnKiBjZmcpOworCisKKy8qKgorICogU2V0IEFNUi1XQiBwYXJhbWV0ZXJzLgorICoKKyAqIEBwYXJhbSBjZmcJVGhlIHNldHRpbmdzOworICoKKyAqIEByZXR1cm4JUEpfU1VDQ0VTUyBvbiBzdWNjZXNzLgorICovCitQSl9ERUNMKHBqX3N0YXR1c190KSBwam1lZGlhX2NvZGVjX29wZW5jb3JlX2FtcndiX3NldF9jb25maWcoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGptZWRpYV9jb2RlY19hbXJ3Yl9jb25maWcqIGNmZyk7CisKK1BKX0VORF9ERUNMCisKKworLyoqCisgKiBAfQorICovCisKKyNlbmRpZgkvKiBfX1BKTUVESUFfQ09ERUNfT1BFTkNPUkVfQU1STkJfSF9fICovCisKZGlmZiAtLWdpdCBhL2puaS9saWJwanNpcC9zb3VyY2VzL3BqbWVkaWEvaW5jbHVkZS9wam1lZGlhLWNvZGVjL3Bhc3N0aHJvdWdoLmggYi9qbmkvbGlicGpzaXAvc291cmNlcy9wam1lZGlhL2luY2x1ZGUvcGptZWRpYS1jb2RlYy9wYXNzdGhyb3VnaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NWFmMTkKLS0tIC9kZXYvbnVsbAorKysgYi9qbmkvbGlicGpzaXAvc291cmNlcy9wam1lZGlhL2luY2x1ZGUvcGptZWRpYS1jb2RlYy9wYXNzdGhyb3VnaC5oCkBAIC0wLDAgKzEsMjc3IEBACisvKiAkSWQ6IHBhc3N0aHJvdWdoLmggMzU1MyAyMDExLTA1LTA1IDA2OjE0OjE5WiBuYW5hbmcgJCAqLworLyogCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMSBUZWx1dSBJbmMuIChodHRwOi8vd3d3LnRlbHV1LmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA4IEJlbm55IFByaWpvbm8gPGJlbm55QHByaWpvbm8ub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EgCisgKi8KKyNpZm5kZWYgX19QSk1FRElBX0NPREVDU19QQVNTVEhST1VHSF9IX18KKyNkZWZpbmUgX19QSk1FRElBX0NPREVDU19QQVNTVEhST1VHSF9IX18KKworLyoqCisgKiBAZmlsZSBwam1lZGlhLWNvZGVjL3Bhc3N0aHJvdWdoLmgKKyAqIEBicmllZiBQYXNzdGhyb3VnaCBjb2RlY3MuCisgKi8KKworI2luY2x1ZGUgPHBqbWVkaWEtY29kZWMvdHlwZXMuaD4KKworLyoqCisgKiBAZGVmZ3JvdXAgUEpNRURfUEFTU1RIUk9VR0hfQ09ERUMgUGFzc3Rocm91Z2ggQ29kZWNzCisgKiBAaW5ncm91cCBQSk1FRElBX0NPREVDX0NPREVDUworICogQGJyaWVmIEltcGxlbWVudGF0aW9uIG9mIHBhc3N0aHJvdWdoIGNvZGVjcworICogQHsKKyAqCisgKiBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGZ1bmN0aW9ucyB0byBpbml0aWFsaXplIGFuZCByZWdpc3RlciBwYXNzdGhyb3VnaCAKKyAqIGNvZGVjcyBmYWN0b3J5IHRvIHRoZSBjb2RlYyBtYW5hZ2VyLiBBZnRlciB0aGUgY29kZWMgZmFjdG9yeSBoYXMgYmVlbiAKKyAqIHJlZ2lzdGVyZWQsIGFwcGxpY2F0aW9uIGNhbiB1c2UgQHJlZiBQSk1FRElBX0NPREVDIEFQSSB0byBtYW5pcHVsYXRlIAorICogdGhlIGNvZGVjLgorICoKKyAqIFBhc3N0aHJvdWdoIGNvZGVjcyBhcmUgY29kZWNzIHdyYXBwZXIgdGhhdCBkb2VzIE5PVCBwZXJmb3JtIGVuY29kaW5nIAorICogb3IgZGVjb2RpbmcsIGl0IGp1c3QgUEFDSyBhbmQgUEFSU0UgZW5jb2RlZCBhdWRpbyBkYXRhIGZyb20vaW50byBSVFAgCisgKiBwYXlsb2FkLiBUaGlzIHdpbGwgYWNjb21vZGF0ZSBwam1lZGlhIHBvcnRzIHdoaWNoIHdvcmsgd2l0aCBlbmNvZGVkCisgKiBhdWRpbyBkYXRhLCBlLmc6IGVuY29kZWQgYXVkaW8gZmlsZXMsIHNvdW5kIGRldmljZSB3aXRoIGNhcGFiaWxpdHkKKyAqIG9mIHBsYXlpbmcvcmVjb3JkaW5nIGVuY29kZWQgYXVkaW8gZGF0YS4KKyAqCisgKiBUaGlzIGNvZGVjIGZhY3RvcnkgY29udGFpbnMgdmFyaW91cyBjb2RlY3MsIGkuZTogRy43MjksIGlMQkMsCisgKiBBTVIsIGFuZCBHLjcxMS4KKyAqCisgKgorICogXHNlY3Rpb24gcGptZWRpYV9jb2RlY19wYXNzdGhyb3VnaF9nNzI5IFBhc3N0aHJvdWdoIEcuNzI5CisgKgorICogRy43Mjkgc3VwcG9ydHMgMTYtYml0IFBDTSBhdWRpbyBzaWduYWwgd2l0aCBzYW1wbGluZyByYXRlIDgwMDBIeiwgCisgKiBmcmFtZSBsZW5ndGggMTBtcywgYW5kIHJlc3VsdGluZyBpbiBiaXRyYXRlIDgwMDBicHMuCisgKgorICogXHN1YnNlY3Rpb24gY29kZWNfc2V0dGluZyBDb2RlYyBTZXR0aW5ncworICoKKyAqIEdlbmVyYWwgY29kZWMgc2V0dGluZ3MgZm9yIHRoaXMgY29kZWMgc3VjaCBhcyBWQUQgYW5kIFBMQyBjYW4gYmUgCisgKiBtYW5pcHVsYXRlZCB0aHJvdWdoIHRoZSA8dHQ+c2V0dGluZzwvdHQ+IGZpZWxkIGluICNwam1lZGlhX2NvZGVjX3BhcmFtLiAKKyAqIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50YXRpb24gb2YgI3BqbWVkaWFfY29kZWNfcGFyYW0gZm9yIG1vcmUgaW5mby4KKyAqCisgKiBOb3RlIHRoYXQgRy43MjkgVkFEIHN0YXR1cyBzaG91bGQgYmUgc2lnbmFsbGVkIGluIFNEUCwgc2VlIG1vcmUKKyAqIGRlc2NyaXB0aW9uIGJlbG93LgorICoKKyAqIFxzdWJzdWJzZWN0aW9uIGFubmV4YiBBbm5leCBCCisgKgorICogVGhlIGNhcGFiaWxpdHkgb2YgVkFEL0RUWCBpcyBzcGVjaWZpZWQgaW4gQW5uZXggQi4KKyAqCisgKiBCeSBkZWZhdWx0LCBBbm5leCBCIGlzIGVuYWJsZWQuIFRoaXMgZGVmYXVsdCBzZXR0aW5nIG9mIEFubmV4IEIgY2FuIAorICogYmUgbW9kaWZpZWQgdXNpbmcgI3BqbWVkaWFfY29kZWNfbWdyX3NldF9kZWZhdWx0X3BhcmFtKCkuCisgKgorICogSW4gI3BqbWVkaWFfY29kZWNfcGFyYW0sIEFubmV4IEIgaXMgY29uZmlndXJlZCB2aWEgVkFEIHNldHRpbmcgYW5kCisgKiBmb3JtYXQgcGFyYW1ldGVyICJhbm5leGIiIGluIHRoZSBTRFAgImE9Zm10cCIgYXR0cmlidXRlIGluCisgKiBkZWNvZGluZyBmbXRwIGZpZWxkLiBWYWxpZCB2YWx1ZXMgYXJlICJ5ZXMiIGFuZCAibm8iLAorICogdGhlIGltcGxlbWVudGF0aW9uIGRlZmF1bHQgaXMgInllcyIuIFdoZW4gdGhpcyBwYXJhbWV0ZXIgaXMgb21pdHRlZAorICogaW4gdGhlIFNEUCwgdGhlIHZhbHVlIHdpbGwgYmUgInllcyIgKFJGQyA0ODU2IFNlY3Rpb24gMi4xLjkpLgorICoKKyAqIEhlcmUgaXMgYW4gZXhhbXBsZSBvZiBtb2RpZnlpbmcgZGVmYXVsdCBzZXR0aW5nIG9mIEFubmV4IEIgdG8KKyAqIGJlIGRpc2FibGVkIHVzaW5nICNwam1lZGlhX2NvZGVjX21ncl9zZXRfZGVmYXVsdF9wYXJhbSgpOgorIFxjb2RlCisgICAgcGptZWRpYV9jb2RlY19wYXJhbSBwYXJhbTsKKworICAgIHBqbWVkaWFfY29kZWNfbWdyX2dldF9kZWZhdWx0X3BhcmFtKC4uLCAmcGFyYW0pOworICAgIC4uLgorICAgIC8vIFNldCBWQUQKKyAgICBwYXJhbS5zZXR0aW5nLnZhZCA9IDA7CisgICAgLy8gU2V0IFNEUCBmb3JtYXQgcGFyYW1ldGVyCisgICAgcGFyYW0uc2V0dGluZy5kZWNfZm10cC5jbnQgPSAxOworICAgIHBhcmFtLnNldHRpbmcuZGVjX2ZtdHAucGFyYW1bMF0ubmFtZSA9IHBqX3N0cigiYW5uZXhiIik7CisgICAgcGFyYW0uc2V0dGluZy5kZWNfZm10cC5wYXJhbVswXS52YWwgID0gcGpfc3RyKCJubyIpOworICAgIC4uLgorICAgIHBqbWVkaWFfY29kZWNfbWdyX3NldF9kZWZhdWx0X3BhcmFtKC4uLCAmcGFyYW0pOworIFxlbmRjb2RlCisgKgorICogXG5vdGUKKyAqIFRoZSBkaWZmZXJlbmNlIG9mIEFubmV4IEIgc3RhdHVzIGluIFNEUCBvZmZlci9hbnN3ZXIgbWF5IGJlIGNvbnNpZGVyZWQgYXMgCisgKiBpbmNvbXBhdGlibGUgY29kZWMgaW4gU0RQIG5lZ290aWF0aW9uLgorICoKKyAqIAorICogXHNlY3Rpb24gcGptZWRpYV9jb2RlY19wYXNzdGhyb3VnaF9pbGJjIFBhc3N0aHJvdWdoIGlMQkMKKyAqCisgKiBUaGUgaUxCQyBjb2RlYyBpcyBkZXZlbG9wZWQgYnkgR2xvYmFsIElQIFNvbHV0aW9ucyAoR0lQUyksIGZvcm1lcmx5IAorICogR2xvYmFsIElQIFNvdW5kLiBUaGUgaUxCQyBvZmZlcnMgbG93IGJpdHJhdGUgYW5kIGdyYWNlZnVsIGF1ZGlvIHF1YWxpdHkgCisgKiBkZWdyYWRhdGlvbiBvbiBmcmFtZSBsb3NzZXMuCisgKgorICogVGhlIGlMQkMgY29kZWMgc3VwcG9ydHMgMTYtYml0IFBDTSBhdWRpbyBzaWduYWwgd2l0aCBzYW1wbGluZyByYXRlIG9mIAorICogODAwMEh6IG9wZXJhdGluZyBhdCB0d28gbW9kZXM6IDIwbXMgYW5kIDMwbXMgZnJhbWUgbGVuZ3RoIG1vZGVzLCByZXN1bHRpbmcKKyAqIGluIGJpdHJhdGVzIG9mIDE1LjJrYnBzIGZvciAyMG1zIG1vZGUgYW5kIDEzLjMza2JwcyBmb3IgMzBtcyBtb2RlLgorICoKKyAqIFxzdWJzZWN0aW9uIGNvZGVjX3NldHRpbmcgQ29kZWMgU2V0dGluZ3MKKyAqCisgKiBHZW5lcmFsIGNvZGVjIHNldHRpbmdzIGZvciB0aGlzIGNvZGVjIHN1Y2ggYXMgVkFEIGFuZCBQTEMgY2FuIGJlIAorICogbWFuaXB1bGF0ZWQgdGhyb3VnaCB0aGUgPHR0PnNldHRpbmc8L3R0PiBmaWVsZCBpbiAjcGptZWRpYV9jb2RlY19wYXJhbS4gCisgKiBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mICNwam1lZGlhX2NvZGVjX3BhcmFtIGZvciBtb3JlIGluZm8uCisgKgorICogXHN1YnN1YnNlY3Rpb24gbW9kZSBNb2RlCisgKgorICogVGhlIGRlZmF1bHQgbW9kZSBzaG91bGQgYmUgc2V0IHVwb24gaW5pdGlhbGl6YXRpb24sIHNlZQorICogI3BqbWVkaWFfY29kZWNfcGFzc3Rocm91Z2hfaW5pdDIoKS4gQWZ0ZXIgdGhlIGNvZGVjIGlzIGluaXRpYWxpemVkLCB0aGUKKyAqIGRlZmF1bHQgbW9kZSBjYW4gYmUgbW9kaWZpZWQgdXNpbmcgI3BqbWVkaWFfY29kZWNfbWdyX3NldF9kZWZhdWx0X3BhcmFtKCkuCisgKgorICogSW4gI3BqbWVkaWFfY29kZWNfcGFyYW0sIGlMQkMgbW9kZSBjYW4gYmUgc2V0IGJ5IHNwZWNpZnlpbmcgU0RQCisgKiBmb3JtYXQgcGFyYW1ldGVyICJtb2RlIiBpbiB0aGUgU0RQICJhPWZtdHAiIGF0dHJpYnV0ZSBmb3IgZGVjb2RpbmcKKyAqIGRpcmVjdGlvbi4gVmFsaWQgdmFsdWVzIGFyZSAiMjAiIGFuZCAiMzAiIChmb3IgMjBtcyBhbmQgMzBtcyBtb2RlIAorICogcmVzcGVjdGl2ZWx5KS4KKyAqCisgKiBIZXJlIGlzIGFuIGV4YW1wbGUgdG8gc2V0IHVwICNwam1lZGlhX2NvZGVjX3BhcmFtIHRvIHVzZSBtb2RlIDIwbXM6CisgKiAgXGNvZGUKKyAgICBwam1lZGlhX2NvZGVjX3BhcmFtIHBhcmFtOworICAgIC4uLgorICAgIC8vIHNldHRpbmcgaUxCQyBtb2RlIGluIFNEUAorICAgIHBhcmFtLnNldHRpbmcuZGVjX2ZtdHAuY250ID0gMTsKKyAgICBwYXJhbS5zZXR0aW5nLmRlY19mbXRwLnBhcmFtWzBdLm5hbWUgPSBwal9zdHIoIm1vZGUiKTsKKyAgICBwYXJhbS5zZXR0aW5nLmRlY19mbXRwLnBhcmFtWzBdLnZhbCAgPSBwal9zdHIoIjIwIik7CisgICAgLi4uCisgXGVuZGNvZGUKKyAqCisgKgorICogXHNlY3Rpb24gcGptZWRpYV9jb2RlY19wYXNzdGhyb3VnaF9hbXIgUGFzc3Rocm91Z2ggQU1SCisgKgorICogSVBQIEFNUiBzdXBwb3J0cyAxNi1iaXQgUENNIGF1ZGlvIHNpZ25hbCB3aXRoIHNhbXBsaW5nIHJhdGUgODAwMEh6LAorICogMjBtcyBmcmFtZSBsZW5ndGggYW5kIHByb2R1Y2luZyB2YXJpb3VzIGJpdHJhdGVzIHRoYXQgcmFuZ2VzIGZyb20gNC43NWticHMKKyAqIHRvIDEyLjJrYnBzLgorICoKKyAqIFxzdWJzZWN0aW9uIGNvZGVjX3NldHRpbmcgQ29kZWMgU2V0dGluZ3MKKyAqCisgKiBHZW5lcmFsIGNvZGVjIHNldHRpbmdzIGZvciB0aGlzIGNvZGVjIHN1Y2ggYXMgVkFEIGFuZCBQTEMgY2FuIGJlIAorICogbWFuaXB1bGF0ZWQgdGhyb3VnaCB0aGUgPHR0PnNldHRpbmc8L3R0PiBmaWVsZCBpbiAjcGptZWRpYV9jb2RlY19wYXJhbS4gCisgKiBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mICNwam1lZGlhX2NvZGVjX3BhcmFtIGZvciBtb3JlIGluZm8uCisgKgorICogXHN1YnN1YnNlY3Rpb24gYml0cmF0ZSBCaXRyYXRlCisgKgorICogQnkgZGVmYXVsdCwgZW5jb2RpbmcgYml0cmF0ZSBpcyA3NDAwYnBzLiBUaGlzIGRlZmF1bHQgc2V0dGluZyBjYW4gYmUgCisgKiBtb2RpZmllZCB1c2luZyAjcGptZWRpYV9jb2RlY19tZ3Jfc2V0X2RlZmF1bHRfcGFyYW0oKSBieSBzcGVjaWZ5aW5nIAorICogcHJlZmVyZWQgQU1SIGJpdHJhdGUgaW4gZmllbGQgPHR0PmluZm86OmF2Z19icHM8L3R0PiBvZiAKKyAqICNwam1lZGlhX2NvZGVjX3BhcmFtLiBWYWxpZCBiaXRyYXRlcyBjb3VsZCBiZSBzZWVuIGluIAorICogI3BqbWVkaWFfY29kZWNfYW1ybmJfYml0cmF0ZXMuCisgKgorICogXHN1YnN1YnNlY3Rpb24gcGF5bG9hZF9mb3JtYXQgUGF5bG9hZCBGb3JtYXQKKyAqCisgKiBUaGVyZSBhcmUgdHdvIEFNUiBwYXlsb2FkIGZvcm1hdCB0eXBlcywgYmFuZHdpZHRoLWVmZmljaWVudCBhbmQKKyAqIG9jdGV0LWFsaWduZWQuIERlZmF1bHQgc2V0dGluZyBpcyB1c2luZyBvY3RldC1hbGlnbmVkLiBUaGlzIGRlZmF1bHQgcGF5bG9hZAorICogZm9ybWF0IGNhbiBiZSBtb2RpZmllZCB1c2luZyAjcGptZWRpYV9jb2RlY19tZ3Jfc2V0X2RlZmF1bHRfcGFyYW0oKS4KKyAqCisgKiBJbiAjcGptZWRpYV9jb2RlY19wYXJhbSwgcGF5bG9hZCBmb3JtYXQgY2FuIGJlIHNldCBieSBzcGVjaWZ5aW5nIFNEUCAKKyAqIGZvcm1hdCBwYXJhbWV0ZXJzICJvY3RldC1hbGlnbiIgaW4gdGhlIFNEUCAiYT1mbXRwIiBhdHRyaWJ1dGUgZm9yIAorICogZGVjb2RpbmcgZGlyZWN0aW9uLiBWYWxpZCB2YWx1ZXMgYXJlICIwIiAoZm9yIGJhbmR3aWR0aCBlZmZpY2llbnQgbW9kZSkKKyAqIGFuZCAiMSIgKGZvciBvY3RldC1hbGlnbmVkIG1vZGUpLgorICoKKyAqIFxzdWJzdWJzZWN0aW9uIG1vZGVfc2V0IE1vZGUtU2V0CisgKiAKKyAqIE1vZGUtc2V0IGlzIHVzZWQgZm9yIHJlc3RyaWN0aW5nIEFNUiBtb2RlcyBpbiBkZWNvZGluZyBkaXJlY3Rpb24uCisgKgorICogQnkgZGVmYXVsdCwgbm8gbW9kZS1zZXQgcmVzdHJpY3Rpb24gYXBwbGllZC4gVGhpcyBkZWZhdWx0IHNldHRpbmcgY2FuIGJlIAorICogYmUgbW9kaWZpZWQgdXNpbmcgI3BqbWVkaWFfY29kZWNfbWdyX3NldF9kZWZhdWx0X3BhcmFtKCkuCisgKgorICogSW4gI3BqbWVkaWFfY29kZWNfcGFyYW0sIG1vZGUtc2V0IGNvdWxkIGJlIHNwZWNpZmllZCB2aWEgZm9ybWF0IHBhcmFtZXRlcnMKKyAqICJtb2RlLXNldCIgaW4gdGhlIFNEUCAiYT1mbXRwIiBhdHRyaWJ1dGUgZm9yIGRlY29kaW5nIGRpcmVjdGlvbi4gVmFsaWQgCisgKiB2YWx1ZSBpcyBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIG1vZGVzIGZyb20gdGhlIHNldCAwIC0gNywgZS5nOiAKKyAqICI0LDUsNiw3Ii4gV2hlbiB0aGlzIHBhcmFtZXRlciBpcyBvbWl0dGVkLCBubyBtb2RlLXNldCByZXN0cmljdGlvbnMgYXBwbGllZC4KKyAqCisgKiBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgbW9kaWZ5aW5nIEFNUiBkZWZhdWx0IGNvZGVjIHBhcmFtOgorIFxjb2RlCisgICAgcGptZWRpYV9jb2RlY19wYXJhbSBwYXJhbTsKKworICAgIHBqbWVkaWFfY29kZWNfbWdyX2dldF9kZWZhdWx0X3BhcmFtKC4uLCAmcGFyYW0pOworICAgIC4uLgorICAgIC8vIHNldCBkZWZhdWx0IGVuY29kaW5nIGJpdHJhdGUgdG8gdGhlIGhpZ2hlc3QgMTIuMmticHMKKyAgICBwYXJhbS5pbmZvLmF2Z19icHMgPSAxMjIwMDsKKworICAgIC8vIHJlc3RyaWN0IGRlY29kaW5nIGJpdHJhdGUgdG8gMTAuMmticHMgYW5kIDEyLjJrYnBzIG9ubHkKKyAgICBwYXJhbS5zZXR0aW5nLmRlY19mbXRwLnBhcmFtWzBdLm5hbWUgPSBwal9zdHIoIm1vZGUtc2V0Iik7CisgICAgcGFyYW0uc2V0dGluZy5kZWNfZm10cC5wYXJhbVswXS52YWwgID0gcGpfc3RyKCI2LDciKTsKKworICAgIC8vIGFsc28gc2V0IHRvIHVzZSBiYW5kd2lkdGgtZWZmaWNpZW50IHBheWxvYWQgZm9ybWF0CisgICAgcGFyYW0uc2V0dGluZy5kZWNfZm10cC5wYXJhbVsxXS5uYW1lID0gcGpfc3RyKCJvY3RldC1hbGlnbiIpOworICAgIHBhcmFtLnNldHRpbmcuZGVjX2ZtdHAucGFyYW1bMV0udmFsICA9IHBqX3N0cigiMCIpOworCisgICAgcGFyYW0uc2V0dGluZy5kZWNfZm10cC5jbnQgPSAyOworICAgIC4uLgorICAgIHBqbWVkaWFfY29kZWNfbWdyX3NldF9kZWZhdWx0X3BhcmFtKC4uLCAmcGFyYW0pOworIFxlbmRjb2RlCisgKiAKKyAqCisgKiBcc2VjdGlvbiBwam1lZGlhX2NvZGVjX3Bhc3N0aHJvdWdoX2c3MTEgUGFzc3Rocm91Z2ggRy43MTEKKyAqCisgKiBUaGUgRy43MTEgaXMgYW4gdWx0cmEgbG93IGNvbXBsZXhpdHkgY29kZWNzIGFuZCBpbiB0cmFkZS1vZmYgaXQgcmVzdWx0cworICogaW4gaGlnaCBiaXRyYXRlLCBpLmU6IDY0a2JwcyBmb3IgMTYtYml0IFBDTSB3aXRoIHNhbXBsaW5nIHJhdGUgODAwMEh6LgorICoKKyAqIFRoZSBmYWN0b3J5IGNvbnRhaW5zIHR3byBtYWluIGNvbXByZXNzaW9uIGFsZ29yaXRobXMsIFBDTVUvdS1MYXcgYW5kIAorICogUENNQS9BLUxhdy4KKyAqCisgKiBcc3Vic2VjdGlvbiBjb2RlY19zZXR0aW5nIENvZGVjIFNldHRpbmdzCisgKgorICogR2VuZXJhbCBjb2RlYyBzZXR0aW5ncyBmb3IgdGhpcyBjb2RlYyBzdWNoIGFzIFZBRCBhbmQgUExDIGNhbiBiZSAKKyAqIG1hbmlwdWxhdGVkIHRocm91Z2ggdGhlIDx0dD5zZXR0aW5nPC90dD4gZmllbGQgaW4gI3BqbWVkaWFfY29kZWNfcGFyYW0uIAorICogUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnRhdGlvbiBvZiAjcGptZWRpYV9jb2RlY19wYXJhbSBmb3IgbW9yZSBpbmZvLgorICovCisKK1BKX0JFR0lOX0RFQ0wKKworCisvKiogCisgKiBDb2RlYyBwYXNzdGhyb3VnaCBjb25maWd1cmF0aW9uIHNldHRpbmdzLgorICovCit0eXBlZGVmIHN0cnVjdCBwam1lZGlhX2NvZGVjX3Bhc3N0aHJvdWdoX3NldHRpbmcKK3sKKyAgICB1bnNpZ25lZAkJIGZtdF9jbnQ7CS8qKjwgTnVtYmVyIG9mIGVuY29kaW5nIGZvcm1hdHMKKwkJCQkJICAgICB0byBiZSBlbmFibGVkLgkJKi8KKyAgICBwam1lZGlhX2Zvcm1hdAkqZm10czsJCS8qKjwgRW5jb2RpbmcgZm9ybWF0cyB0byBiZSAKKwkJCQkJICAgICBlbmFibGVkLgkJCSovCisgICAgdW5zaWduZWQJCSBpbGJjX21vZGU7CS8qKjwgaUxCQyBkZWZhdWx0IG1vZGUuCQkqLworfSBwam1lZGlhX2NvZGVjX3Bhc3N0aHJvdWdoX3NldHRpbmc7CisKKworLyoqCisgKiBJbml0aWFsaXplIGFuZCByZWdpc3RlciBwYXNzdGhyb3VnaCBjb2RlY3MgZmFjdG9yeSB0byBwam1lZGlhIGVuZHBvaW50LAorICogYWxsIHN1cHBvcnRlZCBlbmNvZGluZyBmb3JtYXRzIHdpbGwgYmUgZW5hYmxlZC4KKyAqCisgKiBAcGFyYW0gZW5kcHQJICAgIFRoZSBwam1lZGlhIGVuZHBvaW50LgorICoKKyAqIEByZXR1cm4JICAgIFBKX1NVQ0NFU1Mgb24gc3VjY2Vzcy4KKyAqLworUEpfREVDTChwal9zdGF0dXNfdCkgcGptZWRpYV9jb2RlY19wYXNzdGhyb3VnaF9pbml0KCBwam1lZGlhX2VuZHB0ICplbmRwdCApOworCisKKy8qKgorICogSW5pdGlhbGl6ZSBhbmQgcmVnaXN0ZXIgcGFzc3Rocm91Z2ggY29kZWNzIGZhY3RvcnkgdG8gcGptZWRpYSBlbmRwb2ludAorICogd2l0aCBvbmx5IHNwZWNpZmllZCBlbmNvZGluZyBmb3JtYXRzIGVuYWJsZWQuCisgKgorICogQHBhcmFtIGVuZHB0CSAgICBUaGUgcGptZWRpYSBlbmRwb2ludC4KKyAqIEBwYXJhbSBzZXR0aW5nICAgVGhlIHNldHRpbmdzLgorICoKKyAqIEByZXR1cm4JICAgIFBKX1NVQ0NFU1Mgb24gc3VjY2Vzcy4KKyAqLworUEpfREVDTChwal9zdGF0dXNfdCkgcGptZWRpYV9jb2RlY19wYXNzdGhyb3VnaF9pbml0MigKKwkJICAgICAgIHBqbWVkaWFfZW5kcHQgKmVuZHB0LAorCQkgICAgICAgY29uc3QgcGptZWRpYV9jb2RlY19wYXNzdGhyb3VnaF9zZXR0aW5nICpzZXR0aW5nKTsKKworCisvKioKKyAqIFVucmVnaXN0ZXIgcGFzc3Rocm91Z2ggY29kZWNzIGZhY3RvcnkgZnJvbSBwam1lZGlhIGVuZHBvaW50LgorICoKKyAqIEByZXR1cm4JICAgIFBKX1NVQ0NFU1Mgb24gc3VjY2Vzcy4KKyAqLworUEpfREVDTChwal9zdGF0dXNfdCkgcGptZWRpYV9jb2RlY19wYXNzdGhyb3VnaF9kZWluaXQodm9pZCk7CisKKworUEpfRU5EX0RFQ0wKKworCisvKioKKyAqIEB9CisgKi8KKworI2VuZGlmCS8qIF9fUEpNRURJQV9DT0RFQ1NfUEFTU1RIUk9VR0hfSF9fICovCisKZGlmZiAtLWdpdCBhL2puaS9saWJwanNpcC9zb3VyY2VzL3BqbWVkaWEvaW5jbHVkZS9wam1lZGlhLWNvZGVjL3NpbGsuaCBiL2puaS9saWJwanNpcC9zb3VyY2VzL3BqbWVkaWEvaW5jbHVkZS9wam1lZGlhLWNvZGVjL3NpbGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTBmYWNhCi0tLSAvZGV2L251bGwKKysrIGIvam5pL2xpYnBqc2lwL3NvdXJjZXMvcGptZWRpYS9pbmNsdWRlL3BqbWVkaWEtY29kZWMvc2lsay5oCkBAIC0wLDAgKzEsMTMzIEBACisvKiAkSWQ6IHNpbGsuaCA0MjY0IDIwMTItMDktMjQgMDY6NTg6MTZaIG5hbmFuZyAkICovCisvKiAKKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDEyIFRlbHV1IEluYy4gKGh0dHA6Ly93d3cudGVsdXUuY29tKQorICogQ29udHJpYnV0ZWQgYnkgUmVnaXMgTW9udG95YSAoYWthIHIzZ2lzIC0gd3d3LnIzZ2lzLmZyKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EgCisgKi8KKyNpZm5kZWYgX19QSk1FRElBX0NPREVDX1NJTEtfSF9fCisjZGVmaW5lIF9fUEpNRURJQV9DT0RFQ19TSUxLX0hfXworCisvKioKKyAqIEBmaWxlIHNpbGsuaAorICogQGJyaWVmIFNJTEsgY29kZWMuCisgKi8KKworI2luY2x1ZGUgPHBqbWVkaWEtY29kZWMvdHlwZXMuaD4KKworLyoqCisgKiBAZGVmZ3JvdXAgUEpNRURfU0lMSyBTSUxLIENvZGVjIEZhbWlseQorICogQGluZ3JvdXAgUEpNRURJQV9DT0RFQ19DT0RFQ1MKKyAqIEBicmllZiBJbXBsZW1lbnRhdGlvbiBvZiBTSUxLIGNvZGVjcyAobmFycm93L21lZGl1bS93aWRlL3N1cGVyd2lkZS1iYW5kKS4KKyAqIEB7CisgKgorICogVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBmdW5jdGlvbnMgdG8gaW5pdGlhbGl6ZSBhbmQgcmVnaXN0ZXIgU0lMSyBjb2RlYworICogZmFjdG9yeSB0byB0aGUgY29kZWMgbWFuYWdlci4gQWZ0ZXIgdGhlIGNvZGVjIGZhY3RvcnkgaGFzIGJlZW4gcmVnaXN0ZXJlZCwKKyAqIGFwcGxpY2F0aW9uIGNhbiB1c2UgQHJlZiBQSk1FRElBX0NPREVDIEFQSSB0byBtYW5pcHVsYXRlIHRoZSBjb2RlYy4KKyAqCisgKiBUaGUgU0lMSyBjb2RlYyB1c2VzIG11bHRpcGxlIGJpdCByYXRlcywgYW5kIHN1cHBvcnRzIHN1cGVyIHdpZGViYW5kIAorICogKDI0IGtIeiBzYW1wbGluZyByYXRlKSwgd2lkZWJhbmQgKDE2IGtIeiBzYW1wbGluZyByYXRlKSwgbWVkaXVtICgxMmtIegorICogc2FtcGxpbmcgcmF0ZSksIGFuZCBuYXJyb3diYW5kICh0ZWxlcGhvbmUgcXVhbGl0eSwgOCBrSHogc2FtcGxpbmcgcmF0ZSkuCisgKgorICogQnkgZGVmYXVsdCwgdGhlIFNJTEsgY29kZWMgZmFjdG9yeSByZWdpc3RlcnMgdHdvIFNJTEsgY29kZWNzOgorICogIlNJTEsvODAwMCIgbmFycm93YmFuZCBjb2RlYyBhbmQgIlNJTEsvMTYwMDAiIHdpZGViYW5kIGNvZGVjLiBUaGlzIGJlaGF2aW9yCisgKiBjYW4gYmUgY2hhbmdlZCBieSBzcGVjaWZ5aW5nICNwam1lZGlhX2NvZGVjX3NpbGtfb3B0aW9ucyBmbGFncyBkdXJpbmcKKyAqIGluaXRpYWxpemF0aW9uLgorICoKKyAqCisgKiBcc2VjdGlvbiBjb2RlY19zZXR0aW5nIENvZGVjIFNldHRpbmdzCisgKgorICogXHN1YnNlY3Rpb24gZ2VuZXJhbF9zZXR0aW5nIEdlbmVyYWwgU2V0dGluZ3MKKyAqCisgKiBHZW5lcmFsIGNvZGVjIHNldHRpbmdzIGZvciB0aGlzIGNvZGVjIHN1Y2ggYXMgVkFEIGFuZCBQTEMgY2FuIGJlIAorICogbWFuaXB1bGF0ZWQgdGhyb3VnaCB0aGUgPHR0PnNldHRpbmc8L3R0PiBmaWVsZCBpbiAjcGptZWRpYV9jb2RlY19wYXJhbS4gCisgKiBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mICNwam1lZGlhX2NvZGVjX3BhcmFtIGZvciBtb3JlIGluZm8uCisgKgorICogXHN1YnNlY3Rpb24gc3BlY2lmaWNfc2V0dGluZyBDb2RlYyBTcGVjaWZpYyBTZXR0aW5ncworICoKKyAqIFRoZSBmb2xsb3dpbmcgc2V0dGluZ3MgYXJlIGFwcGxpY2FibGUgZm9yIHRoaXMgY29kZWMuCisgKgorICogXHN1YnN1YnNlY3Rpb24gcXVhbGl0eV92c19jb21wbGV4aXR5IFF1YWxpdHkgdnMgQ29tcGxleGl0eQorICoKKyAqIFRoZSBTSUxLIGNvZGVjIHF1YWxpdHkgdmVyc3VzIGNvbXB1dGF0aW9uYWwgY29tcGxleGl0eSBhbmQgYmFuZHdpZHRoCisgKiByZXF1aXJlbWVudCBjYW4gYmUgYWRqdXN0ZWQgYnkgbW9kaWZ5aW5nIHRoZSBxdWFsaXR5IGFuZCBjb21wbGV4aXR5CisgKiBzZXR0aW5nLCBieSBjYWxsaW5nICNwam1lZGlhX2NvZGVjX3NpbGtfc2V0X2NvbmZpZygpLgorICoKKyAqIFRoZSBkZWZhdWx0IHNldHRpbmcgb2YgcXVhbGl0eSBpcyBzcGVjaWZpZWQgaW4gCisgKiAjUEpNRURJQV9DT0RFQ19TSUxLX0RFRkFVTFRfUVVBTElUWS4gQW5kIHRoZSBkZWZhdWx0IHNldHRpbmcgb2YKKyAqIGNvbXBsZXhpdHkgaXMgc3BlY2lmaWVkIGluICNQSk1FRElBX0NPREVDX1NJTEtfREVGQVVMVF9DT01QTEVYSVRZLgorICovCisKK1BKX0JFR0lOX0RFQ0wKKwordHlwZWRlZiBzdHJ1Y3QgcGptZWRpYV9jb2RlY19zaWxrX3NldHRpbmcKK3sKKyAgICBwal9ib29sX3QJZW5hYmxlZDsgICAgLyoqPCBFbmFibGUvZGlzYWJsZS4JCQkgICAgKi8KKyAgICBpbnQJCXF1YWxpdHk7ICAgIC8qKjwgRW5jb2RpbmcgcXVhbGl0eSwgb3IgdXNlIC0xIGZvciBkZWZhdWx0IAorIAkJCQkgKEBzZWUgUEpNRURJQV9DT0RFQ19TSUxLX0RFRkFVTFRfUVVBTElUWSkuICovCisgICAgaW50IAljb21wbGV4aXR5OyAvKio8IEVuY29kaW5nIGNvbXBsZXhpdHksIG9yIHVzZSAtMSBmb3IgZGVmYXVsdAorCQkJICAgICAgICAgKEBzZWUgUEpNRURJQV9DT0RFQ19TSUxLX0RFRkFVTFRfQ09NUExFWElUWSkqLworfSBwam1lZGlhX2NvZGVjX3NpbGtfc2V0dGluZzsKKworCisvKioKKyAqIEluaXRpYWxpemUgYW5kIHJlZ2lzdGVyIFNJTEsgY29kZWMgZmFjdG9yeSB0byBwam1lZGlhIGVuZHBvaW50LiBCeSBkZWZhdWx0LAorICogb25seSBuYXJyb3diYW5kICg4a0h6IHNhbXBsaW5nIHJhdGUpIGFuZCB3aWRlYmFuZCAoMTZrSHogc2FtcGxpbmcgcmF0ZSkKKyAqIHdpbGwgYmUgZW5hYmxlZC4gUXVhbGl0eSBhbmQgY29tcGxleGl0eSBmb3IgdGhvc2Ugc2FtcGxpbmcgcmF0ZSBtb2RlcworICogd2lsbCBiZSBzZXQgdG8gdGhlIGRlZmF1bHQgdmFsdWVzIChzZWUgI1BKTUVESUFfQ09ERUNfU0lMS19ERUZBVUxUX1FVQUxJVFkKKyAqIGFuZCAjUEpNRURJQV9DT0RFQ19TSUxLX0RFRkFVTFRfQ09NUExFWElUWSksIGFwcGxpY2F0aW9uIG1heSBtb2RpZnkgdGhlc2UKKyAqIHNldHRpbmdzIHZpYSAjcGptZWRpYV9jb2RlY19zaWxrX3NldF9jb25maWcoKS4KKyAqCisgKiBAcGFyYW0gZW5kcHQJCVRoZSBwam1lZGlhIGVuZHBvaW50LgorICoKKyAqIEByZXR1cm4JCVBKX1NVQ0NFU1Mgb24gc3VjY2Vzcy4KKyAqLworUEpfREVDTChwal9zdGF0dXNfdCkgcGptZWRpYV9jb2RlY19zaWxrX2luaXQocGptZWRpYV9lbmRwdCAqZW5kcHQpOworCisKKy8qKgorICogQ2hhbmdlIHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmcgb2YgdGhlIFNJTEsgY29kZWMgZm9yIHRoZSBzcGVjaWZpZWQKKyAqIGNsb2NrIHJhdGUuCisgKgorICogQHBhcmFtIGNsb2NrX3JhdGUJUENNIHNhbXBsaW5nIHJhdGUsIGluIEh6LCB2YWxpZCB2YWx1ZXMgYXJlIDgwMDAsCisgKgkJCTEyMDAwLCAxNjAwMCBhbmQgMjQwMDAuCisgKiBAcGFyYW0gb3B0CQlUaGUgc2V0dGluZyB0byBiZSBhcHBsaWVkIGZvciB0aGUgc3BlY2lmaWVkCisgKgkJCWNsb2NrIHJhdGUuCisgKgorICogQHJldHVybgkJUEpfU1VDQ0VTUyBvbiBzdWNjZXNzLgorICovCitQSl9ERUNMKHBqX3N0YXR1c190KSBwam1lZGlhX2NvZGVjX3NpbGtfc2V0X2NvbmZpZygKKwkJCQkgICAgdW5zaWduZWQgY2xvY2tfcmF0ZSwgCisJCQkJICAgIGNvbnN0IHBqbWVkaWFfY29kZWNfc2lsa19zZXR0aW5nICpvcHQpOworCisKKy8qKgorICogVW5yZWdpc3RlciBTSUxLIGNvZGVjIGZhY3RvcnkgZnJvbSBwam1lZGlhIGVuZHBvaW50IGFuZCBkZWluaXRpYWxpemUKKyAqIHRoZSBTSUxLIGNvZGVjIGxpYnJhcnkuCisgKgorICogQHJldHVybgkgICAgUEpfU1VDQ0VTUyBvbiBzdWNjZXNzLgorICovCitQSl9ERUNMKHBqX3N0YXR1c190KSBwam1lZGlhX2NvZGVjX3NpbGtfZGVpbml0KHZvaWQpOworCisKK1BKX0VORF9ERUNMCisKKworLyoqCisgKiBAfQorICovCisKKyNlbmRpZgkvKiBfX1BKTUVESUFfQ09ERUNfU0lMS19IX18gKi8KKwpkaWZmIC0tZ2l0IGEvam5pL2xpYnBqc2lwL3NvdXJjZXMvcGptZWRpYS9pbmNsdWRlL3BqbWVkaWEtY29kZWMvc3BlZXguaCBiL2puaS9saWJwanNpcC9zb3VyY2VzL3BqbWVkaWEvaW5jbHVkZS9wam1lZGlhLWNvZGVjL3NwZWV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJiM2ZhNAotLS0gL2Rldi9udWxsCisrKyBiL2puaS9saWJwanNpcC9zb3VyY2VzL3BqbWVkaWEvaW5jbHVkZS9wam1lZGlhLWNvZGVjL3NwZWV4LmgKQEAgLTAsMCArMSwxNTAgQEAKKy8qICRJZDogc3BlZXguaCAzNTUzIDIwMTEtMDUtMDUgMDY6MTQ6MTlaIG5hbmFuZyAkICovCisvKiAKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDExIFRlbHV1IEluYy4gKGh0dHA6Ly93d3cudGVsdXUuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDggQmVubnkgUHJpam9ubyA8YmVubnlAcHJpam9uby5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQSAKKyAqLworI2lmbmRlZiBfX1BKTUVESUFfQ09ERUNfU1BFRVhfSF9fCisjZGVmaW5lIF9fUEpNRURJQV9DT0RFQ19TUEVFWF9IX18KKworLyoqCisgKiBAZmlsZSBzcGVleC5oCisgKiBAYnJpZWYgU3BlZXggY29kZWMgaGVhZGVyLgorICovCisKKyNpbmNsdWRlIDxwam1lZGlhLWNvZGVjL3R5cGVzLmg+CisKKy8qKgorICogQGRlZmdyb3VwIFBKTUVEX1NQRUVYIFNwZWV4IENvZGVjIEZhbWlseQorICogQGluZ3JvdXAgUEpNRURJQV9DT0RFQ19DT0RFQ1MKKyAqIEBicmllZiBJbXBsZW1lbnRhdGlvbiBvZiBTcGVleCBjb2RlY3MgKG5hcnJvdy93aWRlL3VsdHJhd2lkZS1iYW5kKS4KKyAqIEB7CisgKgorICogVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBmdW5jdGlvbnMgdG8gaW5pdGlhbGl6ZSBhbmQgcmVnaXN0ZXIgc3BlZXggY29kZWMKKyAqIGZhY3RvcnkgdG8gdGhlIGNvZGVjIG1hbmFnZXIuIEFmdGVyIHRoZSBjb2RlYyBmYWN0b3J5IGhhcyBiZWVuIHJlZ2lzdGVyZWQsCisgKiBhcHBsaWNhdGlvbiBjYW4gdXNlIEByZWYgUEpNRURJQV9DT0RFQyBBUEkgdG8gbWFuaXB1bGF0ZSB0aGUgY29kZWMuCisgKgorICogVGhlIFNwZWV4IGNvZGVjIHVzZXMgbXVsdGlwbGUgYml0IHJhdGVzLCBhbmQgc3VwcG9ydHMgdWx0cmEtd2lkZWJhbmQgCisgKiAoMzIga0h6IHNhbXBsaW5nIHJhdGUpLCB3aWRlYmFuZCAoMTYga0h6IHNhbXBsaW5nIHJhdGUpIGFuZCBuYXJyb3diYW5kIAorICogKHRlbGVwaG9uZSBxdWFsaXR5LCA4IGtIeiBzYW1wbGluZyByYXRlKQorICoKKyAqIEJ5IGRlZmF1bHQsIHRoZSBzcGVleCBjb2RlYyBmYWN0b3J5IHJlZ2lzdGVycyB0aHJlZSBTcGVleCBjb2RlY3M6CisgKiAic3BlZXgvODAwMCIgbmFycm93YmFuZCBjb2RlYywgInNwZWV4LzE2MDAwIiB3aWRlYmFuZCBjb2RlYywgYW5kIAorICogInNwZWV4LzMyMDAwIiB1bHRyYS13aWRlYmFuZCBjb2RlYy4gVGhpcyBiZWhhdmlvciBjYW4gYmUgY2hhbmdlZCBieQorICogc3BlY2lmeWluZyAjcGptZWRpYV9zcGVleF9vcHRpb25zIGZsYWdzIGR1cmluZyBpbml0aWFsaXphdGlvbi4KKyAqCisgKgorICogXHNlY3Rpb24gY29kZWNfc2V0dGluZyBDb2RlYyBTZXR0aW5ncworICoKKyAqIFxzdWJzZWN0aW9uIGdlbmVyYWxfc2V0dGluZyBHZW5lcmFsIFNldHRpbmdzCisgKgorICogR2VuZXJhbCBjb2RlYyBzZXR0aW5ncyBmb3IgdGhpcyBjb2RlYyBzdWNoIGFzIFZBRCBhbmQgUExDIGNhbiBiZSAKKyAqIG1hbmlwdWxhdGVkIHRocm91Z2ggdGhlIDx0dD5zZXR0aW5nPC90dD4gZmllbGQgaW4gI3BqbWVkaWFfY29kZWNfcGFyYW0uIAorICogUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnRhdGlvbiBvZiAjcGptZWRpYV9jb2RlY19wYXJhbSBmb3IgbW9yZSBpbmZvLgorICoKKyAqIFxzdWJzZWN0aW9uIHNwZWNpZmljX3NldHRpbmcgQ29kZWMgU3BlY2lmaWMgU2V0dGluZ3MKKyAqCisgKiBUaGUgZm9sbG93aW5nIHNldHRpbmdzIGFyZSBhcHBsaWNhYmxlIGZvciB0aGlzIGNvZGVjLgorICoKKyAqIFxzdWJzdWJzZWN0aW9uIHF1YWxpdHlfdnNfY29tcGxleGl0eSBRdWFsaXR5IHZzIENvbXBsZXhpdHkKKyAqCisgKiBUaGUgU3BlZXggY29kZWMgcXVhbGl0eSB2ZXJzdXMgY29tcHV0YXRpb25hbCBjb21wbGV4aXR5IGFuZCBiYW5kd2lkdGgKKyAqIHJlcXVpcmVtZW50IGNhbiBiZSBhZGp1c3RlZCBieSBtb2RpZnlpbmcgdGhlIHF1YWxpdHkgYW5kIGNvbXBsZXhpdHkKKyAqIHNldHRpbmcsIGJ5IGNhbGxpbmcgI3BqbWVkaWFfY29kZWNfc3BlZXhfc2V0X3BhcmFtKCkuIFRoZSBSRkMgNTU3NAorICogU2VjdGlvbiA1IHNob3dzIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBxdWFsaXR5IHNldHRpbmcgYW5kIHRoZQorICogcmVzdWx0aW5nIGJpdHJhdGUuCisgKgorICogVGhlIGRlZmF1bHQgc2V0dGluZyBvZiBxdWFsaXR5IGlzIHNwZWNpZmllZCBpbiAKKyAqICNQSk1FRElBX0NPREVDX1NQRUVYX0RFRkFVTFRfUVVBTElUWS4gQW5kIHRoZSBkZWZhdWx0IHNldHRpbmcgb2YKKyAqIGNvbXBsZXhpdHkgaXMgc3BlY2lmaWVkIGluICNQSk1FRElBX0NPREVDX1NQRUVYX0RFRkFVTFRfQ09NUExFWElUWS4KKyAqLworCitQSl9CRUdJTl9ERUNMCisKKworLyoqCisgKiBCaXRtYXNrIG9wdGlvbnMgdG8gYmUgcGFzc2VkIGR1cmluZyBTcGVleCBjb2RlYyBmYWN0b3J5IGluaXRpYWxpemF0aW9uLgorICovCitlbnVtIHBqbWVkaWFfc3BlZXhfb3B0aW9ucworeworICAgIFBKTUVESUFfU1BFRVhfTk9fTkIJICAgID0gMSwgICAgLyoqPCBEaXNhYmxlIG5hcnJvd2JhbmQgbW9kZS4JKi8KKyAgICBQSk1FRElBX1NQRUVYX05PX1dCCSAgICA9IDIsICAgIC8qKjwgRGlzYWJsZSB3aWRlYmFuZCBtb2RlLgkJKi8KKyAgICBQSk1FRElBX1NQRUVYX05PX1VXQiAgICA9IDQsICAgIC8qKjwgRGlzYWJsZSB1bHRyYS13aWRlYmFuZCBtb2RlLgkqLworfTsKKworCisvKioKKyAqIEluaXRpYWxpemUgYW5kIHJlZ2lzdGVyIFNwZWV4IGNvZGVjIGZhY3RvcnkgdG8gcGptZWRpYSBlbmRwb2ludC4KKyAqCisgKiBAcGFyYW0gZW5kcHQJCVRoZSBwam1lZGlhIGVuZHBvaW50LgorICogQHBhcmFtIG9wdGlvbnMJQml0bWFzayBvZiBwam1lZGlhX3NwZWV4X29wdGlvbnMgKGRlZmF1bHQ9MCkuCisgKiBAcGFyYW0gcXVhbGl0eQlTcGVjaWZ5IGVuY29kaW5nIHF1YWxpdHksIG9yIHVzZSAtMSBmb3IgZGVmYXVsdCAKKyAqCQkJKEBzZWUgUEpNRURJQV9DT0RFQ19TUEVFWF9ERUZBVUxUX1FVQUxJVFkpLgorICogQHBhcmFtIGNvbXBsZXhpdHkJU3BlY2lmeSBlbmNvZGluZyBjb21wbGV4aXR5ICwgb3IgdXNlIC0xIGZvciBkZWZhdWx0IAorICoJCQkoQHNlZSBQSk1FRElBX0NPREVDX1NQRUVYX0RFRkFVTFRfQ09NUExFWElUWSkuCisgKgorICogQHJldHVybgkJUEpfU1VDQ0VTUyBvbiBzdWNjZXNzLgorICovCitQSl9ERUNMKHBqX3N0YXR1c190KSBwam1lZGlhX2NvZGVjX3NwZWV4X2luaXQoIHBqbWVkaWFfZW5kcHQgKmVuZHB0LAorCQkJCQkgICAgICAgdW5zaWduZWQgb3B0aW9ucywKKwkJCQkJICAgICAgIGludCBxdWFsaXR5LAorCQkJCQkgICAgICAgaW50IGNvbXBsZXhpdHkgKTsKKworCisvKioKKyAqIEluaXRpYWxpemUgU3BlZXggY29kZWMgZmFjdG9yeSB1c2luZyBkZWZhdWx0IHNldHRpbmdzIGFuZCByZWdpc3RlciB0byAKKyAqIHBqbWVkaWEgZW5kcG9pbnQuCisgKgorICogQHBhcmFtIGVuZHB0CQlUaGUgcGptZWRpYSBlbmRwb2ludC4KKyAqCisgKiBAcmV0dXJuCQlQSl9TVUNDRVNTIG9uIHN1Y2Nlc3MuCisgKi8KK1BKX0RFQ0wocGpfc3RhdHVzX3QpIHBqbWVkaWFfY29kZWNfc3BlZXhfaW5pdF9kZWZhdWx0KHBqbWVkaWFfZW5kcHQgKmVuZHB0KTsKKworCisvKioKKyAqIENoYW5nZSB0aGUgc2V0dGluZ3Mgb2YgU3BlZXggY29kZWMuCisgKgorICogQHBhcmFtIGNsb2NrX3JhdGUJQ2xvY2sgcmF0ZSBvZiBTcGVleCBtb2RlIHRvIGJlIHNldC4KKyAqIEBwYXJhbSBxdWFsaXR5CVNwZWNpZnkgZW5jb2RpbmcgcXVhbGl0eSwgb3IgdXNlIC0xIGZvciBkZWZhdWx0IAorICoJCQkoQHNlZSBQSk1FRElBX0NPREVDX1NQRUVYX0RFRkFVTFRfUVVBTElUWSkuCisgKiBAcGFyYW0gY29tcGxleGl0eQlTcGVjaWZ5IGVuY29kaW5nIGNvbXBsZXhpdHkgLCBvciB1c2UgLTEgZm9yIGRlZmF1bHQgCisgKgkJCShAc2VlIFBKTUVESUFfQ09ERUNfU1BFRVhfREVGQVVMVF9DT01QTEVYSVRZKS4KKyAqCisgKiBAcmV0dXJuCQlQSl9TVUNDRVNTIG9uIHN1Y2Nlc3MuCisgKi8KK1BKX0RFQ0wocGpfc3RhdHVzX3QpIHBqbWVkaWFfY29kZWNfc3BlZXhfc2V0X3BhcmFtKHVuc2lnbmVkIGNsb2NrX3JhdGUsCisJCQkJCQkgICBpbnQgcXVhbGl0eSwKKwkJCQkJCSAgIGludCBjb21wbGV4aXR5KTsKKworCisvKioKKyAqIFVucmVnaXN0ZXIgU3BlZXggY29kZWMgZmFjdG9yeSBmcm9tIHBqbWVkaWEgZW5kcG9pbnQgYW5kIGRlaW5pdGlhbGl6ZQorICogdGhlIFNwZWV4IGNvZGVjIGxpYnJhcnkuCisgKgorICogQHJldHVybgkgICAgUEpfU1VDQ0VTUyBvbiBzdWNjZXNzLgorICovCitQSl9ERUNMKHBqX3N0YXR1c190KSBwam1lZGlhX2NvZGVjX3NwZWV4X2RlaW5pdCh2b2lkKTsKKworCitQSl9FTkRfREVDTAorCisvKioKKyAqIEB9CisgKi8KKworI2VuZGlmCS8qIF9fUEpNRURJQV9DT0RFQ19TUEVFWF9IX18gKi8KKwpkaWZmIC0tZ2l0IGEvam5pL2xpYnBqc2lwL3NvdXJjZXMvcGptZWRpYS9pbmNsdWRlL3BqbWVkaWEtY29kZWMvdHlwZXMuaCBiL2puaS9saWJwanNpcC9zb3VyY2VzL3BqbWVkaWEvaW5jbHVkZS9wam1lZGlhLWNvZGVjL3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNlNzFlMQotLS0gL2Rldi9udWxsCisrKyBiL2puaS9saWJwanNpcC9zb3VyY2VzL3BqbWVkaWEvaW5jbHVkZS9wam1lZGlhLWNvZGVjL3R5cGVzLmgKQEAgLTAsMCArMSwxMzAgQEAKKy8qICRJZDogdHlwZXMuaCA0MjY0IDIwMTItMDktMjQgMDY6NTg6MTZaIG5hbmFuZyAkICovCisvKiAKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDExIFRlbHV1IEluYy4gKGh0dHA6Ly93d3cudGVsdXUuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDggQmVubnkgUHJpam9ubyA8YmVubnlAcHJpam9uby5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQSAKKyAqLworI2lmbmRlZiBfX1BKTUVESUFfQ09ERUNfVFlQRVNfSF9fCisjZGVmaW5lIF9fUEpNRURJQV9DT0RFQ19UWVBFU19IX18KKworLyoqCisgKiBAZmlsZSB0eXBlcy5oCisgKiBAYnJpZWYgUEpNRURJQS1DT0RFQyB0eXBlcyBhbmQgY29uc3RhbnRzCisgKi8KKworI2luY2x1ZGUgPHBqbWVkaWEtY29kZWMvY29uZmlnLmg+CisjaW5jbHVkZSA8cGptZWRpYS9jb2RlYy5oPgorCisvKioKKyAqIEBkZWZncm91cCBwam1lZGlhX2NvZGVjX3R5cGVzIFBKTUVESUEtQ09ERUMgVHlwZXMgYW5kIENvbnN0YW50cworICogQGluZ3JvdXAgUEpNRURJQV9DT0RFQworICogQGJyaWVmIENvbnN0YW50cyB1c2VkIGJ5IFBKTUVESUEtQ09ERUMKKyAqIEB7CisgKi8KKworCisKKy8qKgorICogVGhlc2UgYXJlIHRoZSBkeW5hbWljIHBheWxvYWQgdHlwZXMgdGhhdCBhcmUgdXNlZCBieSBhdWRpbyBjb2RlY3MgaW4KKyAqIHRoaXMgbGlicmFyeS4gQWxzbyBzZWUgdGhlIGhlYWRlciBmaWxlIDxwam1lZGlhL2NvZGVjLmg+IGZvciBsaXN0CisgKiBvZiBzdGF0aWMgcGF5bG9hZCB0eXBlcy4KKyAqLworZW51bSBwam1lZGlhX2F1ZGlvX3B0Cit7CisgICAgLyogQWNjb3JkaW5nIHRvIElBTkEgc3BlY2lmaWNhdGlvbnMsIGR5bmFtaWMgcGF5bG9hZCB0eXBlcyBhcmUgdG8gYmUgaW4KKyAgICAgKiB0aGUgcmFuZ2UgOTYtMTI3IChpbmNsdXNpdmUpLiBUaGlzIGVudW0gaXMgc3RydWN0dXJlZCB0byBwbGFjZSB0aGUKKyAgICAgKiB2YWx1ZXMgb2YgdGhlIHBheWxvYWQgdHlwZXMgc3BlY2lmaWVkIGJlbG93IGludG8gdGhhdCByYW5nZS4KKyAgICAgKgorICAgICAqIFBKTUVESUFfUlRQX1BUX0RZTkFNSUMgaXMgZGVmaW5lZCBpbiA8cGptZWRpYS9jb2RlYy5oPi4gSXQgaXMgZGVmaW5lZAorICAgICAqIHRvIGJlIDk2LgorICAgICAqCisgICAgICogUEpNRURJQV9SVFBfUFRfVEVMRVBIT05FX0VWRU5UUyBpcyBkZWZpbmVkIGluIDxwam1lZGlhL2NvbmZpZy5oPi4KKyAgICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA5Ni4KKyAgICAgKi8KKyNpZiBQSk1FRElBX1JUUF9QVF9URUxFUEhPTkVfRVZFTlRTCisgICAgUEpNRURJQV9SVFBfUFRfU1RBUlQgPSBQSk1FRElBX1JUUF9QVF9URUxFUEhPTkVfRVZFTlRTLAorI2Vsc2UKKyAgICBQSk1FRElBX1JUUF9QVF9TVEFSVCA9IChQSk1FRElBX1JUUF9QVF9EWU5BTUlDLTEpLAorI2VuZGlmCisKKyAgICBQSk1FRElBX1JUUF9QVF9TUEVFWF9OQiwJCQkvKio8IFNwZWV4IG5hcnJvd2JhbmQvOEtIeiAgKi8KKyAgICBQSk1FRElBX1JUUF9QVF9TUEVFWF9XQiwJCQkvKio8IFNwZWV4IHdpZGViYW5kLzE2S0h6ICAgKi8KKyAgICBQSk1FRElBX1JUUF9QVF9TUEVFWF9VV0IsCQkJLyoqPCBTcGVleCAzMktIegkgICAgKi8KKyAgICBQSk1FRElBX1JUUF9QVF9TSUxLX05CLAkJCS8qKjwgU0lMSyBuYXJyb3diYW5kLzhLSHogICAqLworICAgIFBKTUVESUFfUlRQX1BUX1NJTEtfTUIsCQkJLyoqPCBTSUxLIG1lZGl1bWJhbmQvMTJLSHogICovCisgICAgUEpNRURJQV9SVFBfUFRfU0lMS19XQiwJCQkvKio8IFNJTEsgd2lkZWJhbmQvMTZLSHogICAgKi8KKyAgICBQSk1FRElBX1JUUF9QVF9TSUxLX1NXQiwJCQkvKio8IFNJTEsgMjRLSHoJCSAgICAqLworICAgIFBKTUVESUFfUlRQX1BUX0lMQkMsCQkJLyoqPCBpTEJDICgxMy4zLzE1LjJLYnBzKSAgICovCisgICAgUEpNRURJQV9SVFBfUFRfQU1SLAkJCQkvKio8IEFNUiAoNC43NSAtIDEyLjJLYnBzKSAgKi8KKyAgICBQSk1FRElBX1JUUF9QVF9BTVJXQiwJCQkvKio8IEFNUldCICg2LjYgLSAyMy44NUticHMpKi8KKyAgICBQSk1FRElBX1JUUF9QVF9BTVJXQkUsCQkJLyoqPCBBTVJXQkUJCSAgICAqLworICAgIFBKTUVESUFfUlRQX1BUX0c3MjZfMTYsCQkJLyoqPCBHNzI2IEAgMTZLYnBzCSAgICAqLworICAgIFBKTUVESUFfUlRQX1BUX0c3MjZfMjQsCQkJLyoqPCBHNzI2IEAgMjRLYnBzCSAgICAqLworICAgIFBKTUVESUFfUlRQX1BUX0c3MjZfMzIsCQkJLyoqPCBHNzI2IEAgMzJLYnBzCSAgICAqLworICAgIFBKTUVESUFfUlRQX1BUX0c3MjZfNDAsCQkJLyoqPCBHNzI2IEAgNDBLYnBzCSAgICAqLworICAgIFBKTUVESUFfUlRQX1BUX0c3MjJfMV8xNiwJCQkvKio8IEc3MjIuMSAoMTZLYnBzKQkgICAgKi8KKyAgICBQSk1FRElBX1JUUF9QVF9HNzIyXzFfMjQsCQkJLyoqPCBHNzIyLjEgKDI0S2JwcykJICAgICovCisgICAgUEpNRURJQV9SVFBfUFRfRzcyMl8xXzMyLAkJCS8qKjwgRzcyMi4xICgzMkticHMpCSAgICAqLworICAgIFBKTUVESUFfUlRQX1BUX0c3MjIxQ18yNCwJCQkvKio8IEc3MjIuMSBBbm5leCBDICgyNEticHMpKi8KKyAgICBQSk1FRElBX1JUUF9QVF9HNzIyMUNfMzIsCQkJLyoqPCBHNzIyLjEgQW5uZXggQyAoMzJLYnBzKSovCisgICAgUEpNRURJQV9SVFBfUFRfRzcyMjFDXzQ4LAkJCS8qKjwgRzcyMi4xIEFubmV4IEMgKDQ4S2JwcykqLworICAgIFBKTUVESUFfUlRQX1BUX0c3MjIxX1JTVjEsCQkJLyoqPCBHNzIyLjEgcmVzZXJ2ZQkgICAgKi8KKyAgICBQSk1FRElBX1JUUF9QVF9HNzIyMV9SU1YyLAkJCS8qKjwgRzcyMi4xIHJlc2VydmUJICAgICovCisgICAgUEpNRURJQV9SVFBfUFRfTDE2XzhLSFpfTU9OTywJCS8qKjwgTDE2IEAgOEtIeiwgbW9ubwkgICAgKi8KKyAgICBQSk1FRElBX1JUUF9QVF9MMTZfOEtIWl9TVEVSRU8sCQkvKio8IEwxNiBAIDhLSHosIHN0ZXJlbyAgICAgKi8KKyAgICAvL1BKTUVESUFfUlRQX1BUX0wxNl8xMUtIWl9NT05PLAkJLyoqPCBMMTYgQCAxMUtIeiwgbW9ubwkgICAgKi8KKyAgICAvL1BKTUVESUFfUlRQX1BUX0wxNl8xMUtIWl9TVEVSRU8sCQkvKio8IEwxNiBAIDExS0h6LCBzdGVyZW8gICAgKi8KKyAgICBQSk1FRElBX1JUUF9QVF9MMTZfMTZLSFpfTU9OTywJCS8qKjwgTDE2IEAgMTZLSHosIG1vbm8JICAgICovCisgICAgUEpNRURJQV9SVFBfUFRfTDE2XzE2S0haX1NURVJFTywJCS8qKjwgTDE2IEAgMTZLSHosIHN0ZXJlbyAgICAqLworICAgIC8vUEpNRURJQV9SVFBfUFRfTDE2XzIyS0haX01PTk8sCQkvKio8IEwxNiBAIDIyS0h6LCBtb25vCSAgICAqLworICAgIC8vUEpNRURJQV9SVFBfUFRfTDE2XzIyS0haX1NURVJFTywJCS8qKjwgTDE2IEAgMjJLSHosIHN0ZXJlbyAgICAqLworICAgIC8vUEpNRURJQV9SVFBfUFRfTDE2XzMyS0haX01PTk8sCQkvKio8IEwxNiBAIDMyS0h6LCBtb25vCSAgICAqLworICAgIC8vUEpNRURJQV9SVFBfUFRfTDE2XzMyS0haX1NURVJFTywJCS8qKjwgTDE2IEAgMzJLSHosIHN0ZXJlbyAgICAqLworICAgIC8vUEpNRURJQV9SVFBfUFRfTDE2XzQ4S0haX01PTk8sCQkvKio8IEwxNiBAIDQ4S0h6LCBtb25vCSAgICAqLworICAgIC8vUEpNRURJQV9SVFBfUFRfTDE2XzQ4S0haX1NURVJFTywJCS8qKjwgTDE2IEAgNDhLSHosIHN0ZXJlbyAgICAqLworCisgICAgLyogQ2F1dGlvbiEKKyAgICAgKiBFbnN1cmUgdGhlIHZhbHVlIG9mIHRoZSBsYXN0IHB0IGFib3ZlIGlzIDw9IDEyNy4KKyAgICAgKi8KK307CisKKy8qKgorICogVGhlc2UgYXJlIHRoZSBkeW5hbWljIHBheWxvYWQgdHlwZXMgdGhhdCBhcmUgdXNlZCBieSB2aWRlbyBjb2RlY3MgaW4KKyAqIHRoaXMgbGlicmFyeS4KKyAqLworZW51bSBwam1lZGlhX3ZpZGVvX3B0Cit7CisgICAgIC8qIFZpZGVvIHBheWxvYWQgdHlwZXMgKi8KKyAgICAgUEpNRURJQV9SVFBfUFRfVklEX1NUQVJUID0gKFBKTUVESUFfUlRQX1BUX0RZTkFNSUMtMSksCisgICAgIFBKTUVESUFfUlRQX1BUX0gyNjNQLAorICAgICBQSk1FRElBX1JUUF9QVF9IMjY0LAorICAgICBQSk1FRElBX1JUUF9QVF9IMjY0X1JTVjEsCisgICAgIFBKTUVESUFfUlRQX1BUX0gyNjRfUlNWMiwKKyAgICAgUEpNRURJQV9SVFBfUFRfSDI2NF9SU1YzLAorICAgICBQSk1FRElBX1JUUF9QVF9IMjY0X1JTVjQsCisKKyAgICAgLyogQ2F1dGlvbiEKKyAgICAgICogRW5zdXJlIHRoZSB2YWx1ZSBvZiB0aGUgbGFzdCBwdCBhYm92ZSBpcyA8PSAxMjcuCisgICAgICAqLworfTsKKworCisvKioKKyAqIEB9CisgKi8KKworCisjZW5kaWYJLyogX19QSk1FRElBX0NPREVDX1RZUEVTX0hfXyAqLwo=