LyoKICogU3RhcnQKICogSXRhbGlhbiBMYW5ndWFnZSBTdXBwb3J0CiAqCiAqIENvcHlyaWdodCAyMDAzIERhbiBLZWdlbAogKiBDb3B5cmlnaHQgMjAwMyBJdmFuIExlbyBQdW90aQogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCgpMQU5HVUFHRSBMQU5HX0lUQUxJQU4sIFNVQkxBTkdfREVGQVVMVAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUgTEFOR1VBR0UgTEFOR19JVEFMSUFOLCBTVUJMQU5HX0RFRkFVTFQKewpTVFJJTkdfVVNBR0UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQXZ2aWEgdW4gcHJvZ3JhbW1hLCBvIGFwcmkgdW4gZG9jdW1lbnRvIGNvbiBpbCBwcm9ncmFtbWEgbm9ybWFsbWVudGUgdXNhdG8gcGVyIGkgcHJvZ3JhbW1pIGNvbiBxdWxsJ2VzdGVuc2lvbmUgXG5cClVzYWdlOiBcblwKc3RhcnQgW29wdGlvbnNdIG5vbWUgZGVsIHByb2dyYW1tYSBbLi4uXSBcblwKc3RhcnQgW29wdGlvbnNdIG5vbWRlIGRlbCBkb2N1bWVudG8gXG5cCiBcblwKT3B0aW9uczogXG5cCi9NW2luaW1pemVkXSBBdnZpYSBpbCBwcm9ncmFtbWEgbWluaW1penphdG8uIFxuXAovTUFYW2ltaXplZF0gQXZ2aWEgaWwgcHJvZ3JhbW1hIG1hc3NpbWl6YXRvLiBcblwKL1JbZXN0b3JlZF0gIEF2dmlhIGlsIHByb2dyYW1tYSBub3JtYWxtZW50ZSAobuggbWluaW1penphdG8gbuggbWFzc2ltaXphdG8pLiBcblwKL1dbYWl0XSAgICAgIEF0dGVuZGkgbCd1c2NpdGEgZGVsIHByb2dyYW1tYSwgcG9pIGVzY2kgY29uIGlsIHN1byBjb2RpY2UgZGkgdXNjaXRhLiBcblwKL0wgICAgICAgICAgIE1vc3RyYSBsJ2FjY29yZG8gZGkgbGljZW56YSBjb24gbCd1dGVudGUgZmluYWxlLiBcblwKIFxuXApzdGFydC5leGUgdmVyc2lvbmUgMC4yIENvcHlyaWdodCAoQykgMjAwMywgRGFuIEtlZ2VsIFxuXApTdGFydCDoIGZvcm5pdG8gc2VuemEgbmVzc3VuYSBnYXJhbnppYSwgcGVyIHVsdGVyaW9yaSBpbmZvcm1hemlvbmkgZXNlZ3VpcmUgc3RhcnQgY29uIGwnb3B6aW9uZSAvTC4gXG5cClF1ZXN0byDoIHNvZnR3YXJlIGxpYmVybywgZSBsbyBwb3RldGUgcmVkaXN0cmlidWlyZSBcblwKc290dG8gYWxjdW5lIGNvbmRpemlvbmk7IGVzZWd1aXJlICdzdGFydCcgY29uIGwnb3B6aW9uZSAvTCBwZXIgdWx0ZXJpb3JpIGluZm9tYXppb25pLiBcblwKIgoKU1RSSU5HX0xJQ0VOU0UsICJzdGFydC5leGUgdmVyc2lvbmUgMC4yIENvcHlyaWdodCAoQykgMjAwMywgRGFuIEtlZ2VsIFxuXApUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIFxuXAptb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIFB1YmxpYyBMaWNlbnNlIFxuXAphcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIFxuXApvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gXG5cCiBcblwKVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIFxuXApidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBcblwKTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBcblwKR05VIExlc3NlciBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiBcblwKIFxuXApZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIFB1YmxpYyBMaWNlbnNlIFxuXAphbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBcblwKRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuIFxuXAogXG5cClZlZGVyZSBpbCBmaWxlIENPUFlJTkcuTElCIHBlciBpbmZvcm1hemlvbmkgc3VsbGEgbGljZW56YS4gXG5cCiIKClNUUklOR19FWEVDRkFJTCAiTm9uIOggc3RhdG8gcG9zc2liaWxlIGVzZWd1aXJlIGwnYXBwbGljYXppb25lLCBvIG5lc3N1bmEgYXBwbGljYXppb25lIOggYXNzb2NpYXRhIGNvbiBpbCBmaWxlIHNwZWNpZmljYXRvLlxuU2hlbGxFeGVjdXRlRXggZmFsbGl0byIKfQo=