LyoKICogTkVULkVYRSAtIFdpbmUtY29tcGF0aWJsZSBuZXQgcHJvZ3JhbQogKiBSdXNzaWFuIGxhbmd1YWdlIHN1cHBvcnQKICoKICogQ29weXJpZ2h0IChDKSAyMDA3IEtvbnN0YW50aW4gS29uZHJhdHl1ayAoRXRlcnNvZnQpCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfUlVTU0lBTiwgU1VCTEFOR19ERUZBVUxUCgpTVFJJTkdUQUJMRQp7CiAgICBTVFJJTkdfVVNBR0UsICLI8e/u6/zn7uLg7ejlOlxuXG5ORVQgWyBIRUxQIHwgU1RBUlQgfCBTVE9QIHwgVVNFIF1cbiIKICAgIFNUUklOR19TVEFSVF9VU0FHRSwgItPq4Obo8uUg5+Dv8/Hq4OXs8/4g8evz5uHzLlxuIgogICAgU1RSSU5HX1NUT1BfVVNBR0UsICLT6uDm6PLlIO7x8uDt4OLr6OLg5ezz/iDx6/Pm4fMuXG4iCiAgICBTVFJJTkdfU1RPUF9ERVAsICLO8fLg7e7i6uAg5+Di6PHo7O7pIPHr8+bh+zogJXNcbiIKICAgIFNUUklOR19DQU5UX1NUT1AsICLN5eLu5+zu5u3uIO7x8uDt7uLo8vwg8evz5uHzICVzXG4iCiAgICBTVFJJTkdfTk9fU0NNLCAizeXi7ufs7ubt7iDv7uvz9+jy/CDk7vHy8+8g6iDk6PHv5fL35fDzIPHr8+bhLlxuIgogICAgU1RSSU5HX05PX1NWQ0hBTkRMRSwgIs3l4u7n7O7m7e4g7+7r8/fo8vwg5O7x8vPvIOog8evz5uHlLlxuIgogICAgU1RSSU5HX1NUQVJUX1NWQywgIsfg7/Px6iDx6/Pm4fsgJXMuXG4iCiAgICBTVFJJTkdfU1RBUlRfU1ZDX1NVQ0NFU1MsICLR6/Pm4eAgJXMg8/Hv5fjt7iDn4O/z+eXt4C5cbiIKICAgIFNUUklOR19TVEFSVF9TVkNfRkFJTCwgIs746OHq4CDv8Ogg5+Dv8/Hq5SDx6/Pm4fsgJXMuXG4iCiAgICBTVFJJTkdfU1RPUF9TVkMsICLO8fLg7e7i6uAg8evz5uH7ICVzLlxuIgogICAgU1RSSU5HX1NUT1BfU1ZDX1NVQ0NFU1MsICLR6/Pm4eAgJXMg8/Hv5fjt7iDu8fLg7e7i6+Xt4C5cbiIKICAgIFNUUklOR19TVE9QX1NWQ19GQUlMLCAizvjo4ergIO/w6CDu8fLg7e7i6uUg8evz5uH7ICVzLlxuIgogICAgU1RSSU5HX0hFTFBfVVNBR0UsICLI8e/u6/zn7uLg7ejlOlxuXG5ORVQgSEVMUCDq7uzg7eTgXG4gICAgLejr6C1cbk5FVCDq7uzg7eTgIC9IRUxQXG5cbiJcCiAgICAgICAgICAgICAgICAgICAgICAgIiAgIMTu8fLz7+375SDq7uzg7eT7OlxuICAgTkVUIEhFTFAgICAgTkVUIFNUQVJUICAgIE5FVCBTVE9QICAgIE5FVCBVU0VcbiIKICAgIFNUUklOR19OT19FTlRSSUVTLCAi0e/o8e7qIO/z8fIuXG4iCiAgICBTVFJJTkdfVVNFX0hFQURFUiwgIlxu0fLg8vPxICDL7urg6/zt++kgINPk4Ou47e376VxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCiAgICBTVFJJTkdfVVNFX0VOVFJZLCAgIiVzICAgICAgJVMgICAgICAgICAlUyAgICAgIM7y6vD78vv1IPDl8fPw8e7iOiAlbHVcbiIKfQo=