PGh0bWw+Cgo8aGVhZD4KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1MYW5ndWFnZSIgY29udGVudD0iZW4tdXMiPgo8bWV0YSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9Ik1pY3Jvc29mdCBGcm9udFBhZ2UgNS4wIj4KPG1ldGEgbmFtZT0iUHJvZ0lkIiBjb250ZW50PSJGcm9udFBhZ2UuRWRpdG9yLkRvY3VtZW50Ij4KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4KPHRpdGxlPlN5c3RlbSBMaWJyYXJ5IFJlZmVyZW5jZTwvdGl0bGU+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4uLy4uLy4uL2RvYy9zcmMvbWluaW1hbC5jc3MiPgo8L2hlYWQ+Cgo8Ym9keT4KCjx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSI1IiBjZWxsc3BhY2luZz0iMCIgc3R5bGU9ImJvcmRlci1jb2xsYXBzZTogY29sbGFwc2UiIGJvcmRlcmNvbG9yPSIjMTExMTExIiB3aWR0aD0iNjM3Ij4KICA8dHI+CiAgICA8dGQgd2lkdGg9IjI3NyI+CjxhIGhyZWY9Ii4uLy4uLy4uL2luZGV4Lmh0bSI+CjxpbWcgc3JjPSIuLi8uLi8uLi9ib29zdC5wbmciIGFsdD0iYm9vc3QucG5nICg2ODk3IGJ5dGVzKSIgYWxpZ249Im1pZGRsZSIgd2lkdGg9IjI3NyIgaGVpZ2h0PSI4NiIgYm9yZGVyPSIwIj48L2E+PC90ZD4KICAgIDx0ZCB3aWR0aD0iMzM3IiBhbGlnbj0ibWlkZGxlIj4KICAgIDxmb250IHNpemU9IjciPlN5c3RlbSBMaWJyYXJ5PC9mb250PgogICAgPC90ZD4KICA8L3RyPgo8L3RhYmxlPgoKPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjUiIGNlbGxzcGFjaW5nPSIwIiBzdHlsZT0iYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZSIgYm9yZGVyY29sb3I9IiMxMTExMTEiIGJnY29sb3I9IiNEN0VFRkYiIHdpZHRoPSIxMDAlIj4KICA8dHI+CiAgICA8dGQ+PGEgaHJlZj0iLi4vLi4vLi4vaW5kZXguaHRtIj5Cb29zdCBIb21lPC9hPiZuYnNwOyZuYnNwOyZuYnNwOyA8YSBocmVmPSJpbmRleC5odG1sIj4KICAgIExpYnJhcnkgSG9tZTwvYT4mbmJzcDsmbmJzcDsgVHV0b3JpYWwmbmJzcDsmbmJzcDsgPGEgaHJlZj0icmVmZXJlbmNlLmh0bWwiPgogICAgUmVmZXJlbmNlPC9hPjwvdGQ+CiAgPC90cj4KPC90YWJsZT4KCjx0YWJsZSBib3JkZXI9IjEiIGNlbGxwYWRkaW5nPSI1IiBjZWxsc3BhY2luZz0iMCIgc3R5bGU9ImJvcmRlci1jb2xsYXBzZTogY29sbGFwc2UiIGJvcmRlcmNvbG9yPSIjMTExMTExIiBhbGlnbj0icmlnaHQiPgogIDx0cj4KICAgIDx0ZCB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0Q3RUVGRiIgYWxpZ249ImNlbnRlciI+CiAgICAgIDxpPjxiPkNvbnRlbnRzPC9iPjwvaT48L3RkPgogIDwvdHI+CiAgPHRyPgogICAgPHRkIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjRThGNUZGIj4KICAgICAgPGEgaHJlZj0iI0ludHJvZHVjdGlvbiI+SW50cm9kdWN0aW9uPC9hPjxicj4KICAgICAgPGEgaHJlZj0iI01hY3JvcyI+TWFjcm9zPC9hPjxicj4KICAgICAgPGEgaHJlZj0iI0RlcHJlY2F0ZWQtbmFtZXMiPkRlcHJlY2F0ZWQgbmFtZXM8L2E+PGJyPgogICAgICA8YSBocmVmPSIjQnJlYWtpbmctY2hhbmdlcyI+QnJlYWtpbmcgY2hhbmdlczwvYT48YnI+CiAgICAgIDxhIGhyZWY9IiNIZWFkZXItZXJyb3JfY29kZSI+SGVhZGVyICZsdDtib29zdC9zeXN0ZW0vZXJyb3JfY29kZS5ocHAmZ3Q7PC9hPjxicj4KICAgICAgPGEgaHJlZj0iI0NsYXNzLWVycm9yX2NhdGVnb3J5Ij5DbGFzcyA8Y29kZT5lcnJvcl9jYXRlZ29yeTwvY29kZT48L2E+PGJyPgogICAgICAmbmJzcDsmbmJzcDsmbmJzcDs8YSBocmVmPSIjQ2xhc3MtZXJyb3JfY2F0ZWdvcnktc3lub3BzaXMiPkNsYXNzIDxjb2RlPmVycm9yX2NhdGVnb3J5PC9jb2RlPiBzeW5vcHNpczwvYT48YnI+CiAgICAgICZuYnNwOyZuYnNwOyZuYnNwOzxhIGhyZWY9IiNDbGFzcy1lcnJvcl9jYXRlZ29yeS12aXJ0dWFsLW1lbWJlcnMiPkNsYXNzIDxjb2RlPmVycm9yX2NhdGVnb3J5PC9jb2RlPiB2aXJ0dWFsIG1lbWJlcnM8L2E+PGJyPgogICAgICAmbmJzcDsmbmJzcDsmbmJzcDs8YSBocmVmPSIjQ2xhc3MtZXJyb3JfY2F0ZWdvcnktbm9uLXZpcnR1YWwtbWVtYmVycyI+Q2xhc3MgPGNvZGU+ZXJyb3JfY2F0ZWdvcnk8L2NvZGU+IG5vbi12aXJ0dWFsIG1lbWJlcnM8L2E+PGJyPgombmJzcDsmbmJzcDsgPGEgaHJlZj0iI0NsYXNzLWVycm9yX2NhdGVnb3J5LW5vbi1tZW1iZXItZnVuY3Rpb25zIj5DbGFzcyA8Y29kZT5lcnJvcl9jYXRlZ29yeTwvY29kZT4gCiAgICAgIG5vbi1tZW1iZXIgZnVuY3Rpb25zPC9hPjxicj4KICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7PGEgaHJlZj0iI0NsYXNzLWVycm9yX2NhdGVnb3J5LXByZWRlZmluZWQtb2JqZWN0cyI+Q2xhc3MgPGNvZGU+ZXJyb3JfY2F0ZWdvcnk8L2NvZGU+IHByZWRlZmluZWQgb2JqZWN0czwvYT48YnI+CiAgICAgIDxhIGhyZWY9IiNDbGFzcy1lcnJvcl9jb2RlIj5DbGFzcyA8Y29kZT5lcnJvcl9jb2RlPC9jb2RlPjwvYT48YnI+CiAgICAgICZuYnNwOyZuYnNwOyZuYnNwOzxhIGhyZWY9IiNDbGFzcy1lcnJvcl9jb2RlLXN5bm9wc2lzIj5DbGFzcyA8Y29kZT5lcnJvcl9jb2RlPC9jb2RlPiBzeW5vcHNpczwvYT48YnI+CiAgICAgICZuYnNwOyZuYnNwOyZuYnNwOzxhIGhyZWY9IiNDbGFzcy1lcnJvcl9jb2RlLWNvbnN0cnVjdG9ycyI+Q2xhc3MgPGNvZGU+ZXJyb3JfY29kZTwvY29kZT4gY29uc3RydWN0b3JzPC9hPjxicj4KICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7PGEgaHJlZj0iI0NsYXNzLWVycm9yX2NvZGUtbW9kaWZpZXJzIj5DbGFzcyA8Y29kZT5lcnJvcl9jb2RlPC9jb2RlPiBtb2RpZmllcnM8L2E+PGJyPgogICAgICAmbmJzcDsmbmJzcDsmbmJzcDs8YSBocmVmPSIjQ2xhc3MtZXJyb3JfY29kZS1vYnNlcnZlcnMiPkNsYXNzIDxjb2RlPmVycm9yX2NvZGU8L2NvZGU+IG9ic2VydmVyczwvYT48YnI+CiAgICAgIDxhIGhyZWY9IiNDbGFzcy1lcnJvcl9jb25kaXRpb24iPkNsYXNzIDxjb2RlPmVycm9yX2NvbmRpdGlvbjwvY29kZT48L2E+PGJyPgogICAgICAmbmJzcDsmbmJzcDsmbmJzcDs8YSBocmVmPSIjQ2xhc3MtZXJyb3JfY29uZGl0aW9uLXN5bm9wc2lzIj5DbGFzcyA8Y29kZT5lcnJvcl9jb25kaXRpb248L2NvZGU+IHN5bm9wc2lzPC9hPjxicj4KICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7PGEgaHJlZj0iI0NsYXNzLWVycm9yX2NvbmRpdGlvbi1jb25zdHJ1Y3RvcnMiPkNsYXNzIDxjb2RlPmVycm9yX2NvbmRpdGlvbjwvY29kZT4gY29uc3RydWN0b3JzPC9hPjxicj4KICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7PGEgaHJlZj0iI0NsYXNzLWVycm9yX2NvbmRpdGlvbi1tb2RpZmllcnMiPkNsYXNzIDxjb2RlPmVycm9yX2NvbmRpdGlvbjwvY29kZT4gbW9kaWZpZXJzPC9hPjxicj4KICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7PGEgaHJlZj0iI0NsYXNzLWVycm9yX2NvbmRpdGlvbi1vYnNlcnZlcnMiPkNsYXNzIDxjb2RlPmVycm9yX2NvbmRpdGlvbjwvY29kZT4gb2JzZXJ2ZXJzPC9hPjxicj4KICAgICAgPGEgaHJlZj0iI3Rocm93cy1vYmplY3QiPjxjb2RlPnRocm93czwvY29kZT4gb2JqZWN0PC9hPjxicj4KICAgICAgPGEgaHJlZj0iI1NlbWFudGljcy1vZi10aHJvd3MiPlNlbWFudGljcyBvZiA8Y29kZT50aHJvd3M8L2NvZGU+IG9iamVjdDwvYT48YnI+CiAgICAgIDxhIGhyZWY9IiNOb24tbWVtYmVyLWZ1bmN0aW9ucyI+Tm9uLW1lbWJlciBmdW5jdGlvbnM8L2E+PGJyPgogICAgICA8YSBocmVmPSIjSGVhZGVyLXN5c3RlbV9lcnJvciI+SGVhZGVyICZsdDtib29zdC9zeXN0ZW0vc3lzdGVtX2Vycm9yLmhwcCZndDs8L2E+PGJyPgogICAgICAmbmJzcDsmbmJzcDsmbmJzcDs8YSBocmVmPSIjQ2xhc3Mtc3lzdGVtX2Vycm9yIj5DbGFzcyA8Y29kZT5zeXN0ZW1fZXJyb3I8L2NvZGU+PC9hPjxicj4KICAgIDwvdGQ+CiAgPC90cj4KPC90YWJsZT4KCjxoMj48YSBuYW1lPSJJbnRyb2R1Y3Rpb24iPkludHJvZHVjdGlvbjwvYT48L2gyPgoKPHA+VGhpcyByZWZlcmVuY2UgZG9jdW1lbnRhdGlvbiBkZXNjcmliZXMgY29tcG9uZW50cyB0aGF0Jm5ic3A7IApwcm9ncmFtcyBtYXkgdXNlIHRvIHJlcG9ydCBlcnJvciBjb25kaXRpb25zIG9yaWdpbmF0aW5nIGZyb20gdGhlIG9wZXJhdGluZyAKc3lzdGVtIG9yIG90aGVyIGxvdy1sZXZlbCBhcHBsaWNhdGlvbiBwcm9ncmFtIGludGVyZmFjZXMuPC9wPgo8cD5Cb29zdC5TeXN0ZW0gbGlicmFyeSBjb21wb25lbnRzIG5ldmVyIGNoYW5nZSB0aGUgdmFsdWUgb2YgPGNvZGU+CmVycm5vPC9jb2RlPi48L3A+CjxoMj48YSBuYW1lPSJNYWNyb3MiPk1hY3JvczwvYT48L2gyPgo8cD5Vc2VycyBtYXkgZGVmaW5lZCB0aGUgZm9sbG93aW5nIG1hY3JvcyBpZiBkZXNpcmVkLiBTZW5zaWJsZSBkZWZhdWx0cyBhcmUgCnByb3ZpZGVkLCBzbyB1c2VycyBtYXkgaWdub3JlIHRoZXNlIG1hY3JvcyBpZiB0aGV5IHByZWZlci48L3A+Cjx0YWJsZSBib3JkZXI9IjEiIGNlbGxwYWRkaW5nPSI1IiBjZWxsc3BhY2luZz0iMCIgc3R5bGU9ImJvcmRlci1jb2xsYXBzZTogY29sbGFwc2UiIGJvcmRlcmNvbG9yPSIjMTExMTExIiBoZWlnaHQ9IjM2OCI+CiAgPHRyPgogICAgPHRkIGhlaWdodD0iMTYiPjxiPjxpPk1hY3JvIE5hbWU8L2k+PC9iPjwvdGQ+CiAgICA8dGQgaGVpZ2h0PSIxNiI+PGI+PGk+RGVmYXVsdDwvaT48L2I+PC90ZD4KICAgIDx0ZCBoZWlnaHQ9IjE2Ij48Yj48aT5FZmZlY3QgaWYgZGVmaW5lZDwvaT48L2I+PC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PSI2NCI+PGNvZGU+Qk9PU1RfU1lTVEVNX0RZTl9MSU5LPC9jb2RlPjwvdGQ+CiAgICA8dGQgdmFsaWduPSJ0b3AiIGhlaWdodD0iNjQiPkRlZmluZWQgaWYgPGNvZGU+Qk9PU1RfQUxMX0RZTl9MSU5LPC9jb2RlPiBpcyBkZWZpbmVkLCAKICAgIG90aGVyd2lzZSBub3QgZGVmaW5lZC48L3RkPgogICAgPHRkIHZhbGlnbj0idG9wIiBoZWlnaHQ9IjY0Ij5Cb29zdC5TeXN0ZW0gbGlicmFyeSBpcyBkeW5hbWljYWxseSBsaW5rZWQuIElmIG5vdCBkZWZpbmVkLCAKICAgIHN0YXRpYyBsaW5raW5nIGlzIGFzc3VtZWQuPC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PSI0NyI+PGNvZGU+Qk9PU1RfU1lTVEVNX05PX0xJQjwvY29kZT48L3RkPgogICAgPHRkIHZhbGlnbj0idG9wIiBoZWlnaHQ9IjQ3Ij5EZWZpbmVkIGlmIDxjb2RlPkJPT1NUX0FMTF9OT19MSUI8L2NvZGU+IGlzIGRlZmluZWQsIAogICAgb3RoZXJ3aXNlIG5vdCBkZWZpbmVkLjwvdGQ+CiAgICA8dGQgdmFsaWduPSJ0b3AiIGhlaWdodD0iNDciPkJvb3N0LlN5c3RlbSBsaWJyYXJ5IGRvZXMgbm90IHVzZSB0aGUgQm9vc3QgYXV0by1saW5rIAogICAgZmFjaWxpdHkuPC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PSIzMiI+PGNvZGU+Qk9PU1RfU1lTVEVNX05PX0RFUFJFQ0FURUQ8L2NvZGU+PC90ZD4KICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PSIzMiI+Tm90IGRlZmluZWQuPC90ZD4KICAgIDx0ZCB2YWxpZ249InRvcCIgaGVpZ2h0PSIzMiI+RGVwcmVjYXRlZCBmZWF0dXJlcyBhcmUgZXhjbHVkZWQuPC90ZD4KICA8L3RyPgogIDwvdGFibGU+CjxoMj48YSBuYW1lPSJEZXByZWNhdGVkLW5hbWVzIj5EZXByZWNhdGVkIG5hbWVzPC9hPjwvaDI+CjxwPkluIHRoZSBwcm9jZXNzIG9mIGFkZGluZyBCb29zdC5TeXN0ZW0gdG8gQysrMHggc3RhbmRhcmQgbGlicmFyeSwgdGhlIEMrKyAKY29tbWl0dGVlIGNoYW5nZWQgc29tZSAgCm5hbWVzLiBUbyBlYXNlIHRyYW5zaXRpb24sIEJvb3N0LlN5c3RlbSBkZXByZWNhdGVzIHRoZSBvbGQgCm5hbWVzLCBidXQgY29udGludWVzIHRvIHByb3ZpZGUgdGhlbSB1bmxlc3MgbWFjcm8gPGNvZGU+Qk9PU1RfU1lTVEVNX05PX0RFUFJFQ0FURUQ8L2NvZGU+IAppcyBkZWZpbmVkLjwvcD4KPHRhYmxlIGJvcmRlcj0iMSIgY2VsbHBhZGRpbmc9IjUiIGNlbGxzcGFjaW5nPSIxIiBzdHlsZT0iYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZSIgYm9yZGVyY29sb3I9IiMxMTExMTEiPgogIDx0cj4KICAgIDx0ZD48Yj48aT5PbGQgdXNhZ2UsIG5vdyBkZXByZWNhdGVkPC9pPjwvYj48L3RkPgogICAgPHRkPjxiPjxpPlJlcGxhY2VtZW50PC9pPjwvYj48L3RkPgogIDwvdHI+CiAgPHRyPgogICAgPHRkPjxjb2RlPmdldF9nZW5lcmljX2NhdGVnb3J5KCk8L2NvZGU+PC90ZD4KICAgIDx0ZD48Y29kZT5nZW5lcmljX2NhdGVnb3J5KCk8L2NvZGU+PC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZD48Y29kZT5nZXRfc3lzdGVtX2NhdGVnb3J5KCk8L2NvZGU+PC90ZD4KICAgIDx0ZD48Y29kZT5zeXN0ZW1fY2F0ZWdvcnkoKTwvY29kZT48L3RkPgogIDwvdHI+CiAgPHRyPgogICAgPHRkPjxjb2RlPm5hbWVzcGFjZSBwb3NpeDwvY29kZT48L3RkPgogICAgPHRkPjxjb2RlPm5hbWVzcGFjZSBlcnJjPC9jb2RlPjwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQ+PGNvZGU+bmFtZXNwYWNlIHBvc2l4X2Vycm9yPC9jb2RlPjwvdGQ+CiAgICA8dGQ+PGNvZGU+bmFtZXNwYWNlIGVycmM8L2NvZGU+PC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZD48Y29kZT5lbnVtIHBvc2l4X2Vycm5vPC9jb2RlPjwvdGQ+CiAgICA8dGQ+PGNvZGU+ZW51bSBlcnJjX3Q8L2NvZGU+PC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZD48Y29kZT5nZXRfcG9zaXhfY2F0ZWdvcnkoKTwvY29kZT48L3RkPgogICAgPHRkPjxjb2RlPmdlbmVyaWNfY2F0ZWdvcnkoKTwvY29kZT48L3RkPgogIDwvdHI+CiAgPHRyPgogICAgPHRkPjxjb2RlPnBvc2l4X2NhdGVnb3J5PC9jb2RlPjwvdGQ+CiAgICA8dGQ+PGNvZGU+Z2VuZXJpY19jYXRlZ29yeSgpPC9jb2RlPjwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQ+PGNvZGU+ZXJybm9fZWNhdDwvY29kZT48L3RkPgogICAgPHRkPjxjb2RlPmdlbmVyaWNfY2F0ZWdvcnkoKTwvY29kZT48L3RkPgogIDwvdHI+CiAgPHRyPgogICAgPHRkPjxjb2RlPm5hdGl2ZV9lY2F0PC9jb2RlPjwvdGQ+CiAgICA8dGQ+PGNvZGU+c3lzdGVtX2NhdGVnb3J5KCk8L2NvZGU+PC90ZD4KICA8L3RyPgo8L3RhYmxlPgo8aDI+PGEgbmFtZT0iQnJlYWtpbmctY2hhbmdlcyI+QnJlYWtpbmcgY2hhbmdlczwvYT48L2gyPgo8cD5Ud28gc3RhdGljIGNvbnN0cyBhcmUgcmVwbGFjZWQgYnkgZnVuY3Rpb25zLiBUaGVzZSBhcmUgYnJlYWtpbmcgY2hhbmdlcyBiZXN0IApmaXhlZCBieSBnbG9iYWxseSBhZGRpbmcgKCkgdG8gdGhlc2UgbmFtZXMgdG8gdHVybiB0aGVtIGludG8gZnVuY3Rpb24gY2FsbHMuPC9wPgo8dGFibGUgYm9yZGVyPSIxIiBjZWxscGFkZGluZz0iNSIgY2VsbHNwYWNpbmc9IjEiIHN0eWxlPSJib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlIiBib3JkZXJjb2xvcj0iIzExMTExMSI+CiAgPHRyPgogICAgPHRkPjxiPjxpPk9sZCB1c2FnZSwgbm93IGJyb2tlbjwvaT48L2I+PC90ZD4KICAgIDx0ZD48Yj48aT5SZXBsYWNlbWVudDwvaT48L2I+PC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZD48Y29kZT5nZW5lcmljX2NhdGVnb3J5PC9jb2RlPjwvdGQ+CiAgICA8dGQ+PGNvZGU+Z2VuZXJpY19jYXRlZ29yeSgpPC9jb2RlPjwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQ+PGNvZGU+c3lzdGVtX2NhdGVnb3J5PC9jb2RlPjwvdGQ+CiAgICA8dGQ+PGNvZGU+c3lzdGVtX2NhdGVnb3J5KCk8L2NvZGU+PC90ZD4KICA8L3RyPgogIDwvdGFibGU+CjxwPlVzZXItZGVmaW5lZCBCT09TVF9QT1NJWF9BUEkgYW5kIEJPT1NUX1dJTkRPV1NfQVBJIG1hY3JvcyBhcmUgbm8gbG9uZ2VyIHN1cHBvcnRlZC48L3A+CjxoMj48YSBuYW1lPSJIZWFkZXItZXJyb3JfY29kZSI+SGVhZGVyICZsdDtib29zdC9zeXN0ZW0vZXJyb3JfY29kZS5ocHAmZ3Q7PC9hPjwvaDI+CjxoMz4mbHQ7Ym9vc3Qvc3lzdGVtL2Vycm9yX2NvZGUuaHBwJmd0OyBzeW5vcHNpczwvaDM+CjxibG9ja3F1b3RlPgo8cHJlPm5hbWVzcGFjZSBib29zdAp7CiAgbmFtZXNwYWNlIHN5c3RlbQogIHsKICAgIGNsYXNzIDxhIGhyZWY9IiNDbGFzcy1lcnJvcl9jYXRlZ29yeSI+ZXJyb3JfY2F0ZWdvcnk8L2E+OwogICAgY2xhc3MgPGEgaHJlZj0iI0NsYXNzLWVycm9yX2NvZGUiPmVycm9yX2NvZGU8L2E+OwogICAgY2xhc3MgPGEgaHJlZj0iI0NsYXNzLWVycm9yX2NvbmRpdGlvbiI+ZXJyb3JfY29uZGl0aW9uPC9hPjsKCiAgICAvLyAgIkNvbmNlcHQiIGhlbHBlcnMKICAgIHRlbXBsYXRlPCBjbGFzcyBUPSIiID4KICAgICAgc3RydWN0IGlzX2Vycm9yX2NvZGVfZW51bSB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gZmFsc2U7IH07CgogICAgdGVtcGxhdGU8IGNsYXNzIFQ9IiIgPgogICAgICBzdHJ1Y3QgaXNfZXJyb3JfY29uZGl0aW9uX2VudW0geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IGZhbHNlOyB9OwoKICAgIC8vICBnZW5lcmljIGVycm9yX2NvbmRpdGlvbnMKICAgIG5hbWVzcGFjZSBlcnJjCiAgICB7CiAgICAgIGVudW0gZXJyY190CiAgICAgIHsKICAgICAgICBzdWNjZXNzID0gMCwKICAgICAgICBhZGRyZXNzX2ZhbWlseV9ub3Rfc3VwcG9ydGVkLCAgIC8vRUFGTk9TVVBQT1JUCiAgICAgICAgYWRkcmVzc19pbl91c2UsICAgICAgICAgICAgICAgICAvL0VBRERSSU5VU0UKICAgICAgICBhZGRyZXNzX25vdF9hdmFpbGFibGUsICAgICAgICAgIC8vRUFERFJOT1RBVkFJTAogICAgICAgIGFscmVhZHlfY29ubmVjdGVkLCAgICAgICAgICAgICAgLy9FSVNDT05OCiAgICAgICAgYXJndW1lbnRfbGlzdF90b29fbG9uZywgICAgICAgICAvL0UyQklHCiAgICAgICAgYXJndW1lbnRfb3V0X29mX2RvbWFpbiwgICAgICAgICAvL0VET00KICAgICAgICBiYWRfYWRkcmVzcywgICAgICAgICAgICAgICAgICAgIC8vRUZBVUxUCiAgICAgICAgYmFkX2ZpbGVfZGVzY3JpcHRvciwgICAgICAgICAgICAvL0VCQURGCiAgICAgICAgYmFkX21lc3NhZ2UsICAgICAgICAgICAgICAgICAgICAvL0VCQURNU0cKICAgICAgICBicm9rZW5fcGlwZSwgICAgICAgICAgICAgICAgICAgIC8vRVBJUEUKICAgICAgICBjb25uZWN0aW9uX2Fib3J0ZWQsICAgICAgICAgICAgIC8vRUNPTk5BQk9SVEVECiAgICAgICAgY29ubmVjdGlvbl9hbHJlYWR5X2luX3Byb2dyZXNzLCAvL0VBTFJFQURZCiAgICAgICAgY29ubmVjdGlvbl9yZWZ1c2VkLCAgICAgICAgICAgICAvL0VDT05OUkVGVVNFRAogICAgICAgIGNvbm5lY3Rpb25fcmVzZXQsICAgICAgICAgICAgICAgLy9FQ09OTlJFU0VUCiAgICAgICAgY3Jvc3NfZGV2aWNlX2xpbmssICAgICAgICAgICAgICAvL0VYREVWCiAgICAgICAgZGVzdGluYXRpb25fYWRkcmVzc19yZXF1aXJlZCwgICAvL0VERVNUQUREUlJFUQogICAgICAgIGRldmljZV9vcl9yZXNvdXJjZV9idXN5LCAgICAgICAgLy9FQlVTWQogICAgICAgIGRpcmVjdG9yeV9ub3RfZW1wdHksICAgICAgICAgICAgLy9FTk9URU1QVFkKICAgICAgICBleGVjdXRhYmxlX2Zvcm1hdF9lcnJvciwgICAgICAgIC8vRU5PRVhFQwogICAgICAgIGZpbGVfZXhpc3RzLCAgICAgICAgICAgICAgICAgICAgLy9FRVhJU1QKICAgICAgICBmaWxlX3Rvb19sYXJnZSwgICAgICAgICAgICAgICAgIC8vRUZCSUcKICAgICAgICBmaWxlbmFtZV90b29fbG9uZywgICAgICAgICAgICAgIC8vRU5BTUVUT09MT05HCiAgICAgICAgZnVuY3Rpb25fbm90X3N1cHBvcnRlZCwgICAgICAgICAvL0VOT1NZUwogICAgICAgIGhvc3RfdW5yZWFjaGFibGUsICAgICAgICAgICAgICAgLy9FSE9TVFVOUkVBQ0gKICAgICAgICBpZGVudGlmaWVyX3JlbW92ZWQsICAgICAgICAgICAgIC8vRUlEUk0KICAgICAgICBpbGxlZ2FsX2J5dGVfc2VxdWVuY2UsICAgICAgICAgIC8vRUlMU0VRCiAgICAgICAgaW5hcHByb3ByaWF0ZV9pb19jb250cm9sX29wZXJhdGlvbiwvL0VOT1RUWQogICAgICAgIGludGVycnVwdGVkLCAgICAgICAgICAgICAgICAgICAgLy9FSU5UUgogICAgICAgIGludmFsaWRfYXJndW1lbnQsICAgICAgICAgICAgICAgLy9FSU5WQUwKICAgICAgICBpbnZhbGlkX3NlZWssICAgICAgICAgICAgICAgICAgIC8vRVNQSVBFCiAgICAgICAgaW9fZXJyb3IsICAgICAgICAgICAgICAgICAgICAgICAvL0VJTwogICAgICAgIGlzX2FfZGlyZWN0b3J5LCAgICAgICAgICAgICAgICAgLy9FSVNESVIKICAgICAgICBtZXNzYWdlX3NpemUsICAgICAgICAgICAgICAgICAgIC8vRU1TR1NJWkUKICAgICAgICBuZXR3b3JrX2Rvd24sICAgICAgICAgICAgICAgICAgIC8vRU5FVERPV04KICAgICAgICBuZXR3b3JrX3Jlc2V0LCAgICAgICAgICAgICAgICAgIC8vRU5FVFJFU0VUCiAgICAgICAgbmV0d29ya191bnJlYWNoYWJsZSwgICAgICAgICAgICAvL0VORVRVTlJFQUNICiAgICAgICAgbm9fYnVmZmVyX3NwYWNlLCAgICAgICAgICAgICAgICAvL0VOT0JVRlMKICAgICAgICBub19jaGlsZF9wcm9jZXNzLCAgICAgICAgICAgICAgIC8vRUNISUxECiAgICAgICAgbm9fbGluaywgICAgICAgICAgICAgICAgICAgICAgICAvL0VOT0xJTksKICAgICAgICBub19sb2NrX2F2YWlsYWJsZSwgICAgICAgICAgICAgIC8vRU5PTENLCiAgICAgICAgbm9fbWVzc2FnZV9hdmFpbGFibGUsICAgICAgICAgICAvL0VOT0RBVEEKICAgICAgICBub19tZXNzYWdlLCAgICAgICAgICAgICAgICAgICAgIC8vRU5PTVNHCiAgICAgICAgbm9fcHJvdG9jb2xfb3B0aW9uLCAgICAgICAgICAgICAvL0VOT1BST1RPT1BUCiAgICAgICAgbm9fc3BhY2Vfb25fZGV2aWNlLCAgICAgICAgICAgICAvL0VOT1NQQwogICAgICAgIG5vX3N0cmVhbV9yZXNvdXJjZXMsICAgICAgICAgICAgLy9FTk9TUgogICAgICAgIG5vX3N1Y2hfZGV2aWNlX29yX2FkZHJlc3MsICAgICAgLy9FTlhJTwogICAgICAgIG5vX3N1Y2hfZGV2aWNlLCAgICAgICAgICAgICAgICAgLy9FTk9ERVYKICAgICAgICBub19zdWNoX2ZpbGVfb3JfZGlyZWN0b3J5LCAgICAgIC8vRU5PRU5UCiAgICAgICAgbm9fc3VjaF9wcm9jZXNzLCAgICAgICAgICAgICAgICAvL0VTUkNICiAgICAgICAgbm90X2FfZGlyZWN0b3J5LCAgICAgICAgICAgICAgICAvL0VOT1RESVIKICAgICAgICBub3RfYV9zb2NrZXQsICAgICAgICAgICAgICAgICAgIC8vRU5PVFNPQ0sKICAgICAgICBub3RfYV9zdHJlYW0sICAgICAgICAgICAgICAgICAgIC8vRU5PU1RSCiAgICAgICAgbm90X2Nvbm5lY3RlZCwgICAgICAgICAgICAgICAgICAvL0VOT1RDT05OCiAgICAgICAgbm90X2Vub3VnaF9tZW1vcnksICAgICAgICAgICAgICAvL0VOT01FTQogICAgICAgIG5vdF9zdXBwb3J0ZWQsICAgICAgICAgICAgICAgICAgLy9FTk9UU1VQCiAgICAgICAgb3BlcmF0aW9uX2NhbmNlbGVkLCAgICAgICAgICAgICAvL0VDQU5DRUxFRAogICAgICAgIG9wZXJhdGlvbl9pbl9wcm9ncmVzcywgICAgICAgICAgLy9FSU5QUk9HUkVTUwogICAgICAgIG9wZXJhdGlvbl9ub3RfcGVybWl0dGVkLCAgICAgICAgLy9FUEVSTQogICAgICAgIG9wZXJhdGlvbl9ub3Rfc3VwcG9ydGVkLCAgICAgICAgLy9FT1BOT1RTVVBQCiAgICAgICAgb3BlcmF0aW9uX3dvdWxkX2Jsb2NrLCAgICAgICAgICAvL0VXT1VMREJMT0NLCiAgICAgICAgb3duZXJfZGVhZCwgICAgICAgICAgICAgICAgICAgICAvL0VPV05FUkRFQUQKICAgICAgICBwZXJtaXNzaW9uX2RlbmllZCwgICAgICAgICAgICAgIC8vRUFDQ0VTCiAgICAgICAgcHJvdG9jb2xfZXJyb3IsICAgICAgICAgICAgICAgICAvL0VQUk9UTwogICAgICAgIHByb3RvY29sX25vdF9zdXBwb3J0ZWQsICAgICAgICAgLy9FUFJPVE9OT1NVUFBPUlQKICAgICAgICByZWFkX29ubHlfZmlsZV9zeXN0ZW0sICAgICAgICAgIC8vRVJPRlMKICAgICAgICByZXNvdXJjZV9kZWFkbG9ja193b3VsZF9vY2N1ciwgIC8vRURFQURMSwogICAgICAgIHJlc291cmNlX3VuYXZhaWxhYmxlX3RyeV9hZ2FpbiwgLy9FQUdBSU4KICAgICAgICByZXN1bHRfb3V0X29mX3JhbmdlLCAgICAgICAgICAgIC8vRVJBTkdFCiAgICAgICAgc3RhdGVfbm90X3JlY292ZXJhYmxlLCAgICAgICAgICAvL0VOT1RSRUNPVkVSQUJMRQogICAgICAgIHN0cmVhbV90aW1lb3V0LCAgICAgICAgICAgICAgICAgLy9FVElNRQogICAgICAgIHRleHRfZmlsZV9idXN5LCAgICAgICAgICAgICAgICAgLy9FVFhUQlNZCiAgICAgICAgdGltZWRfb3V0LCAgICAgICAgICAgICAgICAgICAgICAvL0VUSU1FRE9VVAogICAgICAgIHRvb19tYW55X2ZpbGVzX29wZW5faW5fc3lzdGVtLCAgLy9FTkZJTEUKICAgICAgICB0b29fbWFueV9maWxlc19vcGVuLCAgICAgICAgICAgIC8vRU1GSUxFCiAgICAgICAgdG9vX21hbnlfbGlua3MsICAgICAgICAgICAgICAgICAvL0VNTElOSwogICAgICAgIHRvb19tYW55X3N5bmJvbGljX2xpbmtfbGV2ZWxzLCAgLy9FTE9PUAogICAgICAgIHZhbHVlX3Rvb19sYXJnZSwgICAgICAgICAgICAgICAgLy9FT1ZFUkZMT1cKICAgICAgICB3cm9uZ19wcm90b2NvbF90eXBlICAgICAgICAgICAgIC8vRVBST1RPVFlQRQogICAgICB9OwoKICAgIH0gLy8gbmFtZXNwYWNlIGVycmMKCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19lcnJvcl9jb25kaXRpb25fZW51bTxwb3NpeDo6cG9zaXhfZXJybm8+Jmx0O2VycmM6OmVycmNfdCZndDsKICAgICAgeyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07CgogICAgLy8gIDxhIGhyZWY9IiNOb24tbWVtYmVyLWZ1bmN0aW9ucyI+bm9uLW1lbWJlciBmdW5jdGlvbnM8L2E+CgogICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBlcnJvcl9jb2RlICZhbXA7IGxocywgY29uc3QgZXJyb3JfY29kZSAmYW1wOyByaHMgKTsKICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgZXJyb3JfY29kZSAmYW1wOyBjb2RlLCBjb25zdCBlcnJvcl9jb25kaXRpb24gJmFtcDsgY29uZGl0aW9uICk7CiAgICBib29sIG9wZXJhdG9yPT0oIGNvbnN0IGVycm9yX2NvbmRpdGlvbiAmYW1wOyBjb25kaXRpb24sIGNvbnN0IGVycm9yX2NvZGUgJmFtcDsgY29kZSApOwogICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBlcnJvcl9jb25kaXRpb24gJmFtcDsgbGhzLCBjb25zdCBlcnJvcl9jb25kaXRpb24gJmFtcDsgcmhzICk7CgogICAgYm9vbCBvcGVyYXRvciE9KCBjb25zdCBlcnJvcl9jb2RlICZhbXA7IGxocywgY29uc3QgZXJyb3JfY29kZSAmYW1wOyByaHMgKTsKICAgIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgZXJyb3JfY29kZSAmYW1wOyBjb2RlLCBjb25zdCBlcnJvcl9jb25kaXRpb24gJmFtcDsgY29uZGl0aW9uICk7CiAgICBib29sIG9wZXJhdG9yIT0oIGNvbnN0IGVycm9yX2NvbmRpdGlvbiAmYW1wOyBjb25kaXRpb24sIGNvbnN0IGVycm9yX2NvZGUgJmFtcDsgY29kZSApOwogICAgYm9vbCBvcGVyYXRvciE9KCBjb25zdCBlcnJvcl9jb25kaXRpb24gJmFtcDsgbGhzLCBjb25zdCBlcnJvcl9jb25kaXRpb24gJmFtcDsgcmhzICk7CgogICAgYm9vbCBvcGVyYXRvciZsdDsoIGNvbnN0IGVycm9yX2NvZGUgJmFtcDsgbGhzLCBjb25zdCBlcnJvcl9jb2RlICZhbXA7IHJocyApOwogICAgYm9vbCBvcGVyYXRvciZsdDsoIGNvbnN0IGVycm9yX2NvbmRpdGlvbiAmYW1wOyBsaHMsIGNvbnN0IGVycm9yX2NvbmRpdGlvbiAmYW1wOyByaHMgKTsKCiAgICBlcnJvcl9jb2RlIG1ha2VfZXJyb3JfY29kZSggZXJyYzo6ZXJyY190IGUgKTsKICAgIGVycm9yX2NvbmRpdGlvbiBtYWtlX2Vycm9yX2NvbmRpdGlvbiggZXJyYzo6ZXJyY190IGUgKTsKCiAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cyZndDsKICAgICAgc3RkOjpiYXNpY19vc3RyZWFtJmx0O2NoYXJULHRyYWl0cyZndDsmYW1wOwogICAgICAgIG9wZXJhdG9yJmx0OyZsdDsoIGJhc2ljX29zdHJlYW0mbHQ7Y2hhclQsdHJhaXRzJmd0OyZhbXA7IG9zLCBjb25zdCBlcnJvcl9jb2RlICZhbXA7IGVjICk7CgogICAgc2l6ZV90IGhhc2hfdmFsdWUoIGNvbnN0IGVycm9yX2NvZGUgJmFtcDsgZWMgKTsKICB9Cn08L3ByZT4KPC9ibG9ja3F1b3RlPgo8cD5UaGUgdmFsdWUgb2YgZWFjaDxjb2RlPiBlcnJjX3Q8L2NvZGU+IGNvbnN0YW50IHNoYWxsIGJlIHRoZSBzYW1lIGFzIHRoZSAKdmFsdWUgb2YgdGhlIDxjb2RlPiZsdDtjZXJybm8mZ3Q7PC9jb2RlPiBtYWNybyBzaG93biBpbiB0aGUgYWJvdmUgc3lub3BzaXMuPC9wPgo8cD5Vc2VycyBtYXkgc3BlY2lhbGl6ZSA8Y29kZT5pc19lcnJvcl9jb2RlX2VudW08L2NvZGU+IGFuZCA8Y29kZT4KaXNfZXJyb3JfY29uZGl0aW9uX2VudW08L2NvZGU+IHRlbXBsYXRlcyB0byBpbmRpY2F0ZSB0aGF0IGEgdHlwZSBpcyBlbGlnaWJsZSBmb3IgCmNsYXNzIDxjb2RlPmVycm9yX2NvZGU8L2NvZGU+IGFuZCA8Y29kZT5lcnJvcl9jb25kaXRpb248L2NvZGU+IGF1dG9tYXRpYyAKY29udmVyc2lvbnMgcmVzcGVjdGl2ZWx5LjwvcD4KCjxoMj48YSBuYW1lPSJDbGFzcy1lcnJvcl9jYXRlZ29yeSI+Q2xhc3MgPGNvZGU+ZXJyb3JfY2F0ZWdvcnk8L2NvZGU+PC9hPjwvaDI+CjxwPlRoZSBjbGFzcyA8Y29kZT5lcnJvcl9jYXRlZ29yeTwvY29kZT4gZGVmaW5lcyB0aGUgYmFzZSBjbGFzcyBmb3IgdHlwZXMgdXNlZCAKdG8gaWRlbnRpZnkgdGhlIHNvdXJjZSBhbmQgZW5jb2Rpbmcgb2YgYSBwYXJ0aWN1bGFyIGNhdGVnb3J5IG9mIGVycm9yIGNvZGUuPC9wPgo8cD48aT5bTm90ZTo8L2k+IENsYXNzZXMgbWF5IGJlIGRlcml2ZWQgZnJvbSA8Y29kZT5lcnJvcl9jYXRlZ29yeTwvY29kZT4gCnRvIHN1cHBvcnQgYWRkaXRpb25hbCBjYXRlZ29yaWVzIG9mIGVycm9ycy4gPGk+LS1lbmQgbm90ZV08L2k+PC9wPgo8cD5UaGUgY2xhc3MgPGNvZGU+ZXJyb3JfY2F0ZWdvcnk8L2NvZGU+IHNlcnZlcyBhcyBhIGJhc2UgY2xhc3MgZm9yIHR5cGVzIHVzZWQgCnRvIGlkZW50aWZ5IHRoZSBzb3VyY2UgYW5kIGVuY29kaW5nIG9mIGEgcGFydGljdWxhciBjYXRlZ29yeSBvZiBlcnJvciBjb2RlLiAKQ2xhc3NlcyBtYXkgYmUgZGVyaXZlZCBmcm9tIDxjb2RlPmVycm9yX2NhdGVnb3J5PC9jb2RlPiB0byBzdXBwb3J0IGNhdGVnb3JpZXMgb2YgCmVycm9ycyBpbiBhZGRpdGlvbiB0byB0aG9zZSBkZWZpbmVkIGluIHRoZSBCb29zdCBTeXN0ZW0gbGlicmFyeS4gU3VjaCBjbGFzc2VzIApzaGFsbCBiZWhhdmUgYXMgc3BlY2lmaWVkIGluIHRoaXMgc3ViY2xhdXNlLiBbPGk+IE5vdGU6PC9pPiA8Y29kZT5lcnJvcl9jYXRlZ29yeTwvY29kZT4gCm9iamVjdHMgYXJlIHBhc3NlZCBieSByZWZlcmVuY2UsIGFuZCB0d28gc3VjaCBvYmplY3RzIGFyZSBlcXVhbCBpZiB0aGV5IGhhdmUgdGhlIApzYW1lIGFkZHJlc3MuIFRoaXMgbWVhbnMgdGhhdCBhcHBsaWNhdGlvbnMgdXNpbmcgY3VzdG9tIDxjb2RlPmVycm9yX2NhdGVnb3J5PC9jb2RlPiAKdHlwZXMgc2hvdWxkIGNyZWF0ZSBhIHNpbmdsZSBvYmplY3Qgb2YgZWFjaCBzdWNoIHR5cGUuIDxpPpdlbmQgbm90ZTwvaT4gXTwvcD4KPGgzPjxhIG5hbWU9IkNsYXNzLWVycm9yX2NhdGVnb3J5LXN5bm9wc2lzIj5DbGFzcyA8Y29kZT5lcnJvcl9jYXRlZ29yeTwvY29kZT4gc3lub3BzaXM8L2E+PC9oMz4KPGJsb2NrcXVvdGU+CjxwcmU+bmFtZXNwYWNlIGJvb3N0CnsKICBuYW1lc3BhY2Ugc3lzdGVtCiAgewogICAgY2xhc3MgZXJyb3JfY2F0ZWdvcnkgOiBwdWJsaWMgbm9uY29weWFibGUKICAgIHsKICAgIHB1YmxpYzoKICAgICAgdmlydHVhbCB+ZXJyb3JfY2F0ZWdvcnkoKTsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhciAqICAgICBuYW1lKCkgY29uc3QgPSAwOwogICAgICB2aXJ0dWFsIHN0cmluZyAgICAgICAgICAgbWVzc2FnZSggaW50IGV2ICkgY29uc3QgPSAwOwogICAgICB2aXJ0dWFsIGVycm9yX2NvbmRpdGlvbiAgZGVmYXVsdF9lcnJvcl9jb25kaXRpb24oIGludCBldiApIGNvbnN0OwogICAgICB2aXJ0dWFsIGJvb2wgICAgICAgICAgICAgZXF1aXZhbGVudCggaW50IGNvZGUsIGNvbnN0IGVycm9yX2NvbmRpdGlvbiAmYW1wOyBjb25kaXRpb24gKSBjb25zdDsKICAgICAgdmlydHVhbCBib29sICAgICAgICAgICAgIGVxdWl2YWxlbnQoIGNvbnN0IGVycm9yX2NvZGUgJmFtcDsgY29kZSwgaW50IGNvbmRpdGlvbiApIGNvbnN0OwoKICAgICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBlcnJvcl9jYXRlZ29yeSAmYW1wOyByaHMgKSBjb25zdDsKICAgICAgYm9vbCBvcGVyYXRvciE9KCBjb25zdCBlcnJvcl9jYXRlZ29yeSAmYW1wOyByaHMgKSBjb25zdDsKICAgICAgYm9vbCBvcGVyYXRvciZsdDsgKCBjb25zdCBlcnJvcl9jYXRlZ29yeSAmYW1wOyByaHMgKSBjb25zdDsKICAgIH07CgogICAgY29uc3QgZXJyb3JfY2F0ZWdvcnkgJmFtcDsgIHN5c3RlbV9jYXRlZ29yeSgpOwogICAgY29uc3QgZXJyb3JfY2F0ZWdvcnkgJmFtcDsgIGdlbmVyaWNfY2F0ZWdvcnkoKTsKICB9Cn08L3ByZT4KPC9ibG9ja3F1b3RlPgo8aDM+PGEgbmFtZT0iQ2xhc3MtZXJyb3JfY2F0ZWdvcnktdmlydHVhbC1tZW1iZXJzIj5DbGFzcyA8Y29kZT5lcnJvcl9jYXRlZ29yeTwvY29kZT4gdmlydHVhbCBtZW1iZXJzPC9hPjwvaDM+CjxwPkNsYXNzZXMgZGVyaXZlZCBmcm9tIDxjb2RlPmVycm9yX2NhdGVnb3J5PC9jb2RlPiBzaGFsbCBiZWhhdmUgYXMgc3BlY2lmaWVkIGluIAp0aGlzIHN1YmNsYXVzZS48L3A+CjxwcmU+dmlydHVhbCBjb25zdCBjaGFyICogbmFtZSgpIGNvbnN0PTA7PC9wcmU+CjxibG9ja3F1b3RlPgogIDxwPjxpPlJldHVybnM6IDwvaT5hIHN0cmluZyBuYW1pbmcgdGhlIGVycm9yIGNhdGVnb3J5LjwvcD4KICA8cD48aT5UaHJvd3M6PC9pPiBOb3RoaW5nLjwvcD4KPC9ibG9ja3F1b3RlPgo8cHJlPnZpcnR1YWwgc3RyaW5nIG1lc3NhZ2UoIGludCBldiApIGNvbnN0PTA7PC9wcmU+CjxibG9ja3F1b3RlPgogIDxwPjxpPlJldHVybnM6PC9pPiBBIHN0cmluZyB0aGF0IGRlc2NyaWJlcyB0aGUgZXJyb3IgZGVub3RlZCBieQogIDxjb2RlPmV2PC9jb2RlPi48L3A+CiAgPHA+PGk+VGhyb3dzOjwvaT4gTm90aGluZy48L3A+CjwvYmxvY2txdW90ZT4KPHA+PGNvZGU+dmlydHVhbCBlcnJvcl9jb25kaXRpb24gZGVmYXVsdF9lcnJvcl9jb25kaXRpb24oIGludCBldiApIGNvbnN0OzwvY29kZT48L3A+CjxibG9ja3F1b3RlPgogIDxwPjxpPlJldHVybnM6PC9pPiZuYnNwOyA8Y29kZT5lcnJvcl9jb25kaXRpb24oIGV2LCAqdGhpcyApPC9jb2RlPi48L3A+CiAgPGJsb2NrcXVvdGU+CiAgICA8cCBkaXI9Imx0ciI+Jm5ic3A7WzxpPi0tTm90ZTo8L2k+IERlcml2ZWQgY2xhc3NlcyB3aWxsIHR5cGljYWxseSBjb252ZXJ0IDxjb2RlPmV2PC9jb2RlPiAKICAgIHRvIHNvbWUgcG9ydGFibGUgPGNvZGU+ZXJyb3JfY2F0ZWdvcnk8L2NvZGU+LCBzdWNoIGFzIDxjb2RlPmdlbmVyaWNfY2F0ZWdvcnkoKTwvY29kZT4sIAogICAgYW5kIHJldHVybiBpdCBhcyBhbiA8Y29kZT5lcnJvcl9jb25kaXRpb248L2NvZGU+IGZvciB0aGF0IGNhdGVnb3J5LiA8aT4tLWVuZCAKICAgIG5vdGU8L2k+XTwvcD4KICA8L2Jsb2NrcXVvdGU+CiAgPHA+PGk+VGhyb3dzOjwvaT4gTm90aGluZy48L3A+CjwvYmxvY2txdW90ZT4KPHA+PGNvZGU+dmlydHVhbCBib29sIGVxdWl2YWxlbnQoIGludCBjb2RlLCBjb25zdCBlcnJvcl9jb25kaXRpb24gJmFtcDsgCmNvbmRpdGlvbiApIApjb25zdDs8L2NvZGU+PC9wPgo8YmxvY2txdW90ZT4KICA8cD48aT5SZXR1cm5zOjwvaT4gPGNvZGU+ZGVmYXVsdF9lcnJvcl9jb25kaXRpb24oIGNvZGUgKSA9PSBjb25kaXRpb248L2NvZGU+LjwvcD4KICA8cD48aT5UaHJvd3M6PC9pPiBOb3RoaW5nLjwvcD4KPC9ibG9ja3F1b3RlPgo8cD48Y29kZT52aXJ0dWFsIGJvb2wgZXF1aXZhbGVudCggY29uc3QgZXJyb3JfY29kZSAmYW1wOyBjb2RlLCBpbnQgY29uZGl0aW9uICkgY29uc3Q7PC9jb2RlPjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+PGk+UmV0dXJuczo8L2k+IDxjb2RlPip0aGlzID09IGNvZGUuY2F0ZWdvcnkoKSAmYW1wOyZhbXA7IGNvZGUudmFsdWUoKSA9PSBjb25kaXRpb248L2NvZGU+LjwvcD4KICA8cD48aT5UaHJvd3M6PC9pPiBOb3RoaW5nLjwvcD4KPC9ibG9ja3F1b3RlPgo8aDM+PGEgbmFtZT0iQ2xhc3MtZXJyb3JfY2F0ZWdvcnktbm9uLXZpcnR1YWwtbWVtYmVycyI+Q2xhc3MgPGNvZGU+ZXJyb3JfY2F0ZWdvcnk8L2NvZGU+IG5vbi12aXJ0dWFsIG1lbWJlcnM8L2E+PC9oMz4KPHA+PGNvZGU+Ym9vbCBvcGVyYXRvcj09KCBjb25zdCBlcnJvcl9jYXRlZ29yeSAmYW1wOyByaHMgKSBjb25zdDs8L2NvZGU+PC9wPgo8YmxvY2txdW90ZT4KPHA+PGk+UmV0dXJuczo8L2k+IDxjb2RlPnRoaXMgPT0gJmFtcDtyaHM8L2NvZGU+LjwvcD4KPC9ibG9ja3F1b3RlPgo8cD48Y29kZT5ib29sIG9wZXJhdG9yIT0oIGNvbnN0IGVycm9yX2NhdGVnb3J5ICZhbXA7IHJocyApIGNvbnN0OzwvY29kZT48L3A+CjxibG9ja3F1b3RlPgo8cD48aT5SZXR1cm5zOjwvaT4gPGNvZGU+dGhpcyAhPSAmYW1wO3JoczwvY29kZT4uPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cHJlPmJvb2wgb3BlcmF0b3ImbHQ7KCBjb25zdCBlcnJvcl9jYXRlZ29yeSAmYW1wOyByaHMgKSBjb25zdDs8L3ByZT4KPGJsb2NrcXVvdGU+CiAgPHA+PGk+UmV0dXJuczo8L2k+IDxjb2RlPnN0ZDo6bGVzcyZsdDtjb25zdCBlcnJvcl9jYXRlZ29yeSomZ3Q7KCkoIHRoaXMsICZhbXA7cmhzICk8L2NvZGU+LjwvcD4KICA8YmxvY2txdW90ZT4KICAgIDxwPjxpPltOb3RlOjwvaT4gPGNvZGU+c3RkOjpsZXNzPC9jb2RlPiBwcm92aWRlcyBhIHRvdGFsIG9yZGVyaW5nIGZvciAKICAgIHBvaW50ZXJzLiA8aT4tLWVuZCBub3RlXTwvaT48L3A+CiAgPC9ibG9ja3F1b3RlPgogIDxwPjxpPlRocm93czo8L2k+IE5vdGhpbmcuPC9wPgo8L2Jsb2NrcXVvdGU+CjxoMz48YSBuYW1lPSJDbGFzcy1lcnJvcl9jYXRlZ29yeS1ub24tbWVtYmVyLWZ1bmN0aW9ucyI+Q2xhc3MgPGNvZGU+ZXJyb3JfY2F0ZWdvcnk8L2NvZGU+IApub24tbWVtYmVyIGZ1bmN0aW9uczwvYT48L2gzPgo8cHJlPmNvbnN0IGVycm9yX2NhdGVnb3J5ICZhbXA7IHN5c3RlbV9jYXRlZ29yeSgpOzwvcHJlPgo8YmxvY2txdW90ZT4KICA8cD48aT5SZXR1cm5zOjwvaT4gQSByZWZlcmVuY2UgdG8gYSA8Y29kZT5lcnJvcl9jYXRlZ29yeTwvY29kZT4gb2JqZWN0IAogIGlkZW50aWZ5aW5nIGVycm9ycyBvcmlnaW5hdGluZyBmcm9tIHRoZSBvcGVyYXRpbmcgc3lzdGVtLjwvcD4KICA8cD48aT5UaHJvd3M6PC9pPiBOb3RoaW5nLjwvcD4KPC9ibG9ja3F1b3RlPgo8cHJlPmNvbnN0IGVycm9yX2NhdGVnb3J5ICZhbXA7IGdlbmVyaWNfY2F0ZWdvcnkoKTs8L3ByZT4KPGJsb2NrcXVvdGU+CiAgPHA+PGk+UmV0dXJuczo8L2k+IEEgcmVmZXJlbmNlIHRvIGEgPGNvZGU+ZXJyb3JfY2F0ZWdvcnk8L2NvZGU+IG9iamVjdCAKICBpZGVudGlmeWluZyBwb3J0YWJsZSBlcnJvciBjb25kaXRpb25zLjwvcD4KICA8cD48aT5UaHJvd3M6PC9pPiBOb3RoaW5nLjwvcD4KPC9ibG9ja3F1b3RlPgo8aDI+PGEgbmFtZT0iQ2xhc3MtZXJyb3JfY29kZSI+Q2xhc3MgPGNvZGU+CmVycm9yX2NvZGU8L2NvZGU+PC9hPjwvaDI+CjxwPlRoZSBjbGFzcyA8Y29kZT5lcnJvcl9jb2RlPC9jb2RlPiBkZXNjcmliZXMgYW4gb2JqZWN0IHVzZWQgdG8gaG9sZCBlcnJvciBjb2RlIAp2YWx1ZXMsIHN1Y2ggYXMgdGhvc2Ugb3JpZ2luYXRpbmcgZnJvbSB0aGUgb3BlcmF0aW5nPGJyPgpzeXN0ZW0gb3Igb3RoZXIgbG93LWxldmVsIGFwcGxpY2F0aW9uIHByb2dyYW0gaW50ZXJmYWNlcy4gPGk+WyBOb3RlOiA8L2k+Q2xhc3MKPGNvZGU+ZXJyb3JfY29kZTwvY29kZT4gaXMgYW4gYWRqdW5jdCB0byBlcnJvciByZXBvcnRpbmcgYnk8YnI+CmV4Y2VwdGlvbi4gPGk+l2VuZCBub3RlIF08L2k+PC9wPgo8aDM+PGEgbmFtZT0iQ2xhc3MtZXJyb3JfY29kZS1zeW5vcHNpcyI+Q2xhc3MgPGNvZGU+CmVycm9yX2NvZGU8L2NvZGU+IHN5bm9wc2lzPC9hPjwvaDM+CjxibG9ja3F1b3RlPgo8cHJlPm5hbWVzcGFjZSBib29zdAp7CiAgbmFtZXNwYWNlIHN5c3RlbQogIHsKICAgIGNsYXNzIGVycm9yX2NvZGUgewogICAgcHVibGljOgoKICAgICAgLy8gY29uc3RydWN0b3JzOgogICAgICBlcnJvcl9jb2RlKCk7CiAgICAgIGVycm9yX2NvZGUoIHZhbCwgY29uc3QgZXJyb3JfY2F0ZWdvcnkgJmFtcDsgY2F0ICk7CiAgICAgIHRlbXBsYXRlICZsdDtjbGFzcyA8Y29kZT5FcnJvckNvZGVFbnVtPC9jb2RlPiZndDsKICAgICAgICBlcnJvcl9jb2RlKDxjb2RlPiBFcnJvckNvZGVFbnVtPC9jb2RlPiBlICk7CgogICAgICAvLyBtb2RpZmllcnM6CiAgICAgIHZvaWQgYXNzaWduKCBpbnQgdmFsLCBjb25zdCBlcnJvcl9jYXRlZ29yeSAmYW1wOyBjYXQgKTsKICAgICAgdGVtcGxhdGUmbHQ7dHlwZW5hbWUgPGNvZGU+RXJyb3JDb2RlRW51bTwvY29kZT4mZ3Q7CiAgICAgICAgZXJyb3JfY29kZSAmYW1wOyBvcGVyYXRvcj0oIDxjb2RlPkVycm9yQ29kZUVudW08L2NvZGU+IHZhbCApOzsKICAgICAgdm9pZCBjbGVhcigpOwoKICAgICAgLy8gb2JzZXJ2ZXJzOgogICAgICBpbnQgICAgICAgICAgICAgICAgICAgIHZhbHVlKCkgY29uc3Q7CiAgICAgIGNvbnQgZXJyb3JfY2F0ZWdvcnkgJmFtcDsgIGNhdGVnb3J5KCkgY29uc3Q7CiAgICAgIGVycm9yX2NvbmRpdGlvbiAgICAgICAgZGVmYXVsdF9lcnJvcl9jb25kaXRpb24oKSBjb25zdDsKICAgICAgc3RyaW5nICAgICAgICAgICAgICAgICBtZXNzYWdlKCkgY29uc3Q7CiAgICAgIG9wZXJhdG9yIHVuc3BlY2lmaWVkLWJvb2wtdHlwZSgpIGNvbnN0OwoKICAgIHByaXZhdGU6CiAgICAgIGludCB2YWxfOyAgICAgICAgICAgICAgICAgICAgIC8vIDxpPmV4cG9zaXRpb24gb25seTwvaT4KICAgICAgY29uc3QgZXJyb3JfY2F0ZWdvcnkgKiBjYXRfOyAgLy8gPGk+ZXhwb3NpdGlvbiBvbmx5PC9pPgogICAgfTsKICB9Cn08L3ByZT4KPC9ibG9ja3F1b3RlPgo8aDM+PGEgbmFtZT0iQ2xhc3MtZXJyb3JfY29kZS1jb25zdHJ1Y3RvcnMiPkNsYXNzIDxjb2RlPgplcnJvcl9jb2RlPC9jb2RlPiBjb25zdHJ1Y3RvcnM8L2E+PC9oMz4KPHByZT5lcnJvcl9jb2RlKCk7PC9wcmU+CjxibG9ja3F1b3RlPgogIDxwPjxpPkVmZmVjdHM6IDwvaT5Db25zdHJ1Y3RzIGFuIG9iamVjdCBvZiB0eXBlIDxjb2RlPmVycm9yX2NvZGU8L2NvZGU+LjwvcD4KICA8cD48aT5Qb3N0Y29uZGl0aW9uczo8L2k+IDxjb2RlPnZhbF8gPT0gMCAmYW1wOyZhbXA7IGNhdF8gPT0gJmFtcDtzeXN0ZW1fY2F0ZWdvcnkoKTwvY29kZT4uPC9wPgogIDxwPjxpPlRocm93czo8L2k+IE5vdGhpbmcuPC9wPgo8L2Jsb2NrcXVvdGU+CjxwcmU+ZXJyb3JfY29kZSggaW50IHZhbCwgY29uc3QgZXJyb3JfY2F0ZWdvcnkgJmFtcDsgY2F0ICk7PC9wcmU+CjxibG9ja3F1b3RlPgogIDxwPjxpPkVmZmVjdHM6IDwvaT5Db25zdHJ1Y3RzIGFuIG9iamVjdCBvZiB0eXBlIDxjb2RlPmVycm9yX2NvZGU8L2NvZGU+LjwvcD4KICA8cD48aT5Qb3N0Y29uZGl0aW9uczo8L2k+IDxjb2RlPnZhbF8gPT0gdmFsICZhbXA7JmFtcDsgY2F0XyA9PSAmYW1wO2NhdDwvY29kZT4uPC9wPgogIDxwPjxpPlRocm93czo8L2k+IE5vdGhpbmcuPC9wPgo8L2Jsb2NrcXVvdGU+CjxwcmU+dGVtcGxhdGUgJmx0O2NsYXNzIDxjb2RlPkVycm9yQ29kZUVudW08L2NvZGU+Jmd0OwogIGVycm9yX2NvZGUoPGNvZGU+IEVycm9yQ29kZUVudW08L2NvZGU+IHZhbCApOzwvcHJlPgo8YmxvY2txdW90ZT4KICA8cD48aT5FZmZlY3RzOiA8L2k+Q29uc3RydWN0cyBhbiBvYmplY3Qgb2YgdHlwZSA8Y29kZT5lcnJvcl9jb2RlPC9jb2RlPi48L3A+CiAgPHA+PGk+UG9zdGNvbmRpdGlvbnM6PC9pPiA8Y29kZT4qdGhpcyA9PSBtYWtlX2Vycm9yX2NvZGUoIHZhbCApPC9jb2RlPi48L3A+CiAgPHA+PGk+VGhyb3dzOjwvaT4gTm90aGluZy48L3A+CiAgPHA+PGk+UmVtYXJrczo8L2k+IFRoaXMgY29uc3RydWN0b3Igc2hhbGwgbm90IHBhcnRpY2lwYXRlIGluIG92ZXJsb2FkIAogIHJlc29sdXRpb24gdW5sZXNzIDxjb2RlPmlzX2Vycm9yX2NvZGVfZW51bSZsdDtFcnJvckNvZGVFbnVtJmd0Ozo6dmFsdWU8L2NvZGU+IGlzCiAgPGNvZGU+dHJ1ZTwvY29kZT4uPC9wPgo8L2Jsb2NrcXVvdGU+CjxoMz48YSBuYW1lPSJDbGFzcy1lcnJvcl9jb2RlLW1vZGlmaWVycyI+Q2xhc3MgPGNvZGU+CmVycm9yX2NvZGU8L2NvZGU+IG1vZGlmaWVyczwvYT48L2gzPgo8cHJlPnZvaWQgYXNzaWduKCBpbnQgdmFsLCBjb25zdCBlcnJvcl9jYXRlZ29yeSAmYW1wOyBjYXQgKTs8L3ByZT4KPGJsb2NrcXVvdGU+CiAgPHA+PGk+UG9zdGNvbmRpdGlvbnM6PC9pPiA8Y29kZT52YWxfID09IHZhbCAmYW1wOyZhbXA7IGNhdF8gPT0gJmFtcDtjYXQ8L2NvZGU+LjwvcD4KICA8cD48aT5UaHJvd3M6PC9pPiBOb3RoaW5nLjwvcD4KPC9ibG9ja3F1b3RlPgo8cHJlPnRlbXBsYXRlJmx0O3R5cGVuYW1lIDxjb2RlPkVycm9yQ29kZUVudW08L2NvZGU+Jmd0OwogIGVycm9yX2NvZGUgJmFtcDsgb3BlcmF0b3I9KCA8Y29kZT5FcnJvckNvZGVFbnVtPC9jb2RlPiB2YWwgKTs8L3ByZT4KPGJsb2NrcXVvdGU+CiAgPHA+PGk+UG9zdGNvbmRpdGlvbnM6PC9pPiA8Y29kZT4qdGhpcyA9PSBtYWtlX2Vycm9yX2NvZGUoIHZhbCApPC9jb2RlPi48L3A+CiAgPHA+PGk+VGhyb3dzOjwvaT4gTm90aGluZy48L3A+CiAgPHA+PGk+UmVtYXJrczo8L2k+IFRoaXMgb3BlcmF0b3Igc2hhbGwgbm90IHBhcnRpY2lwYXRlIGluIG92ZXJsb2FkIHJlc29sdXRpb24gCiAgdW5sZXNzIDxjb2RlPmlzX2Vycm9yX2NvZGVfZW51bSZsdDtFcnJvckNvZGVFbnVtJmd0Ozo6dmFsdWU8L2NvZGU+IGlzIDxjb2RlPnRydWU8L2NvZGU+LjwvcD4KPC9ibG9ja3F1b3RlPgo8cD48Y29kZT52b2lkIGNsZWFyKCk7PC9jb2RlPjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+PGk+cG9zdGNvbmRpdGlvbjo8L2k+IDxjb2RlPnZhbHVlKCkgPT0gMCAmYW1wOyZhbXA7IGNhdGVnb3J5KCkgPT0gCiAgc3lzdGVtX2NhdGVnb3J5KCk8L2NvZGU+PC9wPgo8L2Jsb2NrcXVvdGU+CiAgPGgzPjxhIG5hbWU9IkNsYXNzLWVycm9yX2NvZGUtb2JzZXJ2ZXJzIj5DbGFzcyA8Y29kZT4KZXJyb3JfY29kZTwvY29kZT4gb2JzZXJ2ZXJzPC9hPjwvaDM+CiAgPHA+PGNvZGU+aW50IHZhbHVlKCkgY29uc3Q7PC9jb2RlPjwvcD4KPGJsb2NrcXVvdGU+CjxwPjxpPlJldHVybnM6PC9pPiA8Y29kZT52YWxfPC9jb2RlPi48L3A+CiAgPHA+PGk+VGhyb3dzOjwvaT4gTm90aGluZy48L3A+CjwvYmxvY2txdW90ZT4KICA8cD48Y29kZT5jb25zdCBlcnJvcl9jYXRlZ29yeSAmYW1wOyBjYXRlZ29yeSgpIGNvbnN0OzwvY29kZT48L3A+CjxibG9ja3F1b3RlPgo8cD48aT5SZXR1cm5zOjwvaT4gPGNvZGU+KmNhdF88L2NvZGU+LjwvcD4KICA8cD48aT5UaHJvd3M6PC9pPiBOb3RoaW5nLjwvcD4KPC9ibG9ja3F1b3RlPgogIDxwcmU+ZXJyb3JfY29uZGl0aW9uIGRlZmF1bHRfZXJyb3JfY29uZGl0aW9uKCkgY29uc3Q7PC9wcmU+CjxibG9ja3F1b3RlPgo8cD48aT5SZXR1cm5zOjwvaT4mbmJzcDsgPGNvZGU+Y2F0ZWdvcnkoKS5kZWZhdWx0X2Vycm9yX2NvbmRpdGlvbiggdmFsdWUoKSk8L2NvZGU+LjwvcD4KICA8cD48aT5UaHJvd3M6PC9pPiBOb3RoaW5nLjwvcD4KPC9ibG9ja3F1b3RlPgogIDxwPjxjb2RlPnN0cmluZyBtZXNzYWdlKCkgY29uc3Q7PC9jb2RlPjwvcD4KPGJsb2NrcXVvdGU+CjxwPjxpPlJldHVybnM6PC9pPiZuYnNwOyA8Y29kZT5jYXRlZ29yeSgpLm1lc3NhZ2UoIHZhbHVlKCkpPC9jb2RlPi48L3A+CiAgPHA+PGk+VGhyb3dzOjwvaT4gTm90aGluZy48L3A+CjwvYmxvY2txdW90ZT4KPHA+PGNvZGU+b3BlcmF0b3IgPGk+dW5zcGVjaWZpZWQtYm9vbC10eXBlPC9pPigpIGNvbnN0OzwvY29kZT48L3A+CjxibG9ja3F1b3RlPgo8cD48aT5SZXR1cm5zOjwvaT4gaWYgPGNvZGU+dmFsdWUoKSAhPSAwPC9jb2RlPiwgcmV0dXJucyBhIHZhbHVlIHRoYXQgd2lsbCBldmFsdWF0ZQo8Y29kZT50cnVlPC9jb2RlPiBpbiBhIGJvb2xlYW4gY29udGV4dDsgb3RoZXJ3aXNlLCByZXR1cm5zIGEgdmFsdWUgdGhhdCB3aWxsIApldmFsdWF0ZSA8Y29kZT5mYWxzZTwvY29kZT4gaW4gYSBib29sZWFuIGNvbnRleHQuIFRoZSB2YWx1ZSB0eXBlIHJldHVybmVkIHNoYWxsIApub3QgYmUgY29udmVydGlibGUgdG8gPGNvZGU+aW50PC9jb2RlPi48L3A+CjxwPjxpPlRocm93czo8L2k+IG5vdGhpbmcuPC9wPgo8cD48aT5bTm90ZTogPC9pPlRoaXMgY29udmVyc2lvbiBjYW4gYmUgdXNlZCBpbiBjb250ZXh0cyB3aGVyZSBhIDxjb2RlPmJvb2w8L2NvZGU+IAppcyBleHBlY3RlZCAoIGUuZy4sIGFuIDxjb2RlPmlmPC9jb2RlPiBjb25kaXRpb24gKTsgaG93ZXZlciwgaW1wbGljaXQgY29udmVyc2lvbnMgCiggZS5nLiwgdG8gPGNvZGU+aW50PC9jb2RlPikgdGhhdCBjYW4gb2NjdXIgd2l0aCA8Y29kZT5ib29sPC9jb2RlPiBhcmUgbm90IAphbGxvd2VkLCBlbGltaW5hdGluZyBzb21lIHNvdXJjZXMgb2YgdXNlciBlcnJvci4gT25lIHBvc3NpYmxlIGltcGxlbWVudGF0aW9uIApjaG9pY2UgZm9yIHRoaXMgdHlwZSBpcyBwb2ludGVyLXRvLW1lbWJlci4gPGk+LS1lbmQgbm90ZSBdPC9pPjwvcD4KPC9ibG9ja3F1b3RlPgo8aDI+PGEgbmFtZT0iQ2xhc3MtZXJyb3JfY29uZGl0aW9uIj5DbGFzcyA8Y29kZT5lcnJvcl9jb25kaXRpb248L2NvZGU+PC9hPjwvaDI+CjxwPlRoZSBjbGFzcyA8Y29kZT5lcnJvcl9jb25kaXRpb248L2NvZGU+IGRlc2NyaWJlcyBhbiBvYmplY3QgdXNlZCB0byBob2xkIAp2YWx1ZXMgaWRlbnRpZnlpbmcgZXJyb3IgY29uZGl0aW9ucy4gPGk+WyBOb3RlOiA8L2k+PGNvZGU+ZXJyb3JfY29uZGl0aW9uPC9jb2RlPiAKdmFsdWVzIGFyZSBwb3J0YWJsZSBhYnN0cmFjdGlvbnMsIHdoaWxlIDxjb2RlPmVycm9yX2NvZGU8L2NvZGU+IHZhbHVlcyBhcmUgCmltcGxlbWVudGF0aW9uIHNwZWNpZmljLiA8aT4tLWVuZCBub3RlIF08L2k+PC9wPgo8aDM+PGEgbmFtZT0iQ2xhc3MtZXJyb3JfY29uZGl0aW9uLXN5bm9wc2lzIj5DbGFzcyA8Y29kZT5lcnJvcl9jb25kaXRpb248L2NvZGU+IHN5bm9wc2lzPC9hPjwvaDM+CjxibG9ja3F1b3RlPgo8cHJlPm5hbWVzcGFjZSBib29zdAp7CiAgbmFtZXNwYWNlIHN5c3RlbQogIHsKICAgIGNsYXNzIGVycm9yX2NvbmRpdGlvbgogICAgewogICAgcHVibGljOgoKICAgICAgLy8gY29uc3RydWN0b3JzOgogICAgICBlcnJvcl9jb25kaXRpb24oKTsKICAgICAgZXJyb3JfY29uZGl0aW9uKCBpbnQgdmFsLCBjb25zdCBlcnJvcl9jYXRlZ29yeSAmYW1wOyBjYXQgKTsKICAgICAgdGVtcGxhdGUgJmx0O2NsYXNzIEVycm9yQ29uZGl0aW9uRW51bSZndDsKICAgICAgICBlcnJvcl9jb25kaXRpb24oIGVycm9yQ29uZGl0aW9uRW51bSB2YWwgKTsKCiAgICAgIC8vIG1vZGlmaWVyczoKICAgICAgdm9pZCBhc3NpZ24oIGludCB2YWwsIGNvbnN0IGVycm9yX2NhdGVnb3J5ICZhbXA7IGNhdCApOwogICAgICB0ZW1wbGF0ZSZsdDt0eXBlbmFtZSBFcnJvckNvbmRpdGlvbkVudW0mZ3Q7CiAgICAgICAgZXJyb3JfY29uZGl0aW9uICZhbXA7IG9wZXJhdG9yPSggRXJyb3JDb25kaXRpb25FbnVtIHZhbCApOwogICAgICB2b2lkIGNsZWFyKCk7CgogICAgICAvLyBvYnNlcnZlcnM6CiAgICAgIGludCB2YWx1ZSgpIGNvbnN0OwogICAgICBjb25zdCBlcnJvcl9jYXRlZ29yeSAmYW1wOyBjYXRlZ29yeSgpIGNvbnN0OwogICAgICBzdHJpbmcgbWVzc2FnZSgpIGNvbnN0OwogICAgICBvcGVyYXRvciB1bnNwZWNpZmllZC1ib29sLXR5cGUgKCkgY29uc3Q7CgogICAgcHJpdmF0ZToKICAgICAgaW50IHZhbF87ICAgICAgICAgICAgICAgICAgICAgIC8vIDxpPmV4cG9zaXRpb24gb25seTwvaT4KICAgICAgY29uc3QgZXJyb3JfY2F0ZWdvcnkgKiBjYXRfOyAgIC8vIDxpPmV4cG9zaXRpb24gb25seTwvaT4KICAgIH07CiAgfQp9PC9wcmU+CjwvYmxvY2txdW90ZT4KPGgzPjxhIG5hbWU9IkNsYXNzLWVycm9yX2NvbmRpdGlvbi1jb25zdHJ1Y3RvcnMiPkNsYXNzIDxjb2RlPmVycm9yX2NvbmRpdGlvbjwvY29kZT4gCmNvbnN0cnVjdG9yczwvYT48L2gzPgo8cHJlPmVycm9yX2NvbmRpdGlvbigpOyA8L3ByZT4KPGJsb2NrcXVvdGU+CiAgPHA+PGk+RWZmZWN0czo8L2k+IENvbnN0cnVjdHMgYW4gb2JqZWN0IG9mIHR5cGUgPGNvZGU+ZXJyb3JfY29uZGl0aW9uPC9jb2RlPi48L3A+CiAgPHA+PGk+UG9zdGNvbmRpdGlvbnM6PC9pPiA8Y29kZT52YWxfID09IDAgYW5kIGNhdF8gPT0gJmFtcDtnZW5lcmljX2NhdGVnb3J5KCk8L2NvZGU+LjwvcD4KICA8cD48aT5UaHJvd3M6PC9pPiBOb3RoaW5nLjwvcD4KPC9ibG9ja3F1b3RlPgo8cHJlPmVycm9yX2NvbmRpdGlvbiggaW50IHZhbCwgY29uc3QgZXJyb3JfY2F0ZWdvcnkgJmFtcDsgY2F0ICk7PC9wcmU+CjxibG9ja3F1b3RlPgogIDxwPjxpPkVmZmVjdHM6IDwvaT5Db25zdHJ1Y3RzIGFuIG9iamVjdCBvZiB0eXBlIGVycm9yX2NvbmRpdGlvbi48L3A+CiAgPHA+PGk+UG9zdGNvbmRpdGlvbnM6PC9pPiA8Y29kZT52YWxfID09IHZhbCBhbmQgY2F0XyA9PSAmYW1wO2NhdDwvY29kZT4uPC9wPgogIDxwPjxpPlRocm93czo8L2k+IE5vdGhpbmcuPC9wPgo8L2Jsb2NrcXVvdGU+CjxwcmU+dGVtcGxhdGUgJmx0O2NsYXNzIEVycm9yQ29uZGl0aW9uRW51bSZndDsKICBlcnJvcl9jb25kaXRpb24oIEVycm9yQ29uZGl0aW9uRW51bSBlICk7PC9wcmU+CjxibG9ja3F1b3RlPgogIDxwPjxpPkVmZmVjdHM6PC9pPiBDb25zdHJ1Y3RzIGFuIG9iamVjdCBvZiB0eXBlIDxjb2RlPmVycm9yX2NvbmRpdGlvbjwvY29kZT4uPC9wPgogIDxwPjxpPlBvc3Rjb25kaXRpb25zOjwvaT4gPGNvZGU+KnRoaXMgPT0gbWFrZV9lcnJvcl9jb25kaXRpb24oZSk8L2NvZGU+LjwvcD4KICA8cD48aT5UaHJvd3M6PC9pPiBOb3RoaW5nLjwvcD4KICA8cD48aT5SZW1hcmtzOjwvaT4gVGhpcyBjb25zdHJ1Y3RvciBzaGFsbCBub3QgcGFydGljaXBhdGUgaW4gb3ZlcmxvYWQgCiAgcmVzb2x1dGlvbiB1bmxlc3MgPGNvZGU+aXNfZXJyb3JfY29uZGl0aW9uX2VudW0mbHQ7RXJyb3JDb25kaXRpb25FbnVtJmd0Ozo6dmFsdWU8L2NvZGU+IAogIGlzIDxjb2RlPnRydWU8L2NvZGU+LjwvcD4KPC9ibG9ja3F1b3RlPgo8aDM+PGEgbmFtZT0iQ2xhc3MtZXJyb3JfY29uZGl0aW9uLW1vZGlmaWVycyI+Q2xhc3MgPGNvZGU+ZXJyb3JfY29uZGl0aW9uPC9jb2RlPiAKbW9kaWZpZXJzPC9hPjwvaDM+CjxwcmU+dm9pZCBhc3NpZ24oIGludCB2YWwsIGNvbnN0IGVycm9yX2NhdGVnb3J5ICZhbXA7IGNhdCApOyA8L3ByZT4KPGJsb2NrcXVvdGU+CiAgPHA+PGk+UG9zdGNvbmRpdGlvbnM6PC9pPiA8Y29kZT52YWxfID09IHZhbCBhbmQgY2F0XyA9PSAmYW1wO2NhdDwvY29kZT4uIDwvcD4KICA8cD48aT5UaHJvd3M6PC9pPiBOb3RoaW5nLjwvcD4KPC9ibG9ja3F1b3RlPgo8cHJlPnRlbXBsYXRlJmx0O3R5cGVuYW1lIEVycm9yQ29uZGl0aW9uRW51bSZndDsKICBlcnJvcl9jb25kaXRpb24gJmFtcDsgb3BlcmF0b3I9KCBFcnJvckNvbmRpdGlvbkVudW0gZSApOzwvcHJlPgo8YmxvY2txdW90ZT4KICA8cD48aT5Qb3N0Y29uZGl0aW9uczo8L2k+IDxjb2RlPip0aGlzID09IG1ha2VfZXJyb3JfY29uZGl0aW9uKCBlICk8L2NvZGU+LjwvcD4KICA8cD48aT5SZXR1cm5zOjwvaT4gPGNvZGU+KnRoaXM8L2NvZGU+LjwvcD4KICA8cD48aT5UaHJvd3M6PC9pPiBOb3RoaW5nLjwvcD4KICA8cD48aT5SZW1hcmtzOjwvaT4gVGhpcyBvcGVyYXRvciBzaGFsbCBub3QgcGFydGljaXBhdGUgaW4gb3ZlcmxvYWQgcmVzb2x1dGlvbiAKICB1bmxlc3MgPGNvZGU+aXNfZXJyb3JfY29uZGl0aW9uX2VudW0mbHQ7RXJyb3JDb25kaXRpb25FbnVtJmd0Ozo6dmFsdWU8L2NvZGU+IGlzCiAgPGNvZGU+dHJ1ZTwvY29kZT4uPC9wPgo8L2Jsb2NrcXVvdGU+CjxwPjxjb2RlPnZvaWQgY2xlYXIoKTs8L2NvZGU+PC9wPgo8YmxvY2txdW90ZT4KICA8cD48aT5wb3N0Y29uZGl0aW9uOjwvaT4gPGNvZGU+dmFsdWUoKSA9PSAwICZhbXA7JmFtcDsgY2F0ZWdvcnkoKSA9PSBnZW5lcmljX2NhdGVnb3J5KCk8L2NvZGU+PC9wPgo8L2Jsb2NrcXVvdGU+CjxoMz48YSBuYW1lPSJDbGFzcy1lcnJvcl9jb25kaXRpb24tb2JzZXJ2ZXJzIj5DbGFzcyA8Y29kZT5lcnJvcl9jb25kaXRpb248L2NvZGU+IApvYnNlcnZlcnM8L2E+PC9oMz4KPHByZT5pbnQgdmFsdWUoKSBjb25zdDs8L3ByZT4KPGJsb2NrcXVvdGU+CiAgPHA+PGk+UmV0dXJuczo8L2k+IDxjb2RlPnZhbF88L2NvZGU+LjwvcD4KICA8cD48aT5UaHJvd3M6PC9pPiBOb3RoaW5nPC9wPgo8L2Jsb2NrcXVvdGU+CjxwcmU+Y29uc3QgZXJyb3JfY2F0ZWdvcnkgJmFtcDsgY2F0ZWdvcnkoKSBjb25zdDs8L3ByZT4KPGJsb2NrcXVvdGU+CiAgPHA+PGk+UmV0dXJuczo8L2k+IDxjb2RlPipjYXRfPC9jb2RlPi48L3A+CiAgPHA+VGhyb3dzOiBOb3RoaW5nLjwvcD4KPC9ibG9ja3F1b3RlPgo8cHJlPnN0cmluZyBtZXNzYWdlKCkgY29uc3Q7PC9wcmU+CjxibG9ja3F1b3RlPgogIDxwPjxpPlJldHVybnM6PC9pPiA8Y29kZT5jYXRlZ29yeSgpLm1lc3NhZ2UoIHZhbHVlKCkgKTwvY29kZT4uPC9wPgogIDxwPjxpPlRocm93czo8L2k+IE5vdGhpbmcuPC9wPgo8L2Jsb2NrcXVvdGU+CjxwcmU+b3BlcmF0b3IgdW5zcGVjaWZpZWQtYm9vbC10eXBlICgpIGNvbnN0OzwvcHJlPgo8YmxvY2txdW90ZT4KICA8cD48aT5SZXR1cm5zOiA8L2k+SWYgPGNvZGU+dmFsdWUoKSAhPSAwPC9jb2RlPiwgcmV0dXJucyBhIHZhbHVlIHRoYXQgd2lsbCAKICBldmFsdWF0ZSA8Y29kZT50cnVlPC9jb2RlPiBpbiBhIGJvb2xlYW4gY29udGV4dDsgb3RoZXJ3aXNlLCByZXR1cm5zIGEgdmFsdWUgCiAgdGhhdCB3aWxsIGV2YWx1YXRlIDxjb2RlPmZhbHNlPC9jb2RlPi4gVGhlIHJldHVybiB0eXBlIHNoYWxsIG5vdCBiZSAKICBjb252ZXJ0aWJsZSB0byA8Y29kZT5pbnQ8L2NvZGU+LiA8L3A+CiAgPHA+PGk+VGhyb3dzOjwvaT4gTm90aGluZy48L3A+CiAgPHA+PGk+Jm5ic3A7WyBOb3RlOjwvaT4gVGhpcyBjb252ZXJzaW9uIGNhbiBiZSB1c2VkIGluIGNvbnRleHRzIHdoZXJlIGEgPGNvZGU+Ym9vbDwvY29kZT4gCiAgaXMgZXhwZWN0ZWQgKCBlLmcuLCBhbiBpZiBjb25kaXRpb24gKTsgaG93ZXZlciwgaW1wbGljaXQgY29udmVyc2lvbnMgKCBlLmcuLCB0bwogIDxjb2RlPmludDwvY29kZT4pIHRoYXQgY2FuIG9jY3VyIHdpdGggPGNvZGU+Ym9vbDwvY29kZT4gYXJlIG5vdCBhbGxvd2VkLCAKICBlbGltaW5hdGluZyBzb21lIHNvdXJjZXMgb2YgdXNlciBlcnJvci4gT25lIHBvc3NpYmxlIGltcGxlbWVudGF0aW9uIGNob2ljZSBmb3IgCiAgdGhpcyB0eXBlIGlzIHBvaW50ZXIgdG8gbWVtYmVyLiA8aT4tLWVuZCBub3RlPC9pPiA8aT5dPC9pPjwvcD4KPC9ibG9ja3F1b3RlPgogIDxoMj48YSBuYW1lPSJ0aHJvd3Mtb2JqZWN0Ij48Y29kZT50aHJvd3M8L2NvZGU+IG9iamVjdDwvYT48L2gyPgogIDxwcmU+ZXh0ZXJuIGVycm9yX2NvZGUgdGhyb3dzOzwvcHJlPgo8cD5UaGUgcHJlZGVmaW5lZCA8Y29kZT5lcnJvcl9jb2RlPC9jb2RlPiBvYmplY3QgPGNvZGU+dGhyb3dzPC9jb2RlPiBpcyBzdXBwbGllZCAKZm9yIHVzZSBhcyBhICZxdW90O3Rocm93IG9uIGVycm9yJnF1b3Q7IHRhZy48L3A+CjxoMj48YSBuYW1lPSJTZW1hbnRpY3Mtb2YtdGhyb3dzIj5TZW1hbnRpY3Mgb2YgPGNvZGU+dGhyb3dzPC9jb2RlPjwvYT4gb2JqZWN0PC9oMj4KPHA+RnVuY3Rpb25zIHRoYXQgc3BlY2lmeSBhbiBhcmd1bWVudCBpbiB0aGUgZm9ybSA8Y29kZT5lcnJvcl9jb2RlJmFtcDsgZWM9dGhyb3dzPC9jb2RlPiwgCndpdGggYXBwcm9wcmlhdGUgbmFtZXNwYWNlIHF1YWxpZmllcnMsIGhhdmUgdGhlIGZvbGxvd2luZyBlcnJvciBoYW5kbGluZyAKc2VtYW50aWNzOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+PGk+UG9zdGNvbmRpdGlvbnM6PC9pPjwvcD4KICA8YmxvY2txdW90ZT4KICAgIDxwPklmIDxjb2RlPiZhbXA7ZWMgIT0gJmFtcDt0aHJvd3M8L2NvZGU+IGFuZCBhbiBlcnJvciBvY2N1cnJlZDo8L3A+CiAgICA8dWw+CiAgICAgIDxsaT4gPGNvZGU+ZWMudmFsdWUoKTwvY29kZT4gcmV0dXJucyB0aGUgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgZXJyb3IgCiAgICAgIG51bWJlciBmb3IgdGhlIHBhcnRpY3VsYXIgZXJyb3IgdGhhdCBvY2N1cnJlZC48L2xpPgogICAgICA8bGk+PGNvZGU+ZWMuY2F0ZWdvcnkoKTwvY29kZT4gcmV0dXJucyB0aGUgPGNvZGU+CiAgICA8YSBocmVmPSIjQ2xhc3MtZXJyb3JfY2F0ZWdvcnkiPmVycm9yX2NhdGVnb3J5PC9hPjwvY29kZT4gZm9yIDxjb2RlPmVjLnZhbHVlKCk8L2NvZGU+LjwvbGk+CiAgICA8L3VsPgogICAgPHA+aWYgPGNvZGU+JmFtcDtlYyAhPSAmYW1wO3Rocm93czwvY29kZT4gYW5kIGFuIGVycm9yIGRpZCBub3Qgb2NjdXIsIDxjb2RlPmVjLmNsZWFyKCk8L2NvZGU+LjwvcD4KICA8L2Jsb2NrcXVvdGU+CiAgPHA+PGk+VGhyb3dzOjwvaT48L3A+CiAgPGJsb2NrcXVvdGU+CiAgPHA+SWYgYW4gZXJyb3Igb2NjdXJzIGFuZCA8Y29kZT4mYW1wO2VjID09ICZhbXA7dGhyb3dzPC9jb2RlPiwgdGhyb3dzIGFuIGV4Y2VwdGlvbiBvZiB0eXBlCiAgPGNvZGU+PGEgaHJlZj0iI0NsYXNzLXN5c3RlbV9lcnJvciI+c3lzdGVtX2Vycm9yPC9hPjwvY29kZT4gb3Igb2YgYSB0eXBlIAogIGRlcml2ZWQgZnJvbSA8Y29kZT48YSBocmVmPSIjQ2xhc3Mtc3lzdGVtX2Vycm9yIj5zeXN0ZW1fZXJyb3I8L2E+PC9jb2RlPi4gVGhlIAogIGV4Y2VwdGlvbidzIDxjb2RlPmNvZGUoKTwvY29kZT4gbWVtYmVyIGZ1bmN0aW9uIHJldHVybnMgYSByZWZlcmVuY2UgdG8gYW4KICA8Y29kZT5lcnJvcl9jb2RlPC9jb2RlPiBvYmplY3Qgd2l0aCB0aGUgYmVoYXZpb3Igc3BlY2lmaWVkIGluIDxpPgogIFBvc3Rjb25kaXRpb25zPC9pPi48L3A+CiAgPC9ibG9ja3F1b3RlPgo8L2Jsb2NrcXVvdGU+CjxoMj48YSBuYW1lPSJOb24tbWVtYmVyLWZ1bmN0aW9ucyI+Tm9uLW1lbWJlciBmdW5jdGlvbnM8L2E+PC9oMj4KICA8cHJlPmJvb2wgb3BlcmF0b3I9PSggY29uc3QgZXJyb3JfY29kZSAmYW1wOyBsaHMsIGNvbnN0IGVycm9yX2NvZGUgJmFtcDsgcmhzICk7PC9wcmU+CjxibG9ja3F1b3RlPgogIDxwPjxpPlJldHVybnM6PC9pPiA8Y29kZT5saHMuY2F0ZWdvcnkoKSA9PSByaHMuY2F0ZWdvcnkoKSAmYW1wOyZhbXA7IGxocy52YWx1ZSgpID09IAogIHJocy52YWx1ZSgpPC9jb2RlPi48L3A+CiAgPHA+PGk+VGhyb3dzOiA8L2k+Tm90aGluZy48L3A+CjwvYmxvY2txdW90ZT4KPHByZT5ib29sIG9wZXJhdG9yPT0oIGNvbnN0IGVycm9yX2NvZGUgJmFtcDsgY29kZSwgY29uc3QgZXJyb3JfY29uZGl0aW9uICZhbXA7IGNvbmRpdGlvbiApOwpib29sIG9wZXJhdG9yPT0oIGNvbnN0IGVycm9yX2NvbmRpdGlvbiAmYW1wOyBjb25kaXRpb24sIGNvbnN0IGVycm9yX2NvZGUgJmFtcDsgY29kZSApOzwvcHJlPgo8YmxvY2txdW90ZT4KICA8cD48aT5SZXR1cm5zOjwvaT4gPGNvZGU+Y29kZS5jYXRlZ29yeSgpLmVxdWl2YWxlbnQoIGNvZGUudmFsdWUoKSwgY29uZGl0aW9uICk8YnI+CiAgfHwgY29uZGl0aW9uLmNhdGVnb3J5KCkuZXF1aXZhbGVudCggY29kZSwgY29uZGl0aW9uLnZhbHVlKCkgKTwvY29kZT4uPC9wPgogIDxwPjxpPlRocm93czogPC9pPk5vdGhpbmcuPC9wPgo8L2Jsb2NrcXVvdGU+CjxwcmU+Ym9vbCBvcGVyYXRvcj09KCBjb25zdCBlcnJvcl9jb25kaXRpb24gJmFtcDsgbGhzLCBjb25zdCBlcnJvcl9jb25kaXRpb24gJmFtcDsgcmhzICk7PC9wcmU+CjxibG9ja3F1b3RlPgogIDxwPjxpPlJldHVybnM6PC9pPiA8Y29kZT5saHMuY2F0ZWdvcnkoKSA9PSByaHMuY2F0ZWdvcnkoKSAmYW1wOyZhbXA7IGxocy52YWx1ZSgpID09IAogIHJocy52YWx1ZSgpPC9jb2RlPi48L3A+CiAgPHA+PGk+VGhyb3dzOiA8L2k+Tm90aGluZy48L3A+CjwvYmxvY2txdW90ZT4KPHByZT5ib29sIG9wZXJhdG9yIT0oIGNvbnN0IGVycm9yX2NvZGUgJmFtcDsgbGhzLCBjb25zdCBlcnJvcl9jb2RlICZhbXA7IHJocyApOzwvcHJlPgo8YmxvY2txdW90ZT4KICA8cD48aT5SZXR1cm5zOjwvaT4gPGNvZGU+IShsaHMgPT0gcmhzICk8L2NvZGU+LjwvcD4KICA8cD48aT5UaHJvd3M6IDwvaT5Ob3RoaW5nLjwvcD4KPC9ibG9ja3F1b3RlPgo8cHJlPmJvb2wgb3BlcmF0b3IhPSggY29uc3QgZXJyb3JfY29kZSAmYW1wOyBjb2RlLCBjb25zdCBlcnJvcl9jb25kaXRpb24gJmFtcDsgY29uZGl0aW9uICk7CmJvb2wgb3BlcmF0b3IhPSggY29uc3QgZXJyb3JfY29uZGl0aW9uICZhbXA7IGNvbmRpdGlvbiwgY29uc3QgZXJyb3JfY29kZSAmYW1wOyBjb2RlICk7PC9wcmU+CjxibG9ja3F1b3RlPgogIDxwPjxpPlJldHVybnM6PC9pPjxjb2RlPiAhKCBjb2RlID09Jm5ic3A7IGNvbmRpdGlvbiApPC9jb2RlPi48L3A+CiAgPHA+PGk+VGhyb3dzOiA8L2k+Tm90aGluZy48L3A+CjwvYmxvY2txdW90ZT4KPHByZT5ib29sIG9wZXJhdG9yIT0oIGNvbnN0IGVycm9yX2NvbmRpdGlvbiAmYW1wOyBsaHMsIGNvbnN0IGVycm9yX2NvbmRpdGlvbiAmYW1wOyByaHMgKTs8L3ByZT4KPGJsb2NrcXVvdGU+CiAgPHA+PGk+UmV0dXJuczo8L2k+IDxjb2RlPiEobGhzID09IHJocyApPC9jb2RlPi48L3A+CiAgPHA+PGk+VGhyb3dzOiA8L2k+Tm90aGluZy48L3A+CjwvYmxvY2txdW90ZT4KPHByZT5ib29sIG9wZXJhdG9yJmx0OyggY29uc3QgZXJyb3JfY29kZSAmYW1wOyBsaHMsIGNvbnN0IGVycm9yX2NvZGUgJmFtcDsgcmhzICk7PC9wcmU+CjxibG9ja3F1b3RlPgogIDxwPjxpPlJldHVybnM6PC9pPiA8Y29kZT5saHMuY2F0ZWdvcnkoKSAmbHQ7IHJocy5jYXRlZ29yeSgpPGJyPgogICZuYnNwOyB8fCAobGhzLmNhdGVnb3J5KCkgPT0gcmhzLmNhdGVnb3J5KCkgJmFtcDsmYW1wOyBsaHMudmFsdWUoKSAmbHQ7IHJocy52YWx1ZSgpKTwvY29kZT4uPC9wPgogIDxwPjxpPlRocm93czogPC9pPk5vdGhpbmcuPC9wPgo8L2Jsb2NrcXVvdGU+CjxwcmU+Ym9vbCBvcGVyYXRvciZsdDsoIGNvbnN0IGVycm9yX2NvbmRpdGlvbiAmYW1wOyBsaHMsIGNvbnN0IGVycm9yX2NvbmRpdGlvbiAmYW1wOyByaHMgKTs8L3ByZT4KPGJsb2NrcXVvdGU+CiAgPHA+PGk+UmV0dXJuczo8L2k+IDxjb2RlPmxocy5jYXRlZ29yeSgpICZsdDsgcmhzLmNhdGVnb3J5KCk8YnI+CiAgJm5ic3A7IHx8IChsaHMuY2F0ZWdvcnkoKSA9PSByaHMuY2F0ZWdvcnkoKSAmYW1wOyZhbXA7IGxocy52YWx1ZSgpICZsdDsgcmhzLnZhbHVlKCkpPC9jb2RlPi48L3A+CiAgPHA+PGk+VGhyb3dzOiA8L2k+Tm90aGluZy48L3A+CjwvYmxvY2txdW90ZT4KPHByZT5lcnJvcl9jb2RlIG1ha2VfZXJyb3JfY29kZSggZXJyYzo6ZXJyY190IGUgKTs8L3ByZT4KPGJsb2NrcXVvdGU+CiAgPHA+PGk+UmV0dXJuczo8L2k+IDxjb2RlPmVycm9yX2NvZGUoIGUsIGdlbmVyaWNfY2F0ZWdvcnkoKSk8L2NvZGU+LjwvcD4KPC9ibG9ja3F1b3RlPgo8cHJlPmVycm9yX2NvbmRpdGlvbiBtYWtlX2Vycm9yX2NvbmRpdGlvbiggZXJyYzo6ZXJyY190IGUgKTs8L3ByZT4KPGJsb2NrcXVvdGU+CiAgPHA+PGk+UmV0dXJuczo8L2k+IDxjb2RlPmVycm9yX2NvbmRpdGlvbiggc3RhdGljX2Nhc3QmbHQ7aW50Jmd0OyggZSApLCBnZW5lcmljX2NhdGVnb3J5KCkpPC9jb2RlPi48L3A+CjwvYmxvY2txdW90ZT4KCjxwcmU+dGVtcGxhdGUgJmx0O2NsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMmZ3Q7CiAgc3RkOjpiYXNpY19vc3RyZWFtJmx0O2NoYXJULHRyYWl0cyZndDsmYW1wOwogICAgb3BlcmF0b3ImbHQ7Jmx0OyggYmFzaWNfb3N0cmVhbSZsdDtjaGFyVCx0cmFpdHMmZ3Q7JmFtcDsgb3MsIGNvbnN0IGVycm9yX2NvZGUgJmFtcDsgZWMgKTs8L3ByZT4KPGJsb2NrcXVvdGU+CjxwPjxpPkVmZmVjdHM6PC9pPiA8Y29kZT5vcyAmbHQ7Jmx0OyBlYy5jYXRlZ29yeSgpLm5hbWUoKSAmbHQ7Jmx0OyAnOicgJmx0OyZsdDsgZWMudmFsdWUoKTwvY29kZT4uPC9wPgo8cD48aT5SZXR1cm5zOjwvaT4gPGNvZGU+b3M8L2NvZGU+LjwvcD4KPC9ibG9ja3F1b3RlPgo8cHJlPnNpemVfdCA8YSBuYW1lPSJoYXNoX3ZhbHVlIj5oYXNoX3ZhbHVlPC9hPiggY29uc3QgZXJyb3JfY29kZSAmYW1wOyBlYyApOzwvcHJlPgo8YmxvY2txdW90ZT4KICA8cD48aT5SZXR1cm5zOiA8L2k+Jm5ic3A7QSBoYXNoIHZhbHVlIHJlcHJlc2VudGluZyA8Y29kZT5lYzwvY29kZT4uPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8aDI+PGEgbmFtZT0iSGVhZGVyLXN5c3RlbV9lcnJvciI+SGVhZGVyICZsdDtib29zdC9zeXN0ZW0vc3lzdGVtX2Vycm9yLmhwcCZndDs8L2E+PC9oMj4KCjxoMz48YSBuYW1lPSJDbGFzcy1zeXN0ZW1fZXJyb3IiPkNsYXNzIDxjb2RlPgpzeXN0ZW1fZXJyb3I8L2NvZGU+PC9hPjwvaDM+CjxwPlRoZSBjbGFzcyA8Y29kZT5zeXN0ZW1fZXJyb3I8L2NvZGU+IGRlc2NyaWJlcyBhbiBleGNlcHRpb24gb2JqZWN0IHVzZWQgdG8gCnJlcG9ydCBlcnJvcnMgdGhhdCBoYXZlIGFuIGFzc29jaWF0ZWQgPGNvZGU+PGEgaHJlZj0iI0NsYXNzLWVycm9yX2NvZGUiPmVycm9yX2NvZGU8L2E+PC9jb2RlPi4gU3VjaCBlcnJvcnMgdHlwaWNhbGx5IG9yaWdpbmF0ZSBmcm9tIG9wZXJhdGluZyBzeXN0ZW0gb3Igb3RoZXIgbG93LWxldmVsIAphcHBsaWNhdGlvbiBwcm9ncmFtIGludGVyZmFjZXMuPC9wPgo8YmxvY2txdW90ZT4KPHByZT5uYW1lc3BhY2UgYm9vc3QKewogIG5hbWVzcGFjZSBzeXN0ZW0KICB7CiAgICBjbGFzcyBzeXN0ZW1fZXJyb3IgOiBwdWJsaWMgc3RkOjpydW50aW1lX2Vycm9yCiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHN5c3RlbV9lcnJvciggZXJyb3JfY29kZSBlYyApOwogICAgICBzeXN0ZW1fZXJyb3IoIGVycm9yX2NvZGUgZWMsIGNvbnN0IGNoYXIgKiB3aGF0X2FyZyApOwogICAgICBzeXN0ZW1fZXJyb3IoIGVycm9yX2NvZGUgZWMsIGNvbnN0IHN0ZDo6c3RyaW5nICZhbXA7IHdoYXRfYXJnICk7CiAgICAgIHN5c3RlbV9lcnJvciggaW50IGV2LCBjb25zdCBlcnJvcl9jYXRlZ29yeSAmYW1wOyBlY2F0LAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiB3aGF0X2FyZyApOwogICAgICBzeXN0ZW1fZXJyb3IoIGludCBldiwgY29uc3QgZXJyb3JfY2F0ZWdvcnkgJmFtcDsgZWNhdCwKICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmYW1wOyB3aGF0X2FyZyApOwogICAgICBzeXN0ZW1fZXJyb3IoIGludCBldiwgY29uc3QgZXJyb3JfY2F0ZWdvcnkgJmFtcDsgZWNhdCk7CgogICAgICBjb25zdCBlcnJvcl9jb2RlICZhbXA7IGNvZGUoKSBjb25zdCB0aHJvdygpOwogICAgICBjb25zdCBjaGFyICogICAgICAgd2hhdCgpIGNvbnN0IHRocm93KCk7CiAgICB9OwogIH0KfTwvcHJlPgo8L2Jsb2NrcXVvdGU+CjxwcmU+c3lzdGVtX2Vycm9yKCBlcnJvcl9jb2RlIGVjICk7PC9wcmU+CjxibG9ja3F1b3RlPgogIDxwPjxpPkVmZmVjdHM6PC9pPiBDb25zdHJ1Y3RzIGFuIG9iamVjdCBvZiBjbGFzcyA8Y29kZT5zeXN0ZW1fZXJyb3I8L2NvZGU+LjwvcD4KICA8cD48aT5Qb3N0Y29uZGl0aW9uOjwvaT4gPGNvZGU+Y29kZSgpID09IGVjIDxicj4KJm5ic3A7ICZhbXA7JmFtcDsgc3RkOjpzdHJjbXAoIHRoaXMtJmd0O3J1bnRpbWVfZXJyb3I6OndoYXQoKSwgJnF1b3Q7JnF1b3Q7ICkgPT0gMDwvY29kZT48L3A+CjwvYmxvY2txdW90ZT4KPHByZT5zeXN0ZW1fZXJyb3IoIGVycm9yX2NvZGUgZWMsIGNvbnN0IGNoYXIgKiB3aGF0X2FyZyApOzwvcHJlPgo8YmxvY2txdW90ZT4KICA8cD48aT5FZmZlY3RzOjwvaT4gQ29uc3RydWN0cyBhbiBvYmplY3Qgb2YgY2xhc3MgPGNvZGU+c3lzdGVtX2Vycm9yPC9jb2RlPi48L3A+CiAgPHA+PGk+UG9zdGNvbmRpdGlvbjo8L2k+IDxjb2RlPmNvZGUoKSA9PSBlYyA8YnI+CiZuYnNwOyAmYW1wOyZhbXA7IHN0ZDo6c3RyY21wKCB0aGlzLSZndDtydW50aW1lX2Vycm9yOjp3aGF0KCksIHdoYXRfYXJnICkgPT0gMDwvY29kZT48L3A+CjwvYmxvY2txdW90ZT4KPHByZT5zeXN0ZW1fZXJyb3IoIGVycm9yX2NvZGUgZWMsIGNvbnN0IHN0ZDo6c3RyaW5nICZhbXA7IHdoYXRfYXJnICk7PC9wcmU+CjxibG9ja3F1b3RlPgogIDxwPjxpPkVmZmVjdHM6PC9pPiBDb25zdHJ1Y3RzIGFuIG9iamVjdCBvZiBjbGFzcyA8Y29kZT5zeXN0ZW1fZXJyb3I8L2NvZGU+LjwvcD4KICA8cD48aT5Qb3N0Y29uZGl0aW9uOjwvaT4gPGNvZGU+Y29kZSgpID09IGVjIDxicj4KJm5ic3A7ICZhbXA7JmFtcDsgc3RkOjpzdHJjbXAoIHRoaXMtJmd0O3J1bnRpbWVfZXJyb3I6OndoYXQoKSwgd2hhdF9hcmcuY19zdHIoKSApID09IDA8L2NvZGU+PC9wPgo8L2Jsb2NrcXVvdGU+CjxwcmU+c3lzdGVtX2Vycm9yKCBpbnQgZXYsIGNvbnN0IGVycm9yX2NhdGVnb3J5ICZhbXA7IGVjYXQsCiAgICAgICAgICAgICBjb25zdCBjaGFyICogd2hhdF9hcmcgKTs8L3ByZT4KPGJsb2NrcXVvdGU+CiAgPHA+PGk+RWZmZWN0czo8L2k+IENvbnN0cnVjdHMgYW4gb2JqZWN0IG9mIGNsYXNzIDxjb2RlPnN5c3RlbV9lcnJvcjwvY29kZT4uPC9wPgogIDxwPjxpPlBvc3Rjb25kaXRpb246PC9pPiA8Y29kZT5jb2RlKCkgPT0gZXJyb3JfY29kZSggZXYsIGVjYXQgKTxicj4KJm5ic3A7ICZhbXA7JmFtcDsgc3RkOjpzdHJjbXAoIHRoaXMtJmd0O3J1bnRpbWVfZXJyb3I6OndoYXQoKSwgd2hhdF9hcmcgKSA9PSAwPC9jb2RlPjwvcD4KPC9ibG9ja3F1b3RlPgo8cHJlPnN5c3RlbV9lcnJvciggaW50IGV2LCBjb25zdCBlcnJvcl9jYXRlZ29yeSAmYW1wOyBlY2F0LAogICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJmFtcDsgd2hhdF9hcmcgKTs8L3ByZT4KPGJsb2NrcXVvdGU+CiAgPHA+PGk+RWZmZWN0czo8L2k+IENvbnN0cnVjdHMgYW4gb2JqZWN0IG9mIGNsYXNzIDxjb2RlPnN5c3RlbV9lcnJvcjwvY29kZT4uPC9wPgogIDxwPjxpPlBvc3Rjb25kaXRpb246PC9pPiA8Y29kZT5jb2RlKCkgPT0gZXJyb3JfY29kZSggZXYsIGVjYXQgKTxicj4KJm5ic3A7ICZhbXA7JmFtcDsgc3RkOjpzdHJjbXAoIHRoaXMtJmd0O3J1bnRpbWVfZXJyb3I6OndoYXQoKSwgd2hhdF9hcmcuY19zdHIoKSApID09IDA8L2NvZGU+PC9wPgo8L2Jsb2NrcXVvdGU+CjxwcmU+c3lzdGVtX2Vycm9yKCBpbnQgZXYsIGNvbnN0IGVycm9yX2NhdGVnb3J5ICZhbXA7IGVjYXQgKTs8L3ByZT4KPGJsb2NrcXVvdGU+CiAgPHA+PGk+RWZmZWN0czo8L2k+IENvbnN0cnVjdHMgYW4gb2JqZWN0IG9mIGNsYXNzIDxjb2RlPnN5c3RlbV9lcnJvcjwvY29kZT4uPC9wPgogIDxwPjxpPlBvc3Rjb25kaXRpb246PC9pPiA8Y29kZT5jb2RlKCkgPT0gZXJyb3JfY29kZSggZXYsIGVjYXQgKTxicj4KJm5ic3A7ICZhbXA7JmFtcDsgc3RkOjpzdHJjbXAoIHRoaXMtJmd0O3J1bnRpbWVfZXJyb3I6OndoYXQoKSwgJnF1b3Q7JnF1b3Q7ICkgPT0gMDwvY29kZT48L3A+CjwvYmxvY2txdW90ZT4KPHByZT5jb25zdCBlcnJvcl9jb2RlICZhbXA7IGNvZGUoKSBjb25zdDs8L3ByZT4KPGJsb2NrcXVvdGU+CiAgPHA+PGk+UmV0dXJuczo8L2k+IDxjb2RlPmVjPC9jb2RlPiBvciA8Y29kZT5lcnJvcl9jb2RlKCBldiwgZWNhdCApPC9jb2RlPiwgZnJvbSAKICB0aGUgY29uc3RydWN0b3IsIGFzIGFwcHJvcHJpYXRlLjwvcD4KPC9ibG9ja3F1b3RlPgo8cHJlPmNvbnN0IGNoYXIgKiB3aGF0KCkgY29uc3Q7PC9wcmU+CjxibG9ja3F1b3RlPgogIDxwPjxpPlJldHVybnM6IDwvaT5BIHN0cmluZyBpbmNvcnBvcmF0aW5nIDxjb2RlPgogIHRoaXMtJmd0O3J1bnRpbWVfZXJyb3I6OndoYXQoKTwvY29kZT4gYW5kIDxjb2RlPgogIGNvZGUubWVzc2FnZSgpPC9jb2RlPi48L3A+CjwvYmxvY2txdW90ZT4KPGhyPgoKPHA+UmV2aXNlZCAKPCEtLXdlYmJvdCBib3Q9IlRpbWVzdGFtcCIgUy1UeXBlPSJFRElURUQiIFMtRm9ybWF0PSIlQiAlZCwgJVkiIHN0YXJ0c3BhbiAtLT5KdW5lIDI5LCAyMDEwPCEtLXdlYmJvdCBib3Q9IlRpbWVzdGFtcCIgZW5kc3BhbiBpLWNoZWNrc3VtPSIxNDQzMiIgLS0+IDwvZm9udD4KPC9wPgoKPHA+qSBDb3B5cmlnaHQgQmVtYW4gRGF3ZXMsIDIwMDYsIDIwMDcsIDIwMDg8L3A+Cgo8cD5EaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIFNlZQo8YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQiPnd3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0PC9hPjwvcD4KCjwvYm9keT4KCjwvaHRtbD4=