LyoKICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CiAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCiAqCiAqIENvbnRyaWJ1dG9yczoKICogICBJQk0gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICoKICogJElkOiBBY3Rvci5qYXZhLHYgMS43IDIwMDUvMDUvMTggMTY6Mzg6MzAga2h1c3NleSBFeHAgJAogKi8KcGFja2FnZSBvcmcuZWNsaXBzZS51bWwyOwoKCi8qKgogKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgogKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5BY3RvcjwvYj48L2VtPicuCiAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgogKgogKiA8IS0tIGJlZ2luLW1vZGVsLWRvYyAtLT4KICogQW4gQWN0b3IgbW9kZWxzIGEgdHlwZSBvZiByb2xlIHBsYXllZCBieSBhbiBlbnRpdHkgdGhhdCBpbnRlcmFjdHMgd2l0aCB0aGUgc3ViamVjdCAoZS5nLiwgYnkgZXhjaGFuZ2luZyBzaWduYWxzIGFuZCBkYXRhKSwgYnV0IHdoaWNoIGlzIGV4dGVybmFsIHRvIHRoZSBzdWJqZWN0IChpLmUuLCBpbiB0aGUgc2Vuc2UgdGhhdCBhbiBpbnN0YW5jZSBvZiBhbiBhY3RvciBpcyBub3QgYSBwYXJ0IG9mIHRoZSBpbnN0YW5jZSBvZiBpdHMgY29ycmVzcG9uZGluZyBzdWJqZWN0KS4gQWN0b3JzIG1heSByZXByZXNlbnQgcm9sZXMgcGxheWVkIGJ5IGh1bWFuIHVzZXJzLCBleHRlcm5hbCBoYXJkd2FyZSwgb3Igb3RoZXIgc3ViamVjdHMuIE5vdGUgdGhhdCBhbiBhY3RvciBkb2VzIG5vdCBuZWNlc3NhcmlseSByZXByZXNlbnQgYSBzcGVjaWZpYyBwaHlzaWNhbCBlbnRpdHkgYnV0IG1lcmVseSBhIHBhcnRpY3VsYXIgZmFjZXQgKGkuZS4sIJNyb2xllCkgb2Ygc29tZSBlbnRpdHkgdGhhdCBpcyByZWxldmFudCB0byB0aGUgc3BlY2lmaWNhdGlvbiBvZiBpdHMgYXNzb2NpYXRlZCB1c2UgY2FzZXMuIFRodXMsIGEgc2luZ2xlIHBoeXNpY2FsIGluc3RhbmNlIG1heSBwbGF5IHRoZSByb2xlIG9mIHNldmVyYWwgZGlmZmVyZW50IGFjdG9ycyBhbmQsIGNvbnZlcnNlbHksIGEgZ2l2ZW4gYWN0b3IgbWF5IGJlIHBsYXllZCBieSBtdWx0aXBsZSBkaWZmZXJlbnQgaW5zdGFuY2VzLiBTaW5jZSBhbiBhY3RvciBpcyBleHRlcm5hbCB0byB0aGUgc3ViamVjdCwgaXQgaXMgdHlwaWNhbGx5IGRlZmluZWQgaW4gdGhlIHNhbWUgY2xhc3NpZmllciBvciBwYWNrYWdlIHRoYXQgaW5jb3Jwb3JhdGVzIHRoZSBzdWJqZWN0IGNsYXNzaWZpZXIuIAogKiA8IS0tIGVuZC1tb2RlbC1kb2MgLS0+CiAqCiAqCiAqIEBzZWUgb3JnLmVjbGlwc2UudW1sMi5VTUwyUGFja2FnZSNnZXRBY3RvcigpCiAqIEBtb2RlbAogKiBAZ2VuZXJhdGVkCiAqLwpwdWJsaWMgaW50ZXJmYWNlIEFjdG9yIGV4dGVuZHMgQ2xhc3NpZmllcnsKCS8qKgoJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgoJICogQGdlbmVyYXRlZAoJICovCglTdHJpbmcgY29weXJpZ2h0ID0gIkNvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIjsgLy8kTk9OLU5MUy0xJAoKfSAvLyBBY3Rvcgo=