/////////////////////////////////////////////////
// AUTOGENERATED AT SVN EXPORT TIME
// DO NOT EDIT
/////////////////////////////////////////////////
?>
YTo3OntzOjEzOiJjb250ZW50U3RhdHVzIjthOjE6e3M6Njoic3RhdHVzIjtiOjE7fXM6NzoiY29udGVudCI7czo0MDk2MjoiPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KICAgIHZhciBNVk5fUFVCID0gTVZOX1BVQiB8fCB7J2FjdGlvbic6J2FydGljbGUnLCAndXJsJzonaHR0cDovL3d3dy5jaXR5cGFnZXMuY29tLzIwMTItMTEtMjgvYXJ0cy9jaHJpc3RtYXMtc2hvd3MtYnJpbmctam95LWFuZC1qZWVycy8nfTsNCiAgICB2YXIgTVZOX1NIT1dfV0VMQ09NRSA9IE1WTl9TSE9XX1dFTENPTUUgfHwgdHJ1ZTsNCiAgICBpZighd2luZG93LlJlY2FwdGNoYSl7DQogICAgICAgICQuZ2V0U2NyaXB0KCdodHRwOi8vd3d3Lmdvb2dsZS5jb20vcmVjYXB0Y2hhL2FwaS9qcy9yZWNhcHRjaGFfYWpheC5qcycpOw0KICAgIH0NCjwvc2NyaXB0Pg0KDQo8ZGl2IGNsYXNzPSdjb250ZW50dmlldyc+DQogPGRpdiBjbGFzcz0nc2hhcmVzJz4NCiA8dWwgY2xhc3M9IlNoYXJlX0J1dHRvbnMiPjxsaSBjbGFzcz0iRmFjZWJvb2tfTGlrZSI+PGRpdiBpZD0iZmItcm9vdCI+PC9kaXY+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLy88IVtDREFUQVsKKGZ1bmN0aW9uKGQsIHMsIGlkKSB7DQogIHZhciBqcywgZmpzID0gZC5nZXRFbGVtZW50c0J5VGFnTmFtZShzKVswXTsNCiAgaWYgKGQuZ2V0RWxlbWVudEJ5SWQoaWQpKSByZXR1cm47DQogIGpzID0gZC5jcmVhdGVFbGVtZW50KHMpOyBqcy5pZCA9IGlkOw0KICBqcy5zcmMgPSAiLy9jb25uZWN0LmZhY2Vib29rLm5ldC9lbl9VUy9hbGwuanMjeGZibWw9MSZhcHBJZD0yMDc5MTA2NzU4OTE2MDQiOw0KICBmanMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoanMsIGZqcyk7DQogICAgfShkb2N1bWVudCwgJ3NjcmlwdCcsICdmYWNlYm9vay1qc3NkaycpKTsKLy9dXT4KPC9zY3JpcHQ+CjxkaXYgY2xhc3M9ImZiLWxpa2UiIGRhdGEtc2VuZD0idHJ1ZSIgZGF0YS1ocmVmPSJodHRwJTNBJTJGJTJGd3d3LmNpdHlwYWdlcy5jb20lMkYyMDEyLTExLTI4JTJGYXJ0cyUyRmNocmlzdG1hcy1zaG93cy1icmluZy1qb3ktYW5kLWplZXJzJTJGIiBkYXRhLWxheW91dD0iYnV0dG9uX2NvdW50IiBkYXRhLXdpZHRoPSIxNTAiIGRhdGEtc2hvdy1mYWNlcz0idHJ1ZSI+PC9kaXY+PC9saT4KPGxpIGNsYXNzPSJUd2l0dGVyIj48YSBocmVmPSJodHRwczovL3R3aXR0ZXIuY29tL3NoYXJlIiBjbGFzcz0idHdpdHRlci1zaGFyZS1idXR0b24iIGRhdGEtdGV4dD0iQ2hyaXN0bWFzIHNob3dzIGJyaW5nIGpveSBhbmQgamVlcnMiIGRhdGEtdXJsPSJodHRwOi8vd3d3LmNpdHlwYWdlcy5jb20vMjAxMi0xMS0yOC9hcnRzL2NocmlzdG1hcy1zaG93cy1icmluZy1qb3ktYW5kLWplZXJzLyIgZGF0YS12aWE9ImNpdHlwYWdlcyI+PC9hPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci8vPCFbQ0RBVEFbCiFmdW5jdGlvbihkLHMsaWQpe3ZhciBqcyxmanM9ZC5nZXRFbGVtZW50c0J5VGFnTmFtZShzKVswXTtpZighZC5nZXRFbGVtZW50QnlJZChpZCkpe2pzPWQuY3JlYXRlRWxlbWVudChzKTtqcy5pZD1pZDtqcy5zcmM9Ii8vcGxhdGZvcm0udHdpdHRlci5jb20vd2lkZ2V0cy5qcyI7ZmpzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGpzLGZqcyk7fX0oZG9jdW1lbnQsInNjcmlwdCIsInR3aXR0ZXItd2pzIik7Ci8vXV0+Cjwvc2NyaXB0PjwvbGk+CjxsaSBjbGFzcz0iU3R1bWJsZV9VcG9uIj48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci8vPCFbQ0RBVEFbCihmdW5jdGlvbigpIHt2YXIgbGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsgbGkudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnOyBsaS5hc3luYyA9IHRydWU7DQogICAgbGkuc3JjID0gKCdodHRwczonID09IGRvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sID8gJ2h0dHBzOicgOiAnaHR0cDonKSArICcvL3BsYXRmb3JtLnN0dW1ibGV1cG9uLmNvbS8xL3dpZGdldHMuanMnOw0KICAgIHZhciBzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpWzBdOyBzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGxpLCBzKTsNCiAgfSkoKTsKLy9dXT4KPC9zY3JpcHQ+CjxzdTpiYWRnZSBsYXlvdXQ9IjEiPjwvc3U6YmFkZ2U+PC9saT4KPGxpIGNsYXNzPSJQb2NrZXQiPjxhIGRhdGEtcG9ja2V0LWxhYmVsPSJwb2NrZXQiIGRhdGEtc2F2ZS11cmw9Imh0dHAlM0ElMkYlMkZ3d3cuY2l0eXBhZ2VzLmNvbSUyRjIwMTItMTEtMjglMkZhcnRzJTJGY2hyaXN0bWFzLXNob3dzLWJyaW5nLWpveS1hbmQtamVlcnMlMkYiIGRhdGEtcG9ja2V0LWNvdW50PSJob3Jpem9udGFsIiBjbGFzcz0icG9ja2V0LWJ0biIgZGF0YS1sYW5nPSJlbiI+PC9hPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+IWZ1bmN0aW9uKGQsaSl7aWYoIWQuZ2V0RWxlbWVudEJ5SWQoaSkpe3ZhciBqPWQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7ai5pZD1pO2ouc3JjPSJodHRwczovL3dpZGdldHMuZ2V0cG9ja2V0LmNvbS92MS9qL2J0bi5qcz92PTEiO3ZhciB3PWQuZ2V0RWxlbWVudEJ5SWQoaSk7ZC5ib2R5LmFwcGVuZENoaWxkKGopO319KGRvY3VtZW50LCJwb2NrZXQtYnRuLWpzIik7PC9zY3JpcHQ+PC9saT4KPGxpIGNsYXNzPSJHb29nbGVQbHVzIj48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci8vPCFbQ0RBVEFbCihmdW5jdGlvbigpIHsNCiAgICB2YXIgcG8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsgcG8udHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnOyBwby5hc3luYyA9IHRydWU7DQogICAgcG8uc3JjID0gJ2h0dHBzOi8vYXBpcy5nb29nbGUuY29tL2pzL3BsdXNvbmUuanMnOw0KICAgIHZhciBzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpWzBdOyBzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHBvLCBzKTsNCiAgfSkoKTsKLy9dXT4KPC9zY3JpcHQ+CjxnOnBsdXNvbmUgc2l6ZT0ibWVkaXVtIiBocmVmPSJodHRwOi8vd3d3LmNpdHlwYWdlcy5jb20vMjAxMi0xMS0yOC9hcnRzL2NocmlzdG1hcy1zaG93cy1icmluZy1qb3ktYW5kLWplZXJzLyI+PC9nOnBsdXNvbmU+PC9saT48L3VsPjxkaXYgY2xhc3M9IkNsZWFySXQiPjwvZGl2PiA8L2Rpdj4NCiA8ZGl2IGNsYXNzPSdjb250ZW50X2hlYWQnPg0KICA8aDEgY2xhc3M9J2hlYWRsaW5lJz5DaHJpc3RtYXMgc2hvd3MgYnJpbmcgam95IGFuZCBqZWVyczwvaDE+DQogIDxoMz48aT5DaHJpc3RtYXM6IEltcG9zc2libGU8L2k+IGFuZCA8aT5DaHJpc3RtYXMgb2YgU3dpbmc8L2k+IGZhbGwgb24gdHdvIGVuZHMgb2YgdGhlIGhvbGlkYXktc2hvdyBzcGVjdHJ1bTwvaDM+DQogIDxkaXYgY2xhc3M9J2J5bGluZSc+DQogICAgPHNwYW4gY2xhc3M9J3RleHRzaXplJyB0aXRsZT0nQ2xpY2sgdG8gcmVzaXplIHRleHQnPjxhIGNsYXNzPSdzbScgaHJlZj0namF2YXNjcmlwdDo7JyBpZD0ndGV4dF9zaXplX3NtJz5BPC9hPiAgPGEgY2xhc3M9J21lZCcgaHJlZj0namF2YXNjcmlwdDo7JyBpZD0ndGV4dF9zaXplX21lZCc+QTwvYT4gIDxhIGNsYXNzPSdsZycgaHJlZj0namF2YXNjcmlwdDo7JyBpZD0ndGV4dF9zaXplX2xnJz5BPC9hPjwvc3Bhbj4gDQogICAgPHNwYW4gY2xhc3M9ImNvbW1lbnRsaW5rIj4NCiAgICAgICAgPGEgaHJlZj0iI2xpdmVmeXJlIj5Db21tZW50czwvYT4NCiAgICAgICAgICAgICg8c3BhbiBjbGFzcz0ibGl2ZWZ5cmUtY29tbWVudGNvdW50IiBkYXRhLWxmdjMtY291bnRlcj0idHJ1ZSI+MDwvc3Bhbj4pDQogICAgPC9zcGFuPg0KICBCeSA8YSBocmVmPSIvYXV0aG9ycy9lZC1odXljayIgQ2xhc3M9ImF1dGhvciI+RWQgSHV5Y2s8L2E+IDxzcGFuIGNsYXNzPSdwdWJkYXRlJz5XZWRuZXNkYXksIE5vdiAyOCAyMDEyPC9zcGFuPg0KICA8L2Rpdj4NCiA8L2Rpdj4NCjwhLS1nb29nbGVvbjogYWxsLS0+DQogICAgICAgICAgICA8bWV0YSBuYW1lPSJ3ZWJ0aXRsZSIgY29udGVudD0iQ2hyaXN0bWFzIHNob3dzIGJyaW5nIGpveSBhbmQgamVlcnMgLSBDaHJpc3RtYXM6IEltcG9zc2libGUgYW5kIENocmlzdG1hcyBvZiBTd2luZyBmYWxsIG9uIHR3byBlbmRzIG9mIHRoZSBob2xpZGF5LXNob3cgc3BlY3RydW0iPgogICAgICAgICAgICAgICAgPG1ldGEgbmFtZT0id2ViZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkNocmlzdG1hczogSW1wb3NzaWJsZUJyeWFudCBMYWtlIEJvd2w4MTAgVy4gTGFrZSBTdC4sIE1pbm5lYXBvbGlzNjEyLjgyNS44OTQ5OyB0aHJvdWdoIERlYy4gOQoKQ2hyaXN0bWFzIG9mIFN3aW5nSGlzdG9yeSBUaGVhdHJlMzAgRS4gMTB0aCBTdC4sIFN0LiBQYXVsNjUxLjI5Mi40MzIzOyB0aHJvdWdoIERlYy4gMjMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1ldGEgbmFtZT0iYXV0aG9yIiBjb250ZW50PSJFZCBIdXljayI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtZXRhIG5hbWU9ImF1dGhvclVSTCIgY29udGVudD0iL2F1dGhvcnMvZWQtaHV5Y2siPgogICAgICAgICAgICAgICAgICAgICAgICA8bWV0YSBuYW1lPSJ0aHVtYm5haWwiIGNvbnRlbnQ9Imh0dHA6Ly9tZWRpYS5jaXR5cGFnZXMuY29tLzgzNzIwMDAuOTkuanBnIj4KICAgICAgICAgICAgICAgIDxtZXRhIG5hbWU9InRodW1ic3JjIiBjb250ZW50PSJlZjVjLzgzNzIwMDAudC5qcGciPgogICAgICAgICAgICAgICAgPG1ldGEgbmFtZT0iaGVhZGxpbmUiIGNvbnRlbnQ9IkNocmlzdG1hcyBzaG93cyBicmluZyBqb3kgYW5kIGplZXJzIj4KICAgICAgICAgICAgICAgIDxtZXRhIG5hbWU9InN1YmhlYWRsaW5lIiBjb250ZW50PSJDaHJpc3RtYXM6IEltcG9zc2libGUgYW5kIENocmlzdG1hcyBvZiBTd2luZyBmYWxsIG9uIHR3byBlbmRzIG9mIHRoZSBob2xpZGF5LXNob3cgc3BlY3RydW0iPgogICAgICAgICAgICAgICAgPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0iMjAxMi0xMS0yNyAxMzowNjoxMSI+CiAgICAgICAgICAgICAgICA8bWV0YSBuYW1lPSJjb21tZW50cyIgY29udGVudD0iMCI+CiAgICAgICAgICAgICAgICA8bWV0YSBuYW1lPSJzZWN0aW9uIiBjb250ZW50PSJBcnRzIj4KICAgICAgICAgICAgICAgIDxtZXRhIG5hbWU9ImNhdGVnb3J5IiBjb250ZW50PSJUaGVhdGVyIj4KICAgICAgICAgICAgICAgIDxtZXRhIG5hbWU9Im9iamlkIiBjb250ZW50PSIyNjUyMjM2Ij4KICAgIA0KIDxkaXYgY2xhc3M9J2NvbnRlbnRfYm9keSBzbSc+DQoKPHA+Rm9yY2VkIGhvbGlkYXkgY2hlZXIgaXMgYSBmcmFnaWxlIHRoaW5nLiBUaGUgcmlnaHQgYW1vdW50IGNhbiBzZW5kIHlvdSBib3VuY2luZyBhbmQgc2luZ2luZyBpbnRvIHRoZSBzbm93eSBuaWdodCwgcmVhZHkgdG8gZG8gZ29vZCBkZWVkcyBmb3IgYW55IHBhc3Npbmcgc2hvZWxlc3MgdXJjaGluIHNwZWFraW5nIHdpdGggYW4gYWRvcmFibGUgQ29ja25leSBhY2NlbnQuIElmIGl0IGNvbWVzIG9mZiB3cm9uZywgaXQncyBlYXN5IHRvIHR1cm4gaW50byBhIG1vZGVybi1kYXkgU2Nyb29nZSwgYmxhc3RpbmcgRmVhcidzICJGdWNrIENocmlzdG1hcyIgb24gYSBjb250aW51b3VzIGxvb3Agd2hpbGUgdGhlIGxpZ2h0cyBvbiB0aGUgZnJvbnQgb2YgdGhlIGhvdXNlIGFyZSBhcnJhbmdlZCBhcyBnaWFudCwgcmVkLWFuZC1ncmVlbiBtaWRkbGUgZmluZ2Vycy48L3A+CjxkaXYgY2xhc3M9J2NvbnRlbnRfaW5zZXJ0IGNoaXNlbF91Jz4NCiA8ZGl2IGNsYXNzPSdpbnNlcnRfcGhvdG8nPg0KICA8YSBocmVmPSIvcGhvdG9HYWxsZXJ5L2luZGV4LzI2NTIyMzYvMCI+PGltZyBzcmM9Imh0dHA6Ly9tZWRpYS5jaXR5cGFnZXMuY29tL2NocmlzdG1hcy1zaG93cy1icmluZy1qb3ktYW5kLWplZXJzLjgzNzIwMDAuNDAuanBnIiBjbGFzcz0iZnJhbWVkIiBhbHQ9IlN0YWNleSBMaW5kZWxsLCBSdXRoaWUgQmFrZXIsIGFuZCBKZW4gQnVybGVpZ2gtQmVudHogY2xhc3MgdXAgdGhlIGhvbGlkYXlzIGluIENocmlzdG1hcyBvZiBTd2luZyIgLz48L2E+DQogIDxkaXYgY2xhc3M9J2NyZWQnPlNjb3R0IFBha3VkYWl0aXM8L2Rpdj4NCiAgPGRpdiBjbGFzcz0nY2FwJz5TdGFjZXkgTGluZGVsbCwgUnV0aGllIEJha2VyLCBhbmQgSmVuIEJ1cmxlaWdoLUJlbnR6IGNsYXNzIHVwIHRoZSBob2xpZGF5cyBpbiA8Yj48aT5DaHJpc3RtYXMgb2YgU3dpbmc8L2k+PC9iPjwvZGl2Pg0KIDwvZGl2Pg0KDQoNCg0KDQoNCg0KICAgIA0KICAgDQoNCg0KDQoNCg0KIDxkaXYgY2xhc3M9J2RldF9yZWwnPg0KICA8aDI+RGV0YWlsczwvaDI+DQogIDxkaXYgY2xhc3M9J2RlZXRzJz48cCBhbGlnbj0iY2VudGVyIj5DaHJpc3RtYXM6IEltcG9zc2libGU8L2JyID5CcnlhbnQgTGFrZSBCb3dsPC9iciA+ODEwIFcuIExha2UgU3QuLCBNaW5uZWFwb2xpczwvYnIgPjYxMi44MjUuODk0OTsgdGhyb3VnaCBEZWMuIDk8L3A+Cgo8cCBhbGlnbj0iY2VudGVyIj5DaHJpc3RtYXMgb2YgU3dpbmc8L2JyID5IaXN0b3J5IFRoZWF0cmU8L2JyID4zMCBFLiAxMHRoIFN0LiwgU3QuIFBhdWw8L2JyID42NTEuMjkyLjQzMjM7IHRocm91Z2ggRGVjLiAyMzwvcD48L2Rpdj4NCjwhLS0gUmVjZW50UmVsYXRlZCB3aWRnZXQgaGVyZSAtLT4KICAgIDxoMj5SZWxhdGVkIENvbnRlbnQ8L2gyPgogIDxkaXYgY2xhc3M9J2RlZXRzIHJlbGF0ZWQnPgogICA8dWw+CiAgICA8bGkgPjxhIGhyZWY9Imh0dHA6Ly93d3cuY2l0eXBhZ2VzLmNvbS8yMDEyLTExLTIxL2NhbGVuZGFyL2NocmlzdG1hcy1pbXBvc3NpYmxlLyI+Q2hyaXN0bWFzOiBJbXBvc3NpYmxlPC9hPjxkaXYgY2xhc3M9J2RhdGUnPk5vdmVtYmVyIDIxLCAyMDEyPC9kaXY+PC9saT48bGkgPjxhIGhyZWY9Imh0dHA6Ly9ibG9ncy5jaXR5cGFnZXMuY29tL2dpbW1lbm9pc2UvMjAxMi8xMi90ZW5fbW9zdF9kZXByZXNzaW5nX2NvdW50cnlfY2hyaXN0bWFzX3NvbmdzLnBocCI+VGhlIHRlbiBtb3N0IGRlcHJlc3NpbmcgY291bnRyeSBDaHJpc3RtYXMgc29uZ3M8L2E+PGRpdiBjbGFzcz0nZGF0ZSc+RGVjZW1iZXIgMjAsIDIwMTI8L2Rpdj48L2xpPjxsaSA+PGEgaHJlZj0iaHR0cDovL3d3dy5jaXR5cGFnZXMuY29tLzIwMTItMTEtMjEvY2FsZW5kYXIvY2hyaXN0bWFzLW9mLXN3aW5nLyI+Q2hyaXN0bWFzIG9mIFN3aW5nPC9hPjxkaXYgY2xhc3M9J2RhdGUnPk5vdmVtYmVyIDIxLCAyMDEyPC9kaXY+PC9saT48bGkgPjxhIGhyZWY9Imh0dHA6Ly93d3cuY2l0eXBhZ2VzLmNvbS8yMDEyLTEyLTE5L2NhbGVuZGFyL2NocmlzdG1hcy1hdC10aGUtcml2ZXJ2aWV3LyI+Q2hyaXN0bWFzIGF0IHRoZSBSaXZlcnZpZXc8L2E+PGRpdiBjbGFzcz0nZGF0ZSc+RGVjZW1iZXIgMTksIDIwMTI8L2Rpdj48L2xpPjxsaSBjbGFzcz0ibGFzdCI+PGEgaHJlZj0iaHR0cDovL2Jsb2dzLmNpdHlwYWdlcy5jb20vZ2ltbWVub2lzZS8yMDEyLzEyL3R3aW5fY2l0aWVzX211c2ljaWFuc19jaHJpc3RtYXNfbXVzaWNfYmVzdF93b3JzdC5waHAiPlR3aW4gQ2l0aWVzIG11c2ljaWFucyBvbiBDaHJpc3RtYXMgbXVzaWMgYXQgaXRzIGJlc3QgYW5kIHdvcnN0PC9hPjxkaXYgY2xhc3M9J2RhdGUnPkRlY2VtYmVyIDE5LCAyMDEyPC9kaXY+PC9saT4gICA8L3VsPgogIDwvZGl2PgogIAogICAgPGgyPk1vcmUgQWJvdXQ8L2gyPgogIDxkaXYgY2xhc3M9J2RlZXRzIG1vcmVhYm91dCc+CiAgIDx1bD4KICAgIDxsaT48YSBocmVmPSIvcmVsYXRlZC90by9UaW0rVXJlbi8iIGRhdGEtb21uaS10cmFjaz0iSW5mb3JtLSZndDtDbGlja3xrZXl3b3JkW1RpbStVcmVuXSI+VGltIFVyZW48L2E+PC9saT48bGk+PGEgaHJlZj0iL3JlbGF0ZWQvdG8vQ2hyaXN0bWFzLyIgZGF0YS1vbW5pLXRyYWNrPSJJbmZvcm0tJmd0O0NsaWNrfGtleXdvcmRbQ2hyaXN0bWFzXSI+Q2hyaXN0bWFzPC9hPjwvbGk+PGxpPjxhIGhyZWY9Ii9yZWxhdGVkL3RvL1N0YWNleStMaW5kZWxsLyIgZGF0YS1vbW5pLXRyYWNrPSJJbmZvcm0tJmd0O0NsaWNrfGtleXdvcmRbU3RhY2V5K0xpbmRlbGxdIj5TdGFjZXkgTGluZGVsbDwvYT48L2xpPjxsaT48YSBocmVmPSIvcmVsYXRlZC90by9SdXRoaWUrQmFrZXIvIiBkYXRhLW9tbmktdHJhY2s9IkluZm9ybS0mZ3Q7Q2xpY2t8a2V5d29yZFtSdXRoaWUrQmFrZXJdIj5SdXRoaWUgQmFrZXI8L2E+PC9saT48bGk+PGEgaHJlZj0iL3JlbGF0ZWQvdG8vSG9saWRheStTZWFzb24vIiBkYXRhLW9tbmktdHJhY2s9IkluZm9ybS0mZ3Q7Q2xpY2t8a2V5d29yZFtIb2xpZGF5K1NlYXNvbl0iPkhvbGlkYXkgU2Vhc29uPC9hPjwvbGk+ICAgPC91bD4KICA8L2Rpdj4KICA8IS0tIC9SZWNlbnRSZWxhdGVkIHdpZGdldCBoZXJlIC0tPiAgPCEtLSBOZXdzbGV0dGVyIFNpZ251cCAtLT4NCiAgPG12bjphcnRpY2xlLXNpZ251cCBzZWN0aW9uPSJhcnRzIiB0eXBlPSJlbWFpbCIgc2l6ZT0ic21hbGwiPjwvbXZuOmFydGljbGUtc2lnbnVwPg0KIDwvZGl2Pg0KPC9kaXY+DQo8cD5MYXN0IHdlZWtlbmQsIENvbWVkeSBTdWl0Y2FzZSdzIDxpPkNocmlzdG1hczogSW1wb3NzaWJsZTwvaT4gaGV3ZWQgY2xvc2VyIHRvIHRoZSBmaXJzdCwgd2hpbGUgdGhlIEhpc3RvcnkgVGhlYXRyZSdzIDxpPkNocmlzdG1hcyBvZiBTd2luZzwvaT4gbGVmdCBtZSBncnVtYmxpbmcsIHdpdGggdmlzaW9ucyBvZiBldmlsIGRlY29yYXRpb25zLCBhbGwgdGhlIHdheSBob21lLjwvcD4KPHA+PGk+PGEgdGl0bGU9IkNocmlzdG1hcyIgaHJlZj0iL3JlbGF0ZWQvdG8vQ2hyaXN0bWFzLyIgZGF0YS1vbW5pLXRyYWNrPSJJbmZvcm0tPkNsaWNrfGtleXdvcmRbQ2hyaXN0bWFzXSIgPkNocmlzdG1hczwvYT4gb2YgU3dpbmc8L2k+IGlzIGEgcmV0dXJuIGVuZ2FnZW1lbnQgZm9yIHRoZSBTdC4gUGF1bCBjb21wYW55LCB3aGljaCBoYXMgZm91bmQgc3VjY2VzcyB3aXRoIGl0cyBBbmRyZXdzIFNpc3RlcnMgc2hvd3MuIEhlcmUsIHRoZSBzaXN0ZXJzIGFyZSByZWhlYXJzaW5nIGZvciBhIENocmlzdG1hcyBFdmUgVVNPIHNob3cgaW4gMTk0NCwgc2luZ2luZyBwbGVudHkgb2Ygc29uZ3MgYW5kIHJlYWRpbmcgbGV0dGVycyBmcm9tIHNlcnZpY2VtZW4uIFRoZSBjbG9zZXN0IHRoaW5nIHRvIGRyYW1hdGljIHRlbnNpb24gY29tZXMgZnJvbSB0aGVpciBtYW5hZ2VyLCB3aG8gZG9lc24ndCB3YW50IHRoZW0gdG8gcmVhZCB0aGUgbGV0dGVycyBkdXJpbmcgdGhlIHNob3cgYmVjYXVzZS4uLndlbGwsIHdlIG5ldmVyIHJlYWxseSBnZXQgYW4gZXhwbGFuYXRpb24gZm9yIHRoYXQuPC9wPgo8cD5PbiBhIG11c2ljYWwgbGV2ZWwsIHRoZSB0aHJlZSBhY3RvcnMgcGxheWluZyB0aGUgc2lzdGVycyAmbWRhc2g7IDxhIHRpdGxlPSJSdXRoaWUgQmFrZXIiIGhyZWY9Ii9yZWxhdGVkL3RvL1J1dGhpZStCYWtlci8iIGRhdGEtb21uaS10cmFjaz0iSW5mb3JtLT5DbGlja3xrZXl3b3JkW1J1dGhpZStCYWtlcl0iID5SdXRoaWUgQmFrZXI8L2E+LCA8YSB0aXRsZT0iU3RhY2V5IExpbmRlbGwiIGhyZWY9Ii9yZWxhdGVkL3RvL1N0YWNleStMaW5kZWxsLyIgZGF0YS1vbW5pLXRyYWNrPSJJbmZvcm0tPkNsaWNrfGtleXdvcmRbU3RhY2V5K0xpbmRlbGxdIiA+U3RhY2V5IExpbmRlbGw8L2E+LCBhbmQgPGEgdGl0bGU9IkplbiBCdXJsZWlnaC1CZW50eiIgaHJlZj0iL3JlbGF0ZWQvdG8vSmVuK0J1cmxlaWdoLUJlbnR6LyIgZGF0YS1vbW5pLXRyYWNrPSJJbmZvcm0tPkNsaWNrfGtleXdvcmRbSmVuK0J1cmxlaWdoLUJlbnR6XSIgPkplbiBCdXJsZWlnaC1CZW50ejwvYT4gJm1kYXNoOyBicmluZyB0aGUgZ29vZHMsIGRpdmluZyBpbnRvIHRoZSBDaHJpc3RtYXMgc29uZ2Jvb2sgd2l0aCBndXN0byBhbmQgcGxlbnR5IG9mIGNsYXNzLiBUaGVpciBtYWxlIGNvdW50ZXJwYXJ0cyBhcmUgbW9yZSB1bmV2ZW4uIFRoZSBjaGVtaXN0cnkgYmV0d2VlbiBNYXJrIFJvc2Vud2lua2VsIGFuZCBCaWxsIFNjaGFycGVuIGlzIGRlYWRseSwgcmVuZGVyaW5nIHZhcmlvdXMgY29tZWR5IGJpdHMgYXMgZHVsbCBhcyBkcnlpbmcgcGFpbnQuIFNjaGFycGVuIGdldHMgdGhlIHdvcnN0IG9mIHRoaXMsIGFzIGhlIGlzIHBhcnRpY3VsYXJseSB1bmltcHJlc3NpdmUgYXMgPGEgdGl0bGU9IkJpbmcgQ3Jvc2J5IiBocmVmPSIvcmVsYXRlZC90by9CaW5nK0Nyb3NieS8iIGRhdGEtb21uaS10cmFjaz0iSW5mb3JtLT5DbGlja3xrZXl3b3JkW0JpbmcrQ3Jvc2J5XSIgPkJpbmcgQ3Jvc2J5PC9hPiBhbmQgdGhlbiBicmluZ3MgdGhlIHByb2NlZWRpbmdzIHRvIGEgc2NyZWVjaGluZyBoYWx0IGFzIE1ycy4gUm9vc2V2ZWx0LiAoVG8gYmUgZmFpciwgdGhlIHBhaXIgZG8gYSBmdW4gcmVhZGluZyBvZiAiRGVyIEZ1ZWhyZXIncyBGYWNlLiIpPC9wPgo8cD5JIGRvbid0IG5lZWQgPGk+SGFtbGV0PC9pPiBmcm9tIG15IGhvbGlkYXkgc2hvd3MsIGJ1dCBJIHdhbnQgdG8gYmUgZW5nYWdlZCBlbm91Z2ggdGhhdCBJIGNhbiBzaW5rIGluIGFuZCBnbyB0byBhIGRpZmZlcmVudCBwbGFjZSBmb3IgYSBjb3VwbGUgb2YgaG91cnMuIFRoYXQgaGFwcGVucyBvY2Nhc2lvbmFsbHkgaW4gPGk+Q2hyaXN0bWFzIG9mIFN3aW5nPC9pPiAmbWRhc2g7IHRoZSBsZXR0ZXJzIGhvbWUgYXJlIG9mdGVuIHZlcnkgZWZmZWN0aXZlICZtZGFzaDsgYnV0IEkgY291bGQgaGF2ZSByZXBsaWNhdGVkIHRoYXQgd2l0aCBhbiBhbnRob2xvZ3kgb2YgV29ybGQgV2FyIElJIHdyaXRpbmdzIGFuZCBzb21lIEFuZHJld3MgU2lzdGVycyA3OHMuPC9wPgo8cD48aT5DaHJpc3RtYXM6IEltcG9zc2libGU8L2k+IGlzIGFsc28gYSBzbGlnaHQgdGhpbmcsIGEgcXVpY2sgcm9tcCB0aHJvdWdoIHRoZSBtaW5kIG9mIDxhIHRpdGxlPSJUaW0gVXJlbiIgaHJlZj0iL3JlbGF0ZWQvdG8vVGltK1VyZW4vIiBkYXRhLW9tbmktdHJhY2s9IkluZm9ybS0+Q2xpY2t8a2V5d29yZFtUaW0rVXJlbl0iID5UaW0gVXJlbjwvYT4gYnJvdWdodCB0byBsaWZlIGJ5IENvbWVkeSBTdWl0Y2FzZSBhdCB0aGUgQnJ5YW50LUxha2UgQm93bC4gSXQgYWxzbyBoYXMgcGxlbnR5IG9mICJMZXQncyBjbGVhbiB0aGUgYmFybiBhbmQgcHV0IG9uIGEgc2hvdyEiIGVuZXJneSB0aGF0IHB1dHMgYSBsb3Qgb2YgdGhlIGJpZ2dlci1idWRnZXQgaG9saWRheSBwcm9kdWN0aW9ucyB0byBzaGFtZS48L3A+CjxwPlB1cHBldGVlciBBbmR5IEtyYWZ0IGlzIHRoZSBzdGFyIGhlcmUsIGJyaW5naW5nIGFuIGFzc29ydG1lbnQgb2YgY3V0ZSAoYW5kIG5vdCBjdXRlIGF0IGFsbCkgdG95cyB0byBsaWZlLiBUaGVzZSB0b3lzLCB5b3Ugc2VlLCBoYXZlIGdvbmUgcm9ndWUsIHVuZGVyIHRoZSBsZWFkZXJzaGlwIG9mIGFuIGV2aWwgbWFzdGVybWluZC4gQSBzZWNyZXQtYWdlbnQgYXNzYXVsdCBnb2VzIHRlcnJpYmx5IHdyb25nLCBsZWF2aW5nIHRoZSBsYXN0IGFnZW50ICg8YSB0aXRsZT0iVGluYSBOb3J0aCIgaHJlZj0iL3JlbGF0ZWQvdG8vVGluYStOb3J0aC8iIGRhdGEtb21uaS10cmFjaz0iSW5mb3JtLT5DbGlja3xrZXl3b3JkW1RpbmErTm9ydGhdIiA+VGluYSBOb3J0aDwvYT4pIG9ubHkgb25lIG9wdGlvbjogPGEgdGl0bGU9IlNhbnRhIENsYXVzIiBocmVmPSIvcmVsYXRlZC90by9TYW50YStDbGF1cy8iIGRhdGEtb21uaS10cmFjaz0iSW5mb3JtLT5DbGlja3xrZXl3b3JkW1NhbnRhK0NsYXVzXSIgPlNhbnRhIENsYXVzPC9hPiAoVXJlbikuIEhlIGVubGlzdHMgYSBuYXVnaHR5IGNoaWxkIHdpdGggbWFkIGNvbXB1dGVyIHNraWxscyAoTGV2aSBXZWluaGFnZW4pIHRvIGluZmlsdHJhdGUgdGhlIGJhc2UsIGRlZmVhdCB0aGUgZXZpbCBtYXN0ZXJtaW5kLCBhbmQgc2F2ZSBKb3NodWEgRW5nbGlzaCBTY3JpbXNoYXcncyBzZWNyZXQgYWdlbnQvdG95IGNyaXRpYyBibG9nZ2VyLjwvcD4KPHA+VXJlbidzIHNjcmlwdCBpcyBhIGJpdCB1bmRlcmRvbmUsIGFzIHRoZSBjb21lZGljIGRlbnNpdHkgaXNuJ3QgYXMgaGlnaCBhcyBpbiBwYXN0IENvbWVkeSBTdWl0Y2FzZSBwcm9kdWN0aW9ucy4gVGhlbiBhZ2FpbiwgdGhlcmUgYXJlIHNvbWUgcHJldHR5IGluc3BpcmVkIG1vbWVudHMsIHN1Y2ggYXMgU2NyaW1zaGF3IGdldHRpbmcgcHduZCBieSBhIHRlZGR5IGJlYXIgb3IgYSBwb3N0LWN1cnRhaW4tY2FsbCAiZmlnaHQiIHRoYXQgc3ByZWFkcyBvdXQgb250byBMeW5kYWxlIEF2ZW51ZS48L3A+IDwvZGl2Pg0KDQoNCjwhLS1nb29nbGVvZmY6IGFsbC0tPg0KDQo8ZGl2IGNsYXNzPSdib3R0b21saW5rcyc+DQoNCiAgICAgICAgICAgIDxoMj5SZWxhdGVkIENvbnRlbnQ8L2gyPg0KICAgICAgICA8ZGl2IGNsYXNzPSJPVVRCUkFJTiIgZGF0YS1zcmM9Imh0dHA6Ly93d3cuY2l0eXBhZ2VzLmNvbS8yMDEyLTExLTI4L2FydHMvY2hyaXN0bWFzLXNob3dzLWJyaW5nLWpveS1hbmQtamVlcnMvIiBkYXRhLXdpZGdldC1pZD0iQVJfMiIgZGF0YS1vYi10ZW1wbGF0ZT0ibWluIj48L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGZWF0dXJlZEFkSW5kZXhBZCI+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSdjaGlzZWxfdSBBSWZlYXR1cmVkJz4NCiAgQ2hlY2sgb3V0IHRoaXMgd2VlaydzIGZlYXR1cmVkIGFkIGZvciBTZXJ2aWNlczwhLS0gbGluayB0byBhcHByb3ByaWF0ZSBhZCBpbmRleCBjYXRlZ29yeSAtLT4NCiAgPGRpdiBjbGFzcz0naW5uZXInPg0KICAgIDxkaXY+DQogICAgICAgICAgICAgICAgPGEgaHJlZj0nL2FkSW5kZXgvLTgwNzgzLyc+PGltZyBjbGFzcz0nZnJhbWVkJyBzcmM9J2h0dHA6Ly9tZWRpYS5jaXR5cGFnZXMuY29tLzg4NTY0NTYuMTMuanBnJy8+PC9hPjwhLS0gbGluayB0byBhZCBpbmRleCBhZCwgaW1nIGRlZiAxMywgYWR2ZXJ0aXNlciBsb2dvIC0tPg0KICAgICAgICAgICAgPGg0PjxhIGhyZWY9Jy9hZEluZGV4Ly04MDc4My8nPk1jTmFsbHkgU21pdGggQ29sbGVnZSBvZiBNdXNpYzwvYT48L2g0PjwhLS0gbGluayB0byBhZCBpbmRleCBhZCAtLT4NCiAgICAgIDxoNT4NCiAgICAgICAgPGEgaHJlZj0nL2FkSW5kZXgvLTgwNzgzLzE5MzgyOTAvJz5WaWV3IEFkPC9hPjwhLS0gbGluayB0byBhZCBpbmRleCBhZCAtLT4NCiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0nIycgdmFsdWU9IjE5MzgyOTAiIGNsYXNzPSJ0cmFjayIgbmFtZT0idmlld3NpdGUiPlZpZXcgV2Vic2l0ZTwvYT48IS0tIGlmIGFwcGxpY2FibGUsIGxpbmsgdG8gZXh0ZXJuYWwgd2Vic2l0ZSAtLT4NCiAgICAgICAgICAgICAgPC9oNT4NCiAgICA8L2Rpdj4NCiAgPC9kaXY+DQogIDxhIGNsYXNzPSdtb3JlJyBocmVmPSIvYWRJbmRleC8iPk1vcmUgQWRzID4+PC9hPjwhLS0gbGluayB0byBhZCBpbmRleCAtLT4NCjwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgICA8IS0tIE5ld3NsZXR0ZXIgU2lnbnVwIC0tPg0KICAgICAgICA8bXZuOmFydGljbGUtc2lnbnVwIHNlY3Rpb249ImFydHMiIHR5cGU9ImVtYWlsIiBzaXplPSJsYXJnZSI+PC9tdm46YXJ0aWNsZS1zaWdudXA+DQogICAgDQoNCg0KPCEtLSBOT0dTQSAtLT4NCjxkaXYgY2xhc3M9J2FydGljbGVsaW5rcycgaWQ9J2FydGljbGVsaW5rcyc+DQogICAgPHRhYmxlPg0KICAgICAgICA8dHI+DQogICAgICAgICAgICA8dGQ+PGEgaHJlZj0nL2ZlZWRiYWNrL3NlbmRUb0ZyaWVuZC8/b2JqaWQ9MjY1MjIzNic+PGltZyBzcmM9J2h0dHA6Ly9hc3NldHMuY2l0eXBhZ2VzLmNvbS9pbWcvY2xlYXI1LnBuZycgaWQ9J2ltZ19lbWFpbF90b19mcmllbmQnIC8+PGRpdj5FbWFpbDxici8+dG8gRnJpZW5kPC9kaXY+PC9hPjwvdGQ+Cjx0ZD48YSBocmVmPScvZmVlZGJhY2svRW1haWxBbkVtcGxveWVlLz9kZXBhcnRtZW50PWxldHRlcnMnPjxpbWcgc3JjPSdodHRwOi8vYXNzZXRzLmNpdHlwYWdlcy5jb20vaW1nL2NsZWFyNS5wbmcnIGlkPSdpbWdfd3JpdGUnIC8+PGRpdj5Xcml0ZSB0bzxici8+RWRpdG9yPC9kaXY+PC9hPjwvdGQ+Cjx0ZD48YSBocmVmPScvY29udGVudC9wcmludFZlcnNpb24vMjY1MjIzNicgcmVsPSdub2ZvbGxvdyc+PGltZyBzcmM9J2h0dHA6Ly9hc3NldHMuY2l0eXBhZ2VzLmNvbS9pbWcvY2xlYXI1LnBuZycgaWQ9J2ltZ19wcmludCcgLz48ZGl2PlByaW50PGJyLz5BcnRpY2xlPC9kaXY+PC9hPjwvdGQ+ICAgICAgICA8L3RyPg0KICAgIDwvdGFibGU+DQo8L2Rpdj4NCg0KIDwhLS0gL05PR1NBIC0tPjwhLS0gQmVTb2NpYWwgd2lkZ2V0IGhlcmUgLS0+DQo8IS0tIGFydGljbGVsaW5rcyBlbGVtZW50IGhlcmUgLS0+DQo8IS0tIHJlZGRpdCBidXR0b24gLS0+DQogICAgPGRpdiBjbGFzcz0icmVkZGl0LWNvbnRhaW5lciI+DQogICAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij5yZWRkaXRfbmV3d2luZG93PScxJzwvc2NyaXB0Pg0KICAgICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwOi8vd3d3LnJlZGRpdC5jb20vc3RhdGljL2J1dHRvbi9idXR0b24xLmpzIj48L3NjcmlwdD4NCiAgICA8L2Rpdj4NCjwvZGl2Pg0KDQo8ZGl2IGNsYXNzPSd0cmlwbGViYXInPiZuYnNwOzwvZGl2Pg0KPGEgbmFtZT0iQ29tbWVudHMiPjwvYT48YSBuYW1lPSJjb21tZW50cyI+PC9hPg0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cDovL3pvci5saXZlZnlyZS5jb20vd2pzL3YzLjAvamF2YXNjcmlwdHMvbGl2ZWZ5cmUuanMiPjwvc2NyaXB0Pgo8ZGl2IGNsYXNzPSJsZkJveCB2MyI+CiAgICA8c3BhbiBjbGFzcz0ibGlua3MiPgogICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cubXl2b2ljZW5hdGlvbi5jb20iPjxpbWcgc3JjPSJAQXNzZXRTZXJ2ZXJQcmVmaXhAL2ltZy9sb2dvLW12bi0xMDAucG5nIiBhbHQ9Ik15IFZvaWNlIE5hdGlvbiIvPjwvYT4KICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3Lm15dm9pY2VuYXRpb24uY29tL2Fib3V0L2hlbHAvIj48aW1nIGNsYXNzPSJsZkhlbHAiIHNyYz0iQEFzc2V0U2VydmVyUHJlZml4QC9pbWcvY2xlYXI1LnBuZyIgYWx0PSJIZWxwIiB0aXRsZT0iSGVscCIvPjwvYT4KICAgIDwvc3Bhbj4KICAgIDxkaXYgaWQ9ImxpdmVmeXJlIj48c2NyaXB0PgogIChmdW5jdGlvbigpIHsKICAgIAogICB2YXIgYT10aGlzO3ZhciBiLGMsZCxlLGY7ZnVuY3Rpb24gZygpe3JldHVybiBhLm5hdmlnYXRvcj9hLm5hdmlnYXRvci51c2VyQWdlbnQ6bnVsbH1mPWU9ZD1jPWI9ITE7dmFyIGg7aWYoaD1nKCkpe3ZhciBpPWEubmF2aWdhdG9yO2I9MD09aC5pbmRleE9mKCJPcGVyYSIpO2M9IWImJi0xIT1oLmluZGV4T2YoIk1TSUUiKTtlPShkPSFiJiYtMSE9aC5pbmRleE9mKCJXZWJLaXQiKSkmJi0xIT1oLmluZGV4T2YoIk1vYmlsZSIpO2Y9IWImJiFkJiYiR2Vja28iPT1pLnByb2R1Y3R9dmFyIGo9YyxrPWYsbD1kLG09ZTt2YXIgbjtpZihiJiZhLm9wZXJhKXt2YXIgbz1hLm9wZXJhLnZlcnNpb247ImZ1bmN0aW9uIj09dHlwZW9mIG8mJm8oKX1lbHNlIGs/bj0vcnZcOihbXlwpO10rKShcKXw7KS86aj9uPS9NU0lFXHMrKFteXCk7XSspKFwpfDspLzpsJiYobj0vV2ViS2l0XC8oXFMrKS8pLG4mJm4uZXhlYyhnKCkpO3ZhciBwPWRvY3VtZW50LHE9cC5jcmVhdGVFbGVtZW50KCJsaW5rIik7cS5yZWw9InN0eWxlc2hlZXQiO3EudHlwZT0idGV4dC9jc3MiO3EuaHJlZj0iaHR0cDovL3d3dy5saXZlZnlyZS5jb20vd2pzL3YzLjAvY3NzL2xpdmVmeXJlXyIrKG0/Im1vYmlsZSI6ImVtYmVkIikrIi5jc3MiO3EubWVkaWE9ImFsbCI7cC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLmFwcGVuZENoaWxkKHEpO3ZhciByPSJoZWFkZXIgaGdyb3VwIGZvb3RlciBhcnRpY2xlIHNlY3Rpb24gYXNpZGUgbmF2IGZpZ3VyZSBmaWdjYXB0aW9uIGVtYmVkIGF1ZGlvIHZpZGVvIGNhbnZhcyBkZXRhaWxzIHN1bW1hcnkgdGltZSBtYXJrIi5zcGxpdCgiICIpLHM9cC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksdDtmb3IodD0wOyB0PHIubGVuZ3RoOyB0Kyspe3MuYXBwZW5kQ2hpbGQocC5jcmVhdGVFbGVtZW50KHJbdF0pKX07CiAgIH0pKCk7ICAgIAo8L3NjcmlwdD4KPGRpdiBjbGFzcz0iZnlyZSBmeXJlLXdpZHRoLWxhcmdlIj4KICA8ZGl2IGNsYXNzPSJmeXJlLXdpZGdldCI+CiAgICA8ZGl2IGNsYXNzPSJmeXJlLXN0cmVhbS1zdGF0cyI+CiAgICAgIDxkaXYgY2xhc3M9ImZ5cmUtY29tbWVudC1jb3VudCI+CiAgICAgICAgPHNwYW4+MCBjb21tZW50czwvc3Bhbj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJmeXJlLWRpdmlkZXIiPjwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZnlyZS1oZWxwIj4KICAgICAgICA8ZGl2IGNsYXNzPSJmeXJlLWJveC13cmFwcGVyIj4KICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saXZlZnlyZS5jb20iIHRhcmdldD0iX2JsYW5rIj48c3BhbiBjbGFzcz0iZnlyZS1sb2dvLWRyb3AiPiZuYnNwPC9zcGFuPgogICAgICAgICAgPGltZyBjbGFzcz0iZnlyZS1sb2dvLWhlbHAiIHNyYz0iaHR0cDovL3d3dy5saXZlZnlyZS5jb20vd2pzL3YzLjAvaW1hZ2VzL2xmLWxvZ28ucG5nIiBhbHQ9IkxpdmVmeXJlIiAvPjwvYT4KICAgICAgICAgIAogICAgICAgICAgPHVsIGNsYXNzPSJmeXJlLWJveC1saXN0Ij4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9saXZlZnlyZS5jb20iIHRhcmdldD0iX2JsYW5rIiB0aXRsZT0iR2V0IExpdmVmeXJlIj5HZXQKICAgICAgICAgICAgTGl2ZWZ5cmU8L2E+PC9saT4KCiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vc3VwcG9ydC5saXZlZnlyZS5jb20iIHRhcmdldD0iX2JsYW5rIiB0aXRsZT0KICAgICAgICAgICAgIkZBUSI+RkFRPC9hPjwvbGk+CiAgICAgICAgICA8L3VsPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9ImZ5cmUtYXV0aCI+CiAgICAgIDxkaXYgY2xhc3M9ImZ5cmUtbG9naW4tYmFyIj48YSByZWw9Im5vZm9sbG93IiBocmVmPSIjIiBjbGFzcz0iZnlyZS11c2VyLWxvZ2dlZG91dCI+U2lnbiBpbjwvYT48L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9ImZ5cmUtZWRpdG9yIj4KICAgICAgPGRpdiBjbGFzcz0iZnlyZS1lZGl0b3ItY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJmeXJlLWVkaXRvci1lZGl0YWJsZSIgc3R5bGU9ImhlaWdodDogMTAwcHg7Ij48L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iZnlyZS1lZGl0b3ItdG9vbGJhciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJnb29nLXRvb2xiYXIgZ29vZy10b29sYmFyLWhvcml6b250YWwiIHN0eWxlPQogICAgICAgICAgIi13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7IiByb2xlPSJ0b29sYmFyIiBhcmlhLWFjdGl2ZWRlc2NlbmRhbnQ9IiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Imdvb2ctaW5saW5lLWJsb2NrIGZ5cmUtYnV0dG9uLWxlZnQgZnlyZS1mb3JtYXQtYnV0dG9uIiB0aXRsZT0iIgogICAgICAgICAgICByb2xlPSJidXR0b24iIHN0eWxlPSItd2Via2l0LXVzZXItc2VsZWN0OiBub25lOyIgaWQ9IjowIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJnb29nLWlubGluZS1ibG9jayBmeXJlLWJ1dHRvbi1sZWZ0LW91dGVyLWJveCIgc3R5bGU9CiAgICAgICAgICAgICAgIi13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imdvb2ctaW5saW5lLWJsb2NrIGZ5cmUtYnV0dG9uLWxlZnQtaW5uZXItYm94IiBzdHlsZT0KICAgICAgICAgICAgICAgICItd2Via2l0LXVzZXItc2VsZWN0OiBub25lOyI+PC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0iZ29vZy1pbmxpbmUtYmxvY2sgZnlyZS1idXR0b24tbGVmdCBmeXJlLW1lbnRpb24tYnV0dG9uIiB0aXRsZT0iIgogICAgICAgICAgICByb2xlPSJidXR0b24iIHN0eWxlPSItd2Via2l0LXVzZXItc2VsZWN0OiBub25lOyIgaWQ9IjoxIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJnb29nLWlubGluZS1ibG9jayBmeXJlLWJ1dHRvbi1sZWZ0LW91dGVyLWJveCIgc3R5bGU9CiAgICAgICAgICAgICAgIi13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imdvb2ctaW5saW5lLWJsb2NrIGZ5cmUtYnV0dG9uLWxlZnQtaW5uZXItYm94IiBzdHlsZT0KICAgICAgICAgICAgICAgICItd2Via2l0LXVzZXItc2VsZWN0OiBub25lOyI+PC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0iZ29vZy1pbmxpbmUtYmxvY2sgZnlyZS1idXR0b24tbGVmdCBmeXJlLWZvbGxvdy1idXR0b24iIHRpdGxlPSIiCiAgICAgICAgICAgIHJvbGU9ImJ1dHRvbiIgc3R5bGU9Ii13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7IiBpZD0iOjIiPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imdvb2ctaW5saW5lLWJsb2NrIGZ5cmUtYnV0dG9uLWxlZnQtb3V0ZXItYm94IiBzdHlsZT0KICAgICAgICAgICAgICAiLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZ29vZy1pbmxpbmUtYmxvY2sgZnlyZS1idXR0b24tbGVmdC1pbm5lci1ib3giIHN0eWxlPQogICAgICAgICAgICAgICAgIi13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7Ij4KICAgICAgICAgICAgICAgICAgKyBGb2xsb3cKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9CiAgICAgICAgICAgICJnb29nLWlubGluZS1ibG9jayBmeXJlLWJ1dHRvbi1yaWdodCBmeXJlLXBvc3QtYnV0dG9uIGZ5cmUtcG9zdC1idXR0b24tZW5hYmxlZCIKICAgICAgICAgICAgdGl0bGU9IiIgcm9sZT0iYnV0dG9uIiBzdHlsZT0iLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsiIGlkPSI6MyI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZ29vZy1pbmxpbmUtYmxvY2sgZnlyZS1idXR0b24tcmlnaHQtb3V0ZXItYm94IiBzdHlsZT0KICAgICAgICAgICAgICAiLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZ29vZy1pbmxpbmUtYmxvY2sgZnlyZS1idXR0b24tcmlnaHQtaW5uZXItYm94IiBzdHlsZT0KICAgICAgICAgICAgICAgICItd2Via2l0LXVzZXItc2VsZWN0OiBub25lOyI+CiAgICAgICAgICAgICAgICAgIFBvc3QgY29tbWVudAogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0KICAgICAgICAgICAgImdvb2ctaW5saW5lLWJsb2NrIGZ5cmUtYnV0dG9uLXJpZ2h0IGZ5cmUtcG9zdC10byBmeXJlLXBvc3QtdG8tZmFjZWJvb2siCiAgICAgICAgICAgIHRpdGxlPSIiIHJvbGU9ImJ1dHRvbiIgc3R5bGU9Ii13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7IiBpZD0iOjQiPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imdvb2ctaW5saW5lLWJsb2NrIGZ5cmUtYnV0dG9uLXJpZ2h0LW91dGVyLWJveCIgc3R5bGU9CiAgICAgICAgICAgICAgIi13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imdvb2ctaW5saW5lLWJsb2NrIGZ5cmUtYnV0dG9uLXJpZ2h0LWlubmVyLWJveCIgc3R5bGU9CiAgICAgICAgICAgICAgICAiLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsiPjwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9CiAgICAgICAgICAgICJnb29nLWlubGluZS1ibG9jayBmeXJlLWJ1dHRvbi1yaWdodCBmeXJlLXBvc3QtdG8gZnlyZS1wb3N0LXRvLXR3aXR0ZXIiCiAgICAgICAgICAgIHRpdGxlPSIiIHJvbGU9ImJ1dHRvbiIgc3R5bGU9Ii13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7IiBpZD0iOjUiPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imdvb2ctaW5saW5lLWJsb2NrIGZ5cmUtYnV0dG9uLXJpZ2h0LW91dGVyLWJveCIgc3R5bGU9CiAgICAgICAgICAgICAgIi13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imdvb2ctaW5saW5lLWJsb2NrIGZ5cmUtYnV0dG9uLXJpZ2h0LWlubmVyLWJveCIgc3R5bGU9CiAgICAgICAgICAgICAgICAiLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsiPjwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9CiAgICAgICAgICAgICJnb29nLWlubGluZS1ibG9jayBmeXJlLWJ1dHRvbi1yaWdodCBmeXJlLXBvc3QtdG8gZnlyZS1wb3N0LXRvLWxpbmtlZGluIgogICAgICAgICAgICB0aXRsZT0iIiByb2xlPSJidXR0b24iIHN0eWxlPSItd2Via2l0LXVzZXItc2VsZWN0OiBub25lOyIgaWQ9Ijo3Ij4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJnb29nLWlubGluZS1ibG9jayBmeXJlLWJ1dHRvbi1yaWdodC1vdXRlci1ib3giIHN0eWxlPQogICAgICAgICAgICAgICItd2Via2l0LXVzZXItc2VsZWN0OiBub25lOyI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJnb29nLWlubGluZS1ibG9jayBmeXJlLWJ1dHRvbi1yaWdodC1pbm5lci1ib3giIHN0eWxlPQogICAgICAgICAgICAgICAgIi13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7Ij48L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJnb29nLXRvb2xiYXItc2VwYXJhdG9yIGdvb2ctaW5saW5lLWJsb2NrIiBzdHlsZT0KICAgICAgICAgICAgIi13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7IiByb2xlPSJzZXBhcmF0b3IiIGlkPSI6NiI+CiAgICAgICAgICAgICAgJm5ic3A7CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CgogICAgICAgICAgPGRpdiBjbGFzcz0iZnlyZS1mb3JtYXQtdG9vbGJhciIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZ29vZy10b29sYmFyIGdvb2ctdG9vbGJhci1ob3Jpem9udGFsIiBzdHlsZT0KICAgICAgICAgICAgIi13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7IiByb2xlPSJ0b29sYmFyIiB0YWJpbmRleD0iLTEiPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imdvb2ctaW5saW5lLWJsb2NrIGdvb2ctdG9vbGJhci1idXR0b24iIHRpdGxlPSJCb2xkIgogICAgICAgICAgICAgIGFyaWEtcHJlc3NlZD0idHJ1ZSIgcm9sZT0iYnV0dG9uIiBzdHlsZT0iLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsiIGlkPQogICAgICAgICAgICAgICIrYm9sZCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJnb29nLWlubGluZS1ibG9jayBnb29nLXRvb2xiYXItYnV0dG9uLW91dGVyLWJveCIgc3R5bGU9CiAgICAgICAgICAgICAgICAiLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsiPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJnb29nLWlubGluZS1ibG9jayBnb29nLXRvb2xiYXItYnV0dG9uLWlubmVyLWJveCIgc3R5bGU9CiAgICAgICAgICAgICAgICAgICItd2Via2l0LXVzZXItc2VsZWN0OiBub25lOyI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idHItaWNvbiB0ci1ib2xkIiBzdHlsZT0iLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsiPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJnb29nLWlubGluZS1ibG9jayBnb29nLXRvb2xiYXItYnV0dG9uIiB0aXRsZT0iSXRhbGljIgogICAgICAgICAgICAgIGFyaWEtcHJlc3NlZD0idHJ1ZSIgcm9sZT0iYnV0dG9uIiBzdHlsZT0iLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsiIGlkPQogICAgICAgICAgICAgICIraXRhbGljIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imdvb2ctaW5saW5lLWJsb2NrIGdvb2ctdG9vbGJhci1idXR0b24tb3V0ZXItYm94IiBzdHlsZT0KICAgICAgICAgICAgICAgICItd2Via2l0LXVzZXItc2VsZWN0OiBub25lOyI+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imdvb2ctaW5saW5lLWJsb2NrIGdvb2ctdG9vbGJhci1idXR0b24taW5uZXItYm94IiBzdHlsZT0KICAgICAgICAgICAgICAgICAgIi13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0ci1pY29uIHRyLWl0YWxpYyIgc3R5bGU9Ii13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7Ij4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZ29vZy1pbmxpbmUtYmxvY2sgZ29vZy10b29sYmFyLWJ1dHRvbiIgdGl0bGU9IlVuZGVybGluZSIKICAgICAgICAgICAgICBhcmlhLXByZXNzZWQ9InRydWUiIHJvbGU9ImJ1dHRvbiIgc3R5bGU9Ii13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7IiBpZD0KICAgICAgICAgICAgICAiK3VuZGVybGluZSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJnb29nLWlubGluZS1ibG9jayBnb29nLXRvb2xiYXItYnV0dG9uLW91dGVyLWJveCIgc3R5bGU9CiAgICAgICAgICAgICAgICAiLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsiPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJnb29nLWlubGluZS1ibG9jayBnb29nLXRvb2xiYXItYnV0dG9uLWlubmVyLWJveCIgc3R5bGU9CiAgICAgICAgICAgICAgICAgICItd2Via2l0LXVzZXItc2VsZWN0OiBub25lOyI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idHItaWNvbiB0ci11bmRlcmxpbmUiIHN0eWxlPSItd2Via2l0LXVzZXItc2VsZWN0OiBub25lOyI+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imdvb2ctaW5saW5lLWJsb2NrIGdvb2ctdG9vbGJhci1idXR0b24iIHRpdGxlPQogICAgICAgICAgICAgICJBZGQgb3IgcmVtb3ZlIGxpbmsiIGFyaWEtcHJlc3NlZD0idHJ1ZSIgcm9sZT0iYnV0dG9uIiBzdHlsZT0KICAgICAgICAgICAgICAiLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsiIGlkPSIrbGluayI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJnb29nLWlubGluZS1ibG9jayBnb29nLXRvb2xiYXItYnV0dG9uLW91dGVyLWJveCIgc3R5bGU9CiAgICAgICAgICAgICAgICAiLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsiPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJnb29nLWlubGluZS1ibG9jayBnb29nLXRvb2xiYXItYnV0dG9uLWlubmVyLWJveCIgc3R5bGU9CiAgICAgICAgICAgICAgICAgICItd2Via2l0LXVzZXItc2VsZWN0OiBub25lOyI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idHItbGluayIgc3R5bGU9Ii13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7Ij4KICAgICAgICAgICAgICAgICAgICAgIExpbmsKICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZ29vZy1pbmxpbmUtYmxvY2sgZ29vZy10b29sYmFyLWJ1dHRvbiIgdGl0bGU9Ik51bWJlcmVkIGxpc3QiCiAgICAgICAgICAgICAgYXJpYS1wcmVzc2VkPSJ0cnVlIiByb2xlPSJidXR0b24iIHN0eWxlPSItd2Via2l0LXVzZXItc2VsZWN0OiBub25lOyIgaWQ9CiAgICAgICAgICAgICAgIitpbnNlcnRPcmRlcmVkTGlzdCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJnb29nLWlubGluZS1ibG9jayBnb29nLXRvb2xiYXItYnV0dG9uLW91dGVyLWJveCIgc3R5bGU9CiAgICAgICAgICAgICAgICAiLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsiPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJnb29nLWlubGluZS1ibG9jayBnb29nLXRvb2xiYXItYnV0dG9uLWlubmVyLWJveCIgc3R5bGU9CiAgICAgICAgICAgICAgICAgICItd2Via2l0LXVzZXItc2VsZWN0OiBub25lOyI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idHItaWNvbiB0ci1pbnNlcnRPcmRlcmVkTGlzdCIgc3R5bGU9CiAgICAgICAgICAgICAgICAgICAgIi13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7Ij48L2Rpdj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZ29vZy1pbmxpbmUtYmxvY2sgZ29vZy10b29sYmFyLWJ1dHRvbiIgdGl0bGU9IkJ1bGxldCBsaXN0IgogICAgICAgICAgICAgIGFyaWEtcHJlc3NlZD0idHJ1ZSIgcm9sZT0iYnV0dG9uIiBzdHlsZT0iLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsiIGlkPQogICAgICAgICAgICAgICIraW5zZXJ0VW5vcmRlcmVkTGlzdCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJnb29nLWlubGluZS1ibG9jayBnb29nLXRvb2xiYXItYnV0dG9uLW91dGVyLWJveCIgc3R5bGU9CiAgICAgICAgICAgICAgICAiLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsiPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJnb29nLWlubGluZS1ibG9jayBnb29nLXRvb2xiYXItYnV0dG9uLWlubmVyLWJveCIgc3R5bGU9CiAgICAgICAgICAgICAgICAgICItd2Via2l0LXVzZXItc2VsZWN0OiBub25lOyI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idHItaWNvbiB0ci1pbnNlcnRVbm9yZGVyZWRMaXN0IiBzdHlsZT0KICAgICAgICAgICAgICAgICAgICAiLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsiPjwvZGl2PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9ImZ5cmUtY29tbWVudC1zdHJlYW0iIHN0eWxlPSIiPgogICAgICA8ZGl2IGNsYXNzPSJmeXJlLXN0cmVhbS1zb3J0Ij4KICAgICAgICBTb3J0OiA8YSBjbGFzcz0iZnlyZS1zdHJlYW0tc29ydC1uZXdlc3QiPk5ld2VzdDwvYT4gfCA8YSBjbGFzcz0KICAgICAgICAiZnlyZS1zdHJlYW0tc29ydC1vbGRlc3QiPk9sZGVzdDwvYT4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJmeXJlLXN0cmVhbS1jb250ZW50Ij4gICAgICAKICAgICAgICAKICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KPC9kaXY+CjwvZGl2PgogICAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KICAgICAgICBNVk4ub25SZWFkeShmdW5jdGlvbigkKXsKICAgICAgICAgICAgdmFyIExGX0NvbXBvbmVudCA9IGZ1bmN0aW9uKGNvbnRyb2xsZXIpewogICAgICAgICAgICAgICAgdmFyIG1lID0gdGhpczsKICAgICAgICAgICAgICAgIG1lLk1WTiA9IGNvbnRyb2xsZXI7CiAgICAgICAgICAgICAgICBtZS52ZXJzaW9uID0gJ0xpdmVGeXJlIGZvciBNVk4gMi4wJzsKICAgICAgICAgICAgICAgIG1lLmF1dG9Jbml0ID0gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgTEZfQ29tcG9uZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgIGNvb2tpZU5hbWU6ICdsaXZlZnlyZV90b2tlbicsCiAgICAgICAgICAgICAgICBhbm9uTmFtZTogJ01WTlthbm9uXScsCiAgICAgICAgICAgICAgICBhbm9uOiBudWxsLAogICAgICAgICAgICAgICAgbG9naW46IGZ1bmN0aW9uKG5ld1Rva2VuKXsKICAgICAgICAgICAgICAgICAgICB2YXIgbWUgPSB0aGlzOwogICAgICAgICAgICAgICAgICAgIHZhciB0b2tlbiA9IG5ld1Rva2VufHxWVk0uZ2V0Q29va2llKG1lLmNvb2tpZU5hbWUpfHxmYWxzZTsKICAgICAgICAgICAgICAgICAgICBpZih0b2tlbil7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyeXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ5cmUuY29udi5sb2dpbih0b2tlbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZS5jbGVhbih0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfWNhdGNoKGUpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgVlZNLmRlbENvb2tpZShtZS5jb29raWVOYW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFuZXdUb2tlbil7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWUubG9naW4oKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgICAgICAgICAgICBNVk4ucXVldWUoZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG1lLk1WTi51c2VyfHxWVk0uZ2V0Q29va2llKG1lLmFub25OYW1lKSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVlZNLmRlYnVnLnAoJ1JlcXVlc3RpbmcgTmV3IFRva2VuJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWUuTVZOLnNzby5nZXRMZlRva2VuKGZ1bmN0aW9uKG9iail7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG9iaiAmJiBvYmouc3RhdHVzID09ICdzdWNjZXNzJyl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWVk0uc2V0Q29va2llKG1lLmNvb2tpZU5hbWUsIG9iai50b2tlbi50b2tlbiwgZmFsc2UsICIvIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZS5sb2dpbihvYmoudG9rZW4udG9rZW4pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBiaW5kczogZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICAgICB2YXIgbWUgPSB0aGlzOwogICAgICAgICAgICAgICAgICAgIGlmKCFtZS5hdXRoKXsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGF1dGggPSBuZXcgZnlyZS5jb252LlJlbW90ZUF1dGhEZWxlZ2F0ZSgpOwogICAgICAgICAgICAgICAgICAgICAgICBhdXRoLmxvZ2luID0gZnVuY3Rpb24oaGFuZGxlQXMpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgTVZOLnF1ZXVlKGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIW1lLk1WTi51c2VyKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWUuTVZOLm9tbmkuYWN0aW9uU3JjID0gJ2xmJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWUuTVZOLm9tbmkuYWN0aW9uKG1lLk1WTi5vbW5pLmJ1aWxkQWN0aW9uKCdsb2dpbicsIHtzaWQ6IG1lLmdldFNJRCgpfSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNVk4ucXVldWUoZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1WTi5MRi5sb2dpbigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUFzLmZhaWx1cmUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBhdXRoLmxvZ291dCA9IGZ1bmN0aW9uKGhhbmRsZUFzKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1WTi5xdWV1ZShmdW5jdGlvbigpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG1lLk1WTi51c2VyfHxWVk0uZ2V0Q29va2llKG1lLmFub25OYW1lKSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZWTS5kZWxDb29raWUobWUuY29va2llTmFtZSwgJy8nKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVlZNLmRlbENvb2tpZShtZS5hbm9uTmFtZSwgJy8nKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWUuTVZOLm9tbmkuYWN0aW9uKCdsb2dvdXQnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUFzLnN1Y2Nlc3MoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBhdXRoLnZpZXdQcm9maWxlID0gZnVuY3Rpb24oaGFuZGxlQXMsIGF1dGhvcil7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighYXV0aG9yLmlkLm1hdGNoKC9eYW5vbl8vKSAmJiBhdXRob3IucHJvZmlsZVVybCAhPSAiIil7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uID0gYXV0aG9yLnByb2ZpbGVVcmw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlQXMuc3VjY2VzcygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWUuY2xlYW4oKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBhdXRoLmVkaXRQcm9maWxlID0gZnVuY3Rpb24oaGFuZGxlQXMsIGF1dGhvcil7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihhdXRob3IuaWQubWF0Y2goL15hbm9uXy8pKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZS5jbGVhbigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUFzLmZhaWx1cmUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9ICJodHRwOi8vd3d3Lm15dm9pY2VuYXRpb24uY29tL3Byb2ZpbGUvc2V0dGluZ3MvIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVBcy5zdWNjZXNzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgbWUuYXV0aCA9IGF1dGg7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHJldHVybiBtZS5hdXRoOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGNsZWFuOiBmdW5jdGlvbihjYWxsZWRBZnRlckxvZ2luLCBhdHRlbXB0KXsKICAgICAgICAgICAgICAgICAgICB2YXIgbWUgPSB0aGlzOwogICAgICAgICAgICAgICAgICAgIE1WTi5xdWV1ZShmdW5jdGlvbigpewogICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiBBTk9OCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNhbGxlZEFmdGVyTG9naW4gfHwgbWUuYW5vbiA9PSBudWxsKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGZ5cmUuY29udi51c2VyICYmIGZ5cmUuY29udi51c2VyLmlkKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZS5hbm9uID0gKGZ5cmUuY29udi51c2VyLmlkLm1hdGNoKC9eYW5vbl8vKSkgPyB0cnVlIDogZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihjYWxsZWRBZnRlckxvZ2luKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRlbXB0ID0gKGF0dGVtcHQpID8gYXR0ZW1wdCArIDEgOiAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGF0dGVtcHQgPiA1KXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVlZNLmRlYnVnLnAoJ0xGIExvZ2luIEZhaWxlZCcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWVk0uZGVsQ29va2llKG1lLmNvb2tpZU5hbWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWVk0uZGVidWcucCgnTEYgTG9naW4gQ2hlY2sgQXR0ZW1wdDogJythdHRlbXB0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXttZS5jbGVhbih0cnVlLCBhdHRlbXB0KX0sIDEwMDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAvLyBBTk9OIENsZWFuIFVwCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKG1lLmFub24gPT0gdHJ1ZSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCdsaSA+IGFbdGl0bGU9IkVkaXQgUHJvZmlsZSJdJywgJy5meXJlLWJveC1saXN0JykucGFyZW50KCdsaScpLnJlbW92ZSgpOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgQWNjb3VudCBCdXR0b24KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFNVk4udXNlciAmJiAhVlZNLmdldENvb2tpZShNVk4uTEYuYW5vbk5hbWUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgJGVsID0gJCgnZGl2LmZ5cmUtbG9naW4tYmFyJywgJyNsaXZlZnlyZScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJGVsLmxlbmd0aCAmJiAkZWwuY2hpbGRyZW4oKS5sZW5ndGggPT0gMSAmJiAhJCgnLmZ5cmUtdXNlci1sb2dnZWRpbicsICRlbCkubGVuZ3RoKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZWwuYXBwZW5kKCc8c3BhbiBjbGFzcz0iY3JlYXRlLW12bi1hY2NvdW50Ij4gb3IgPHNwYW4gY2xhc3M9ImxmcmVnIj5DcmVhdGUgQWNjb3VudDwvc3Bhbj48L3NwYW4+Jyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVhY2ggQ29tbWVudC9SZXBseQogICAgICAgICAgICAgICAgICAgICAgICAkKCcuZnlyZS1jb21tZW50LXdyYXBwZXInKS5lYWNoKGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgJGVsID0gJCgnLmZ5cmUtY29tbWVudC11c2VyW2RhdGEtYXV0aG9yLWlkXj0iYW5vbl8iXScsIHRoaXMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJGVsLmxlbmd0aCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29tbWVudCBBdmF0YXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCdhJywgJGVsKS5yZXBsYWNlV2l0aCgkKCdhIGltZycsICRlbCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ3RpdGxlJywgJ0Fub255bW91cyBVc2VyJykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbW1lbnQgQXV0aG9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGVsID0gJGVsLnBhcmVudCgpLmZpbmQoJ2hlYWRlciBhJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGVsLnJlcGxhY2VXaXRoKCQoJzxzcGFuLz4nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoJ2Fub25fdXNlcm5hbWUnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGV4dCgkZWwudGV4dCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXR0cigndGl0bGUnLCAnQW5vbnltb3VzIFVzZXInKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb21tZW50IE1lbnRpb25zCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCdhLmZ5cmUtbWVudGlvbltyZXNvdXJjZV49ImFjY3Q6YW5vbl8iXScsIHRoaXMpLmVhY2goZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLnJlcGxhY2VXaXRoKCQoJzxzcGFuLz4nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoJ2Fub25fdXNlcm5hbWUnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGV4dCgnQCcgKyAkKCdzcGFuW3Byb3BlcnR5PSJuYW1lIl0nLCB0aGlzKS50ZXh0KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCd0aXRsZScsICdBbm9ueW1vdXMgVXNlcicpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29tbWVudCBMaWtlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnLmZ5cmUtYXZhdGFyJywgdGhpcykuZmlsdGVyKGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgkKCdpbWdbc3JjKj0iL2Fub24vIl0nLCB0aGlzKS5sZW5ndGgpID8gdHJ1ZSA6IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuZWFjaChmdW5jdGlvbigpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJ2EnLCB0aGlzKS5yZXBsYWNlV2l0aCgkKCdhIGltZycsIHRoaXMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCd0aXRsZScsICdBbm9ueW1vdXMgVXNlcicpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5maWx0ZXIoJ1tjbGFzcyo9ImZ5cmUtY29tbWVudC1hdXRob3ItdGFnLSJdJykuZWFjaChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNsYXNzZXMgPSB0aGlzLmNsYXNzTmFtZS5zcGxpdCgnICcpLCB0YWdzLCBpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcyA9ICQodGhpcyksICRuYW1lID0gJHRoaXMuZmluZCgnLmZ5cmUtY29tbWVudC11c2VybmFtZScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbmFtZS5uZXh0KCkuaXMoJy5meXJlLW1vZGVyYXRvcicpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRuYW1lLm5leHQoKS5yZW1vdmUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGkgPSAwOyBpIDwgY2xhc3Nlcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2xhc3Nlc1tpXS5pbmRleE9mKCdmeXJlLWNvbW1lbnQtYXV0aG9yLXRhZy0nKSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnID0gY2xhc3Nlc1tpXS5zcGxpdCgnLScpLnBvcCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMuYWRkQ2xhc3MoJ2hhcy1tdm4tYmFkZ2UnKS5yZW1vdmVDbGFzcyhjbGFzc2VzW2ldKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG5hbWUuYWZ0ZXIoJzxpIGNsYXNzPSJtdm4tYmFkZ2UgJyt0YWcrJyI+Jyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgZ2V0U0lEOiBmdW5jdGlvbigpewogICAgICAgICAgICAgICAgICAgIHZhciBzcmNfZGVzYyA9ICcnOwogICAgICAgICAgICAgICAgICAgIGlmKHdpbmRvdy5PQVNfcXVlcnlfY2F0ZWdvcnl8fGZhbHNlKXsKICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoKE9BU19xdWVyeV9jYXRlZ29yeS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xzLywnJykpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYXJ0cyc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2Rlc2MgPSAxMDMzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZmlsbSc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtb3ZpZXMnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19kZXNjID0gMTAzNDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ211c2ljJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfZGVzYyA9IDEwMzU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICduZXdzJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfZGVzYyA9IDEwMzY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdyZXN0YXVyYW50cyc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdkaW5pbmcnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZm9vZCc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2Rlc2MgPSAxMDM3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Jlc3RvZic6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2Rlc2MgPSAxMDM4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gJzh8NTN8JytzcmNfZGVzYzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKCiAgICAgICAgICAgIE1WTi5sb2FkKHsKICAgICAgICAgICAgICAgICdMRic6ewogICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudDogTEZfQ29tcG9uZW50LAogICAgICAgICAgICAgICAgICAgIHBhcmFtczoge30KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHZhciBwYWdlX3RpdGxlID0gJChkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpKS5maW5kKCdtZXRhW3Byb3BlcnR5PSJvZzp0aXRsZSJdLCBtZXRhW25hbWU9IndlYnRpdGxlIl0nKS5hdHRyKCdjb250ZW50Jyk7CiAgICAgICAgICAgIGlmICghcGFnZV90aXRsZSkgewogICAgICAgICAgICAgICAgcGFnZV90aXRsZSA9ICQoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3RpdGxlJykpLnRleHQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB3aW5kb3cuY29udiA9IGZ5cmUuY29udi5sb2FkKHsKICAgICAgICAgICAgICAgIG5ldHdvcms6ICdteXZvaWNlbmF0aW9uLmZ5cmUuY28nLAogICAgICAgICAgICAgICAgYXV0aERlbGVnYXRlOiBNVk4uTEYuYmluZHMoKSwKICAgICAgICAgICAgICAgIHN0cmluZ3M6IHsKICAgICAgICAgICAgICAgICAgICBzaGFyZURlZmF1bHRUZXh0OiBwYWdlX3RpdGxlID8gIkNoZWNrIG91dCAlcydzIHBvc3Qgb24gXCIiICsgcGFnZV90aXRsZSArICJcIiEiIDogIkNoZWNrIG91dCAlcydzIHBvc3QhIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LCBbewogICAgICAgICAgICAgICAgJ2FydGljbGVJZCc6ICdMMk52Ym5SbGJuUXZkbWxsZHk4eU5qVXlNak0yJywKICAgICAgICAgICAgICAgICdjaGVja3N1bSc6ICc1ZjJlNzRkMjQ3NTc5M2M5MDY2YTIyZjNhNzVhYmM2ZScsCiAgICAgICAgICAgICAgICAnY29sbGVjdGlvbk1ldGEnOiAnZXlKMGVYQWlPaUpxZDNRaUxDSmhiR2NpT2lKSVV6STFOaUo5LmV5SjBhWFJzWlNJNklrTm9jbWx6ZEcxaGN5QnphRzkzY3lCaWNtbHVaeUJxYjNrZ1lXNWtJR3BsWlhKeklpd2lkWEpzSWpvaWFIUjBjRHBjTDF3dmQzZDNMbU5wZEhsd1lXZGxjeTVqYjIxY0x6SXdNVEl0TVRFdE1qaGNMMkZ5ZEhOY0wyTm9jbWx6ZEcxaGN5MXphRzkzY3kxaWNtbHVaeTFxYjNrdFlXNWtMV3BsWlhKelhDOGlMQ0owWVdkeklqb2liV2x1TEdGeWRHbGpiR1VzYm1WM2N5eHRhVzVmWVhKMGFXTnNaU3h0YVc1ZmJtVjNjeXhoY25ScFkyeGxYMjVsZDNNc2JXbHVYMkZ5ZEdsamJHVmZibVYzY3lJc0ltTm9aV05yYzNWdElqb2lOV1l5WlRjMFpESTBOelUzT1ROak9UQTJObUV5TW1ZellUYzFZV0pqTm1VaUxDSmhjblJwWTJ4bFNXUWlPaUpNTWs1MlltNVNiR0p1VVhaa2JXeHNaSGs0ZVU1cVZYbE5hazB5SW4wLnhKN2NMd0pWa3JCeTNGbnZFT2h5MmRhVC15bnU1bmRmbTZ6LWdwNjZxUkEnLAogICAgICAgICAgICAgICAgJ2VsJzogJ2xpdmVmeXJlJywKICAgICAgICAgICAgICAgICdzaXRlSWQnOiAnMzA0NTMyJywKICAgICAgICAgICAgICAgICdhdXRoUGFnZVJlbG9hZCc6IHRydWUKICAgICAgICAgICAgfV0sIGZ1bmN0aW9uKHdpZGdldCl7CiAgICAgICAgICAgICAgICBNVk4uTEYubG9naW4oKTsKICAgICAgICAgICAgICAgIHdpZGdldC5vbignaW5pdGlhbFJlbmRlckNvbXBsZXRlJywgTVZOLkxGLmNsZWFuKTsKICAgICAgICAgICAgICAgIHdpZGdldC5vbignY29tbWVudFBvc3RlZCcsIE1WTi5MRi5jbGVhbik7CiAgICAgICAgICAgICAgICB3aWRnZXQub24oJ2NvbW1lbnRGbGFnZ2VkJywgTVZOLkxGLmNsZWFuKTsKICAgICAgICAgICAgICAgIHdpZGdldC5vbignY29tbWVudExpa2VkJywgTVZOLkxGLmNsZWFuKTsKICAgICAgICAgICAgICAgIHdpZGdldC5vbignY29tbWVudFNoYXJlZCcsIE1WTi5MRi5jbGVhbik7CiAgICAgICAgICAgICAgICB3aWRnZXQub24oJ2NvbW1lbnRDb3VudFVwZGF0ZWQnLCBmdW5jdGlvbihkYXRhKXsKICAgICAgICAgICAgICAgICAgICBNVk4uTEYuY2xlYW4oKTsKICAgICAgICAgICAgICAgICAgICBNVk4ucXVldWUoZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICAgICAgICAgJCgnW2RhdGEtbGZ2My1jb3VudGVyXScpLnRleHQoZGF0YSk7CiAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgTVZOLkxGLmNoYW5nZSA9IGZ1bmN0aW9uKGNvbnYpewogICAgICAgICAgICAgICAgICAgIE1WTi5xdWV1ZShmdW5jdGlvbigpewogICAgICAgICAgICAgICAgICAgICAgICB3aWRnZXQuY2hhbmdlQ29sbGVjdGlvbihjb252KTsKICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgTVZOLnF1ZXVlKGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgLy8gUmVnaXN0ZXIgQnV0dG9uCiAgICAgICAgICAgICAgICAgICAgJCgnLmxmcmVnJywgJyNsaXZlZnlyZScpLmxpdmUoJ2NsaWNrJywgZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoIU1WTi51c2VyKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNVk4ub21uaS5hY3Rpb25TcmMgPSAnbGYnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgTVZOLm9tbmkuYWN0aW9uKE1WTi5vbW5pLmJ1aWxkQWN0aW9uKCdqb2luJywge3NpZDogTVZOLkxGLmdldFNJRCgpfSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNVk4uTEYubG9naW4oKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIC8vIGhhY2sgb3VyIGhvdmVyY2FyZHMgb250byB0aGUgbGl2ZWZ5cmUgdXNlciBpbWdzL2xpbmtzCiAgICAgICAgICAgICAgICAgICAgdmFyIGRlX2xpdmVfZ2F0ZSA9IGZ1bmN0aW9uKCRlbCwgc2VsLCBldiwgY2IpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRlbC5kZWxlZ2F0ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGVsLmRlbGVnYXRlKHNlbCwgZXYsIGNiKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgkZWwubGl2ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGVsLmZpbmQoc2VsKS5saXZlKGV2LCBjYik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgIGRlX2xpdmVfZ2F0ZSgkKCcjbGl2ZWZ5cmUnKSwgJy5meXJlLWNvbW1lbnQtd3JhcHBlcicsICdtb3VzZWVudGVyJywgZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYXR0cmlidXRlcy5oYXNPd25Qcm9wZXJ0eSgnbXZuLWhvdmVyY2FyZC1lbicpKSByZXR1cm47CgogICAgICAgICAgICAgICAgICAgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHVzZXIgPSAkdGhpcy5maW5kKCcuZnlyZS1jb21tZW50LXVzZXInKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpZCAgID0gJHVzZXIuZGF0YSgnYXV0aG9yLWlkJyk7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXVpZCB8fCB1aWQuaW5kZXhPZignYW5vbl8nKSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMuYXR0cignbXZuLWhvdmVyY2FyZC1lbicsIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgJHVzZXIuYWRkKCR0aGlzLmZpbmQoJy5meXJlLWNvbW1lbnQtdXNlcm5hbWVbaHJlZl0nKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCdkYXRhLW9tbmktdXNlcicsIHVpZC5zcGxpdCgnQCcpLnNsaWNlKDAsMSkuam9pbigpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLmRhdGEoJ29tbmktdXNlcm5hbWUnLCAkdXNlci5kYXRhKCdmcm9tJykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZGF0YSgnb21uaS11c2VycGhvdG8nLCAkdXNlci5maW5kKCdpbWcnKS5hdHRyKCdzcmMnKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy5hdHRyKCdtdm4taG92ZXJjYXJkLWVuJywgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgLy8gTW92ZSBOb3RpZmljYXRpb24gV2luZG93CiAgICAgICAgICAgICAgICAgICAgdmFyIHNldE5vdGlmeVBvc2l0aW9uID0gZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICAgICAgICAgJCgnLmZ5cmUtbm90aWZpZXItY29udGFpbmVyJykuY3NzKCdyaWdodCcsIGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgkKCdib2R5Jykud2lkdGgoKSAtICQoJyNsaXZlZnlyZScpLm9mZnNldCgpLmxlZnQgLSBwYXJzZUludCgkKHRoaXMpLmNzcygnd2lkdGgnKS5yZXBsYWNlKCdweCcsICcnKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBzZXROb3RpZnlQb3NpdGlvbigpOwogICAgICAgICAgICAgICAgICAgICQod2luZG93KS5iaW5kKCdyZXNpemUgc2Nyb2xsJywgc2V0Tm90aWZ5UG9zaXRpb24pOwogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICA8L3NjcmlwdD4KICAgIDxkaXYgaWQ9InBvd2VyZWRfYnlfbGl2ZWZ5cmVfbmV3Ij48YSBocmVmPSJodHRwOi8vbGl2ZWZ5cmUuY29tIiB0YXJnZXQ9Il9ibGFuayI+UG93ZXJlZCBieSBMaXZlZnlyZTwvYT48L2Rpdj4KPC9kaXY+DQo8ZGl2IGNsYXNzPSd0cmlwbGViYXInPiZuYnNwOzwvZGl2Pg0KDQo8IS0tIFJlY2VudEFydGljbGVzV2lkZ2V0IC0tPg0KICAgIDwhLS0gL1JlY2VudEFlcnRpY2xlc1dpZGdldCAtLT4NCg0KDQo8L2Rpdj4NCjxmb3JtIGlkPSJUcmFja2VyRm9ybSI+DQogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ib2JqaWQiIHZhbHVlPSIyNjUyMjM2IiAvPg0KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InR5cGUiIHZhbHVlPSJzdG9yeSIgLz4NCiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzZW5kVG9GcmllbmQiIHZhbHVlPSIwIiAvPg0KPC9mb3JtPg0KDQo8ZGl2IGNsYXNzPSJPVVRCUkFJTiIgZGF0YS1zcmM9Imh0dHA6Ly93d3cuY2l0eXBhZ2VzLmNvbS8yMDEyLTExLTI4L2FydHMvY2hyaXN0bWFzLXNob3dzLWJyaW5nLWpveS1hbmQtamVlcnMvIiBkYXRhLXdpZGdldC1pZD0iRlRfTjIiIGRhdGEtb2ItdGVtcGxhdGU9Im1pbiI+PC9kaXY+DQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgYXN5bmM9ImFzeW5jIiBzcmM9Imh0dHA6Ly93aWRnZXRzLm91dGJyYWluLmNvbS9vdXRicmFpbi5qcyI+PC9zY3JpcHQ+IjtzOjEzOiJjb250ZW50TGVuZ3RoIjtpOjQwOTYyO3M6MTE6Im1ldGFDb250ZW50IjthOjE2OntzOjEzOiJvZzppbWFnZV9sYXN0IjthOjE6e2k6MDtzOjQ0OiJodHRwOi8vd3d3LmNpdHlwYWdlcy5jb20vaW1nL2NpdHlsb2dvLWxnLnBuZyI7fXM6ODoia2V5d29yZHMiO3M6MToiLCI7czo3OiJvZzp0eXBlIjtzOjc6ImFydGljbGUiO3M6ODoib2c6aW1hZ2UiO2E6MTp7aTowO3M6Mzk6Imh0dHA6Ly9tZWRpYS5uZXd0aW1lcy5jb20vODM3MjAwMC4wLmpwZyI7fXM6MTE6Im9hc1NpdGVQYWdlIjtzOjU6Ii9hcnRzIjtzOjE0OiJhZEluZGV4U2VjdGlvbiI7czo0OiJhcnRzIjtzOjc6InB1YmRhdGUiO3M6MTk6IjIwMTItMTEtMjcgMTM6MDY6MTEiO3M6MTM6ImNhbm9uaWNhbExpbmsiO3M6NTg6Ii8yMDEyLTExLTI4L2FydHMvY2hyaXN0bWFzLXNob3dzLWJyaW5nLWpveS1hbmQtamVlcnMvZnVsbC8iO3M6Njoib2c6dXJsIjtzOjc3OiJodHRwOi8vd3d3LmNpdHlwYWdlcy5jb20vMjAxMi0xMS0yOC9hcnRzL2NocmlzdG1hcy1zaG93cy1icmluZy1qb3ktYW5kLWplZXJzLyI7czo4OiJ3ZWJUaXRsZSI7czo3ODoiQ2hyaXN0bWFzIHNob3dzIGJyaW5nIGpveSBhbmQgamVlcnMgLSBQYWdlIDEgLSBBcnRzIC0gQENJVFlOQU1FQCAtIEBQQVBFUk5BTUVAIjtzOjg6Im9nOnRpdGxlIjtzOjM1OiJDaHJpc3RtYXMgc2hvd3MgYnJpbmcgam95IGFuZCBqZWVycyI7czo3ODoiQ2hyaXN0bWFzIHNob3dzIGJyaW5nIGpveSBhbmQgamVlcnMgLSBQYWdlIDEgLSBBcnRzIC0gQENJVFlOQU1FQCAtIEBQQVBFUk5BTUVAIjtzOjQ6InRydWUiO3M6NjoibWVkaXVtIjtzOjQ6Im5ld3MiO3M6MTE6IndlYlN1YlRpdGxlIjtzOjQ6IkFydHMiO3M6MTE6ImRlc2NyaXB0aW9uIjtzOjIxOToiRm9yY2VkIGhvbGlkYXkgY2hlZXIgaXMgYSBmcmFnaWxlIHRoaW5nLiBUaGUgcmlnaHQgYW1vdW50IGNhbiBzZW5kIHlvdSBib3VuY2luZyBhbmQgc2luZ2luZyBpbnRvIHRoZSBzbm93eSBuaWdodCwgcmVhZHkgdG8gZG8gZ29vZCBkZWVkcyBmb3IgYW55IHBhc3Npbmcgc2hvZWxlc3MgdXJjaGluIHNwZWFraW5nIHdpdGggYW4gYWRvcmFibGUgQ29ja25leSBhY2NlbnQuIElmIGl0IGNvIjtzOjE0OiJvZzpkZXNjcmlwdGlvbiI7czoyMTk6IkZvcmNlZCBob2xpZGF5IGNoZWVyIGlzIGEgZnJhZ2lsZSB0aGluZy4gVGhlIHJpZ2h0IGFtb3VudCBjYW4gc2VuZCB5b3UgYm91bmNpbmcgYW5kIHNpbmdpbmcgaW50byB0aGUgc25vd3kgbmlnaHQsIHJlYWR5IHRvIGRvIGdvb2QgZGVlZHMgZm9yIGFueSBwYXNzaW5nIHNob2VsZXNzIHVyY2hpbiBzcGVha2luZyB3aXRoIGFuIGFkb3JhYmxlIENvY2tuZXkgYWNjZW50LiBJZiBpdCBjbyI7fXM6OToiQ2FjaGVkYXRhIjthOjA6e31zOjc6IkNvbnRleHQiO2E6MTE6e3M6MTQ6IkFkSW5kZXhTZWN0aW9uIjtzOjQ6ImFydHMiO3M6NzoiU2VjdGlvbiI7czo0OiJhcnRzIjtzOjE2OiJPQVNRdWVyeUNhdGVnb3J5IjtzOjQ6IkFydHMiO3M6MTk6Ik9BU1F1ZXJ5U3ViY2F0ZWdvcnkiO3M6ODoiQXJ0aWNsZXMiO3M6MTA6InBhZ2VQYXJhbXMiO3M6MzE6IgogICAgICAgICAgCiAgICAgICAgICAKICAgICAgICAiO3M6NzoiT3JpZ1VybCI7czo1MzoiLzIwMTItMTEtMjgvYXJ0cy9jaHJpc3RtYXMtc2hvd3MtYnJpbmctam95LWFuZC1qZWVycy8iO3M6MzoiVXJsIjtzOjExMToiL2NvbnRlbnQvdmlldy9jaHJpc3RtYXMtc2hvd3MtYnJpbmctam95LWFuZC1qZWVycy8vb3JpZ1VybDovMjAxMi0xMS0yOC9hcnRzL2NocmlzdG1hcy1zaG93cy1icmluZy1qb3ktYW5kLWplZXJzIjtzOjEzOiJDb21tZW50c09iaklkIjtzOjc6IjI2NTIyMzYiO3M6MTA6IlN1YnNlY3Rpb24iO3M6MDoiIjtzOjE0OiJPQVNRdWVyeUF1dGhvciI7czo4OiJFZF9IdXljayI7czo5OiJJc3N1ZURhdGUiO3M6MTA6IjIwMTItMTEtMjgiO31zOjE4OiJQb3N0UHJvY2Vzc01lc3NhZ2UiO086MjQ6IlZWTV9NZXNzYWdlUXVldWVfTWVzc2FnZSI6Mjp7czo4OiIAKgBfdHlwZSI7czo3OiJBZEluZGV4IjtzOjExOiIAKgBfcGF5bG9hZCI7YToxOntpOjA7YToyOntzOjI6ImlkIjtzOjc6IjE5MzgyOTAiO3M6NDoidHlwZSI7czoxMToidG93ZXJfdmlld3MiO319fX0
/////////////////////////////////////////////////
// AUTOGENERATED AT SVN EXPORT TIME
// DO NOT EDIT
/////////////////////////////////////////////////
?>
YTo2OntzOjEzOiJjb250ZW50U3RhdHVzIjthOjE6e3M6Njoic3RhdHVzIjtiOjE7fXM6NzoiY29udGVudCI7czoxNzA6IjwhLS0gTk9HU0EgLS0+CjxkaXYgY2xhc3M9IkFkcyIgaWQ9Ik1pZGRsZSI+CiAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CiAgICAgICAgPCEtLQogICAgICAgIE9BU19BRCgnTWlkZGxlJyk7CiAgICAgICAgLy8tLT4KICAgIDwvc2NyaXB0Pgo8L2Rpdj4KPCEtLSAvTk9HU0EgLS0+IjtzOjEzOiJjb250ZW50TGVuZ3RoIjtpOjE3MDtzOjExOiJtZXRhQ29udGVudCI7YToxOntzOjEzOiJvZzppbWFnZV9sYXN0IjthOjE6e2k6MDtzOjQ0OiJodHRwOi8vd3d3LmNpdHlwYWdlcy5jb20vaW1nL2NpdHlsb2dvLWxnLnBuZyI7fX1zOjk6IkNhY2hlZGF0YSI7YTowOnt9czo3OiJDb250ZXh0IjthOjc6e3M6MTQ6IkFkSW5kZXhTZWN0aW9uIjtzOjU6Im11c2ljIjtzOjExOiJhbHBoYUxldHRlciI7czoxOiJJIjtzOjc6IlNlY3Rpb24iO3M6NToibXVzaWMiO3M6MTY6Ik9BU1F1ZXJ5Q2F0ZWdvcnkiO3M6NToiTXVzaWMiO3M6MTk6Ik9BU1F1ZXJ5U3ViY2F0ZWdvcnkiO3M6NjoiU2VhcmNoIjtzOjc6Ik9yaWdVcmwiO3M6MzQ6Ii9kaXJlY3RvcnkvdGhlYXRlcnMvYWxwaGFMZXR0ZXI6SS8iO3M6MzoiVXJsIjtzOjczOiIvc2VydmljZXMvZ2V0RWxlbWVudC9BZHMvWVRveE9udHpPamc2SW5CdmMybDBhVzl1SWp0ek9qWTZJazFwWkdSc1pTSTdmUT09Ijt9fQ
/////////////////////////////////////////////////
// AUTOGENERATED AT SVN EXPORT TIME
// DO NOT EDIT
/////////////////////////////////////////////////
?>
YTo2OntzOjEzOiJjb250ZW50U3RhdHVzIjthOjE6e3M6Njoic3RhdHVzIjtiOjE7fXM6NzoiY29udGVudCI7czo1NzE6IjxkaXYgY2xhc3M9ImZhY2Vib29rX3JlY29tbWVuZGVkIj4KICAgIDxkaXYgY2xhc3M9ImZhY2Vib29rX3JlY29tbWVuZGVkX2hlYWRlciI+CiAgICAgICAgPGgyPkNpdHlwYWdlcyBvbiBGYWNlYm9vazwvaDI+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9InRvcF9zdG9yaWVzIHJlY29tbWVuZGVkX3N0b3JpZXMiPgogICAgICAgIDxpZnJhbWUgc3JjPSJodHRwOi8vd3d3LmZhY2Vib29rLmNvbS9wbHVnaW5zL2FjdGl2aXR5LnBocD9zaXRlPWNpdHlwYWdlcy5jb20sYmxvZ3MuY2l0eXBhZ2VzLmNvbSZhbXA7d2lkdGg9MzY4JmFtcDtoZWlnaHQ9MzAwJmFtcDtoZWFkZXI9ZmFsc2UmYW1wO2NvbG9yc2NoZW1lPWxpZ2h0JmFtcDtmb250PWFyaWFsJmFtcDtib3JkZXJfY29sb3I9JTIzZmZmZmZmJmFtcDtyZWNvbW1lbmRhdGlvbnM9ZmFsc2UiIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPSIwIiBzdHlsZT0iYm9yZGVyOm5vbmU7IG92ZXJmbG93OmhpZGRlbjsgd2lkdGg6MzY4cHg7IGhlaWdodDozMDBweDsiIGFsbG93VHJhbnNwYXJlbmN5PSJ0cnVlIj48L2lmcmFtZT4KICAgIDwvZGl2Pgo8L2Rpdj4iO3M6MTM6ImNvbnRlbnRMZW5ndGgiO2k6NTcxO3M6MTE6Im1ldGFDb250ZW50IjthOjE6e3M6MTM6Im9nOmltYWdlX2xhc3QiO2E6MTp7aTowO3M6NDQ6Imh0dHA6Ly93d3cuY2l0eXBhZ2VzLmNvbS9pbWcvY2l0eWxvZ28tbGcucG5nIjt9fXM6OToiQ2FjaGVkYXRhIjthOjA6e31zOjc6IkNvbnRleHQiO2E6MTE6e3M6MTQ6IkFkSW5kZXhTZWN0aW9uIjtzOjQ6Im5ld3MiO3M6NzoiU2VjdGlvbiI7czo0OiJuZXdzIjtzOjE2OiJPQVNRdWVyeUNhdGVnb3J5IjtzOjQ6Ik5ld3MiO3M6MTk6Ik9BU1F1ZXJ5U3ViY2F0ZWdvcnkiO3M6NjoiU2VhcmNoIjtzOjEwOiJwYWdlUGFyYW1zIjtzOjMxOiIKICAgICAgICAgIAogICAgICAgICAgCiAgICAgICAgIjtzOjc6Ik9yaWdVcmwiO3M6NTM6Ii8yMDEyLTExLTI4L2FydHMvY2hyaXN0bWFzLXNob3dzLWJyaW5nLWpveS1hbmQtamVlcnMvIjtzOjM6IlVybCI7czoyOToiL3NlcnZpY2VzL2ZhY2Vib29rUmVjb21tZW5kZWQiO3M6MTM6IkNvbW1lbnRzT2JqSWQiO3M6NjoiNDkyNTk4IjtzOjEwOiJTdWJzZWN0aW9uIjtzOjc6IkZlYXR1cmUiO3M6MTQ6Ik9BU1F1ZXJ5QXV0aG9yIjtzOjEyOiJNYXR0X1NueWRlcnMiO3M6OToiSXNzdWVEYXRlIjtzOjEwOiIyMDA4LTA2LTI1Ijt9fQ
/////////////////////////////////////////////////
// AUTOGENERATED AT SVN EXPORT TIME
// DO NOT EDIT
/////////////////////////////////////////////////
?>
YTo2OntzOjEzOiJjb250ZW50U3RhdHVzIjthOjE6e3M6Njoic3RhdHVzIjtiOjE7fXM6NzoiY29udGVudCI7czo0MzE6IjxkaXYgY2xhc3M9J2NoaXNlbF91IHJfYm94IHNwZWNpYWxyZXBvcnRzJz4NCiAgIDxkaXYgY2xhc3M9J2dyYXknPg0KICAgIDxoMj5TcGVjaWFsIFJlcG9ydHM8L2gyPg0KICAgIDxkaXYgY2xhc3M9J2NoaXNlbF9kIHdoaXRlJz4NCiAgICAgPHVsPg0KPGxpPjxhIGhyZWY9Ii9zcGVjaWFsUmVwb3J0cy9taWNoZWxlLWJhY2htYW5uLWEtaGlzdG9yeS1vZi1jcmF6eS1ob21vcGhvYmlhLWFuZC1saWVzLTI4MjM3ODAvIj5NaWNoZWxlIEJhY2htYW5uOiBBIGhpc3Rvcnkgb2YgY3JhenksIGhvbW9waG9iaWEsIGFuZCBsaWVzPC9hPjwvbGk+ICAgICAgPGxpIGNsYXNzPSdtb3JlJz48YSBocmVmPScvc3BlY2lhbFJlcG9ydHMnPk1vcmUgU3BlY2lhbCBSZXBvcnRzID4+PC9hPjwvbGk+DQogICAgIDwvdWw+DQogICAgPC9kaXY+DQogICA8L2Rpdj4NCiAgPC9kaXY+IjtzOjEzOiJjb250ZW50TGVuZ3RoIjtpOjQzMTtzOjExOiJtZXRhQ29udGVudCI7YToxOntzOjEzOiJvZzppbWFnZV9sYXN0IjthOjE6e2k6MDtzOjQ0OiJodHRwOi8vd3d3LmNpdHlwYWdlcy5jb20vaW1nL2NpdHlsb2dvLWxnLnBuZyI7fX1zOjk6IkNhY2hlZGF0YSI7YToxOntpOjA7czo3OiIyODIzNzgwIjt9czo3OiJDb250ZXh0IjthOjE3OntzOjE0OiJBZEluZGV4U2VjdGlvbiI7czo0OiJuZXdzIjtzOjc6IlNlY3Rpb24iO3M6NDoibmV3cyI7czoxNjoiT0FTUXVlcnlDYXRlZ29yeSI7czo0OiJOZXdzIjtzOjE5OiJPQVNRdWVyeVN1YmNhdGVnb3J5IjtzOjY6IlNlYXJjaCI7czoxMDoicGFnZVBhcmFtcyI7czozMToiCiAgICAgICAgICAKICAgICAgICAgIAogICAgICAgICI7czo3OiJPcmlnVXJsIjtzOjQxOiIvMjAwOS0xMi0xNi9jYWxlbmRhci9tYXNvbi1qZW5uaW5ncy9mdWxsLyI7czozOiJVcmwiO3M6MzY6Ii9zcGVjaWFsUmVwb3J0cy9TcGVjaWFsUmVwb3J0c1dpZGdldCI7czoxMzoiQ29tbWVudHNPYmpJZCI7czo2OiI0OTI1OTgiO3M6MTA6IlN1YnNlY3Rpb24iO3M6NzoiRmVhdHVyZSI7czoxNDoiT0FTUXVlcnlBdXRob3IiO3M6MTI6Ik1hdHRfU255ZGVycyI7czo5OiJJc3N1ZURhdGUiO3M6MTA6IjIwMDgtMDYtMjUiO3M6MTA6ImJlc3RPZlllYXIiO3M6NDoiMjAxMyI7czoxNToiZmVhdHVyZWRTdG9yaWVzIjthOjE1OntpOjA7czo3OiIyODI4MTkwIjtpOjE7czo3OiIyODIzMDYzIjtpOjI7czo3OiIyODE2ODAyIjtpOjM7czo3OiIyODEwMDY1IjtpOjQ7czo3OiIyODAzMjYwIjtpOjU7czo3OiIyODAzMjU4IjtpOjY7czo3OiIyNzk2MzQ2IjtpOjc7czo3OiIyNzg5MDQ5IjtpOjg7czo3OiIyNzgxNTYyIjtpOjk7czo3OiIyNzc0MDYyIjtpOjEwO3M6NzoiMjc2NzQ0MCI7aToxMTtzOjc6IjI3Njc0MzgiO2k6MTI7czo3OiIyNzYxMTAwIjtpOjEzO3M6NzoiMjc1MzY3MSI7aToxNDtzOjc6IjI3NTM2NjQiO31zOjEyOiJjYXRlZ29yeU5hbWUiO3M6NzoiVGhlYXRlciI7czo0OiJwYWdlIjtzOjQ6IjEwMDciO3M6Nzoic2VjdGlvbiI7czo0OiIzNzQzIjtzOjg6ImNhdGVnb3J5IjtzOjQ6IjQyNDMiO319
/////////////////////////////////////////////////
// AUTOGENERATED AT SVN EXPORT TIME
// DO NOT EDIT
/////////////////////////////////////////////////
?>
YTo2OntzOjEzOiJjb250ZW50U3RhdHVzIjthOjE6e3M6Njoic3RhdHVzIjtiOjE7fXM6NzoiY29udGVudCI7czowOiIiO3M6MTM6ImNvbnRlbnRMZW5ndGgiO2k6MDtzOjExOiJtZXRhQ29udGVudCI7YToxOntzOjEzOiJvZzppbWFnZV9sYXN0IjthOjE6e2k6MDtzOjQ0OiJodHRwOi8vd3d3LmNpdHlwYWdlcy5jb20vaW1nL2NpdHlsb2dvLWxnLnBuZyI7fX1zOjk6IkNhY2hlZGF0YSI7YTowOnt9czo3OiJDb250ZXh0IjthOjE3OntzOjE0OiJBZEluZGV4U2VjdGlvbiI7czo0OiJuZXdzIjtzOjc6IlNlY3Rpb24iO3M6NDoibmV3cyI7czoxNjoiT0FTUXVlcnlDYXRlZ29yeSI7czo0OiJOZXdzIjtzOjE5OiJPQVNRdWVyeVN1YmNhdGVnb3J5IjtzOjY6IlNlYXJjaCI7czoxMDoicGFnZVBhcmFtcyI7czozMToiCiAgICAgICAgICAKICAgICAgICAgIAogICAgICAgICI7czo3OiJPcmlnVXJsIjtzOjUzOiIvMjAxMi0xMS0yOC9hcnRzL2NocmlzdG1hcy1zaG93cy1icmluZy1qb3ktYW5kLWplZXJzLyI7czozOiJVcmwiO3M6MTU6Ii9zZW8vcGFydG5lckJveCI7czoxMzoiQ29tbWVudHNPYmpJZCI7czo2OiI0OTI1OTgiO3M6MTA6IlN1YnNlY3Rpb24iO3M6NzoiRmVhdHVyZSI7czoxNDoiT0FTUXVlcnlBdXRob3IiO3M6MTI6Ik1hdHRfU255ZGVycyI7czo5OiJJc3N1ZURhdGUiO3M6MTA6IjIwMDgtMDYtMjUiO3M6MTA6ImJlc3RPZlllYXIiO3M6NDoiMjAxMyI7czoxNToiZmVhdHVyZWRTdG9yaWVzIjthOjE1OntpOjA7czo3OiIyODI4MTkwIjtpOjE7czo3OiIyODIzMDYzIjtpOjI7czo3OiIyODE2ODAyIjtpOjM7czo3OiIyODEwMDY1IjtpOjQ7czo3OiIyODAzMjYwIjtpOjU7czo3OiIyODAzMjU4IjtpOjY7czo3OiIyNzk2MzQ2IjtpOjc7czo3OiIyNzg5MDQ5IjtpOjg7czo3OiIyNzgxNTYyIjtpOjk7czo3OiIyNzc0MDYyIjtpOjEwO3M6NzoiMjc2NzQ0MCI7aToxMTtzOjc6IjI3Njc0MzgiO2k6MTI7czo3OiIyNzYxMTAwIjtpOjEzO3M6NzoiMjc1MzY3MSI7aToxNDtzOjc6IjI3NTM2NjQiO31zOjEyOiJjYXRlZ29yeU5hbWUiO3M6NzoiVGhlYXRlciI7czo0OiJwYWdlIjtzOjQ6IjEwMDciO3M6Nzoic2VjdGlvbiI7czo0OiIzNzQzIjtzOjg6ImNhdGVnb3J5IjtzOjQ6IjQyNDMiO319