PGh0bWw+CiAgPGhlYWQ+CiAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LUxhbmd1YWdlIiBjb250ZW50PSJlbi11cyI+CiAgICA8dGl0bGU+U2VsZWN0b3JzIGluIEFudDwvdGl0bGU+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4uL3N0eWxlc2hlZXRzL2FudG1hbnVhbC5jc3MiPgogIDwvaGVhZD4KCiAgPGJvZHk+CiAgICA8aDI+U2VsZWN0b3JzPC9oMj4KCiAgICA8cD5TZWxlY3RvcnMgYXJlIGEgbWVjaGFuaXNtIHdoZXJlYnkgdGhlIGZpbGVzIHRoYXQgbWFrZSB1cCBhIGZpbGVzZXQKICAgIGNhbiBiZSBzZWxlY3RlZCBiYXNlZCBvbiBjcml0ZXJpYSBvdGhlciB0aGFuIGZpbGVuYW1lIGFzIHByb3ZpZGVkCiAgICBieSB0aGUgPGNvZGU+Jmx0O2luY2x1ZGUmZ3Q7PC9jb2RlPiBhbmQgPGNvZGU+Jmx0O2V4Y2x1ZGUmZ3Q7PC9jb2RlPgogICAgdGFncy48L3A+CgogICAgPGgzPkhvdyB0byB1c2UgYSBTZWxlY3RvcjwvaDM+CgogICAgPHA+QSBzZWxlY3RvciBpcyBhbiBlbGVtZW50IG9mIEZpbGVTZXQsIGFuZCBhcHBlYXJzIHdpdGhpbiBpdC4gSXQgY2FuCiAgICBhbHNvIGJlIGRlZmluZWQgb3V0c2lkZSBvZiBhbnkgdGFyZ2V0IGJ5IHVzaW5nIHRoZSAmbHQ7c2VsZWN0b3ImZ3Q7IHRhZwogICAgYW5kIHRoZW4gdXNpbmcgaXQgYXMgYSByZWZlcmVuY2UuCiAgICA8L3A+CgogICAgPHA+RGlmZmVyZW50IHNlbGVjdG9ycyBoYXZlIGRpZmZlcmVudCBhdHRyaWJ1dGVzLiBTb21lIHNlbGVjdG9ycyBjYW4KICAgIGNvbnRhaW4gb3RoZXIgc2VsZWN0b3JzLCBhbmQgdGhlc2UgYXJlIGNhbGxlZAogICAgPGEgaHJlZj0iI3NlbGVjdGNvbnRhaW5lcnMiPjxjb2RlPlNlbGVjdG9yIENvbnRhaW5lcnM8L2NvZGU+PC9hPi4KICAgIFRoZXJlIGlzIGFsc28gYSBjYXRlZ29yeSBvZiBzZWxlY3RvcnMgdGhhdCBhbGxvdwogICAgdXNlci1kZWZpbmVkIGV4dGVuc2lvbnMsIGNhbGxlZAogICAgPGEgaHJlZj0iI2N1c3RvbXNlbGVjdCI+PGNvZGU+Q3VzdG9tIFNlbGVjdG9yczwvY29kZT48L2E+LgogICAgVGhlIG9uZXMgYnVpbHQgaW4gdG8gQW50IGFyZSBjYWxsZWQKICAgIDxhIGhyZWY9IiNjb3Jlc2VsZWN0Ij48Y29kZT5Db3JlIFNlbGVjdG9yczwvY29kZT48L2E+LgogICAgPC9wPgoKICAgIDxhIG5hbWU9ImNvcmVzZWxlY3QiPjwvYT4KICAgIDxoMz5Db3JlIFNlbGVjdG9yczwvaDM+CgogICAgPHA+Q29yZSBzZWxlY3RvcnMgYXJlIHRoZSBvbmVzIHRoYXQgY29tZSBzdGFuZGFyZAogICAgd2l0aCBBbnQuIFRoZXkgY2FuIGJlIHVzZWQgd2l0aGluIGEgZmlsZXNldCBhbmQgY2FuIGJlIGNvbnRhaW5lZAogICAgd2l0aGluIFNlbGVjdG9yIENvbnRhaW5lcnMuPC9wPgoKICAgIDxwPlRoZSBjb3JlIHNlbGVjdG9ycyBhcmU6PC9wPgoKICAgIDx1bD4KICAgICAgPGxpPjxhIGhyZWY9IiNjb250YWluc3NlbGVjdCI+Jmx0O2NvbnRhaW5zJmd0OzwvYT4gLSBTZWxlY3QKICAgICAgICBmaWxlcyB0aGF0IGNvbnRhaW4gYSBwYXJ0aWN1bGFyIHRleHQgc3RyaW5nPC9saT4KICAgICAgPGxpPjxhIGhyZWY9IiNkYXRlc2VsZWN0Ij4mbHQ7ZGF0ZSZndDs8L2E+IC0gU2VsZWN0IGZpbGVzCiAgICAgICAgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQgZWl0aGVyIGJlZm9yZSBvciBhZnRlciBhIHBhcnRpY3VsYXIgZGF0ZQogICAgICAgIGFuZCB0aW1lPC9saT4KICAgICAgPGxpPjxhIGhyZWY9IiNkZXBlbmRzZWxlY3QiPiZsdDtkZXBlbmQmZ3Q7PC9hPiAtIFNlbGVjdCBmaWxlcwogICAgICAgIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkIG1vcmUgcmVjZW50bHkgdGhhbiBlcXVpdmFsZW50IGZpbGVzCiAgICAgICAgZWxzZXdoZXJlPC9saT4KICAgICAgPGxpPjxhIGhyZWY9IiNkZXB0aHNlbGVjdCI+Jmx0O2RlcHRoJmd0OzwvYT4gLSBTZWxlY3QgZmlsZXMKICAgICAgICB0aGF0IGFwcGVhciBzbyBtYW55IGRpcmVjdG9yaWVzIGRvd24gaW4gYSBkaXJlY3RvcnkgdHJlZTwvbGk+CiAgICAgIDxsaT48YSBocmVmPSIjZGlmZmVyZW50c2VsZWN0Ij4mbHQ7ZGlmZmVyZW50Jmd0OzwvYT4gLSBTZWxlY3QgZmlsZXMKICAgICAgICB0aGF0IGFyZSBkaWZmZXJlbnQgZnJvbSB0aG9zZSBlbHNld2hlcmU8L2xpPgogICAgICA8bGk+PGEgaHJlZj0iI2ZpbGVuYW1lc2VsZWN0Ij4mbHQ7ZmlsZW5hbWUmZ3Q7PC9hPiAtIFNlbGVjdAogICAgICAgIGZpbGVzIHdob3NlIG5hbWUgbWF0Y2hlcyBhIHBhcnRpY3VsYXIgcGF0dGVybi4gRXF1aXZhbGVudCB0bwogICAgICAgIHRoZSBpbmNsdWRlIGFuZCBleGNsdWRlIGVsZW1lbnRzIG9mIGEgcGF0dGVybnNldC48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iI3ByZXNlbnRzZWxlY3QiPiZsdDtwcmVzZW50Jmd0OzwvYT4gLSBTZWxlY3QKICAgICAgICBmaWxlcyB0aGF0IGVpdGhlciBkbyBvciBkbyBub3QgZXhpc3QgaW4gc29tZSBvdGhlciBsb2NhdGlvbjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSIjcmVnZXhwc2VsZWN0Ij4mbHQ7Y29udGFpbnNyZWdleHAmZ3Q7PC9hPiAtIFNlbGVjdAogICAgICAgIGZpbGVzIHRoYXQgbWF0Y2ggYSByZWd1bGFyIGV4cHJlc3Npb248L2xpPgogICAgICA8bGk+PGEgaHJlZj0iI3NpemVzZWxlY3QiPiZsdDtzaXplJmd0OzwvYT4gLSBTZWxlY3QgZmlsZXMKICAgICAgICB0aGF0IGFyZSBsYXJnZXIgb3Igc21hbGxlciB0aGFuIGEgcGFydGljdWxhciBudW1iZXIgb2YgYnl0ZXMuPC9saT4KICAgICAgPGxpPjxhIGhyZWY9IiN0eXBlc2VsZWN0Ij4mbHQ7dHlwZSZndDs8L2E+IC0gU2VsZWN0IGZpbGVzCiAgICAgICAgdGhhdCBhcmUgZWl0aGVyIHJlZ3VsYXIgZmlsZXMgb3IgZGlyZWN0b3JpZXMuPC9saT4KICAgICAgPGxpPjxhIGhyZWY9IiNtb2RpZmllZCI+Jmx0O21vZGlmaWVkJmd0OzwvYT4gLSBTZWxlY3QgZmlsZXMgaWYKICAgICAgICB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBjb25maWd1cmVkIGFsZ29yaXRobSBpcyBkaWZmZXJlbnQgZnJvbSB0aGF0CiAgICAgICAgc3RvcmVkIGluIGEgY2FjaGUuPC9saT4KICAgIDwvdWw+CgogICAgPGEgbmFtZT0iY29udGFpbnNzZWxlY3QiPjwvYT4KICAgIDxoND5Db250YWlucyBTZWxlY3RvcjwvaDQ+CgogICAgPHA+VGhlIDxjb2RlPiZsdDtjb250YWlucyZndDs8L2NvZGU+IHRhZyBpbiBhIEZpbGVTZXQgbGltaXRzCiAgICB0aGUgZmlsZXMgZGVmaW5lZCBieSB0aGF0IGZpbGVzZXQgdG8gb25seSB0aG9zZSB3aGljaCBjb250YWluIHRoZQogICAgc3RyaW5nIHNwZWNpZmllZCBieSB0aGUgPGNvZGU+dGV4dDwvY29kZT4gYXR0cmlidXRlLgogICAgLjwvcD4KCiAgICA8dGFibGUgYm9yZGVyPSIxIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjAiPgogICAgICA8dHI+CiAgICAgICAgPHRkIHZhbGlnbj0idG9wIj48Yj5BdHRyaWJ1dGU8L2I+PC90ZD4KICAgICAgICA8dGQgdmFsaWduPSJ0b3AiPjxiPkRlc2NyaXB0aW9uPC9iPjwvdGQ+CiAgICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIj48Yj5SZXF1aXJlZDwvYj48L3RkPgogICAgICA8L3RyPgogICAgICA8dHI+CiAgICAgICAgPHRkIHZhbGlnbj0idG9wIj50ZXh0PC90ZD4KICAgICAgICA8dGQgdmFsaWduPSJ0b3AiPlNwZWNpZmllcyB0aGUgdGV4dCB0aGF0IGV2ZXJ5IGZpbGUgbXVzdCBjb250YWluCiAgICAgICAgPC90ZD4KICAgICAgICA8dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJjZW50ZXIiPlllczwvdGQ+CiAgICAgIDwvdHI+CiAgICAgIDx0cj4KICAgICAgICA8dGQgdmFsaWduPSJ0b3AiPmNhc2VzZW5zaXRpdmU8L3RkPgogICAgICAgIDx0ZCB2YWxpZ249InRvcCI+V2hldGhlciB0byBwYXkgYXR0ZW50aW9uIHRvIGNhc2Ugd2hlbiBsb29raW5nCiAgICAgICAgICBmb3IgdGhlIHN0cmluZyBpbiB0aGUgPGNvZGU+dGV4dDwvY29kZT4gYXR0cmlidXRlLiBEZWZhdWx0IGlzCiAgICAgICAgICB0cnVlLgogICAgICAgIDwvdGQ+CiAgICAgICAgPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0iY2VudGVyIj5ObzwvdGQ+CiAgICAgIDwvdHI+CiAgICAgIDx0cj4KICAgICAgICA8dGQgdmFsaWduPSJ0b3AiPmlnbm9yZXdoaXRlc3BhY2U8L3RkPgogICAgICAgIDx0ZCB2YWxpZ249InRvcCI+V2hldGhlciB0byBlbGltaW5hdGUgd2hpdGVzcGFjZSBiZWZvcmUgY2hlY2tpbmcKICAgICAgICAgIGZvciB0aGUgc3RyaW5nIGluIHRoZSA8Y29kZT50ZXh0PC9jb2RlPiBhdHRyaWJ1dGUuIERlZmF1bHQgaXMKICAgICAgICAgIGZhbHNlLgogICAgICAgIDwvdGQ+CiAgICAgICAgPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0iY2VudGVyIj5ObzwvdGQ+CiAgICAgIDwvdHI+CiAgICA8L3RhYmxlPgoKICAgIDxwPkhlcmUgaXMgYW4gZXhhbXBsZSBvZiBob3cgdG8gdXNlIHRoZSBDb250YWlucyBTZWxlY3Rvcjo8L3A+CgogICAgPGJsb2NrcXVvdGU+PHByZT4KJmx0O2ZpbGVzZXQgZGlyPSZxdW90OyR7ZG9jLnBhdGh9JnF1b3Q7IGluY2x1ZGVzPSZxdW90OyoqLyouaHRtbCZxdW90OyZndDsKICAgICZsdDtjb250YWlucyB0ZXh0PSZxdW90O3NjcmlwdCZxdW90OyBjYXNlc2Vuc2l0aXZlPSZxdW90O25vJnF1b3Q7LyZndDsKJmx0Oy9maWxlc2V0Jmd0Owo8L3ByZT48L2Jsb2NrcXVvdGU+CgogICAgPHA+U2VsZWN0cyBhbGwgdGhlIEhUTUwgZmlsZXMgdGhhdCBjb250YWluIHRoZSBzdHJpbmcKICAgIDxjb2RlPnNjcmlwdDwvY29kZT4uPC9wPgoKCiAgICA8YSBuYW1lPSJkYXRlc2VsZWN0Ij48L2E+CiAgICA8aDQ+RGF0ZSBTZWxlY3RvcjwvaDQ+CgogICAgPHA+VGhlIDxjb2RlPiZsdDtkYXRlJmd0OzwvY29kZT4gdGFnIGluIGEgRmlsZVNldCB3aWxsIHB1dAogICAgYSBsaW1pdCBvbiB0aGUgZmlsZXMgc3BlY2lmaWVkIGJ5IHRoZSBpbmNsdWRlIHRhZywgc28gdGhhdCB0YWdzCiAgICB3aG9zZSBsYXN0IG1vZGlmaWVkIGRhdGUgZG9lcyBub3QgbWVldCB0aGUgZGF0ZSBsaW1pdHMgc3BlY2lmaWVkCiAgICBieSB0aGUgc2VsZWN0b3Igd2lsbCBub3QgZW5kIHVwIGJlaW5nIHNlbGVjdGVkLjwvcD4KCiAgICA8dGFibGUgYm9yZGVyPSIxIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjAiPgogICAgICA8dHI+CiAgICAgICAgPHRkIHZhbGlnbj0idG9wIj48Yj5BdHRyaWJ1dGU8L2I+PC90ZD4KICAgICAgICA8dGQgdmFsaWduPSJ0b3AiPjxiPkRlc2NyaXB0aW9uPC9iPjwvdGQ+CiAgICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIj48Yj5SZXF1aXJlZDwvYj48L3RkPgogICAgICA8L3RyPgogICAgICA8dHI+CiAgICAgICAgPHRkIHZhbGlnbj0idG9wIj5kYXRldGltZTwvdGQ+CiAgICAgICAgPHRkIHZhbGlnbj0idG9wIj5TcGVjaWZpZXMgdGhlIGRhdGUgYW5kIHRpbWUgdG8gdGVzdCBmb3IgdXNpbmcKICAgICAgICAgIGEgc3RyaW5nIG9mIHRoZSBmb3JtYXQgTU0vREQvWVlZWSBISDpNTSBBTV9vcl9QTS4KICAgICAgICA8L3RkPgogICAgICAgIDx0ZCB2YWxpZ249InRvcCIgYWxpZ249ImNlbnRlciIgcm93c3Bhbj0iMiI+QXQgbGVhc3Qgb25lIG9mIHRoZSB0d28uPC90ZD4KICAgICAgPC90cj4KICAgICAgPHRyPgogICAgICAgIDx0ZCB2YWxpZ249InRvcCI+bWlsbGlzPC90ZD4KICAgICAgICA8dGQgdmFsaWduPSJ0b3AiPlRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlIDE5NzAgdGhhdCBzaG91bGQKICAgICAgICAgIGJlIHRlc3RlZCBmb3IuIEl0IGlzIHVzdWFsbHkgbXVjaCBlYXNpZXIgdG8gdXNlIHRoZSBkYXRldGltZQogICAgICAgICAgYXR0cmlidXRlLgogICAgICAgIDwvdGQ+CiAgICAgIDwvdHI+CiAgICAgIDx0cj4KICAgICAgICA8dGQgdmFsaWduPSJ0b3AiPndoZW48L3RkPgogICAgICAgIDx0ZCB2YWxpZ249InRvcCI+SW5kaWNhdGVzIGhvdyB0byBpbnRlcnByZXQgdGhlIGRhdGUsIHdoZXRoZXIKICAgICAgICAgIHRoZSBmaWxlcyB0byBiZSBzZWxlY3RlZCBhcmUgdGhvc2Ugd2hvc2UgbGFzdCBtb2RpZmllZCB0aW1lcyBzaG91bGQKICAgICAgICAgIGJlIGJlZm9yZSwgYWZ0ZXIsIG9yIGVxdWFsIHRvIHRoZSBzcGVjaWZpZWQgdmFsdWUuIEFjY2VwdGFibGUKICAgICAgICAgIHZhbHVlcyBmb3IgdGhpcyBhdHRyaWJ1dGUgYXJlOgogICAgICAgICAgPHVsPgogICAgICAgICAgICA8bGk+YmVmb3JlIC0gc2VsZWN0IGZpbGVzIHdob3NlIGxhc3QgbW9kaWZpZWQgZGF0ZSBpcyBiZWZvcmUgdGhlIGluZGljYXRlZCBkYXRlCiAgICAgICAgICAgIDxsaT5hZnRlciAtIHNlbGVjdCBmaWxlcyB3aG9zZSBsYXN0IG1vZGlmaWVkIGRhdGUgaXMgYWZ0ZXIgdGhlIGluZGljYXRlZCBkYXRlCiAgICAgICAgICAgIDxsaT5lcXVhbCAtIHNlbGVjdCBmaWxlcyAgd2hvc2UgbGFzdCBtb2RpZmllZCBkYXRlIGlzIHRoaXMgZXhhY3QgZGF0ZQogICAgICAgICAgPC91bD4KICAgICAgICAgIFRoZSBkZWZhdWx0IGlzIGVxdWFsLgogICAgICAgIDx0ZCB2YWxpZ249InRvcCIgYWxpZ249ImNlbnRlciI+Tm88L3RkPgogICAgICA8L3RyPgogICAgPC90YWJsZT4KCiAgICA8cD5IZXJlIGlzIGFuIGV4YW1wbGUgb2YgaG93IHRvIHVzZSB0aGUgRGF0ZSBTZWxlY3Rvcjo8L3A+CgogICAgPGJsb2NrcXVvdGU+PHByZT4KJmx0O2ZpbGVzZXQgZGlyPSZxdW90OyR7amFyLnBhdGh9JnF1b3Q7IGluY2x1ZGVzPSZxdW90OyoqLyouamFyJnF1b3Q7Jmd0OwogICAgJmx0O2RhdGUgZGF0ZXRpbWU9JnF1b3Q7MDEvMDEvMjAwMSAxMjowMCBBTSZxdW90OyB3aGVuPSZxdW90O2JlZm9yZSZxdW90Oy8mZ3Q7CiZsdDsvZmlsZXNldCZndDsKPC9wcmU+PC9ibG9ja3F1b3RlPgoKICAgIDxwPlNlbGVjdHMgYWxsIEpBUiBmaWxlcyB3aGljaCB3ZXJlIGxhc3QgbW9kaWZpZWQgYmVmb3JlIG1pZG5pZ2h0CiAgICBKYW51YXJ5IDEsIDIwMDEuPC9wPgoKCiAgICA8YSBuYW1lPSJkZXBlbmRzZWxlY3QiPjwvYT4KICAgIDxoND5EZXBlbmQgU2VsZWN0b3I8L2g0PgoKICAgIDxwPlRoZSA8Y29kZT4mbHQ7ZGVwZW5kJmd0OzwvY29kZT4gdGFnIHNlbGVjdHMgZmlsZXMKICAgIHdob3NlIGxhc3QgbW9kaWZpZWQgZGF0ZSBpcyBsYXRlciB0aGFuIGFub3RoZXIsIGVxdWl2YWxlbnQgZmlsZSBpbgogICAgYW5vdGhlciBsb2NhdGlvbi48L3A+CgogICAgPHA+VGhlIDxjb2RlPiZsdDtkZXBlbmQmZ3Q7PC9jb2RlPiB0YWcgc3VwcG9ydHMgdGhlIHVzZSBvZiBhCiAgICBjb250YWluZWQgPGEgaHJlZj0ibWFwcGVyLmh0bWwiPjxjb2RlPiZsdDttYXBwZXImZ3Q7PC9jb2RlPjwvYT4gZWxlbWVudAogICAgdG8gZGVmaW5lIHRoZSBsb2NhdGlvbiBvZiB0aGUgZmlsZSB0byBiZSBjb21wYXJlZCBhZ2FpbnN0LiBJZiBubwogICAgPGNvZGU+Jmx0O21hcHBlciZndDs8L2NvZGU+IGVsZW1lbnQgaXMgc3BlY2lmaWVkLCB0aGUKICAgIDxjb2RlPmlkZW50aXR5PC9jb2RlPiB0eXBlIG1hcHBlciBpcyB1c2VkLjwvcD4KCiAgICA8cD5UaGUgPGNvZGU+Jmx0O2RlcGVuZCZndDs8L2NvZGU+IHNlbGVjdG9yIGlzIGNhc2Utc2Vuc2l0aXZlLjwvcD4KCiAgICA8dGFibGUgYm9yZGVyPSIxIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjAiPgogICAgICA8dHI+CiAgICAgICAgPHRkIHZhbGlnbj0idG9wIj48Yj5BdHRyaWJ1dGU8L2I+PC90ZD4KICAgICAgICA8dGQgdmFsaWduPSJ0b3AiPjxiPkRlc2NyaXB0aW9uPC9iPjwvdGQ+CiAgICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIj48Yj5SZXF1aXJlZDwvYj48L3RkPgogICAgICA8L3RyPgogICAgICA8dHI+CiAgICAgICAgPHRkIHZhbGlnbj0idG9wIj50YXJnZXRkaXI8L3RkPgogICAgICAgIDx0ZCB2YWxpZ249InRvcCI+VGhlIGJhc2UgZGlyZWN0b3J5IHRvIGxvb2sgZm9yIHRoZSBmaWxlcyB0byBjb21wYXJlCiAgICAgICAgICBhZ2FpbnN0LiBUaGUgcHJlY2lzZSBsb2NhdGlvbiBkZXBlbmRzIG9uIGEgY29tYmluYXRpb24gb2YgdGhpcwogICAgICAgICAgYXR0cmlidXRlIGFuZCB0aGUgPGNvZGU+Jmx0O21hcHBlciZndDs8L2NvZGU+IGVsZW1lbnQsIGlmIGFueS4KICAgICAgICA8L3RkPgogICAgICAgIDx0ZCB2YWxpZ249InRvcCIgYWxpZ249ImNlbnRlciI+WWVzPC90ZD4KICAgICAgPC90cj4KICAgICAgPHRyPgogICAgICAgIDx0ZCB2YWxpZ249InRvcCI+Z3JhbnVsYXJpdHk8L3RkPgogICAgICAgIDx0ZCB2YWxpZ249InRvcCI+VGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgbGVld2F5IHRvIGdpdmUgYmVmb3JlCiAgICAgICAgICBkZWNpZGluZyBhIGZpbGUgaXMgb3V0IG9mIGRhdGUuIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2Ugbm90IGV2ZXJ5CiAgICAgICAgICBmaWxlIHN5c3RlbSBzdXBwb3J0cyB0cmFja2luZyB0aGUgbGFzdCBtb2RpZmllZCB0aW1lIHRvIHRoZQogICAgICAgICAgbWlsbGlzZWNvbmQgbGV2ZWwuIERlZmF1bHQgaXMgMCBtaWxsaXNlY29uZHMsIG9yIDIgc2Vjb25kcyBvbiBET1Mgc3lzdGVtcy4KICAgICAgICA8L3RkPgogICAgICAgIDx0ZCB2YWxpZ249InRvcCIgYWxpZ249ImNlbnRlciI+Tm88L3RkPgogICAgICA8L3RyPgogICAgPC90YWJsZT4KCiAgICA8cD5IZXJlIGlzIGFuIGV4YW1wbGUgb2YgaG93IHRvIHVzZSB0aGUgRGVwZW5kIFNlbGVjdG9yOjwvcD4KCiAgICA8YmxvY2txdW90ZT48cHJlPgombHQ7ZmlsZXNldCBkaXI9JnF1b3Q7JHthbnQuMS41fS9zcmMvbWFpbiZxdW90OyBpbmNsdWRlcz0mcXVvdDsqKi8qLmphdmEmcXVvdDsmZ3Q7CiAgICAmbHQ7ZGVwZW5kIHRhcmdldGRpcj0mcXVvdDske2FudC4xLjQuMX0vc3JjL21haW4mcXVvdDsvJmd0OwombHQ7L2ZpbGVzZXQmZ3Q7CjwvcHJlPjwvYmxvY2txdW90ZT4KCiAgICA8cD5TZWxlY3RzIGFsbCB0aGUgSmF2YSBzb3VyY2UgZmlsZXMgd2hpY2ggd2VyZSBtb2RpZmllZCBpbiB0aGUKICAgICAgMS41IHJlbGVhc2UuCiAgICA8L3A+CgoKICAgIDxhIG5hbWU9ImRlcHRoc2VsZWN0Ij48L2E+CiAgICA8aDQ+RGVwdGggU2VsZWN0b3I8L2g0PgoKICAgIDxwPlRoZSA8Y29kZT4mbHQ7ZGVwdGgmZ3Q7PC9jb2RlPiB0YWcgc2VsZWN0cyBmaWxlcyBiYXNlZCBvbgogICAgaG93IG1hbnkgZGlyZWN0eSBsZXZlbHMgZGVlcCB0aGV5IGFyZSBpbiByZWxhdGlvbiB0byB0aGUgYmFzZQogICAgZGlyZWN0b3J5IG9mIHRoZSBmaWxlc2V0LgogICAgPC9wPgoKICAgIDx0YWJsZSBib3JkZXI9IjEiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMCI+CiAgICAgIDx0cj4KICAgICAgICA8dGQgdmFsaWduPSJ0b3AiPjxiPkF0dHJpYnV0ZTwvYj48L3RkPgogICAgICAgIDx0ZCB2YWxpZ249InRvcCI+PGI+RGVzY3JpcHRpb248L2I+PC90ZD4KICAgICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiPjxiPlJlcXVpcmVkPC9iPjwvdGQ+CiAgICAgIDwvdHI+CiAgICAgIDx0cj4KICAgICAgICA8dGQgdmFsaWduPSJ0b3AiPm1pbjwvdGQ+CiAgICAgICAgPHRkIHZhbGlnbj0idG9wIj5UaGUgbWluaW11bSBudW1iZXIgb2YgZGlyZWN0b3J5IGxldmVscyBiZWxvdwogICAgICAgICAgdGhlIGJhc2UgZGlyZWN0b3J5IHRoYXQgYSBmaWxlIG11c3QgYmUgaW4gb3JkZXIgdG8gYmUgc2VsZWN0ZWQuCiAgICAgICAgICBEZWZhdWx0IGlzIG5vIGxpbWl0LgogICAgICAgIDwvdGQ+CiAgICAgICAgPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0iY2VudGVyIiByb3dzcGFuPSIyIj5BdCBsZWFzdCBvbmUgb2YgdGhlIHR3by48L3RkPgogICAgICA8L3RyPgogICAgICA8dHI+CiAgICAgICAgPHRkIHZhbGlnbj0idG9wIj5tYXg8L3RkPgogICAgICAgIDx0ZCB2YWxpZ249InRvcCI+VGhlIG1heGltdW0gbnVtYmVyIG9mIGRpcmVjdG9yeSBsZXZlbHMgYmVsb3cKICAgICAgICAgIHRoZSBiYXNlIGRpcmVjdG9yeSB0aGF0IGEgZmlsZSBjYW4gYmUgYW5kIHN0aWxsIGJlIHNlbGVjdGVkLgogICAgICAgICAgRGVmYXVsdCBpcyBubyBsaW1pdC4KICAgICAgICA8L3RkPgogICAgICA8L3RyPgogICAgPC90YWJsZT4KCiAgICA8cD5IZXJlIGlzIGFuIGV4YW1wbGUgb2YgaG93IHRvIHVzZSB0aGUgRGVwdGggU2VsZWN0b3I6PC9wPgoKICAgIDxibG9ja3F1b3RlPjxwcmU+CiZsdDtmaWxlc2V0IGRpcj0mcXVvdDske2RvYy5wYXRofSZxdW90OyBpbmNsdWRlcz0mcXVvdDsqKi8qJnF1b3Q7Jmd0OwogICAgJmx0O2RlcHRoIG1heD0mcXVvdDsxJnF1b3Q7LyZndDsKJmx0Oy9maWxlc2V0Jmd0Owo8L3ByZT48L2Jsb2NrcXVvdGU+CgogICAgPHA+U2VsZWN0cyBhbGwgZmlsZXMgaW4gdGhlIGJhc2UgZGlyZWN0b3J5IGFuZCBvbmUgZGlyZWN0b3J5IGJlbG93CiAgICB0aGF0LjwvcD4KCiAgICA8YSBuYW1lPSJkaWZmZXJlbnRzZWxlY3QiPgogICAgPGg0PkRpZmZlcmVudCBTZWxlY3RvcjwvaDQ+CgogICAgPHA+VGhlIDxjb2RlPiZsdDtkaWZmZXJlbnQmZ3Q7PC9jb2RlPiB0YWcgc2VsZWN0cyBmaWxlcwogICAgd2hvIGFyZSBkZWVtZWQgdG8gYmUgJ2RpZmZlcmVudCcgZnJvbSBhbm90aGVyLCBlcXVpdmFsZW50IGZpbGUgaW4KICAgIGFub3RoZXIgbG9jYXRpb24uIFRoZSBydWxlcyBmb3IgZGV0ZXJtaW5pbmcgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3bwogICAgZmlsZXMgYXJlIGFzIGZvbGxvd3M6CiAgICA8b2w+CiAgICA8bGk+IElmIHRoZXJlIGlzIG5vICdvdGhlcicgZmlsZSwgaXQncyBkaWZmZXJlbnQuCiAgICA8bGk+IEZpbGVzIHdpdGggZGlmZmVyZW50IGxlbmd0aHMgYXJlIGRpZmZlcmVudC4KICAgIDxsaT4gSWYgPHR0Pmlnbm9yZUZpbGVUaW1lczwvdHQ+IGlzIHR1cm5lZCBvZmYsIHRoZW4gZGlmZmVyaW5nIGZpbGUKICAgIHRpbWVzdGFtcHMgd2lsbCBjYXVzZSBmaWxlcyB0byBiZSByZWdhcmRlZCBhcyBkaWZmZXJlbnQuCiAgICA8bGk+IEZpbmFsbHkgYSBieXRlLWZvci1ieXRlIGNoZWNrIGlzIHJ1biBhZ2FpbnN0IHRoZSB0d28gZmlsZXMKICAgIDwvb2w+CgogICAgVGhpcyBpcyBhIHVzZWZ1bCBzZWxlY3RvciB0byB3b3JrIHdpdGggcHJvZ3JhbXMgYW5kIHRhc2tzIHRoYXQgZG9uJ3QgaGFuZGxlCiAgICBkZXBlbmRlbmN5IGNoZWNraW5nIHByb3Blcmx5OyBFdmVuIGlmIGEgcHJlZGVjZXNzb3IgdGFzayBhbHdheXMgY3JlYXRlcyBpdHMKICAgIG91dHB1dCBmaWxlcywgZm9sbG93dXAgdGFza3MgY2FuIGJlIGRyaXZlbiBvZmYgY29waWVzIG1hZGUgd2l0aCBhIGRpZmZlcmVudCBzZWxlY3RvciwKICAgIHNvIHRoZWlyIGRlcGVuZGVuY2llcyBhcmUgZHJpdmVuIG9uIHRoZSBhYnNvbHV0ZSBzdGF0ZSBvZiB0aGUgZmlsZXMsIG5vdCBqdXN0CiAgICBhIHRpbWVzdGFtcC4gRm9yIGV4YW1wbGU6IGFueXRoaW5nIGZldGNoZWQgZnJvbSBhIHdlYiBzaXRlLCBvciB0aGUgb3V0cHV0IG9mCiAgICBzb21lIHByb2dyYW0uIFRvIHJlZHVjZSB0aGUgYW1vdW50IG9mIGNoZWNraW5nLCB3aGVuIHVzaW5nIHRoaXMgdGFzayBpbnNpZGUKICAgIGEgJmx0O2NvcHkmZ3Q7IHRhc2ssIHNldCB0aGUgPHR0PnByZXNlcnZlbGFzdG1vZGlmaWVkPC90dD4gdG8gcHJvcGFnYXRlIHRoZSB0aW1lc3RhbXAKICAgIGZyb20gc291cmNlIGZpbGUgdG8gZGVzdGludGFpb24gZmlsZS4KCgogICAgPHA+CgogICAgVGhlIDxjb2RlPiZsdDtkaWZmZXJlbnQmZ3Q7PC9jb2RlPiB0YWcgc3VwcG9ydHMgdGhlIHVzZSBvZiBhCiAgICBjb250YWluZWQgPGEgaHJlZj0ibWFwcGVyLmh0bWwiPjxjb2RlPiZsdDttYXBwZXImZ3Q7PC9jb2RlPjwvYT4gZWxlbWVudAogICAgdG8gZGVmaW5lIHRoZSBsb2NhdGlvbiBvZiB0aGUgZmlsZSB0byBiZSBjb21wYXJlZCBhZ2FpbnN0LiBJZiBubwogICAgPGNvZGU+Jmx0O21hcHBlciZndDs8L2NvZGU+IGVsZW1lbnQgaXMgc3BlY2lmaWVkLCB0aGUKICAgIDxjb2RlPmlkZW50aXR5PC9jb2RlPiB0eXBlIG1hcHBlciBpcyB1c2VkLjwvcD4KCiAgICA8dGFibGUgYm9yZGVyPSIxIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjAiPgogICAgICA8dHI+CiAgICAgICAgPHRkIHZhbGlnbj0idG9wIj48Yj5BdHRyaWJ1dGU8L2I+PC90ZD4KICAgICAgICA8dGQgdmFsaWduPSJ0b3AiPjxiPkRlc2NyaXB0aW9uPC9iPjwvdGQ+CiAgICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIj48Yj5SZXF1aXJlZDwvYj48L3RkPgogICAgICA8L3RyPgogICAgICA8dHI+CiAgICAgICAgPHRkIHZhbGlnbj0idG9wIj50YXJnZXRkaXI8L3RkPgogICAgICAgIDx0ZCB2YWxpZ249InRvcCI+VGhlIGJhc2UgZGlyZWN0b3J5IHRvIGxvb2sgZm9yIHRoZSBmaWxlcyB0byBjb21wYXJlCiAgICAgICAgICBhZ2FpbnN0LiBUaGUgcHJlY2lzZSBsb2NhdGlvbiBkZXBlbmRzIG9uIGEgY29tYmluYXRpb24gb2YgdGhpcwogICAgICAgICAgYXR0cmlidXRlIGFuZCB0aGUgPGNvZGU+Jmx0O21hcHBlciZndDs8L2NvZGU+IGVsZW1lbnQsIGlmIGFueS4KICAgICAgICA8L3RkPgogICAgICAgIDx0ZCB2YWxpZ249InRvcCIgYWxpZ249ImNlbnRlciI+WWVzPC90ZD4KICAgICAgPC90cj4KICAgICAgPHRyPgogICAgICAgIDx0ZCB2YWxpZ249InRvcCI+aWdub3JlRmlsZVRpbWVzPC90ZD4KICAgICAgICA8dGQgdmFsaWduPSJ0b3AiPldoZXRoZXIgdG8gdXNlIGZpbGUgdGltZXMgaW4gdGhlIGNvbXBhcmlzb24gb3Igbm90LgogICAgICAgICAgRGVmYXVsdCBpcyB0cnVlICh0aW1lIGRpZmZlcmVuY2VzIGFyZSBpZ25vcmVkKS4KICAgICAgICA8L3RkPgogICAgICAgIDx0ZCB2YWxpZ249InRvcCIgYWxpZ249ImNlbnRlciI+Tm88L3RkPgogICAgICA8L3RyPgogICAgICA8dHI+CiAgICAgICAgPHRkIHZhbGlnbj0idG9wIj5ncmFudWxhcml0eTwvdGQ+CiAgICAgICAgPHRkIHZhbGlnbj0idG9wIj5UaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBsZWV3YXkgdG8gZ2l2ZSBiZWZvcmUKICAgICAgICAgIGRlY2lkaW5nIGEgZmlsZSBpcyBvdXQgb2YgZGF0ZS4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBub3QgZXZlcnkKICAgICAgICAgIGZpbGUgc3lzdGVtIHN1cHBvcnRzIHRyYWNraW5nIHRoZSBsYXN0IG1vZGlmaWVkIHRpbWUgdG8gdGhlCiAgICAgICAgICBtaWxsaXNlY29uZCBsZXZlbC4gRGVmYXVsdCBpcyAwIG1pbGxpc2Vjb25kcywgb3IgMiBzZWNvbmRzIG9uIERPUyBzeXN0ZW1zLgogICAgICAgIDwvdGQ+CiAgICAgICAgPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0iY2VudGVyIj5ObzwvdGQ+CiAgICAgIDwvdHI+CiAgICA8L3RhYmxlPgoKICAgIDxwPkhlcmUgaXMgYW4gZXhhbXBsZSBvZiBob3cgdG8gdXNlIHRoZSBEaWZmZXJlbnQgU2VsZWN0b3I6PC9wPgoKICAgIDxibG9ja3F1b3RlPjxwcmU+CiZsdDtmaWxlc2V0IGRpcj0mcXVvdDske2FudC4xLjV9L3NyYy9tYWluJnF1b3Q7IGluY2x1ZGVzPSZxdW90OyoqLyouamF2YSZxdW90OyZndDsKICAgICZsdDtkaWZmZXJlbnQgdGFyZ2V0ZGlyPSZxdW90OyR7YW50LjEuNC4xfS9zcmMvbWFpbiZxdW90OwogICAgICAgIGlnbm9yZUZpbGVUaW1lcz0idHJ1ZSIvJmd0OwombHQ7L2ZpbGVzZXQmZ3Q7CjwvcHJlPjwvYmxvY2txdW90ZT4KCiAgICA8cD5Db21wYXJlcyBhbGwgdGhlIEphdmEgc291cmNlIGZpbGVzIGJldHdlZW4gdGhlIDEuNC4xIGFuZCB0aGUgMS41IHJlbGVhc2UKICAgIGFuZCBzZWxlY3RzIHRob3NlIHdobyBhcmUgZGlmZmVyZW50LCBkaXNyZWdhcmRpbmcgZmlsZSB0aW1lcy4KICAgIDwvcD4KCiAgICA8YSBuYW1lPSJmaWxlbmFtZXNlbGVjdCI+PC9hPgogICAgPGg0PkZpbGVuYW1lIFNlbGVjdG9yPC9oND4KCiAgICA8cD5UaGUgPGNvZGU+Jmx0O2ZpbGVuYW1lJmd0OzwvY29kZT4gdGFnIGFjdHMgbGlrZSB0aGUKICAgIDxjb2RlPiZsdDtpbmNsdWRlJmd0OzwvY29kZT4gYW5kIDxjb2RlPiZsdDtleGNsdWRlJmd0OzwvY29kZT4KICAgIHRhZ3Mgd2l0aGluIGEgZmlsZXNldC4gQnkgdXNpbmcgYSBzZWxlY3RvciBpbnN0ZWFkLCBob3dldmVyLAogICAgb25lIGNhbiBjb21iaW5lIGl0IHdpdGggYWxsIHRoZSBvdGhlciBzZWxlY3RvcnMgdXNpbmcgd2hhdGV2ZXIKICAgIDxhIGhyZWY9IiNzZWxlY3Rjb250YWluZXJzIj5zZWxlY3RvciBjb250YWluZXI8L2E+IGlzIGRlc2lyZWQuCiAgICA8L3A+CgogICAgPHA+VGhlIDxjb2RlPiZsdDtmaWxlbmFtZSZndDs8L2NvZGU+IHNlbGVjdG9yIGlzCiAgICBjYXNlLXNlbnNpdGl2ZS48L3A+CgogICAgPHRhYmxlIGJvcmRlcj0iMSIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIwIj4KICAgICAgPHRyPgogICAgICAgIDx0ZCB2YWxpZ249InRvcCI+PGI+QXR0cmlidXRlPC9iPjwvdGQ+CiAgICAgICAgPHRkIHZhbGlnbj0idG9wIj48Yj5EZXNjcmlwdGlvbjwvYj48L3RkPgogICAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCI+PGI+UmVxdWlyZWQ8L2I+PC90ZD4KICAgICAgPC90cj4KICAgICAgPHRyPgogICAgICAgIDx0ZCB2YWxpZ249InRvcCI+bmFtZTwvdGQ+CiAgICAgICAgPHRkIHZhbGlnbj0idG9wIj5UaGUgbmFtZSBvZiBmaWxlcyB0byBzZWxlY3QuIFRoZSBuYW1lIHBhcmFtZXRlcgogICAgICAgICAgY2FuIGNvbnRhaW4gdGhlIHN0YW5kYXJkIEFudCB3aWxkY2FyZCBjaGFyYWN0ZXJzLgogICAgICAgIDwvdGQ+CiAgICAgICAgPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0iY2VudGVyIj5ZZXM8L3RkPgogICAgICA8L3RyPgogICAgICA8dHI+CiAgICAgICAgPHRkIHZhbGlnbj0idG9wIj5jYXNlc2Vuc2l0aXZlPC90ZD4KICAgICAgICA8dGQgdmFsaWduPSJ0b3AiPldoZXRoZXIgdG8gcGF5IGF0dGVudGlvbiB0byBjYXNlIHdoZW4gbG9va2luZwogICAgICAgICAgYXQgZmlsZSBuYW1lcy4gRGVmYXVsdCBpcyAidHJ1ZSIuCiAgICAgICAgPC90ZD4KICAgICAgICA8dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJjZW50ZXIiPk5vPC90ZD4KICAgICAgPC90cj4KICAgICAgPHRyPgogICAgICAgIDx0ZCB2YWxpZ249InRvcCI+bmVnYXRlPC90ZD4KICAgICAgICA8dGQgdmFsaWduPSJ0b3AiPldoZXRoZXIgdG8gcmV2ZXJzZSB0aGUgZWZmZWN0cyBvZiB0aGlzIGZpbGVuYW1lCiAgICAgICAgICBzZWxlY3Rpb24sIHRoZXJlZm9yZSBlbXVsYXRpbmcgYW4gZXhjbHVkZSByYXRoZXIgdGhhbiBpbmNsdWRlCiAgICAgICAgICB0YWcuIERlZmF1bHQgaXMgImZhbHNlIi4KICAgICAgICA8L3RkPgogICAgICAgIDx0ZCB2YWxpZ249InRvcCIgYWxpZ249ImNlbnRlciI+Tm88L3RkPgogICAgICA8L3RyPgogICAgPC90YWJsZT4KCiAgICA8cD5IZXJlIGlzIGFuIGV4YW1wbGUgb2YgaG93IHRvIHVzZSB0aGUgRmlsZW5hbWUgU2VsZWN0b3I6PC9wPgoKICAgIDxibG9ja3F1b3RlPjxwcmU+CiZsdDtmaWxlc2V0IGRpcj0mcXVvdDske2RvYy5wYXRofSZxdW90OyBpbmNsdWRlcz0mcXVvdDsqKi8qJnF1b3Q7Jmd0OwogICAgJmx0O2ZpbGVuYW1lIG5hbWU9JnF1b3Q7KiovKi5jc3MmcXVvdDsvJmd0OwombHQ7L2ZpbGVzZXQmZ3Q7CjwvcHJlPjwvYmxvY2txdW90ZT4KCiAgICA8cD5TZWxlY3RzIGFsbCB0aGUgY2FzY2FkaW5nIHN0eWxlIHNoZWV0IGZpbGVzLjwvcD4KCgogICAgPGEgbmFtZT0icHJlc2VudHNlbGVjdCI+PC9hPgogICAgPGg0PlByZXNlbnQgU2VsZWN0b3I8L2g0PgoKICAgIDxwPlRoZSA8Y29kZT4mbHQ7cHJlc2VudCZndDs8L2NvZGU+IHRhZyBzZWxlY3RzIGZpbGVzCiAgICB0aGF0IGhhdmUgYW4gZXF1aXZhbGVudCBmaWxlIGluIGFub3RoZXIgZGlyZWN0b3J5IHRyZWUuPC9wPgoKICAgIDxwPlRoZSA8Y29kZT4mbHQ7cHJlc2VudCZndDs8L2NvZGU+IHRhZyBzdXBwb3J0cyB0aGUgdXNlIG9mIGEKICAgIGNvbnRhaW5lZCA8YSBocmVmPSJtYXBwZXIuaHRtbCI+PGNvZGU+Jmx0O21hcHBlciZndDs8L2NvZGU+PC9hPiBlbGVtZW50CiAgICB0byBkZWZpbmUgdGhlIGxvY2F0aW9uIG9mIHRoZSBmaWxlIHRvIGJlIHRlc3RlZCBhZ2FpbnN0LiBJZiBubwogICAgPGNvZGU+Jmx0O21hcHBlciZndDs8L2NvZGU+IGVsZW1lbnQgaXMgc3BlY2lmaWVkLCB0aGUKICAgIDxjb2RlPmlkZW50aXR5PC9jb2RlPiB0eXBlIG1hcHBlciBpcyB1c2VkLjwvcD4KCiAgICA8cD5UaGUgPGNvZGU+Jmx0O3ByZXNlbnQmZ3Q7PC9jb2RlPiBzZWxlY3RvciBpcyBjYXNlLXNlbnNpdGl2ZS48L3A+CgogICAgPHRhYmxlIGJvcmRlcj0iMSIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIwIj4KICAgICAgPHRyPgogICAgICAgIDx0ZCB2YWxpZ249InRvcCI+PGI+QXR0cmlidXRlPC9iPjwvdGQ+CiAgICAgICAgPHRkIHZhbGlnbj0idG9wIj48Yj5EZXNjcmlwdGlvbjwvYj48L3RkPgogICAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCI+PGI+UmVxdWlyZWQ8L2I+PC90ZD4KICAgICAgPC90cj4KICAgICAgPHRyPgogICAgICAgIDx0ZCB2YWxpZ249InRvcCI+dGFyZ2V0ZGlyPC90ZD4KICAgICAgICA8dGQgdmFsaWduPSJ0b3AiPlRoZSBiYXNlIGRpcmVjdG9yeSB0byBsb29rIGZvciB0aGUgZmlsZXMgdG8gY29tcGFyZQogICAgICAgICAgYWdhaW5zdC4gVGhlIHByZWNpc2UgbG9jYXRpb24gZGVwZW5kcyBvbiBhIGNvbWJpbmF0aW9uIG9mIHRoaXMKICAgICAgICAgIGF0dHJpYnV0ZSBhbmQgdGhlIDxjb2RlPiZsdDttYXBwZXImZ3Q7PC9jb2RlPiBlbGVtZW50LCBpZiBhbnkuCiAgICAgICAgPC90ZD4KICAgICAgICA8dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJjZW50ZXIiPlllczwvdGQ+CiAgICAgIDwvdHI+CiAgICAgIDx0cj4KICAgICAgICA8dGQgdmFsaWduPSJ0b3AiPnByZXNlbnQ8L3RkPgogICAgICAgIDx0ZCB2YWxpZ249InRvcCI+V2hldGhlciB3ZSBhcmUgcmVxdWlyaW5nIHRoYXQgYSBmaWxlIGlzIHByZXNlbnQgaW4KICAgICAgICAgIHRoZSBzcmMgZGlyZWN0b3J5IHRyZWUgb25seSwgb3IgaW4gYm90aCB0aGUgc3JjIGFuZCB0aGUgdGFyZ2V0CiAgICAgICAgICBkaXJlY3RvcnkgdHJlZS4gVmFsaWQgdmFsdWVzIGFyZToKICAgICAgICAgIDx1bD4KICAgICAgICAgICAgPGxpPnNyY29ubHkgLSBzZWxlY3QgZmlsZXMgb25seSBpZiB0aGV5IGFyZSBpbiB0aGUgc3JjCiAgICAgICAgICAgICAgZGlyZWN0b3J5IHRyZWUgYnV0IG5vdCBpbiB0aGUgdGFyZ2V0IGRpcmVjdG9yeSB0cmVlCiAgICAgICAgICAgIDxsaT5ib3RoIC0gc2VsZWN0IGZpbGVzIG9ubHkgaWYgdGhleSBhcmUgcHJlc2VudCBib3RoIGluIHRoZQogICAgICAgICAgICAgIHNyYyBhbmQgdGFyZ2V0IGRpcmVjdG9yeSB0cmVlcwogICAgICAgICAgPC91bD4KICAgICAgICAgIERlZmF1bHQgaXMgYm90aC4gU2V0dGluZyB0aGlzIGF0dHJpYnV0ZSB0byAmcXVvdDtzcmNvbmx5JnF1b3Q7CiAgICAgICAgICBpcyBlcXVpdmFsZW50IHRvIHdyYXBwaW5nIHRoZSBzZWxlY3RvciBpbiB0aGUgJmx0O25vdCZndDsKICAgICAgICAgIHNlbGVjdG9yIGNvbnRhaW5lci4KICAgICAgICA8L3RkPgogICAgICAgIDx0ZCB2YWxpZ249InRvcCIgYWxpZ249ImNlbnRlciI+Tm88L3RkPgogICAgICA8L3RyPgogICAgPC90YWJsZT4KCiAgICA8cD5IZXJlIGlzIGFuIGV4YW1wbGUgb2YgaG93IHRvIHVzZSB0aGUgUHJlc2VudCBTZWxlY3Rvcjo8L3A+CgogICAgPGJsb2NrcXVvdGU+PHByZT4KJmx0O2ZpbGVzZXQgZGlyPSZxdW90OyR7YW50LjEuNX0vc3JjL21haW4mcXVvdDsgaW5jbHVkZXM9JnF1b3Q7KiovKi5qYXZhJnF1b3Q7Jmd0OwogICAgJmx0O3ByZXNlbnQgcHJlc2VudD0mcXVvdDtzcmNvbmx5JnF1b3Q7IHRhcmdldGRpcj0mcXVvdDske2FudC4xLjQuMX0vc3JjL21haW4mcXVvdDsvJmd0OwombHQ7L2ZpbGVzZXQmZ3Q7CjwvcHJlPjwvYmxvY2txdW90ZT4KCiAgICA8cD5TZWxlY3RzIGFsbCB0aGUgSmF2YSBzb3VyY2UgZmlsZXMgd2hpY2ggYXJlIG5ldyBpbiB0aGUKICAgICAgMS41IHJlbGVhc2UuCiAgICA8L3A+CgogICAgPGEgbmFtZT0icmVnZXhwc2VsZWN0Ij48L2E+CiAgICA8aDQ+UmVndWxhciBFeHByZXNzaW9uIFNlbGVjdG9yPC9oND4KCiAgICA8cD5UaGUgPGNvZGU+Jmx0O2NvbnRhaW5zcmVnZXhwJmd0OzwvY29kZT4gdGFnIGluIGEgRmlsZVNldCBsaW1pdHMKICAgIHRoZSBmaWxlcyBkZWZpbmVkIGJ5IHRoYXQgZmlsZXNldCB0byBvbmx5IHRob3NlIHdoaWNoIGNvbnRhaW4gYQogICAgbWF0Y2ggdG8gdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBzcGVjaWZpZWQgYnkgdGhlIDxjb2RlPmV4cHJlc3Npb248L2NvZGU+IGF0dHJpYnV0ZS4KICAgIDwvcD4KCiAgICA8dGFibGUgYm9yZGVyPSIxIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjAiPgogICAgICA8dHI+CiAgICAgICAgPHRkIHZhbGlnbj0idG9wIj48Yj5BdHRyaWJ1dGU8L2I+PC90ZD4KICAgICAgICA8dGQgdmFsaWduPSJ0b3AiPjxiPkRlc2NyaXB0aW9uPC9iPjwvdGQ+CiAgICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIj48Yj5SZXF1aXJlZDwvYj48L3RkPgogICAgICA8L3RyPgogICAgICA8dHI+CiAgICAgICAgPHRkIHZhbGlnbj0idG9wIj5leHByZXNzaW9uPC90ZD4KICAgICAgICA8dGQgdmFsaWduPSJ0b3AiPlNwZWNpZmllcyB0aGUgcmVndWxhciBleHByZXNzaW9uIHRoYXQgbXVzdAogICAgICAgIG1hdGNoIHRydWUgaW4gZXZlcnkgZmlsZTwvdGQ+CiAgICAgICAgPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0iY2VudGVyIj5ZZXM8L3RkPgogICAgICA8L3RyPgogICAgPC90YWJsZT4KCiAgICA8cD5IZXJlIGlzIGFuIGV4YW1wbGUgb2YgaG93IHRvIHVzZSB0aGUgcmVndWxhciBleHByZXNzaW9uIFNlbGVjdG9yOjwvcD4KCiAgICA8YmxvY2txdW90ZT48cHJlPgombHQ7ZmlsZXNldCBkaXI9JnF1b3Q7JHtkb2MucGF0aH0mcXVvdDsgaW5jbHVkZXM9JnF1b3Q7Ki50eHQmcXVvdDsmZ3Q7CiAgICAmbHQ7Y29udGFpbnNyZWdleHAgZXhwcmVzc2lvbj0mcXVvdDtbNC02XVwuWzAtOV0mcXVvdDsvJmd0OwombHQ7L2ZpbGVzZXQmZ3Q7CjwvcHJlPjwvYmxvY2txdW90ZT4KCiAgICA8cD5TZWxlY3RzIGFsbCB0aGUgdGV4dCBmaWxlcyB0aGF0IG1hdGNoIHRoZSByZWd1bGFyIGV4cHJlc3Npb24KICAgIChoYXZlIGEgNCw1IG9yIDYgZm9sbG93ZWQgYnkgYSBwZXJpb2QgYW5kIGEgbnVtYmVyIGZyb20gMCB0byA5KS4KCgogICAgPGEgbmFtZT0ic2l6ZXNlbGVjdCI+PC9hPgogICAgPGg0PlNpemUgU2VsZWN0b3I8L2g0PgoKICAgIDxwPlRoZSA8Y29kZT4mbHQ7c2l6ZSZndDs8L2NvZGU+IHRhZyBpbiBhIEZpbGVTZXQgd2lsbCBwdXQKICAgIGEgbGltaXQgb24gdGhlIGZpbGVzIHNwZWNpZmllZCBieSB0aGUgaW5jbHVkZSB0YWcsIHNvIHRoYXQgdGFncwogICAgd2hpY2ggZG8gbm90IG1lZXQgdGhlIHNpemUgbGltaXRzIHNwZWNpZmllZCBieSB0aGUgc2VsZWN0b3Igd2lsbCBub3QKICAgIGVuZCB1cCBiZWluZyBzZWxlY3RlZC48L3A+CgogICAgPHRhYmxlIGJvcmRlcj0iMSIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIwIj4KICAgICAgPHRyPgogICAgICAgIDx0ZCB2YWxpZ249InRvcCI+PGI+QXR0cmlidXRlPC9iPjwvdGQ+CiAgICAgICAgPHRkIHZhbGlnbj0idG9wIj48Yj5EZXNjcmlwdGlvbjwvYj48L3RkPgogICAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCI+PGI+UmVxdWlyZWQ8L2I+PC90ZD4KICAgICAgPC90cj4KICAgICAgPHRyPgogICAgICAgIDx0ZCB2YWxpZ249InRvcCI+dmFsdWU8L3RkPgogICAgICAgIDx0ZCB2YWxpZ249InRvcCI+VGhlIHNpemUgb2YgdGhlIGZpbGUgd2hpY2ggc2hvdWxkIGJlIHRlc3RlZCBmb3IuCiAgICAgICAgPC90ZD4KICAgICAgICA8dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJjZW50ZXIiPlllczwvdGQ+CiAgICAgIDwvdHI+CiAgICAgIDx0cj4KICAgICAgICA8dGQgdmFsaWduPSJ0b3AiPnVuaXRzPC90ZD4KICAgICAgICA8dGQgdmFsaWduPSJ0b3AiPlRoZSB1bml0cyB0aGF0IHRoZSA8Y29kZT52YWx1ZTwvY29kZT4gYXR0cmlidXRlCiAgICAgICAgICBpcyBleHByZXNzZWQgaW4uIFdoZW4gdXNpbmcgdGhlIHN0YW5kYXJkIHNpbmdsZSBsZXR0ZXIgU0kKICAgICAgICAgIGRlc2lnbmF0aW9ucywgc3VjaCBhcyAmcXVvdDtrJnF1b3Q7LCZxdW90O00mcXVvdDssIG9yCiAgICAgICAgICAmcXVvdDtHJnF1b3Q7LCBtdWx0aXBsZXMgb2YgMTAwMCBhcmUgdXNlZC4gSWYgeW91IHdhbnQgdG8gdXNlCiAgICAgICAgICBwb3dlciBvZiAyIHVuaXRzLCB1c2UgdGhlIElFQyBzdGFuZGFyZDogJnF1b3Q7S2kmcXVvdDsgZm9yIDEwMjQsCiAgICAgICAgICAmcXVvdDtNaSZxdW90OyBmb3IgMTA0ODU3NiwgYW5kIHNvIG9uLiBUaGUgZGVmYXVsdCBpcyBubyB1bml0cywKICAgICAgICAgIHdoaWNoIG1lYW5zIHRoZSA8Y29kZT52YWx1ZTwvY29kZT4gYXR0cmlidXRlIGV4cHJlc3NlcyB0aGUgZXhhY3QKICAgICAgICAgIG51bWJlciBvZiBieXRlcy4KICAgICAgICA8L3RkPgogICAgICAgIDx0ZCB2YWxpZ249InRvcCIgYWxpZ249ImNlbnRlciI+Tm88L3RkPgogICAgICA8L3RyPgogICAgICA8dHI+CiAgICAgICAgPHRkIHZhbGlnbj0idG9wIj53aGVuPC90ZD4KICAgICAgICA8dGQgdmFsaWduPSJ0b3AiPkluZGljYXRlcyBob3cgdG8gaW50ZXJwcmV0IHRoZSBzaXplLCB3aGV0aGVyCiAgICAgICAgICB0aGUgZmlsZXMgdG8gYmUgc2VsZWN0ZWQgc2hvdWxkIGJlIGxhcmdlciwgc21hbGxlciwgb3IgZXF1YWwgdG8KICAgICAgICAgIHRoYXQgdmFsdWUuIEFjY2VwdGFibGUgdmFsdWVzIGZvciB0aGlzIGF0dHJpYnV0ZSBhcmU6CiAgICAgICAgICA8dWw+CiAgICAgICAgICAgIDxsaT5sZXNzIC0gc2VsZWN0IGZpbGVzIGxlc3MgdGhhbiB0aGUgaW5kaWNhdGVkIHNpemUKICAgICAgICAgICAgPGxpPm1vcmUgLSBzZWxlY3QgZmlsZXMgZ3JlYXRlciB0aGFuIHRoZSBpbmRpY2F0ZWQgc2l6ZQogICAgICAgICAgICA8bGk+ZXF1YWwgLSBzZWxlY3QgZmlsZXMgdGhpcyBleGFjdCBzaXplCiAgICAgICAgICA8L3VsPgogICAgICAgICAgVGhlIGRlZmF1bHQgaXMgbGVzcy4KICAgICAgICA8dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJjZW50ZXIiPk5vPC90ZD4KICAgICAgPC90cj4KICAgIDwvdGFibGU+CgogICAgPHA+SGVyZSBpcyBhbiBleGFtcGxlIG9mIGhvdyB0byB1c2UgdGhlIFNpemUgU2VsZWN0b3I6PC9wPgoKICAgIDxibG9ja3F1b3RlPjxwcmU+CiZsdDtmaWxlc2V0IGRpcj0mcXVvdDske2phci5wYXRofSZxdW90OyZndDsKICAmbHQ7cGF0dGVybnNldCZndDsKICAgICZsdDtpbmNsdWRlIG5hbWU9JnF1b3Q7KiovKi5qYXImcXVvdDsvJmd0OwogICZsdDsvcGF0dGVybnNldCZndDsKICAmbHQ7c2l6ZSB2YWx1ZT0mcXVvdDs0JnF1b3Q7IHVuaXRzPSZxdW90O0tpJnF1b3Q7IHdoZW49JnF1b3Q7bW9yZSZxdW90Oy8mZ3Q7CiZsdDsvZmlsZXNldCZndDsKPC9wcmU+PC9ibG9ja3F1b3RlPgoKICAgIDxwPlNlbGVjdHMgYWxsIEpBUiBmaWxlcyB0aGF0IGFyZSBsYXJnZXIgdGhhbiA0MDk2IGJ5dGVzLjwvcD4KCiAgICA8YSBuYW1lPSJ0eXBlc2VsZWN0Ij48L2E+CiAgICA8aDQ+VHlwZSBTZWxlY3RvcjwvaDQ+CgogICAgPHA+VGhlIDxjb2RlPiZsdDt0eXBlJmd0OzwvY29kZT4gdGFnIHNlbGVjdHMgZmlsZXMgb2YgYSBjZXJ0YWluIHR5cGU6CiAgICBkaXJlY3Rvcnkgb3IgcmVndWxhci48L3A+CgogICAgPHRhYmxlIGJvcmRlcj0iMSIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIwIj4KICAgICAgPHRyPgogICAgICAgIDx0ZCB2YWxpZ249InRvcCI+PGI+QXR0cmlidXRlPC9iPjwvdGQ+CiAgICAgICAgPHRkIHZhbGlnbj0idG9wIj48Yj5EZXNjcmlwdGlvbjwvYj48L3RkPgogICAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCI+PGI+UmVxdWlyZWQ8L2I+PC90ZD4KICAgICAgPC90cj4KICAgICAgPHRyPgogICAgICAgIDx0ZCB2YWxpZ249InRvcCI+dHlwZTwvdGQ+CiAgICAgICAgPHRkIHZhbGlnbj0idG9wIj5UaGUgdHlwZSBvZiBmaWxlIHdoaWNoIHNob3VsZCBiZSB0ZXN0ZWQgZm9yLgogICAgICAgICAgICBBY2NlcHRhYmxlIHZhbHVlcyBhcmU6CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICAgIDxsaT5maWxlIC0gcmVndWxhciBmaWxlczwvbGk+CiAgICAgICAgICAgICAgICA8bGk+ZGlyIC0gZGlyZWN0b3JpZXM8L2xpPgogICAgICAgICAgICA8L3VsPgogICAgICAgIDwvdGQ+CiAgICAgICAgPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0iY2VudGVyIj5ZZXM8L3RkPgogICAgICA8L3RyPgogICAgPC90YWJsZT4KCiAgICA8cD5IZXJlIGlzIGFuIGV4YW1wbGUgb2YgaG93IHRvIHVzZSB0aGUgVHlwZSBTZWxlY3RvciB0byBzZWxlY3Qgb25seQogICAgZGlyZWN0b3JpZXMgaW4gPGNvZGU+JHtzcmN9PC9jb2RlPjwvcD4KCiAgICA8YmxvY2txdW90ZT48cHJlPgombHQ7ZmlsZXNldCBkaXI9JnF1b3Q7JHtzcmN9JnF1b3Q7Jmd0OwogICZsdDt0eXBlIHR5cGU9ImRpciIvPgombHQ7L2ZpbGVzZXQmZ3Q7CjwvcHJlPjwvYmxvY2txdW90ZT4KCiAgICA8cD5UaGUgVHlwZSBTZWxlY3RvciBpcyBvZnRlbiB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggb3RoZXIgc2VsZWN0b3JzLgogICAgRm9yIGV4YW1wbGUsIHRvIHNlbGVjdCBmaWxlcyB0aGF0IGFsc28gZXhpc3QgaW4gYSA8Y29kZT50ZW1wbGF0ZTwvY29kZT4KICAgIGRpcmVjdG9yeSwgYnV0IGF2b2lkIHNlbGVjdGluZyBlbXB0eSBkaXJlY3RvcmllcywgdXNlOgoKPGJsb2NrcXVvdGU+PHByZT4KJmx0O2ZpbGVzZXQgZGlyPSIke3NyY30iPgogICAgJmx0O2FuZD4KICAgICAgICAmbHQ7cHJlc2VudCB0YXJnZXRkaXI9InRlbXBsYXRlIi8+CiAgICAgICAgJmx0O3R5cGUgdHlwZT0iZmlsZSIvPgogICAgJmx0Oy9hbmQ+CiZsdDsvZmlsZXNldD4KPC9wcmU+PC9ibG9ja3F1b3RlPgoKCiAgICA8YSBuYW1lPSJtb2RpZmllZCI+PC9hPgogICAgPGg0Pk1vZGlmaWVkIFNlbGVjdG9yPC9oND4KICAgIDxwPlRoZSAmbHQ7bW9kaWZpZWQmZ3Q7IGNvbXB1dGVzIGEgdmFsdWUgZm9yIGEgZmlsZSwgY29tcGFyZXMgdGhhdAogICAgdG8gdGhlIHZhbHVlIHN0b3JlZCBpbiBhIGNhY2hlIGFuZCBzZWxlY3QgdGhlIGZpbGUsIGlmIHRoZXNlIHR3byB2YWx1ZXMKICAgIGRpZmZlci48L3A+CiAgICA8cD5CZWNhdXNlIHRoaXMgc2VsZWN0b3IgaXMgaGlnaGx5IGNvbmZpZ3VyYWJsZSB0aGUgb3JkZXIgaW4gd2hpY2ggdGhlIHNlbGVjdGlvbiBpcyBkb25lCiAgICBpczogPG9sPgogICAgICAgIDxsaT4gZ2V0IHRoZSBhYnNvbHV0ZSBwYXRoIGZvciB0aGUgZmlsZSA8L2xpPgogICAgICAgIDxsaT4gZ2V0IHRoZSBjYWNoZWQgdmFsdWUgZnJvbSB0aGUgY29uZmlndXJlZCBjYWNoZSAoYWJzb2x1dGUgcGF0aCBhcyBrZXkpIDwvbGk+CiAgICAgICAgPGxpPiBnZXQgdGhlIG5ldyB2YWx1ZSBmcm9tIHRoZSBjb25maWd1cmVkIGFsZ29yaXRobSA8L2xpPgogICAgICAgIDxsaT4gY29tcGFyZSB0aGVzZSB0d28gdmFsdWVzIHdpdGggdGhlIGNvbmZpZ3VyZWQgY29tcGFyYXRvciA8L2xpPgogICAgICAgIDxsaT4gdXBkYXRlIHRoZSBjYWNoZSBpZiBuZWVkZWQgYW5kIHdpc2hlZCA8L2xpPgogICAgICAgIDxsaT4gZG8gdGhlIHNlbGVjdGlvbiBhY2NvcmRpbmcgdG8gdGhlIGNvbXBhcmlzb24gcmVzdWx0IDwvbGk+CiAgICAgICAgPC9vbD4KICAgIFRoZSBjb21wYXJpc29uLCBjb21wdXRpbmcgb2YgdGhlIGhhc2h2YWx1ZSBhbmQgdGhlIHN0b3JlIGlzIGRvbmUgYnkgaW1wbGVtZW50YXRpb24KICAgIG9mIHNwZWNpYWwgaW50ZXJmYWNlcy4gVGhlcmVmb3JlIHRoZXkgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBwYXJhbWV0ZXJzLjwvcD4KCiAgICA8dGFibGUgYm9yZGVyPSIxIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjAiPgogICAgICA8dHI+CiAgICAgICAgPHRkIHZhbGlnbj0idG9wIj48Yj5BdHRyaWJ1dGU8L2I+PC90ZD4KICAgICAgICA8dGQgdmFsaWduPSJ0b3AiPjxiPkRlc2NyaXB0aW9uPC9iPjwvdGQ+CiAgICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIj48Yj5SZXF1aXJlZDwvYj48L3RkPgogICAgICA8L3RyPgogICAgICA8dHI+CiAgICAgICAgPHRkIHZhbGlnbj0idG9wIj4gYWxnb3JpdGhtIDwvdGQ+CiAgICAgICAgPHRkIHZhbGlnbj0idG9wIj4gVGhlIHR5cGUgb2YgYWxnb3JpdGhtIHNob3VsZCBiZSB1c2VkLgogICAgICAgICAgICBBY2NlcHRhYmxlIHZhbHVlcyBhcmUgKGZ1cnRoZXIgaW5mb3JtYXRpb24gc2VlIGxhdGVyKToKICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgICAgPGxpPiBoYXNodmFsdWUgLSBIYXNodmFsdWVBbGdvcml0aG0gPC9saT4KICAgICAgICAgICAgICAgIDxsaT4gZGlnZXN0IC0gRGlnZXN0QWxnb3JpdGhtIDwvbGk+CiAgICAgICAgICAgIDwvdWw+CiAgICAgICAgPC90ZD4KICAgICAgICA8dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJjZW50ZXIiPiBObywgZGVmYXVsdHMgdG8gPGk+ZGlnZXN0PC9pPiA8L3RkPgogICAgICA8L3RyPgogICAgICA8dHI+CiAgICAgICAgPHRkIHZhbGlnbj0idG9wIj4gY2FjaGUgPC90ZD4KICAgICAgICA8dGQgdmFsaWduPSJ0b3AiPiBUaGUgdHlwZSBvZiBjYWNoZSBzaG91bGQgYmUgdXNlZC4KICAgICAgICAgICAgQWNjZXB0YWJsZSB2YWx1ZXMgYXJlIChmdXJ0aGVyIGluZm9ybWF0aW9uIHNlZSBsYXRlcik6CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICAgIDxsaT4gcHJvcGVydHlmaWxlIC0gUHJvcGVydHlmaWxlQ2FjaGUgPC9saT4KICAgICAgICAgICAgPC91bD4KICAgICAgICA8L3RkPgogICAgICAgIDx0ZCB2YWxpZ249InRvcCIgYWxpZ249ImNlbnRlciI+IE5vLCBkZWZhdWx0cyB0byA8aT5wcm9wZXJ0eWZpbGU8L2k+IDwvdGQ+CiAgICAgIDwvdHI+CiAgICAgIDx0cj4KICAgICAgICA8dGQgdmFsaWduPSJ0b3AiPiBjb21wYXJhdG9yIDwvdGQ+CiAgICAgICAgPHRkIHZhbGlnbj0idG9wIj4gVGhlIHR5cGUgb2YgY29tcGFyYXRvciBzaG91bGQgYmUgdXNlZC4KICAgICAgICAgICAgQWNjZXB0YWJsZSB2YWx1ZXMgYXJlIChmdXJ0aGVyIGluZm9ybWF0aW9uIHNlZSBsYXRlcik6CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICAgIDxsaT4gZXF1YWwgLSBFcXVhbENvbXBhcmF0b3IgPC9saT4KICAgICAgICAgICAgICAgIDxsaT4gcnVsZSAtIGphdmEudGV4dC5SdWxlQmFzZWRDb2xsYXRvciA8L2xpPgogICAgICAgICAgICA8L3VsPgogICAgICAgIDwvdGQ+CiAgICAgICAgPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0iY2VudGVyIj4gTm8sIGRlZmF1bHRzIHRvIDxpPmVxdWFsPC9pPiA8L3RkPgogICAgICA8L3RyPgogICAgICA8dHI+CiAgICAgICAgPHRkIHZhbGlnbj0idG9wIj4gdXBkYXRlIDwvdGQ+CiAgICAgICAgPHRkIHZhbGlnbj0idG9wIj4gU2hvdWxkIHRoZSBjYWNoZSBiZSB1cGRhdGVkIHdoZW4gdmFsdWVzIGRpZmZlcj8gKGJvb2xlYW4pIDwvdGQ+CiAgICAgICAgPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0iY2VudGVyIj4gTm8sIGRlZmF1bHRzIHRvIDxpPnRydWU8L2k+IDwvdGQ+CiAgICAgIDwvdHI+CiAgICAgIDx0cj4KICAgICAgICA8dGQgdmFsaWduPSJ0b3AiPiBzZWxkaXJzIDwvdGQ+CiAgICAgICAgPHRkIHZhbGlnbj0idG9wIj4gU2hvdWxkIGRpcmVjdG9yaWVzIGJlIHNlbGVjdGVkPyAoYm9vbGVhbikgPC90ZD4KICAgICAgICA8dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJjZW50ZXIiPiBObywgZGVmYXVsdHMgdG8gPGk+dHJ1ZTwvaT4gPC90ZD4KICAgICAgPC90cj4KICAgIDwvdGFibGU+CgogICAgPHA+VGhlc2UgYXR0cmlidXRlcyBjYW4gYmUgc2V0IHdpdGggbmVzdGVkICZsdDtwYXJhbS8mZ3Q7IHRhZ3MuIFdpdGggJmx0O3BhcmFtLyZndDsKICAgIHRhZ3MgeW91IGNhbiBzZXQgb3RoZXIgdmFsdWVzIHRvbyAtIGFzIGxvbmcgYXMgdGhleSBhcmUgbmFtZWQgYWNjb3JkaW5nIHRvCiAgICB0aGUgZm9sbG93aW5nIHJ1bGVzOiA8dWw+CiAgICAgICAgPGxpPiA8Yj4gYWxnb3JpdGhtIDwvYj46IHNhbWUgYXMgYXR0cmlidXRlIGFsZ29yaXRobSA8L2xpPgogICAgICAgIDxsaT4gPGI+IGNhY2hlIDwvYj46IHNhbWUgYXMgYXR0cmlidXRlIGNhY2hlIDwvbGk+CiAgICAgICAgPGxpPiA8Yj4gY29tcGFyYXRvciA8L2I+OiBzYW1lIGFzIGF0dHJpYnV0ZSBjYWNoZSA8L2xpPgogICAgICAgIDxsaT4gPGI+IHVwZGF0ZSA8L2I+OiBzYW1lIGFzIGF0dHJpYnV0ZSBjb21wYXJhdG9yIDwvbGk+CiAgICAgICAgPGxpPiA8Yj4gc2VsZGlycyA8L2I+OiBzYW1lIGFzIGF0dHJpYnV0ZSBzZWxkaXJzIDwvbGk+CiAgICAgICAgPGxpPiA8Yj4gYWxnb3JpdGhtLiogPC9iPjogVmFsdWUgaXMgdHJhbnNmZXJlZCB0byB0aGUgYWxnb3JpdGhtIHZpYSBpdHMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aT5zZXQ8L2k+WFgtbWV0aG9kcyA8L2xpPgogICAgICAgIDxsaT4gPGI+IGNhY2hlLiogPC9iPjogVmFsdWUgaXMgdHJhbnNmZXJlZCB0byB0aGUgY2FjaGUgdmlhIGl0cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpPnNldDwvaT5YWC1tZXRob2RzIDwvbGk+CiAgICAgICAgPGxpPiA8Yj4gY29tcGFyYXRvci4qIDwvYj46IFZhbHVlIGlzIHRyYW5zZmVyZWQgdG8gdGhlIGNvbXBhcmF0b3IgdmlhIGl0cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpPnNldDwvaT5YWC1tZXRob2RzIDwvbGk+CiAgICA8L3VsPjwvcD4KCiAgICA8dGFibGUgYm9yZGVyPSIxIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjAiPgogICAgICA8dHI+PHRkIGNvbHNwYW49IjIiPjxmb250IHNpemU9IisxIj48Yj4gQWxnb3JpdGhttHMgPC9iPjwvZm9udD48L3RkPjwvdHI+CiAgICAgIDx0cj4KICAgICAgICA8dGQgdmFsaWduPSJ0b3AiPjxiPk5hbWU8L2I+PC90ZD4KICAgICAgICA8dGQgdmFsaWduPSJ0b3AiPjxiPkRlc2NyaXB0aW9uPC9iPjwvdGQ+CiAgICAgIDwvdHI+CiAgICAgIDx0cj4KICAgICAgICA8dGQgdmFsaWduPSJ0b3AiPiBoYXNodmFsdWUgPC90ZD4KICAgICAgICA8dGQgdmFsaWduPSJ0b3AiPiBSZWFkcyB0aGUgY29udGVudCBvZiBhIGZpbGUgaW50byBhIGphdmEubGFuZy5TdHJpbmcKICAgICAgICAgIGFuZCB1c2UgdGhhdHMgaGFzaFZhbHVlKCkuIE5vIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiByZXF1aXJlZC4KICAgICAgICA8L3RkPgogICAgICA8L3RyPgogICAgICA8dHI+CiAgICAgICAgPHRkIHZhbGlnbj0idG9wIj4gZGlnZXN0IDwvdGQ+CiAgICAgICAgPHRkIHZhbGlnbj0idG9wIj4gVXNlcyBqYXZhLnNlY3VyaXR5Lk1lc3NhZ2VEaWdlc3QuIFRoaXMgQWxnb3JpdGhtIHN1cHBvcnRzCiAgICAgICAgICB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6CiAgICAgICAgICA8dWw+CiAgICAgICAgICAgIDxsaT48aT5hbGdvcml0aG0uYWxnb3JpdGhtPC9pPiAob3B0aW9uYWwpOiBOYW1lIG9mIHRoZSBEaWdlc3QgYWxnb3JpdGhtCiAgICAgICAgICAgICAgICAoZS5nLiAnTUQ1JyBvciAnU0hBJywgZGVmYXVsdCA9IDxpPk1ENTwvaT4pIDwvbGk+CiAgICAgICAgICAgIDxsaT48aT5hbGdvcml0aG0ucHJvdmlkZXI8L2k+IChvcHRpb25hbCk6IE5hbWUgb2YgdGhlIERpZ2VzdCBwcm92aWRlcgogICAgICAgICAgICAgICAgKGRlZmF1bHQgPSA8aT5udWxsPC9pPikgPC9saT4KICAgICAgICAgIDwvdWw+CiAgICAgICAgPC90ZD4KICAgICAgPC90cj4KICAgICAgPHRyPjx0ZCBjb2xzcGFuPSIyIj48Zm9udCBzaXplPSIrMSI+PGI+IENhY2hltHMgPC9iPjwvZm9udD48L3RkPjwvdHI+CiAgICAgIDx0cj4KICAgICAgICA8dGQgdmFsaWduPSJ0b3AiPiBwcm9wZXJ0eWZpbGUgPC90ZD4KICAgICAgICA8dGQgdmFsaWduPSJ0b3AiPiBVc2UgdGhlIGphdmEudXRpbC5Qcm9wZXJ0aWVzIGNsYXNzIGFuZCBpdHMgcG9zc2liaWxpdHkKICAgICAgICAgIHRvIGxvYWQgYW5kIHN0b3JlIHRvIGZpbGUuCiAgICAgICAgICBUaGlzIENhY2hlIGltcGxlbWVudGF0aW9uIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczoKICAgICAgICAgIDx1bD4KICAgICAgICAgICAgPGxpPjxpPmNhY2hlLmNhY2hlZmlsZTwvaT4gKG9wdGlvbmFsKTogTmFtZSBvZiB0aGUgcHJvcGVydGllcy1maWxlCiAgICAgICAgICAgICAgICAoZGVmYXVsdCA9IDxpPmNhY2hlLnByb3BlcnRpZXM8L2k+KSA8L2xpPgogICAgICAgICAgPC91bD4KICAgICAgICA8L3RkPgogICAgICA8L3RyPgogICAgPC90YWJsZT4KCiAgICA8cD5IZXJlIGFyZSBzb21lIGV4YW1wbGVzIG9mIGhvdyB0byB1c2UgdGhlIE1vZGlmaWVkIFNlbGVjdG9yOjwvcD4KCiAgICA8YmxvY2txdW90ZT48cHJlPgogICAgJmx0O2NvcHkgdG9kaXI9ImRlc3QiPgogICAgICAgICZsdDtmaWxlbGlzdCBkaXI9InNyYyI+CiAgICAgICAgICAgICZsdDttb2RpZmllZC8+CiAgICAgICAgJmx0Oy9maWxlbGlzdD4KICAgICZsdDsvY29weQogICAgPC9wcmU+PC9ibG9ja3F1b3RlPgogICAgPHA+VGhpcyB3aWxsIGNvcHkgYWxsIGZpbGVzIGZyb20gPGk+c3JjPC9pPiB0byA8aT5kZXN0PC9pPiB3aGljaCBjb250ZW50IGhhcyBjaGFuZ2VkLgogICAgVXNpbmcgYW4gdXBkYXRpbmcgUHJvcGVydHlmaWxlQ2FjaGUgd2l0aCBjYWNoZS5wcm9wZXJ0aWVzIGFuZAogICAgTUQ1LURpZ2VzdEFsZ29yaXRobS48L3A+CgogICAgPGJsb2NrcXVvdGU+PHByZT4KICAgICZsdDtjb3B5IHRvZGlyPSJkZXN0Ij4KICAgICAgICAmbHQ7ZmlsZWxpc3QgZGlyPSJzcmMiPgogICAgICAgICAgICAmbHQ7bW9kaWZpZWQgdXBkYXRlPSJ0cnVlIgogICAgICAgICAgICAgICAgICAgICAgc2VsZGlycz0idHJ1ZSIKICAgICAgICAgICAgICAgICAgICAgIGNhY2hlPSJwcm9wZXJ0eWZpbGUiCiAgICAgICAgICAgICAgICAgICAgICBhbGdvcml0aG09ImRpZ2VzdCIKICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmF0b3I9ImVxdWFsIj4KICAgICAgICAgICAgICAgICZsdDtwYXJhbSBuYW1lPSJjYWNoZS5jYWNoZWZpbGUiICAgICB2YWx1ZT0iY2FjaGUucHJvcGVydGllcyIvPgogICAgICAgICAgICAgICAgJmx0O3BhcmFtIG5hbWU9ImFsZ29yaXRobS5hbGdvcml0aG0iIHZhbHVlPSJNRDUiLz4KICAgICAgICAgICAgJmx0Oy9tb2RpZmllZD4KICAgICAgICAmbHQ7L2ZpbGVsaXN0PgogICAgJmx0Oy9jb3B5PgogICAgPC9wcmU+PC9ibG9ja3F1b3RlPgogIDxwPlRoaXMgaXMgdGhlIHNhbWUgZXhhbXBsZSByZXdyaXR0ZW4gYXMgQ29yZVNlbGVjdG9yIHdpdGggc2V0dGluZyB0aGUgYWxsIHRoZSB2YWx1ZXMKICAoc2FtZSBhcyBkZWZhdWx0cyBhcmUpLjwvcD4KCiAgICA8YmxvY2txdW90ZT48cHJlPgogICAgJmx0O2NvcHkgdG9kaXI9ImRlc3QiPgogICAgICAgICZsdDtmaWxlbGlzdCBkaXI9InNyYyI+CiAgICAgICAgICAgICZsdDtjdXN0b20gY2xhc3M9Im9yZy5hcGFjaGUudG9vbHMuYW50LnR5cGVzLnNlbGVjdG9ycy5tb2RpZmllZHNlbGVjdG9yLk1vZGlmaWVkU2VsZWN0b3IiPgogICAgICAgICAgICAgICAgJmx0O3BhcmFtIG5hbWU9InVwZGF0ZSIgICAgIHZhbHVlPSJ0cnVlIi8+CiAgICAgICAgICAgICAgICAmbHQ7cGFyYW0gbmFtZT0ic2VsZGlycyIgICAgdmFsdWU9InRydWUiLz4KICAgICAgICAgICAgICAgICZsdDtwYXJhbSBuYW1lPSJjYWNoZSIgICAgICB2YWx1ZT0icHJvcGVydHlmaWxlIi8+CiAgICAgICAgICAgICAgICAmbHQ7cGFyYW0gbmFtZT0iYWxnb3JpdGhtIiAgdmFsdWU9ImRpZ2VzdCIvPgogICAgICAgICAgICAgICAgJmx0O3BhcmFtIG5hbWU9ImNvbXBhcmF0b3IiIHZhbHVlPSJlcXVhbCIvPgogICAgICAgICAgICAgICAgJmx0O3BhcmFtIG5hbWU9ImNhY2hlLmNhY2hlZmlsZSIgICAgIHZhbHVlPSJjYWNoZS5wcm9wZXJ0aWVzIi8+CiAgICAgICAgICAgICAgICAmbHQ7cGFyYW0gbmFtZT0iYWxnb3JpdGhtLmFsZ29yaXRobSIgdmFsdWU9Ik1ENSIvPgogICAgICAgICAgICAmbHQ7L2N1c3RvbT4KICAgICAgICAmbHQ7L2ZpbGVsaXN0PgogICAgJmx0Oy9jb3B5PgogICAgPC9wcmU+PC9ibG9ja3F1b3RlPgogIDxwPkFuZCB0aGlzIGlzIHRoZSBzYW1lIHJld3JpdHRlbiBhcyBDdXN0b21TZWxlY3Rvci48L3A+CgogICAgPGJsb2NrcXVvdGU+PHByZT4KICAmbHQ7dGFyZ2V0IG5hbWU9ImdlbmVyYXRlLWFuZC11cGxvYWQtc2l0ZSI+CiAgICAgICZsdDtlY2hvPiBnZW5lcmF0ZSB0aGUgc2l0ZSB1c2luZyBmb3JyZXN0ICZsdDsvZWNobz4KICAgICAgJmx0O2FudGNhbGwgdGFyZ2V0PSJzaXRlIi8+CgogICAgICAmbHQ7ZWNobz4gdXBsb2FkIHRoZSBjaGFuZ2VkIGZpbGUgJmx0Oy9lY2hvPgogICAgICAmbHQ7ZnRwIHNlcnZlcj0iJHtmdHAuc2VydmVyfSIgdXNlcmlkPSIke2Z0cC51c2VyfSIgcGFzc3dvcmQ9IiR7ZnRwLnB3ZH0iPgogICAgICAgICAgJmx0O2ZpbGVzZXQgZGlyPSJodGRvY3MvbWFudWFsIj4KICAgICAgICAgICAgICAmbHQ7bW9kaWZpZWQvPgogICAgICAgICAgJmx0Oy9maWxlc2V0PgogICAgICAmbHQ7L2Z0cD4KICAmbHQ7L3RhcmdldD4KICAgIDwvcHJlPjwvYmxvY2txdW90ZT4KICA8cD5BIHVzZWZ1bCBzY2VuYXJpbyBmb3IgdGhpcyBzZWxlY3RvciBpbnNpZGUgYSBidWlsZCBlbnZpcm9ubWVudAogIGZvciBob21lcGFnZSBnZW5lcmF0aW9uIChlLmcuIHdpdGggPGEgaHJlZj0iaHR0cDovL3htbC5hcGFjaGUub3JnL2ZvcnJlc3QvIj4KICBBcGFjaGUgRm9ycmVzdDwvYT4pLiBIZXJlIGFsbCA8Yj5jaGFuZ2VkPC9iPiBmaWxlcyBhcmUgdXBsb2FkZWQgdG8gdGhlIHNlcnZlci4gVGhlCiAgQ2FjaGVTZWxlY3RvciBzYXZlcyB0aGVyZWZvcmUgbXVjaCB1cGxvYWQgdGltZS48L3A+CgoKICAgIDxhIG5hbWU9InNlbGVjdGNvbnRhaW5lcnMiPjwvYT4KICAgIDxoMz5TZWxlY3RvciBDb250YWluZXJzPC9oMz4KCiAgICA8cD5UbyBjcmVhdGUgbW9yZSBjb21wbGV4IHNlbGVjdGlvbnMsIGEgdmFyaWV0eSBvZiBzZWxlY3RvcnMgdGhhdAogICAgY29udGFpbiBvdGhlciBzZWxlY3RvcnMgYXJlIGF2YWlsYWJsZSBmb3IgeW91ciB1c2UuIFRoZXkgY29tYmluZSB0aGUKICAgIHNlbGVjdGlvbnMgb2YgdGhlaXIgY2hpbGQgc2VsZWN0b3JzIGluIHZhcmlvdXMgd2F5cy48L3A+CgogICAgPHA+VGhlIHNlbGVjdG9yIGNvbnRhaW5lcnMgYXJlOjwvcD4KCiAgICA8dWw+CiAgICAgIDxsaT48YSBocmVmPSIjYW5kc2VsZWN0Ij4mbHQ7YW5kJmd0OzwvYT4gLSBzZWxlY3QgYSBmaWxlIG9ubHkgaWYgYWxsCiAgICAgICAgdGhlIGNvbnRhaW5lZCBzZWxlY3RvcnMgc2VsZWN0IGl0LgogICAgICA8bGk+PGEgaHJlZj0iI21ham9yaXR5c2VsZWN0Ij4mbHQ7bWFqb3JpdHkmZ3Q7PC9hPiAtIHNlbGVjdCBhIGZpbGUKICAgICAgICBpZiBhIG1ham9yaXR5IG9mIGl0cyBzZWxlY3RvcnMgc2VsZWN0IGl0LgogICAgICA8bGk+PGEgaHJlZj0iI25vbmVzZWxlY3QiPiZsdDtub25lJmd0OzwvYT4gLSBzZWxlY3QgYSBmaWxlIG9ubHkgaWYKICAgICAgICBub25lIG9mIHRoZSBjb250YWluZWQgc2VsZWN0b3JzIHNlbGVjdCBpdC4KICAgICAgPGxpPjxhIGhyZWY9IiNub3RzZWxlY3QiPiZsdDtub3QmZ3Q7PC9hPiAtIGNhbiBjb250YWluIG9ubHkgb25lCiAgICAgICAgc2VsZWN0b3IsIGFuZCByZXZlcnNlcyB3aGF0IGl0IHNlbGVjdHMgYW5kIGRvZXNuJ3Qgc2VsZWN0LgogICAgICA8bGk+PGEgaHJlZj0iI29yc2VsZWN0Ij4mbHQ7b3ImZ3Q7PC9hPiAtIHNlbGVjdHMgYSBmaWxlIGlmIGFueSBvbmUKICAgICAgICBvZiB0aGUgY29udGFpbmVkIHNlbGVjdG9ycyBzZWxlY3RzIGl0LgogICAgICA8bGk+PGEgaHJlZj0iI3NlbGVjdG9yc2VsZWN0Ij4mbHQ7c2VsZWN0b3ImZ3Q7PC9hPiAtIGNvbnRhaW5zIG9ubHkgb25lCiAgICAgICAgc2VsZWN0b3IgYW5kIGZvcndhcmRzIGFsbCByZXF1ZXN0cyB0byBpdCB3aXRob3V0IGFsdGVyYXRpb24sIHByb3ZpZGVkCiAgICAgICAgdGhhdCBhbnkgPGNvZGU+JnF1b3Q7aWYmcXVvdDs8L2NvZGU+IG9yCiAgICAgICAgPGNvZGU+JnF1b3Q7dW5sZXNzJnF1b3Q7PC9jb2RlPiBjb25kaXRpb25zIGFyZSBtZXQuIFRoaXMKICAgICAgICBpcyB0aGUgc2VsZWN0b3IgdG8gdXNlIGlmIHlvdSB3YW50IHRvIGRlZmluZSBhIHJlZmVyZW5jZS4gSXQgaXMKICAgICAgICB1c2FibGUgYXMgYW4gZWxlbWVudCBvZiA8Y29kZT4mbHQ7cHJvamVjdCZndDs8L2NvZGU+LiBJdCBpcyBhbHNvCiAgICAgICAgdGhlIG9uZSB0byB1c2UgaWYgeW91IHdhbnQgc2VsZWN0aW9uIG9mIGZpbGVzIHRvIGJlIGRlcGVuZGVudCBvbgogICAgICAgIEFudCBwcm9wZXJ0eSBzZXR0aW5ncy4KICAgIDwvdWw+CgogICAgPHA+QWxsIHNlbGVjdG9yIGNvbnRhaW5lcnMgY2FuIGNvbnRhaW4gYW55IG90aGVyIHNlbGVjdG9yLCBpbmNsdWRpbmcKICAgIG90aGVyIGNvbnRhaW5lcnMsIGFzIGFuIGVsZW1lbnQuIFVzaW5nIGNvbnRhaW5lcnMsIHRoZSBzZWxlY3RvciB0YWdzCiAgICBjYW4gYmUgYXJiaXRyYXJpbHkgZGVlcC4gSGVyZSBpcyBhIGNvbXBsZXRlIGxpc3Qgb2YgYWxsb3dhYmxlCiAgICBzZWxlY3RvciBlbGVtZW50cyB3aXRoaW4gYSBjb250YWluZXI6PC9QPgoKICAgIDx1bD4KICAgICAgPGxpPiZsdDthbmQmZ3Q7CiAgICAgIDxsaT4mbHQ7Y29udGFpbnMmZ3Q7CiAgICAgIDxsaT4mbHQ7Y3VzdG9tJmd0OwogICAgICA8bGk+Jmx0O2RhdGUmZ3Q7CiAgICAgIDxsaT4mbHQ7ZGVwZW5kJmd0OwogICAgICA8bGk+Jmx0O2RlcHRoJmd0OwogICAgICA8bGk+Jmx0O2ZpbGVuYW1lJmd0OwogICAgICA8bGk+Jmx0O21ham9yaXR5Jmd0OwogICAgICA8bGk+Jmx0O25vbmUmZ3Q7CiAgICAgIDxsaT4mbHQ7bm90Jmd0OwogICAgICA8bGk+Jmx0O29yJmd0OwogICAgICA8bGk+Jmx0O3ByZXNlbnQmZ3Q7CiAgICAgIDxsaT4mbHQ7c2VsZWN0b3ImZ3Q7CiAgICAgIDxsaT4mbHQ7c2l6ZSZndDsKICAgIDwvdWw+CgogICAgPGEgbmFtZT0iYW5kc2VsZWN0Ij48L2E+CiAgICA8aDQ+QW5kIFNlbGVjdG9yPC9oND4KCiAgICA8cD5UaGUgPGNvZGU+Jmx0O2FuZCZndDs8L2NvZGU+IHRhZyBzZWxlY3RzIGZpbGVzIHRoYXQgYXJlCiAgICBzZWxlY3RlZCBieSBhbGwgb2YgdGhlIGVsZW1lbnRzIGl0IGNvbnRhaW5zLiBJdCByZXR1cm5zIGFzCiAgICBzb29uIGFzIGl0IGZpbmRzIGEgc2VsZWN0b3IgdGhhdCBkb2VzIG5vdCBzZWxlY3QgdGhlIGZpbGUsCiAgICBzbyBpdCBpcyBub3QgZ3VhcmFudGVlZCB0byBjaGVjayBldmVyeSBzZWxlY3Rvci4KICAgIDwvcD4KCiAgICA8cD5IZXJlIGlzIGFuIGV4YW1wbGUgb2YgaG93IHRvIHVzZSB0aGUgQW5kIFNlbGVjdG9yOjwvcD4KCiAgICA8YmxvY2txdW90ZT48cHJlPgombHQ7ZmlsZXNldCBkaXI9JnF1b3Q7JHtkaXN0fSZxdW90OyBpbmNsdWRlcz0mcXVvdDsqKi8qLmphciZxdW90OyZndDsKICAgICZsdDthbmQmZ3Q7CiAgICAgICAgJmx0O3NpemUgdmFsdWU9JnF1b3Q7NCZxdW90OyB1bml0cz0mcXVvdDtLaSZxdW90OyB3aGVuPSZxdW90O21vcmUmcXVvdDsvJmd0OwogICAgICAgICZsdDtkYXRlIGRhdGV0aW1lPSZxdW90OzAxLzAxLzIwMDEgMTI6MDAgQU0mcXVvdDsgd2hlbj0mcXVvdDtiZWZvcmUmcXVvdDsvJmd0OwogICAgJmx0Oy9hbmQmZ3Q7CiZsdDsvZmlsZXNldCZndDsKPC9wcmU+PC9ibG9ja3F1b3RlPgoKICAgIDxwPlNlbGVjdHMgYWxsIHRoZSBKQVIgZmlsZSBsYXJnZXIgdGhhbiA0MDk2IGJ5dGVzIHdoaWNoIGhhdmVuJ3QgYmVlbiB1cGRhdGUKICAgICAgc2luY2UgdGhlIGxhc3QgbWlsbGVuaXVtLgogICAgPC9wPgoKCiAgICA8YSBuYW1lPSJtYWpvcml0eXNlbGVjdCI+PC9hPgogICAgPGg0Pk1ham9yaXR5IFNlbGVjdG9yPC9oND4KCiAgICA8cD5UaGUgPGNvZGU+Jmx0O21ham9yaXR5Jmd0OzwvY29kZT4gdGFnIHNlbGVjdHMgZmlsZXMgcHJvdmlkZWQKICAgIHRoYXQgYSBtYWpvcml0eSBvZiB0aGUgY29udGFpbmVkIGVsZW1lbnRzIGFsc28gc2VsZWN0IGl0LiBUaWVzIGFyZQogICAgZGVhbHQgd2l0aCBhcyBzcGVjaWZpZWQgYnkgdGhlIDxjb2RlPmFsbG93dGllPC9jb2RlPiBhdHRyaWJ1dGUuCiAgICA8L3A+CgogICAgPHRhYmxlIGJvcmRlcj0iMSIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIwIj4KICAgICAgPHRyPgogICAgICAgIDx0ZCB2YWxpZ249InRvcCI+PGI+QXR0cmlidXRlPC9iPjwvdGQ+CiAgICAgICAgPHRkIHZhbGlnbj0idG9wIj48Yj5EZXNjcmlwdGlvbjwvYj48L3RkPgogICAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCI+PGI+UmVxdWlyZWQ8L2I+PC90ZD4KICAgICAgPC90cj4KICAgICAgPHRyPgogICAgICAgIDx0ZCB2YWxpZ249InRvcCI+YWxsb3d0aWU8L3RkPgogICAgICAgIDx0ZCB2YWxpZ249InRvcCI+V2hldGhlciBmaWxlcyBzaG91bGQgYmUgc2VsZWN0ZWQgaWYgdGhlcmUKICAgICAgICAgIGFyZSBhbiBldmVuIG51bWJlciBvZiBzZWxlY3RvcnMgc2VsZWN0aW5nIHRoZW0gYXMgYXJlCiAgICAgICAgICBub3Qgc2VsZWN0aW5nIHRoZW0uIERlZmF1bHQgaXMgdHJ1ZS4KICAgICAgICA8L3RkPgogICAgICAgIDx0ZCB2YWxpZ249InRvcCIgYWxpZ249ImNlbnRlciI+Tm88L3RkPgogICAgICA8L3RyPgogICAgPC90YWJsZT4KCgogICAgPHA+SGVyZSBpcyBhbiBleGFtcGxlIG9mIGhvdyB0byB1c2UgdGhlIE1ham9yaXR5IFNlbGVjdG9yOjwvcD4KCiAgICA8YmxvY2txdW90ZT48cHJlPgombHQ7ZmlsZXNldCBkaXI9JnF1b3Q7JHtkb2NzfSZxdW90OyBpbmNsdWRlcz0mcXVvdDsqKi8qLmh0bWwmcXVvdDsmZ3Q7CiAgICAmbHQ7bWFqb3JpdHkmZ3Q7CiAgICAgICAgJmx0O2NvbnRhaW5zIHRleHQ9JnF1b3Q7cHJvamVjdCZxdW90OyBjYXNlc2Vuc2l0aXZlPSJmYWxzZSIvJmd0OwogICAgICAgICZsdDtjb250YWlucyB0ZXh0PSZxdW90O3Rhc2tkZWYmcXVvdDsgY2FzZXNlbnNpdGl2ZT0iZmFsc2UiLyZndDsKICAgICAgICAmbHQ7Y29udGFpbnMgdGV4dD0mcXVvdDtJbnRyb3NwZWN0aW9uSGVscGVyJnF1b3Q7IGNhc2VzZW5zaXRpdmU9InRydWUiLyZndDsKICAgICZsdDsvbWFqb3JpdHkmZ3Q7CiZsdDsvZmlsZXNldCZndDsKPC9wcmU+PC9ibG9ja3F1b3RlPgoKICAgIDxwPlNlbGVjdHMgYWxsIHRoZSBIVE1MIGZpbGVzIHdoaWNoIGNvbnRhaW4gYXQgbGVhc3QgdHdvIG9mIHRoZSB0aHJlZQogICAgcGhyYXNlcyAicHJvamVjdCIsICJ0YXNrZGVmIiwgYW5kICJJbnRyb3NwZWN0aW9uSGVscGVyIiAodGhpcyBsYXN0IHBocmFzZSBtdXN0CiAgICBtYXRjaCBjYXNlIGV4YWN0bHkpLgogICAgPC9wPgoKCiAgICA8YSBuYW1lPSJub25lc2VsZWN0Ij48L2E+CiAgICA8aDQ+Tm9uZSBTZWxlY3RvcjwvaDQ+CgogICAgPHA+VGhlIDxjb2RlPiZsdDtub25lJmd0OzwvY29kZT4gdGFnIHNlbGVjdHMgZmlsZXMgdGhhdCBhcmUKICAgIG5vdCBzZWxlY3RlZCBieSBhbnkgb2YgdGhlIGVsZW1lbnRzIGl0IGNvbnRhaW5zLiBJdCByZXR1cm5zIGFzCiAgICBzb29uIGFzIGl0IGZpbmRzIGEgc2VsZWN0b3IgdGhhdCBzZWxlY3RzIHRoZSBmaWxlLAogICAgc28gaXQgaXMgbm90IGd1YXJhbnRlZWQgdG8gY2hlY2sgZXZlcnkgc2VsZWN0b3IuCiAgICA8L3A+CgogICAgPHA+SGVyZSBpcyBhbiBleGFtcGxlIG9mIGhvdyB0byB1c2UgdGhlIE5vbmUgU2VsZWN0b3I6PC9wPgoKICAgIDxibG9ja3F1b3RlPjxwcmU+CiZsdDtmaWxlc2V0IGRpcj0mcXVvdDske3NyY30mcXVvdDsgaW5jbHVkZXM9JnF1b3Q7KiovKi5qYXZhJnF1b3Q7Jmd0OwogICAgJmx0O25vbmUmZ3Q7CiAgICAgICAgJmx0O3ByZXNlbnQgdGFyZ2V0ZGlyPSZxdW90OyR7ZGVzdH0mcXVvdDsvJmd0OwogICAgICAgICZsdDtwcmVzZW50IHRhcmdldGRpcj0mcXVvdDske2Rlc3R9JnF1b3Q7Jmd0OwogICAgICAgICAgICAmbHQ7bWFwcGVyIHR5cGU9JnF1b3Q7Z2xvYiZxdW90OyBmcm9tPSZxdW90OyouamF2YSZxdW90OyB0bz0mcXVvdDsqLmNsYXNzJnF1b3Q7LyZndDsKICAgICAgICAmbHQ7L3ByZXNlbnQmZ3Q7CiAgICAmbHQ7L25vbmUmZ3Q7CiZsdDsvZmlsZXNldCZndDsKPC9wcmU+PC9ibG9ja3F1b3RlPgoKICAgIDxwPlNlbGVjdHMgb25seSBKYXZhIGZpbGVzIHdoaWNoIGRvIG5vdCBoYXZlIGVxdWl2YWxlbnQgamF2YSBvcgogICAgY2xhc3MgZmlsZXMgaW4gdGhlIGRlc3QgZGlyZWN0b3J5LgogICAgPC9wPgoKCiAgICA8YSBuYW1lPSJub3RzZWxlY3QiPjwvYT4KICAgIDxoND5Ob3QgU2VsZWN0b3I8L2g0PgoKICAgIDxwPlRoZSA8Y29kZT4mbHQ7bm90Jmd0OzwvY29kZT4gdGFnIHJldmVyc2VzIHRoZSBtZWFuaW5nIG9mIHRoZQogICAgc2luZ2xlIHNlbGVjdG9yIGl0IGNvbnRhaW5zLgogICAgPC9wPgoKICAgIDxwPkhlcmUgaXMgYW4gZXhhbXBsZSBvZiBob3cgdG8gdXNlIHRoZSBOb3QgU2VsZWN0b3I6PC9wPgoKICAgIDxibG9ja3F1b3RlPjxwcmU+CiZsdDtmaWxlc2V0IGRpcj0mcXVvdDske3NyY30mcXVvdDsgaW5jbHVkZXM9JnF1b3Q7KiovKi5qYXZhJnF1b3Q7Jmd0OwogICAgJmx0O25vdCZndDsKICAgICAgICAmbHQ7Y29udGFpbnMgdGV4dD0mcXVvdDt0ZXN0JnF1b3Q7LyZndDsKICAgICZsdDsvbm90Jmd0OwombHQ7L2ZpbGVzZXQmZ3Q7CjwvcHJlPjwvYmxvY2txdW90ZT4KCiAgICA8cD5TZWxlY3RzIGFsbCB0aGUgZmlsZXMgaW4gdGhlIHNyYyBkaXJlY3RvcnkgdGhhdCBkbyBub3QgY29udGFpbiB0aGUKICAgIHN0cmluZyAidGVzdCIuCiAgICA8L3A+CgoKICAgIDxhIG5hbWU9Im9yc2VsZWN0Ij48L2E+CiAgICA8aDQ+T3IgU2VsZWN0b3I8L2g0PgoKICAgIDxwPlRoZSA8Y29kZT4mbHQ7b3ImZ3Q7PC9jb2RlPiB0YWcgc2VsZWN0cyBmaWxlcyB0aGF0IGFyZQogICAgc2VsZWN0ZWQgYnkgYW55IG9uZSBvZiB0aGUgZWxlbWVudHMgaXQgY29udGFpbnMuIEl0IHJldHVybnMgYXMKICAgIHNvb24gYXMgaXQgZmluZHMgYSBzZWxlY3RvciB0aGF0IHNlbGVjdHMgdGhlIGZpbGUsCiAgICBzbyBpdCBpcyBub3QgZ3VhcmFudGVlZCB0byBjaGVjayBldmVyeSBzZWxlY3Rvci4KICAgIDwvcD4KCiAgICA8cD5IZXJlIGlzIGFuIGV4YW1wbGUgb2YgaG93IHRvIHVzZSB0aGUgT3IgU2VsZWN0b3I6PC9wPgoKICAgIDxibG9ja3F1b3RlPjxwcmU+CiZsdDtmaWxlc2V0IGRpcj0mcXVvdDske2Jhc2VkaXJ9JnF1b3Q7Jmd0OwogICAgJmx0O29yJmd0OwogICAgICAgICZsdDtkZXB0aCBtYXg9JnF1b3Q7MCZxdW90Oy8mZ3Q7CiAgICAgICAgJmx0O2ZpbGVuYW1lIG5hbWU9IioucG5nIi8mZ3Q7CiAgICAgICAgJmx0O2ZpbGVuYW1lIG5hbWU9IiouZ2lmIi8mZ3Q7CiAgICAgICAgJmx0O2ZpbGVuYW1lIG5hbWU9IiouanBnIi8mZ3Q7CiAgICAmbHQ7L29yJmd0OwombHQ7L2ZpbGVzZXQmZ3Q7CjwvcHJlPjwvYmxvY2txdW90ZT4KCiAgICA8cD5TZWxlY3RzIGFsbCB0aGUgZmlsZXMgaW4gdGhlIHRvcCBkaXJlY3RvcnkgYWxvbmcgd2l0aCBhbGwgdGhlCiAgICBpbWFnZSBmaWxlcyBiZWxvdyBpdC4KICAgIDwvcD4KCgogICAgPGEgbmFtZT0ic2VsZWN0b3JzZWxlY3QiPjwvYT4KICAgIDxoND5TZWxlY3RvciBSZWZlcmVuY2U8L2g0PgoKICAgIDxwPlRoZSA8Y29kZT4mbHQ7c2VsZWN0b3ImZ3Q7PC9jb2RlPiB0YWcgaXMgdXNlZCB0byBjcmVhdGUgc2VsZWN0b3JzCiAgICB0aGF0IGNhbiBiZSByZXVzZWQgdGhyb3VnaCByZWZlcmVuY2VzLiBJdCBpcyB0aGUgb25seSBzZWxlY3RvciB3aGljaCBjYW4KICAgIGJlIHVzZWQgb3V0c2lkZSBvZgogICAgYW55IHRhcmdldCwgYXMgYW4gZWxlbWVudCBvZiB0aGUgPGNvZGU+Jmx0O3Byb2plY3QmZ3Q7PC9jb2RlPiB0YWcuIEl0CiAgICBjYW4gY29udGFpbiBvbmx5IG9uZSBvdGhlciBzZWxlY3RvciwgYnV0IG9mIGNvdXJzZSB0aGF0IHNlbGVjdG9yIGNhbgogICAgYmUgYSBjb250YWluZXIuCiAgICA8L3A+CgogICAgPHA+VGhlIDxjb2RlPiZsdDtzZWxlY3RvciZndDs8L2NvZGU+IHRhZyBjYW4gYWxzbyBiZSB1c2VkIHRvIHNlbGVjdAogICAgZmlsZXMgY29uZGl0aW9uYWxseSBiYXNlZCBvbiB3aGV0aGVyIGFuIEFudCBwcm9wZXJ0eSBleGlzdHMgb3Igbm90LgogICAgVGhpcyBmdW5jdGlvbmFsaXR5IGlzIHJlYWxpemVkIHVzaW5nIHRoZSA8Y29kZT4mcXVvdDtpZiZxdW90OzwvY29kZT4gYW5kCiAgICA8Y29kZT4mcXVvdDt1bmxlc3MmcXVvdDs8L2NvZGU+IGF0dHJpYnV0ZXMgaW4gZXhhY3RseSB0aGUgc2FtZSB3YXkgdGhleQogICAgYXJlIHVzZWQgb24gdGFyZ2V0cyBvciBvbiB0aGUgPGNvZGU+Jmx0O2luY2x1ZGUmZ3Q7PC9jb2RlPiBhbmQKICAgIDxjb2RlPiZsdDtleGNsdWRlJmd0OzwvY29kZT4gdGFncyB3aXRoaW4gYQogICAgPGNvZGU+Jmx0O3BhdHRlcm5zZXQmZ3Q7PC9jb2RlPi48L3A+CgogICAgPHRhYmxlIGJvcmRlcj0iMSIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIwIj4KICAgICAgPHRyPgogICAgICAgIDx0ZCB2YWxpZ249InRvcCI+PGI+QXR0cmlidXRlPC9iPjwvdGQ+CiAgICAgICAgPHRkIHZhbGlnbj0idG9wIj48Yj5EZXNjcmlwdGlvbjwvYj48L3RkPgogICAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCI+PGI+UmVxdWlyZWQ8L2I+PC90ZD4KICAgICAgPC90cj4KICAgICAgPHRyPgogICAgICAgIDx0ZCB2YWxpZ249InRvcCI+aWY8L3RkPgogICAgICAgIDx0ZCB2YWxpZ249InRvcCI+QWxsb3cgZmlsZXMgdG8gYmUgc2VsZWN0ZWQgb25seSBpZiB0aGUgbmFtZWQKICAgICAgICAgIHByb3BlcnR5IGlzIHNldC4KICAgICAgICA8L3RkPgogICAgICAgIDx0ZCB2YWxpZ249InRvcCIgYWxpZ249ImNlbnRlciI+Tm88L3RkPgogICAgICA8L3RyPgogICAgICA8dHI+CiAgICAgICAgPHRkIHZhbGlnbj0idG9wIj51bmxlc3M8L3RkPgogICAgICAgIDx0ZCB2YWxpZ249InRvcCI+QWxsb3cgZmlsZXMgdG8gYmUgc2VsZWN0ZWQgb25seSBpZiB0aGUgbmFtZWQKICAgICAgICAgIHByb3BlcnR5IGlzIDxiPm5vdDwvYj4gc2V0LgogICAgICAgIDwvdGQ+CiAgICAgICAgPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0iY2VudGVyIj5ObzwvdGQ+CiAgICAgIDwvdHI+CiAgICA8L3RhYmxlPgoKICAgIDxwPkhlcmUgaXMgYW4gZXhhbXBsZSBvZiBob3cgdG8gdXNlIHRoZSBTZWxlY3RvciBSZWZlcmVuY2U6PC9wPgoKICAgIDxibG9ja3F1b3RlPjxwcmU+CiZsdDtwcm9qZWN0IGRlZmF1bHQ9JnF1b3Q7YWxsJnF1b3Q7IGJhc2VkaXI9JnF1b3Q7Li9hbnQmcXVvdDsmZ3Q7CgogICAgJmx0O3NlbGVjdG9yIGlkPSZxdW90O2NvbXBsZXRlZCZxdW90OyZndDsKICAgICAgICAmbHQ7bm9uZSZndDsKICAgICAgICAgICAgJmx0O2RlcGVuZCB0YXJnZXRkaXI9JnF1b3Q7YnVpbGQvY2xhc3NlcyZxdW90OyZndDsKICAgICAgICAgICAgICAgICZsdDttYXBwZXIgdHlwZT0mcXVvdDtnbG9iJnF1b3Q7IGZyb209JnF1b3Q7Ki5qYXZhJnF1b3Q7IHRvPSZxdW90OyouY2xhc3MmcXVvdDsvJmd0OwogICAgICAgICAgICAmbHQ7L2RlcGVuZCZndDsKICAgICAgICAgICAgJmx0O2RlcGVuZCB0YXJnZXRkaXI9JnF1b3Q7ZG9jcy9tYW51YWwvYXBpJnF1b3Q7Jmd0OwogICAgICAgICAgICAgICAgJmx0O21hcHBlciB0eXBlPSZxdW90O2dsb2ImcXVvdDsgZnJvbT0mcXVvdDsqLmphdmEmcXVvdDsgdG89JnF1b3Q7Ki5odG1sJnF1b3Q7LyZndDsKICAgICAgICAgICAgJmx0Oy9kZXBlbmQmZ3Q7CiAgICAgICAgJmx0Oy9ub25lJmd0OwogICAgJmx0Oy9zZWxlY3RvciZndDsKCiAgICAmbHQ7dGFyZ2V0Jmd0OwogICAgICAgICZsdDt6aXAmZ3Q7CiAgICAgICAgICAgICZsdDtmaWxlc2V0IGRpcj0mcXVvdDtzcmMvbWFpbiZxdW90OyBpbmNsdWRlcz0mcXVvdDsqKi8qLmphdmEmcXVvdDsmZ3Q7CiAgICAgICAgICAgICAgICAmbHQ7c2VsZWN0b3IgcmVmaWQ9JnF1b3Q7Y29tcGxldGVkJnF1b3Q7LyZndDsKICAgICAgICAgICAgJmx0Oy9maWxlc2V0Jmd0OwogICAgICAgICZsdDsvemlwJmd0OwogICAgJmx0Oy90YXJnZXQmZ3Q7CgombHQ7L3Byb2plY3QmZ3Q7CjwvcHJlPjwvYmxvY2txdW90ZT4KCiAgICA8cD5aaXBzIHVwIGFsbCB0aGUgSmF2YSBmaWxlcyB3aGljaCBoYXZlIGFuIHVwLXRvLWRhdGUgZXF1aXZhbGVudAogICAgY2xhc3MgZmlsZSBhbmQgamF2YWRvYyBmaWxlIGFzc29jaWF0ZWQgd2l0aCB0aGVtLgogICAgPC9wPgoKICAgIDxwPkFuZCBhbiBleGFtcGxlIG9mIHNlbGVjdGluZyBmaWxlcyBjb25kaXRpb25hbGx5LCBiYXNlZCBvbiB3aGV0aGVyCiAgICBwcm9wZXJ0aWVzIGFyZSBzZXQ6PC9wPgoKICAgIDxibG9ja3F1b3RlPjxwcmU+CiZsdDtmaWxlc2V0IGRpcj0mcXVvdDske3dvcmtpbmcuY29weX0mcXVvdDsmZ3Q7CiAgICAmbHQ7b3ImZ3Q7CiAgICAgICAgJmx0O3NlbGVjdG9yIGlmPSZxdW90O2luY2x1ZGUudGVzdHMmcXVvdDsmZ3Q7CiAgICAgICAgICAgICZsdDtmaWxlbmFtZSBuYW1lPSZxdW90OyoqLypUZXN0LmNsYXNzJnF1b3Q7Jmd0OwogICAgICAgICZsdDsvc2VsZWN0b3ImZ3Q7CiAgICAgICAgJmx0O3NlbGVjdG9yIGlmPSZxdW90O2luY2x1ZGUuc291cmNlJnF1b3Q7Jmd0OwogICAgICAgICAgICAmbHQ7YW5kJmd0OwogICAgICAgICAgICAgICAgJmx0O2ZpbGVuYW1lIG5hbWU9JnF1b3Q7KiovKi5qYXZhJnF1b3Q7Jmd0OwogICAgICAgICAgICAgICAgJmx0O25vdCZndDsKICAgICAgICAgICAgICAgICAgICAmbHQ7c2VsZWN0b3IgdW5sZXNzPSZxdW90O2luY2x1ZGUudGVzdHMmcXVvdDsmZ3Q7CiAgICAgICAgICAgICAgICAgICAgICAgICZsdDtmaWxlbmFtZSBuYW1lPSZxdW90OyoqLypUZXN0LmphdmEmcXVvdDsmZ3Q7CiAgICAgICAgICAgICAgICAgICAgJmx0Oy9zZWxlY3RvciZndDsKICAgICAgICAgICAgICAgICZsdDsvbm90Jmd0OwogICAgICAgICAgICAmbHQ7L2FuZCZndDsKICAgICAgICAmbHQ7L3NlbGVjdG9yJmd0OwogICAgJmx0Oy9vciZndDsKJmx0Oy9maWxlc2V0Jmd0Owo8L3ByZT48L2Jsb2NrcXVvdGU+CgogICAgPHA+QSBmaWxlc2V0IHRoYXQgY29uZGl0aW9uYWxseSBjb250YWlucyBKYXZhIHNvdXJjZSBmaWxlcyBhbmQgVGVzdAogICAgc291cmNlIGFuZCBjbGFzcyBmaWxlcy48L3A+CgogICAgPGEgbmFtZT0iY3VzdG9tc2VsZWN0Ij48L2E+CiAgICA8aDM+Q3VzdG9tIFNlbGVjdG9yczwvaDM+CgogICAgPHA+WW91IGNhbiB3cml0ZSB5b3VyIG93biBzZWxlY3RvcnMgYW5kIHVzZSB0aGVtIHdpdGhpbiB0aGUgc2VsZWN0b3IKICAgIGNvbnRhaW5lcnMgYnkgc3BlY2lmeWluZyB0aGVtIHdpdGhpbiB0aGUgJmx0O2N1c3RvbSZndDsgdGFnLjwvcD4KCiAgICA8cD5GaXJzdCwgeW91IGhhdmUgdG8gd3JpdGUgeW91ciBzZWxlY3RvciBjbGFzcyBpbiBKYXZhLiBUaGUgb25seQogICAgcmVxdWlyZW1lbnQgaXQgbXVzdCBtZWV0IGluIG9yZGVyIHRvIGJlIGEgc2VsZWN0b3IgaXMgdGhhdCBpdCBpbXBsZW1lbnRzCiAgICB0aGUgPGNvZGU+b3JnLmFwYWNoZS50b29scy5hbnQudHlwZXMuc2VsZWN0b3JzLkZpbGVTZWxlY3RvcjwvY29kZT4KICAgIGludGVyZmFjZSwgd2hpY2ggY29udGFpbnMgYSBzaW5nbGUgbWV0aG9kLiBTZWUKICAgIDxhIGhyZWY9InNlbGVjdG9ycy1wcm9ncmFtLmh0bWwiPlByb2dyYW1taW5nIFNlbGVjdG9ycyBpbiBBbnQ8L2E+IGZvcgogICAgbW9yZSBpbmZvcm1hdGlvbi48L3A+CgogICAgPHA+T25jZSB0aGF0IGlzIHdyaXR0ZW4sIHlvdSBpbmNsdWRlIGl0IGluIHlvdXIgYnVpbGQgZmlsZSBieSB1c2luZwogICAgdGhlIDxjb2RlPiZsdDtjdXN0b20mZ3Q7PC9jb2RlPiB0YWcuCiAgICA8L3A+CgogICAgPHRhYmxlIGJvcmRlcj0iMSIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIwIj4KICAgICAgPHRyPgogICAgICAgIDx0ZCB2YWxpZ249InRvcCI+PGI+QXR0cmlidXRlPC9iPjwvdGQ+CiAgICAgICAgPHRkIHZhbGlnbj0idG9wIj48Yj5EZXNjcmlwdGlvbjwvYj48L3RkPgogICAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCI+PGI+UmVxdWlyZWQ8L2I+PC90ZD4KICAgICAgPC90cj4KICAgICAgPHRyPgogICAgICAgIDx0ZCB2YWxpZ249InRvcCI+Y2xhc3NuYW1lPC90ZD4KICAgICAgICA8dGQgdmFsaWduPSJ0b3AiPlRoZSBuYW1lIG9mIHlvdXIgY2xhc3MgdGhhdCBpbXBsZW1lbnRzCiAgICAgICAgICA8Y29kZT5vcmcuYXBhY2hlLnRvb2xzLmFudC50eXBlcy5zZWxlY3RvcnMuRmlsZVNlbGVjdG9yPC9jb2RlPi4KICAgICAgICA8L3RkPgogICAgICAgIDx0ZCB2YWxpZ249InRvcCIgYWxpZ249ImNlbnRlciI+WWVzPC90ZD4KICAgICAgPC90cj4KICAgICAgPHRyPgogICAgICAgIDx0ZCB2YWxpZ249InRvcCI+Y2xhc3NwYXRoPC90ZD4KICAgICAgICA8dGQgdmFsaWduPSJ0b3AiPlRoZSBjbGFzc3BhdGggdG8gdXNlIGluIG9yZGVyIHRvIGxvYWQgdGhlCiAgICAgICAgICBjdXN0b20gc2VsZWN0b3IgY2xhc3MuIElmIG5laXRoZXIgdGhpcyBjbGFzc3BhdGggbm9yIHRoZQogICAgICAgICAgY2xhc3NwYXRocmVmIGFyZSBzcGVjaWZpZWQsIHRoZSBjbGFzcyB3aWxsIGJlCiAgICAgICAgICBsb2FkZWQgZnJvbSB0aGUgY2xhc3NwYXRoIHRoYXQgQW50IHVzZXMuCiAgICAgICAgPC90ZD4KICAgICAgICA8dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJjZW50ZXIiPk5vPC90ZD4KICAgICAgPC90cj4KICAgICAgPHRyPgogICAgICAgIDx0ZCB2YWxpZ249InRvcCI+Y2xhc3NwYXRocmVmPC90ZD4KICAgICAgICA8dGQgdmFsaWduPSJ0b3AiPkEgcmVmZXJlbmNlIHRvIGEgY2xhc3NwYXRoIHByZXZpb3VzbHkKICAgICAgICAgIGRlZmluZWQuIElmIG5laXRoZXIgdGhpcyByZWZlcmVuY2Ugbm9yIHRoZQogICAgICAgICAgY2xhc3NwYXRoIGFib3ZlIGFyZSBzcGVjaWZpZWQsIHRoZSBjbGFzcyB3aWxsIGJlCiAgICAgICAgICBsb2FkZWQgZnJvbSB0aGUgY2xhc3NwYXRoIHRoYXQgQW50IHVzZXMuCiAgICAgICAgPC90ZD4KICAgICAgICA8dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJjZW50ZXIiPk5vPC90ZD4KICAgICAgPC90cj4KICAgIDwvdGFibGU+CgogICAgPHA+SGVyZSBpcyBob3cgeW91IHVzZSA8Y29kZT4mbHQ7Y3VzdG9tJmd0OzwvY29kZT4gdG8KICAgIHVzZSB5b3VyIGNsYXNzIGFzIGEgc2VsZWN0b3I6CiAgICA8L3A+CgogICAgPGJsb2NrcXVvdGU+PHByZT4KJmx0O2ZpbGVzZXQgZGlyPSZxdW90OyR7bXlkaXJ9JnF1b3Q7IGluY2x1ZGVzPSZxdW90OyoqLyomcXVvdDsmZ3Q7CiAgICAmbHQ7Y3VzdG9tIGNsYXNzbmFtZT0mcXVvdDtjb20ubXlkb21haW4uTXlTZWxlY3RvciZxdW90OyZndDsKICAgICAgICAmbHQ7cGFyYW0gbmFtZT0mcXVvdDtteWF0dHJpYnV0ZSZxdW90OyB2YWx1ZT0mcXVvdDtteXZhbHVlJnF1b3Q7LyZndDsKICAgICZsdDsvY3VzdG9tJmd0OwombHQ7L2ZpbGVzZXQmZ3Q7CjwvcHJlPjwvYmxvY2txdW90ZT4KCiAgICA8cD5BIG51bWJlciBvZiBjb3JlIHNlbGVjdG9ycyBjYW4gYWxzbyBiZSB1c2VkIGFzIGN1c3RvbSBzZWxlY3RvcnMKICAgIGJ5IHNwZWNpZnlpbmcgdGhlaXIgYXR0cmlidXRlcyB1c2luZyAmbHQ7cGFyYW0mZ3Q7IGVsZW1lbnRzLiBUaGVzZQogICAgYXJlPC9wPgoKICAgIDx1bD4KICAgICAgPGxpPjxhIGhyZWY9IiNjb250YWluc3NlbGVjdCI+Q29udGFpbnMgU2VsZWN0b3I8L2E+IHdpdGgKICAgICAgICBjbGFzc25hbWUgPGNvZGU+b3JnLmFwYWNoZS50b29scy5hbnQudHlwZXMuc2VsZWN0b3JzLkNvbnRhaW5zU2VsZWN0b3I8L2NvZGU+CiAgICAgIDxsaT48YSBocmVmPSIjZGF0ZXNlbGVjdCI+RGF0ZSBTZWxlY3RvcjwvYT4gd2l0aAogICAgICAgIGNsYXNzbmFtZSA8Y29kZT5vcmcuYXBhY2hlLnRvb2xzLmFudC50eXBlcy5zZWxlY3RvcnMuRGF0ZVNlbGVjdG9yPC9jb2RlPgogICAgICA8bGk+PGEgaHJlZj0iI2RlcHRoc2VsZWN0Ij5EZXB0aCBTZWxlY3RvcjwvYT4gd2l0aAogICAgICAgIGNsYXNzbmFtZSA8Y29kZT5vcmcuYXBhY2hlLnRvb2xzLmFudC50eXBlcy5zZWxlY3RvcnMuRGVwdGhTZWxlY3RvcjwvY29kZT4KICAgICAgPGxpPjxhIGhyZWY9IiNmaWxlbmFtZXNlbGVjdCI+RmlsZW5hbWUgU2VsZWN0b3I8L2E+IHdpdGgKICAgICAgICBjbGFzc25hbWUgPGNvZGU+b3JnLmFwYWNoZS50b29scy5hbnQudHlwZXMuc2VsZWN0b3JzLkZpbGVuYW1lU2VsZWN0b3I8L2NvZGU+CiAgICAgIDxsaT48YSBocmVmPSIjc2l6ZXNlbGVjdCI+U2l6ZSBTZWxlY3RvcjwvYT4gd2l0aAogICAgICAgIGNsYXNzbmFtZSA8Y29kZT5vcmcuYXBhY2hlLnRvb2xzLmFudC50eXBlcy5zZWxlY3RvcnMuU2l6ZVNlbGVjdG9yPC9jb2RlPgogICAgPC91bD4KCiAgICA8cD5IZXJlIGlzIHRoZSBleGFtcGxlIGZyb20gdGhlIERlcHRoIFNlbGVjdG9yIHNlY3Rpb24gcmV3cml0dGVuCiAgICB0byB1c2UgdGhlIHNlbGVjdG9yIHRocm91Z2ggPGNvZGU+Jmx0O2N1c3RvbSZndDs8L2NvZGU+LjwvcD4KCiAgICA8YmxvY2txdW90ZT48cHJlPgombHQ7ZmlsZXNldCBkaXI9JnF1b3Q7JHtkb2MucGF0aH0mcXVvdDsgaW5jbHVkZXM9JnF1b3Q7KiovKiZxdW90OyZndDsKICAgICZsdDtjdXN0b20gY2xhc3NuYW1lPSZxdW90O29yZy5hcGFjaGUudG9vbHMuYW50LnR5cGVzLnNlbGVjdG9ycy5EZXB0aFNlbGVjdG9yJnF1b3Q7Jmd0OwogICAgICAgICZsdDtwYXJhbSBuYW1lPSZxdW90O21heCZxdW90OyB2YWx1ZT0mcXVvdDsxJnF1b3Q7LyZndDsKICAgICZsdDsvY3VzdG9tJmd0OwombHQ7L2ZpbGVzZXQmZ3Q7CjwvcHJlPjwvYmxvY2txdW90ZT4KCiAgICA8cD5TZWxlY3RzIGFsbCBmaWxlcyBpbiB0aGUgYmFzZSBkaXJlY3RvcnkgYW5kIG9uZSBkaXJlY3RvcnkgYmVsb3cKICAgIHRoYXQuPC9wPgoKICAgIDxwPkZvciBtb3JlIGRldGFpbHMgY29uY2VybmluZyB3cml0aW5nIHlvdXIgb3duIHNlbGVjdG9ycywgY29uc3VsdAogICAgPGEgaHJlZj0ic2VsZWN0b3JzLXByb2dyYW0uaHRtbCI+UHJvZ3JhbW1pbmcgU2VsZWN0b3JzIGluIEFudDwvYT4uPC9wPgoKICAgIDxocj4KICAgIDxwIGFsaWduPSJjZW50ZXIiPkNvcHlyaWdodCAmY29weTsgMjAwMi0yMDAzIEFwYWNoZSBTb2Z0d2FyZQogICAgRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyBSZXNlcnZlZC48L3A+CgogIDwvYm9keT4KCjwvaHRtbD4KCgoK