PGh0bWw+CjxoZWFkPgo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KPHRpdGxlPkNoYXB0ZXKgMS6gQm9vc3QuT3B0aW9uYWw8L3RpdGxlPgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImJvb3N0Ym9vay5jc3MiIHR5cGU9InRleHQvY3NzIj4KPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NS4yIj4KPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iQ2hhcHRlcqAxLqBCb29zdC5PcHRpb25hbCI+CjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iYm9vc3Rfb3B0aW9uYWwvZGV2ZWxvcG1lbnQuaHRtbCIgdGl0bGU9IkRldmVsb3BtZW50Ij4KPC9oZWFkPgo8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cjx0YWJsZSBjZWxscGFkZGluZz0iMiIgd2lkdGg9IjEwMCUiPjx0cj4KPHRkIHZhbGlnbj0idG9wIj48aW1nIGFsdD0iQm9vc3QgQysrIExpYnJhcmllcyIgd2lkdGg9IjI3NyIgaGVpZ2h0PSI4NiIgc3JjPSIuLi8uLi8uLi8uLi9ib29zdC5wbmciPjwvdGQ+Cjx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSIuLi8uLi8uLi8uLi9pbmRleC5odG1sIj5Ib21lPC9hPjwvdGQ+Cjx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSIuLi8uLi8uLi9saWJyYXJpZXMuaHRtIj5MaWJyYXJpZXM8L2E+PC90ZD4KPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL3VzZXJzL3Blb3BsZS5odG1sIj5QZW9wbGU8L2E+PC90ZD4KPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL3VzZXJzL2ZhcS5odG1sIj5GQVE8L2E+PC90ZD4KPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Ii4uLy4uLy4uLy4uL21vcmUvaW5kZXguaHRtIj5Nb3JlPC9hPjwvdGQ+CjwvdHI+PC90YWJsZT4KPGhyPgo8ZGl2IGNsYXNzPSJzcGlyaXQtbmF2Ij48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImJvb3N0X29wdGlvbmFsL2RldmVsb3BtZW50Lmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi9kb2MvaHRtbC9pbWFnZXMvbmV4dC5wbmciIGFsdD0iTmV4dCI+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJjaGFwdGVyIiB0aXRsZT0iQ2hhcHRlcqAxLqBCb29zdC5PcHRpb25hbCI+CjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj4KPGRpdj48aDIgY2xhc3M9InRpdGxlIj4KPGEgbmFtZT0ib3B0aW9uYWwiPjwvYT5DaGFwdGVyoDEuoEJvb3N0Lk9wdGlvbmFsPC9oMj48L2Rpdj4KPGRpdj48ZGl2IGNsYXNzPSJhdXRob3IiPjxoMyBjbGFzcz0iYXV0aG9yIj4KPHNwYW4gY2xhc3M9ImZpcnN0bmFtZSI+RmVybmFuZG8gTHVpczwvc3Bhbj4gPHNwYW4gY2xhc3M9InN1cm5hbWUiPkNhY2Npb2xhIENhcmJhbGxhbDwvc3Bhbj4KPC9oMz48L2Rpdj48L2Rpdj4KPGRpdj48cCBjbGFzcz0iY29weXJpZ2h0Ij5Db3B5cmlnaHQgqSAyMDAzIC0yMDA3IEZlcm5hbmRvIEx1aXMgQ2FjY2lvbGEgQ2FyYmFsbGFsPC9wPjwvZGl2Pgo8ZGl2PjxkaXYgY2xhc3M9ImxlZ2Fsbm90aWNlIiB0aXRsZT0iTGVnYWwgTm90aWNlIj4KPGEgbmFtZT0iaWQ1NTM5NDMiPjwvYT48cD4KICAgICAgICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCiAgICAgICAgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQiIHRhcmdldD0iX3RvcCI+aHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0PC9hPikKICAgICAgPC9wPgo8L2Rpdj48L2Rpdj4KPC9kaXY+PC9kaXY+CjxkaXYgY2xhc3M9InRvYyI+CjxwPjxiPlRhYmxlIG9mIENvbnRlbnRzPC9iPjwvcD4KPGRsPgo8ZHQ+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImluZGV4Lmh0bWwjb3B0aW9uYWwubW90aXZhdGlvbiI+TW90aXZhdGlvbjwvYT48L3NwYW4+PC9kdD4KPGR0PjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJib29zdF9vcHRpb25hbC9kZXZlbG9wbWVudC5odG1sIj5EZXZlbG9wbWVudDwvYT48L3NwYW4+PC9kdD4KPGRkPjxkbD4KPGR0PjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJib29zdF9vcHRpb25hbC9kZXZlbG9wbWVudC5odG1sI2Jvb3N0X29wdGlvbmFsLmRldmVsb3BtZW50LnRoZV9tb2RlbHMiPlRoZSBtb2RlbHM8L2E+PC9zcGFuPjwvZHQ+CjxkdD48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iYm9vc3Rfb3B0aW9uYWwvZGV2ZWxvcG1lbnQuaHRtbCNib29zdF9vcHRpb25hbC5kZXZlbG9wbWVudC50aGVfc2VtYW50aWNzIj5UaGUgc2VtYW50aWNzPC9hPjwvc3Bhbj48L2R0Pgo8ZHQ+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImJvb3N0X29wdGlvbmFsL2RldmVsb3BtZW50Lmh0bWwjYm9vc3Rfb3B0aW9uYWwuZGV2ZWxvcG1lbnQudGhlX2ludGVyZmFjZSI+VGhlIEludGVyZmFjZTwvYT48L3NwYW4+PC9kdD4KPC9kbD48L2RkPgo8ZHQ+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImJvb3N0X29wdGlvbmFsL3N5bm9wc2lzLmh0bWwiPlN5bm9wc2lzPC9hPjwvc3Bhbj48L2R0Pgo8ZHQ+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImJvb3N0X29wdGlvbmFsL2RldGFpbGVkX3NlbWFudGljcy5odG1sIj5EZXRhaWxlZCBTZW1hbnRpY3M8L2E+PC9zcGFuPjwvZHQ+CjxkdD48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iYm9vc3Rfb3B0aW9uYWwvZXhhbXBsZXMuaHRtbCI+RXhhbXBsZXM8L2E+PC9zcGFuPjwvZHQ+CjxkZD48ZGw+CjxkdD48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iYm9vc3Rfb3B0aW9uYWwvZXhhbXBsZXMuaHRtbCNib29zdF9vcHRpb25hbC5leGFtcGxlcy5vcHRpb25hbF9yZXR1cm5fdmFsdWVzIj5PcHRpb25hbAogICAgICByZXR1cm4gdmFsdWVzPC9hPjwvc3Bhbj48L2R0Pgo8ZHQ+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImJvb3N0X29wdGlvbmFsL2V4YW1wbGVzLmh0bWwjYm9vc3Rfb3B0aW9uYWwuZXhhbXBsZXMub3B0aW9uYWxfbG9jYWxfdmFyaWFibGVzIj5PcHRpb25hbAogICAgICBsb2NhbCB2YXJpYWJsZXM8L2E+PC9zcGFuPjwvZHQ+CjxkdD48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iYm9vc3Rfb3B0aW9uYWwvZXhhbXBsZXMuaHRtbCNib29zdF9vcHRpb25hbC5leGFtcGxlcy5vcHRpb25hbF9kYXRhX21lbWJlcnMiPk9wdGlvbmFsCiAgICAgIGRhdGEgbWVtYmVyczwvYT48L3NwYW4+PC9kdD4KPGR0PjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJib29zdF9vcHRpb25hbC9leGFtcGxlcy5odG1sI2Jvb3N0X29wdGlvbmFsLmV4YW1wbGVzLmJ5cGFzc2luZ19leHBlbnNpdmVfdW5uZWNlc3NhcnlfZGVmYXVsdF9jb25zdHJ1Y3Rpb24iPkJ5cGFzc2luZwogICAgICBleHBlbnNpdmUgdW5uZWNlc3NhcnkgZGVmYXVsdCBjb25zdHJ1Y3Rpb248L2E+PC9zcGFuPjwvZHQ+CjwvZGw+PC9kZD4KPGR0PjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJib29zdF9vcHRpb25hbC9vcHRpb25hbF9yZWZlcmVuY2VzLmh0bWwiPk9wdGlvbmFsIHJlZmVyZW5jZXM8L2E+PC9zcGFuPjwvZHQ+CjxkdD48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iYm9vc3Rfb3B0aW9uYWwvcmViaW5kaW5nX3NlbWFudGljc19mb3JfYXNzaWdubWVudF9vZl9vcHRpb25hbF9yZWZlcmVuY2VzLmh0bWwiPlJlYmluZGluZwogICAgc2VtYW50aWNzIGZvciBhc3NpZ25tZW50IG9mIG9wdGlvbmFsIHJlZmVyZW5jZXM8L2E+PC9zcGFuPjwvZHQ+CjxkdD48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iYm9vc3Rfb3B0aW9uYWwvaW5fcGxhY2VfZmFjdG9yaWVzLmh0bWwiPkluLVBsYWNlIEZhY3RvcmllczwvYT48L3NwYW4+PC9kdD4KPGR0PjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJib29zdF9vcHRpb25hbC9hX25vdGVfYWJvdXRfb3B0aW9uYWxfYm9vbF8uaHRtbCI+QSBub3RlIGFib3V0CiAgICBvcHRpb25hbCZsdDtib29sJmd0OzwvYT48L3NwYW4+PC9kdD4KPGR0PjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJib29zdF9vcHRpb25hbC9leGNlcHRpb25fc2FmZXR5X2d1YXJhbnRlZXMuaHRtbCI+RXhjZXB0aW9uIFNhZmV0eQogICAgR3VhcmFudGVlczwvYT48L3NwYW4+PC9kdD4KPGR0PjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJib29zdF9vcHRpb25hbC90eXBlX3JlcXVpcmVtZW50cy5odG1sIj5UeXBlIHJlcXVpcmVtZW50czwvYT48L3NwYW4+PC9kdD4KPGR0PjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJib29zdF9vcHRpb25hbC9pbXBsZW1lbnRhdGlvbl9ub3Rlcy5odG1sIj5JbXBsZW1lbnRhdGlvbiBOb3RlczwvYT48L3NwYW4+PC9kdD4KPGR0PjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJib29zdF9vcHRpb25hbC9kZXBlbmRlbmNpZXNfYW5kX3BvcnRhYmlsaXR5Lmh0bWwiPkRlcGVuZGVuY2llcwogICAgYW5kIFBvcnRhYmlsaXR5PC9hPjwvc3Bhbj48L2R0Pgo8ZHQ+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImJvb3N0X29wdGlvbmFsL2Fja25vd2xlZGdtZW50cy5odG1sIj5BY2tub3dsZWRnbWVudHM8L2E+PC9zcGFuPjwvZHQ+CjwvZGw+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIiB0aXRsZT0iTW90aXZhdGlvbiI+CjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+CjxhIG5hbWU9Im9wdGlvbmFsLm1vdGl2YXRpb24iPjwvYT48YSBjbGFzcz0ibGluayIgaHJlZj0iaW5kZXguaHRtbCNvcHRpb25hbC5tb3RpdmF0aW9uIiB0aXRsZT0iTW90aXZhdGlvbiI+TW90aXZhdGlvbjwvYT4KPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KPHA+CiAgICAgIENvbnNpZGVyIHRoZXNlIGZ1bmN0aW9ucyB3aGljaCBzaG91bGQgcmV0dXJuIGEgdmFsdWUgYnV0IHdoaWNoIG1pZ2h0IG5vdCBoYXZlCiAgICAgIGEgdmFsdWUgdG8gcmV0dXJuOgogICAgPC9wPgo8ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPjx1bCBjbGFzcz0iaXRlbWl6ZWRsaXN0IiB0eXBlPSJkaXNjIj4KPGxpIGNsYXNzPSJsaXN0aXRlbSI+CiAgICAgICAgKEEpIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImtleXdvcmQiPmRvdWJsZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnNxcnQ8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPmRvdWJsZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPm48L3NwYW4+CiAgICAgICAgPHNwYW4gY2xhc3M9InNwZWNpYWwiPik7PC9zcGFuPjwvY29kZT4KPC9saT4KPGxpIGNsYXNzPSJsaXN0aXRlbSI+CiAgICAgICAgKEIpIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImtleXdvcmQiPmNoYXI8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5nZXRfYXN5bmNfaW5wdXQ8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPigpOzwvc3Bhbj48L2NvZGU+CjwvbGk+CjxsaSBjbGFzcz0ibGlzdGl0ZW0iPgogICAgICAgIChDKSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5wb2ludDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnBvbHlnb248L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5nZXRfYW55X3BvaW50X2VmZmVjdGl2ZWx5X2luc2lkZTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KCk7PC9zcGFuPjwvY29kZT4KPC9saT4KPC91bD48L2Rpdj4KPHA+CiAgICAgIFRoZXJlIGFyZSBkaWZmZXJlbnQgYXBwcm9hY2hlcyB0byB0aGUgaXNzdWUgb2Ygbm90IGhhdmluZyBhIHZhbHVlIHRvIHJldHVybi4KICAgIDwvcD4KPHA+CiAgICAgIEEgdHlwaWNhbCBhcHByb2FjaCBpcyB0byBjb25zaWRlciB0aGUgZXhpc3RlbmNlIG9mIGEgdmFsaWQgcmV0dXJuIHZhbHVlIGFzCiAgICAgIGEgcG9zdGNvbmRpdGlvbiwgc28gdGhhdCBpZiB0aGUgZnVuY3Rpb24gY2Fubm90IGNvbXB1dGUgdGhlIHZhbHVlIHRvIHJldHVybiwKICAgICAgaXQgaGFzIGVpdGhlciB1bmRlZmluZWQgYmVoYXZpb3IgKGFuZCBjYW4gdXNlIGFzc2VydCBpbiBhIGRlYnVnIGJ1aWxkKSBvciB1c2VzCiAgICAgIGEgcnVudGltZSBjaGVjayBhbmQgdGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgcG9zdGNvbmRpdGlvbiBpcyB2aW9sYXRlZC4gVGhpcwogICAgICBpcyBhIHJlYXNvbmFibGUgY2hvaWNlIGZvciBleGFtcGxlLCBmb3IgZnVuY3Rpb24gKEEpLCBiZWNhdXNlIHRoZSBsYWNrIG9mIGEKICAgICAgcHJvcGVyIHJldHVybiB2YWx1ZSBpcyBkaXJlY3RseSByZWxhdGVkIHRvIGFuIGludmFsaWQgcGFyYW1ldGVyIChvdXQgb2YgZG9tYWluCiAgICAgIGFyZ3VtZW50KSwgc28gaXQgaXMgYXBwcm9wcmlhdGUgdG8gcmVxdWlyZSB0aGUgY2FsbGVlIHRvIHN1cHBseSBvbmx5IHBhcmFtZXRlcnMKICAgICAgaW4gYSB2YWxpZCBkb21haW4gZm9yIGV4ZWN1dGlvbiB0byBjb250aW51ZSBub3JtYWxseS4KICAgIDwvcD4KPHA+CiAgICAgIEhvd2V2ZXIsIGZ1bmN0aW9uIChCKSwgYmVjYXVzZSBvZiBpdHMgYXN5bmNocm9ub3VzIG5hdHVyZSwgZG9lcyBub3QgZmFpbCBqdXN0CiAgICAgIGJlY2F1c2UgaXQgY2FuJ3QgZmluZCBhIHZhbHVlIHRvIHJldHVybjsgc28gaXQgaXMgaW5jb3JyZWN0IHRvIGNvbnNpZGVyIHN1Y2gKICAgICAgYSBzaXR1YXRpb24gYW4gZXJyb3IgYW5kIGFzc2VydCBvciB0aHJvdyBhbiBleGNlcHRpb24uIFRoaXMgZnVuY3Rpb24gbXVzdCByZXR1cm4sCiAgICAgIGFuZCBzb21laG93LCBtdXN0IHRlbGwgdGhlIGNhbGxlZSB0aGF0IGl0IGlzIG5vdCByZXR1cm5pbmcgYSBtZWFuaW5nZnVsIHZhbHVlLgogICAgPC9wPgo8cD4KICAgICAgQSBzaW1pbGFyIHNpdHVhdGlvbiBvY2N1cnMgd2l0aCBmdW5jdGlvbiAoQyk6IGl0IGlzIGNvbmNlcHR1YWxseSBhbiBlcnJvciB0bwogICAgICBhc2sgYSA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5udWxsLWFyZWE8L2VtPjwvc3Bhbj4gcG9seWdvbiB0byByZXR1cm4gYSBwb2ludCBpbnNpZGUgaXRzZWxmLAogICAgICBidXQgaW4gbWFueSBhcHBsaWNhdGlvbnMsIGl0IGlzIGp1c3QgaW1wcmFjdGljYWwgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMgdG8KICAgICAgdHJlYXQgdGhpcyBhcyBhbiBlcnJvciAoYmVjYXVzZSBkZXRlY3RpbmcgdGhhdCB0aGUgcG9seWdvbiBoYXMgbm8gYXJlYSBtaWdodAogICAgICBiZSB0b28gZXhwZW5zaXZlIHRvIGJlIHJlcXVpcmVkIHRvIGJlIHRlc3RlZCBwcmV2aW91c2x5KSwgYW5kIGVpdGhlciBhbiBhcmJpdHJhcnkKICAgICAgcG9pbnQgKHR5cGljYWxseSBhdCBpbmZpbml0eSkgaXMgcmV0dXJuZWQsIG9yIHNvbWUgZWZmaWNpZW50IHdheSB0byB0ZWxsIHRoZQogICAgICBjYWxsZWUgdGhhdCB0aGVyZSBpcyBubyBzdWNoIHBvaW50IGlzIHVzZWQuCiAgICA8L3A+CjxwPgogICAgICBUaGVyZSBhcmUgdmFyaW91cyBtZWNoYW5pc21zIHRvIGxldCBmdW5jdGlvbnMgY29tbXVuaWNhdGUgdGhhdCB0aGUgcmV0dXJuZWQKICAgICAgdmFsdWUgaXMgbm90IHZhbGlkLiBPbmUgc3VjaCBtZWNoYW5pc20sIHdoaWNoIGlzIHF1aXRlIGNvbW1vbiBzaW5jZSBpdCBoYXMKICAgICAgemVybyBvciBuZWdsaWdpYmxlIG92ZXJoZWFkLCBpcyB0byB1c2UgYSBzcGVjaWFsIHZhbHVlIHdoaWNoIGlzIHJlc2VydmVkIHRvCiAgICAgIGNvbW11bmljYXRlIHRoaXMuIENsYXNzaWNhbCBleGFtcGxlcyBvZiBzdWNoIHNwZWNpYWwgdmFsdWVzIGFyZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5FT0Y8L3NwYW4+PC9jb2RlPiwgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+c3RyaW5nPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+bnBvczwvc3Bhbj48L2NvZGU+LCBwb2ludHMKICAgICAgYXQgaW5maW5pdHksIGV0Yy4uLgogICAgPC9wPgo8cD4KICAgICAgV2hlbiB0aG9zZSB2YWx1ZXMgZXhpc3QsIGkuZS4gdGhlIHJldHVybiB0eXBlIGNhbiBob2xkIGFsbCBtZWFuaW5nZnVsIHZhbHVlcwogICAgICA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5wbHVzPC9lbT48L3NwYW4+IHRoZSA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5zaWduYWw8L2VtPjwvc3Bhbj4gdmFsdWUsIHRoaXMgbWVjaGFuaXNtCiAgICAgIGlzIHF1aXRlIGFwcHJvcHJpYXRlIGFuZCB3ZWxsIGtub3duLiBVbmZvcnR1bmF0ZWx5LCB0aGVyZSBhcmUgY2FzZXMgd2hlbiBzdWNoCiAgICAgIHZhbHVlcyBkbyBub3QgZXhpc3QuIEluIHRoZXNlIGNhc2VzLCB0aGUgdXN1YWwgYWx0ZXJuYXRpdmUgaXMgZWl0aGVyIHRvIHVzZQogICAgICBhIHdpZGVyIHR5cGUsIHN1Y2ggYXMgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0ia2V5d29yZCI+aW50PC9zcGFuPjwvY29kZT4gaW4gcGxhY2UKICAgICAgb2YgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0ia2V5d29yZCI+Y2hhcjwvc3Bhbj48L2NvZGU+OyBvciBhIGNvbXBvdW5kIHR5cGUsIHN1Y2gKICAgICAgYXMgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+c3RkPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+cGFpcjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+cG9pbnQ8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPmJvb2w8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+PC9jb2RlPi4KICAgIDwvcD4KPHA+CiAgICAgIFJldHVybmluZyBhIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnN0ZDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnBhaXI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQ8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPmJvb2w8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+PC9jb2RlPiwgdGh1cyBhdHRhY2hpbmcgYSBib29sZWFuIGZsYWcgdG8gdGhlIHJlc3VsdAogICAgICB3aGljaCBpbmRpY2F0ZXMgaWYgdGhlIHJlc3VsdCBpcyBtZWFuaW5nZnVsLCBoYXMgdGhlIGFkdmFudGFnZSB0aGF0IGNhbiBiZQogICAgICB0dXJuZWQgaW50byBhIGNvbnNpc3RlbnQgaWRpb20gc2luY2UgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIHBhaXIgY2FuIGJlIHdoYXRldmVyCiAgICAgIHRoZSBmdW5jdGlvbiB3b3VsZCBjb25jZXB0dWFsbHkgcmV0dXJuLiBGb3IgZXhhbXBsZSwgdGhlIGxhc3QgdHdvIGZ1bmN0aW9ucwogICAgICBjb3VsZCBoYXZlIHRoZSBmb2xsb3dpbmcgaW50ZXJmYWNlOgogICAgPC9wPgo8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnN0ZDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnBhaXI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPmNoYXI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPmJvb2w8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5nZXRfYXN5bmNfaW5wdXQ8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPigpOzwvc3Bhbj4KPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnN0ZDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnBhaXI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnBvaW50PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5ib29sPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+cG9seWdvbjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmdldF9hbnlfcG9pbnRfZWZmZWN0aXZlbHlfaW5zaWRlPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oKTs8L3NwYW4+CjwvcHJlPgo8cD4KICAgICAgVGhlc2UgZnVuY3Rpb25zIHVzZSBhIGNvbnNpc3RlbnQgaW50ZXJmYWNlIGZvciBkZWFsaW5nIHdpdGggcG9zc2libHkgaW5leGlzdGVudAogICAgICByZXN1bHRzOgogICAgPC9wPgo8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnN0ZDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnBhaXI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnBvaW50PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5ib29sPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+cDwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5wb2x5PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4uPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5nZXRfYW55X3BvaW50X2VmZmVjdGl2ZWx5X2luc2lkZTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KCk7PC9zcGFuPgo8c3BhbiBjbGFzcz0ia2V5d29yZCI+aWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+cDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ljwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+c2Vjb25kPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTwvc3Bhbj4KICAgIDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mbG9vZF9maWxsPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5wPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4uPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5maXJzdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTs8L3NwYW4+CjwvcHJlPgo8cD4KICAgICAgSG93ZXZlciwgbm90IG9ubHkgaXMgdGhpcyBxdWl0ZSBhIGJ1cmRlbiBzeW50YWN0aWNhbGx5LCBpdCBpcyBhbHNvIGVycm9yIHByb25lCiAgICAgIHNpbmNlIHRoZSB1c2VyIGNhbiBlYXNpbHkgdXNlIHRoZSBmdW5jdGlvbiByZXN1bHQgKGZpcnN0IGVsZW1lbnQgb2YgdGhlIHBhaXIpCiAgICAgIHdpdGhvdXQgZXZlciBjaGVja2luZyBpZiBpdCBoYXMgYSB2YWxpZCB2YWx1ZS4KICAgIDwvcD4KPHA+CiAgICAgIENsZWFybHksIHdlIG5lZWQgYSBiZXR0ZXIgaWRpb20uCiAgICA8L3A+CjwvZGl2Pgo8cD4KICA8L3A+CjwvZGl2Pgo8dGFibGUgeG1sbnM6cmV2PSJodHRwOi8vd3d3LmNzLnJwaS5lZHUvfmdyZWdvZC9ib29zdC90b29scy9kb2MvcmV2aXNpb24iIHdpZHRoPSIxMDAlIj48dHI+Cjx0ZCBhbGlnbj0ibGVmdCI+PHA+PHNtYWxsPkxhc3QgcmV2aXNlZDogTm92ZW1iZXIgMjAsIDIwMDkgYXQgMTA6MjQ6MjggR01UPC9zbWFsbD48L3A+PC90ZD4KPHRkIGFsaWduPSJyaWdodCI+PGRpdiBjbGFzcz0iY29weXJpZ2h0LWZvb3RlciI+PC9kaXY+PC90ZD4KPC90cj48L3RhYmxlPgo8aHI+CjxkaXYgY2xhc3M9InNwaXJpdC1uYXYiPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iYm9vc3Rfb3B0aW9uYWwvZGV2ZWxvcG1lbnQuaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uL2RvYy9odG1sL2ltYWdlcy9uZXh0LnBuZyIgYWx0PSJOZXh0Ij48L2E+PC9kaXY+CjwvYm9keT4KPC9odG1sPgo=