www.nasdaqtrader.com
Open in
urlscan Pro
198.55.218.21
Public Scan
Submitted URL: http://www.nasdaqtrader.com/
Effective URL: https://www.nasdaqtrader.com/
Submission: On April 18 via api from US — Scanned from DE
Effective URL: https://www.nasdaqtrader.com/
Submission: On April 18 via api from US — Scanned from DE
Form analysis
2 forms found in the DOMName: form2 — POST ./?param=033d1a5c
<form name="form2" method="post" action="./?param=033d1a5c" id="form2">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE"
value="/wEPDwUKMTA4NDg4NDM1MA9kFgpmDxYCHgRUZXh0BRpOQVNEQVF0cmFkZXIuY29tIEhvbWUgUGFnZWQCAQ8WAh8ABTE8bWV0YSBodHRwLWVxdWl2PSJrZXl3b3JkcyJjb250ZW50PSJUcmFkaW5nIiAvPg0KZAIDDxYCHglpbm5lcmh0bWwFzxA8ZGl2PjxkaXY+PC9kaXY+PC9kaXY+CiAgIAogICAKPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCi5zZWFyY2gtY250ciB7IHdpZHRoOiAyNGVtOyBwb3NpdGlvbjogcmVsYXRpdmU7IHZlcnRpY2FsLWFsaWduOiB0b3A7IH0KCi5zZWFyY2gtY250ciA+IGRpdiB7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgfQoKLnNlYXJjaC1sYmwgeyBmb250LXdlaWdodDogYm9sZDsgbWFyZ2luLWJvdHRvbTogMWVtOyB9CgouZ3NjLWNvbnRyb2wtc2VhcmNoYm94LW9ubHkgeyB3aWR0aDogMThlbTsgfQoKLmdzYy1jb250cm9sLXNlYXJjaGJveC1vbmx5IC5nc2Mtc2VhcmNoLWJ1dHRvbiBzdmcgeyBkaXNwbGF5OiBub25lOyB9CgouZ3NjLWNvbnRyb2wtc2VhcmNoYm94LW9ubHkgYnV0dG9uLmdzYy1zZWFyY2gtYnV0dG9uIHsKCWJhY2tncm91bmQtaW1hZ2U6IHVybCgvaW1hZ2VzL2dvLXNlYXJjaC5wbmcpOwoJYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKCWJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OwoJYm9yZGVyOiAwOwoJd2lkdGg6IDE1cHg7CgloZWlnaHQ6IDE1cHg7Cn0KCi5nc2MtY29udHJvbC1zZWFyY2hib3gtb25seSBidXR0b24uZ3NjLXNlYXJjaC1idXR0b246aG92ZXIgewoJYmFja2dyb3VuZC1pbWFnZTogdXJsKC9pbWFnZXMvZ28tc2VhcmNoLnBuZyk7Cgl0cmFuc2Zvcm06IHNjYWxlKDEuMSk7CgliYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKCWJvcmRlcjogMDsKfQoKI3RhYjZkaXYgdGFibGUgdGQgeyB3aGl0ZS1zcGFjZTogbm93cmFwOyB9Cgo8L3N0eWxlPgoKPGRpdiBjbGFzcz0ic2VhcmNoIj48ZGl2IGNsYXNzPSJzZWFyY2gtY250ciI+PGRpdiBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsgcGFkZGluZy10b3A6IDAuNWVtOyI+PHNwYW4gY2xhc3M9InNlYXJjaC1sYmwiPlNlYXJjaDo8L3NwYW4+PC9kaXY+Jm5ic3A7Jm5ic3A7Jm5ic3A7PGRpdiBjbGFzcz0iZ2NzZS1zZWFyY2hib3gtb25seSIgZGF0YS1yZXN1bHRzVXJsPSIvVHJhZGVyLmFzcHg/aWQ9U2l0ZVNlYXJjaFJlc3VsdHMiPjwvZGl2PjwvZGl2PjwvZGl2PgoKPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoKJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CiAgICB2YXIgY3ggPSAnMDExMzkyODc2MzE2ODMzODUyMTQ1OnFydno5YW93OThrJzsKICAgIHZhciBnY3NlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7CiAgICBnY3NlLnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JzsKICAgIGdjc2UuYXN5bmMgPSB0cnVlOwogICAgZ2NzZS5zcmMgPSAnaHR0cHM6Ly9jc2UuZ29vZ2xlLmNvbS9jc2UuanM/Y3g9JyArIGN4OwogICAgdmFyIHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0JylbMF07CiAgICBzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGdjc2UsIHMpOwp9LDApCjwvc2NyaXB0PgoKIAoJCgogICAgICAgICAgICAgICA8IS0tCjxkaXYgY2xhc3M9ImFkNzI4eDkwIiBpZD0ibWFzdGhlYWRCYW5uZXIiIHJ1bmF0PSJzZXJ2ZXIiPgogICAgCgk8aWZyYW1lIG5hbWU9Im1hc3RoZWFkQmFubmVyaUZyYW1lIiBpZD0ibWFzdGhlYWRCYW5uZXJpRnJhbWUiIHdpZHRoPSI3MjgiIGhlaWdodD0iOTAiIHNyYz0iaHR0cDovL3d3dy5uYXNkYXF0cmFkZXIuY29tL2NvbnRlbnQvaW1hZ2VzL2Fkcy9hZHJvdGF0b3IuaHRtbCIgZnJhbWVib3JkZXI9IjAiIHNjcm9sbGluZz0ibm8iID48L2lmcmFtZT4KCTwvZGl2Pi0tPgoKIAkJIDxkaXYgaWQ9ImNvbnRlbnQiIHN0eWxlPSJjbGVhcjogYm90aDsgaGVpZ2h0OiBhdXRvOyBwYWRkaW5nLWJvdHRvbTogMTBweDsgbWFyZ2luLWxlZnQ6IC0xMHB4Ij4KPCEtLSA8ZGl2IGlkPSJuZXdzTWFycXVlZSI+CjxzY3JpcHQgdHlwZT10ZXh0L2phdmFzY3JpcHQgbGFuZ3VhZ2U9amF2YXNjcmlwdD5GbGV4TmV3cygiTmV3c1RpY2tlciIsICJOZXdzVHlwZT10cmFkZXImQmFja2dyb3VuZD0weGZmZmZmZiZGb3JlZ3JvdW5kPTB4MDA2NjllJnRleHRMZW5ndGg9NTAmU2VydmljZVVSTD1odHRwOi8vd3d3Lm5hc2RhcXRyYWRlci5jb20vZGF0YWhhbmRsZXJzL25ld3NtYXJxdWVlLmFzaHg/dHlwZT10cmFkZXIiKTs8L3NjcmlwdD4gCTwvZGl2PiAtLT4JPC9kaXY+CgpkAgQPFgIfAQWG8AI8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoubWlkZGxlY29sIAp7CiAgIHdpZHRoOjcyMHB4ICFpbXBvcnRhbnQ7CiAgIGJvcmRlci1sZWZ0Om5vbmUgIWltcG9ydGFudDsKfSAKCi5zdWJ0YWJfdG9wIHsgIHBhZGRpbmc6MTBweDsgfQoKLnN1YnRhYl90b3AgdGFibGUgeyAgd2lkdGg6NTQwcHggIWltcG9ydGFudDsgfQoKLnN1YnRhYl90b3AgdGFibGUgdGQgeyAgd2lkdGg6MTgwcHg7IH0KCi5nZW5UYWJsZSB0YWJsZSB0ZC5zdWJ0YWJfb24gCnsKICAgZm9udC13ZWlnaHQ6Ym9sZDsKICAgYmFja2dyb3VuZDojZWNmM2Y5IHVybCgvaW1hZ2VzL3N1YnRhYl9vbl9iZy5wbmcpIHRvcCBsZWZ0OwogICBiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7Cn0KCi5nZW5UYWJsZSB0YWJsZSB0ZC5zdWJ0YWJfb24gYSAKewogICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgIGxlZnQ6MjBweDsKICAgdGV4dC1kZWNvcmF0aW9uOm5vbmU7CiAgIGNvbG9yOiMwMDVCN0Y7Cn0KCi5nZW5UYWJsZSB0YWJsZSB0ZC5zdWJ0YWJfb24gYTpob3ZlciB7ICAgY29sb3I6IzAwNUI3RjsgfQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoKI2hvbWV0b3B0YWJzIAp7CiAgICAgIGZsb2F0OmxlZnQ7CiAgICAgIHdpZHRoOjcxNXB4OwogICAgICBwb3NpdGlvbjphYnNvbHV0ZTsKICAgICAgbGVmdDowcHg7CiAgICAgIHRvcDowcHg7CiAgICAgIGZvbnQtc2l6ZTouOWVtOwogICAgICBsaW5lLWhlaWdodDoxMnB4OyAgICAgCn0KCiNob21ldG9wdGFicyB1bCAKewogICAgICBtYXJnaW46MDsKICAgICAgcGFkZGluZzowOwogICAgICBsaXN0LXN0eWxlOm5vbmU7Cn0KCiNob21ldG9wdGFicyBsaSAKewogICAgICBmbG9hdDpsZWZ0OwogICAgICBiYWNrZ3JvdW5kOnVybCgvaW1hZ2VzL2hvbWV0b3B0YWJzX2xlZnQucG5nKSBuby1yZXBlYXQgbGVmdCB0b3A7CiAgICAgIG1hcmdpbjowOwogICAgICBwYWRkaW5nOjBweCAwcHggMHB4IDEwcHg7CiAgICAgIGxpc3Qtc3R5bGUtdHlwZTpub25lOwogICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cn0KCiNob21ldG9wdGFicyBhIAp7CiAgICAgIGZsb2F0OmxlZnQ7CiAgICAgIGRpc3BsYXk6YmxvY2s7CiAgICAgIGJhY2tncm91bmQ6IHVybCgvaW1hZ2VzL3RvcHRhYnNfcmlnaHQucG5nKSBuby1yZXBlYXQgcmlnaHQgdG9wOwogICAgICBwYWRkaW5nOjdweCAxNHB4IDZweCAxcHg7CiAgICAgIHRleHQtZGVjb3JhdGlvbjpub25lOwogICAgICBmb250LXdlaWdodDpib2xkOwogICAgICBjb2xvcjojMWQ0ZDgyOwp9CgojaG9tZXRvcHRhYnMgPiB1bCBhIHt3aWR0aDphdXRvO30KCiAgICAvKiBDb21tZW50ZWQgQmFja3NsYXNoIEhhY2sgaGlkZXMgcnVsZSBmcm9tIElFNS1NYWMgXCovCiAgICAjaG9tZXRvcHRhYnMgYSB7ZmxvYXQ6bm9uZTt9CiAgICAvKiBFbmQgSUU1LU1hYyBoYWNrICovCgojaG9tZXRvcHRhYnMgYTpob3ZlciB7ICBjb2xvcjojMWQ0ZDgyOyAgfQoKI2hvbWV0b3B0YWJzIC5vbiAKewogICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTI4cHg7CiAgICAgIGJvcmRlci13aWR0aDowOwogICAgICBwYWRkaW5nOjAgMCAwIDM2cHg7Cn0KCiAgICAgIAojaG9tZXRvcHRhYnMgLm9uIGEgCnsKICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjoxMDAlIC0yOHB4OwogICAgICBwYWRkaW5nLWJvdHRvbTo2cHg7CiAgICAgIGNvbG9yOiMxZDRkODI7Cn0KCiNob21ldG9wdGFicyBsaTpob3ZlciwgI3RvcHRhYnMgbGk6aG92ZXIgYSAKewogICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOjAlIC0yOHB4OwogICAgICBjb2xvcjojMWQ0ZDgyOwogICAgICBjdXJzb3I6IHBvaW50ZXIKfQoKI2hvbWV0b3B0YWJzIGxpOmhvdmVyIGEgCnsKICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjoxMDAlIC0yOHB4OwogICAgICBjdXJzb3I6IHBvaW50ZXIKfSAgICAgIAo8L3N0eWxlPgoKPGlmcmFtZSBzcmM9Ii9zbmlwcGV0cy9zbGlkZXJfaG9tZS5odG1sIiBzdHlsZT0id2lkdGg6NzQwcHg7aGVpZ2h0OjE4MHB4O21hcmdpbi1sZWZ0Oi0xOHB4O3BhZGRpbmctdG9wOjRweCIgZnJhbWVib3JkZXI9IjAiIHNjcm9sbGluZz0ibm8iPgo8L2lmcmFtZT4KCgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CmZ1bmN0aW9uIHRhYjVTdGFydCgpCnsKICAgIEdldFBITFhUb3AxKCk7CiAgICBHZXRQSExYVG9wMigpOwogICAgR2V0UEhMWFRvcDMoKTsKfQoKZnVuY3Rpb24gdGFiNVN0b3AoKQp7CiAgICBTdG9wUEhMWFRvcDEoKTsKICAgIFN0b3BQSExYVG9wMigpOwogICAgU3RvcFBITFhUb3AzKCk7Cn0KCmZ1bmN0aW9uIHNob3dQSExYKGluc3RhbmNlKQp7CiAgICBzd2l0Y2ggKGluc3RhbmNlKQogICAgewogICAgICAgIGNhc2UgIjEiOgogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnUEhMWDEnKS5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1BITFgyJykuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1BITFgzJykuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N1YnRhYl8xJykuY2xhc3NOYW1lID0gInN1YnRhYl9vbiI7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdWJ0YWJfMicpLmNsYXNzTmFtZSA9ICJzdWJ0YWJfb2ZmIjsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N1YnRhYl8zJykuY2xhc3NOYW1lID0gInN1YnRhYl9vZmYiOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICIyIjoKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1BITFgxJykuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1BITFgyJykuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdQSExYMycpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdWJ0YWJfMScpLmNsYXNzTmFtZSA9ICJzdWJ0YWJfb2ZmIjsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N1YnRhYl8yJykuY2xhc3NOYW1lID0gInN1YnRhYl9vbiI7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdWJ0YWJfMycpLmNsYXNzTmFtZSA9ICJzdWJ0YWJfb2ZmIjsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiMyI6CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdQSExYMScpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdQSExYMicpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdQSExYMycpLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOwogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3VidGFiXzEnKS5jbGFzc05hbWUgPSAic3VidGFiX29mZiI7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdWJ0YWJfMicpLmNsYXNzTmFtZSA9ICJzdWJ0YWJfb2ZmIjsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N1YnRhYl8zJykuY2xhc3NOYW1lID0gInN1YnRhYl9vbiI7CiAgICAgICAgICAgIGJyZWFrOwogICAgfQp9Cjwvc2NyaXB0PgoKPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ic25pcHBldHMvanMvSG9tZVBhZ2VUYWJzLmpzIj48L3NjcmlwdD4KCjxkaXYgc3R5bGU9Im1hcmdpbi10b3A6MTBweDttYXJnaW4tbGVmdDotNXB4O3Bvc2l0aW9uOnJlbGF0aXZlO2hlaWdodDo3MDBweDsiPgo8ZGl2IGlkPSJob21ldG9wdGFicyIgc3R5bGU9InBvc2l0aW9uOnJlbGF0aXZlIj4KPHVsPgo8bGkgY2xhc3M9Im9uIiBvbmNsaWNrPSJjdXJyZW50KCd0YWI2JykiIGlkPSJ0YWI2Ij48YSBzdHlsZT0iZGlzcGxheTogYWN0aXZlIj5NYXJrZXQgVm9sPC9zcGFuPjwvYT48L2xpPgo8bGkgb25jbGljaz0iY3VycmVudCgndGFiNCcpIiBpZD0idGFiNCI+PGE+VG9wIE1hdGNoZWQ8L2E+IDwvbGk+CjxsaSBvbmNsaWNrPSJjdXJyZW50KCd0YWIyJykiIGlkPSJ0YWIyIj48YT5Ub3AgTWF0Y2hlZCBCWDwvYT4gPC9saT4KPGxpIG9uY2xpY2s9ImN1cnJlbnQoJ3RhYjcnKSIgaWQ9InRhYjciPjxhPlRvcCBNYXRjaGVkIFBTWDwvYT4gPC9saT4KPCEtLTxsaSBvbmNsaWNrPSJjdXJyZW50KCd0YWIzJykiIGlkPSJ0YWIzIj48YT5CWCBPcHRpb25zPC9hPiA8L2xpPgo8bGkgb25jbGljaz0iY3VycmVudCgndGFiMScpIiBpZD0idGFiMSI+PGE+Tk9NPC9hPiA8L2xpPgo8bGkgb25jbGljaz0iY3VycmVudCgndGFiNScpIiBpZD0idGFiNSI+PGE+UEhMWDwvYT4gPC9saT48L3VsPi0tPgo8L2Rpdj4KCjxkaXYgY2xhc3M9ImJsb2NrIiBpZD0idGFiNmRpdiIgc3R5bGU9ImRpc3BsYXk6IGJsb2NrOyB6LWluZGV4OiAxOyBvdmVyZmxvdzogYXV0bzsgaGVpZ2h0OiA2OTBweDsgd2lkdGg6IDcxNXB4OyBib3JkZXItcmlnaHQ6IDFweCAjRTlFOUVBOyBib3JkZXItbGVmdDogMXB4ICNFOUU5RUE7IGJvcmRlci1ib3R0b206IDFweCAjRTlFOUVBOyBib3JkZXItdG9wOiAwcHg7ICovIG1hcmdpbi10b3A6IDVweDsgbWFyZ2luLWxlZnQ6IC0ycHgiPjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InJwY2NsaWVudC5heGQiPjwvc2NyaXB0Pg0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iL2pzL3V0aWxpdGllcy5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIvc25pcHBldHMvanMvanF1ZXJ5LXVpLTEuMTIuMS5taW4uanMiPjwvc2NyaXB0Pg0KPGxpbmsgaHJlZj0iL3RlbXBsYXRlX3N0eWxlcy9tZHRfc3R5bGVfdGFicy5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIC8+DQo8bGluayBocmVmPSIvY3NzL2pxdWVyeS11aS10aGVtZXMtMS44LjIvdGhlbWVzL3Ntb290aG5lc3MvanF1ZXJ5LXVpLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KICAgIGRpdi51aS1kYXRlcGlja2VyIHsNCiAgICBmb250LXNpemU6IDY2JTsNCn0NCg0KPC9zdHlsZT4NCg0KPGRpdiBpZD0ibWR0Ij4NCiA8dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBjbGFzcz0idGFibGVTZXR0aW5nc0hlYWRlciI+DQogCSAgPHRyPg0KIAkgICAgPHRkIHN0eWxlPSJwb3NpdGlvbjogcmVsYXRpdmU7IHdpZHRoOiAxNTBweDsiPjxoMT5VLlMuIE1hcmtldCBWb2x1bWU8L2gxPg0KIAkJPC90ZD4NCiAJICAgICA8dGQ+PGEgaHJlZj0iL3RyYWRlci5hc3B4P2lkPUZ1bGxWb2x1bWVTdW1tYXJ5Ij48Yj5GdWxsIE1hcmtldCBWb2x1bWUgUGFnZTwvYj48L2E+PC90ZD4NCiAJICA8L3RyPg0KIAkgIDx0cj48dGQgY2xhc3M9ImJ0bkNob29zZURhdGUiIHN0eWxlPSJwb3NpdGlvbjogcmVsYXRpdmU7IGZsb2F0OiBsZWZ0OyB0ZXh0LWFsaWduOiBsZWZ0Ij48aW5wdXQgaWQ9ImNob29zZURhdGUiIHNpemU9IjEwIiBjbGFzcz0iZHJvcERvd25DdXN0b20iIHRpdGxlPSJDaG9vc2UgYW5vdGhlciBkYXRlIiB0eXBlPSJ0ZXh0Ij48L3RkPjx0ZD4mbmJzcDs8L3RkPjwvdHI+DQogIDwvdGFibGU+DQogIDx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGNsYXNzPSJ0YWJsZVNldHRpbmdzIj4NCgk8dHI+DQogICAgPHRkPjxicj4NCgkgIDxzcGFuIGlkPSJ0YWJzaGFyZXMiIGNsYXNzPSJ0YWJzSW50ZXJuYWwiIG9uY2xpY2s9InNldFVuaXRzKCdzaGFyZXMnKTsiPjxhIGhyZWY9IiMiPlZvbHVtZTwvYT48L3NwYW4+DQoJICA8c3BhbiBpZD0idGFidHJhZGVzIiBjbGFzcz0idGFic0ludGVybmFsIiBvbmNsaWNrPSJzZXRVbml0cygndHJhZGVzJyk7Ij48YSBocmVmPSIjIj5UcmFkZXM8L2E+PC9zcGFuPg0KCSAgPHNwYW4gaWQ9InRhYmRvbGxhclZvbCIgY2xhc3M9InRhYnNJbnRlcm5hbCIgb25jbGljaz0ic2V0VW5pdHMoJ2RvbGxhclZvbCcpOyI+PGEgaHJlZj0iIyI+RG9sbGFyIFZvbHVtZTwvYT48L3NwYW4+DQoJICA8c3BhbiBjbGFzcz0iYnRuU2V0RGVmYXVsdCIgc3R5bGU9Im1hcmdpbi1sZWZ0OjEwcHgiIG9uY2xpY2s9InNldERlZmF1bHRVbml0cygpOyI+PGEgaHJlZj0iIyI+U2V0IERlZmF1bHQgVGFiPC9hPjwvc3Bhbj4NCiAgICA8L3RkPg0KICAgIDx0ZCBzdHlsZT0id2lkdGg6IDExNXB4OyB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tIj4NCgk8c2VsZWN0IG5hbWU9InNlbGVjdCIgaWQ9InNlbGVjdCIgY2xhc3M9ImRyb3BEb3duQ3VzdG9tIiBzdHlsZT0icG9zaXRpb246IHJlbGF0aXZlOyBtYXJnaW4tdG9wOiAxMHB4OyBib3JkZXI6MXB4IHNvbGlkICNDQ0NDQ0M7IHBhZGRpbmctYm90dG9tOiAwcHgiIG9uY2hhbmdlPSJnZXREb3dubG9hZCgpOyI+DQoJICA8b3B0aW9uIHNlbGVjdGVkIHZhbHVlPSIiPkRvd25sb2FkPC9vcHRpb24+DQogICAgICA8b3B0aW9uIHZhbHVlPSJkYWlseSI+TW9zdCBSZWNlbnQgRGF5PC9vcHRpb24+DQogICAgICA8b3B0aW9uIHZhbHVlPSIzMGRheXMiPlBhc3QgMzAgRGF5czwvb3B0aW9uPg0KICAgICAgPC9zZWxlY3Q+IDwhLS08c3BhbiBjbGFzcz0ibWFya2V0Vm9sdW1lR3JhcGhzQnRuIj48YSBocmVmPSIjIj5NYXJrZXQgVm9sdW1lIEdyYXBoczwvYT48L3NwYW4+LS0+PC90ZD4NCgkgICAgPC90cj4NCjwvdGFibGU+DQo8ZGl2IGlkPSJlcXVpdGllcyI+DQogIDxkaXYgY2xhc3M9InNlY3Rpb25faGVhZGVyIj4NCiAgICA8aDU+RXF1aXRpZXMgTWFya2V0IDxzcGFuIGlkPSJlcXVpdGllc0xhYmVsIj5Wb2x1bWU8L3NwYW4+PC9oNT4NCiAgPC9kaXY+DQogPGRpdiBpZD0iZXF1aXRpZXNUYWIiPg0KIDwvZGl2Pg0KIDx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGNsYXNzPSJwcmludEJveFNtYWxsIj4NCiAgPHRyPg0KICAgIDx0ZD5EYXRhIGlzIHVwZGF0ZWQgZXZlcnkgMSBtaW51dGUuIDxzcGFuIGNsYXNzPSJzbWFsbEdyZWVuVGV4dCI+TGFzdCBVcGRhdGUgPHNwYW4gaWQ9ImVxdWl0aWVzVHMiPjExLzA0LzIwMTEgMTE6NDQ8L3NwYW4+PC9zcGFuPjwvdGQ+DQogICAgPHRkIGFsaWduPSJyaWdodCI+PHNwYW4gb25jbGljaz0icHJpbnRFcXVpdGllc0dyaWQodW5pdCk7Ij48YSBocmVmPSIjIj48aW1nIHNyYz0iL2ltYWdlcy9wcmludGVyMi5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgLz48L2E+PC9zcGFuPjwvdGQ+DQogIDwvdHI+DQo8L3RhYmxlPg0KPC9kaXY+DQo8dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBjbGFzcz0idGFibGVTZXR0aW5nc0hlYWRlciIgIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+DQogCSAgPHRyPg0KIAkgICAgPHRkIHN0eWxlPSJwb3NpdGlvbjogcmVsYXRpdmU7IHdpZHRoOiAxNTBweDsiPiZuYnNwOzwvdGQ+DQogCSAgICAgPHRkPjxicj48YSBocmVmPSIvVHJhZGVyLmFzcHg/aWQ9T3B0aW9uc1ZvbHVtZVN1bW1hcnkiPjxiPkZ1bGwgT3B0aW9ucyBNYXJrZXQgVm9sdW1lIFBhZ2U8L2I+PC9hPjxicj48L3RkPg0KIAkgIDwvdHI+PC90YWJsZT4NCiA8ZGl2IGNsYXNzPSJzZWN0aW9uX2hlYWRlcl9ibHVlIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPg0KICAgIDxoNT5PcHRpb25zIE1hcmtldCBWb2x1bWU8L2g1Pg0KICA8L2Rpdj4NCiAgPGRpdiBpZD0ib3B0aW9uc1RhYiIgIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+DQogIDwvZGl2Pg0KICA8dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBjbGFzcz0icHJpbnRCb3hTbWFsbCIgIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+DQogIDx0cj4NCiAgICA8dGQ+RGF0YSBpcyB1cGRhdGVkIGV2ZXJ5IDEgbWludXRlIGFuZCBtYXkgYmUgZGVsYXllZCBhdCBsZWFzdCAxMCBtaW51dGVzLiA8c3BhbiBjbGFzcz0ic21hbGxHcmVlblRleHQiPkxhc3QgVXBkYXRlIDxzcGFuIGlkPSJvcHRpb25zVHMiPjExLzA0LzIwMTEgMTE6NDQ8L3NwYW4+PC9zcGFuPjwvdGQ+DQogICAgPHRkIGFsaWduPSJyaWdodCI+PHNwYW4gb25jbGljaz0icHJpbnRPcHRpb25zR3JpZCgpOyI+PGEgaHJlZj0iIyI+PGltZyBzcmM9Ii9pbWFnZXMvcHJpbnRlcjIucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIC8+PC9hPjwvc3Bhbj48L3RkPg0KICA8L3RyPg0KPC90YWJsZT4NCg0KPC9kaXY+DQo8c2NyaXB0Pg0KDQoJdmFyIHVuaXQgPSAnc2hhcmVzJzsNCg0KCXZhciBkYXRhRGF0ZSA9IG5ldyBEYXRlKCk7DQoNCglmdW5jdGlvbiBnZXREb3dubG9hZCgpIHsNCgkJdmFyIGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VsZWN0Jyk7DQoJCWlmIChlLnZhbHVlID09ICcnKQ0KCQkJcmV0dXJuOw0KCQl2YXIgZmlsZW5hbWUgPSBlLnZhbHVlOw0KCQlpZiAodW5pdCAhPSAnc2hhcmVzJykNCgkJCWZpbGVuYW1lICs9IHVuaXQ7DQoJCWZpbGVuYW1lICs9ICcuY3N2JzsNCgkJdmFyIHVybCA9ICcvZHluYW1pYy9NYXJrZXRTdGF0cy8nICsgZmlsZW5hbWU7DQoJCXdpbmRvdy5vcGVuKHVybCk7DQogICAgfQ0KDQoJZnVuY3Rpb24gcHJpbnRFcXVpdGllc0dyaWQodmFsKSB7DQoNCiAgICAgICAgdmFyIHBvcHVwID0gd2luZG93Lm9wZW4oIi9zbmlwcGV0cy9tYXJrZXR2b2xwcmludC5odG1sP3R5cGU9IiArIHVuaXQgKyAiJmRhdGFEYXRlPSIgKyBlbmNvZGVVUklDb21wb25lbnQoJC5kYXRlcGlja2VyLmZvcm1hdERhdGUoJ21tL2RkL3l5JyxkYXRhRGF0ZSkpKTsNCiAgICB9DQoNCglmdW5jdGlvbiBwcmludE9wdGlvbnNHcmlkKCkgew0KDQogICAgICAgIHZhciBwb3B1cCA9IHdpbmRvdy5vcGVuKCIvc25pcHBldHMvbWFya2V0dm9sb3B0aW9uc3ByaW50Lmh0bWwiKTsNCiAgICB9DQoJDQoJZnVuY3Rpb24gdGFiNlN0b3AoKQ0KCXsNCgkJU3RvcE1hcmtldFZvbCgpOw0KCX0NCglmdW5jdGlvbiB0YWI2U3RhcnQoKQ0KCXsNCgkJR2V0TWFya2V0Vm9sKCk7DQoJfQ0KCQ0KCWZ1bmN0aW9uIFN0b3BNYXJrZXRWb2woKSB7DQoJCWNsZWFyVGltZW91dCh3aW5kb3cuSG9tZVBhZ2VUaW1lcnNbJ0RhaWx5Vm9sdW1lVGltZXInXSk7DQoJfQ0KDQoJZnVuY3Rpb24gc2V0VW5pdHModmFsKSB7DQoJCXZhciB0YWIxID0gJ3RhYnNoYXJlcyc7DQoJCXZhciB0YWIyID0gJ3RhYnRyYWRlcyc7DQoJCXZhciB0YWIzID0gJ3RhYmRvbGxhclZvbCc7DQoJCXZhciBlcXVpdGllc0xhYmVsID0gJ2VxdWl0aWVzTGFiZWwnOw0KCQl2YXIgZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhYjEpOw0KCQllLmNsYXNzTmFtZSA9ICd0YWJzSW50ZXJuYWwnOw0KCQllID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFiMik7DQoJCWUuY2xhc3NOYW1lID0gJ3RhYnNJbnRlcm5hbCc7DQoJCWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0YWIzKTsNCgkJZS5jbGFzc05hbWUgPSAndGFic0ludGVybmFsJzsNCgkJZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWInICsgdmFsKTsNCgkJZS5jbGFzc05hbWUgPSAndGFic0ludGVybmFsIHRhYnNJbnRlcm5hbENsaWNrZWQnOw0KCQllID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZXF1aXRpZXNMYWJlbCk7DQoJCWlmICh2YWwgPT0gJ3NoYXJlcycpDQoJCQllLmlubmVySFRNTCA9ICdWb2x1bWUnOw0KCQlpZiAodmFsID09ICd0cmFkZXMnKQ0KCQkJZS5pbm5lckhUTUwgPSAnVHJhZGVzJzsNCgkJaWYgKHZhbCA9PSAnZG9sbGFyVm9sJykNCgkJCWUuaW5uZXJIVE1MID0gJ0RvbGxhciBWb2x1bWUnOw0KICAgICAgdW5pdCA9IHZhbDsNCgkJU3RvcE1hcmtldFZvbCgpOw0KCQlHZXRNYXJrZXRWb2woKTsNCiAgICB9DQoNCglmdW5jdGlvbiBzZXREZWZhdWx0VW5pdHMoKSB7DQogICAgICAgIHNldENvb2tpZSgnTWFya2V0U2hhcmVEZWZhdWx0VW5pdHMnLHVuaXQsIDM2NSk7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gR2V0TWFya2V0Vm9sKCkgew0KDQogICAgICAgIHZhciBzOw0KICAgICAgICB2YXIgczI7DQoJCXZhciBtZHkgPSAkLmRhdGVwaWNrZXIuZm9ybWF0RGF0ZSgnbW0vZGQveXknLGRhdGFEYXRlKTsNCg0KICAgICAgICBzMiA9ICdlcXVpdGllc1RhYic7DQogICAgICAgIHZhciBlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoczIpOw0KICAgICAgICBpZiAoZSAhPSAgbnVsbCkgZS5pbm5lckhUTUwgPSAidXBkYXRpbmcuLi4uIjsNCgkJczIgPSAnb3B0aW9uc1RhYic7DQogICAgICAgIGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzMik7DQogICAgICAgIGlmIChlICE9ICBudWxsKSBlLmlubmVySFRNTCA9ICJ1cGRhdGluZy4uLi4iOw0KICAgICAgICBTZXJ2ZXIuQkxfTWFya2V0U2hhcmUuR2V0VXBkYXRlTWFya3VwKGNiX0dldFVwZGF0ZU1hcmt1cCwgJ0RFU0tUT1AnLCB1bml0LCBtZHkpOw0KCQlTZXJ2ZXIuQkxfTWFya2V0U2hhcmUuR2V0T3B0aW9uc1VwZGF0ZU1hcmt1cChjYl9HZXRPcHRpb25zVXBkYXRlTWFya3VwLCAnREVTS1RPUCcpOw0KDQogICAgICAgIHdpbmRvdy5Ib21lUGFnZVRpbWVyc1snRGFpbHlWb2x1bWVUaW1lciddID0gc2V0VGltZW91dCgnR2V0TWFya2V0Vm9sKCknLCAxMDAwKjYwKTsNCg0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGNiX0dldFVwZGF0ZU1hcmt1cChyLCBlKXsNCiAgICAgICAgaWYgKGUpIHJldHVybiBhbGVydChlLm1lc3NhZ2UpOw0KCQl2YXIgYSA9IHIuc3BsaXQoJ3wnKTsNCiAgICAgICAgdmFyIGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXF1aXRpZXNUYWInKTsNCiAgICAgICAgaWYgKGQgIT0gbnVsbCkNCiAgICAgICAgICAgIGQuaW5uZXJIVE1MID0gYVsxXTsNCgkJZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlcXVpdGllc1RzJyk7DQogICAgICAgIGlmIChkICE9IG51bGwpDQogICAgICAgICAgICBkLmlubmVySFRNTCA9IGFbMF07DQoNCiAgICB9DQoNCglmdW5jdGlvbiBjYl9HZXRPcHRpb25zVXBkYXRlTWFya3VwKHIsIGUpew0KICAgICAgICBpZiAoZSkgcmV0dXJuIGFsZXJ0KGUubWVzc2FnZSk7DQoJCXZhciBhID0gci5zcGxpdCgnfCcpOw0KICAgICAgICB2YXIgZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvcHRpb25zVGFiJyk7DQogICAgICAgIGlmIChkICE9IG51bGwpDQogICAgICAgICAgICBkLmlubmVySFRNTCA9IGFbMV07DQoJCWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb3B0aW9uc1RzJyk7DQogICAgICAgIGlmIChkICE9IG51bGwpDQogICAgICAgICAgICBkLmlubmVySFRNTCA9IGFbMF07DQoNCiAgICB9DQoNCgl2YXIgYXZhaWxhYmxlRGF0ZXMgPSBbXTsNCg0KZnVuY3Rpb24gaW5pdEF2YWlsYWJsZURhdGVzKCkgew0KCXZhciBkID0gJC5kYXRlcGlja2VyLmZvcm1hdERhdGUoJ21tL2RkL3l5JyxuZXcgRGF0ZSgpKTsNCglhdmFpbGFibGVEYXRlcy5wdXNoKGQpOw0KCXZhciB4ID0gU2VydmVyLkJMX01hcmtldFNoYXJlLkdldE1hcmtldFZvbHVtZURhdGVzKCk7DQoJdmFyIGk7DQoJdmFyIHh4Ow0KCWZvciAoaSA9IDA7IGkgPCB4Lmxlbmd0aDsgaSsrKQ0KCXsNCgkJeHggPSB4W2ldOw0KCQlhdmFpbGFibGVEYXRlcy5wdXNoKHh4LlZhbGlkRGF0ZSk7DQoJfQ0KfQ0KDQpmdW5jdGlvbiBhdmFpbGFibGUoZGF0ZSkgew0KICBtZHkgPSAkLmRhdGVwaWNrZXIuZm9ybWF0RGF0ZSgnbW0vZGQveXknLGRhdGUpOw0KICBpZiAoJC5pbkFycmF5KG1keSwgYXZhaWxhYmxlRGF0ZXMpID49IDApIHsNCiAgICByZXR1cm4gW3RydWUsIiIsIkNob29zZSJdOw0KICB9IGVsc2Ugew0KICAgIHJldHVybiBbZmFsc2UsIiIsIkludmFsaWQgRGF0ZSJdOw0KICB9DQp9DQoNCmZ1bmN0aW9uIG9uRGF0ZVNlbGVjdChkYXRlVGV4dCwgaW5zdCkNCnsNCglkYXRhRGF0ZSA9IG5ldyBEYXRlKGRhdGVUZXh0KTsNCglHZXRNYXJrZXRWb2woKTsNCn0NCmZ1bmN0aW9uIHNldERhdGVQaWNrZXIoKSB7DQogICQoJyNjaG9vc2VEYXRlJykuZGF0ZXBpY2tlcih7DQogIGFtcG06IHRydWUsDQogIHNob3dPbjogImJvdGgiLA0KICBidXR0b25JbWFnZTogIi9pbWFnZXMvY2FsZW5kYXJfMTZ4MTYuZ2lmIiwNCiAgYnV0dG9uSW1hZ2VPbmx5OiB0cnVlLA0KICBidXR0b25UZXh0OiAiQ2hvb3NlIGFub3RoZXIgZGF0ZSIsDQogIGJlZm9yZVNob3dEYXk6IGF2YWlsYWJsZSwNCiAgb25TZWxlY3Q6IG9uRGF0ZVNlbGVjdA0KICB9KTsNCn0NCg0KJChmdW5jdGlvbigpew0KICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjaG9vc2VEYXRlJykudmFsdWUgPSAkLmRhdGVwaWNrZXIuZm9ybWF0RGF0ZSgnbW0vZGQveXknLGRhdGFEYXRlKTsNCiAgICBzZXREYXRlUGlja2VyKCk7DQoJaW5pdEF2YWlsYWJsZURhdGVzKCk7DQoJdmFyIG15VW5pdCA9IGdldENvb2tpZSgnTWFya2V0U2hhcmVEZWZhdWx0VW5pdHMnKTsNCglpZiAobXlVbml0ID09IG51bGwgfHwgbXlVbml0ID09ICcnKQ0KCQlteVVuaXQgPSAnc2hhcmVzJzsNCgl3aW5kb3cuSG9tZVBhZ2VUaW1lcnM9IG5ldyBPYmplY3QoKTsNCgl3aW5kb3cuSG9tZVBhZ2VUaW1lcnMuRGFpbHlWb2x1bWVUaW1lciA9IG51bGw7DQoJc2V0VW5pdHMobXlVbml0KTsNCn0pOw0KDQo8L3NjcmlwdD4NCjwvZGl2Pgo8ZGl2IGNsYXNzPSJibG9jayIgaWQ9InRhYjRkaXYiIHN0eWxlPSJkaXNwbGF5OiBub25lOyB6LWluZGV4OiAxOyBvdmVyZmxvdzogYXV0bzsgaGVpZ2h0OiA0NzVweDsgd2lkdGg6IDcxNXB4OyBib3JkZXI6IDFweCBzb2xpZDsgKi9tYXJnaW4tdG9wOiA1cHg7Ij4gICAgPCEtLSBCZWdpbiBUb3BNYXRjaGVkLmh0bWwgLS0+DQogICAgPGRpdiBpZD0iZGl2VG9wTWF0Y2hlZCI+ICAgIA0KDQogPC9kaXY+DQoNCjxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQogICAgdmFyIGN1cnJlbnRWaWV3Ow0KDQogICAgZnVuY3Rpb24gc3dpdGNoVmlld1RvcE1hdGNoZWQodmFsKQ0KICAgIHsNCgkgICAgdmFyIGZyb207DQoJICAgIHZhciB0bzsNCg0KCSAgICBpZiAodmFsID09ICdhcycpDQoJICAgIHsNCgkJICAgIGZyb20gPSAnYWgnOw0KCQkgICAgdG8gPSAnYXMnOw0KCSAgICB9DQoJICAgIGVsc2UNCgkgICAgew0KCQkgICAgZnJvbSA9ICdhcyc7DQoJCSAgICB0byA9ICdhaCc7DQogICAgICAgIH0NCg0KICAgICAgICBjdXJyZW50VmlldyA9IHRvOw0KDQoJICAgIHZhciBlbG0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmcm9tICsgJ0dyaWQnKTsNCgkgICAgZWxtLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQoNCgkgICAgZWxtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodG8gKyAnR3JpZCcpOw0KCSAgICBlbG0uc3R5bGUuZGlzcGxheSA9ICdibG9jayc7DQoNCgkgICAgZWxtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZnJvbSArICdEb3QnKTsNCgkgICAgZWxtLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQoNCgkgICAgZWxtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodG8gKyAnRG90Jyk7DQoJICAgIGVsbS5zdHlsZS5kaXNwbGF5ID0gJyc7DQoNCgkgICAgZWxtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZnJvbSArICdCdXR0b24nKTsNCgkgICAgZWxtLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICd3aGl0ZSc7DQoNCgkgICAgZWxtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodG8gKyAnQnV0dG9uJyk7DQoJICAgIGVsbS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnI0VDRjNGOSc7DQogICB9DQoJDQogICAgZnVuY3Rpb24gdGFiNFN0b3AoKQ0KCXsNCgkJVG9wTWF0Y2hlZFN0b3AoKTsNCiAgICB9DQoNCglmdW5jdGlvbiB0YWI0U3RhcnQoKQ0KCXsNCgkJVG9wTWF0Y2hlZEluaXQoKTsNCiAgICB9DQoNCglmdW5jdGlvbiBHZXRUb3BNYXRjaGVkKCkgDQogICAgew0KICAgICAgICB2YXIgczsNCiAgICAgICAgdmFyIHMyOw0KICAgICAgICBzMiA9ICdkaXZUb3BNYXRjaGVkJzsNCg0KICAgICAgICB2YXIgZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHMyKTsNCiAgICAgICAgaWYgKGUgIT0gbnVsbCkgZS5pbm5lckhUTUwgPSAidXBkYXRpbmcuLi4uIjsNCg0KICAgICAgICBTZXJ2ZXIuQkxfTmFzZGFxVG9wTWF0Y2hlZC5HZXRUb3BNYXRjaGVkTWFya3VwKGNiX0dldFRvcE1hdGNoZWQsICdUb3BNYXRjaGVkLmh0bWwnKTsNCiAgICAgICAgVG9wTWF0Y2hlZFN0YXJ0KCk7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gY2JfR2V0VG9wTWF0Y2hlZChyLCBlKQ0KICAgIHsNCiAgICAgICAgaWYgKGUpIHJldHVybiBhbGVydChlLm1lc3NhZ2UpOw0KICAgICAgICB2YXIgZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkaXZUb3BNYXRjaGVkJyk7DQogICAgICAgIGlmIChkICE9IG51bGwpDQogICAgICAgIHsgICBkLmlubmVySFRNTCA9IHI7DQoJCQlzd2l0Y2hWaWV3VG9wTWF0Y2hlZChjdXJyZW50Vmlldyk7DQoJCX0NCiAgICB9DQoNCg0KICAgIHZhciB0b3BNYXRjaGVkSW5pdERvbmUgPSBmYWxzZTsNCg0KCWZ1bmN0aW9uIFRvcE1hdGNoZWRTdGFydCgpDQoJew0KCSAgIHdpbmRvdy5Ib21lUGFnZVRpbWVyc1sndG9wTWF0Y2hlZFRpbWVyJ10gPSBzZXRUaW1lb3V0KCdHZXRUb3BNYXRjaGVkKCknLCAxMDAwKjYwKTsNCgl9DQoJDQoJZnVuY3Rpb24gVG9wTWF0Y2hlZEluaXQoKQ0KCXsJCQ0KCQlpZiAoIXRvcE1hdGNoZWRJbml0RG9uZSkNCgkJeyAgIGN1cnJlbnRWaWV3ID0gJ2FzJzsJCQkNCgkJCXRvcE1hdGNoZWRJbml0RG9uZSA9IHRydWU7DQoJCX0NCgkJR2V0VG9wTWF0Y2hlZCgpOw0KICAgIH0NCg0KCWZ1bmN0aW9uIFRvcE1hdGNoZWRTdG9wKCkNCgl7DQoJCWlmICh3aW5kb3cuSG9tZVBhZ2VUaW1lcnNbJ3RvcE1hdGNoZWRUaW1lciddKQ0KCQkJY2xlYXJUaW1lb3V0KHdpbmRvdy5Ib21lUGFnZVRpbWVyc1sndG9wTWF0Y2hlZFRpbWVyJ10pOw0KCX0NCjwvc2NyaXB0Pg0KDQoNCjx0YWJsZSBzdHlsZT0id2lkdGg6NTQwcHg7cGFkZGluZy10b3A6MTVweDtwYWRkaW5nLWxlZnQ6NXB4OyI+DQogICAgPHRyPjx0ZCBjbGFzcz0iZm9vdG5vdGUiIHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQ7cGFkZGluZy10b3A6OHB4O2ZvbnQtc2l6ZTo5cHg7Zm9udC13ZWlnaHQ6Ym9sZDsiPg0KICAgICAgICAgICAgRGF0YSBpcyB1cGRhdGVkIGV2ZXJ5IG1pbnV0ZS4NCiAgICAgICAgICAgIDxwIHN0eWxlPSJwYWRkaW5nLXRvcDo3cHg7Ij5SZWZlciB0byA8YSBocmVmPSJodHRwOi8vd3d3Lm5hc2RhcXRyYWRlci5jb20vY29udGVudC9NYXJrZXRTdGF0aXN0aWNzL01hcmtldFNoYXJlL3Rlcm1zLnBkZiI+TkFTREFRIE1hcmtldCBTaGFyZSBUZXJtaW5vbG9neTwvYT4gZm9yIG1vcmUgaW5mb3JtYXRpb24gcmVnYXJkaW5nIE1hdGNoZWQgSGFuZGxlZCB2b2x1bWUuPC9wPg0KICAgICAgICA8L3RkPg0KICAgIDwvdHI+DQo8L3RhYmxlPg0KPCEtLSBFbmQgVG9wTWF0Y2hlZC5odG1sIC0tPg0KPC9kaXY+CjxkaXYgY2xhc3M9ImJsb2NrIiBpZD0idGFiMmRpdiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7IHotaW5kZXg6IDE7IG92ZXJmbG93OiBhdXRvOyBoZWlnaHQ6IDMyNXB4OyB3aWR0aDogNzE1cHg7IGJvcmRlcjogMXB4IHNvbGlkOyAqLyBtYXJnaW4tdG9wOiA1cHg7Ij48IS0tIEJlZ2luIEJYTWFya2V0U2hhcmUuaHRtbCAtLT4NCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii9zbmlwcGV0cy9qcy9CWE1hcmtldFZvbHVtZS5qcyIgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPjwvc2NyaXB0Pg0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iL2pzL3ZhbGlkYXRlLmpzIiBsYW5ndWFnZT0iamF2YXNjcmlwdCI+PC9zY3JpcHQ+DQoNCjxkaXYgc3R5bGU9InBhZGRpbmctbGVmdDo1cHg7cGFkZGluZy1yaWdodDo1cHg7Ij4NCgk8aDIgc3R5bGU9ImZvbnQtc2l6ZToxMnB4OyI+DQogICAgICAgIDx0YWJsZT4NCgkJICAgIDx0cj48dGQgc3R5bGU9IndpZHRoOjMxNXB4O3doaXRlLXNwYWNlOm5vd3JhcDsiPk5BU0RBUSBCWCAtIFRvcCBMaXN0IGJ5IE1hdGNoZWQgVm9sdW1lPC90ZD4NCgkJCSAgICA8dGQgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O3dpZHRoOjM5MHB4O3RleHQtYWxpZ246cmlnaHQiPjxkaXYgaWQ9ImFzb2YiPjwvZGl2PjwvdGQ+DQoJCSAgICA8L3RyPg0KCQk8L3RhYmxlPg0KCTwvaDI+DQoNCiAgICA8ZGl2Pg0KICAgICAgICA8dGFibGU+DQogICAgICAgICAgICA8dHI+PHRkPjxkaXYgY2xhc3M9ImdlblRhYmxlSG9tZSI+DQogICAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgc3R5bGU9IndpZHRoOjE3MHB4O2ZvbnQtc2l6ZToxMXB4OyI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPjx0aCBjb2xzcGFuPSIyIj5UYXBlIEE8L3RoPjwvdHI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPjx0aCBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0O2ZvbnQtd2VpZ2h0OmJvbGQ7Ij5TeW1ib2w8L3RoPiAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDtmb250LXdlaWdodDpib2xkOyI+TWF0Y2hlZCBTaGFyZXM8L3RoPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPjx0ZD48ZGl2IGlkPSJ0YXBlQXN5bWJvbDEiIHN0eWxlPSJwYWRkaW5nLWxlZnQ6NnB4OyI+PC9kaXY+PC90ZD4NCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0Ij48ZGl2IGlkPSJ0YXBlQXNoYXJlczEiPjwvZGl2PjwvdGQ+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+PHRkPjxkaXYgaWQ9InRhcGVBc3ltYm9sMiIgc3R5bGU9InBhZGRpbmctbGVmdDo2cHg7Ij48L2Rpdj48L3RkPg0KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxkaXYgaWQ9InRhcGVBc2hhcmVzMiI+PC9kaXY+PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+PHRkPjxkaXYgaWQ9InRhcGVBc3ltYm9sMyIgc3R5bGU9InBhZGRpbmctbGVmdDo2cHg7Ij48L2Rpdj48L3RkPg0KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxkaXYgaWQ9InRhcGVBc2hhcmVzMyI+PC9kaXY+PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+PHRkPjxkaXYgaWQ9InRhcGVBc3ltYm9sNCIgc3R5bGU9InBhZGRpbmctbGVmdDo2cHg7Ij48L2Rpdj48L3RkPg0KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxkaXYgaWQ9InRhcGVBc2hhcmVzNCI+PC9kaXY+PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+PHRkPjxkaXYgaWQ9InRhcGVBc3ltYm9sNSIgc3R5bGU9InBhZGRpbmctbGVmdDo2cHg7Ij48L2Rpdj48L3RkPg0KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxkaXYgaWQ9InRhcGVBc2hhcmVzNSI+PC9kaXY+PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4NCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmctbGVmdDoyMHB4OyI+DQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImdlblRhYmxlSG9tZSI+DQogICAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgc3R5bGU9IndpZHRoOjE3MHB4O2ZvbnQtc2l6ZToxMXB4OyI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPjx0aCBjb2xzcGFuPSIyIj5UYXBlIEI8L3RoPjwvdHI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPjx0aCBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0O2ZvbnQtd2VpZ2h0OmJvbGQ7Ij5TeW1ib2w8L3RoPiAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDtmb250LXdlaWdodDpib2xkOyI+TWF0Y2hlZCBTaGFyZXM8L3RoPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPjx0ZD48ZGl2IGlkPSJ0YXBlQnN5bWJvbDEiIHN0eWxlPSJwYWRkaW5nLWxlZnQ6NnB4OyI+PC9kaXY+PC90ZD4NCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0Ij48ZGl2IGlkPSJ0YXBlQnNoYXJlczEiPjwvZGl2PjwvdGQ+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+PHRkPjxkaXYgaWQ9InRhcGVCc3ltYm9sMiIgc3R5bGU9InBhZGRpbmctbGVmdDo2cHg7Ij48L2Rpdj48L3RkPg0KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxkaXYgaWQ9InRhcGVCc2hhcmVzMiI+PC9kaXY+PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+PHRkPjxkaXYgaWQ9InRhcGVCc3ltYm9sMyIgc3R5bGU9InBhZGRpbmctbGVmdDo2cHg7Ij48L2Rpdj48L3RkPg0KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxkaXYgaWQ9InRhcGVCc2hhcmVzMyI+PC9kaXY+PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+PHRkPjxkaXYgaWQ9InRhcGVCc3ltYm9sNCIgc3R5bGU9InBhZGRpbmctbGVmdDo2cHg7Ij48L2Rpdj48L3RkPg0KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxkaXYgaWQ9InRhcGVCc2hhcmVzNCI+PC9kaXY+PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+PHRkPjxkaXYgaWQ9InRhcGVCc3ltYm9sNSIgc3R5bGU9InBhZGRpbmctbGVmdDo2cHg7Ij48L2Rpdj48L3RkPg0KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxkaXYgaWQ9InRhcGVCc2hhcmVzNSI+PC9kaXY+PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4NCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmctbGVmdDoyMHB4OyI+DQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImdlblRhYmxlSG9tZSI+DQogICAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgc3R5bGU9IndpZHRoOjE3MHB4O2ZvbnQtc2l6ZToxMXB4OyI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPjx0aCBjb2xzcGFuPSIyIj5UYXBlIEM8L3RoPjwvdHI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPjx0aCBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0O2ZvbnQtd2VpZ2h0OmJvbGQ7Ij5TeW1ib2w8L3RoPiAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDtmb250LXdlaWdodDpib2xkOyI+TWF0Y2hlZCBTaGFyZXM8L3RoPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPjx0ZD48ZGl2IGlkPSJ0YXBlQ3N5bWJvbDEiIHN0eWxlPSJwYWRkaW5nLWxlZnQ6NnB4OyI+PC9kaXY+PC90ZD4NCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0Ij48ZGl2IGlkPSJ0YXBlQ3NoYXJlczEiPjwvZGl2PjwvdGQ+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+PHRkPjxkaXYgaWQ9InRhcGVDc3ltYm9sMiIgc3R5bGU9InBhZGRpbmctbGVmdDo2cHg7Ij48L2Rpdj48L3RkPg0KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxkaXYgaWQ9InRhcGVDc2hhcmVzMiI+PC9kaXY+PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+PHRkPjxkaXYgaWQ9InRhcGVDc3ltYm9sMyIgc3R5bGU9InBhZGRpbmctbGVmdDo2cHg7Ij48L2Rpdj48L3RkPg0KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxkaXYgaWQ9InRhcGVDc2hhcmVzMyI+PC9kaXY+PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+PHRkPjxkaXYgaWQ9InRhcGVDc3ltYm9sNCIgc3R5bGU9InBhZGRpbmctbGVmdDo2cHg7Ij48L2Rpdj48L3RkPg0KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxkaXYgaWQ9InRhcGVDc2hhcmVzNCI+PC9kaXY+PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+PHRkPjxkaXYgaWQ9InRhcGVDc3ltYm9sNSIgc3R5bGU9InBhZGRpbmctbGVmdDo2cHg7Ij48L2Rpdj48L3RkPg0KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxkaXYgaWQ9InRhcGVDc2hhcmVzNSI+PC9kaXY+PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4NCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgIDwvdHI+DQogICAgICAgIDwvdGFibGU+DQogICAgPC9kaXY+DQo8L2Rpdj4NCg0KPGRpdiBjbGFzcz0iZm9vdG5vdGUiIHN0eWxlPSJwYWRkaW5nLXRvcDoyMHB4O3BhZGRpbmctbGVmdDoxMHB4O2ZvbnQtc2l6ZTo5cHg7Zm9udC13ZWlnaHQ6Ym9sZDsiPlNvdXJjZTombmJzcDtUaGUgTkFTREFRIEJYIE1hcmtldDwvZGl2Pg0KPHA+Jm5ic3A7PC9wPg0KPCEtLSBFbmQgQlhNYXJrZXRTaGFyZS5odG1sIC0tPjwvZGl2Pgo8ZGl2IGNsYXNzPSJibG9jayIgaWQ9InRhYjdkaXYiIHN0eWxlPSJkaXNwbGF5OiBub25lOyB6LWluZGV4OiAxOyBvdmVyZmxvdzogYXV0bzsgaGVpZ2h0OiAzMjVweDsgd2lkdGg6IDcxNXB4OyBib3JkZXI6IDFweCBzb2xpZDsgKi8gbWFyZ2luLXRvcDogNXB4OyI+PCEtLSBCZWdpbiBQU1hNYXJrZXRTaGFyZS5odG1sIC0tPg0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4NCiAgICB2YXIgdG9wTWF0Y2hlZE1hcmtldCA9ICdQU1gnOw0KPC9zY3JpcHQ+DQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIvc25pcHBldHMvanMvUFNYTWFya2V0Vm9sdW1lLmpzIiBsYW5ndWFnZT0iamF2YXNjcmlwdCI+PC9zY3JpcHQ+DQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIvanMvdmFsaWRhdGUuanMiIGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij48L3NjcmlwdD4NCg0KPGRpdiBzdHlsZT0icGFkZGluZy1sZWZ0OjVweDtwYWRkaW5nLXJpZ2h0OjVweDsiPg0KCTxoMiBzdHlsZT0iZm9udC1zaXplOjEycHg7Ij4NCiAgICAgICAgPHRhYmxlPg0KCQkgICAgPHRyPjx0ZCBzdHlsZT0id2lkdGg6MzE1cHg7d2hpdGUtc3BhY2U6bm93cmFwOyI+TkFTREFRIFBTWCAtIFRvcCBMaXN0IGJ5IE1hdGNoZWQgVm9sdW1lPC90ZD4NCgkJCSAgICA8dGQgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O3dpZHRoOjM5MHB4O3RleHQtYWxpZ246cmlnaHQiPjxkaXYgaWQ9IlBTWGFzb2YiPjwvZGl2PjwvdGQ+DQoJCSAgICA8L3RyPg0KCQk8L3RhYmxlPg0KCTwvaDI+DQo8ZGl2Pg0KPHRhYmxlPg0KICA8dHI+PHRkPg0KICAgICAgICA8ZGl2IGNsYXNzPSJnZW5UYWJsZUhvbWUiPg0KICAgICAgICAgICAgPHRhYmxlIHN0eWxlPSJ3aWR0aDoxNzBweDtmb250LXNpemU6MTFweDsiPg0KICAgICAgICAgICAgICAgICAgICA8dHI+PHRoIGNvbHNwYW49IjIiPlRhcGUgQTwvdGg+PC90cj4NCiAgICAgICAgICAgICAgICAgICAgPHRyPjx0aCBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0O2ZvbnQtd2VpZ2h0OmJvbGQ7Ij5TeW1ib2w8L3RoPiAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7Zm9udC13ZWlnaHQ6Ym9sZDsiPk1hdGNoZWQgU2hhcmVzPC90aD4NCiAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgPHRyPgkNCgkgICAgICAgICAgICAgICAgICAgIDx0ZD48ZGl2IGlkPSJQU1h0YXBlQXN5bWJvbDEiIHN0eWxlPSJwYWRkaW5nLWxlZnQ6NnB4OyI+PC9kaXY+PC90ZD4NCgkgICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDsiPjxkaXYgaWQ9IlBTWHRhcGVBc2hhcmVzMSI+PC9kaXY+PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgPHRyPgkNCgkgICAgICAgICAgICAgICAgICAgIDx0ZD48ZGl2IGlkPSJQU1h0YXBlQXN5bWJvbDIiIHN0eWxlPSJwYWRkaW5nLWxlZnQ6NnB4OyI+PC9kaXY+PC90ZD4NCgkgICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDsiPjxkaXYgaWQ9IlBTWHRhcGVBc2hhcmVzMiI+PC9kaXY+PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgPC90cj4JDQogICAgICAgICAgICAgICAgICAgIDx0cj4JDQoJICAgICAgICAgICAgICAgICAgICA8dGQ+PGRpdiBpZD0iUFNYdGFwZUFzeW1ib2wzIiBzdHlsZT0icGFkZGluZy1sZWZ0OjZweDsiPjwvZGl2PjwvdGQ+DQoJICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7Ij48ZGl2IGlkPSJQU1h0YXBlQXNoYXJlczMiPjwvZGl2PjwvdGQ+DQogICAgICAgICAgICAgICAgICAgIDwvdHI+CQ0KICAgICAgICAgICAgICAgICAgICA8dHI+CQ0KCSAgICAgICAgICAgICAgICAgICAgPHRkPjxkaXYgaWQ9IlBTWHRhcGVBc3ltYm9sNCIgc3R5bGU9InBhZGRpbmctbGVmdDo2cHg7Ij48L2Rpdj48L3RkPg0KCSAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0OyI+PGRpdiBpZD0iUFNYdGFwZUFzaGFyZXM0IiA+PC9kaXY+PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgPC90cj4JDQogICAgICAgICAgICAgICAgICAgIDx0cj4JDQoJICAgICAgICAgICAgICAgICAgICA8dGQ+PGRpdiBpZD0iUFNYdGFwZUFzeW1ib2w1IiBzdHlsZT0icGFkZGluZy1sZWZ0OjZweDsiPjwvZGl2PjwvdGQ+DQoJICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7Ij48ZGl2IGlkPSJQU1h0YXBlQXNoYXJlczUiPjwvZGl2PjwvdGQ+DQogICAgICAgICAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICA8L3RhYmxlPg0KICAgICAgICA8L2Rpdj4NCiAgICAgICA8L3RkPg0KICAgICAgIDx0ZCBzdHlsZT0icGFkZGluZy1sZWZ0OjIwcHg7Ij4NCiAgICAgICAgPGRpdiBjbGFzcz0iZ2VuVGFibGVIb21lIj4NCiAgICAgICAgICAgIDx0YWJsZSBzdHlsZT0id2lkdGg6MTcwcHg7Zm9udC1zaXplOjExcHg7Ij4NCiAgICAgICAgICAgICAgICAgICAgPHRyPjx0aCBjb2xzcGFuPSIyIj5UYXBlIEI8L3RoPjwvdHI+DQogICAgICAgICAgICAgICAgICAgIDx0cj48dGggc3R5bGU9InRleHQtYWxpZ246bGVmdDtmb250LXdlaWdodDpib2xkOyI+U3ltYm9sPC90aD4gICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0O2ZvbnQtd2VpZ2h0OmJvbGQ7Ij5NYXRjaGVkIFNoYXJlczwvdGg+DQogICAgICAgICAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICAgICAgICAgIDx0cj4JDQoJICAgICAgICAgICAgICAgICAgICA8dGQ+PGRpdiBpZD0iUFNYdGFwZUJzeW1ib2wxIiBzdHlsZT0icGFkZGluZy1sZWZ0OjZweDsiPjwvZGl2PjwvdGQ+DQoJICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7Ij48ZGl2IGlkPSJQU1h0YXBlQnNoYXJlczEiPjwvZGl2PjwvdGQ+DQogICAgICAgICAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICAgICAgICAgIDx0cj4JDQoJICAgICAgICAgICAgICAgICAgICA8dGQ+PGRpdiBpZD0iUFNYdGFwZUJzeW1ib2wyIiBzdHlsZT0icGFkZGluZy1sZWZ0OjZweDsiPjwvZGl2PjwvdGQ+DQoJICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7Ij48ZGl2IGlkPSJQU1h0YXBlQnNoYXJlczIiPjwvZGl2PjwvdGQ+DQogICAgICAgICAgICAgICAgICAgIDwvdHI+CQ0KICAgICAgICAgICAgICAgICAgICA8dHI+CQ0KCSAgICAgICAgICAgICAgICAgICAgPHRkPjxkaXYgaWQ9IlBTWHRhcGVCc3ltYm9sMyIgc3R5bGU9InBhZGRpbmctbGVmdDo2cHg7Ij48L2Rpdj48L3RkPg0KCSAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0OyI+PGRpdiBpZD0iUFNYdGFwZUJzaGFyZXMzIj48L2Rpdj48L3RkPg0KICAgICAgICAgICAgICAgICAgICA8L3RyPgkNCiAgICAgICAgICAgICAgICAgICAgPHRyPgkNCgkgICAgICAgICAgICAgICAgICAgIDx0ZD48ZGl2IGlkPSJQU1h0YXBlQnN5bWJvbDQiIHN0eWxlPSJwYWRkaW5nLWxlZnQ6NnB4OyI+PC9kaXY+PC90ZD4NCgkgICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDsiPjxkaXYgaWQ9IlBTWHRhcGVCc2hhcmVzNCI+PC9kaXY+PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgPC90cj4JDQogICAgICAgICAgICAgICAgICAgIDx0cj4JDQoJICAgICAgICAgICAgICAgICAgICA8dGQ+PGRpdiBpZD0iUFNYdGFwZUJzeW1ib2w1IiBzdHlsZT0icGFkZGluZy1sZWZ0OjZweDsiPjwvZGl2PjwvdGQ+DQoJICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7Ij48ZGl2IGlkPSJQU1h0YXBlQnNoYXJlczUiPjwvZGl2PjwvdGQ+DQogICAgICAgICAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICA8L3RhYmxlPg0KICAgICAgICA8L2Rpdj4NCiAgICAgICA8L3RkPg0KICAgICAgIDx0ZCBzdHlsZT0icGFkZGluZy1sZWZ0OjIwcHg7Ij4NCiAgICAgICAgPGRpdiBjbGFzcz0iZ2VuVGFibGVIb21lIj4NCiAgICAgICAgICAgIDx0YWJsZSBzdHlsZT0id2lkdGg6MTcwcHg7Zm9udC1zaXplOjExcHg7Ij4NCiAgICAgICAgICAgICAgICAgICAgPHRyPjx0aCBjb2xzcGFuPSIyIj5UYXBlIEM8L3RoPjwvdHI+DQogICAgICAgICAgICAgICAgICAgIDx0cj48dGggc3R5bGU9InRleHQtYWxpZ246bGVmdDtmb250LXdlaWdodDpib2xkOyI+U3ltYm9sPC90aD4gICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0O2ZvbnQtd2VpZ2h0OmJvbGQ7Ij5NYXRjaGVkIFNoYXJlczwvdGg+DQogICAgICAgICAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICAgICAgICAgIDx0cj4JDQoJICAgICAgICAgICAgICAgICAgICA8dGQ+PGRpdiBpZD0iUFNYdGFwZUNzeW1ib2wxIiBzdHlsZT0icGFkZGluZy1sZWZ0OjZweDsiPjwvZGl2PjwvdGQ+DQoJICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7Ij48ZGl2IGlkPSJQU1h0YXBlQ3NoYXJlczEiPjwvZGl2PjwvdGQ+DQogICAgICAgICAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICAgICAgICAgIDx0cj4JDQoJICAgICAgICAgICAgICAgICAgICA8dGQ+PGRpdiBpZD0iUFNYdGFwZUNzeW1ib2wyIiBzdHlsZT0icGFkZGluZy1sZWZ0OjZweDsiPjwvZGl2PjwvdGQ+DQoJICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7Ij48ZGl2IGlkPSJQU1h0YXBlQ3NoYXJlczIiPjwvZGl2PjwvdGQ+DQogICAgICAgICAgICAgICAgICAgIDwvdHI+CQ0KICAgICAgICAgICAgICAgICAgICA8dHI+CQ0KCSAgICAgICAgICAgICAgICAgICAgPHRkPjxkaXYgaWQ9IlBTWHRhcGVDc3ltYm9sMyIgc3R5bGU9InBhZGRpbmctbGVmdDo2cHg7Ij48L2Rpdj48L3RkPg0KCSAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0OyI+PGRpdiBpZD0iUFNYdGFwZUNzaGFyZXMzIj48L2Rpdj48L3RkPg0KICAgICAgICAgICAgICAgICAgICA8L3RyPgkNCiAgICAgICAgICAgICAgICAgICAgPHRyPgkNCgkgICAgICAgICAgICAgICAgICAgIDx0ZD48ZGl2IGlkPSJQU1h0YXBlQ3N5bWJvbDQiIHN0eWxlPSJwYWRkaW5nLWxlZnQ6NnB4OyI+PC9kaXY+PC90ZD4NCgkgICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDsiPjxkaXYgaWQ9IlBTWHRhcGVDc2hhcmVzNCI+PC9kaXY+PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgPC90cj4JDQogICAgICAgICAgICAgICAgICAgIDx0cj4JDQoJICAgICAgICAgICAgICAgICAgICA8dGQ+PGRpdiBpZD0iUFNYdGFwZUNzeW1ib2w1IiBzdHlsZT0icGFkZGluZy1sZWZ0OjZweDsiPjwvZGl2PjwvdGQ+DQoJICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7Ij48ZGl2IGlkPSJQU1h0YXBlQ3NoYXJlczUiPjwvZGl2PjwvdGQ+DQogICAgICAgICAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICA8L3RhYmxlPg0KICAgICAgICA8L2Rpdj4NCiAgICA8L3RkPg0KICAgIDwvdHI+DQo8L3RhYmxlPg0KPC9kaXY+DQo8L2Rpdj4NCg0KPGRpdiBjbGFzcz0iZm9vdG5vdGUiIHN0eWxlPSJwYWRkaW5nLXRvcDoyMHB4O3BhZGRpbmctbGVmdDoxMHB4O2ZvbnQtc2l6ZTo5cHg7Zm9udC13ZWlnaHQ6Ym9sZDsiPlNvdXJjZTombmJzcDtUaGUgTkFTREFRIFBTWCBNYXJrZXQ8L2Rpdj4NCjxwPiZuYnNwOzwvcD4NCjwhLS0gRW5kIFBTWE1hcmtldFNoYXJlLmh0bWwgLS0+PC9kaXY+CjxkaXYgY2xhc3M9ImJsb2NrIiBpZD0idGFiM2RpdiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7IHotaW5kZXg6IDE7IG92ZXJmbG93OiBhdXRvOyBoZWlnaHQ6IDQ1MHB4OyB3aWR0aDogNzE1cHg7IGJvcmRlcjogMXB4IHNvbGlkOyAqLyBtYXJnaW4tdG9wOiA1cHg7Ij48IS0tIEJlZ2luIFRvcE5PQk9FcXVpdHlPcHRpb25zLmh0bWwgLS0+DQo8ZGl2IHN0eWxlPSJwYWRkaW5nLWxlZnQ6NXB4O3BhZGRpbmctcmlnaHQ6NXB4OyI+DQo8ZGl2IGlkPSdkaXZCWFRvcDEnPg0KICAgIDxoMiBzdHlsZT0iZm9udC1zaXplOjEycHg7Ij4NCiAgICAgICAgPHRhYmxlPg0KCQkgICAgPHRyPjx0ZCBzdHlsZT0id2lkdGg6MzE1cHg7d2hpdGUtc3BhY2U6bm93cmFwOyI+DQogICAgICAgICAgICAgICAgICBUb3RhbCBCWCBPcHRpb25zIFZvbHVtZTombmJzcDs8c3BhbiBzdHlsZT0iZm9udC1zaXplOjEycHg7Ij42MiwwNTI8L3NwYW4+DQogICAgICAgICAgICAgICAgPC90ZD4NCgkJCSAgICA8dGQgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O3dpZHRoOjM5MHB4O3RleHQtYWxpZ246cmlnaHQiPg0KICAgICAgICAgICAgICAgICAgIExhc3QgdXBkYXRlZCAwOC8wMS8yMDE5IDE4OjAyDQogICAgICAgICAgICAgICAgPC90ZD4NCgkJICAgIDwvdHI+DQoJCTwvdGFibGU+DQoJPC9oMj4NCiAgICA8cD4mbmJzcDs8L3A+DQo8L3RyPg0KPGRpdiBjbGFzcz0iZ2VuVGFibGVIb21lIj4NCiAgICA8dGFibGUgc3R5bGU9IndpZHRoOjU0MHB4O2ZvbnQtc2l6ZToxMXB4OyI+DQogICAgICAgIDx0cj48dGggY29sc3Bhbj0iNCI+VG9wIDEwIEVxdWl0aWVzIE9wdGlvbnM8L3RoPjwvdHI+DQogICAgICAgIDx0cj48dGg+UmFuazwvdGg+DQoJICAgICAgICA8dGg+U3ltYm9sPC90aD4NCgkgICAgICAgIDx0aD5OYW1lPC90aD4NCgkgICAgICAgIDx0aCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDsiPlZvbHVtZTwvdGg+DQogICAgICAgIDwvdHI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciA+DQoJICAgICAgICA8dGQ+MTwvdGQ+DQoJICAgICAgICA8dGQ+TURSPC90ZD4NCgkgICAgICAgIDx0ZD5NQ0RFUk1PVFQgSU5UIFBBTkFNQTwvdGQ+DQoJICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7Ij40LDkxOTwvdGQ+DQogICAgICAgIDwvdHI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0nZ2VuVGFibGVhbHQnID4NCgkgICAgICAgIDx0ZD4yPC90ZD4NCgkgICAgICAgIDx0ZD5GWEk8L3RkPg0KCSAgICAgICAgPHRkPklTSEFSRVMgQ0hJTkE8L3RkPg0KCSAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0OyI+MiwyOTE8L3RkPg0KICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgPg0KCSAgICAgICAgPHRkPjM8L3RkPg0KCSAgICAgICAgPHRkPkJZTkQ8L3RkPg0KCSAgICAgICAgPHRkPkJFWU9ORCBNRUFULCBJTkMuPC90ZD4NCgkgICAgICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDsiPjEsNzI5PC90ZD4NCiAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSdnZW5UYWJsZWFsdCcgPg0KCSAgICAgICAgPHRkPjQ8L3RkPg0KCSAgICAgICAgPHRkPlNQWTwvdGQ+DQoJICAgICAgICA8dGQ+U1BEUiBTJlAgNTAwIEVURiBUUlVTVDwvdGQ+DQoJICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7Ij4xLDU4MDwvdGQ+DQogICAgICAgIDwvdHI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciA+DQoJICAgICAgICA8dGQ+NTwvdGQ+DQoJICAgICAgICA8dGQ+QVNIUjwvdGQ+DQoJICAgICAgICA8dGQ+WFRSQUNLRVJTIEhBUlZFU1QgQ1M8L3RkPg0KCSAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0OyI+MSw1MDM8L3RkPg0KICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9J2dlblRhYmxlYWx0JyA+DQoJICAgICAgICA8dGQ+NjwvdGQ+DQoJICAgICAgICA8dGQ+WExJPC90ZD4NCgkgICAgICAgIDx0ZD5JTkRVU1RSSUFMIFNQRFI8L3RkPg0KCSAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0OyI+MSwyOTA8L3RkPg0KICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgPg0KCSAgICAgICAgPHRkPjc8L3RkPg0KCSAgICAgICAgPHRkPkVFTTwvdGQ+DQoJICAgICAgICA8dGQ+SVNIQVJFUyBNU0NJIEVNRVJHSU5HIE1BUktFVFMgRVRGPC90ZD4NCgkgICAgICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDsiPjEsMTYzPC90ZD4NCiAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSdnZW5UYWJsZWFsdCcgPg0KCSAgICAgICAgPHRkPjg8L3RkPg0KCSAgICAgICAgPHRkPkdFPC90ZD4NCgkgICAgICAgIDx0ZD5HRU4gRUxFQ1RSSUMgQ088L3RkPg0KCSAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0OyI+MSwxMjE8L3RkPg0KICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgPg0KCSAgICAgICAgPHRkPjk8L3RkPg0KCSAgICAgICAgPHRkPlNOQVA8L3RkPg0KCSAgICAgICAgPHRkPlNOQVAgSW5jLjwvdGQ+DQoJICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7Ij4xLDAxNjwvdGQ+DQogICAgICAgIDwvdHI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0nZ2VuVGFibGVhbHQnID4NCgkgICAgICAgIDx0ZD4xMDwvdGQ+DQoJICAgICAgICA8dGQ+QkFCQTwvdGQ+DQoJICAgICAgICA8dGQ+QUxJQkFCQSBHUk9VUCBITCBMVEQ8L3RkPg0KCSAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0OyI+OTczPC90ZD4NCiAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICA8L3RhYmxlPg0KPC9kaXY+DQoNCjwvZGl2Pg0KDQo8dGFibGUgc3R5bGU9IndpZHRoOjU0MHB4OyI+DQogICAgPHRyPjx0ZCBjbGFzcz0iZm9vdG5vdGUiIHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQ7cGFkZGluZy10b3A6OHB4O2ZvbnQtc2l6ZTo5cHg7Zm9udC13ZWlnaHQ6Ym9sZDsiPg0KICAgICAgICAgICAgU291cmNlOiZuYnNwO05BU0RBUSBCWCBPcHRpb25zIE1hcmtldC4gDQogICAgICAgIDwvdGQ+DQogICAgICAgIDx0ZCBjbGFzcz0iZm9vdG5vdGUiIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0O3BhZGRpbmctdG9wOjhweDtmb250LXNpemU6OXB4O2ZvbnQtd2VpZ2h0OmJvbGQ7Ij4NCiAgICAgICAgICAgRGF0YSBpcyB1cGRhdGVkIGV2ZXJ5IDE1IHRvIDIwIG1pbnV0ZXMuDQogICAgICAgIDwvdGQ+DQogICAgPC90cj4NCjwvdGFibGU+DQo8L2Rpdj4NCg0KPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCiAgICBmdW5jdGlvbiB0YWI4U3RhcnQoKQ0KICAgIHsNCgkgICAgR2V0QlhUb3AxKCk7DQoJfQkNCg0KICAgIGZ1bmN0aW9uIHRhYjhTdG9wKCkNCiAgICB7DQoJICAgIGNsZWFyVGltZW91dCh3aW5kb3cuSG9tZVBhZ2VUaW1lcnNbJ0JYVG9wMSddKTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBHZXRCWFRvcDEoKSANCiAgICB7DQogICAgICAgIHZhciBzOw0KICAgICAgICB2YXIgczI7DQogICAgICAgIHMyID0gJ2RpdkJYVG9wMSc7DQoNCiAgICAgICAgdmFyIGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzMik7DQogICAgICAgIGlmIChlICE9IG51bGwpIGUuaW5uZXJIVE1MID0gInVwZGF0aW5nLi4uLiI7DQoNCiAgICAgICAgU2VydmVyLkJMX1BITFhUb3AxMC5HZXRVcGRhdGVEYXRhKGNiX0dldEJYVG9wMSwgJ1RvcE5PQk9FcXVpdHlPcHRpb25zLmh0bWwnLCAnVG9wTk9CT0VxdWl0eU9wdGlvbnMudHh0Jyk7DQogICAgICAgIHdpbmRvdy5Ib21lUGFnZVRpbWVyc1snQlhUb3AxJ10gPSBzZXRUaW1lb3V0KCdHZXRCWFRvcDEoKScsIDEwMDAqNjApOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGNiX0dldEJYVG9wMShyLCBlKQ0KICAgIHsNCiAgICAgICAgaWYgKGUpIHJldHVybiBhbGVydChlLm1lc3NhZ2UpOw0KICAgICAgICB2YXIgZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkaXZCWFRvcDEnKTsNCiAgICAgICAgaWYgKGQgIT0gbnVsbCkNCiAgICAgICAgICAgIGQuaW5uZXJIVE1MID0gcjsNCiAgICB9DQo8L3NjcmlwdD4NCjwhLS0gRW5kIFRvcEJYT3B0aW9ucy5odG1sIC0tPg0KPC9kaXY+CjxkaXYgY2xhc3M9ImJsb2NrIiBpZD0idGFiMWRpdiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7IHotaW5kZXg6IDE7IG92ZXJmbG93OiBhdXRvOyBoZWlnaHQ6IDQyNXB4OyB3aWR0aDogNzE1cHg7Ym9yZGVyOiAxcHggc29saWQ7ICovIG1hcmdpbi10b3A6IDVweDsiPiA8IS0tIEJlZ2luIFRvcE5PTUVxdWl0eU9wdGlvbnMuaHRtbCAtLT4NCjxkaXYgc3R5bGU9InBhZGRpbmctbGVmdDo1cHg7cGFkZGluZy1yaWdodDo1cHg7Ij4NCjxkaXYgaWQ9J2RpdkJYVG9wMyc+DQogICAgPGgyIHN0eWxlPSJmb250LXNpemU6MTJweDsiPg0KICAgICAgICA8dGFibGU+DQoJCSAgICA8dHI+PHRkIHN0eWxlPSJ3aWR0aDozMTVweDt3aGl0ZS1zcGFjZTpub3dyYXA7Ij4NCiAgICAgICAgICAgICAgICAgIFRvdGFsIE5PTSBPcHRpb25zIFZvbHVtZTombmJzcDs8c3BhbiBzdHlsZT0iZm9udC1zaXplOjEycHg7Ij4yLDY3OCw4OTA8L3NwYW4+DQogICAgICAgICAgICAgICAgPC90ZD4NCgkJCSAgICA8dGQgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O3dpZHRoOjM5MHB4O3RleHQtYWxpZ246cmlnaHQiPg0KICAgICAgICAgICAgICAgICAgIExhc3QgdXBkYXRlZCAwOC8wMS8yMDE5IDE4OjAyDQogICAgICAgICAgICAgICAgPC90ZD4NCgkJICAgIDwvdHI+DQoJCTwvdGFibGU+DQoJPC9oMj4NCiAgICA8cD4mbmJzcDs8L3A+DQo8L3RyPg0KPGRpdiBjbGFzcz0iZ2VuVGFibGVIb21lIj4NCjx0YWJsZSBzdHlsZT0id2lkdGg6NTQwcHg7Zm9udC1zaXplOjExcHg7Ij4NCiAgICA8dHI+PHRoIGNvbHNwYW49IjQiPlRvcCAxMCBFcXVpdGllcyBPcHRpb25zPC90aD48L3RyPg0KICAgIDx0cj48dGg+UmFuazwvdGg+DQoJCTx0aD5TeW1ib2w8L3RoPg0KCQk8dGg+TmFtZTwvdGg+DQoJCTx0aCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDsiPlZvbHVtZTwvdGg+DQoJPC90cj4NCiAgICAgICAgICAgICAgICA8dHIgPg0KCSAgICA8dGQ+MTwvdGQ+DQoJICAgIDx0ZD5TUFk8L3RkPg0KCSAgICA8dGQ+U1BEUiBTJlAgNTAwIEVURiBUUlVTVDwvdGQ+DQoJICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDsiPjM5Miw2MDU8L3RkPg0KICAgIDwvdHI+DQogICAgICAgICAgICAgICAgPHRyIGNsYXNzPSdnZW5UYWJsZWFsdCcgPg0KCSAgICA8dGQ+MjwvdGQ+DQoJICAgIDx0ZD5BQVBMPC90ZD4NCgkgICAgPHRkPkFQUExFIElOQy48L3RkPg0KCSAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7Ij4xMzIsNzc4PC90ZD4NCiAgICA8L3RyPg0KICAgICAgICAgICAgICAgIDx0ciA+DQoJICAgIDx0ZD4zPC90ZD4NCgkgICAgPHRkPlFRUTwvdGQ+DQoJICAgIDx0ZD5QT1dFUlNIQVJFUyBRUVEgVFIgMTwvdGQ+DQoJICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDsiPjkwLDY2MzwvdGQ+DQogICAgPC90cj4NCiAgICAgICAgICAgICAgICA8dHIgY2xhc3M9J2dlblRhYmxlYWx0JyA+DQoJICAgIDx0ZD40PC90ZD4NCgkgICAgPHRkPkVXWjwvdGQ+DQoJICAgIDx0ZD5JU0hBUkUgTVNDSSBCUkFaSUw8L3RkPg0KCSAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7Ij42OSwwNDc8L3RkPg0KICAgIDwvdHI+DQogICAgICAgICAgICAgICAgPHRyID4NCgkgICAgPHRkPjU8L3RkPg0KCSAgICA8dGQ+QU1EPC90ZD4NCgkgICAgPHRkPkFEViBNSUNSTyBERVZJQ0VTPC90ZD4NCgkgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0OyI+NTgsNTk0PC90ZD4NCiAgICA8L3RyPg0KICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0nZ2VuVGFibGVhbHQnID4NCgkgICAgPHRkPjY8L3RkPg0KCSAgICA8dGQ+VlhYPC90ZD4NCgkgICAgPHRkPklwYXRoIFNlcmllcyBCIFMmUCA1MDAgVml4PC90ZD4NCgkgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0OyI+NTUsMDQ4PC90ZD4NCiAgICA8L3RyPg0KICAgICAgICAgICAgICAgIDx0ciA+DQoJICAgIDx0ZD43PC90ZD4NCgkgICAgPHRkPkJBQkE8L3RkPg0KCSAgICA8dGQ+QUxJQkFCQSBHUk9VUCBITCBMVEQ8L3RkPg0KCSAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7Ij40OSw0NjU8L3RkPg0KICAgIDwvdHI+DQogICAgICAgICAgICAgICAgPHRyIGNsYXNzPSdnZW5UYWJsZWFsdCcgPg0KCSAgICA8dGQ+ODwvdGQ+DQoJICAgIDx0ZD5NU0ZUPC90ZD4NCgkgICAgPHRkPk1JQ1JPU09GVCBDT1JQPC90ZD4NCgkgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0OyI+NDIsNzc0PC90ZD4NCiAgICA8L3RyPg0KICAgICAgICAgICAgICAgIDx0ciA+DQoJICAgIDx0ZD45PC90ZD4NCgkgICAgPHRkPkZCPC90ZD4NCgkgICAgPHRkPkZBQ0VCT09LIElOQzwvdGQ+DQoJICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDsiPjQwLDI5MjwvdGQ+DQogICAgPC90cj4NCiAgICAgICAgICAgICAgICA8dHIgY2xhc3M9J2dlblRhYmxlYWx0JyA+DQoJICAgIDx0ZD4xMDwvdGQ+DQoJICAgIDx0ZD5GWEk8L3RkPg0KCSAgICA8dGQ+SVNIQVJFUyBDSElOQTwvdGQ+DQoJICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDsiPjM1LDI3NDwvdGQ+DQogICAgPC90cj4NCiAgICA8L3RhYmxlPg0KPC9kaXY+DQoNCjwvZGl2Pg0KDQo8dGFibGUgc3R5bGU9IndpZHRoOjU0MHB4OyI+DQogICAgPHRyPjx0ZCBjbGFzcz0iZm9vdG5vdGUiIHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQ7cGFkZGluZy10b3A6OHB4O2ZvbnQtc2l6ZTo5cHg7Zm9udC13ZWlnaHQ6Ym9sZDsiPg0KICAgICAgICBTb3VyY2U6Jm5ic3A7TkFTREFRIE9wdGlvbnMgTWFya2V0LiANCiAgICAgICAgPC90ZD4NCiAgICAgICAgPHRkIGNsYXNzPSJmb290bm90ZSIgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7cGFkZGluZy10b3A6OHB4O2ZvbnQtc2l6ZTo5cHg7Zm9udC13ZWlnaHQ6Ym9sZDsiPg0KICAgICAgICAgICBEYXRhIGlzIHVwZGF0ZWQgZXZlcnkgMTUgdG8gMjAgbWludXRlcy4NCiAgICAgICAgPC90ZD4NCiAgICA8L3RyPg0KPC90YWJsZT4NCjwvZGl2Pg0KDQo8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgkNCiAgICBmdW5jdGlvbiB0YWIxU3RhcnQoKQ0KICAgIHsNCgkgICAgR2V0QlhUb3AzKCk7DQoJfQkNCg0KICAgIGZ1bmN0aW9uIHRhYjFTdG9wKCkNCiAgICB7DQoJICAgIGNsZWFyVGltZW91dCh3aW5kb3cuSG9tZVBhZ2VUaW1lcnNbJ0JYVG9wMyddKTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBHZXRCWFRvcDMoKSANCiAgICB7DQogICAgICAgIHZhciBzOw0KICAgICAgICB2YXIgczI7DQogICAgICAgIHMyID0gJ2RpdkJYVG9wMyc7DQoNCiAgICAgICAgdmFyIGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzMik7DQogICAgICAgIGlmIChlICE9IG51bGwpIGUuaW5uZXJIVE1MID0gInVwZGF0aW5nLi4uLiI7DQoNCiAgICAgICAgU2VydmVyLkJMX1BITFhUb3AxMC5HZXRVcGRhdGVEYXRhKGNiX0dldEJYVG9wMywgJ1RvcE5PTUVxdWl0eU9wdGlvbnMuaHRtbCcsICdUb3BOT01FcXVpdHlPcHRpb25zLnR4dCcpOw0KICAgICAgICB3aW5kb3cuSG9tZVBhZ2VUaW1lcnNbJ0JYVG9wMyddID0gc2V0VGltZW91dCgnR2V0QlhUb3AzKCknLCAxMDAwKjYwKTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBjYl9HZXRCWFRvcDMociwgZSkNCiAgICB7DQogICAgICAgIGlmIChlKSByZXR1cm4gYWxlcnQoZS5tZXNzYWdlKTsNCiAgICAgICAgdmFyIGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGl2QlhUb3AzJyk7DQogICAgICAgIGlmIChkICE9IG51bGwpDQogICAgICAgICAgICBkLmlubmVySFRNTCA9IHI7DQogICAgfQ0KPC9zY3JpcHQ+DQo8IS0tIEVuZCBUb3BCWE9wdGlvbnMuaHRtbCAtLT4NCjwvZGl2Pgo8ZGl2IGNsYXNzPSJibG9jayIgaWQ9InRhYjVkaXYiIHN0eWxlPSJkaXNwbGF5OiBub25lOyB6LWluZGV4OiAxOyBvdmVyZmxvdzogYXV0bzsgaGVpZ2h0OiA0NTBweDsgd2lkdGg6IDcxNXB4OyBib3JkZXI6IDFweCBzb2xpZDsgICovIG1hcmdpbi10b3A6IDVweDsiPgo8ZGl2IGNsYXNzPSJnZW5UYWJsZSBzdWJ0YWJfdG9wIj4KPHRhYmxlPgogICAgIDx0cj4KICAgICAgICAgPHRkIGNsYXNzPSJzdWJ0YWJfb24iIGlkPSJzdWJ0YWJfMSI+PGEgaWQ9IkVxdWl0eSIgaHJlZj0iamF2YXNjcmlwdDpzaG93UEhMWCgnMScpOyI+RXF1aXRpZXMgT3B0aW9ucyBWb2x1bWU8L2E+PC90ZD4KICAgICAgICAgPHRkIGlkPSJzdWJ0YWJfMiI+PGEgaWQ9IkluZGV4ZXMiIGhyZWY9ImphdmFzY3JpcHQ6c2hvd1BITFgoJzInKTsiPkluZGV4IE9wdGlvbnMgVm9sdW1lPC9hPjwvdGQ+CiAgICAgICAgIDwhLS08dGQgaWQ9InN1YnRhYl8zIj48YSBpZD0iQ3VycmVuY3kiIGhyZWY9ImphdmFzY3JpcHQ6c2hvd1BITFgoJzMnKTsiPldvcmxkIEN1cnJlbmN5IE9wdGlvbnM8L2E+PC90ZD4tLT4KICAgICA8L3RyPgo8L3RhYmxlPgo8L2Rpdj4KPGRpdiBpZD0iUEhMWDEiIHN0eWxlPSJkaXNwbGF5OiBibG9jayI+PCEtLSBCZWdpbiBUb3BQSExYRXF1aXRpZXNPcHRpb25zLmh0bWwgLS0+DQo8ZGl2IHN0eWxlPSJwYWRkaW5nLWxlZnQ6NXB4O3BhZGRpbmctcmlnaHQ6NXB4OyI+DQo8ZGl2IGlkPSJkaXZQSExYVG9wMSI+DQogICAgPGgyIHN0eWxlPSJmb250LXNpemU6MTJweDsiPg0KICAgICAgICAgICAgPHRhYmxlIHN0eWxlPSJib3JkZXItc3R5bGU6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50OyI+DQoJCSAgICAgICAgPHRyPjx0ZCBzdHlsZT0id2lkdGg6MzE1cHg7d2hpdGUtc3BhY2U6bm93cmFwO2JvcmRlci1zdHlsZTpub25lO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ij4NCiAgICAgICAgICAgICAgICAgICAgICBUb3RhbCBQSExYIEVxdWl0eSBPcHRpb25zIFZvbHVtZTombmJzcDsNCiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1zaXplOjEycHg7Ij4xLDIyNiwxMTE8L3NwYW4+DQogICAgICAgICAgICAgICAgICAgIDwvdGQ+DQoJCQkgICAgICAgIDx0ZCBzdHlsZT0iZm9udC1zaXplOjExcHg7d2lkdGg6MzkwcHg7dGV4dC1hbGlnbjpyaWdodDtib3JkZXItc3R5bGU6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50OyI+DQogICAgICAgICAgICAgICAgICAgICAgIExhc3QgdXBkYXRlZCAxMS8wNC8yMDE5IDE3OjM1DQogICAgICAgICAgICAgICAgICAgIDwvdGQ+DQoJCSAgICAgICAgPC90cj4NCgkJICAgIDwvdGFibGU+DQoJICAgIDwvaDI+DQogICAgICAgIDxwPiZuYnNwOzwvcD4NCjwvdHI+CQ0KCQ0KPGRpdiBjbGFzcz0iZ2VuVGFibGVIb21lIj4NCiAgICA8dGFibGUgc3R5bGU9IndpZHRoOjU0MHB4O2ZvbnQtc2l6ZToxMXB4OyI+DQoJCTx0cj48dGggIGNvbHNwYW49IjQiPlRvcCAxMCBFcXVpdGllcyBPcHRpb25zPC90aD48L3RyPg0KCQk8dHI+PHRoPlJhbms8L3RoPg0KCQkJPHRoPlN5bWJvbDwvdGg+DQoJCQk8dGg+TmFtZTwvdGg+DQoJCQk8dGggc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7Ij5Wb2x1bWU8L3RoPg0KCQk8L3RyPg0KCQkJCQkJCQk8dHIgPg0KCQkJPHRkIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTBweDsiPjE8L3RkPg0KCQkJPHRkIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTBweDsiPkZYSTwvdGQ+DQoJCQk8dGQgc3R5bGU9InBhZGRpbmctbGVmdDoxMHB4OyI+SVNIQVJFUyBDSElOQTwvdGQ+DQoJCQk8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7Ij4xMzksMjY0PC90ZD4NCgkJPC90cj4NCgkJCQkJCQkJPHRyIGNsYXNzPSdnZW5UYWJsZWFsdCcgPg0KCQkJPHRkIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTBweDsiPjI8L3RkPg0KCQkJPHRkIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTBweDsiPkVFTTwvdGQ+DQoJCQk8dGQgc3R5bGU9InBhZGRpbmctbGVmdDoxMHB4OyI+SVNIQVJFUyBNU0NJIEVNRVJHSU5HIE1BUktFVFMgRVRGPC90ZD4NCgkJCTx0ZCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDsiPjExNCw5ODg8L3RkPg0KCQk8L3RyPg0KCQkJCQkJCQk8dHIgPg0KCQkJPHRkIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTBweDsiPjM8L3RkPg0KCQkJPHRkIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTBweDsiPlNQWTwvdGQ+DQoJCQk8dGQgc3R5bGU9InBhZGRpbmctbGVmdDoxMHB4OyI+U1BEUiBTJlAgNTAwIEVURiBUUlVTVDwvdGQ+DQoJCQk8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7Ij44NCwzNjc8L3RkPg0KCQk8L3RyPg0KCQkJCQkJCQk8dHIgY2xhc3M9J2dlblRhYmxlYWx0JyA+DQoJCQk8dGQgc3R5bGU9InBhZGRpbmctbGVmdDoxMHB4OyI+NDwvdGQ+DQoJCQk8dGQgc3R5bGU9InBhZGRpbmctbGVmdDoxMHB4OyI+VDwvdGQ+DQoJCQk8dGQgc3R5bGU9InBhZGRpbmctbGVmdDoxMHB4OyI+QVQmVCBJTkNDT008L3RkPg0KCQkJPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0OyI+NzUsNzI1PC90ZD4NCgkJPC90cj4NCgkJCQkJCQkJPHRyID4NCgkJCTx0ZCBzdHlsZT0icGFkZGluZy1sZWZ0OjEwcHg7Ij41PC90ZD4NCgkJCTx0ZCBzdHlsZT0icGFkZGluZy1sZWZ0OjEwcHg7Ij5FV1o8L3RkPg0KCQkJPHRkIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTBweDsiPklTSEFSRSBNU0NJIEJSQVpJTDwvdGQ+DQoJCQk8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7Ij43MSw3NTI8L3RkPg0KCQk8L3RyPg0KCQkJCQkJCQk8dHIgY2xhc3M9J2dlblRhYmxlYWx0JyA+DQoJCQk8dGQgc3R5bGU9InBhZGRpbmctbGVmdDoxMHB4OyI+NjwvdGQ+DQoJCQk8dGQgc3R5bGU9InBhZGRpbmctbGVmdDoxMHB4OyI+VlhYPC90ZD4NCgkJCTx0ZCBzdHlsZT0icGFkZGluZy1sZWZ0OjEwcHg7Ij5JcGF0aCBTZXJpZXMgQiBTJlAgNTAwIFZpeDwvdGQ+DQoJCQk8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7Ij41Niw0Mjk8L3RkPg0KCQk8L3RyPg0KCQkJCQkJCQk8dHIgPg0KCQkJPHRkIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTBweDsiPjc8L3RkPg0KCQkJPHRkIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTBweDsiPkFBUEw8L3RkPg0KCQkJPHRkIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTBweDsiPkFQUExFIElOQy48L3RkPg0KCQkJPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0OyI+NDgsNjEzPC90ZD4NCgkJPC90cj4NCgkJCQkJCQkJPHRyIGNsYXNzPSdnZW5UYWJsZWFsdCcgPg0KCQkJPHRkIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTBweDsiPjg8L3RkPg0KCQkJPHRkIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTBweDsiPkdFPC90ZD4NCgkJCTx0ZCBzdHlsZT0icGFkZGluZy1sZWZ0OjEwcHg7Ij5HRU4gRUxFQ1RSSUMgQ088L3RkPg0KCQkJPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0OyI+MzgsMzc5PC90ZD4NCgkJPC90cj4NCgkJCQkJCQkJPHRyID4NCgkJCTx0ZCBzdHlsZT0icGFkZGluZy1sZWZ0OjEwcHg7Ij45PC90ZD4NCgkJCTx0ZCBzdHlsZT0icGFkZGluZy1sZWZ0OjEwcHg7Ij5BTUQ8L3RkPg0KCQkJPHRkIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTBweDsiPkFEViBNSUNSTyBERVZJQ0VTPC90ZD4NCgkJCTx0ZCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDsiPjM1LDEyMzwvdGQ+DQoJCTwvdHI+DQoJCQkJCQkJCTx0ciBjbGFzcz0nZ2VuVGFibGVhbHQnID4NCgkJCTx0ZCBzdHlsZT0icGFkZGluZy1sZWZ0OjEwcHg7Ij4xMDwvdGQ+DQoJCQk8dGQgc3R5bGU9InBhZGRpbmctbGVmdDoxMHB4OyI+QkFCQTwvdGQ+DQoJCQk8dGQgc3R5bGU9InBhZGRpbmctbGVmdDoxMHB4OyI+QUxJQkFCQSBHUk9VUCBITCBMVEQ8L3RkPg0KCQkJPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0OyI+MzMsOTkyPC90ZD4NCgkJPC90cj4NCgkJICAgIDwvdGFibGU+DQo8L2Rpdj4NCjwvZGl2Pg0KDQo8ZGl2IGNsYXNzPSJmb290bm90ZSIgc3R5bGU9InBhZGRpbmctdG9wOjIwcHg7cGFkZGluZy1ib3R0b206bm9uZTtjb2xvcjpibGFjaztmb250LXNpemU6OXB4O2ZvbnQtd2VpZ2h0OmJvbGQ7Ij4NCiAgPHNwYW4gc3R5bGU9ImZsb2F0OmxlZnQ7Ij5Tb3VyY2U6IE5BU0RBUSBQSExYLjwvc3Bhbj4NCiAgPHNwYW4gc3R5bGU9ImZsb2F0OnJpZ2h0O3RleHQtYWxpZ246cmlnaHQ7Ij5EYXRhIGlzIHVwZGF0ZWQgZXZlcnkgMTUgdG8gMjAgbWludXRlcy48L3NwYW4+DQo8L2Rpdj4NCg0KPC9kaXY+DQoNCjxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQoJZnVuY3Rpb24gU3RvcFBITFhUb3AxKCkNCgl7DQoJCWNsZWFyVGltZW91dCh3aW5kb3cuSG9tZVBhZ2VUaW1lcnNbJ1BITFhUb3AxJ10pOw0KCX0NCg0KCWZ1bmN0aW9uIEdldFBITFhUb3AxKCkgDQogICAgew0KICAgICAgICB2YXIgczsNCiAgICAgICAgdmFyIHMyOw0KICAgICAgICBzMiA9ICdkaXZQSExYVG9wMSc7DQoNCiAgICAgICAgdmFyIGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzMik7DQogICAgICAgIGlmIChlICE9IG51bGwpIGUuaW5uZXJIVE1MID0gInVwZGF0aW5nLi4uLiI7DQoNCiAgICAgICAgU2VydmVyLkJMX1BITFhUb3AxMC5HZXRVcGRhdGVEYXRhKGNiX0dldFBITFhUb3AxLCAnVG9wUEhMWEVxdWl0eU9wdGlvbnMuaHRtbCcsICdUb3BQSExYRXF1aXR5T3B0aW9ucy50eHQnKTsgICAgICAgICAgICAgICAgDQogICAgICAgIHdpbmRvdy5Ib21lUGFnZVRpbWVyc1snUEhMWFRvcDEnXSA9IHNldFRpbWVvdXQoJ0dldFBITFhUb3AxKCknLCAxMDAwKjYwKTsgIA0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGNiX0dldFBITFhUb3AxKHIsIGUpDQogICAgew0KICAgICAgICBpZiAoZSkgcmV0dXJuIGFsZXJ0KGUubWVzc2FnZSk7DQogICAgICAgIHZhciBkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RpdlBITFhUb3AxJyk7DQogICAgICAgIGlmIChkICE9IG51bGwpDQogICAgICAgICAgICBkLmlubmVySFRNTCA9IHI7ICAgICAgICANCiAgICB9DQo8L3NjcmlwdD4NCjwhLS0gRW5kIFRvcFBITFhFcXVpdGllc09wdGlvbnMuaHRtbCAtLT4NCjwvZGl2Pgo8ZGl2IGlkPSJQSExYMiIgc3R5bGU9ImRpc3BsYXk6IG5vbmUiPjwhLS0gQmVnaW4gVG9wUEhMWEluZGV4T3B0aW9ucy5odG1sIC0tPg0KPGRpdiBzdHlsZT0icGFkZGluZy1sZWZ0OjVweDtwYWRkaW5nLXJpZ2h0OjVweDt2ZXJ0aWNhbC1hbGlnbjp0b3A7Ij4NCjxkaXYgaWQ9J2RpdlBITFhUb3AyJyBzdHlsZT0idmVydGljYWwtYWxpZ246dG9wOyI+DQogICAgPGgyIHN0eWxlPSJmb250LXNpemU6MTJweDsiPg0KICAgICAgICA8dGFibGUgc3R5bGU9ImJvcmRlci1zdHlsZTpub25lO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ij4NCgkJICAgIDx0cj48dGQgc3R5bGU9IndpZHRoOjMxNXB4O3doaXRlLXNwYWNlOm5vd3JhcDtib3JkZXItc3R5bGU6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50OyI+DQogICAgICAgICAgICAgICAgICAgIFRvdGFsIFBITFggSW5kZXggT3B0aW9ucyBWb2x1bWU6Jm5ic3A7PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMnB4OyI+Miw2Nzk8L3NwYW4+DQogICAgICAgICAgICAgICAgPC90ZD4NCgkJCSAgICA8dGQgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O3dpZHRoOjM5MHB4O3RleHQtYWxpZ246cmlnaHQ7Ym9yZGVyLXN0eWxlOm5vbmU7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDsiPg0KICAgICAgICAgICAgICAgICAgICBMYXN0IHVwZGF0ZWQgMTEvMDQvMjAxOSAxNzozNg0KICAgICAgICAgICAgICAgIDwvdGQ+DQoJCSAgICA8L3RyPg0KCQk8L3RhYmxlPg0KCTwvaDI+DQogICAgPHA+Jm5ic3A7PC9wPg0KICAgIDxkaXYgY2xhc3M9ImdlblRhYmxlSG9tZSIgc3R5bGU9InZlcnRpY2FsLWFsaWduOnRvcDsiPg0KICAgICAgICA8dGFibGUgc3R5bGU9IndpZHRoOjU0MHB4O2ZvbnQtc2l6ZToxMXB4O3ZlcnRpY2FsLWFsaWduOnRvcDsiPg0KICAgICAgICAgICAgPHRyPjx0aCBjb2xzcGFuPSI0Ij5Ub3AgMTAgSW5kZXggT3B0aW9uczwvdGg+PC90cj4NCgkgICAgICAgICAgICA8dHI+PHRoPlJhbms8L3RoPg0KCQkgICAgICAgICAgICA8dGg+SW5kZXggU3ltYm9sPC90aD4NCgkJICAgICAgICAgICAgPHRoPkluZGV4IE5hbWU8L3RoPg0KCQkgICAgICAgICAgICA8dGggc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7Ij5Wb2x1bWU8L3RoPg0KCSAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgPg0KCSAgICAgICAgICAgIDx0ZCBzdHlsZT0icGFkZGluZy1sZWZ0OjEwcHg7Ij4xPC90ZD4NCgkgICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmctbGVmdDoxMHB4OyI+TkRYPC90ZD4NCgkgICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmctbGVmdDoxMHB4OyI+TkFTREFRIDEwMCBJTkRFWCBORVcgQ0FMQzwvdGQ+DQoJICAgICAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0OyI+Miw2NTU8L3RkPg0KICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0nZ2VuVGFibGVhbHQnID4NCgkgICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmctbGVmdDoxMHB4OyI+MjwvdGQ+DQoJICAgICAgICAgICAgPHRkIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTBweDsiPlNPWDwvdGQ+DQoJICAgICAgICAgICAgPHRkIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTBweDsiPlNFTUlDT05EVUNUT1IgSU5ERVg8L3RkPg0KCSAgICAgICAgICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDsiPjIwPC90ZD4NCiAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgPg0KCSAgICAgICAgICAgIDx0ZCBzdHlsZT0icGFkZGluZy1sZWZ0OjEwcHg7Ij4zPC90ZD4NCgkgICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmctbGVmdDoxMHB4OyI+QktYPC90ZD4NCgkgICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmctbGVmdDoxMHB4OyI+S0JXIEJBTksgSU5ERVg8L3RkPg0KCSAgICAgICAgICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDsiPjQ8L3RkPg0KICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4NCiAgICA8L2Rpdj4NCiAgICAgICAgICAgPC9kaXY+DQo8L2Rpdj4NCg0KPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCglmdW5jdGlvbiBTdG9wUEhMWFRvcDIoKQ0KCXsNCgkJY2xlYXJUaW1lb3V0KHdpbmRvdy5Ib21lUGFnZVRpbWVyc1snUEhMWFRvcDInXSk7DQoJfQ0KDQoJZnVuY3Rpb24gR2V0UEhMWFRvcDIoKSANCiAgICB7DQogICAgICAgIHZhciBzOw0KICAgICAgICB2YXIgczI7DQogICAgICAgIHMyID0gJ2RpdlBITFhUb3AyJzsNCg0KICAgICAgICB2YXIgZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHMyKTsNCiAgICAgICAgaWYgKGUgIT0gbnVsbCkgZS5pbm5lckhUTUwgPSAidXBkYXRpbmcuLi4uIjsNCg0KICAgICAgICBTZXJ2ZXIuQkxfUEhMWFRvcDEwLkdldFVwZGF0ZURhdGEoY2JfR2V0UEhMWFRvcDIsICdUb3BQSExYSW5kZXhPcHRpb25zLmh0bWwnLCAnVG9wUEhMWEluZGV4T3B0aW9ucy50eHQnKTsgICAgICAgICAgICAgICAgIA0KICAgICAgICB3aW5kb3cuSG9tZVBhZ2VUaW1lcnNbJ1BITFhUb3AyJ10gPSBzZXRUaW1lb3V0KCdHZXRQSExYVG9wMigpJywgMTAwMCo2MCk7ICANCiAgICB9DQoNCiAgICBmdW5jdGlvbiBjYl9HZXRQSExYVG9wMihyLCBlKQ0KICAgIHsNCiAgICAgICAgaWYgKGUpIHJldHVybiBhbGVydChlLm1lc3NhZ2UpOw0KICAgICAgICB2YXIgZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkaXZQSExYVG9wMicpOw0KICAgICAgICBpZiAoZCAhPSBudWxsKQ0KICAgICAgICAgICAgZC5pbm5lckhUTUwgPSByOw0KDQovLyAgICAgICAgdmFyIGRPbmUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGl2UEhMWFRvcDEnKTsgIA0KLy8gICAgICAgIGlmIChkT25lICE9IG51bGwpDQovLyAgICAgICAgICAgIGRPbmUuc2V0QXR0cmlidXRlKCJzdHlsZSIsICJoZWlnaHQ6MHB4Iik7DQogICAgfQ0KPC9zY3JpcHQ+DQo8IS0tIEVuZCBUb3BQSExYSW5kZXhPcHRpb25zLmh0bWwgLS0+PC9kaXY+CjxkaXYgaWQ9IlBITFgzIiBzdHlsZT0iZGlzcGxheTogbm9uZSI+PCEtLSBCZWdpbiBUb3BXb3JsZEN1cnJlbmN5T3B0aW9ucy5odG1sIC0tPg0KPGRpdiBzdHlsZT0icGFkZGluZy1sZWZ0OjVweDtwYWRkaW5nLXJpZ2h0OjVweDt2ZXJ0aWNhbC1hbGlnbjp0b3A7Ij4NCjxkaXYgaWQ9J2RpdlBITFhUb3AzJz4NCgk8aDIgc3R5bGU9ImZvbnQtc2l6ZToxMnB4OyI+DQogICAgICAgIDx0YWJsZSBzdHlsZT0iYm9yZGVyLXN0eWxlOm5vbmU7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDsiPg0KCQkgICAgPHRyPjx0ZCBzdHlsZT0id2lkdGg6MzE1cHg7d2hpdGUtc3BhY2U6bm93cmFwO2JvcmRlci1zdHlsZTpub25lO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ij4NCiAgICAgICAgICAgICAgICAgICAgVG90YWwgUEhMWCBXb3JsZCBDdXJyZW5jeSBPcHRpb25zIFZvbHVtZTombmJzcDsNCiAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMnB4OyI+MTAzPC9zcGFuPg0KICAgICAgICAgICAgICAgIDwvdGQ+DQoJCQkgICAgPHRkIHN0eWxlPSJmb250LXNpemU6MTFweDt3aWR0aDozOTBweDt0ZXh0LWFsaWduOnJpZ2h0O2JvcmRlci1zdHlsZTpub25lO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ij4NCiAgICAgICAgICAgICAgICAgICAgTGFzdCB1cGRhdGVkIDAyLzA1LzIwMTQgMTc6NDENCiAgICAgICAgICAgICAgICA8L3RkPg0KCQkgICAgPC90cj4NCgkJPC90YWJsZT4NCgk8L2gyPg0KICAgIDxwPiZuYnNwOzwvcD4NCiAgICA8ZGl2IGNsYXNzPSJnZW5UYWJsZUhvbWUiIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjp0b3A7Ij4NCiAgICAgICAgPHRhYmxlIHN0eWxlPSJ3aWR0aDo1NDBweDtmb250LXNpemU6MTFweDsiPg0KCSAgICAgICAgPHRyPjx0aD5SYW5rPC90aD4NCgkJICAgICAgICA8dGg+U3ltYm9sPC90aD4NCgkJICAgICAgICA8dGg+Q3VycmVuY3k8L3RoPg0KCQkgICAgICAgIDx0aCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDsiPlZvbHVtZTwvdGg+DQoJICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyID4NCgkgICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmctbGVmdDoxMHB4OyI+MTwvdGQ+DQoJICAgICAgICAgICAgPHRkIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTBweDsiPlhEQzwvdGQ+DQoJICAgICAgICAgICAgPHRkIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTBweDsiPlBITFggQ0FOQURJQU4gRE9MTEFSPC90ZD4NCgkgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7Ij42NTwvdGQ+DQogICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSdnZW5UYWJsZWFsdCcgPg0KCSAgICAgICAgICAgIDx0ZCBzdHlsZT0icGFkZGluZy1sZWZ0OjEwcHg7Ij4yPC90ZD4NCgkgICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmctbGVmdDoxMHB4OyI+WERFPC90ZD4NCgkgICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmctbGVmdDoxMHB4OyI+UEhMWCBFVVJPPC90ZD4NCgkgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7Ij4zMDwvdGQ+DQogICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyID4NCgkgICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmctbGVmdDoxMHB4OyI+MzwvdGQ+DQoJICAgICAgICAgICAgPHRkIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTBweDsiPlhETjwvdGQ+DQoJICAgICAgICAgICAgPHRkIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTBweDsiPlBITFggSkFQQU5FU0UgWUVOPC90ZD4NCgkgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7Ij42PC90ZD4NCiAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9J2dlblRhYmxlYWx0JyA+DQoJICAgICAgICAgICAgPHRkIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTBweDsiPjQ8L3RkPg0KCSAgICAgICAgICAgIDx0ZCBzdHlsZT0icGFkZGluZy1sZWZ0OjEwcHg7Ij5YREE8L3RkPg0KCSAgICAgICAgICAgIDx0ZCBzdHlsZT0icGFkZGluZy1sZWZ0OjEwcHg7Ij5QSExYIEFVU1RSQUxJQU4gRE9MTEFSPC90ZD4NCgkgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7Ij4yPC90ZD4NCiAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICAgICAgICAgIDwvdGFibGU+DQogICAgPC9kaXY+DQo8L2Rpdj4NCjwvZGl2Pg0KDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPg0KCWZ1bmN0aW9uIFN0b3BQSExYVG9wMygpDQoJew0KCQljbGVhclRpbWVvdXQod2luZG93LkhvbWVQYWdlVGltZXJzWydQSExYVG9wMyddKTsNCgl9DQoNCglmdW5jdGlvbiBHZXRQSExYVG9wMygpIA0KICAgIHsNCiAgICAgICAgdmFyIHM7DQogICAgICAgIHZhciBzMjsNCiAgICAgICAgczIgPSAnZGl2UEhMWFRvcDMnOw0KDQogICAgICAgIHZhciBlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoczIpOw0KICAgICAgICBpZiAoZSAhPSBudWxsKSBlLmlubmVySFRNTCA9ICJ1cGRhdGluZy4uLi4iOw0KDQogICAgICAgIFNlcnZlci5CTF9QSExYVG9wMTAuR2V0VXBkYXRlRGF0YShjYl9HZXRQSExYVG9wMywgJ1RvcFdvcmxkQ3VycmVuY3lPcHRpb25zLmh0bWwnLCAnVG9wV29ybGRDdXJyZW5jeU9wdGlvbnMudHh0Jyk7ICAgICAgICAgICAgICAgICANCiAgICAgICAgd2luZG93LkhvbWVQYWdlVGltZXJzWydQSExYVG9wMyddID0gc2V0VGltZW91dCgnR2V0UEhMWFRvcDMoKScsIDEwMDAqNjApOyAgDQogICAgfQ0KDQogICAgZnVuY3Rpb24gY2JfR2V0UEhMWFRvcDMociwgZSkNCiAgICB7DQogICAgICAgIGlmIChlKSByZXR1cm4gYWxlcnQoZS5tZXNzYWdlKTsNCiAgICAgICAgdmFyIGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGl2UEhMWFRvcDMnKTsNCiAgICAgICAgaWYgKGQgIT0gbnVsbCkNCiAgICAgICAgICAgIGQuaW5uZXJIVE1MID0gcjsgICAgICAgIA0KICAgIH0NCjwvc2NyaXB0Pg0KPCEtLSBFbmQgVG9wV29ybGRDdXJyZW5jeU9wdGlvbnMuaHRtbCAtLT48L2Rpdj4KPC9kaXY+Cgo8L2Rpdj4KCgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CiAgIFRpbWVyX2R1cmF0aW9uID0gMTU7IC8vbnVtYmVyIG9mIHNlY29uZHMgZm9yIGFkIHN3aXRjaAogICBpc19kYXJ0Wm9uZSA9ICJvcHRpb25zIjsKPC9zY3JpcHQ+ZAIFDxYCHwEFvTs8IVtpZiBJRSA3XT4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3RlbXBsYXRlX3N0eWxlcy9jYWxsb3V0YWNjb3JkaW9uSUVfaG9tZXBhZ2UuY3NzIi8+CjwhW2VuZGlmXT4KCjwhW2lmIElFIDhdPgo8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVtcGxhdGVfc3R5bGVzL2NhbGxvdXRhY2NvcmRpb25JRThfaG9tZXBhZ2UuY3NzIi8+CjwhW2VuZGlmXT4KCjwhW2lmIElFIDldPgo8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVtcGxhdGVfc3R5bGVzL2NhbGxvdXRhY2NvcmRpb25JRThfaG9tZXBhZ2UuY3NzIi8+CjwhW2VuZGlmXT4KCjwhW2lmIElFIDEwXT4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3RlbXBsYXRlX3N0eWxlcy9jYWxsb3V0YWNjb3JkaW9uSUU4X2hvbWVwYWdlLmNzcyIvPgo8IVtlbmRpZl0+Cgo8IVtpZiBJRSAxMV0+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZW1wbGF0ZV9zdHlsZXMvY2FsbG91dGFjY29yZGlvbklFOF9ob21lcGFnZS5jc3MiLz4KPCFbZW5kaWZdPgoKPCFbaWYgIUlFXT4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3RlbXBsYXRlX3N0eWxlcy9jYWxsb3V0YWNjb3JkaW9uRkZfaG9tZXBhZ2UuY3NzIi8+CjwhW2VuZGlmXT4KPGJyPgo8IS0tPGRpdiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDVweDsgbWFyZ2luLXRvcDogMTBweCI+PEgxPlVwY29taW5nIEV2ZW50czwvaDE+CjxUQUJMRSBzdHlsZT0nd2lkdGg6MTgwcHgnPjwvVEFCTEU+PC9kaXY+PGRpdiBzdHlsZT0ndGV4dC1hbGlnbjpyaWdodDtwYWRkaW5nLXRvcDozcHg7d2lkdGg6MTgwcHgnPjxhIGhyZWY9J2h0dHA6Ly93d3cubmFzZGFxdHJhZGVyLmNvbS9UcmFkZXIuYXNweD9pZD1ldmVudHMnIHN0eWxlPSdjb2xvcjpuYXZ5O3RleHQtZGVjb3JhdGlvbjpub25lO2ZvbnQtZmFtaWx5OlNlZ29lIFVJO2ZvbnQtc2l6ZToxMnB4O2NvbG9yOm5hdnk7Jz5WaWV3IEFsbCBFdmVudHM8L2E+PC9kaXY+PGJyPi0tPgoKPGRpdiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDVweDsgbWFyZ2luLXRvcDogMTBweCI+DQoNCjxkaXYgaWQ9ImFjY29yZGlvbiI+DQoNCjxoMiBjbGFzcz0iYWx0Ij48aW1nIGltZyBzcmM9Ii9pbWFnZXMvbWludXMucG5nIiAgaWQ9InN5bWJvbExvb2t1cFNpZ24iIG9uY2xpY2s9IkNvbnRyYWN0RXhwYW5kKCdzeW1ib2xMb29rdXAnLCdzeW1ib2xMb29rdXBTaWduJyk7IHJldHVybiBmYWxzZTsiKTsgcmV0dXJuIGZhbHNlOyI+U3ltYm9sIExvb2t1cCZuYnNwOzwvaDI+PC9kaXY+DQoNCg0KDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQpmdW5jdGlvbiBzZXRTdHlsZSh4KQ0Kew0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoeCkudmFsdWU9IiI7DQp9DQo8L3NjcmlwdD4NCg0KDQo8ZGl2IGlkPSJzeW1ib2xMb29rdXAiIHN0eWxlPSJ3aWR0aDogMjEwcHg7IG1hcmdpbi1sZWZ0OiA1cHgiPg0KPCEtLSBzcGFuIHN0eWxlPSJtYXJnaW4tcmlnaHQ6IDNweDtmb250LXdlaWdodDogYm9sZDttYXJnaW4tYm90dG9tOiAycHg7Y29sb3I6ICMwMDY2OUU7Zm9udC1zaXplOiAxMXB4OyI+TmFtZSBcIFN5bWJvbDo8L3NwYW4gLS0+DQoNCjxpbnB1dCBpZD0iY29tYmluZWRsb29rdXB0eHQiIHR5cGU9InRleHQiIHN0eWxlPSJ3aWR0aDogMTAwJTsgYm9yZGVyOiAxcHggc29saWQ7IGJvcmRlci1jb2xvcjogI0U5RTlFQTsgbWFyZ2luLWxlZnQ6IDVweDsgKi8gbWFyZ2luLWxlZnQ6IC01cHg7ICIgIGNsYXNzPSJpbnB1dGJveF9zeW1ib2xfaG9tZSIgb25mb2N1cz0ic2V0U3R5bGUodGhpcy5pZCkiICAgdmFsdWU9IkVudGVyIE5hbWUsIFN5bWJvbCBvciBNUElEIiBvbmtleXByZXNzPSJjaGVja0VudGVyKCdzZWN1cml0eVBvcENvbWJpbmVkKCknLCBldmVudCk7IiAvPg0KDQoJCTxzZWxlY3QgY2xhc3M9InN5bWJvbExvb2t1cF9kcm9wYm94IiBpZD0ic3ltbG9va3Vwc2VsZWN0IiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDVweDsgYm9yZGVyOiAxcHggc29saWQ7IGJvcmRlci1jb2xvcjogI0U5RTlFQTsgd2lkdGg6IDEyM3B4OyIgbmFtZT0iVVJMIj4NCgkJPG9wdGlvbiB2YWx1ZT0iQWxsX0lzc3VlcyI+U3RvY2s8L29wdGlvbj4NCgkJPG9wdGlvbiB2YWx1ZT0ib3B0aW9ucyI+T3B0aW9uczwvb3B0aW9uPg0KCQkJCTxvcHRpb24gdmFsdWU9ImJvbmRzIj5Cb25kczwvb3B0aW9uPg0KCQk8b3B0aW9uIHZhbHVlPSJtYXJrZXQiPk1rdC4gUGFydGljaXBhbnQ8L29wdGlvbj4NCgkJPC9zZWxlY3Q+IDxzcGFuIGNsYXNzPSJidG5fZ28iIHN0eWxlPSJwb3NpdGlvbjogYWJzb2x1dGU7ICBwYWRkaW5nLWxlZnQ6IDVweDsgdmVydGljYWwtYWxpZ246IHJpZ2h0Ij4NCiAgICA8YSBpZD0ic3ltTG9va3VwQnV0dG9uIiBvbmNsaWNrPSJzZWN1cml0eVBvcENvbWJpbmVkKCk7Ij5HTzwvYT4NCjwvc3Bhbj4NCg0KDQoNCjwvZGl2Pg0KDQoNCjwhLS0gYWN0aXZhdGUgdGFicyB3aXRoIEphdmFTY3JpcHQgLS0+DQo8c2NyaXB0Pg0KdmFyIHBsdXNJbWcgPSBuZXcgSW1hZ2UoKTsNCnBsdXNJbWcgPSAiL2ltYWdlcy9wbHVzLnBuZyI7DQp2YXIgbWludXNJbWcgPSBuZXcgSW1hZ2UoKTsNCnBsdXNJbWcgPSAiL2ltYWdlcy9taW51cy5wbmciOw0KDQpmdW5jdGlvbiBDb250cmFjdEV4cGFuZChkaXZJZCxpbWdJZCkNCnsNCgl2YXIgYiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGRpdklkKTsNCgl2YXIgaSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGltZ0lkKTsNCglpZiAoYi5zdHlsZS5kaXNwbGF5ID09ICJub25lIikNCgl7DQoJCWIuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7DQoJCWkuc3JjID0gIi9pbWFnZXMvbWludXMucG5nIjsNCgl9DQoJZWxzZQ0KCXsNCgkJYi5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOw0KCQlpLnNyYyA9ICIvaW1hZ2VzL3BsdXMucG5nIjsNCgl9DQoNCn0NCg0KDQoNCjwvc2NyaXB0Pg0KPC9kaXY+Cgo8ZGl2IHN0eWxlPSJtYXJnaW4tbGVmdDogNXB4Ij4NCjxkaXYgaWQ9ImFjY29yZGlvbiI+DQoNCjxoMiBjbGFzcz0iYWx0Ij48aW1nIGltZyBzcmM9Ii9pbWFnZXMvbWludXMucG5nIiAgaWQ9InN5c3N0YXRTaWduIiBvbmNsaWNrPSJDb250cmFjdEV4cGFuZCgnc3lzc3RhdCcsJ3N5c3N0YXRTaWduJyk7IHJldHVybiBmYWxzZTsiPlN5c3RlbSBTdGF0dXM8L2gyPg0KDQoNCgk8ZGl2IGlkPSJzeXNzdGF0IiBzdHlsZT0iZGlzcGxheTpibG9jayI+DQoNCgkJCTxwIHN0eWxlPSJwYWRkaW5nLXRvcDogMTBweDsgbWFyZ2luLWxlZnQ6IDEwcHgiPkFwciAxOCwgMjAyNCAxMjoxMDo0NSBFVDwvcD4NCgkJCTx0YWJsZSBjbGFzcz0ic3lzdGVtc3RhdHVzIiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDVweCI+DQoJCQk8dHI+DQoJCQk8dGQgdmFsaWduPSJ0b3AiPg0KCQkJPGEgaHJlZj0iVHJhZGVyLmFzcHg/aWQ9TWFya2V0U3lzdGVtU3RhdHVzIj48aW1nIHNyYz0iaW1hZ2VzL3N5c3RzdGF0X21lc3NhZ2VzX3llcy5naWYiIGFsdD0iU3RhdHVzIG1lc3NhZ2UocykgYXZhaWxhYmxlIi8+PC9hPjwvdGQ+DQoJCQk8L3RkPg0KCQkJPC90cj4NCgkJCTx0cj4NCg0KCQkJPC90YWJsZT4NCgkJPC9kaXY+DQoJPC9kaXY+DQoNCjwhLS0gYWN0aXZhdGUgdGFicyB3aXRoIEphdmFTY3JpcHQgLS0+DQo8c2NyaXB0Pg0KdmFyIHBsdXNJbWcgPSBuZXcgSW1hZ2UoKTsNCnBsdXNJbWcgPSAiL2ltYWdlcy9wbHVzLnBuZyI7DQp2YXIgbWludXNJbWcgPSBuZXcgSW1hZ2UoKTsNCnBsdXNJbWcgPSAiL2ltYWdlcy9taW51cy5wbmciOw0KDQpmdW5jdGlvbiBDb250cmFjdEV4cGFuZChkaXZJZCxpbWdJZCkNCnsNCgl2YXIgYiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGRpdklkKTsNCgl2YXIgaSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGltZ0lkKTsNCglpZiAoYi5zdHlsZS5kaXNwbGF5ID09ICJub25lIikNCgl7DQoJCWIuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7DQoJCWkuc3JjID0gIi9pbWFnZXMvbWludXMucG5nIjsNCgl9DQoJZWxzZQ0KCXsNCgkJYi5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOw0KCQlpLnNyYyA9ICIvaW1hZ2VzL3BsdXMucG5nIjsNCgl9DQoNCn0NCg0KDQoNCjwvc2NyaXB0Pg0KPC9kaXY+Cgo8ZGl2IHN0eWxlPSJwb3NpdGlvbjogcmVsYXRpdmU7IG1hcmdpbi1sZWZ0OiA1cHg7IG1hcmdpbi10b3A6IDEwcHgiPjwhLS0gPHNjcmlwdCBzcmM9Ii9zbmlwcGV0cy9qcy9qcXVlcnkudG9vbHMubWluLmpzIj48L3NjcmlwdD4gLS0+DQoNCg0KDQo8ZGl2IGlkPSJhY2NvcmRpb24iPg0KDQo8aDIgY2xhc3M9ImFsdCI+PGltZyBpbWcgc3JjPSIvaW1hZ2VzL21pbnVzLnBuZyIgIGlkPSJwYW5lMVNpZ24iIG9uY2xpY2s9IkNvbnRyYWN0RXhwYW5kKCdwYW5lMScsJ3BhbmUxU2lnbicpOyByZXR1cm4gZmFsc2U7Ij5SZXNvdXJjZXM8L2gyPg0KDQo8ZGl2IGlkPSJwYW5lMSIgc3R5bGU9ImRpc3BsYXk6YmxvY2siPg0KDQo8dWw+DQo8bGk+PGEgaHJlZj0iaHR0cHM6Ly93d3cubmFzZGFxdHJhZGVyLmNvbS9FQVNQL1RyYWRlckVBU1AuYXNweD9pZD1OZXdzU2lnbnVwIj5HZXQgRS1NYWlsIE5vdGlmaWNhdGlvbnM8L2E+PGEgaHJlZj0iaHR0cHM6Ly93d3cubmFzZGFxdHJhZGVyLmNvbS9FQVNQL1RyYWRlckVBU1AuYXNweD9pZD1OZXdzU2lnbnVwIj48aW1nIHN0eWxlPSJwYWRkaW5nLWxlZnQ6M3B4OyB3aWR0aDogOSU7IGhlaWdodDogOSUiIHNyYz0iL2ltYWdlcy9lbWFpbC5wbmciPjwvYT48L2xpPg0KPGxpPjxhIGhyZWY9Ii9UcmFkZXIuYXNweD9pZD1UcmFkZUhhbHRzIj5UcmFkaW5nIEhhbHRzPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iL1RyYWRlci5hc3B4P2lkPVByaWNlTGlzdFRyYWRpbmcyIj5QcmljaW5nPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iaHR0cHM6Ly93d3cubmFzZGFxdHJhZGVyLmNvbS9FQVNQL1RyYWRlckVBU1AuYXNweD9pZD1DRUZvcm0iPkNsZWFybHkgRXJyb25lb3VzIEZpbGluZzwvYT48L2xpPg0KPGxpPjxhIGhyZWY9Ii9UcmFkZXIuYXNweD9pZD1DYWxlbmRhciI+VHJhZGluZyBDYWxlbmRhcjwvYT48L2xpPg0KPGxpPjxhIGhyZWY9Ii9jb250ZW50L1RlY2huaWNhbFN1cHBvcnQvbmFzZGFxX3N5c19ob3Vycy5wZGYiPk1hcmtldCBTeXN0ZW0gSG91cnM8L2E+PC9saT4NCg0KDQoNCg0KPC9kaXY+PC9kaXY+DQoNCg0KDQoNCg0KPCEtLSBhY3RpdmF0ZSB0YWJzIHdpdGggSmF2YVNjcmlwdCAtLT4NCjxzY3JpcHQ+DQp2YXIgcGx1c0ltZyA9IG5ldyBJbWFnZSgpOw0KcGx1c0ltZyA9ICIvaW1hZ2VzL3BsdXMucG5nIjsNCnZhciBtaW51c0ltZyA9IG5ldyBJbWFnZSgpOw0KcGx1c0ltZyA9ICIvaW1hZ2VzL21pbnVzLnBuZyI7DQoNCmZ1bmN0aW9uIENvbnRyYWN0RXhwYW5kKGRpdklkLGltZ0lkKQ0Kew0KCXZhciBiID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZGl2SWQpOw0KCXZhciBpID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaW1nSWQpOw0KCWlmIChiLnN0eWxlLmRpc3BsYXkgPT0gIm5vbmUiKQ0KCXsNCgkJYi5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsNCgkJaS5zcmMgPSAiL2ltYWdlcy9taW51cy5wbmciOw0KCX0NCgllbHNlDQoJew0KCQliLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7DQoJCWkuc3JjID0gIi9pbWFnZXMvcGx1cy5wbmciOw0KCX0NCg0KfQ0KDQoNCg0KPC9zY3JpcHQ+DQoNCg0KDQoNCg0KDQoNCg0KPC9kaXY+Cgo8ZGl2IHN0eWxlPSJwb3NpdGlvbjogcmVsYXRpdmU7IG1hcmdpbi1sZWZ0OiA1cHg7Ij4NCjxkaXYgaWQ9ImFjY29yZGlvbiI+DQoNCjxoMiBjbGFzcz0iYWx0Ij48aW1nIGltZyBzcmM9Ii9pbWFnZXMvbWludXMucG5nIiAgaWQ9Im5ld3NDYWxsb3V0U2lnbiIgb25jbGljaz0iQ29udHJhY3RFeHBhbmQoJ25ld3NDYWxsb3V0JywnbmV3c0NhbGxvdXRTaWduJyk7IHJldHVybiBmYWxzZTsiPk5ld3M8L2gyPg0KDQo8ZGl2IGlkPSJuZXdzQ2FsbG91dCIgc3R5bGU9ImRpc3BsYXk6YmxvY2siPg0KDQo8dWwgc3R5bGU9InBhZGRpbmctbGVmdDogMjBweCI+DQo8cD48YSB0YXJnZXQ9ICJfbmV3IiBocmVmPSJUcmFkZXJOZXdzLmFzcHg/aWQ9RUNBMjAyNC0xOTgiPkNvcnBBY3QgLSBJbmZvcm1hdGlvbiBSZWdhcmRpbmcgdGhlIFJldmVyc2UgU3RvY2sgU3BsaXQsIFBhciBWYWx1Li4uPC9hPjwvcD4NCjxwPjxhIHRhcmdldD0gIl9uZXciIGhyZWY9IlRyYWRlck5ld3MuYXNweD9pZD1FVEEyMDI0LTI1Ij5UcmFkZXIgQWxlcnQgLSBSZW1pbmRlcjogTmFzZGFxIHRvIEludHJvZHVjZSBEeW5hbWljIE0tRUxPPC9hPjwvcD4NCjxwPjxhIHRhcmdldD0gIl9uZXciIGhyZWY9Ik1pY3JvTmV3cy5hc3B4P2lkPTIwMjQtMTkiPk9wdGlvbnMgQWxlcnQgLSBOYXNkYXEgUEhMWCBUbyBBbWVuZCBNaW5pbXVtIFF1b3RlIFNpemUgUmVxdWlyZW1lLi4uPC9hPjwvcD4NCjxwPjxhIHRhcmdldD0gIl9uZXciIGhyZWY9IlRyYWRlck5ld3MuYXNweD9pZD1mcG5ld3MyMDI0LTEwIj5GaW4gUHJvZCBOZXdzIC0gU2VsZWN0IE5hc2RhcSBJbmRleGVzIEV4cGVyaWVuY2VkIERhdGEgRGlzc2VtaW5hdC4uLjwvYT48L3A+DQo8cD48YSB0YXJnZXQ9ICJfbmV3IiBocmVmPSJUcmFkZXJOZXdzLmFzcHg/aWQ9RVRQMjAyNC0yOCI+TmV3IEVUUCBMaXN0aW5ncyAtIE5hc2RhcSB0byBCZWdpbiBMaXN0aW5nIENhcmJvbiBDb2xsZWN0aXZlIFNob3IuLi48L2E+PC9wPg0KPHA+PGEgdGFyZ2V0PSAiX25ldyIgaHJlZj0iVHJhZGVyTmV3cy5hc3B4P2lkPUVUUDIwMjQtMjciPk5ldyBFVFAgTGlzdGluZ3MgLSBOYXNkYXEgdG8gQmVnaW4gTGlzdGluZyBTdG9ja1NuaXBzIEFJLVBvd2VyZWQgLi4uPC9hPjwvcD4NCjxwPjxhIHRhcmdldD0gIl9uZXciIGhyZWY9Ik1pY3JvTmV3cy5hc3B4P2lkPTIwMjQtMTgiPk9wdGlvbnMgQWxlcnQgLSBOYXNkYXEgUEhMWCBUbyBBbWVuZCBNaW5pbXVtIFF1b3RlIFNpemUgUmVxdWlyZW1lLi4uPC9hPjwvcD4NCjxwPjxhIGhyZWY9IlRyYWRlci5hc3B4P2lkPWN1cnJlbnRoZWFkbGluZXMiPm1vcmU8L2E+PC9wPjxicj4NCjwvdWw+DQoNCjwvZGl2PjwvZGl2Pg0KDQoNCg0KDQo8IS0tIGFjdGl2YXRlIHRhYnMgd2l0aCBKYXZhU2NyaXB0IC0tPg0KPHNjcmlwdD4NCnZhciBwbHVzSW1nID0gbmV3IEltYWdlKCk7DQpwbHVzSW1nID0gIi9pbWFnZXMvcGx1cy5wbmciOw0KdmFyIG1pbnVzSW1nID0gbmV3IEltYWdlKCk7DQpwbHVzSW1nID0gIi9pbWFnZXMvbWludXMucG5nIjsNCg0KZnVuY3Rpb24gQ29udHJhY3RFeHBhbmQoZGl2SWQsaW1nSWQpDQp7DQoJdmFyIGIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChkaXZJZCk7DQoJdmFyIGkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpbWdJZCk7DQoJaWYgKGIuc3R5bGUuZGlzcGxheSA9PSAibm9uZSIpDQoJew0KCQliLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOw0KCQlpLnNyYyA9ICIvaW1hZ2VzL21pbnVzLnBuZyI7DQoJfQ0KCWVsc2UNCgl7DQoJCWIuc3R5bGUuZGlzcGxheSA9ICJub25lIjsNCgkJaS5zcmMgPSAiL2ltYWdlcy9wbHVzLnBuZyI7DQoJfQ0KDQp9DQoNCg0KDQo8L3NjcmlwdD4NCg0KDQoNCg0KDQoNCg0KDQo8L2Rpdj4KCmRk2eBok1BZvuBY3K4BA8Fazjli4FM=">
</div>
<div>
<input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="7E21AFCE">
</div>
<div id="brandinghp_pub_e">
<a class="logohp" href="/">
<img class="logo_web" src="/images/trader-logo-trans.png" alt="Return to the NASDAQTrader.com homepage">
<img class="logo_print" src="/images/trader_logo_print.png" alt="Return to the NASDAQTrader.com homepage">
</a>
<div id="toptabs">
<ul>
<li id="current"><a href="/"><span>U.S. Markets</span></a></li>
<!--<li><a href="http://www.nasdaqtrader.com/Micro.aspx?id=OptionsMarket"><span>U.S. Options/Futures</span></a></li>-->
<li><a href="http://www.nasdaqomxnordic.com"><span>Nordic Market</span></a></li>
<li><a href="http://www.nasdaqbaltic.com/market/?lang=en"><span>Baltic Market</span></a></li>
<li><a href="http://www.nasdaqomxnordic.com"><span>First North</span></a></li>
<li><a href="http://www.nasdaqomx.com/commodities"><span>NASDAQ Commodities Europe</span></a></li>
<!--<li><a href="http://www.nasdaqomx.com/transactions/markets/nlx"><span>NLX</span></a></li>-->
</ul>
</div> <!-- navigation -->
<!--snippets/toplinks.inc start here-->
<div id="toplinks_e" style="">
<p class="tl_1"><img src="/images/go-link_orange.png" alt="Symbol Directory"><a href="/Trader.aspx?id=symbollookup">Symbol Directory</a></p>
<p class="tl_2"><img src="/images/go-link.png" alt="Feedback"><a href="mailto:subscriber@nasdaq.com?subject=NASDAQtrader.com Web Site Feedback">Feedback</a></p>
</div>
<!--snippets/toplinks.inc end here-->
<!-- <object width="728" height="90">
<param name="movie" value="https://www.nasdaqtrader.com/trader/dotnet_images/N_market_shareBanner.swf"/>
<embed src="https://www.nasdaqtrader.com/trader/dotnet_images/N_market_shareBanner.swf" width="728" height="90"></embed>
</object> -->
</div>
</form>
<form class="gsc-search-box gsc-search-box-tools" accept-charset="utf-8">
<table cellspacing="0" cellpadding="0" role="presentation" class="gsc-search-box">
<tbody>
<tr>
<td class="gsc-input">
<div class="gsc-input-box" id="gsc-iw-id1">
<table cellspacing="0" cellpadding="0" role="presentation" id="gs_id50" class="gstl_50 gsc-input" style="width: 100%; padding: 0px;">
<tbody>
<tr>
<td id="gs_tti50" class="gsib_a"><input autocomplete="off" type="text" size="10" class="gsc-input" name="search" title="search" aria-label="search" id="gsc-i-id1" dir="ltr" spellcheck="false"
style="width: 100%; padding: 0px; border: none; margin: 0px; height: auto; outline: none;"></td>
<td class="gsib_b">
<div class="gsst_b" id="gs_st50" dir="ltr"><a class="gsst_a" href="javascript:void(0)" title="Clear search box" role="button" style="display: none;"><span class="gscb_a" id="gs_cb50" aria-hidden="true">×</span></a></div>
</td>
</tr>
</tbody>
</table>
</div>
</td>
<td class="gsc-search-button"><button class="gsc-search-button gsc-search-button-v2"><svg width="13" height="13" viewBox="0 0 13 13">
<title>search</title>
<path
d="m4.8495 7.8226c0.82666 0 1.5262-0.29146 2.0985-0.87438 0.57232-0.58292 0.86378-1.2877 0.87438-2.1144 0.010599-0.82666-0.28086-1.5262-0.87438-2.0985-0.59352-0.57232-1.293-0.86378-2.0985-0.87438-0.8055-0.010599-1.5103 0.28086-2.1144 0.87438-0.60414 0.59352-0.8956 1.293-0.87438 2.0985 0.021197 0.8055 0.31266 1.5103 0.87438 2.1144 0.56172 0.60414 1.2665 0.8956 2.1144 0.87438zm4.4695 0.2115 3.681 3.6819-1.259 1.284-3.6817-3.7 0.0019784-0.69479-0.090043-0.098846c-0.87973 0.76087-1.92 1.1413-3.1207 1.1413-1.3553 0-2.5025-0.46363-3.4417-1.3909s-1.4088-2.0686-1.4088-3.4239c0-1.3553 0.4696-2.4966 1.4088-3.4239 0.9392-0.92727 2.0864-1.3969 3.4417-1.4088 1.3553-0.011889 2.4906 0.45771 3.406 1.4088 0.9154 0.95107 1.379 2.0924 1.3909 3.4239 0 1.2126-0.38043 2.2588-1.1413 3.1385l0.098834 0.090049z">
</path>
</svg></button></td>
<td class="gsc-clear-button">
<div class="gsc-clear-button" title="clear results"> </div>
</td>
</tr>
</tbody>
</table>
</form>
Text Content
* U.S. Markets * Nordic Market * Baltic Market * First North * NASDAQ Commodities Europe Symbol Directory Feedback * U.S. Market EQUITIES * Nasdaq * BX * PSX * Exchange Traded Funds * NextShares OPTIONS * BX Options * NOM * PHLX * ISE * GEMX * MRX MEMBERSHIP * Trading Products ORDER/EX MANAGEMENT * IPO Indicator * TradeInfo * TradeInfo for Options NASDAQ CROSSES * Opening/Closing * Net Order Imbalance Information EXCHANGE TRADED FUNDS * ETF Home * Nasdaq Listed ETPs and their DLPs * MQP SEC Approval Order * Nasdaq Indexes and ETFs * Nasdaq-Listed Exchange Traded Funds Data * Information Circulars * ETP Tier 1 List * Listing ETPs on Nasdaq OPTIONS AND FUTURES * FX Options * MSCI Index Options TRADE REPORTING * FINRA/Nasdaq TRF * WorkX RISK MANAGEMENT * Nasdaq Risk Platform * Post-Trade Risk Management COMPLIANCE * Compliance Dashboard * Background Check Service TRADING SUPPORT * Contact * Price List * Agreements and Forms * Specifications * Nasdaq System Settings * BX System Settings * PSX System Settings FACT SHEETS AND GUIDES * Market Data FEATURED PRODUCTS * Nasdaq Basic Canada * Nasdaq TotalView * Nasdaq Fixed Income Market Data * Global Index Watch * US Equity Tick History CURATED DATA * Nasdaq Smart Options MARKET DATA PRODUCT MATRIX EQUITIES * The Nasdaq Stock Market * Nasdaq BX * Nasdaq PSX OPTIONS AND FUTURES * Nasdaq PHLX * The Nasdaq Options Market * Nasdaq BX Options * Nasdaq ISE * Nasdaq GEMX * Nasdaq MRX GLOBAL INDEXES AND ETFS * Global Index Data Service (GIDS) * Global Index Watch (GIW) * Index Data Policy EQUITY ANALYTICAL DATA NASDAQ FUND NETWORK DATA POLICIES AND ADMINISTRATION TECHNICAL DOCUMENTATION * Specifications * UDP Address List-US Data Feeds * Bandwidth Report PRICE LIST - U.S. PRICE LIST - EUROPEAN MARKET DATA VENDOR LIST * Connectivity TRADING ACCESS * Co-Location & Wireless Connectivity * Points of Presence * Extranets * Direct Connect * Direct Connect Providers * Disaster Recovery HOSTING SERVICES * Space & Power * Low Latency Connectivity * Connecting to other Liquidity Providers EQUITY PROTOCOLS * Dedicated OUCH * OUCH * RASHPort * FIX * CTCI * QIX TESTING * Testing Facility OPTIONS PROTOCOLS * OTTO * FIX * SQF MARKET DATA PROTOCOLS * Specifications * UDP/IP Addresses CONNECTIVITY MATRIX MARKET DATA VENDORS * Regulation REGULATORY INITIATIVES TRADING HALTS CIRCUIT BREAKERS REGULATION NMS BACKGROUND CHECK SERVICE REGULATION SHO * Regulation SHO * Threshold List * Short Sale Circuit Breakers REGULATORY DATA * SEC Rule 605 Report * Short Interest * Daily MP Position Report * Information Circulars * Options LU/LD Reports TRANSACTIONS POLICIES * Clearly Erroneous * Obvious Error * Obvious Error Form DISCIPLINARY ACTIONS * Nasdaq * Nasdaq Options * Nasdaq PHLX * Nasdaq BX * Nasdaq ISE RULE MANUALS * Nasdaq/NOM * BX * PHLX/PSX * SCCP * BSECC MARKET REGULATION * FAQs MARKETWATCH REGULATORY CONTACTS INDUSTRY REGULATORS * FINRA * SEC * CFTC * Market Statistics EQUITIES STATISTICS * Monthly Market Share * Intraday Market Volume * Market Share Stats by Symbol * M-ELO Transparency Statistics OPTIONS STATISTICS * Monthly Market Share * Intraday Market Volume * PHLX Volume & Settlement NASDAQ INDEXES REPORTS * Daily MP Position Report * Daily Market Summary * Daily Market Files * Monthly MP Volume * News EQUITY NEWS * Trader Alerts * Technical Alerts * Regulatory Alerts * ETP New Listings Trader Alerts * Corporate Action Alerts OTHER NEWS * UPC Notices OPTIONS NEWS * Trader Alerts * Technical Alerts * Regulatory Alerts HISTORICAL OPTIONS NEWS ISE/GEMX/MRX * MICS * RICs * Reg SCI MARKET DATA NEWS * Data News * Data Technical * Financial Products * Nasdaq Fund Network * European News NASDAQ FIXED INCOME * Nasdaq Fixed Income News UTP NEWS * UTP Vendor News SYSTEM STATUS SUBSCRIBE TO ALERTS RSS FEEDS * News * Trade Halts * Support PRICE LIST * Trading Services * Market Data AGREEMENTS AND FORMS * Trading Services * Market Data * NTS Policies TESTING * Nasdaq Testing Facility * Saturday Testing Policy TECHNICAL SPECIFICATIONS * Trading Services * Market Data TECHNICAL DOCUMENTATION * Specifications * UDP Address List-US Data Feeds * Bandwidth Report FACT SHEETS AND GUIDES DIGITAL CERTIFICATE HELP CONTACT INFORMATION SYSTEM HOURS TRADING CALENDAR SUBSCRIBE TO ALERTS SYSTEM SETTINGS * Nasdaq * BX * PSX * Product Login TRADING SERVICES * IPO Workstation * Co-Lo Console * Nasdaq Fixed Income * QView * InfoCenter * MY Nasdaq * Nasdaq Billing MARKET DATA * Daily List * Data Feed Status * Nasdaq Fixed Income * Fundamental Data * Historical ITCH * Nasdaq Fund Network * Net Order Imbalance * Online Vendor Rtg REPORTS * Report HQ Search: × search * Market Vol * Top Matched * Top Matched BX * Top Matched PSX U.S. MARKET VOLUME Full Market Volume Page Volume Trades Dollar Volume Set Default Tab Download Most Recent Day Past 30 Days EQUITIES MARKET VOLUME Equities Tape A Tape B Tape C US Equity Total Nasdaq 165,425,209 96,431,467 364,108,252 625,964,928 Nasdaq % 12.3% 11.1% 14.6% 13.3% BX 4,560,467 4,166,882 6,824,779 15,552,128 BX % 0.3% 0.5% 0.3% 0.3% PSX 2,630,519 3,718,595 5,258,190 11,607,304 PSX % 0.2% 0.4% 0.2% 0.2% FINRA/TRF Tape A Tape B Tape C FINRA/TRF Total FINRA/Nasdaq TRF™ Carteret 578,915,288 339,831,672 1,159,501,851 2,078,248,811 FINRA/Nasdaq TRF™ Carteret % 43.2% 39.0% 46.5% 44.2% FINRA/Nasdaq TRF™ Chicago 2,517,349 951,891 7,433,765 10,903,005 FINRA/Nasdaq TRF™ Chicago % 0.2% 0.1% 0.3% 0.2% Total 1,340,014,686 872,384,233 2,494,516,177 4,706,915,096 Data is updated every 1 minute. Last Update as of 04/18/2024 12:10 Full Options Market Volume Page OPTIONS MARKET VOLUME Options Volume Market Share The Nasdaq Options Market 1,069,131 6.00% BX Options Market 421,582 2.00% PHLX 1,699,998 9.00% Market Volume 18,910,546 Data is updated every 1 minute and may be delayed at least 10 minutes. Last Update 04/18/2024 11:59 Data is updated every minute. Refer to NASDAQ Market Share Terminology for more information regarding Matched Handled volume. NASDAQ BX - TOP LIST BY MATCHED VOLUME Tape A Symbol Matched Shares Tape B Symbol Matched Shares Tape C Symbol Matched Shares Source: The NASDAQ BX Market NASDAQ PSX - TOP LIST BY MATCHED VOLUME Tape A Symbol Matched Shares Tape B Symbol Matched Shares Tape C Symbol Matched Shares Source: The NASDAQ PSX Market TOTAL BX OPTIONS VOLUME: 62,052 LAST UPDATED 08/01/2019 18:02 Top 10 Equities Options Rank Symbol Name Volume 1 MDR MCDERMOTT INT PANAMA 4,919 2 FXI ISHARES CHINA 2,291 3 BYND BEYOND MEAT, INC. 1,729 4 SPY SPDR S&P 500 ETF TRUST 1,580 5 ASHR XTRACKERS HARVEST CS 1,503 6 XLI INDUSTRIAL SPDR 1,290 7 EEM ISHARES MSCI EMERGING MARKETS ETF 1,163 8 GE GEN ELECTRIC CO 1,121 9 SNAP SNAP Inc. 1,016 10 BABA ALIBABA GROUP HL LTD 973 Source: NASDAQ BX Options Market. Data is updated every 15 to 20 minutes. TOTAL NOM OPTIONS VOLUME: 2,678,890 LAST UPDATED 08/01/2019 18:02 Top 10 Equities Options Rank Symbol Name Volume 1 SPY SPDR S&P 500 ETF TRUST 392,605 2 AAPL APPLE INC. 132,778 3 QQQ POWERSHARES QQQ TR 1 90,663 4 EWZ ISHARE MSCI BRAZIL 69,047 5 AMD ADV MICRO DEVICES 58,594 6 VXX Ipath Series B S&P 500 Vix 55,048 7 BABA ALIBABA GROUP HL LTD 49,465 8 MSFT MICROSOFT CORP 42,774 9 FB FACEBOOK INC 40,292 10 FXI ISHARES CHINA 35,274 Source: NASDAQ Options Market. Data is updated every 15 to 20 minutes. Equities Options Volume Index Options Volume TOTAL PHLX EQUITY OPTIONS VOLUME: 1,226,111 LAST UPDATED 11/04/2019 17:35 Top 10 Equities Options Rank Symbol Name Volume 1 FXI ISHARES CHINA 139,264 2 EEM ISHARES MSCI EMERGING MARKETS ETF 114,988 3 SPY SPDR S&P 500 ETF TRUST 84,367 4 T AT&T INCCOM 75,725 5 EWZ ISHARE MSCI BRAZIL 71,752 6 VXX Ipath Series B S&P 500 Vix 56,429 7 AAPL APPLE INC. 48,613 8 GE GEN ELECTRIC CO 38,379 9 AMD ADV MICRO DEVICES 35,123 10 BABA ALIBABA GROUP HL LTD 33,992 Source: NASDAQ PHLX. Data is updated every 15 to 20 minutes. TOTAL PHLX INDEX OPTIONS VOLUME: 2,679 LAST UPDATED 11/04/2019 17:36 Top 10 Index Options Rank Index Symbol Index Name Volume 1 NDX NASDAQ 100 INDEX NEW CALC 2,655 2 SOX SEMICONDUCTOR INDEX 20 3 BKX KBW BANK INDEX 4 TOTAL PHLX WORLD CURRENCY OPTIONS VOLUME: 103 LAST UPDATED 02/05/2014 17:41 Rank Symbol Currency Volume 1 XDC PHLX CANADIAN DOLLAR 65 2 XDE PHLX EURO 30 3 XDN PHLX JAPANESE YEN 6 4 XDA PHLX AUSTRALIAN DOLLAR 2 SYMBOL LOOKUP Stock Options Bonds Mkt. Participant GO SYSTEM STATUS Apr 18, 2024 12:10:45 ET RESOURCES * Get E-Mail Notifications * Trading Halts * Pricing * Clearly Erroneous Filing * Trading Calendar * Market System Hours NEWS CorpAct - Information Regarding the Reverse Stock Split, Par Valu... Trader Alert - Reminder: Nasdaq to Introduce Dynamic M-ELO Options Alert - Nasdaq PHLX To Amend Minimum Quote Size Requireme... Fin Prod News - Select Nasdaq Indexes Experienced Data Disseminat... New ETP Listings - Nasdaq to Begin Listing Carbon Collective Shor... New ETP Listings - Nasdaq to Begin Listing StockSnips AI-Powered ... Options Alert - Nasdaq PHLX To Amend Minimum Quote Size Requireme... more * Nasdaq Trader Popular Sections: * Performance Statistics * Email Sign-Up * * © Copyright * Disclaimer * Trademarks * Privacy Statement * Contact Us * Help * Feedback * Share Site Uses Cookies This website utilizes cookies and similar technologies for functionality and other purposes. Your use of this website constitutes your acceptance of cookies. To learn more about our cookies and the choices we offer, please see the link to our Cookie Policy. Ok, got itPrivacy Policy