LyoKICogS29yZWFuIGxhbmd1YWdlIHJlc291cmNlIGZpbGUgZm9yIENyZWRlbnRpYWxzIFVJCiAqCiAqIENvcHlyaWdodCAyMDA3IFJvYmVydCBTaGVhcm1hbiAoZm9yIENvZGVXZWF2ZXJzKQogKiBDb3B5cmlnaHQgMjAwNyBZdW5Tb25nIEh3YW5nLciywLG8uihoeXM1NDVAZHJlYW13aXouY29tKQogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojaW5jbHVkZSAiY3JlZHVpX3Jlc291cmNlcy5oIgoKTEFOR1VBR0UgTEFOR19LT1JFQU4sIFNVQkxBTkdfREVGQVVMVAoKSUREX0NSRURESUFMT0cgRElBTE9HIERJU0NBUkRBQkxFICAwLCAwLCAyMTMsIDE0OQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgRFNfTk9JRExFTVNHIHwgRFNfQ0VOVEVSIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJJRFNfVElUTEVGT1JNQVQiCkZPTlQgOSwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICAgIENPTlRST0wgICAgICAgICBJREJfQkFOTkVSLC0xLCJTdGF0aWMiLFNTX0JJVE1BUCB8IFNTX0NFTlRFUklNQUdFLDAsCiAgICAgICAgICAgICAgICAgICAgMCwyMTMsMzcKICAgIExURVhUICAgICAgICAgICAiSURTX01FU1NBR0VGT1JNQVQiLElEQ19NRVNTQUdFLDgsNDgsMTk5LDgsTk9UIFdTX0dST1VQCiAgICBMVEVYVCAgICAgICAgICAgIrvnv+vA2iDAzLinKCZVKToiLC0xLDgsNjIsNzIsMTIsU1NfQ0VOVEVSSU1BR0UKICAgIENPTlRST0wgICAgICAgICAiIixJRENfVVNFUk5BTUUsIkNvbWJvQm94RXgzMiIsQ0JTX0RST1BET1dOIHwKICAgICAgICAgICAgICAgICAgICBDQlNfTk9JTlRFR1JBTEhFSUdIVCB8IFdTX1RBQlNUT1AsODAsNjIsMTI2LDg3CiAgICBMVEVYVCAgICAgICAgICAgIr7PyKMoJlApOiIsLTEsOCw4MCw3MiwxMixTU19DRU5URVJJTUFHRQogICAgRURJVFRFWFQgICAgICAgIElEQ19QQVNTV09SRCw4MCw4MCwxMjYsMTIsRVNfUEFTU1dPUkQgfCBFU19BVVRPSFNDUk9MTAogICAgQ09OVFJPTCAgICAgICAgICKzuyC+z8ijILHivu8oJlIpIixJRENfU0FWRSwiQnV0dG9uIiwKICAgICAgICAgICAgICAgICAgICBCU19BVVRPQ0hFQ0tCT1ggfCBXU19UQUJTVE9QLDgwLDk4LDEyNiwxMgogICAgREVGUFVTSEJVVFRPTiAgICLIrsDOIixJRE9LLDk3LDEyOCw1MCwxNAogICAgUFVTSEJVVFRPTiAgICAgICLD67zSIixJRENBTkNFTCwxNTYsMTI4LDUwLDE0CkVORAoKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKIElEU19USVRMRUZPUk1BVCAgICAgIiAlcyC/rLDhIgogSURTX01FU1NBR0VGT1JNQVQgICAiICVzIL+ssOHB3yIKIElEU19JTkNPUlJFQ1RQQVNTV09SRFRJVExFICAit86x17/CICC9x8bQIgogSURTX0lOQ09SUkVDVFBBU1NXT1JEICAgICAgICK0573FwMcgu+e/68DaIMDMuKew+iC+z8ijsKFcbr/Dudm4pcH2IMiuwM7Hz73KvcO/wCIKIElEU19DQVBTTE9DS09OVElUTEUgIkNhcHMgTG9jayAgxL/B/CIKIElEU19DQVBTTE9DS09OICAgICAgIkNhcHMgTG9jayDAzCDEv8GuIMDWwLi46SC+z8ijsKEgwN+4+MDUt8K1ySC89iDA1r3AtM+02S5cblxuIL7PyKO4piDA1LfCx8+x4iDA/L+hXG7FsLq4teXAxyBDYXBzIExvY2sgxbC4piCy9L3DseIgudm2+LTPtNkuIgp9Cg==