LyoKICogTXNIVE1MIHJlc291cmNlcwogKiBGcmVuY2ggTGFuZ3VhZ2UgU3VwcG9ydAogKgogKiBDb3B5cmlnaHQgMjAwNS0yMDA2IEpvbmF0aGFuIEVybnN0CiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCgpMQU5HVUFHRSBMQU5HX0ZSRU5DSCwgU1VCTEFOR19ORVVUUkFMCgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CiAgICBJRFNfSFRNTERJU0FCTEVEICAgICJMZSByZW5kdSBIVE1MIGVzdCBhY3R1ZWxsZW1lbnQgZOlzYWN0aXbpLiIKICAgIElEU19IVE1MRE9DVU1FTlQgICAgIkRvY3VtZW50IEhUTUwiCiAgICBJRFNfRE9XTkxPQURJTkcgICAgICJU6WzpY2hhcmdlbWVudC4uLiIKICAgIElEU19JTlNUQUxMSU5HICAgICAgIkluc3RhbGxhdGlvbi4uLiIKfQoKSURfRFdMX0RJQUxPRyBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAgMCwgMCwgMjYwLCA5NQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgRFNfQ0VOVEVSIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiUHJvZ3JhbW1lIGQnaW5zdGFsbGF0aW9uIGRlIEdlY2tvIGRlIFdpbmUiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewogICAgTFRFWFQgIkNldHRlIGFwcGxpY2F0aW9uIGVzc2FpZSBkJ2FmZmljaGVyIHVuZSBwYWdlIEhUTUwuIFdpbmUgcmVxdWllcnQgbGEgcHLpc2VuY2UgZHUgbW90ZXVyIGRlIHJlbmR1IEdlY2tvIGRlIE1vemlsbGEiIFwKICAgICAgICAgICJwb3VyIGFmZmljaGVyIGNldHRlIHBhZ2UuIENsaXF1ZXogc3VyIEluc3RhbGxlciBzaSB2b3VzIHNvdWhhaXRleiBxdWUgV2luZSAiIFwKICAgICAgICAgICJ06WzpY2hhcmdlIGV0IGluc3RhbGxlIGF1dG9tYXRpcXVlbWVudCBHZWNrby4iLCBJRF9EV0xfU1RBVFVTLCAxMCwgMTAsIDI0MCwgNDAsIFNTX0xFRlQKICAgIENPTlRST0wgIlByb2dyZXNzaW9uIiwgSURfRFdMX1BST0dSRVNTLCBQUk9HUkVTU19DTEFTU0EsIFdTX0JPUkRFUnxQQlNfU01PT1RILCAxMCwgNTAsIDI0MCwgMTIKICAgIERFRlBVU0hCVVRUT04gIiZJbnN0YWxsZXIiLCBJRF9EV0xfSU5TVEFMTCwgMjAwLCA3MCwgNTAsIDE1LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKICAgIFBVU0hCVVRUT04gIiZBbm51bGVyIiwgSURDQU5DRUwsIDE0MCwgNzAsIDUwLCAxNSwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCn0K