LyoKICogY29tY3RsIChEdXRjaCByZXNvdXJjZXMpCiAqCiAqIENvcHlyaWdodCAyMDAzIEhhbnMgTGVpZGVra2VyCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCiNpbmNsdWRlICJjb21jdGwzMi5oIgoKTEFOR1VBR0UgTEFOR19EVVRDSCwgU1VCTEFOR19ORVVUUkFMCgpJRERfUFJPUFNIRUVUIERJQUxPRyBESVNDQVJEQUJMRSAwLCAwLCAyMjAsIDE0MApTVFlMRSBEU19DT05URVhUSEVMUCB8IERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VIHwgV1NfVklTSUJMRQpDQVBUSU9OICJFaWdlbnNjaGFwcGVuIHZhbiAlcyIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpCRUdJTgogIERFRlBVU0hCVVRUT04gIk9LIiwgICAgICAgICBJRE9LLDQsMTIyLDUwLDE0LCBXU19UQUJTVE9QIHwgV1NfR1JPVVAKICBQVVNIQlVUVE9OICAgICJBbm51bGVyZW4iLCAgSURDQU5DRUwsNTgsMTIyLDUwLDE0CiAgUFVTSEJVVFRPTiAgICAiJlRvZXBhc3NlbiIsIElEQ19BUFBMWV9CVVRUT04sMTEyLDEyMiw1MCwxNCxXU19ESVNBQkxFRAogIFBVU0hCVVRUT04gICAgIkhlbHAiLCAgICAgICBJREhFTFAsMTY2LDEyMiw1MCwxNCxXU19UQUJTVE9QfFdTX0dST1VQCiAgQ09OVFJPTCAgICAgICAiVGFiYmxhZCIsICAgIElEQ19UQUJDT05UUk9MLCJTeXNUYWJDb250cm9sMzIiLFdTX0NMSVBTSUJMSU5HU3xXU19HUk9VUHxXU19UQUJTVE9QfFRDU19NVUxUSUxJTkUsNCw0LDIxMiwxMTQKRU5ECgoKSUREX1dJWkFSRCBESUFMT0cgRElTQ0FSREFCTEUgMCwgMCwgMjkwLCAxNTkKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUgfCBXU19WSVNJQkxFCkNBUFRJT04gIkFzc2lzdGVudCIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpCRUdJTgogIFBVU0hCVVRUT04gICAgIjwgViZvcmlnZSIsICAgSURDX0JBQ0tfQlVUVE9OLDcxLDEzOCw1MCwxNAogIERFRlBVU0hCVVRUT04gIiZWb2xnZW5kZSA+IiwgSURDX05FWFRfQlVUVE9OLDEyMSwxMzgsNTAsMTQKICBERUZQVVNIQlVUVE9OICJCZetpbmRpZ2VuIiwgIElEQ19GSU5JU0hfQlVUVE9OLDEyMSwxMzgsNTAsMTQKICBQVVNIQlVUVE9OICAgICJBbm51bGVyZW4iLCAgIElEQ0FOQ0VMLDE3OCwxMzgsNTAsMTQKICBQVVNIQlVUVE9OICAgICJIZWxwIiwgICAgICAgIElESEVMUCwyMzUsMTM4LDUwLDE0LFdTX0dST1VQCiAgTFRFWFQgICAgICAgICAiIiwgICAgICAgICAgICBJRENfU1VOS0VOX0xJTkUsNywxMjksMjc4LDEsU1NfU1VOS0VOCiAgQ09OVFJPTCAgICAgICAiVGFiYmxhZCIsICAgICBJRENfVEFCQ09OVFJPTCwiU3lzVGFiQ29udHJvbDMyIixXU19DTElQU0lCTElOR1MgfCBXU19ESVNBQkxFRCw3LDcsMjU4LDUKICBMVEVYVAkgICAgICAgICIiLCAgICAgICAgSURDX1NVTktFTl9MSU5FSEVBREVSLDAsMzUsMjkwLDEsU1NfTEVGVCB8IFNTX1NVTktFTiB8IFdTX0NISUxEIHwgV1NfVklTSUJMRQpFTkQKCgpJRERfVEJDVVNUT01JWkUgRElBTE9HIERJU0NBUkRBQkxFIDEwLCAyMCwgMzU3LCAxMjUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIkdlcmVlZHNjaGFwcGVuYmFsayBhYW5wYXNzZW4iCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICBERUZQVVNIQlVUVE9OICImQWZzbHVpdGVuIiwgICAgICAgICAgIElEQ0FOQ0VMLDMwOCw2LDQ0LDE0CiAgUFVTSEJVVFRPTiAgICAiJlJlc2V0IiwgICAgICAgICAgICAgICBJRENfUkVTRVRfQlROLDMwOCwyMyw0NCwxNAogIFBVU0hCVVRUT04gICAgIiZIZWxwIiwgICAgICAgICAgICAgICAgSURDX0hFTFBfQlROLDMwOCw0MCw0NCwxNAogIFBVU0hCVVRUT04gICAgIlZlcnBsYWF0cyBPbSZob29nIiwgICAgSURDX01PVkVVUF9CVE4sMzA4LDc0LDQ0LDE0CiAgUFVTSEJVVFRPTiAgICAiVmVycGxhYXRzIE9tJmxhYWciLCAgICBJRENfTU9WRUROX0JUTiwzMDgsOTEsNDQsMTQKICBMVEVYVCAgICAgICAgICImQmVzY2hpa2JhcmUga25vcHBlbjoiLCAtMSw0LDUsODQsMTAKICBMSVNUQk9YICAgICAgIElEQ19BVkFJTEJUTl9MQk9YLDQsMTcsMTIwLDEwMCwgTEJTX05PVElGWSB8IExCU19PV05FUkRSQVdGSVhFRCB8IExCU19IQVNTVFJJTkdTIHwgTEJTX05PSU5URUdSQUxIRUlHSFQgfCBMQlNfRElTQUJMRU5PU0NST0xMIHwgV1NfQk9SREVSIHwgV1NfVlNDUk9MTCB8IFdTX0hTQ1JPTEwgfCBXU19UQUJTVE9QCiAgUFVTSEJVVFRPTiAgICAiJlRvZXZvZWdlbiAtPiIsICAgSURPSywgMTMxLCA0MiwgNDQsIDE0CiAgUFVTSEJVVFRPTiAgICAiPC0gJlZlcndpamRlcmVuIiwgSURDX1JFTU9WRV9CVE4sMTMxLDYyLDQ0LDE0CiAgTFRFWFQgICAgICAgICAiJktub3BwZW46IiwgICAgICAgLTEsMTgyLDUsNzgsMTAKICBMSVNUQk9YICAgICAgIElEQ19UT09MQkFSQlROX0xCT1gsIDE4MiwxNywxMjAsMTAwLExCU19OT1RJRlkgfCBMQlNfT1dORVJEUkFXRklYRUQgfCBMQlNfSEFTU1RSSU5HUyB8IExCU19OT0lOVEVHUkFMSEVJR0hUIHwgTEJTX0RJU0FCTEVOT1NDUk9MTCB8IFdTX0JPUkRFUiB8IFdTX1ZTQ1JPTEwgfCBXU19IU0NST0xMIHwgV1NfVEFCU1RPUApFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKICAgIElEU19DTE9TRSAgICAiU2x1aXRlbiIKfQoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewogICAgSURNX1RPREFZICAgICJWYW5kYWFnOiIKICAgIElETV9HT1RPREFZICAiR2EgdmFuZGFhZyBuYWFyIgp9CgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CiAgICBJRFNfU0VQQVJBVE9SICJTY2hlaWRpbmdzdGVrZW4iCn0KClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKICAgIEhLWV9OT05FICJHZWVuIgp9Cg==