LyoKICogWENPUFkgLSBXaW5lLWNvbXBhdGlibGUgeGNvcHkgcHJvZ3JhbQogKiBQb3J0dWd1ZXNlIGxhbmd1YWdlIHN1cHBvcnQKICoKICogQ29weXJpZ2h0IChDKSAyMDA4IFJpY2FyZG8gRmlsaXBlCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCgpMQU5HVUFHRSBMQU5HX1BPUlRVR1VFU0UsIFNVQkxBTkdfTkVVVFJBTAoKU1RSSU5HVEFCTEUKewogICAgU1RSSU5HX0lOVlBBUk1TLCAiTvptZXJvIGRlIHBhcuJtZXRyb3MgaW524WxpZG8gLSBVc2UgeGNvcHkgLz8gcGFyYSBhanVkYVxuIgogICAgU1RSSU5HX0lOVlBBUk0sICAiUGFy4m1ldHJvIGluduFsaWRvICclcycgLSAgVXNlIHhjb3B5IC8/IHBhcmEgYWp1ZGFcbiIKICAgIFNUUklOR19QQVVTRSwgICAgIkNhcnJlZ3VlIDxFbnRlcj4gcGFyYSBpbmljaWFyIGPzcGlhXG4iCiAgICBTVFJJTkdfU0lNQ09QWSwgICIlZCBmaWNoZWlybyhzKSBzZXJpYW0gY29waWFkb3NcbiIKICAgIFNUUklOR19DT1BZLCAgICAgIiVkIGZpY2hlaXJvKHMpIGNvcGlhZG9zXG4iCiAgICBTVFJJTkdfUUlTRElSLCAgICInJXMnIOkgdW0gZmljaGVpcm8gb3UgZGlyZWN083Jpb1xuIiBcCiAgICAgICAgICAgICAgICAgICAgICJubyBhbHZvP1xuIiBcCiAgICAgICAgICAgICAgICAgICAgICIoRiAtIEZpY2hlaXJvLCBEIC0gRGlyZWN083JpbylcbiIKICAgIFNUUklOR19TUkNQUk9NUFQsIiVzPyAoWWVzfE5vKVxuIgogICAgU1RSSU5HX09WRVJXUklURSwiUmVlc2NyZXZlciAlcz8gKFllc3xOb3xBbGwpXG4iCiAgICBTVFJJTkdfQ09QWUZBSUwsICJD83BpYSBkZSAnJXMnIHBhcmEgJyVzJyBmYWxob3UgY29tIHIvYyAlZFxuIgogICAgU1RSSU5HX09QRU5GQUlMLCAiRmFsaG91IGFvIGFicmlyICclcydcbiIKICAgIFNUUklOR19SRUFERkFJTCwgIkZhbGhvdSBhIGxlciAnJXMnXG4iCiAgICBTVFJJTkdfWUVTX0NIQVIsICJZIgogICAgU1RSSU5HX05PX0NIQVIsICAiTiIKICAgIFNUUklOR19BTExfQ0hBUiwgIkEiCiAgICBTVFJJTkdfRklMRV9DSEFSLCJGIgogICAgU1RSSU5HX0RJUl9DSEFSLCAiRCIKCiAgICBTVFJJTkdfSEVMUCwKIlhDT1BZIC0gQ29waWEgZmljaGVpcm9zIG91IGRpcmVjdPNyaW9zIHBhcmEgdW0gZGVzdGlub1xuXApcblwKU2ludGF4ZTpcblwKWENPUFkgc291cmNlIFtkZXN0XSBbL0ldIFsvU10gWy9RXSBbL0ZdIFsvTF0gWy9XXSBbL1RdIFsvTl0gWy9VXVxuXApcdCAgICAgWy9SXSBbL0hdIFsvQ10gWy9QXSBbL0FdIFsvTV0gWy9FXSBbL0RdIFsvWV0gWy8tWV1cblwKXG5cCk9uZGU6XG5cClxuXApbL0ldICBBc3N1bWUgZGlyZWN083JpbyBzZSBvIGRlc3Rpbm8gbuNvIGV4aXN0ZSBlIGVzdOEgYSBjb3BpYXIgMiBvdVxuXApcdG1haXMgZmljaGVpcm9zXG5cClsvU10gIENvcGlhciBkaXJlY3TzcmlvcyBlIHN1YmRpcmVjdPNyaW9zXG5cClsvRV0gIENvcGlhciBkaXJlY3TzcmlvcyBlIHN1YmRpcmVjdPNyaW9zLCBpbmNsdWluZG8gb3MgdmF6aW9zXG5cClsvUV0gIE7jbyBtb3N0cmFyIG5vbWVzIGR1cmFudGUgYSBj83BpYSwgaWUgcXVpZXQuXG5cClsvRl0gIE1vc3RyYXIgcG9yIGNvbXBsZXRvIG9zIG5vbWVzIGRlIGZvbnRlIGUgZGVzdGlubyBkdXJhbnRlIGEgY/NwaWFcblwKWy9MXSAgU2ltdWxhciBhIG9wZXJh5+NvLCBtb3N0cmFuZG8gb3Mgbm9tZXMgcXVlIHNlcmlhbSBjb3BpYWRvc1xuXApbL1ddICBBbGVydGEgYW50ZXMgZGUgaW5pY2lhciBhIG9wZXJh5+NvIGRlIGPzcGlhXG5cClsvVF0gIENyaWEgYSBlc3RydXR1cmEgZGUgZGlyZWN083Jpb3MgbWFzIG7jbyBjb3BpYSBmaWNoZWlyb3NcblwKWy9ZXSAgU3VwcmltaXIgYWxlcnRhcyBxdWFuZG8gcmVlc2NyZXZlIGZpY2hlaXJvc1xuXApbLy1ZXSBBbGVydGFyIHF1YW5kbyByZWVzY3JldmUgZmljaGVpcm9zXG5cClsvUF0gIEFsZXJ0YXIgYW50ZXMgZGUgY2FkYSBmaWNoZWlyb3Mgc2VyIGNvcGlhZG9cblwKWy9OXSAgQ29waWFyIHVzYW5kbyBub21lcyBwZXF1ZW5vc1xuXApbL1VdICBDb3BpYXIgYXBlbmFzIGZpY2hlaXJvcyBxdWUgauEgZXhpc3RlbSBubyBkZXN0aW5vXG5cClsvUl0gIFJlZXNjcmV2ZXIgcXVhaXNxdWVyIGZpY2hlaXJvcyBhcGVuYXMgZGUgbGVpdHVyYVxuXApbL0hdICBJbmNsdWlyIGZpY2hlaXJvcyBvY3VsdG9zIGUgZGUgc2lzdGVtYSBuYSBj83BpYVxuXApbL0NdICBDb250aW51YXIgbWVzbW8gcXVlIG9jb3JyYSB1bSBlcnJvIGR1cmFudGUgYSBj83BpYVxuXApbL0FdICBDb3BpYXIgYXBlbmFzIGZpY2hlaXJvcyBjb20gYXRyaWJ1dG8gZGUgYXJxdWl2b1xuXApbL01dICBDb3BpYXIgYXBlbmFzIGZpY2hlaXJvcyBjb20gYXRyaWJ1dG8gZGUgYXJxdWl2bywgcmVtb3ZlbmRvXG5cClx0byBhdHJpYnV0byBkZSBhcnF1aXZvXG5cClsvRCB8IC9EOm0tZC15XSBDb3BpYXIgbm92b3MgZmljaGVpcm9zIG91IG9zIGFsdGVyYWRvcyBhcPNzIGEgZGF0YSBmb3JuZWNpZGFcblwKXHRcdFNlIG5lbmh1bWEgZGF0YSBmb3IgZm9ybmVjaWRhLCBhcGVuYXMgY29waWFyIHNlIG8gZGVzdGlubyBmb3IgbWFpcyBhbnRpZ29cblwKXHRcdHF1ZSBhIGZvbnRlXG5cbiIKCn0K