Cgo8P3BocAoKJHByb2R1Y3QgPSBnZXRfY3VycmVudF9wcm9kdWN0KCk7CgppZihpc19hKCRwcm9kdWN0LCAiV0NfUHJvZHVjdCIpKQp7CiAgaWYoJHByb2R1Y3QtPmlzX29uX3NhbGUoKSkKICB7Cj8+PGRpdiBjbGFzcz0icm95YWwtcHJvZHVjdC1kaXNjb3VudCI+PD9waHAKICAKICAkc2FsZV9wcmljZSA9ICRwcm9kdWN0LT5nZXRfc2FsZV9wcmljZSgpOwogICRyZWd1bGFyX3ByaWNlID0gJHByb2R1Y3QtPmdldF9yZWd1bGFyX3ByaWNlKCk7CiAgJHByaWNlX2RpZmYgPSAkcmVndWxhcl9wcmljZSAtICRzYWxlX3ByaWNlOwoJICAKICBpZiAoJHByaWNlX2RpZmYgPiAxOTkpIHsKICBwcmludCAic3BhcmEgIiAuIHJvdW5kKCRwcmljZV9kaWZmKSAuICIga3IiOwp9IGVsc2UgewogICRwZXJjZW50YWdlID0gKCgkcmVndWxhcl9wcmljZSAtICRzYWxlX3ByaWNlKSAqIDEwMCkgLyAkcmVndWxhcl9wcmljZTsKICBwcmludCByb3VuZCgkcGVyY2VudGFnZSkgLiAiJSI7Cn0gCgkgIAoJICAKICAKICAKPz48L2Rpdj48P3BocAogIH0KLyp9ZWxzZXsKPz48ZGl2IGNsYXNzPSJyb3lhbC1wcm9kdWN0LWRpc2NvdW50Ij48P3BocAogIHByaW50ICIwJSI7Cj8+PC9kaXY+PD9waHAqLwp9Cgo/Pg==
PD9waHAKCiRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwoKaWYoaXNfYSgkcHJvZHVjdCwgIldDX1Byb2R1Y3QiKSkKewogIGlmKCRwcm9kdWN0LT5pc19vbl9zYWxlKCkpCiAgewoJICAKCSAgJGV4dHJhX2NsYXNzID0gKGNhbXBhaWduX2lzX2FjdGl2ZSgxOTYwNCkgJiYgY2FtcGFpZ25faGFzX3Byb2R1Y3QoMTk2MDQsICRwcm9kdWN0LT5nZXRfaWQoKSkpID8gImJsYWNrLXdlZWsiIDogIiI7CgkgICR0ZXh0ID0gKGNhbXBhaWduX2lzX2FjdGl2ZSgxOTYwNCkgJiYgY2FtcGFpZ25faGFzX3Byb2R1Y3QoMTk2MDQsICRwcm9kdWN0LT5nZXRfaWQoKSkpID8gIkN5YmVyIFdlZWsiIDogIkthbXBhbmoiOwogID8+Cgo8ZGl2IGlkPSJkaXZfYmxvY2stNTItMTI0NTgiIGNsYXNzPSJjdC1kaXYtYmxvY2siPgoJPGRpdiBpZD0idGV4dF9ibG9jay01My0xMjQ1OCIgY2xhc3M9ImN0LXRleHQtYmxvY2sgYW5nbGVkLWJhbm5lciA8P3BocCBwcmludCAkZXh0cmFfY2xhc3M7ID8+Ij4KCQk8P3BocCBwcmludCAkdGV4dDsgPz4KCTwvZGl2Pgo8L2Rpdj4KCjw/cGhwCiAgfQp9Cj8+
PD9waHAKCiRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwppZihpc19hKCRwcm9kdWN0LCAiV0NfUHJvZHVjdCIpKQp7CgogICRjYXRlZ29yaWVzID0gJHByb2R1Y3QtPmdldF9jYXRlZ29yeV9pZHMoKTsKICAKICBmb3JlYWNoKCRjYXRlZ29yaWVzIGFzICRjYXRlZ29yeSkKICB7CiAgIAkJJGhhc19iYW5uZXIgPSBnZXRfZmllbGQoInZpc2FfYmFubmVyX3BhX3Byb2R1a3QiLCAicHJvZHVjdF9jYXRfIiAuICRjYXRlZ29yeSk7CiAgICAKICAgIAlpZigkaGFzX2Jhbm5lciA9PSB0cnVlKQogICAgICAgIHsKICAgICAgICAgICRjb2xvciA9IGdldF9maWVsZCgiYmFubmVyZmFyZyIsICJwcm9kdWN0X2NhdF8iIC4gJGNhdGVnb3J5KTsKICAgICAgICAgICR0ZXh0ID0gZ2V0X2ZpZWxkKCJiYW5uZXJ0ZXh0IiwgInByb2R1Y3RfY2F0XyIgLiAkY2F0ZWdvcnkpOwogICAgICAgICAgJHRleHRjb2xvciA9IGdldF9maWVsZCgiYmFubmVydGV4dGZhcmciLCAicHJvZHVjdF9jYXRfIiAuICRjYXRlZ29yeSk7CiAgICAgICAgICAKICAgICAgICAgIHByaW50ICc8ZGl2IGNsYXNzPSJyb3lhbC1wcm9kdWN0LWJhbm5lciBjYXJkIiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjonIC4gJGNvbG9yIC4gJyI+JzsKICAJCSAgcHJpbnQgJzxkaXYgY2xhc3M9InJveWFsLXByb2R1Y3QtYmFubmVyLXRleHQiIHN0eWxlPSJjb2xvcjonIC4gJHRleHRjb2xvciAuICciPic7CiAgCQkgIHByaW50ICR0ZXh0OwogIAkJICBwcmludCAnPC9kaXY+JzsKICAJCSAgcHJpbnQgJzwvZGl2Pic7CiAgICAgICAgfQogIH0KCQoJaWYoZ2V0X2ZpZWxkKCJwcmUtb3duZWQiLCAkcHJvZHVjdC0+Z2V0X2lkKCkpID09IDEpCgl7CiAgICAgICAgICBwcmludCAnPGRpdiBjbGFzcz0icm95YWwtcHJvZHVjdC1iYW5uZXIgY2FyZCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IzNhNzRmZiI+JzsKICAJCSAgcHJpbnQgJzxkaXYgY2xhc3M9InJveWFsLXByb2R1Y3QtYmFubmVyLXRleHQiIHN0eWxlPSJjb2xvcjojZmZmIj4nOwogIAkJICBwcmludCAiUHJlLW93bmVkIjsKICAJCSAgcHJpbnQgJzwvZGl2Pic7CiAgCQkgIHByaW50ICc8L2Rpdj4nOwoJfQogIAp9Cgo/Pg==
PD9waHAKCiRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwoKaWYoaXNfYSgkcHJvZHVjdCwgIldDX1Byb2R1Y3QiKSkKewogICRpZCA9ICRwcm9kdWN0LT5nZXRfaWQoKTsKICAkZGVtbyA9IGZhbHNlOwogIGlmKGdldF9maWVsZCgiZGVtb19nYSIsICRpZCkgPT0gdHJ1ZSAmIGdldF9maWVsZCgiX3N0b2NrX3N0IiwgJGlkKSA9PSAwICYgZ2V0X2ZpZWxkKCJfc3RvY2tfZ2EiLCAkaWQpID09IDEpOiAkZGVtbyA9IHRydWU7IGVuZGlmOwogIGlmKGdldF9maWVsZCgiZGVtb19zdCIsICRpZCkgPT0gdHJ1ZSAmIGdldF9maWVsZCgiX3N0b2NrX2dhIiwgJGlkKSA9PSAwICYgZ2V0X2ZpZWxkKCJfc3RvY2tfc3QiLCAkaWQpID09IDEpOiAkZGVtbyA9IHRydWU7IGVuZGlmOwoKICBpZigkZGVtbyk6cHJpbnQgJzxzcGFuIGNsYXNzPSJwcm9kdWN0LWNhcmQtZGVtb2V4Ij5kZW1vPC9zcGFuPic7ZW5kaWY7IAp9Cj8+
PD9waHAKCiRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwoKaWYoaXNfYSgkcHJvZHVjdCwgIldDX1Byb2R1Y3QiKSkKewoJCj8+CjxhIGlkPSJsaW5rLTQ3LTEyNDU4IiBjbGFzcz0iY3QtbGluayIgaHJlZj0iPD9waHAgcHJpbnQgJHByb2R1Y3QtPmdldF9wZXJtYWxpbmsoKTsgPz4iIHRhcmdldD0iX3NlbGYiPgogIAo8P3BocCBwcmludCBnZXRfdGhlX3Bvc3RfdGh1bWJuYWlsKCAkcHJvZHVjdC0+Z2V0X2lkKCksICdtZWRpdW0nLCBhcnJheSggJ2NsYXNzJyA9PiAnYXV0by1zY2FsZScgKSApOyA/PgoJCjwvYT4KPD9waHAKfQoKPz4=
PD9waHAKCiRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwoKaWYoaXNfYSgkcHJvZHVjdCwgIldDX1Byb2R1Y3QiKSkKewokaWQgPSAkcHJvZHVjdC0+Z2V0X2lkKCk7CgppZihpc19hKCRwcm9kdWN0LCAiV0NfUHJvZHVjdCIpKXsKICBwcmludCAiPGEgaHJlZj0nIiAuIGdldF9wZXJtYWxpbmsoICRwcm9kdWN0LT5nZXRfaWQoKSApIC4gIicgY2xhc3M9J3Byb2R1Y3QtY2FyZC10aXRsZScgPiIgLiAkcHJvZHVjdC0+Z2V0X3RpdGxlKCkgLiAiPC9hPiI7CgoKfWVsc2V7CiAgcHJpbnQgIlByb2R1a3RuYW1uIjsKfQp9ZWxzZXsKIHByaW50ICJJbmdldCBwcm9kdWt0bmFtbiBoaXR0YWRlcyI7IAp9Cgo/Pg==
PD9waHAKJHByb2R1Y3QgPSBnZXRfY3VycmVudF9wcm9kdWN0KCk7CgppZihpc19hKCRwcm9kdWN0LCAiV0NfUHJvZHVjdCIpKQp7CnByaW50ICI8c3BhbiBzdHlsZT0nZGlzcGxheTpibG9jaztoZWlnaHQ6MTNweDsnPiIuJHByb2R1Y3QtPmdldF9za3UoKS4iIDwvc3Bhbj4iOwp9Cj8+
PD9waHAKCgovLyBzaG93X2Rlc2Nfbm9fYXR0cwoKJHByb2R1Y3QgPSBnZXRfY3VycmVudF9wcm9kdWN0KCk7CgppZihpc19hKCRwcm9kdWN0LCAiV0NfUHJvZHVjdCIpKQp7CgogICRjYXRlZ29yeV9pZHMgPSAkcHJvZHVjdC0+Z2V0X2NhdGVnb3J5X2lkcygpOwogIC8qJGNhdGVnb3JpZXMgPSBnZXRfdGVybXMoWwogICAgICAidGVybV90YXhvbm9teV9pZCIgPT4gJGNhdGVnb3J5X2lkcwogIF0pOyovCgogICR2YWx1ZXNfdG9fcHJpbnQgPSBbXTsKICBpZighZW1wdHkoJGNhdGVnb3J5X2lkcykgJiYgY291bnQoJGNhdGVnb3J5X2lkcykgPiAwKQogIHsKICAgIGZvcmVhY2goJGNhdGVnb3J5X2lkcyBhcyAkY2F0ZWdvcnlfaWQpCiAgICB7CgoJCSRjYXRlZ29yeSA9ICJwcm9kdWN0X2NhdF8iIC4gJGNhdGVnb3J5X2lkOwoJCSRub19hdHRzID0gZ2V0X2ZpZWxkKCJzaG93X2Rlc2Nfbm9fYXR0cyIsICRjYXRlZ29yeSk7CgkJCgkJaWYoJG5vX2F0dHMgPT0gdHJ1ZSkKCQl7CgkJCSR2YWx1ZXNfdG9fcHJpbnQgPSBbXTsKCQkJYnJlYWs7CgkJfQoJCQogICAgICAkaGFzX3Jvd3MgPSBoYXZlX3Jvd3MoImF0dHJpYnV0X2F0dF92aXNhX3BhX3Byb2R1a3RyYWQiLCAkY2F0ZWdvcnkpOwoKICAgICAgaWYoISRoYXNfcm93cykKICAgICAgICBjb250aW51ZTsKCiAgICAgICRmaWVsZHMgPSBnZXRfZmllbGQoImF0dHJpYnV0X2F0dF92aXNhX3BhX3Byb2R1a3RyYWQiLCAkY2F0ZWdvcnkpOyAvLyBnZXQgYWxsIGZpZWxkcyBpbiByZXBlYXRlcgoKICAgICAgaWYoIWVtcHR5KCRmaWVsZHMpKQogICAgICB7CiAgICAgICAgZm9yZWFjaCgkZmllbGRzIGFzICRmaWVsZCkKICAgICAgICB7CiAgICAgICAgICBpZihjb3VudCgkdmFsdWVzX3RvX3ByaW50KSA+PSA1KXticmVhazt9CgkJCQogICAgICAgICAgZm9yZWFjaCgkZmllbGQgYXMgJGtleSA9PiAkdmFsdWUpCiAgICAgICAgICB7CgkJCSAgJGF0dHJfdmFsdWUgPSAkcHJvZHVjdC0+Z2V0X2F0dHJpYnV0ZSgkdmFsdWUpOwogICAgICAgICAgICAgIGlmKCFlbXB0eSgkYXR0cl92YWx1ZSkpCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYoJGF0dHJfdmFsdWUgIT0gIk9zcGVjaWZpY2VyYXQiKQogICAgICAgICAgICAgICAgewoJCQkJCWlmKCFpbl9hcnJheSgkYXR0cl92YWx1ZSwgJHZhbHVlc190b19wcmludCkpCgkJCQkJewogICAgICAgICAgICAgICAgICAJCSR2YWx1ZXNfdG9fcHJpbnRbXSA9ICRhdHRyX3ZhbHVlOyAvLyBhZGQgdGF4b25vbXkgdG8gbGlzdAogICAgICAgICAgICAgICAgCX0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQoKICAgIH0KICB9CiAgCiAgICBpZihjb3VudCgkdmFsdWVzX3RvX3ByaW50KSA+IDApCgl7CiAgICAJcHJpbnQgJzx1bCBjbGFzcz0icHJvZHVrdGtvcnQtYXR0ciI+PGxpPjxpIGNsYXNzPSJmYXMgZmEtY2hlY2siPjwvaT4nIC4gaW1wbG9kZSggJzwvbGk+PGxpPjxpIGNsYXNzPSJmYXMgZmEtY2hlY2siPjwvaT4nLCAkdmFsdWVzX3RvX3ByaW50KSAuICc8L2xpPjwvdWw+JzsKCX1lbHNlewogICAgICAgIAoJCSRkZXNjID0gJHByb2R1Y3QtPmdldF9kZXNjcmlwdGlvbigpOwoJCSRkZXNjID0gZG9fc2hvcnRjb2RlKCRkZXNjKTsKCQkkZGVzYyA9IHN0cmlwX3RhZ3MoJGRlc2MpOwoJCQoJCWlmKCFlbXB0eSgkZGVzYykpCgkJewoJCQlpZihzdHJsZW4oJGRlc2MpID4gMTQwKQoJCQl7CgkJCQkkZGVzYyA9IHN1YnN0cigkZGVzYywgMCwgMTQwKSAuICIuLi4iOwoJCQl9CgkJfQoJCQoKCQlwcmludCAnPGRpdiBjbGFzcz0icHJvZHVjdC1zaG9ydC1kZXNjIj4nIC4gJGRlc2MgLiAnPC9kaXY+JzsKICAgIH0KfQoKPz4=
PGRpdiBpZD0icm95YWwtcHJvZHVjdC1wcmljZSI+CiAgPD9waHAKCiRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwoKaWYoaXNfYSgkcHJvZHVjdCwgIldDX1Byb2R1Y3QiKSkKewo/PgoKICAgIAo8P3BocAogCmlmKCRwcm9kdWN0LT5pc19vbl9zYWxlKCkpCnsKPz4KICAgICAgPGRpdiBpZD0icm95YWwtcHJvZHVjdC1wcmljZS1yZWd1bGFyIiBjbGFzcz0ic3RyaWtlb3V0Ij48P3BocCBwcmludCAkcHJvZHVjdC0+Z2V0X3JlZ3VsYXJfcHJpY2UoKTsgPz4ga3I8L2Rpdj48YnIgLz4KICAgICAgPGRpdiBpZD0icm95YWwtcHJvZHVjdC1wcmljZS1zYWxlIj48P3BocCBwcmludCAkcHJvZHVjdC0+Z2V0X3NhbGVfcHJpY2UoKTsgPz4ga3I8L2Rpdj4KPD9waHAKfWVsc2V7CnByaW50ICRwcm9kdWN0LT5nZXRfcHJpY2UoKSAuICIga3IiOwp9Cn0KZWxzZQp7CiAgcHJpbnQgIjAga3IiOwp9Cgo/Pgo8L2Rpdj4=
PD9waHAKCgokcHJvZHVjdCA9IGdldF9jdXJyZW50X3Byb2R1Y3QoKTsKCmlmKGlzX2EoJHByb2R1Y3QsICJXQ19Qcm9kdWN0IikgJiYgIXByb2R1Y3RfaXNfYnVuZGxlKCRwcm9kdWN0KSAmJiAkcHJvZHVjdC0+Z2V0X2NhdGFsb2dfdmlzaWJpbGl0eSgpID09ICJ2aXNpYmxlIiAmJiAhcHJvZHVjdF9pc19zZXJ2aWNlX2FydGljbGUoKSkKewogIAogICRnYSA9IGdldF9maWVsZCgiX3N0b2NrX2dhX2NvbG9yIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAkZ2FfcyA9IGdldF9maWVsZCgiX3N0b2NrX2dhIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAkZ2FfaSA9IGdldF9maWVsZCgiX3N0b2NrX2dhX2luY29taW5nIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAkZ2FfZCA9IGdldF9maWVsZCgiZGVtb19nYSIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CiAgCiAgJHN0ID0gZ2V0X2ZpZWxkKCJfc3RvY2tfc3RfY29sb3IiLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwogICRzdF9zID0gZ2V0X2ZpZWxkKCJfc3RvY2tfc3QiLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwogICRzdF9pID0gZ2V0X2ZpZWxkKCJfc3RvY2tfc3RfaW5jb21pbmciLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwogICRzdF9kID0gZ2V0X2ZpZWxkKCJkZW1vX3N0IiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAKICAkbGV2ID0gZ2V0X2ZpZWxkKCJfc3RvY2tfcmVtb3RlX2NvbG9yIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICBpZihlbXB0eSgkbGV2KSkKICAgICRsZXYgPSAiZ3JheSI7CiAgJGxldl9zID0gZ2V0X2ZpZWxkKCJfc3RvY2tfcmVtb3RlIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAkbGV2X2kgPSBnZXRfZmllbGQoIl9zdG9ja19yZW1vdGVfaW5jb21pbmciLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwogIAogICRkZWxpdmVyeSA9ICJncmF5IjsKICAKICAkc3RvY2tzID0gWyRnYSwgJHN0LCAkbGV2XTsKICAgIAogIGlmKGluX2FycmF5KCJibHVlIiwgJHN0b2NrcykpCiAgICAgICRkZWxpdmVyeSA9ICJibHVlIjsKCSAgICAKICBpZihpbl9hcnJheSgib3JhbmdlIiwgJHN0b2NrcykpCiAgICAgICRkZWxpdmVyeSA9ICJvcmFuZ2UiOwogICAgCiAgaWYoaW5fYXJyYXkoImdyZWVuIiwgJHN0b2NrcykpCiAgICAgICRkZWxpdmVyeSA9ICJncmVlbiI7CgogICR0b3QgPSAiZ3JheSI7CiAgaWYoaW5fYXJyYXkoImJsdWUiLCAkc3RvY2tzKSkKCSAgJHRvdCA9ICJibHVlIjsKICBpZihpbl9hcnJheSgib3JhbmdlIiwgJHN0b2NrcykpCgkgICR0b3QgPSAib3JhbmdlIjsKICBpZihpbl9hcnJheSgiZ3JlZW4iLCAkc3RvY2tzKSkKCSAgJHRvdCA9ICJncmVlbiI7CgkKICAkdG90X3MgPSAkZ2FfcyArICRzdF9zICsgJGxldl9zOwogICR0b3RfaSA9ICRnYV9pICsgJHN0X2kgKyAkbGV2X2k7CgkKCj8+Cgo8ZGl2IGNsYXNzPSJwcm9kdWN0LXN0b2NrLWxpc3QiPgoKCTw/cGhwIGlmKCR0b3RfcyA+IDAgfHwgJHRvdF9pID4gMCB8fCAkZGVsaXZlcnkgPT0gImJsdWUiKSB7ID8+Cgk8ZGl2IGNsYXNzPSJwcm9kdWN0LXN0b2NrLWxpc3QtaXRlbSI+CgkgIAoJICA8ZGl2IGNsYXNzPSJwcm9kdWN0LXN0b2NrLWxlZnQiPk9ubGluZTo8L2Rpdj4gPGkgY2xhc3M9ImZhcyBmYS1zcXVhcmUgcHJvZHVjdC1zdG9jay08P3BocCBwcmludCAkdG90OyA/PiI+PC9pPgoJCQoJCTw/cGhwIHByaW50ICgkdG90X3MgPiAxMCkgPyAiMTArIiA6ICR0b3RfczsgPz4gc3QKCQkKCQk8c3BhbiBjbGFzcz0icHJvZHVjdC1zdG9jay1leHRyYSI+CgkJPD9waHAgaWYoJHRvdF9zID09IDAgJiYgJHRvdF9pID4gMCkgeyA/PiAoPD9waHAgcHJpbnQgKCR0b3RfaSA+IDEwKSA/ICIxMCsiIDogJHRvdF9pOyA/PiBzdCBww6UgdsOkZyk8P3BocCB9ID8+CgkJPC9zcGFuPgoJPC9kaXY+Cgk8P3BocCB9ID8+CgogIDw/cGhwCiAgaWYoJGdhX3MgPiAwIHx8ICRnYV9pID4gMCB8fCAkZGVsaXZlcnkgPT0gImJsdWUiKXsgPz4KICAJPGRpdiBjbGFzcz0icHJvZHVjdC1zdG9jay1saXN0LWl0ZW0iPjxkaXYgY2xhc3M9InByb2R1Y3Qtc3RvY2stbGVmdCI+R8OkdmxlOjwvZGl2PjxpIGNsYXNzPSJmYXMgZmEtc3F1YXJlIHByb2R1Y3Qtc3RvY2stPD9waHAgcHJpbnQgJGdhOyA/PiI+PC9pPjw/cGhwIHByaW50ICgkZ2FfcyA+IDEwKSA/ICIxMCsiIDogJGdhX3M7ID8+IHN0CgkJCgkJCgkJPHNwYW4gY2xhc3M9InByb2R1Y3Qtc3RvY2stZXh0cmEiPgoJCQk8P3BocCBpZigkZ2FfaSA+IDAgJiYgJGdhX3MgPT0gMCAmJiAkbGV2X3MgPT0gMCk6ID8+ICg8P3BocCBwcmludCAoJGdhX2kgPiAxMCkgPyAiMTArIiA6ICRnYV9pOyA/PiBzdCBww6UgdsOkZyk8P3BocCBlbmRpZjsgPz48P3BocCBpZigkZ2FfZCA9PSB0cnVlICYgJGdhX3MgPT0gMSk6ID8+IChEZW1vZXgpPD9waHAgZW5kaWY7ID8+CgkJPC9zcGFuPgoJCQk8L2Rpdj4KCQkKICA8P3BocCB9ID8+CiAgCiAgPD9waHAKICBpZigkc3RfcyA+IDAgfHwgJHN0X2kgPiAwIHx8ICRkZWxpdmVyeSA9PSAiYmx1ZSIpeyA/PgogIAk8ZGl2IGNsYXNzPSJwcm9kdWN0LXN0b2NrLWxpc3QtaXRlbSI+PGRpdiBjbGFzcz0icHJvZHVjdC1zdG9jay1sZWZ0Ij5TdG9ja2hvbG06PC9kaXY+PGkgY2xhc3M9ImZhcyBmYS1zcXVhcmUgcHJvZHVjdC1zdG9jay08P3BocCBwcmludCAkc3Q7ID8+Ij48L2k+PD9waHAgcHJpbnQgKCRzdF9zID4gMTApID8gIjEwKyIgOiAkc3RfczsgPz4gc3QKCQkKCQkKCQk8c3BhbiBjbGFzcz0icHJvZHVjdC1zdG9jay1leHRyYSI+CgkJPD9waHAgaWYoJHN0X2kgPiAwICYmICRzdF9zID09IDAgJiYgJGxldl9zID09IDApOiA/PiAoPD9waHAgcHJpbnQgKCRzdF9pID4gMTApID8gIjEwKyIgOiAkc3RfaTsgPz4gc3QgcMOlIHbDpGcpPD9waHAgZW5kaWY7ID8+PD9waHAgaWYoJHN0X2QgPT0gdHJ1ZSAmICRzdF9zID09IDEpOiA/PiAoRGVtb2V4KTw/cGhwIGVuZGlmOyA/PgoJCTwvc3Bhbj4KCQkJPC9kaXY+CiAgPD9waHAgfSA/PgogIAo8L2Rpdj4KCjw/cGhwCn0KPz4=
PD9waHAKCgogICRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwogIGlmKGlzX2EoJHByb2R1Y3QsICJXQ19Qcm9kdWN0IikgJiYgJHByb2R1Y3QtPmdldF9jYXRhbG9nX3Zpc2liaWxpdHkoKSA9PSAidmlzaWJsZSIgJiYgIXByb2R1Y3RfaXNfc2VydmljZV9hcnRpY2xlKCkpCiAgewogICAgCiAgICAkZ2EgPSBnZXRfZmllbGQoIl9zdG9ja19nYV9jb2xvciIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CiAgICAkZ2FfcyA9IGdldF9maWVsZCgiX3N0b2NrX2dhIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAgICRnYV9pID0gZ2V0X2ZpZWxkKCJfc3RvY2tfZ2FfaW5jb21pbmciLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwogICAgJGdhX2QgPSBnZXRfZmllbGQoImRlbW9fZ2EiLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwoKICAgICRzdCA9IGdldF9maWVsZCgiX3N0b2NrX3N0X2NvbG9yIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAgICRzdF9zID0gZ2V0X2ZpZWxkKCJfc3RvY2tfc3QiLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwogICAgJHN0X2kgPSBnZXRfZmllbGQoIl9zdG9ja19zdF9pbmNvbWluZyIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CiAgICAkc3RfZCA9IGdldF9maWVsZCgiZGVtb19zdCIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CgogICAgJGxldiA9IGdldF9maWVsZCgiX3N0b2NrX3JlbW90ZV9jb2xvciIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CiAgICBpZihlbXB0eSgkbGV2KSkKICAgICAgJGxldiA9ICJncmF5IjsKICAgICRsZXZfcyA9IGdldF9maWVsZCgiX3N0b2NrX3JlbW90ZSIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CiAgCiAgICAkc2hvd19idXR0b24gPSBnZXRfZmllbGQoImRvbGpfa29wa25hcHAiLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwogICAgJGhhc19jYXRlZ29yeSA9ICFlbXB0eSgkcHJvZHVjdC0+Z2V0X2NhdGVnb3J5X2lkcygpKTsKCiAgICBpZigkc2hvd19idXR0b24gIT0gdHJ1ZSkKICAgIHsKICAgICAgaWYoJHN0X3MgPiAwIHx8ICRnYV9zID4gMCB8fCAkbGV2ICE9ICdncmF5Jyl7CiAgCj8+CjxhIGNsYXNzPSJyb3lhbC1jYXJ0LWxpbmsgYWRkX3RvX2NhcnRfYnV0dG9uIGFqYXhfYWRkX3RvX2NhcnQiIGhyZWY9Ij9hZGQtdG8tY2FydD08P3BocCBwcmludCAkcHJvZHVjdC0+Z2V0X2lkKCk7ID8+IiBkYXRhLXF1YW50aXR5PSIxIiBkYXRhLXByb2R1Y3RfaWQ9Ijw/cGhwIHByaW50ICRwcm9kdWN0LT5nZXRfaWQoKTsgPz4iIGRhdGEtcHJvZHVjdF9za3U9Ijw/cGhwIHByaW50ICRwcm9kdWN0LT5nZXRfc2t1KCk7ID8+Ij48YnV0dG9uIGNsYXNzPSJyb3lhbC1jYXJ0Ij48aSBjbGFzcz0iZmFzIGZhLWNhcnQtcGx1cyI+PC9pPjwvYnV0dG9uPjwvYT4KPGEgY2xhc3M9ImFkZGVkLXRvLWNhcnQgd2MtZm9yd2FyZCIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPjwvYT4KPD9waHAKICAgICAgfQogICAgCiAgfWVsc2V7CiAgICBpZigkc3RfcyA+IDAgfHwgJGdhX3MgPiAwIHx8ICRsZXYgIT0gJ2dyYXknKXsKPz4KPGEgY2xhc3M9InJveWFsLWNhcnQtbGluayBhZGRfdG9fY2FydF9idXR0b24gYWpheF9hZGRfdG9fY2FydCIgaHJlZj0iP2FkZC10by1jYXJ0PTAiIGRhdGEtcXVhbnRpdHk9IjEiIGRhdGEtcHJvZHVjdF9pZD0iMCIgZGF0YS1wcm9kdWN0X3NrdT0iMCI+PGJ1dHRvbiBjbGFzcz0icm95YWwtY2FydCI+PGkgY2xhc3M9ImZhcyBmYS1jYXJ0LXBsdXMiPjwvaT48L2J1dHRvbj48L2E+CjxhIGNsYXNzPSJhZGRlZC10by1jYXJ0IHdjLWZvcndhcmQiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij48L2E+Cjw/cGhwCiAgICAgIH0KICB9Cn0KCj8+
PD9waHAKCgogICRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwogIGlmKGlzX2EoJHByb2R1Y3QsICJXQ19Qcm9kdWN0IikpCiAgewogICAgCiAgICAkZ2EgPSBnZXRfZmllbGQoIl9zdG9ja19nYV9jb2xvciIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CiAgICAkc3QgPSBnZXRfZmllbGQoIl9zdG9ja19zdF9jb2xvciIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CiAgICAkbGV2ID0gZ2V0X2ZpZWxkKCJfc3RvY2tfcmVtb3RlX2NvbG9yIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAKICAgICAgaWYoJGdhID09ICJncmF5IiAmJiAkc3QgPT0gImdyYXkiICYmICRsZXYgPT0gImdyYXkiKXsKCQkgID8+CiAgPHNwYW4gY2xhc3M9J3Byb2R1Y3Qtbm90LWF2YWlsYWJsZSc+UHJvZHVrdGVuIMOkciB0eXbDpHJyIGludGUgdGlsbGfDpG5nbGlnIGp1c3QgbnUuPC9zcGFuPgo8P3BocAogICAgfQogICAgCiAgfQoKPz4=
PD9waHAKCiRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwoKaWYoaXNfYSgkcHJvZHVjdCwgIldDX1Byb2R1Y3QiKSkKewoJCgkkZmFyZ2VyID0gW107CgkKCWlmKHN0cmxlbigkcHJvZHVjdC0+Z2V0X2F0dHJpYnV0ZSgiYmxhY2stZmFyZyIpKSA+IDApCgkJJGZhcmdlciA9IGFycmF5X21lcmdlKCRmYXJnZXIsIGV4cGxvZGUoIiwgIiwgJHByb2R1Y3QtPmdldF9hdHRyaWJ1dGUoImJsYWNrLWZhcmciKSkpOwoJCglpZihzdHJsZW4oJHByb2R1Y3QtPmdldF9hdHRyaWJ1dGUoInRvbmVyLWZhcmciKSkgPiAwKQoJCSRmYXJnZXIgPSBhcnJheV9tZXJnZSgkZmFyZ2VyLCBleHBsb2RlKCIsICIsICRwcm9kdWN0LT5nZXRfYXR0cmlidXRlKCJ0b25lci1mYXJnIikpKTsKCQoJaWYoaXNfYXJyYXkoJGZhcmdlcikgJiYgY291bnQoJGZhcmdlcikgPiAwKQoJewoJCXByaW50ICc8ZGl2IGNsYXNzPSJyb3lhbC1wcm9kdWN0LWNhcmQtdjItaW5rLWRvdHMiPic7CgkJCgkJZm9yZWFjaCgkZmFyZ2VyIGFzICRmYXJnKQoJCXsKCQkJaWYoJGZhcmcgPT0gIk9zcGVjaWZpY2VyYXQiKQoJCQkJY29udGludWU7CgkJCQoJCQlpZihzdHJsZW4oJGZhcmcpIDwgMSkKCQkJCWNvbnRpbnVlOwoJCQkKCQkJcHJpbnQgJzxkaXYgY2xhc3M9InJveWFsLXByb2R1Y3QtY2FyZC12Mi1pbmstZG90IGluay1kb3QtJyAuIHN0cnRvbG93ZXIoJGZhcmcpIC4gJyI+PC9kaXY+JzsKCQl9CgkJCgkJcHJpbnQgJzwvZGl2Pic7Cgl9Cn0KCj8+
Cgo8P3BocAoKJHByb2R1Y3QgPSBnZXRfY3VycmVudF9wcm9kdWN0KCk7CgppZihpc19hKCRwcm9kdWN0LCAiV0NfUHJvZHVjdCIpKQp7CiAgaWYoJHByb2R1Y3QtPmlzX29uX3NhbGUoKSkKICB7Cj8+PGRpdiBjbGFzcz0icm95YWwtcHJvZHVjdC1kaXNjb3VudCI+PD9waHAKICAKICAkc2FsZV9wcmljZSA9ICRwcm9kdWN0LT5nZXRfc2FsZV9wcmljZSgpOwogICRyZWd1bGFyX3ByaWNlID0gJHByb2R1Y3QtPmdldF9yZWd1bGFyX3ByaWNlKCk7CiAgJHByaWNlX2RpZmYgPSAkcmVndWxhcl9wcmljZSAtICRzYWxlX3ByaWNlOwoJICAKICBpZiAoJHByaWNlX2RpZmYgPiAxOTkpIHsKICBwcmludCAic3BhcmEgIiAuIHJvdW5kKCRwcmljZV9kaWZmKSAuICIga3IiOwp9IGVsc2UgewogICRwZXJjZW50YWdlID0gKCgkcmVndWxhcl9wcmljZSAtICRzYWxlX3ByaWNlKSAqIDEwMCkgLyAkcmVndWxhcl9wcmljZTsKICBwcmludCByb3VuZCgkcGVyY2VudGFnZSkgLiAiJSI7Cn0gCgkgIAoJICAKICAKICAKPz48L2Rpdj48P3BocAogIH0KLyp9ZWxzZXsKPz48ZGl2IGNsYXNzPSJyb3lhbC1wcm9kdWN0LWRpc2NvdW50Ij48P3BocAogIHByaW50ICIwJSI7Cj8+PC9kaXY+PD9waHAqLwp9Cgo/Pg==
PD9waHAKCiRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwoKaWYoaXNfYSgkcHJvZHVjdCwgIldDX1Byb2R1Y3QiKSkKewogIGlmKCRwcm9kdWN0LT5pc19vbl9zYWxlKCkpCiAgewoJICAKCSAgJGV4dHJhX2NsYXNzID0gKGNhbXBhaWduX2lzX2FjdGl2ZSgxOTYwNCkgJiYgY2FtcGFpZ25faGFzX3Byb2R1Y3QoMTk2MDQsICRwcm9kdWN0LT5nZXRfaWQoKSkpID8gImJsYWNrLXdlZWsiIDogIiI7CgkgICR0ZXh0ID0gKGNhbXBhaWduX2lzX2FjdGl2ZSgxOTYwNCkgJiYgY2FtcGFpZ25faGFzX3Byb2R1Y3QoMTk2MDQsICRwcm9kdWN0LT5nZXRfaWQoKSkpID8gIkN5YmVyIFdlZWsiIDogIkthbXBhbmoiOwogID8+Cgo8ZGl2IGlkPSJkaXZfYmxvY2stNTItMTI0NTgiIGNsYXNzPSJjdC1kaXYtYmxvY2siPgoJPGRpdiBpZD0idGV4dF9ibG9jay01My0xMjQ1OCIgY2xhc3M9ImN0LXRleHQtYmxvY2sgYW5nbGVkLWJhbm5lciA8P3BocCBwcmludCAkZXh0cmFfY2xhc3M7ID8+Ij4KCQk8P3BocCBwcmludCAkdGV4dDsgPz4KCTwvZGl2Pgo8L2Rpdj4KCjw/cGhwCiAgfQp9Cj8+
PD9waHAKCiRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwppZihpc19hKCRwcm9kdWN0LCAiV0NfUHJvZHVjdCIpKQp7CgogICRjYXRlZ29yaWVzID0gJHByb2R1Y3QtPmdldF9jYXRlZ29yeV9pZHMoKTsKICAKICBmb3JlYWNoKCRjYXRlZ29yaWVzIGFzICRjYXRlZ29yeSkKICB7CiAgIAkJJGhhc19iYW5uZXIgPSBnZXRfZmllbGQoInZpc2FfYmFubmVyX3BhX3Byb2R1a3QiLCAicHJvZHVjdF9jYXRfIiAuICRjYXRlZ29yeSk7CiAgICAKICAgIAlpZigkaGFzX2Jhbm5lciA9PSB0cnVlKQogICAgICAgIHsKICAgICAgICAgICRjb2xvciA9IGdldF9maWVsZCgiYmFubmVyZmFyZyIsICJwcm9kdWN0X2NhdF8iIC4gJGNhdGVnb3J5KTsKICAgICAgICAgICR0ZXh0ID0gZ2V0X2ZpZWxkKCJiYW5uZXJ0ZXh0IiwgInByb2R1Y3RfY2F0XyIgLiAkY2F0ZWdvcnkpOwogICAgICAgICAgJHRleHRjb2xvciA9IGdldF9maWVsZCgiYmFubmVydGV4dGZhcmciLCAicHJvZHVjdF9jYXRfIiAuICRjYXRlZ29yeSk7CiAgICAgICAgICAKICAgICAgICAgIHByaW50ICc8ZGl2IGNsYXNzPSJyb3lhbC1wcm9kdWN0LWJhbm5lciBjYXJkIiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjonIC4gJGNvbG9yIC4gJyI+JzsKICAJCSAgcHJpbnQgJzxkaXYgY2xhc3M9InJveWFsLXByb2R1Y3QtYmFubmVyLXRleHQiIHN0eWxlPSJjb2xvcjonIC4gJHRleHRjb2xvciAuICciPic7CiAgCQkgIHByaW50ICR0ZXh0OwogIAkJICBwcmludCAnPC9kaXY+JzsKICAJCSAgcHJpbnQgJzwvZGl2Pic7CiAgICAgICAgfQogIH0KCQoJaWYoZ2V0X2ZpZWxkKCJwcmUtb3duZWQiLCAkcHJvZHVjdC0+Z2V0X2lkKCkpID09IDEpCgl7CiAgICAgICAgICBwcmludCAnPGRpdiBjbGFzcz0icm95YWwtcHJvZHVjdC1iYW5uZXIgY2FyZCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IzNhNzRmZiI+JzsKICAJCSAgcHJpbnQgJzxkaXYgY2xhc3M9InJveWFsLXByb2R1Y3QtYmFubmVyLXRleHQiIHN0eWxlPSJjb2xvcjojZmZmIj4nOwogIAkJICBwcmludCAiUHJlLW93bmVkIjsKICAJCSAgcHJpbnQgJzwvZGl2Pic7CiAgCQkgIHByaW50ICc8L2Rpdj4nOwoJfQogIAp9Cgo/Pg==
PD9waHAKCiRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwoKaWYoaXNfYSgkcHJvZHVjdCwgIldDX1Byb2R1Y3QiKSkKewogICRpZCA9ICRwcm9kdWN0LT5nZXRfaWQoKTsKICAkZGVtbyA9IGZhbHNlOwogIGlmKGdldF9maWVsZCgiZGVtb19nYSIsICRpZCkgPT0gdHJ1ZSAmIGdldF9maWVsZCgiX3N0b2NrX3N0IiwgJGlkKSA9PSAwICYgZ2V0X2ZpZWxkKCJfc3RvY2tfZ2EiLCAkaWQpID09IDEpOiAkZGVtbyA9IHRydWU7IGVuZGlmOwogIGlmKGdldF9maWVsZCgiZGVtb19zdCIsICRpZCkgPT0gdHJ1ZSAmIGdldF9maWVsZCgiX3N0b2NrX2dhIiwgJGlkKSA9PSAwICYgZ2V0X2ZpZWxkKCJfc3RvY2tfc3QiLCAkaWQpID09IDEpOiAkZGVtbyA9IHRydWU7IGVuZGlmOwoKICBpZigkZGVtbyk6cHJpbnQgJzxzcGFuIGNsYXNzPSJwcm9kdWN0LWNhcmQtZGVtb2V4Ij5kZW1vPC9zcGFuPic7ZW5kaWY7IAp9Cj8+
PD9waHAKCiRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwoKaWYoaXNfYSgkcHJvZHVjdCwgIldDX1Byb2R1Y3QiKSkKewoJCj8+CjxhIGlkPSJsaW5rLTQ3LTEyNDU4IiBjbGFzcz0iY3QtbGluayIgaHJlZj0iPD9waHAgcHJpbnQgJHByb2R1Y3QtPmdldF9wZXJtYWxpbmsoKTsgPz4iIHRhcmdldD0iX3NlbGYiPgogIAo8P3BocCBwcmludCBnZXRfdGhlX3Bvc3RfdGh1bWJuYWlsKCAkcHJvZHVjdC0+Z2V0X2lkKCksICdtZWRpdW0nLCBhcnJheSggJ2NsYXNzJyA9PiAnYXV0by1zY2FsZScgKSApOyA/PgoJCjwvYT4KPD9waHAKfQoKPz4=
PD9waHAKCiRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwoKaWYoaXNfYSgkcHJvZHVjdCwgIldDX1Byb2R1Y3QiKSkKewokaWQgPSAkcHJvZHVjdC0+Z2V0X2lkKCk7CgppZihpc19hKCRwcm9kdWN0LCAiV0NfUHJvZHVjdCIpKXsKICBwcmludCAiPGEgaHJlZj0nIiAuIGdldF9wZXJtYWxpbmsoICRwcm9kdWN0LT5nZXRfaWQoKSApIC4gIicgY2xhc3M9J3Byb2R1Y3QtY2FyZC10aXRsZScgPiIgLiAkcHJvZHVjdC0+Z2V0X3RpdGxlKCkgLiAiPC9hPiI7CgoKfWVsc2V7CiAgcHJpbnQgIlByb2R1a3RuYW1uIjsKfQp9ZWxzZXsKIHByaW50ICJJbmdldCBwcm9kdWt0bmFtbiBoaXR0YWRlcyI7IAp9Cgo/Pg==
PD9waHAKJHByb2R1Y3QgPSBnZXRfY3VycmVudF9wcm9kdWN0KCk7CgppZihpc19hKCRwcm9kdWN0LCAiV0NfUHJvZHVjdCIpKQp7CnByaW50ICI8c3BhbiBzdHlsZT0nZGlzcGxheTpibG9jaztoZWlnaHQ6MTNweDsnPiIuJHByb2R1Y3QtPmdldF9za3UoKS4iIDwvc3Bhbj4iOwp9Cj8+
PD9waHAKCgovLyBzaG93X2Rlc2Nfbm9fYXR0cwoKJHByb2R1Y3QgPSBnZXRfY3VycmVudF9wcm9kdWN0KCk7CgppZihpc19hKCRwcm9kdWN0LCAiV0NfUHJvZHVjdCIpKQp7CgogICRjYXRlZ29yeV9pZHMgPSAkcHJvZHVjdC0+Z2V0X2NhdGVnb3J5X2lkcygpOwogIC8qJGNhdGVnb3JpZXMgPSBnZXRfdGVybXMoWwogICAgICAidGVybV90YXhvbm9teV9pZCIgPT4gJGNhdGVnb3J5X2lkcwogIF0pOyovCgogICR2YWx1ZXNfdG9fcHJpbnQgPSBbXTsKICBpZighZW1wdHkoJGNhdGVnb3J5X2lkcykgJiYgY291bnQoJGNhdGVnb3J5X2lkcykgPiAwKQogIHsKICAgIGZvcmVhY2goJGNhdGVnb3J5X2lkcyBhcyAkY2F0ZWdvcnlfaWQpCiAgICB7CgoJCSRjYXRlZ29yeSA9ICJwcm9kdWN0X2NhdF8iIC4gJGNhdGVnb3J5X2lkOwoJCSRub19hdHRzID0gZ2V0X2ZpZWxkKCJzaG93X2Rlc2Nfbm9fYXR0cyIsICRjYXRlZ29yeSk7CgkJCgkJaWYoJG5vX2F0dHMgPT0gdHJ1ZSkKCQl7CgkJCSR2YWx1ZXNfdG9fcHJpbnQgPSBbXTsKCQkJYnJlYWs7CgkJfQoJCQogICAgICAkaGFzX3Jvd3MgPSBoYXZlX3Jvd3MoImF0dHJpYnV0X2F0dF92aXNhX3BhX3Byb2R1a3RyYWQiLCAkY2F0ZWdvcnkpOwoKICAgICAgaWYoISRoYXNfcm93cykKICAgICAgICBjb250aW51ZTsKCiAgICAgICRmaWVsZHMgPSBnZXRfZmllbGQoImF0dHJpYnV0X2F0dF92aXNhX3BhX3Byb2R1a3RyYWQiLCAkY2F0ZWdvcnkpOyAvLyBnZXQgYWxsIGZpZWxkcyBpbiByZXBlYXRlcgoKICAgICAgaWYoIWVtcHR5KCRmaWVsZHMpKQogICAgICB7CiAgICAgICAgZm9yZWFjaCgkZmllbGRzIGFzICRmaWVsZCkKICAgICAgICB7CiAgICAgICAgICBpZihjb3VudCgkdmFsdWVzX3RvX3ByaW50KSA+PSA1KXticmVhazt9CgkJCQogICAgICAgICAgZm9yZWFjaCgkZmllbGQgYXMgJGtleSA9PiAkdmFsdWUpCiAgICAgICAgICB7CgkJCSAgJGF0dHJfdmFsdWUgPSAkcHJvZHVjdC0+Z2V0X2F0dHJpYnV0ZSgkdmFsdWUpOwogICAgICAgICAgICAgIGlmKCFlbXB0eSgkYXR0cl92YWx1ZSkpCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYoJGF0dHJfdmFsdWUgIT0gIk9zcGVjaWZpY2VyYXQiKQogICAgICAgICAgICAgICAgewoJCQkJCWlmKCFpbl9hcnJheSgkYXR0cl92YWx1ZSwgJHZhbHVlc190b19wcmludCkpCgkJCQkJewogICAgICAgICAgICAgICAgICAJCSR2YWx1ZXNfdG9fcHJpbnRbXSA9ICRhdHRyX3ZhbHVlOyAvLyBhZGQgdGF4b25vbXkgdG8gbGlzdAogICAgICAgICAgICAgICAgCX0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQoKICAgIH0KICB9CiAgCiAgICBpZihjb3VudCgkdmFsdWVzX3RvX3ByaW50KSA+IDApCgl7CiAgICAJcHJpbnQgJzx1bCBjbGFzcz0icHJvZHVrdGtvcnQtYXR0ciI+PGxpPjxpIGNsYXNzPSJmYXMgZmEtY2hlY2siPjwvaT4nIC4gaW1wbG9kZSggJzwvbGk+PGxpPjxpIGNsYXNzPSJmYXMgZmEtY2hlY2siPjwvaT4nLCAkdmFsdWVzX3RvX3ByaW50KSAuICc8L2xpPjwvdWw+JzsKCX1lbHNlewogICAgICAgIAoJCSRkZXNjID0gJHByb2R1Y3QtPmdldF9kZXNjcmlwdGlvbigpOwoJCSRkZXNjID0gZG9fc2hvcnRjb2RlKCRkZXNjKTsKCQkkZGVzYyA9IHN0cmlwX3RhZ3MoJGRlc2MpOwoJCQoJCWlmKCFlbXB0eSgkZGVzYykpCgkJewoJCQlpZihzdHJsZW4oJGRlc2MpID4gMTQwKQoJCQl7CgkJCQkkZGVzYyA9IHN1YnN0cigkZGVzYywgMCwgMTQwKSAuICIuLi4iOwoJCQl9CgkJfQoJCQoKCQlwcmludCAnPGRpdiBjbGFzcz0icHJvZHVjdC1zaG9ydC1kZXNjIj4nIC4gJGRlc2MgLiAnPC9kaXY+JzsKICAgIH0KfQoKPz4=
PGRpdiBpZD0icm95YWwtcHJvZHVjdC1wcmljZSI+CiAgPD9waHAKCiRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwoKaWYoaXNfYSgkcHJvZHVjdCwgIldDX1Byb2R1Y3QiKSkKewo/PgoKICAgIAo8P3BocAogCmlmKCRwcm9kdWN0LT5pc19vbl9zYWxlKCkpCnsKPz4KICAgICAgPGRpdiBpZD0icm95YWwtcHJvZHVjdC1wcmljZS1yZWd1bGFyIiBjbGFzcz0ic3RyaWtlb3V0Ij48P3BocCBwcmludCAkcHJvZHVjdC0+Z2V0X3JlZ3VsYXJfcHJpY2UoKTsgPz4ga3I8L2Rpdj48YnIgLz4KICAgICAgPGRpdiBpZD0icm95YWwtcHJvZHVjdC1wcmljZS1zYWxlIj48P3BocCBwcmludCAkcHJvZHVjdC0+Z2V0X3NhbGVfcHJpY2UoKTsgPz4ga3I8L2Rpdj4KPD9waHAKfWVsc2V7CnByaW50ICRwcm9kdWN0LT5nZXRfcHJpY2UoKSAuICIga3IiOwp9Cn0KZWxzZQp7CiAgcHJpbnQgIjAga3IiOwp9Cgo/Pgo8L2Rpdj4=
PD9waHAKCgokcHJvZHVjdCA9IGdldF9jdXJyZW50X3Byb2R1Y3QoKTsKCmlmKGlzX2EoJHByb2R1Y3QsICJXQ19Qcm9kdWN0IikgJiYgIXByb2R1Y3RfaXNfYnVuZGxlKCRwcm9kdWN0KSAmJiAkcHJvZHVjdC0+Z2V0X2NhdGFsb2dfdmlzaWJpbGl0eSgpID09ICJ2aXNpYmxlIiAmJiAhcHJvZHVjdF9pc19zZXJ2aWNlX2FydGljbGUoKSkKewogIAogICRnYSA9IGdldF9maWVsZCgiX3N0b2NrX2dhX2NvbG9yIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAkZ2FfcyA9IGdldF9maWVsZCgiX3N0b2NrX2dhIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAkZ2FfaSA9IGdldF9maWVsZCgiX3N0b2NrX2dhX2luY29taW5nIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAkZ2FfZCA9IGdldF9maWVsZCgiZGVtb19nYSIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CiAgCiAgJHN0ID0gZ2V0X2ZpZWxkKCJfc3RvY2tfc3RfY29sb3IiLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwogICRzdF9zID0gZ2V0X2ZpZWxkKCJfc3RvY2tfc3QiLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwogICRzdF9pID0gZ2V0X2ZpZWxkKCJfc3RvY2tfc3RfaW5jb21pbmciLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwogICRzdF9kID0gZ2V0X2ZpZWxkKCJkZW1vX3N0IiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAKICAkbGV2ID0gZ2V0X2ZpZWxkKCJfc3RvY2tfcmVtb3RlX2NvbG9yIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICBpZihlbXB0eSgkbGV2KSkKICAgICRsZXYgPSAiZ3JheSI7CiAgJGxldl9zID0gZ2V0X2ZpZWxkKCJfc3RvY2tfcmVtb3RlIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAkbGV2X2kgPSBnZXRfZmllbGQoIl9zdG9ja19yZW1vdGVfaW5jb21pbmciLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwogIAogICRkZWxpdmVyeSA9ICJncmF5IjsKICAKICAkc3RvY2tzID0gWyRnYSwgJHN0LCAkbGV2XTsKICAgIAogIGlmKGluX2FycmF5KCJibHVlIiwgJHN0b2NrcykpCiAgICAgICRkZWxpdmVyeSA9ICJibHVlIjsKCSAgICAKICBpZihpbl9hcnJheSgib3JhbmdlIiwgJHN0b2NrcykpCiAgICAgICRkZWxpdmVyeSA9ICJvcmFuZ2UiOwogICAgCiAgaWYoaW5fYXJyYXkoImdyZWVuIiwgJHN0b2NrcykpCiAgICAgICRkZWxpdmVyeSA9ICJncmVlbiI7CgogICR0b3QgPSAiZ3JheSI7CiAgaWYoaW5fYXJyYXkoImJsdWUiLCAkc3RvY2tzKSkKCSAgJHRvdCA9ICJibHVlIjsKICBpZihpbl9hcnJheSgib3JhbmdlIiwgJHN0b2NrcykpCgkgICR0b3QgPSAib3JhbmdlIjsKICBpZihpbl9hcnJheSgiZ3JlZW4iLCAkc3RvY2tzKSkKCSAgJHRvdCA9ICJncmVlbiI7CgkKICAkdG90X3MgPSAkZ2FfcyArICRzdF9zICsgJGxldl9zOwogICR0b3RfaSA9ICRnYV9pICsgJHN0X2kgKyAkbGV2X2k7CgkKCj8+Cgo8ZGl2IGNsYXNzPSJwcm9kdWN0LXN0b2NrLWxpc3QiPgoKCTw/cGhwIGlmKCR0b3RfcyA+IDAgfHwgJHRvdF9pID4gMCB8fCAkZGVsaXZlcnkgPT0gImJsdWUiKSB7ID8+Cgk8ZGl2IGNsYXNzPSJwcm9kdWN0LXN0b2NrLWxpc3QtaXRlbSI+CgkgIAoJICA8ZGl2IGNsYXNzPSJwcm9kdWN0LXN0b2NrLWxlZnQiPk9ubGluZTo8L2Rpdj4gPGkgY2xhc3M9ImZhcyBmYS1zcXVhcmUgcHJvZHVjdC1zdG9jay08P3BocCBwcmludCAkdG90OyA/PiI+PC9pPgoJCQoJCTw/cGhwIHByaW50ICgkdG90X3MgPiAxMCkgPyAiMTArIiA6ICR0b3RfczsgPz4gc3QKCQkKCQk8c3BhbiBjbGFzcz0icHJvZHVjdC1zdG9jay1leHRyYSI+CgkJPD9waHAgaWYoJHRvdF9zID09IDAgJiYgJHRvdF9pID4gMCkgeyA/PiAoPD9waHAgcHJpbnQgKCR0b3RfaSA+IDEwKSA/ICIxMCsiIDogJHRvdF9pOyA/PiBzdCBww6UgdsOkZyk8P3BocCB9ID8+CgkJPC9zcGFuPgoJPC9kaXY+Cgk8P3BocCB9ID8+CgogIDw/cGhwCiAgaWYoJGdhX3MgPiAwIHx8ICRnYV9pID4gMCB8fCAkZGVsaXZlcnkgPT0gImJsdWUiKXsgPz4KICAJPGRpdiBjbGFzcz0icHJvZHVjdC1zdG9jay1saXN0LWl0ZW0iPjxkaXYgY2xhc3M9InByb2R1Y3Qtc3RvY2stbGVmdCI+R8OkdmxlOjwvZGl2PjxpIGNsYXNzPSJmYXMgZmEtc3F1YXJlIHByb2R1Y3Qtc3RvY2stPD9waHAgcHJpbnQgJGdhOyA/PiI+PC9pPjw/cGhwIHByaW50ICgkZ2FfcyA+IDEwKSA/ICIxMCsiIDogJGdhX3M7ID8+IHN0CgkJCgkJCgkJPHNwYW4gY2xhc3M9InByb2R1Y3Qtc3RvY2stZXh0cmEiPgoJCQk8P3BocCBpZigkZ2FfaSA+IDAgJiYgJGdhX3MgPT0gMCAmJiAkbGV2X3MgPT0gMCk6ID8+ICg8P3BocCBwcmludCAoJGdhX2kgPiAxMCkgPyAiMTArIiA6ICRnYV9pOyA/PiBzdCBww6UgdsOkZyk8P3BocCBlbmRpZjsgPz48P3BocCBpZigkZ2FfZCA9PSB0cnVlICYgJGdhX3MgPT0gMSk6ID8+IChEZW1vZXgpPD9waHAgZW5kaWY7ID8+CgkJPC9zcGFuPgoJCQk8L2Rpdj4KCQkKICA8P3BocCB9ID8+CiAgCiAgPD9waHAKICBpZigkc3RfcyA+IDAgfHwgJHN0X2kgPiAwIHx8ICRkZWxpdmVyeSA9PSAiYmx1ZSIpeyA/PgogIAk8ZGl2IGNsYXNzPSJwcm9kdWN0LXN0b2NrLWxpc3QtaXRlbSI+PGRpdiBjbGFzcz0icHJvZHVjdC1zdG9jay1sZWZ0Ij5TdG9ja2hvbG06PC9kaXY+PGkgY2xhc3M9ImZhcyBmYS1zcXVhcmUgcHJvZHVjdC1zdG9jay08P3BocCBwcmludCAkc3Q7ID8+Ij48L2k+PD9waHAgcHJpbnQgKCRzdF9zID4gMTApID8gIjEwKyIgOiAkc3RfczsgPz4gc3QKCQkKCQkKCQk8c3BhbiBjbGFzcz0icHJvZHVjdC1zdG9jay1leHRyYSI+CgkJPD9waHAgaWYoJHN0X2kgPiAwICYmICRzdF9zID09IDAgJiYgJGxldl9zID09IDApOiA/PiAoPD9waHAgcHJpbnQgKCRzdF9pID4gMTApID8gIjEwKyIgOiAkc3RfaTsgPz4gc3QgcMOlIHbDpGcpPD9waHAgZW5kaWY7ID8+PD9waHAgaWYoJHN0X2QgPT0gdHJ1ZSAmICRzdF9zID09IDEpOiA/PiAoRGVtb2V4KTw/cGhwIGVuZGlmOyA/PgoJCTwvc3Bhbj4KCQkJPC9kaXY+CiAgPD9waHAgfSA/PgogIAo8L2Rpdj4KCjw/cGhwCn0KPz4=
PD9waHAKCgogICRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwogIGlmKGlzX2EoJHByb2R1Y3QsICJXQ19Qcm9kdWN0IikgJiYgJHByb2R1Y3QtPmdldF9jYXRhbG9nX3Zpc2liaWxpdHkoKSA9PSAidmlzaWJsZSIgJiYgIXByb2R1Y3RfaXNfc2VydmljZV9hcnRpY2xlKCkpCiAgewogICAgCiAgICAkZ2EgPSBnZXRfZmllbGQoIl9zdG9ja19nYV9jb2xvciIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CiAgICAkZ2FfcyA9IGdldF9maWVsZCgiX3N0b2NrX2dhIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAgICRnYV9pID0gZ2V0X2ZpZWxkKCJfc3RvY2tfZ2FfaW5jb21pbmciLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwogICAgJGdhX2QgPSBnZXRfZmllbGQoImRlbW9fZ2EiLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwoKICAgICRzdCA9IGdldF9maWVsZCgiX3N0b2NrX3N0X2NvbG9yIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAgICRzdF9zID0gZ2V0X2ZpZWxkKCJfc3RvY2tfc3QiLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwogICAgJHN0X2kgPSBnZXRfZmllbGQoIl9zdG9ja19zdF9pbmNvbWluZyIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CiAgICAkc3RfZCA9IGdldF9maWVsZCgiZGVtb19zdCIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CgogICAgJGxldiA9IGdldF9maWVsZCgiX3N0b2NrX3JlbW90ZV9jb2xvciIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CiAgICBpZihlbXB0eSgkbGV2KSkKICAgICAgJGxldiA9ICJncmF5IjsKICAgICRsZXZfcyA9IGdldF9maWVsZCgiX3N0b2NrX3JlbW90ZSIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CiAgCiAgICAkc2hvd19idXR0b24gPSBnZXRfZmllbGQoImRvbGpfa29wa25hcHAiLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwogICAgJGhhc19jYXRlZ29yeSA9ICFlbXB0eSgkcHJvZHVjdC0+Z2V0X2NhdGVnb3J5X2lkcygpKTsKCiAgICBpZigkc2hvd19idXR0b24gIT0gdHJ1ZSkKICAgIHsKICAgICAgaWYoJHN0X3MgPiAwIHx8ICRnYV9zID4gMCB8fCAkbGV2ICE9ICdncmF5Jyl7CiAgCj8+CjxhIGNsYXNzPSJyb3lhbC1jYXJ0LWxpbmsgYWRkX3RvX2NhcnRfYnV0dG9uIGFqYXhfYWRkX3RvX2NhcnQiIGhyZWY9Ij9hZGQtdG8tY2FydD08P3BocCBwcmludCAkcHJvZHVjdC0+Z2V0X2lkKCk7ID8+IiBkYXRhLXF1YW50aXR5PSIxIiBkYXRhLXByb2R1Y3RfaWQ9Ijw/cGhwIHByaW50ICRwcm9kdWN0LT5nZXRfaWQoKTsgPz4iIGRhdGEtcHJvZHVjdF9za3U9Ijw/cGhwIHByaW50ICRwcm9kdWN0LT5nZXRfc2t1KCk7ID8+Ij48YnV0dG9uIGNsYXNzPSJyb3lhbC1jYXJ0Ij48aSBjbGFzcz0iZmFzIGZhLWNhcnQtcGx1cyI+PC9pPjwvYnV0dG9uPjwvYT4KPGEgY2xhc3M9ImFkZGVkLXRvLWNhcnQgd2MtZm9yd2FyZCIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPjwvYT4KPD9waHAKICAgICAgfQogICAgCiAgfWVsc2V7CiAgICBpZigkc3RfcyA+IDAgfHwgJGdhX3MgPiAwIHx8ICRsZXYgIT0gJ2dyYXknKXsKPz4KPGEgY2xhc3M9InJveWFsLWNhcnQtbGluayBhZGRfdG9fY2FydF9idXR0b24gYWpheF9hZGRfdG9fY2FydCIgaHJlZj0iP2FkZC10by1jYXJ0PTAiIGRhdGEtcXVhbnRpdHk9IjEiIGRhdGEtcHJvZHVjdF9pZD0iMCIgZGF0YS1wcm9kdWN0X3NrdT0iMCI+PGJ1dHRvbiBjbGFzcz0icm95YWwtY2FydCI+PGkgY2xhc3M9ImZhcyBmYS1jYXJ0LXBsdXMiPjwvaT48L2J1dHRvbj48L2E+CjxhIGNsYXNzPSJhZGRlZC10by1jYXJ0IHdjLWZvcndhcmQiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij48L2E+Cjw/cGhwCiAgICAgIH0KICB9Cn0KCj8+
PD9waHAKCgogICRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwogIGlmKGlzX2EoJHByb2R1Y3QsICJXQ19Qcm9kdWN0IikpCiAgewogICAgCiAgICAkZ2EgPSBnZXRfZmllbGQoIl9zdG9ja19nYV9jb2xvciIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CiAgICAkc3QgPSBnZXRfZmllbGQoIl9zdG9ja19zdF9jb2xvciIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CiAgICAkbGV2ID0gZ2V0X2ZpZWxkKCJfc3RvY2tfcmVtb3RlX2NvbG9yIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAKICAgICAgaWYoJGdhID09ICJncmF5IiAmJiAkc3QgPT0gImdyYXkiICYmICRsZXYgPT0gImdyYXkiKXsKCQkgID8+CiAgPHNwYW4gY2xhc3M9J3Byb2R1Y3Qtbm90LWF2YWlsYWJsZSc+UHJvZHVrdGVuIMOkciB0eXbDpHJyIGludGUgdGlsbGfDpG5nbGlnIGp1c3QgbnUuPC9zcGFuPgo8P3BocAogICAgfQogICAgCiAgfQoKPz4=
PD9waHAKCiRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwoKaWYoaXNfYSgkcHJvZHVjdCwgIldDX1Byb2R1Y3QiKSkKewoJCgkkZmFyZ2VyID0gW107CgkKCWlmKHN0cmxlbigkcHJvZHVjdC0+Z2V0X2F0dHJpYnV0ZSgiYmxhY2stZmFyZyIpKSA+IDApCgkJJGZhcmdlciA9IGFycmF5X21lcmdlKCRmYXJnZXIsIGV4cGxvZGUoIiwgIiwgJHByb2R1Y3QtPmdldF9hdHRyaWJ1dGUoImJsYWNrLWZhcmciKSkpOwoJCglpZihzdHJsZW4oJHByb2R1Y3QtPmdldF9hdHRyaWJ1dGUoInRvbmVyLWZhcmciKSkgPiAwKQoJCSRmYXJnZXIgPSBhcnJheV9tZXJnZSgkZmFyZ2VyLCBleHBsb2RlKCIsICIsICRwcm9kdWN0LT5nZXRfYXR0cmlidXRlKCJ0b25lci1mYXJnIikpKTsKCQoJaWYoaXNfYXJyYXkoJGZhcmdlcikgJiYgY291bnQoJGZhcmdlcikgPiAwKQoJewoJCXByaW50ICc8ZGl2IGNsYXNzPSJyb3lhbC1wcm9kdWN0LWNhcmQtdjItaW5rLWRvdHMiPic7CgkJCgkJZm9yZWFjaCgkZmFyZ2VyIGFzICRmYXJnKQoJCXsKCQkJaWYoJGZhcmcgPT0gIk9zcGVjaWZpY2VyYXQiKQoJCQkJY29udGludWU7CgkJCQoJCQlpZihzdHJsZW4oJGZhcmcpIDwgMSkKCQkJCWNvbnRpbnVlOwoJCQkKCQkJcHJpbnQgJzxkaXYgY2xhc3M9InJveWFsLXByb2R1Y3QtY2FyZC12Mi1pbmstZG90IGluay1kb3QtJyAuIHN0cnRvbG93ZXIoJGZhcmcpIC4gJyI+PC9kaXY+JzsKCQl9CgkJCgkJcHJpbnQgJzwvZGl2Pic7Cgl9Cn0KCj8+
Cgo8P3BocAoKJHByb2R1Y3QgPSBnZXRfY3VycmVudF9wcm9kdWN0KCk7CgppZihpc19hKCRwcm9kdWN0LCAiV0NfUHJvZHVjdCIpKQp7CiAgaWYoJHByb2R1Y3QtPmlzX29uX3NhbGUoKSkKICB7Cj8+PGRpdiBjbGFzcz0icm95YWwtcHJvZHVjdC1kaXNjb3VudCI+PD9waHAKICAKICAkc2FsZV9wcmljZSA9ICRwcm9kdWN0LT5nZXRfc2FsZV9wcmljZSgpOwogICRyZWd1bGFyX3ByaWNlID0gJHByb2R1Y3QtPmdldF9yZWd1bGFyX3ByaWNlKCk7CiAgJHByaWNlX2RpZmYgPSAkcmVndWxhcl9wcmljZSAtICRzYWxlX3ByaWNlOwoJICAKICBpZiAoJHByaWNlX2RpZmYgPiAxOTkpIHsKICBwcmludCAic3BhcmEgIiAuIHJvdW5kKCRwcmljZV9kaWZmKSAuICIga3IiOwp9IGVsc2UgewogICRwZXJjZW50YWdlID0gKCgkcmVndWxhcl9wcmljZSAtICRzYWxlX3ByaWNlKSAqIDEwMCkgLyAkcmVndWxhcl9wcmljZTsKICBwcmludCByb3VuZCgkcGVyY2VudGFnZSkgLiAiJSI7Cn0gCgkgIAoJICAKICAKICAKPz48L2Rpdj48P3BocAogIH0KLyp9ZWxzZXsKPz48ZGl2IGNsYXNzPSJyb3lhbC1wcm9kdWN0LWRpc2NvdW50Ij48P3BocAogIHByaW50ICIwJSI7Cj8+PC9kaXY+PD9waHAqLwp9Cgo/Pg==
PD9waHAKCiRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwoKaWYoaXNfYSgkcHJvZHVjdCwgIldDX1Byb2R1Y3QiKSkKewogIGlmKCRwcm9kdWN0LT5pc19vbl9zYWxlKCkpCiAgewoJICAKCSAgJGV4dHJhX2NsYXNzID0gKGNhbXBhaWduX2lzX2FjdGl2ZSgxOTYwNCkgJiYgY2FtcGFpZ25faGFzX3Byb2R1Y3QoMTk2MDQsICRwcm9kdWN0LT5nZXRfaWQoKSkpID8gImJsYWNrLXdlZWsiIDogIiI7CgkgICR0ZXh0ID0gKGNhbXBhaWduX2lzX2FjdGl2ZSgxOTYwNCkgJiYgY2FtcGFpZ25faGFzX3Byb2R1Y3QoMTk2MDQsICRwcm9kdWN0LT5nZXRfaWQoKSkpID8gIkN5YmVyIFdlZWsiIDogIkthbXBhbmoiOwogID8+Cgo8ZGl2IGlkPSJkaXZfYmxvY2stNTItMTI0NTgiIGNsYXNzPSJjdC1kaXYtYmxvY2siPgoJPGRpdiBpZD0idGV4dF9ibG9jay01My0xMjQ1OCIgY2xhc3M9ImN0LXRleHQtYmxvY2sgYW5nbGVkLWJhbm5lciA8P3BocCBwcmludCAkZXh0cmFfY2xhc3M7ID8+Ij4KCQk8P3BocCBwcmludCAkdGV4dDsgPz4KCTwvZGl2Pgo8L2Rpdj4KCjw/cGhwCiAgfQp9Cj8+
PD9waHAKCiRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwppZihpc19hKCRwcm9kdWN0LCAiV0NfUHJvZHVjdCIpKQp7CgogICRjYXRlZ29yaWVzID0gJHByb2R1Y3QtPmdldF9jYXRlZ29yeV9pZHMoKTsKICAKICBmb3JlYWNoKCRjYXRlZ29yaWVzIGFzICRjYXRlZ29yeSkKICB7CiAgIAkJJGhhc19iYW5uZXIgPSBnZXRfZmllbGQoInZpc2FfYmFubmVyX3BhX3Byb2R1a3QiLCAicHJvZHVjdF9jYXRfIiAuICRjYXRlZ29yeSk7CiAgICAKICAgIAlpZigkaGFzX2Jhbm5lciA9PSB0cnVlKQogICAgICAgIHsKICAgICAgICAgICRjb2xvciA9IGdldF9maWVsZCgiYmFubmVyZmFyZyIsICJwcm9kdWN0X2NhdF8iIC4gJGNhdGVnb3J5KTsKICAgICAgICAgICR0ZXh0ID0gZ2V0X2ZpZWxkKCJiYW5uZXJ0ZXh0IiwgInByb2R1Y3RfY2F0XyIgLiAkY2F0ZWdvcnkpOwogICAgICAgICAgJHRleHRjb2xvciA9IGdldF9maWVsZCgiYmFubmVydGV4dGZhcmciLCAicHJvZHVjdF9jYXRfIiAuICRjYXRlZ29yeSk7CiAgICAgICAgICAKICAgICAgICAgIHByaW50ICc8ZGl2IGNsYXNzPSJyb3lhbC1wcm9kdWN0LWJhbm5lciBjYXJkIiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjonIC4gJGNvbG9yIC4gJyI+JzsKICAJCSAgcHJpbnQgJzxkaXYgY2xhc3M9InJveWFsLXByb2R1Y3QtYmFubmVyLXRleHQiIHN0eWxlPSJjb2xvcjonIC4gJHRleHRjb2xvciAuICciPic7CiAgCQkgIHByaW50ICR0ZXh0OwogIAkJICBwcmludCAnPC9kaXY+JzsKICAJCSAgcHJpbnQgJzwvZGl2Pic7CiAgICAgICAgfQogIH0KCQoJaWYoZ2V0X2ZpZWxkKCJwcmUtb3duZWQiLCAkcHJvZHVjdC0+Z2V0X2lkKCkpID09IDEpCgl7CiAgICAgICAgICBwcmludCAnPGRpdiBjbGFzcz0icm95YWwtcHJvZHVjdC1iYW5uZXIgY2FyZCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IzNhNzRmZiI+JzsKICAJCSAgcHJpbnQgJzxkaXYgY2xhc3M9InJveWFsLXByb2R1Y3QtYmFubmVyLXRleHQiIHN0eWxlPSJjb2xvcjojZmZmIj4nOwogIAkJICBwcmludCAiUHJlLW93bmVkIjsKICAJCSAgcHJpbnQgJzwvZGl2Pic7CiAgCQkgIHByaW50ICc8L2Rpdj4nOwoJfQogIAp9Cgo/Pg==
PD9waHAKCiRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwoKaWYoaXNfYSgkcHJvZHVjdCwgIldDX1Byb2R1Y3QiKSkKewogICRpZCA9ICRwcm9kdWN0LT5nZXRfaWQoKTsKICAkZGVtbyA9IGZhbHNlOwogIGlmKGdldF9maWVsZCgiZGVtb19nYSIsICRpZCkgPT0gdHJ1ZSAmIGdldF9maWVsZCgiX3N0b2NrX3N0IiwgJGlkKSA9PSAwICYgZ2V0X2ZpZWxkKCJfc3RvY2tfZ2EiLCAkaWQpID09IDEpOiAkZGVtbyA9IHRydWU7IGVuZGlmOwogIGlmKGdldF9maWVsZCgiZGVtb19zdCIsICRpZCkgPT0gdHJ1ZSAmIGdldF9maWVsZCgiX3N0b2NrX2dhIiwgJGlkKSA9PSAwICYgZ2V0X2ZpZWxkKCJfc3RvY2tfc3QiLCAkaWQpID09IDEpOiAkZGVtbyA9IHRydWU7IGVuZGlmOwoKICBpZigkZGVtbyk6cHJpbnQgJzxzcGFuIGNsYXNzPSJwcm9kdWN0LWNhcmQtZGVtb2V4Ij5kZW1vPC9zcGFuPic7ZW5kaWY7IAp9Cj8+
PD9waHAKCiRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwoKaWYoaXNfYSgkcHJvZHVjdCwgIldDX1Byb2R1Y3QiKSkKewoJCj8+CjxhIGlkPSJsaW5rLTQ3LTEyNDU4IiBjbGFzcz0iY3QtbGluayIgaHJlZj0iPD9waHAgcHJpbnQgJHByb2R1Y3QtPmdldF9wZXJtYWxpbmsoKTsgPz4iIHRhcmdldD0iX3NlbGYiPgogIAo8P3BocCBwcmludCBnZXRfdGhlX3Bvc3RfdGh1bWJuYWlsKCAkcHJvZHVjdC0+Z2V0X2lkKCksICdtZWRpdW0nLCBhcnJheSggJ2NsYXNzJyA9PiAnYXV0by1zY2FsZScgKSApOyA/PgoJCjwvYT4KPD9waHAKfQoKPz4=
PD9waHAKCiRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwoKaWYoaXNfYSgkcHJvZHVjdCwgIldDX1Byb2R1Y3QiKSkKewokaWQgPSAkcHJvZHVjdC0+Z2V0X2lkKCk7CgppZihpc19hKCRwcm9kdWN0LCAiV0NfUHJvZHVjdCIpKXsKICBwcmludCAiPGEgaHJlZj0nIiAuIGdldF9wZXJtYWxpbmsoICRwcm9kdWN0LT5nZXRfaWQoKSApIC4gIicgY2xhc3M9J3Byb2R1Y3QtY2FyZC10aXRsZScgPiIgLiAkcHJvZHVjdC0+Z2V0X3RpdGxlKCkgLiAiPC9hPiI7CgoKfWVsc2V7CiAgcHJpbnQgIlByb2R1a3RuYW1uIjsKfQp9ZWxzZXsKIHByaW50ICJJbmdldCBwcm9kdWt0bmFtbiBoaXR0YWRlcyI7IAp9Cgo/Pg==
PD9waHAKJHByb2R1Y3QgPSBnZXRfY3VycmVudF9wcm9kdWN0KCk7CgppZihpc19hKCRwcm9kdWN0LCAiV0NfUHJvZHVjdCIpKQp7CnByaW50ICI8c3BhbiBzdHlsZT0nZGlzcGxheTpibG9jaztoZWlnaHQ6MTNweDsnPiIuJHByb2R1Y3QtPmdldF9za3UoKS4iIDwvc3Bhbj4iOwp9Cj8+
PD9waHAKCgovLyBzaG93X2Rlc2Nfbm9fYXR0cwoKJHByb2R1Y3QgPSBnZXRfY3VycmVudF9wcm9kdWN0KCk7CgppZihpc19hKCRwcm9kdWN0LCAiV0NfUHJvZHVjdCIpKQp7CgogICRjYXRlZ29yeV9pZHMgPSAkcHJvZHVjdC0+Z2V0X2NhdGVnb3J5X2lkcygpOwogIC8qJGNhdGVnb3JpZXMgPSBnZXRfdGVybXMoWwogICAgICAidGVybV90YXhvbm9teV9pZCIgPT4gJGNhdGVnb3J5X2lkcwogIF0pOyovCgogICR2YWx1ZXNfdG9fcHJpbnQgPSBbXTsKICBpZighZW1wdHkoJGNhdGVnb3J5X2lkcykgJiYgY291bnQoJGNhdGVnb3J5X2lkcykgPiAwKQogIHsKICAgIGZvcmVhY2goJGNhdGVnb3J5X2lkcyBhcyAkY2F0ZWdvcnlfaWQpCiAgICB7CgoJCSRjYXRlZ29yeSA9ICJwcm9kdWN0X2NhdF8iIC4gJGNhdGVnb3J5X2lkOwoJCSRub19hdHRzID0gZ2V0X2ZpZWxkKCJzaG93X2Rlc2Nfbm9fYXR0cyIsICRjYXRlZ29yeSk7CgkJCgkJaWYoJG5vX2F0dHMgPT0gdHJ1ZSkKCQl7CgkJCSR2YWx1ZXNfdG9fcHJpbnQgPSBbXTsKCQkJYnJlYWs7CgkJfQoJCQogICAgICAkaGFzX3Jvd3MgPSBoYXZlX3Jvd3MoImF0dHJpYnV0X2F0dF92aXNhX3BhX3Byb2R1a3RyYWQiLCAkY2F0ZWdvcnkpOwoKICAgICAgaWYoISRoYXNfcm93cykKICAgICAgICBjb250aW51ZTsKCiAgICAgICRmaWVsZHMgPSBnZXRfZmllbGQoImF0dHJpYnV0X2F0dF92aXNhX3BhX3Byb2R1a3RyYWQiLCAkY2F0ZWdvcnkpOyAvLyBnZXQgYWxsIGZpZWxkcyBpbiByZXBlYXRlcgoKICAgICAgaWYoIWVtcHR5KCRmaWVsZHMpKQogICAgICB7CiAgICAgICAgZm9yZWFjaCgkZmllbGRzIGFzICRmaWVsZCkKICAgICAgICB7CiAgICAgICAgICBpZihjb3VudCgkdmFsdWVzX3RvX3ByaW50KSA+PSA1KXticmVhazt9CgkJCQogICAgICAgICAgZm9yZWFjaCgkZmllbGQgYXMgJGtleSA9PiAkdmFsdWUpCiAgICAgICAgICB7CgkJCSAgJGF0dHJfdmFsdWUgPSAkcHJvZHVjdC0+Z2V0X2F0dHJpYnV0ZSgkdmFsdWUpOwogICAgICAgICAgICAgIGlmKCFlbXB0eSgkYXR0cl92YWx1ZSkpCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYoJGF0dHJfdmFsdWUgIT0gIk9zcGVjaWZpY2VyYXQiKQogICAgICAgICAgICAgICAgewoJCQkJCWlmKCFpbl9hcnJheSgkYXR0cl92YWx1ZSwgJHZhbHVlc190b19wcmludCkpCgkJCQkJewogICAgICAgICAgICAgICAgICAJCSR2YWx1ZXNfdG9fcHJpbnRbXSA9ICRhdHRyX3ZhbHVlOyAvLyBhZGQgdGF4b25vbXkgdG8gbGlzdAogICAgICAgICAgICAgICAgCX0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQoKICAgIH0KICB9CiAgCiAgICBpZihjb3VudCgkdmFsdWVzX3RvX3ByaW50KSA+IDApCgl7CiAgICAJcHJpbnQgJzx1bCBjbGFzcz0icHJvZHVrdGtvcnQtYXR0ciI+PGxpPjxpIGNsYXNzPSJmYXMgZmEtY2hlY2siPjwvaT4nIC4gaW1wbG9kZSggJzwvbGk+PGxpPjxpIGNsYXNzPSJmYXMgZmEtY2hlY2siPjwvaT4nLCAkdmFsdWVzX3RvX3ByaW50KSAuICc8L2xpPjwvdWw+JzsKCX1lbHNlewogICAgICAgIAoJCSRkZXNjID0gJHByb2R1Y3QtPmdldF9kZXNjcmlwdGlvbigpOwoJCSRkZXNjID0gZG9fc2hvcnRjb2RlKCRkZXNjKTsKCQkkZGVzYyA9IHN0cmlwX3RhZ3MoJGRlc2MpOwoJCQoJCWlmKCFlbXB0eSgkZGVzYykpCgkJewoJCQlpZihzdHJsZW4oJGRlc2MpID4gMTQwKQoJCQl7CgkJCQkkZGVzYyA9IHN1YnN0cigkZGVzYywgMCwgMTQwKSAuICIuLi4iOwoJCQl9CgkJfQoJCQoKCQlwcmludCAnPGRpdiBjbGFzcz0icHJvZHVjdC1zaG9ydC1kZXNjIj4nIC4gJGRlc2MgLiAnPC9kaXY+JzsKICAgIH0KfQoKPz4=
PGRpdiBpZD0icm95YWwtcHJvZHVjdC1wcmljZSI+CiAgPD9waHAKCiRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwoKaWYoaXNfYSgkcHJvZHVjdCwgIldDX1Byb2R1Y3QiKSkKewo/PgoKICAgIAo8P3BocAogCmlmKCRwcm9kdWN0LT5pc19vbl9zYWxlKCkpCnsKPz4KICAgICAgPGRpdiBpZD0icm95YWwtcHJvZHVjdC1wcmljZS1yZWd1bGFyIiBjbGFzcz0ic3RyaWtlb3V0Ij48P3BocCBwcmludCAkcHJvZHVjdC0+Z2V0X3JlZ3VsYXJfcHJpY2UoKTsgPz4ga3I8L2Rpdj48YnIgLz4KICAgICAgPGRpdiBpZD0icm95YWwtcHJvZHVjdC1wcmljZS1zYWxlIj48P3BocCBwcmludCAkcHJvZHVjdC0+Z2V0X3NhbGVfcHJpY2UoKTsgPz4ga3I8L2Rpdj4KPD9waHAKfWVsc2V7CnByaW50ICRwcm9kdWN0LT5nZXRfcHJpY2UoKSAuICIga3IiOwp9Cn0KZWxzZQp7CiAgcHJpbnQgIjAga3IiOwp9Cgo/Pgo8L2Rpdj4=
PD9waHAKCgokcHJvZHVjdCA9IGdldF9jdXJyZW50X3Byb2R1Y3QoKTsKCmlmKGlzX2EoJHByb2R1Y3QsICJXQ19Qcm9kdWN0IikgJiYgIXByb2R1Y3RfaXNfYnVuZGxlKCRwcm9kdWN0KSAmJiAkcHJvZHVjdC0+Z2V0X2NhdGFsb2dfdmlzaWJpbGl0eSgpID09ICJ2aXNpYmxlIiAmJiAhcHJvZHVjdF9pc19zZXJ2aWNlX2FydGljbGUoKSkKewogIAogICRnYSA9IGdldF9maWVsZCgiX3N0b2NrX2dhX2NvbG9yIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAkZ2FfcyA9IGdldF9maWVsZCgiX3N0b2NrX2dhIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAkZ2FfaSA9IGdldF9maWVsZCgiX3N0b2NrX2dhX2luY29taW5nIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAkZ2FfZCA9IGdldF9maWVsZCgiZGVtb19nYSIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CiAgCiAgJHN0ID0gZ2V0X2ZpZWxkKCJfc3RvY2tfc3RfY29sb3IiLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwogICRzdF9zID0gZ2V0X2ZpZWxkKCJfc3RvY2tfc3QiLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwogICRzdF9pID0gZ2V0X2ZpZWxkKCJfc3RvY2tfc3RfaW5jb21pbmciLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwogICRzdF9kID0gZ2V0X2ZpZWxkKCJkZW1vX3N0IiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAKICAkbGV2ID0gZ2V0X2ZpZWxkKCJfc3RvY2tfcmVtb3RlX2NvbG9yIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICBpZihlbXB0eSgkbGV2KSkKICAgICRsZXYgPSAiZ3JheSI7CiAgJGxldl9zID0gZ2V0X2ZpZWxkKCJfc3RvY2tfcmVtb3RlIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAkbGV2X2kgPSBnZXRfZmllbGQoIl9zdG9ja19yZW1vdGVfaW5jb21pbmciLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwogIAogICRkZWxpdmVyeSA9ICJncmF5IjsKICAKICAkc3RvY2tzID0gWyRnYSwgJHN0LCAkbGV2XTsKICAgIAogIGlmKGluX2FycmF5KCJibHVlIiwgJHN0b2NrcykpCiAgICAgICRkZWxpdmVyeSA9ICJibHVlIjsKCSAgICAKICBpZihpbl9hcnJheSgib3JhbmdlIiwgJHN0b2NrcykpCiAgICAgICRkZWxpdmVyeSA9ICJvcmFuZ2UiOwogICAgCiAgaWYoaW5fYXJyYXkoImdyZWVuIiwgJHN0b2NrcykpCiAgICAgICRkZWxpdmVyeSA9ICJncmVlbiI7CgogICR0b3QgPSAiZ3JheSI7CiAgaWYoaW5fYXJyYXkoImJsdWUiLCAkc3RvY2tzKSkKCSAgJHRvdCA9ICJibHVlIjsKICBpZihpbl9hcnJheSgib3JhbmdlIiwgJHN0b2NrcykpCgkgICR0b3QgPSAib3JhbmdlIjsKICBpZihpbl9hcnJheSgiZ3JlZW4iLCAkc3RvY2tzKSkKCSAgJHRvdCA9ICJncmVlbiI7CgkKICAkdG90X3MgPSAkZ2FfcyArICRzdF9zICsgJGxldl9zOwogICR0b3RfaSA9ICRnYV9pICsgJHN0X2kgKyAkbGV2X2k7CgkKCj8+Cgo8ZGl2IGNsYXNzPSJwcm9kdWN0LXN0b2NrLWxpc3QiPgoKCTw/cGhwIGlmKCR0b3RfcyA+IDAgfHwgJHRvdF9pID4gMCB8fCAkZGVsaXZlcnkgPT0gImJsdWUiKSB7ID8+Cgk8ZGl2IGNsYXNzPSJwcm9kdWN0LXN0b2NrLWxpc3QtaXRlbSI+CgkgIAoJICA8ZGl2IGNsYXNzPSJwcm9kdWN0LXN0b2NrLWxlZnQiPk9ubGluZTo8L2Rpdj4gPGkgY2xhc3M9ImZhcyBmYS1zcXVhcmUgcHJvZHVjdC1zdG9jay08P3BocCBwcmludCAkdG90OyA/PiI+PC9pPgoJCQoJCTw/cGhwIHByaW50ICgkdG90X3MgPiAxMCkgPyAiMTArIiA6ICR0b3RfczsgPz4gc3QKCQkKCQk8c3BhbiBjbGFzcz0icHJvZHVjdC1zdG9jay1leHRyYSI+CgkJPD9waHAgaWYoJHRvdF9zID09IDAgJiYgJHRvdF9pID4gMCkgeyA/PiAoPD9waHAgcHJpbnQgKCR0b3RfaSA+IDEwKSA/ICIxMCsiIDogJHRvdF9pOyA/PiBzdCBww6UgdsOkZyk8P3BocCB9ID8+CgkJPC9zcGFuPgoJPC9kaXY+Cgk8P3BocCB9ID8+CgogIDw/cGhwCiAgaWYoJGdhX3MgPiAwIHx8ICRnYV9pID4gMCB8fCAkZGVsaXZlcnkgPT0gImJsdWUiKXsgPz4KICAJPGRpdiBjbGFzcz0icHJvZHVjdC1zdG9jay1saXN0LWl0ZW0iPjxkaXYgY2xhc3M9InByb2R1Y3Qtc3RvY2stbGVmdCI+R8OkdmxlOjwvZGl2PjxpIGNsYXNzPSJmYXMgZmEtc3F1YXJlIHByb2R1Y3Qtc3RvY2stPD9waHAgcHJpbnQgJGdhOyA/PiI+PC9pPjw/cGhwIHByaW50ICgkZ2FfcyA+IDEwKSA/ICIxMCsiIDogJGdhX3M7ID8+IHN0CgkJCgkJCgkJPHNwYW4gY2xhc3M9InByb2R1Y3Qtc3RvY2stZXh0cmEiPgoJCQk8P3BocCBpZigkZ2FfaSA+IDAgJiYgJGdhX3MgPT0gMCAmJiAkbGV2X3MgPT0gMCk6ID8+ICg8P3BocCBwcmludCAoJGdhX2kgPiAxMCkgPyAiMTArIiA6ICRnYV9pOyA/PiBzdCBww6UgdsOkZyk8P3BocCBlbmRpZjsgPz48P3BocCBpZigkZ2FfZCA9PSB0cnVlICYgJGdhX3MgPT0gMSk6ID8+IChEZW1vZXgpPD9waHAgZW5kaWY7ID8+CgkJPC9zcGFuPgoJCQk8L2Rpdj4KCQkKICA8P3BocCB9ID8+CiAgCiAgPD9waHAKICBpZigkc3RfcyA+IDAgfHwgJHN0X2kgPiAwIHx8ICRkZWxpdmVyeSA9PSAiYmx1ZSIpeyA/PgogIAk8ZGl2IGNsYXNzPSJwcm9kdWN0LXN0b2NrLWxpc3QtaXRlbSI+PGRpdiBjbGFzcz0icHJvZHVjdC1zdG9jay1sZWZ0Ij5TdG9ja2hvbG06PC9kaXY+PGkgY2xhc3M9ImZhcyBmYS1zcXVhcmUgcHJvZHVjdC1zdG9jay08P3BocCBwcmludCAkc3Q7ID8+Ij48L2k+PD9waHAgcHJpbnQgKCRzdF9zID4gMTApID8gIjEwKyIgOiAkc3RfczsgPz4gc3QKCQkKCQkKCQk8c3BhbiBjbGFzcz0icHJvZHVjdC1zdG9jay1leHRyYSI+CgkJPD9waHAgaWYoJHN0X2kgPiAwICYmICRzdF9zID09IDAgJiYgJGxldl9zID09IDApOiA/PiAoPD9waHAgcHJpbnQgKCRzdF9pID4gMTApID8gIjEwKyIgOiAkc3RfaTsgPz4gc3QgcMOlIHbDpGcpPD9waHAgZW5kaWY7ID8+PD9waHAgaWYoJHN0X2QgPT0gdHJ1ZSAmICRzdF9zID09IDEpOiA/PiAoRGVtb2V4KTw/cGhwIGVuZGlmOyA/PgoJCTwvc3Bhbj4KCQkJPC9kaXY+CiAgPD9waHAgfSA/PgogIAo8L2Rpdj4KCjw/cGhwCn0KPz4=
PD9waHAKCgogICRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwogIGlmKGlzX2EoJHByb2R1Y3QsICJXQ19Qcm9kdWN0IikgJiYgJHByb2R1Y3QtPmdldF9jYXRhbG9nX3Zpc2liaWxpdHkoKSA9PSAidmlzaWJsZSIgJiYgIXByb2R1Y3RfaXNfc2VydmljZV9hcnRpY2xlKCkpCiAgewogICAgCiAgICAkZ2EgPSBnZXRfZmllbGQoIl9zdG9ja19nYV9jb2xvciIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CiAgICAkZ2FfcyA9IGdldF9maWVsZCgiX3N0b2NrX2dhIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAgICRnYV9pID0gZ2V0X2ZpZWxkKCJfc3RvY2tfZ2FfaW5jb21pbmciLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwogICAgJGdhX2QgPSBnZXRfZmllbGQoImRlbW9fZ2EiLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwoKICAgICRzdCA9IGdldF9maWVsZCgiX3N0b2NrX3N0X2NvbG9yIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAgICRzdF9zID0gZ2V0X2ZpZWxkKCJfc3RvY2tfc3QiLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwogICAgJHN0X2kgPSBnZXRfZmllbGQoIl9zdG9ja19zdF9pbmNvbWluZyIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CiAgICAkc3RfZCA9IGdldF9maWVsZCgiZGVtb19zdCIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CgogICAgJGxldiA9IGdldF9maWVsZCgiX3N0b2NrX3JlbW90ZV9jb2xvciIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CiAgICBpZihlbXB0eSgkbGV2KSkKICAgICAgJGxldiA9ICJncmF5IjsKICAgICRsZXZfcyA9IGdldF9maWVsZCgiX3N0b2NrX3JlbW90ZSIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CiAgCiAgICAkc2hvd19idXR0b24gPSBnZXRfZmllbGQoImRvbGpfa29wa25hcHAiLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwogICAgJGhhc19jYXRlZ29yeSA9ICFlbXB0eSgkcHJvZHVjdC0+Z2V0X2NhdGVnb3J5X2lkcygpKTsKCiAgICBpZigkc2hvd19idXR0b24gIT0gdHJ1ZSkKICAgIHsKICAgICAgaWYoJHN0X3MgPiAwIHx8ICRnYV9zID4gMCB8fCAkbGV2ICE9ICdncmF5Jyl7CiAgCj8+CjxhIGNsYXNzPSJyb3lhbC1jYXJ0LWxpbmsgYWRkX3RvX2NhcnRfYnV0dG9uIGFqYXhfYWRkX3RvX2NhcnQiIGhyZWY9Ij9hZGQtdG8tY2FydD08P3BocCBwcmludCAkcHJvZHVjdC0+Z2V0X2lkKCk7ID8+IiBkYXRhLXF1YW50aXR5PSIxIiBkYXRhLXByb2R1Y3RfaWQ9Ijw/cGhwIHByaW50ICRwcm9kdWN0LT5nZXRfaWQoKTsgPz4iIGRhdGEtcHJvZHVjdF9za3U9Ijw/cGhwIHByaW50ICRwcm9kdWN0LT5nZXRfc2t1KCk7ID8+Ij48YnV0dG9uIGNsYXNzPSJyb3lhbC1jYXJ0Ij48aSBjbGFzcz0iZmFzIGZhLWNhcnQtcGx1cyI+PC9pPjwvYnV0dG9uPjwvYT4KPGEgY2xhc3M9ImFkZGVkLXRvLWNhcnQgd2MtZm9yd2FyZCIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPjwvYT4KPD9waHAKICAgICAgfQogICAgCiAgfWVsc2V7CiAgICBpZigkc3RfcyA+IDAgfHwgJGdhX3MgPiAwIHx8ICRsZXYgIT0gJ2dyYXknKXsKPz4KPGEgY2xhc3M9InJveWFsLWNhcnQtbGluayBhZGRfdG9fY2FydF9idXR0b24gYWpheF9hZGRfdG9fY2FydCIgaHJlZj0iP2FkZC10by1jYXJ0PTAiIGRhdGEtcXVhbnRpdHk9IjEiIGRhdGEtcHJvZHVjdF9pZD0iMCIgZGF0YS1wcm9kdWN0X3NrdT0iMCI+PGJ1dHRvbiBjbGFzcz0icm95YWwtY2FydCI+PGkgY2xhc3M9ImZhcyBmYS1jYXJ0LXBsdXMiPjwvaT48L2J1dHRvbj48L2E+CjxhIGNsYXNzPSJhZGRlZC10by1jYXJ0IHdjLWZvcndhcmQiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij48L2E+Cjw/cGhwCiAgICAgIH0KICB9Cn0KCj8+
PD9waHAKCgogICRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwogIGlmKGlzX2EoJHByb2R1Y3QsICJXQ19Qcm9kdWN0IikpCiAgewogICAgCiAgICAkZ2EgPSBnZXRfZmllbGQoIl9zdG9ja19nYV9jb2xvciIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CiAgICAkc3QgPSBnZXRfZmllbGQoIl9zdG9ja19zdF9jb2xvciIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CiAgICAkbGV2ID0gZ2V0X2ZpZWxkKCJfc3RvY2tfcmVtb3RlX2NvbG9yIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAKICAgICAgaWYoJGdhID09ICJncmF5IiAmJiAkc3QgPT0gImdyYXkiICYmICRsZXYgPT0gImdyYXkiKXsKCQkgID8+CiAgPHNwYW4gY2xhc3M9J3Byb2R1Y3Qtbm90LWF2YWlsYWJsZSc+UHJvZHVrdGVuIMOkciB0eXbDpHJyIGludGUgdGlsbGfDpG5nbGlnIGp1c3QgbnUuPC9zcGFuPgo8P3BocAogICAgfQogICAgCiAgfQoKPz4=
PD9waHAKCiRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwoKaWYoaXNfYSgkcHJvZHVjdCwgIldDX1Byb2R1Y3QiKSkKewoJCgkkZmFyZ2VyID0gW107CgkKCWlmKHN0cmxlbigkcHJvZHVjdC0+Z2V0X2F0dHJpYnV0ZSgiYmxhY2stZmFyZyIpKSA+IDApCgkJJGZhcmdlciA9IGFycmF5X21lcmdlKCRmYXJnZXIsIGV4cGxvZGUoIiwgIiwgJHByb2R1Y3QtPmdldF9hdHRyaWJ1dGUoImJsYWNrLWZhcmciKSkpOwoJCglpZihzdHJsZW4oJHByb2R1Y3QtPmdldF9hdHRyaWJ1dGUoInRvbmVyLWZhcmciKSkgPiAwKQoJCSRmYXJnZXIgPSBhcnJheV9tZXJnZSgkZmFyZ2VyLCBleHBsb2RlKCIsICIsICRwcm9kdWN0LT5nZXRfYXR0cmlidXRlKCJ0b25lci1mYXJnIikpKTsKCQoJaWYoaXNfYXJyYXkoJGZhcmdlcikgJiYgY291bnQoJGZhcmdlcikgPiAwKQoJewoJCXByaW50ICc8ZGl2IGNsYXNzPSJyb3lhbC1wcm9kdWN0LWNhcmQtdjItaW5rLWRvdHMiPic7CgkJCgkJZm9yZWFjaCgkZmFyZ2VyIGFzICRmYXJnKQoJCXsKCQkJaWYoJGZhcmcgPT0gIk9zcGVjaWZpY2VyYXQiKQoJCQkJY29udGludWU7CgkJCQoJCQlpZihzdHJsZW4oJGZhcmcpIDwgMSkKCQkJCWNvbnRpbnVlOwoJCQkKCQkJcHJpbnQgJzxkaXYgY2xhc3M9InJveWFsLXByb2R1Y3QtY2FyZC12Mi1pbmstZG90IGluay1kb3QtJyAuIHN0cnRvbG93ZXIoJGZhcmcpIC4gJyI+PC9kaXY+JzsKCQl9CgkJCgkJcHJpbnQgJzwvZGl2Pic7Cgl9Cn0KCj8+
Cgo8P3BocAoKJHByb2R1Y3QgPSBnZXRfY3VycmVudF9wcm9kdWN0KCk7CgppZihpc19hKCRwcm9kdWN0LCAiV0NfUHJvZHVjdCIpKQp7CiAgaWYoJHByb2R1Y3QtPmlzX29uX3NhbGUoKSkKICB7Cj8+PGRpdiBjbGFzcz0icm95YWwtcHJvZHVjdC1kaXNjb3VudCI+PD9waHAKICAKICAkc2FsZV9wcmljZSA9ICRwcm9kdWN0LT5nZXRfc2FsZV9wcmljZSgpOwogICRyZWd1bGFyX3ByaWNlID0gJHByb2R1Y3QtPmdldF9yZWd1bGFyX3ByaWNlKCk7CiAgJHByaWNlX2RpZmYgPSAkcmVndWxhcl9wcmljZSAtICRzYWxlX3ByaWNlOwoJICAKICBpZiAoJHByaWNlX2RpZmYgPiAxOTkpIHsKICBwcmludCAic3BhcmEgIiAuIHJvdW5kKCRwcmljZV9kaWZmKSAuICIga3IiOwp9IGVsc2UgewogICRwZXJjZW50YWdlID0gKCgkcmVndWxhcl9wcmljZSAtICRzYWxlX3ByaWNlKSAqIDEwMCkgLyAkcmVndWxhcl9wcmljZTsKICBwcmludCByb3VuZCgkcGVyY2VudGFnZSkgLiAiJSI7Cn0gCgkgIAoJICAKICAKICAKPz48L2Rpdj48P3BocAogIH0KLyp9ZWxzZXsKPz48ZGl2IGNsYXNzPSJyb3lhbC1wcm9kdWN0LWRpc2NvdW50Ij48P3BocAogIHByaW50ICIwJSI7Cj8+PC9kaXY+PD9waHAqLwp9Cgo/Pg==
PD9waHAKCiRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwoKaWYoaXNfYSgkcHJvZHVjdCwgIldDX1Byb2R1Y3QiKSkKewogIGlmKCRwcm9kdWN0LT5pc19vbl9zYWxlKCkpCiAgewoJICAKCSAgJGV4dHJhX2NsYXNzID0gKGNhbXBhaWduX2lzX2FjdGl2ZSgxOTYwNCkgJiYgY2FtcGFpZ25faGFzX3Byb2R1Y3QoMTk2MDQsICRwcm9kdWN0LT5nZXRfaWQoKSkpID8gImJsYWNrLXdlZWsiIDogIiI7CgkgICR0ZXh0ID0gKGNhbXBhaWduX2lzX2FjdGl2ZSgxOTYwNCkgJiYgY2FtcGFpZ25faGFzX3Byb2R1Y3QoMTk2MDQsICRwcm9kdWN0LT5nZXRfaWQoKSkpID8gIkN5YmVyIFdlZWsiIDogIkthbXBhbmoiOwogID8+Cgo8ZGl2IGlkPSJkaXZfYmxvY2stNTItMTI0NTgiIGNsYXNzPSJjdC1kaXYtYmxvY2siPgoJPGRpdiBpZD0idGV4dF9ibG9jay01My0xMjQ1OCIgY2xhc3M9ImN0LXRleHQtYmxvY2sgYW5nbGVkLWJhbm5lciA8P3BocCBwcmludCAkZXh0cmFfY2xhc3M7ID8+Ij4KCQk8P3BocCBwcmludCAkdGV4dDsgPz4KCTwvZGl2Pgo8L2Rpdj4KCjw/cGhwCiAgfQp9Cj8+
PD9waHAKCiRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwppZihpc19hKCRwcm9kdWN0LCAiV0NfUHJvZHVjdCIpKQp7CgogICRjYXRlZ29yaWVzID0gJHByb2R1Y3QtPmdldF9jYXRlZ29yeV9pZHMoKTsKICAKICBmb3JlYWNoKCRjYXRlZ29yaWVzIGFzICRjYXRlZ29yeSkKICB7CiAgIAkJJGhhc19iYW5uZXIgPSBnZXRfZmllbGQoInZpc2FfYmFubmVyX3BhX3Byb2R1a3QiLCAicHJvZHVjdF9jYXRfIiAuICRjYXRlZ29yeSk7CiAgICAKICAgIAlpZigkaGFzX2Jhbm5lciA9PSB0cnVlKQogICAgICAgIHsKICAgICAgICAgICRjb2xvciA9IGdldF9maWVsZCgiYmFubmVyZmFyZyIsICJwcm9kdWN0X2NhdF8iIC4gJGNhdGVnb3J5KTsKICAgICAgICAgICR0ZXh0ID0gZ2V0X2ZpZWxkKCJiYW5uZXJ0ZXh0IiwgInByb2R1Y3RfY2F0XyIgLiAkY2F0ZWdvcnkpOwogICAgICAgICAgJHRleHRjb2xvciA9IGdldF9maWVsZCgiYmFubmVydGV4dGZhcmciLCAicHJvZHVjdF9jYXRfIiAuICRjYXRlZ29yeSk7CiAgICAgICAgICAKICAgICAgICAgIHByaW50ICc8ZGl2IGNsYXNzPSJyb3lhbC1wcm9kdWN0LWJhbm5lciBjYXJkIiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjonIC4gJGNvbG9yIC4gJyI+JzsKICAJCSAgcHJpbnQgJzxkaXYgY2xhc3M9InJveWFsLXByb2R1Y3QtYmFubmVyLXRleHQiIHN0eWxlPSJjb2xvcjonIC4gJHRleHRjb2xvciAuICciPic7CiAgCQkgIHByaW50ICR0ZXh0OwogIAkJICBwcmludCAnPC9kaXY+JzsKICAJCSAgcHJpbnQgJzwvZGl2Pic7CiAgICAgICAgfQogIH0KCQoJaWYoZ2V0X2ZpZWxkKCJwcmUtb3duZWQiLCAkcHJvZHVjdC0+Z2V0X2lkKCkpID09IDEpCgl7CiAgICAgICAgICBwcmludCAnPGRpdiBjbGFzcz0icm95YWwtcHJvZHVjdC1iYW5uZXIgY2FyZCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IzNhNzRmZiI+JzsKICAJCSAgcHJpbnQgJzxkaXYgY2xhc3M9InJveWFsLXByb2R1Y3QtYmFubmVyLXRleHQiIHN0eWxlPSJjb2xvcjojZmZmIj4nOwogIAkJICBwcmludCAiUHJlLW93bmVkIjsKICAJCSAgcHJpbnQgJzwvZGl2Pic7CiAgCQkgIHByaW50ICc8L2Rpdj4nOwoJfQogIAp9Cgo/Pg==
PD9waHAKCiRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwoKaWYoaXNfYSgkcHJvZHVjdCwgIldDX1Byb2R1Y3QiKSkKewogICRpZCA9ICRwcm9kdWN0LT5nZXRfaWQoKTsKICAkZGVtbyA9IGZhbHNlOwogIGlmKGdldF9maWVsZCgiZGVtb19nYSIsICRpZCkgPT0gdHJ1ZSAmIGdldF9maWVsZCgiX3N0b2NrX3N0IiwgJGlkKSA9PSAwICYgZ2V0X2ZpZWxkKCJfc3RvY2tfZ2EiLCAkaWQpID09IDEpOiAkZGVtbyA9IHRydWU7IGVuZGlmOwogIGlmKGdldF9maWVsZCgiZGVtb19zdCIsICRpZCkgPT0gdHJ1ZSAmIGdldF9maWVsZCgiX3N0b2NrX2dhIiwgJGlkKSA9PSAwICYgZ2V0X2ZpZWxkKCJfc3RvY2tfc3QiLCAkaWQpID09IDEpOiAkZGVtbyA9IHRydWU7IGVuZGlmOwoKICBpZigkZGVtbyk6cHJpbnQgJzxzcGFuIGNsYXNzPSJwcm9kdWN0LWNhcmQtZGVtb2V4Ij5kZW1vPC9zcGFuPic7ZW5kaWY7IAp9Cj8+
PD9waHAKCiRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwoKaWYoaXNfYSgkcHJvZHVjdCwgIldDX1Byb2R1Y3QiKSkKewoJCj8+CjxhIGlkPSJsaW5rLTQ3LTEyNDU4IiBjbGFzcz0iY3QtbGluayIgaHJlZj0iPD9waHAgcHJpbnQgJHByb2R1Y3QtPmdldF9wZXJtYWxpbmsoKTsgPz4iIHRhcmdldD0iX3NlbGYiPgogIAo8P3BocCBwcmludCBnZXRfdGhlX3Bvc3RfdGh1bWJuYWlsKCAkcHJvZHVjdC0+Z2V0X2lkKCksICdtZWRpdW0nLCBhcnJheSggJ2NsYXNzJyA9PiAnYXV0by1zY2FsZScgKSApOyA/PgoJCjwvYT4KPD9waHAKfQoKPz4=
PD9waHAKCiRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwoKaWYoaXNfYSgkcHJvZHVjdCwgIldDX1Byb2R1Y3QiKSkKewokaWQgPSAkcHJvZHVjdC0+Z2V0X2lkKCk7CgppZihpc19hKCRwcm9kdWN0LCAiV0NfUHJvZHVjdCIpKXsKICBwcmludCAiPGEgaHJlZj0nIiAuIGdldF9wZXJtYWxpbmsoICRwcm9kdWN0LT5nZXRfaWQoKSApIC4gIicgY2xhc3M9J3Byb2R1Y3QtY2FyZC10aXRsZScgPiIgLiAkcHJvZHVjdC0+Z2V0X3RpdGxlKCkgLiAiPC9hPiI7CgoKfWVsc2V7CiAgcHJpbnQgIlByb2R1a3RuYW1uIjsKfQp9ZWxzZXsKIHByaW50ICJJbmdldCBwcm9kdWt0bmFtbiBoaXR0YWRlcyI7IAp9Cgo/Pg==
PD9waHAKJHByb2R1Y3QgPSBnZXRfY3VycmVudF9wcm9kdWN0KCk7CgppZihpc19hKCRwcm9kdWN0LCAiV0NfUHJvZHVjdCIpKQp7CnByaW50ICI8c3BhbiBzdHlsZT0nZGlzcGxheTpibG9jaztoZWlnaHQ6MTNweDsnPiIuJHByb2R1Y3QtPmdldF9za3UoKS4iIDwvc3Bhbj4iOwp9Cj8+
PD9waHAKCgovLyBzaG93X2Rlc2Nfbm9fYXR0cwoKJHByb2R1Y3QgPSBnZXRfY3VycmVudF9wcm9kdWN0KCk7CgppZihpc19hKCRwcm9kdWN0LCAiV0NfUHJvZHVjdCIpKQp7CgogICRjYXRlZ29yeV9pZHMgPSAkcHJvZHVjdC0+Z2V0X2NhdGVnb3J5X2lkcygpOwogIC8qJGNhdGVnb3JpZXMgPSBnZXRfdGVybXMoWwogICAgICAidGVybV90YXhvbm9teV9pZCIgPT4gJGNhdGVnb3J5X2lkcwogIF0pOyovCgogICR2YWx1ZXNfdG9fcHJpbnQgPSBbXTsKICBpZighZW1wdHkoJGNhdGVnb3J5X2lkcykgJiYgY291bnQoJGNhdGVnb3J5X2lkcykgPiAwKQogIHsKICAgIGZvcmVhY2goJGNhdGVnb3J5X2lkcyBhcyAkY2F0ZWdvcnlfaWQpCiAgICB7CgoJCSRjYXRlZ29yeSA9ICJwcm9kdWN0X2NhdF8iIC4gJGNhdGVnb3J5X2lkOwoJCSRub19hdHRzID0gZ2V0X2ZpZWxkKCJzaG93X2Rlc2Nfbm9fYXR0cyIsICRjYXRlZ29yeSk7CgkJCgkJaWYoJG5vX2F0dHMgPT0gdHJ1ZSkKCQl7CgkJCSR2YWx1ZXNfdG9fcHJpbnQgPSBbXTsKCQkJYnJlYWs7CgkJfQoJCQogICAgICAkaGFzX3Jvd3MgPSBoYXZlX3Jvd3MoImF0dHJpYnV0X2F0dF92aXNhX3BhX3Byb2R1a3RyYWQiLCAkY2F0ZWdvcnkpOwoKICAgICAgaWYoISRoYXNfcm93cykKICAgICAgICBjb250aW51ZTsKCiAgICAgICRmaWVsZHMgPSBnZXRfZmllbGQoImF0dHJpYnV0X2F0dF92aXNhX3BhX3Byb2R1a3RyYWQiLCAkY2F0ZWdvcnkpOyAvLyBnZXQgYWxsIGZpZWxkcyBpbiByZXBlYXRlcgoKICAgICAgaWYoIWVtcHR5KCRmaWVsZHMpKQogICAgICB7CiAgICAgICAgZm9yZWFjaCgkZmllbGRzIGFzICRmaWVsZCkKICAgICAgICB7CiAgICAgICAgICBpZihjb3VudCgkdmFsdWVzX3RvX3ByaW50KSA+PSA1KXticmVhazt9CgkJCQogICAgICAgICAgZm9yZWFjaCgkZmllbGQgYXMgJGtleSA9PiAkdmFsdWUpCiAgICAgICAgICB7CgkJCSAgJGF0dHJfdmFsdWUgPSAkcHJvZHVjdC0+Z2V0X2F0dHJpYnV0ZSgkdmFsdWUpOwogICAgICAgICAgICAgIGlmKCFlbXB0eSgkYXR0cl92YWx1ZSkpCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYoJGF0dHJfdmFsdWUgIT0gIk9zcGVjaWZpY2VyYXQiKQogICAgICAgICAgICAgICAgewoJCQkJCWlmKCFpbl9hcnJheSgkYXR0cl92YWx1ZSwgJHZhbHVlc190b19wcmludCkpCgkJCQkJewogICAgICAgICAgICAgICAgICAJCSR2YWx1ZXNfdG9fcHJpbnRbXSA9ICRhdHRyX3ZhbHVlOyAvLyBhZGQgdGF4b25vbXkgdG8gbGlzdAogICAgICAgICAgICAgICAgCX0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQoKICAgIH0KICB9CiAgCiAgICBpZihjb3VudCgkdmFsdWVzX3RvX3ByaW50KSA+IDApCgl7CiAgICAJcHJpbnQgJzx1bCBjbGFzcz0icHJvZHVrdGtvcnQtYXR0ciI+PGxpPjxpIGNsYXNzPSJmYXMgZmEtY2hlY2siPjwvaT4nIC4gaW1wbG9kZSggJzwvbGk+PGxpPjxpIGNsYXNzPSJmYXMgZmEtY2hlY2siPjwvaT4nLCAkdmFsdWVzX3RvX3ByaW50KSAuICc8L2xpPjwvdWw+JzsKCX1lbHNlewogICAgICAgIAoJCSRkZXNjID0gJHByb2R1Y3QtPmdldF9kZXNjcmlwdGlvbigpOwoJCSRkZXNjID0gZG9fc2hvcnRjb2RlKCRkZXNjKTsKCQkkZGVzYyA9IHN0cmlwX3RhZ3MoJGRlc2MpOwoJCQoJCWlmKCFlbXB0eSgkZGVzYykpCgkJewoJCQlpZihzdHJsZW4oJGRlc2MpID4gMTQwKQoJCQl7CgkJCQkkZGVzYyA9IHN1YnN0cigkZGVzYywgMCwgMTQwKSAuICIuLi4iOwoJCQl9CgkJfQoJCQoKCQlwcmludCAnPGRpdiBjbGFzcz0icHJvZHVjdC1zaG9ydC1kZXNjIj4nIC4gJGRlc2MgLiAnPC9kaXY+JzsKICAgIH0KfQoKPz4=
PGRpdiBpZD0icm95YWwtcHJvZHVjdC1wcmljZSI+CiAgPD9waHAKCiRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwoKaWYoaXNfYSgkcHJvZHVjdCwgIldDX1Byb2R1Y3QiKSkKewo/PgoKICAgIAo8P3BocAogCmlmKCRwcm9kdWN0LT5pc19vbl9zYWxlKCkpCnsKPz4KICAgICAgPGRpdiBpZD0icm95YWwtcHJvZHVjdC1wcmljZS1yZWd1bGFyIiBjbGFzcz0ic3RyaWtlb3V0Ij48P3BocCBwcmludCAkcHJvZHVjdC0+Z2V0X3JlZ3VsYXJfcHJpY2UoKTsgPz4ga3I8L2Rpdj48YnIgLz4KICAgICAgPGRpdiBpZD0icm95YWwtcHJvZHVjdC1wcmljZS1zYWxlIj48P3BocCBwcmludCAkcHJvZHVjdC0+Z2V0X3NhbGVfcHJpY2UoKTsgPz4ga3I8L2Rpdj4KPD9waHAKfWVsc2V7CnByaW50ICRwcm9kdWN0LT5nZXRfcHJpY2UoKSAuICIga3IiOwp9Cn0KZWxzZQp7CiAgcHJpbnQgIjAga3IiOwp9Cgo/Pgo8L2Rpdj4=
PD9waHAKCgokcHJvZHVjdCA9IGdldF9jdXJyZW50X3Byb2R1Y3QoKTsKCmlmKGlzX2EoJHByb2R1Y3QsICJXQ19Qcm9kdWN0IikgJiYgIXByb2R1Y3RfaXNfYnVuZGxlKCRwcm9kdWN0KSAmJiAkcHJvZHVjdC0+Z2V0X2NhdGFsb2dfdmlzaWJpbGl0eSgpID09ICJ2aXNpYmxlIiAmJiAhcHJvZHVjdF9pc19zZXJ2aWNlX2FydGljbGUoKSkKewogIAogICRnYSA9IGdldF9maWVsZCgiX3N0b2NrX2dhX2NvbG9yIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAkZ2FfcyA9IGdldF9maWVsZCgiX3N0b2NrX2dhIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAkZ2FfaSA9IGdldF9maWVsZCgiX3N0b2NrX2dhX2luY29taW5nIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAkZ2FfZCA9IGdldF9maWVsZCgiZGVtb19nYSIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CiAgCiAgJHN0ID0gZ2V0X2ZpZWxkKCJfc3RvY2tfc3RfY29sb3IiLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwogICRzdF9zID0gZ2V0X2ZpZWxkKCJfc3RvY2tfc3QiLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwogICRzdF9pID0gZ2V0X2ZpZWxkKCJfc3RvY2tfc3RfaW5jb21pbmciLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwogICRzdF9kID0gZ2V0X2ZpZWxkKCJkZW1vX3N0IiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAKICAkbGV2ID0gZ2V0X2ZpZWxkKCJfc3RvY2tfcmVtb3RlX2NvbG9yIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICBpZihlbXB0eSgkbGV2KSkKICAgICRsZXYgPSAiZ3JheSI7CiAgJGxldl9zID0gZ2V0X2ZpZWxkKCJfc3RvY2tfcmVtb3RlIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAkbGV2X2kgPSBnZXRfZmllbGQoIl9zdG9ja19yZW1vdGVfaW5jb21pbmciLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwogIAogICRkZWxpdmVyeSA9ICJncmF5IjsKICAKICAkc3RvY2tzID0gWyRnYSwgJHN0LCAkbGV2XTsKICAgIAogIGlmKGluX2FycmF5KCJibHVlIiwgJHN0b2NrcykpCiAgICAgICRkZWxpdmVyeSA9ICJibHVlIjsKCSAgICAKICBpZihpbl9hcnJheSgib3JhbmdlIiwgJHN0b2NrcykpCiAgICAgICRkZWxpdmVyeSA9ICJvcmFuZ2UiOwogICAgCiAgaWYoaW5fYXJyYXkoImdyZWVuIiwgJHN0b2NrcykpCiAgICAgICRkZWxpdmVyeSA9ICJncmVlbiI7CgogICR0b3QgPSAiZ3JheSI7CiAgaWYoaW5fYXJyYXkoImJsdWUiLCAkc3RvY2tzKSkKCSAgJHRvdCA9ICJibHVlIjsKICBpZihpbl9hcnJheSgib3JhbmdlIiwgJHN0b2NrcykpCgkgICR0b3QgPSAib3JhbmdlIjsKICBpZihpbl9hcnJheSgiZ3JlZW4iLCAkc3RvY2tzKSkKCSAgJHRvdCA9ICJncmVlbiI7CgkKICAkdG90X3MgPSAkZ2FfcyArICRzdF9zICsgJGxldl9zOwogICR0b3RfaSA9ICRnYV9pICsgJHN0X2kgKyAkbGV2X2k7CgkKCj8+Cgo8ZGl2IGNsYXNzPSJwcm9kdWN0LXN0b2NrLWxpc3QiPgoKCTw/cGhwIGlmKCR0b3RfcyA+IDAgfHwgJHRvdF9pID4gMCB8fCAkZGVsaXZlcnkgPT0gImJsdWUiKSB7ID8+Cgk8ZGl2IGNsYXNzPSJwcm9kdWN0LXN0b2NrLWxpc3QtaXRlbSI+CgkgIAoJICA8ZGl2IGNsYXNzPSJwcm9kdWN0LXN0b2NrLWxlZnQiPk9ubGluZTo8L2Rpdj4gPGkgY2xhc3M9ImZhcyBmYS1zcXVhcmUgcHJvZHVjdC1zdG9jay08P3BocCBwcmludCAkdG90OyA/PiI+PC9pPgoJCQoJCTw/cGhwIHByaW50ICgkdG90X3MgPiAxMCkgPyAiMTArIiA6ICR0b3RfczsgPz4gc3QKCQkKCQk8c3BhbiBjbGFzcz0icHJvZHVjdC1zdG9jay1leHRyYSI+CgkJPD9waHAgaWYoJHRvdF9zID09IDAgJiYgJHRvdF9pID4gMCkgeyA/PiAoPD9waHAgcHJpbnQgKCR0b3RfaSA+IDEwKSA/ICIxMCsiIDogJHRvdF9pOyA/PiBzdCBww6UgdsOkZyk8P3BocCB9ID8+CgkJPC9zcGFuPgoJPC9kaXY+Cgk8P3BocCB9ID8+CgogIDw/cGhwCiAgaWYoJGdhX3MgPiAwIHx8ICRnYV9pID4gMCB8fCAkZGVsaXZlcnkgPT0gImJsdWUiKXsgPz4KICAJPGRpdiBjbGFzcz0icHJvZHVjdC1zdG9jay1saXN0LWl0ZW0iPjxkaXYgY2xhc3M9InByb2R1Y3Qtc3RvY2stbGVmdCI+R8OkdmxlOjwvZGl2PjxpIGNsYXNzPSJmYXMgZmEtc3F1YXJlIHByb2R1Y3Qtc3RvY2stPD9waHAgcHJpbnQgJGdhOyA/PiI+PC9pPjw/cGhwIHByaW50ICgkZ2FfcyA+IDEwKSA/ICIxMCsiIDogJGdhX3M7ID8+IHN0CgkJCgkJCgkJPHNwYW4gY2xhc3M9InByb2R1Y3Qtc3RvY2stZXh0cmEiPgoJCQk8P3BocCBpZigkZ2FfaSA+IDAgJiYgJGdhX3MgPT0gMCAmJiAkbGV2X3MgPT0gMCk6ID8+ICg8P3BocCBwcmludCAoJGdhX2kgPiAxMCkgPyAiMTArIiA6ICRnYV9pOyA/PiBzdCBww6UgdsOkZyk8P3BocCBlbmRpZjsgPz48P3BocCBpZigkZ2FfZCA9PSB0cnVlICYgJGdhX3MgPT0gMSk6ID8+IChEZW1vZXgpPD9waHAgZW5kaWY7ID8+CgkJPC9zcGFuPgoJCQk8L2Rpdj4KCQkKICA8P3BocCB9ID8+CiAgCiAgPD9waHAKICBpZigkc3RfcyA+IDAgfHwgJHN0X2kgPiAwIHx8ICRkZWxpdmVyeSA9PSAiYmx1ZSIpeyA/PgogIAk8ZGl2IGNsYXNzPSJwcm9kdWN0LXN0b2NrLWxpc3QtaXRlbSI+PGRpdiBjbGFzcz0icHJvZHVjdC1zdG9jay1sZWZ0Ij5TdG9ja2hvbG06PC9kaXY+PGkgY2xhc3M9ImZhcyBmYS1zcXVhcmUgcHJvZHVjdC1zdG9jay08P3BocCBwcmludCAkc3Q7ID8+Ij48L2k+PD9waHAgcHJpbnQgKCRzdF9zID4gMTApID8gIjEwKyIgOiAkc3RfczsgPz4gc3QKCQkKCQkKCQk8c3BhbiBjbGFzcz0icHJvZHVjdC1zdG9jay1leHRyYSI+CgkJPD9waHAgaWYoJHN0X2kgPiAwICYmICRzdF9zID09IDAgJiYgJGxldl9zID09IDApOiA/PiAoPD9waHAgcHJpbnQgKCRzdF9pID4gMTApID8gIjEwKyIgOiAkc3RfaTsgPz4gc3QgcMOlIHbDpGcpPD9waHAgZW5kaWY7ID8+PD9waHAgaWYoJHN0X2QgPT0gdHJ1ZSAmICRzdF9zID09IDEpOiA/PiAoRGVtb2V4KTw/cGhwIGVuZGlmOyA/PgoJCTwvc3Bhbj4KCQkJPC9kaXY+CiAgPD9waHAgfSA/PgogIAo8L2Rpdj4KCjw/cGhwCn0KPz4=
PD9waHAKCgogICRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwogIGlmKGlzX2EoJHByb2R1Y3QsICJXQ19Qcm9kdWN0IikgJiYgJHByb2R1Y3QtPmdldF9jYXRhbG9nX3Zpc2liaWxpdHkoKSA9PSAidmlzaWJsZSIgJiYgIXByb2R1Y3RfaXNfc2VydmljZV9hcnRpY2xlKCkpCiAgewogICAgCiAgICAkZ2EgPSBnZXRfZmllbGQoIl9zdG9ja19nYV9jb2xvciIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CiAgICAkZ2FfcyA9IGdldF9maWVsZCgiX3N0b2NrX2dhIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAgICRnYV9pID0gZ2V0X2ZpZWxkKCJfc3RvY2tfZ2FfaW5jb21pbmciLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwogICAgJGdhX2QgPSBnZXRfZmllbGQoImRlbW9fZ2EiLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwoKICAgICRzdCA9IGdldF9maWVsZCgiX3N0b2NrX3N0X2NvbG9yIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAgICRzdF9zID0gZ2V0X2ZpZWxkKCJfc3RvY2tfc3QiLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwogICAgJHN0X2kgPSBnZXRfZmllbGQoIl9zdG9ja19zdF9pbmNvbWluZyIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CiAgICAkc3RfZCA9IGdldF9maWVsZCgiZGVtb19zdCIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CgogICAgJGxldiA9IGdldF9maWVsZCgiX3N0b2NrX3JlbW90ZV9jb2xvciIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CiAgICBpZihlbXB0eSgkbGV2KSkKICAgICAgJGxldiA9ICJncmF5IjsKICAgICRsZXZfcyA9IGdldF9maWVsZCgiX3N0b2NrX3JlbW90ZSIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CiAgCiAgICAkc2hvd19idXR0b24gPSBnZXRfZmllbGQoImRvbGpfa29wa25hcHAiLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwogICAgJGhhc19jYXRlZ29yeSA9ICFlbXB0eSgkcHJvZHVjdC0+Z2V0X2NhdGVnb3J5X2lkcygpKTsKCiAgICBpZigkc2hvd19idXR0b24gIT0gdHJ1ZSkKICAgIHsKICAgICAgaWYoJHN0X3MgPiAwIHx8ICRnYV9zID4gMCB8fCAkbGV2ICE9ICdncmF5Jyl7CiAgCj8+CjxhIGNsYXNzPSJyb3lhbC1jYXJ0LWxpbmsgYWRkX3RvX2NhcnRfYnV0dG9uIGFqYXhfYWRkX3RvX2NhcnQiIGhyZWY9Ij9hZGQtdG8tY2FydD08P3BocCBwcmludCAkcHJvZHVjdC0+Z2V0X2lkKCk7ID8+IiBkYXRhLXF1YW50aXR5PSIxIiBkYXRhLXByb2R1Y3RfaWQ9Ijw/cGhwIHByaW50ICRwcm9kdWN0LT5nZXRfaWQoKTsgPz4iIGRhdGEtcHJvZHVjdF9za3U9Ijw/cGhwIHByaW50ICRwcm9kdWN0LT5nZXRfc2t1KCk7ID8+Ij48YnV0dG9uIGNsYXNzPSJyb3lhbC1jYXJ0Ij48aSBjbGFzcz0iZmFzIGZhLWNhcnQtcGx1cyI+PC9pPjwvYnV0dG9uPjwvYT4KPGEgY2xhc3M9ImFkZGVkLXRvLWNhcnQgd2MtZm9yd2FyZCIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPjwvYT4KPD9waHAKICAgICAgfQogICAgCiAgfWVsc2V7CiAgICBpZigkc3RfcyA+IDAgfHwgJGdhX3MgPiAwIHx8ICRsZXYgIT0gJ2dyYXknKXsKPz4KPGEgY2xhc3M9InJveWFsLWNhcnQtbGluayBhZGRfdG9fY2FydF9idXR0b24gYWpheF9hZGRfdG9fY2FydCIgaHJlZj0iP2FkZC10by1jYXJ0PTAiIGRhdGEtcXVhbnRpdHk9IjEiIGRhdGEtcHJvZHVjdF9pZD0iMCIgZGF0YS1wcm9kdWN0X3NrdT0iMCI+PGJ1dHRvbiBjbGFzcz0icm95YWwtY2FydCI+PGkgY2xhc3M9ImZhcyBmYS1jYXJ0LXBsdXMiPjwvaT48L2J1dHRvbj48L2E+CjxhIGNsYXNzPSJhZGRlZC10by1jYXJ0IHdjLWZvcndhcmQiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij48L2E+Cjw/cGhwCiAgICAgIH0KICB9Cn0KCj8+
PD9waHAKCgogICRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwogIGlmKGlzX2EoJHByb2R1Y3QsICJXQ19Qcm9kdWN0IikpCiAgewogICAgCiAgICAkZ2EgPSBnZXRfZmllbGQoIl9zdG9ja19nYV9jb2xvciIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CiAgICAkc3QgPSBnZXRfZmllbGQoIl9zdG9ja19zdF9jb2xvciIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CiAgICAkbGV2ID0gZ2V0X2ZpZWxkKCJfc3RvY2tfcmVtb3RlX2NvbG9yIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAKICAgICAgaWYoJGdhID09ICJncmF5IiAmJiAkc3QgPT0gImdyYXkiICYmICRsZXYgPT0gImdyYXkiKXsKCQkgID8+CiAgPHNwYW4gY2xhc3M9J3Byb2R1Y3Qtbm90LWF2YWlsYWJsZSc+UHJvZHVrdGVuIMOkciB0eXbDpHJyIGludGUgdGlsbGfDpG5nbGlnIGp1c3QgbnUuPC9zcGFuPgo8P3BocAogICAgfQogICAgCiAgfQoKPz4=
PD9waHAKCiRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwoKaWYoaXNfYSgkcHJvZHVjdCwgIldDX1Byb2R1Y3QiKSkKewoJCgkkZmFyZ2VyID0gW107CgkKCWlmKHN0cmxlbigkcHJvZHVjdC0+Z2V0X2F0dHJpYnV0ZSgiYmxhY2stZmFyZyIpKSA+IDApCgkJJGZhcmdlciA9IGFycmF5X21lcmdlKCRmYXJnZXIsIGV4cGxvZGUoIiwgIiwgJHByb2R1Y3QtPmdldF9hdHRyaWJ1dGUoImJsYWNrLWZhcmciKSkpOwoJCglpZihzdHJsZW4oJHByb2R1Y3QtPmdldF9hdHRyaWJ1dGUoInRvbmVyLWZhcmciKSkgPiAwKQoJCSRmYXJnZXIgPSBhcnJheV9tZXJnZSgkZmFyZ2VyLCBleHBsb2RlKCIsICIsICRwcm9kdWN0LT5nZXRfYXR0cmlidXRlKCJ0b25lci1mYXJnIikpKTsKCQoJaWYoaXNfYXJyYXkoJGZhcmdlcikgJiYgY291bnQoJGZhcmdlcikgPiAwKQoJewoJCXByaW50ICc8ZGl2IGNsYXNzPSJyb3lhbC1wcm9kdWN0LWNhcmQtdjItaW5rLWRvdHMiPic7CgkJCgkJZm9yZWFjaCgkZmFyZ2VyIGFzICRmYXJnKQoJCXsKCQkJaWYoJGZhcmcgPT0gIk9zcGVjaWZpY2VyYXQiKQoJCQkJY29udGludWU7CgkJCQoJCQlpZihzdHJsZW4oJGZhcmcpIDwgMSkKCQkJCWNvbnRpbnVlOwoJCQkKCQkJcHJpbnQgJzxkaXYgY2xhc3M9InJveWFsLXByb2R1Y3QtY2FyZC12Mi1pbmstZG90IGluay1kb3QtJyAuIHN0cnRvbG93ZXIoJGZhcmcpIC4gJyI+PC9kaXY+JzsKCQl9CgkJCgkJcHJpbnQgJzwvZGl2Pic7Cgl9Cn0KCj8+
Cgo8P3BocAoKJHByb2R1Y3QgPSBnZXRfY3VycmVudF9wcm9kdWN0KCk7CgppZihpc19hKCRwcm9kdWN0LCAiV0NfUHJvZHVjdCIpKQp7CiAgaWYoJHByb2R1Y3QtPmlzX29uX3NhbGUoKSkKICB7Cj8+PGRpdiBjbGFzcz0icm95YWwtcHJvZHVjdC1kaXNjb3VudCI+PD9waHAKICAKICAkc2FsZV9wcmljZSA9ICRwcm9kdWN0LT5nZXRfc2FsZV9wcmljZSgpOwogICRyZWd1bGFyX3ByaWNlID0gJHByb2R1Y3QtPmdldF9yZWd1bGFyX3ByaWNlKCk7CiAgJHByaWNlX2RpZmYgPSAkcmVndWxhcl9wcmljZSAtICRzYWxlX3ByaWNlOwoJICAKICBpZiAoJHByaWNlX2RpZmYgPiAxOTkpIHsKICBwcmludCAic3BhcmEgIiAuIHJvdW5kKCRwcmljZV9kaWZmKSAuICIga3IiOwp9IGVsc2UgewogICRwZXJjZW50YWdlID0gKCgkcmVndWxhcl9wcmljZSAtICRzYWxlX3ByaWNlKSAqIDEwMCkgLyAkcmVndWxhcl9wcmljZTsKICBwcmludCByb3VuZCgkcGVyY2VudGFnZSkgLiAiJSI7Cn0gCgkgIAoJICAKICAKICAKPz48L2Rpdj48P3BocAogIH0KLyp9ZWxzZXsKPz48ZGl2IGNsYXNzPSJyb3lhbC1wcm9kdWN0LWRpc2NvdW50Ij48P3BocAogIHByaW50ICIwJSI7Cj8+PC9kaXY+PD9waHAqLwp9Cgo/Pg==
PD9waHAKCiRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwoKaWYoaXNfYSgkcHJvZHVjdCwgIldDX1Byb2R1Y3QiKSkKewogIGlmKCRwcm9kdWN0LT5pc19vbl9zYWxlKCkpCiAgewoJICAKCSAgJGV4dHJhX2NsYXNzID0gKGNhbXBhaWduX2lzX2FjdGl2ZSgxOTYwNCkgJiYgY2FtcGFpZ25faGFzX3Byb2R1Y3QoMTk2MDQsICRwcm9kdWN0LT5nZXRfaWQoKSkpID8gImJsYWNrLXdlZWsiIDogIiI7CgkgICR0ZXh0ID0gKGNhbXBhaWduX2lzX2FjdGl2ZSgxOTYwNCkgJiYgY2FtcGFpZ25faGFzX3Byb2R1Y3QoMTk2MDQsICRwcm9kdWN0LT5nZXRfaWQoKSkpID8gIkN5YmVyIFdlZWsiIDogIkthbXBhbmoiOwogID8+Cgo8ZGl2IGlkPSJkaXZfYmxvY2stNTItMTI0NTgiIGNsYXNzPSJjdC1kaXYtYmxvY2siPgoJPGRpdiBpZD0idGV4dF9ibG9jay01My0xMjQ1OCIgY2xhc3M9ImN0LXRleHQtYmxvY2sgYW5nbGVkLWJhbm5lciA8P3BocCBwcmludCAkZXh0cmFfY2xhc3M7ID8+Ij4KCQk8P3BocCBwcmludCAkdGV4dDsgPz4KCTwvZGl2Pgo8L2Rpdj4KCjw/cGhwCiAgfQp9Cj8+
PD9waHAKCiRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwppZihpc19hKCRwcm9kdWN0LCAiV0NfUHJvZHVjdCIpKQp7CgogICRjYXRlZ29yaWVzID0gJHByb2R1Y3QtPmdldF9jYXRlZ29yeV9pZHMoKTsKICAKICBmb3JlYWNoKCRjYXRlZ29yaWVzIGFzICRjYXRlZ29yeSkKICB7CiAgIAkJJGhhc19iYW5uZXIgPSBnZXRfZmllbGQoInZpc2FfYmFubmVyX3BhX3Byb2R1a3QiLCAicHJvZHVjdF9jYXRfIiAuICRjYXRlZ29yeSk7CiAgICAKICAgIAlpZigkaGFzX2Jhbm5lciA9PSB0cnVlKQogICAgICAgIHsKICAgICAgICAgICRjb2xvciA9IGdldF9maWVsZCgiYmFubmVyZmFyZyIsICJwcm9kdWN0X2NhdF8iIC4gJGNhdGVnb3J5KTsKICAgICAgICAgICR0ZXh0ID0gZ2V0X2ZpZWxkKCJiYW5uZXJ0ZXh0IiwgInByb2R1Y3RfY2F0XyIgLiAkY2F0ZWdvcnkpOwogICAgICAgICAgJHRleHRjb2xvciA9IGdldF9maWVsZCgiYmFubmVydGV4dGZhcmciLCAicHJvZHVjdF9jYXRfIiAuICRjYXRlZ29yeSk7CiAgICAgICAgICAKICAgICAgICAgIHByaW50ICc8ZGl2IGNsYXNzPSJyb3lhbC1wcm9kdWN0LWJhbm5lciBjYXJkIiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjonIC4gJGNvbG9yIC4gJyI+JzsKICAJCSAgcHJpbnQgJzxkaXYgY2xhc3M9InJveWFsLXByb2R1Y3QtYmFubmVyLXRleHQiIHN0eWxlPSJjb2xvcjonIC4gJHRleHRjb2xvciAuICciPic7CiAgCQkgIHByaW50ICR0ZXh0OwogIAkJICBwcmludCAnPC9kaXY+JzsKICAJCSAgcHJpbnQgJzwvZGl2Pic7CiAgICAgICAgfQogIH0KCQoJaWYoZ2V0X2ZpZWxkKCJwcmUtb3duZWQiLCAkcHJvZHVjdC0+Z2V0X2lkKCkpID09IDEpCgl7CiAgICAgICAgICBwcmludCAnPGRpdiBjbGFzcz0icm95YWwtcHJvZHVjdC1iYW5uZXIgY2FyZCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IzNhNzRmZiI+JzsKICAJCSAgcHJpbnQgJzxkaXYgY2xhc3M9InJveWFsLXByb2R1Y3QtYmFubmVyLXRleHQiIHN0eWxlPSJjb2xvcjojZmZmIj4nOwogIAkJICBwcmludCAiUHJlLW93bmVkIjsKICAJCSAgcHJpbnQgJzwvZGl2Pic7CiAgCQkgIHByaW50ICc8L2Rpdj4nOwoJfQogIAp9Cgo/Pg==
PD9waHAKCiRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwoKaWYoaXNfYSgkcHJvZHVjdCwgIldDX1Byb2R1Y3QiKSkKewogICRpZCA9ICRwcm9kdWN0LT5nZXRfaWQoKTsKICAkZGVtbyA9IGZhbHNlOwogIGlmKGdldF9maWVsZCgiZGVtb19nYSIsICRpZCkgPT0gdHJ1ZSAmIGdldF9maWVsZCgiX3N0b2NrX3N0IiwgJGlkKSA9PSAwICYgZ2V0X2ZpZWxkKCJfc3RvY2tfZ2EiLCAkaWQpID09IDEpOiAkZGVtbyA9IHRydWU7IGVuZGlmOwogIGlmKGdldF9maWVsZCgiZGVtb19zdCIsICRpZCkgPT0gdHJ1ZSAmIGdldF9maWVsZCgiX3N0b2NrX2dhIiwgJGlkKSA9PSAwICYgZ2V0X2ZpZWxkKCJfc3RvY2tfc3QiLCAkaWQpID09IDEpOiAkZGVtbyA9IHRydWU7IGVuZGlmOwoKICBpZigkZGVtbyk6cHJpbnQgJzxzcGFuIGNsYXNzPSJwcm9kdWN0LWNhcmQtZGVtb2V4Ij5kZW1vPC9zcGFuPic7ZW5kaWY7IAp9Cj8+
PD9waHAKCiRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwoKaWYoaXNfYSgkcHJvZHVjdCwgIldDX1Byb2R1Y3QiKSkKewoJCj8+CjxhIGlkPSJsaW5rLTQ3LTEyNDU4IiBjbGFzcz0iY3QtbGluayIgaHJlZj0iPD9waHAgcHJpbnQgJHByb2R1Y3QtPmdldF9wZXJtYWxpbmsoKTsgPz4iIHRhcmdldD0iX3NlbGYiPgogIAo8P3BocCBwcmludCBnZXRfdGhlX3Bvc3RfdGh1bWJuYWlsKCAkcHJvZHVjdC0+Z2V0X2lkKCksICdtZWRpdW0nLCBhcnJheSggJ2NsYXNzJyA9PiAnYXV0by1zY2FsZScgKSApOyA/PgoJCjwvYT4KPD9waHAKfQoKPz4=
PD9waHAKCiRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwoKaWYoaXNfYSgkcHJvZHVjdCwgIldDX1Byb2R1Y3QiKSkKewokaWQgPSAkcHJvZHVjdC0+Z2V0X2lkKCk7CgppZihpc19hKCRwcm9kdWN0LCAiV0NfUHJvZHVjdCIpKXsKICBwcmludCAiPGEgaHJlZj0nIiAuIGdldF9wZXJtYWxpbmsoICRwcm9kdWN0LT5nZXRfaWQoKSApIC4gIicgY2xhc3M9J3Byb2R1Y3QtY2FyZC10aXRsZScgPiIgLiAkcHJvZHVjdC0+Z2V0X3RpdGxlKCkgLiAiPC9hPiI7CgoKfWVsc2V7CiAgcHJpbnQgIlByb2R1a3RuYW1uIjsKfQp9ZWxzZXsKIHByaW50ICJJbmdldCBwcm9kdWt0bmFtbiBoaXR0YWRlcyI7IAp9Cgo/Pg==
PD9waHAKJHByb2R1Y3QgPSBnZXRfY3VycmVudF9wcm9kdWN0KCk7CgppZihpc19hKCRwcm9kdWN0LCAiV0NfUHJvZHVjdCIpKQp7CnByaW50ICI8c3BhbiBzdHlsZT0nZGlzcGxheTpibG9jaztoZWlnaHQ6MTNweDsnPiIuJHByb2R1Y3QtPmdldF9za3UoKS4iIDwvc3Bhbj4iOwp9Cj8+
PD9waHAKCgovLyBzaG93X2Rlc2Nfbm9fYXR0cwoKJHByb2R1Y3QgPSBnZXRfY3VycmVudF9wcm9kdWN0KCk7CgppZihpc19hKCRwcm9kdWN0LCAiV0NfUHJvZHVjdCIpKQp7CgogICRjYXRlZ29yeV9pZHMgPSAkcHJvZHVjdC0+Z2V0X2NhdGVnb3J5X2lkcygpOwogIC8qJGNhdGVnb3JpZXMgPSBnZXRfdGVybXMoWwogICAgICAidGVybV90YXhvbm9teV9pZCIgPT4gJGNhdGVnb3J5X2lkcwogIF0pOyovCgogICR2YWx1ZXNfdG9fcHJpbnQgPSBbXTsKICBpZighZW1wdHkoJGNhdGVnb3J5X2lkcykgJiYgY291bnQoJGNhdGVnb3J5X2lkcykgPiAwKQogIHsKICAgIGZvcmVhY2goJGNhdGVnb3J5X2lkcyBhcyAkY2F0ZWdvcnlfaWQpCiAgICB7CgoJCSRjYXRlZ29yeSA9ICJwcm9kdWN0X2NhdF8iIC4gJGNhdGVnb3J5X2lkOwoJCSRub19hdHRzID0gZ2V0X2ZpZWxkKCJzaG93X2Rlc2Nfbm9fYXR0cyIsICRjYXRlZ29yeSk7CgkJCgkJaWYoJG5vX2F0dHMgPT0gdHJ1ZSkKCQl7CgkJCSR2YWx1ZXNfdG9fcHJpbnQgPSBbXTsKCQkJYnJlYWs7CgkJfQoJCQogICAgICAkaGFzX3Jvd3MgPSBoYXZlX3Jvd3MoImF0dHJpYnV0X2F0dF92aXNhX3BhX3Byb2R1a3RyYWQiLCAkY2F0ZWdvcnkpOwoKICAgICAgaWYoISRoYXNfcm93cykKICAgICAgICBjb250aW51ZTsKCiAgICAgICRmaWVsZHMgPSBnZXRfZmllbGQoImF0dHJpYnV0X2F0dF92aXNhX3BhX3Byb2R1a3RyYWQiLCAkY2F0ZWdvcnkpOyAvLyBnZXQgYWxsIGZpZWxkcyBpbiByZXBlYXRlcgoKICAgICAgaWYoIWVtcHR5KCRmaWVsZHMpKQogICAgICB7CiAgICAgICAgZm9yZWFjaCgkZmllbGRzIGFzICRmaWVsZCkKICAgICAgICB7CiAgICAgICAgICBpZihjb3VudCgkdmFsdWVzX3RvX3ByaW50KSA+PSA1KXticmVhazt9CgkJCQogICAgICAgICAgZm9yZWFjaCgkZmllbGQgYXMgJGtleSA9PiAkdmFsdWUpCiAgICAgICAgICB7CgkJCSAgJGF0dHJfdmFsdWUgPSAkcHJvZHVjdC0+Z2V0X2F0dHJpYnV0ZSgkdmFsdWUpOwogICAgICAgICAgICAgIGlmKCFlbXB0eSgkYXR0cl92YWx1ZSkpCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYoJGF0dHJfdmFsdWUgIT0gIk9zcGVjaWZpY2VyYXQiKQogICAgICAgICAgICAgICAgewoJCQkJCWlmKCFpbl9hcnJheSgkYXR0cl92YWx1ZSwgJHZhbHVlc190b19wcmludCkpCgkJCQkJewogICAgICAgICAgICAgICAgICAJCSR2YWx1ZXNfdG9fcHJpbnRbXSA9ICRhdHRyX3ZhbHVlOyAvLyBhZGQgdGF4b25vbXkgdG8gbGlzdAogICAgICAgICAgICAgICAgCX0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQoKICAgIH0KICB9CiAgCiAgICBpZihjb3VudCgkdmFsdWVzX3RvX3ByaW50KSA+IDApCgl7CiAgICAJcHJpbnQgJzx1bCBjbGFzcz0icHJvZHVrdGtvcnQtYXR0ciI+PGxpPjxpIGNsYXNzPSJmYXMgZmEtY2hlY2siPjwvaT4nIC4gaW1wbG9kZSggJzwvbGk+PGxpPjxpIGNsYXNzPSJmYXMgZmEtY2hlY2siPjwvaT4nLCAkdmFsdWVzX3RvX3ByaW50KSAuICc8L2xpPjwvdWw+JzsKCX1lbHNlewogICAgICAgIAoJCSRkZXNjID0gJHByb2R1Y3QtPmdldF9kZXNjcmlwdGlvbigpOwoJCSRkZXNjID0gZG9fc2hvcnRjb2RlKCRkZXNjKTsKCQkkZGVzYyA9IHN0cmlwX3RhZ3MoJGRlc2MpOwoJCQoJCWlmKCFlbXB0eSgkZGVzYykpCgkJewoJCQlpZihzdHJsZW4oJGRlc2MpID4gMTQwKQoJCQl7CgkJCQkkZGVzYyA9IHN1YnN0cigkZGVzYywgMCwgMTQwKSAuICIuLi4iOwoJCQl9CgkJfQoJCQoKCQlwcmludCAnPGRpdiBjbGFzcz0icHJvZHVjdC1zaG9ydC1kZXNjIj4nIC4gJGRlc2MgLiAnPC9kaXY+JzsKICAgIH0KfQoKPz4=
PGRpdiBpZD0icm95YWwtcHJvZHVjdC1wcmljZSI+CiAgPD9waHAKCiRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwoKaWYoaXNfYSgkcHJvZHVjdCwgIldDX1Byb2R1Y3QiKSkKewo/PgoKICAgIAo8P3BocAogCmlmKCRwcm9kdWN0LT5pc19vbl9zYWxlKCkpCnsKPz4KICAgICAgPGRpdiBpZD0icm95YWwtcHJvZHVjdC1wcmljZS1yZWd1bGFyIiBjbGFzcz0ic3RyaWtlb3V0Ij48P3BocCBwcmludCAkcHJvZHVjdC0+Z2V0X3JlZ3VsYXJfcHJpY2UoKTsgPz4ga3I8L2Rpdj48YnIgLz4KICAgICAgPGRpdiBpZD0icm95YWwtcHJvZHVjdC1wcmljZS1zYWxlIj48P3BocCBwcmludCAkcHJvZHVjdC0+Z2V0X3NhbGVfcHJpY2UoKTsgPz4ga3I8L2Rpdj4KPD9waHAKfWVsc2V7CnByaW50ICRwcm9kdWN0LT5nZXRfcHJpY2UoKSAuICIga3IiOwp9Cn0KZWxzZQp7CiAgcHJpbnQgIjAga3IiOwp9Cgo/Pgo8L2Rpdj4=
PD9waHAKCgokcHJvZHVjdCA9IGdldF9jdXJyZW50X3Byb2R1Y3QoKTsKCmlmKGlzX2EoJHByb2R1Y3QsICJXQ19Qcm9kdWN0IikgJiYgIXByb2R1Y3RfaXNfYnVuZGxlKCRwcm9kdWN0KSAmJiAkcHJvZHVjdC0+Z2V0X2NhdGFsb2dfdmlzaWJpbGl0eSgpID09ICJ2aXNpYmxlIiAmJiAhcHJvZHVjdF9pc19zZXJ2aWNlX2FydGljbGUoKSkKewogIAogICRnYSA9IGdldF9maWVsZCgiX3N0b2NrX2dhX2NvbG9yIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAkZ2FfcyA9IGdldF9maWVsZCgiX3N0b2NrX2dhIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAkZ2FfaSA9IGdldF9maWVsZCgiX3N0b2NrX2dhX2luY29taW5nIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAkZ2FfZCA9IGdldF9maWVsZCgiZGVtb19nYSIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CiAgCiAgJHN0ID0gZ2V0X2ZpZWxkKCJfc3RvY2tfc3RfY29sb3IiLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwogICRzdF9zID0gZ2V0X2ZpZWxkKCJfc3RvY2tfc3QiLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwogICRzdF9pID0gZ2V0X2ZpZWxkKCJfc3RvY2tfc3RfaW5jb21pbmciLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwogICRzdF9kID0gZ2V0X2ZpZWxkKCJkZW1vX3N0IiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAKICAkbGV2ID0gZ2V0X2ZpZWxkKCJfc3RvY2tfcmVtb3RlX2NvbG9yIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICBpZihlbXB0eSgkbGV2KSkKICAgICRsZXYgPSAiZ3JheSI7CiAgJGxldl9zID0gZ2V0X2ZpZWxkKCJfc3RvY2tfcmVtb3RlIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAkbGV2X2kgPSBnZXRfZmllbGQoIl9zdG9ja19yZW1vdGVfaW5jb21pbmciLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwogIAogICRkZWxpdmVyeSA9ICJncmF5IjsKICAKICAkc3RvY2tzID0gWyRnYSwgJHN0LCAkbGV2XTsKICAgIAogIGlmKGluX2FycmF5KCJibHVlIiwgJHN0b2NrcykpCiAgICAgICRkZWxpdmVyeSA9ICJibHVlIjsKCSAgICAKICBpZihpbl9hcnJheSgib3JhbmdlIiwgJHN0b2NrcykpCiAgICAgICRkZWxpdmVyeSA9ICJvcmFuZ2UiOwogICAgCiAgaWYoaW5fYXJyYXkoImdyZWVuIiwgJHN0b2NrcykpCiAgICAgICRkZWxpdmVyeSA9ICJncmVlbiI7CgogICR0b3QgPSAiZ3JheSI7CiAgaWYoaW5fYXJyYXkoImJsdWUiLCAkc3RvY2tzKSkKCSAgJHRvdCA9ICJibHVlIjsKICBpZihpbl9hcnJheSgib3JhbmdlIiwgJHN0b2NrcykpCgkgICR0b3QgPSAib3JhbmdlIjsKICBpZihpbl9hcnJheSgiZ3JlZW4iLCAkc3RvY2tzKSkKCSAgJHRvdCA9ICJncmVlbiI7CgkKICAkdG90X3MgPSAkZ2FfcyArICRzdF9zICsgJGxldl9zOwogICR0b3RfaSA9ICRnYV9pICsgJHN0X2kgKyAkbGV2X2k7CgkKCj8+Cgo8ZGl2IGNsYXNzPSJwcm9kdWN0LXN0b2NrLWxpc3QiPgoKCTw/cGhwIGlmKCR0b3RfcyA+IDAgfHwgJHRvdF9pID4gMCB8fCAkZGVsaXZlcnkgPT0gImJsdWUiKSB7ID8+Cgk8ZGl2IGNsYXNzPSJwcm9kdWN0LXN0b2NrLWxpc3QtaXRlbSI+CgkgIAoJICA8ZGl2IGNsYXNzPSJwcm9kdWN0LXN0b2NrLWxlZnQiPk9ubGluZTo8L2Rpdj4gPGkgY2xhc3M9ImZhcyBmYS1zcXVhcmUgcHJvZHVjdC1zdG9jay08P3BocCBwcmludCAkdG90OyA/PiI+PC9pPgoJCQoJCTw/cGhwIHByaW50ICgkdG90X3MgPiAxMCkgPyAiMTArIiA6ICR0b3RfczsgPz4gc3QKCQkKCQk8c3BhbiBjbGFzcz0icHJvZHVjdC1zdG9jay1leHRyYSI+CgkJPD9waHAgaWYoJHRvdF9zID09IDAgJiYgJHRvdF9pID4gMCkgeyA/PiAoPD9waHAgcHJpbnQgKCR0b3RfaSA+IDEwKSA/ICIxMCsiIDogJHRvdF9pOyA/PiBzdCBww6UgdsOkZyk8P3BocCB9ID8+CgkJPC9zcGFuPgoJPC9kaXY+Cgk8P3BocCB9ID8+CgogIDw/cGhwCiAgaWYoJGdhX3MgPiAwIHx8ICRnYV9pID4gMCB8fCAkZGVsaXZlcnkgPT0gImJsdWUiKXsgPz4KICAJPGRpdiBjbGFzcz0icHJvZHVjdC1zdG9jay1saXN0LWl0ZW0iPjxkaXYgY2xhc3M9InByb2R1Y3Qtc3RvY2stbGVmdCI+R8OkdmxlOjwvZGl2PjxpIGNsYXNzPSJmYXMgZmEtc3F1YXJlIHByb2R1Y3Qtc3RvY2stPD9waHAgcHJpbnQgJGdhOyA/PiI+PC9pPjw/cGhwIHByaW50ICgkZ2FfcyA+IDEwKSA/ICIxMCsiIDogJGdhX3M7ID8+IHN0CgkJCgkJCgkJPHNwYW4gY2xhc3M9InByb2R1Y3Qtc3RvY2stZXh0cmEiPgoJCQk8P3BocCBpZigkZ2FfaSA+IDAgJiYgJGdhX3MgPT0gMCAmJiAkbGV2X3MgPT0gMCk6ID8+ICg8P3BocCBwcmludCAoJGdhX2kgPiAxMCkgPyAiMTArIiA6ICRnYV9pOyA/PiBzdCBww6UgdsOkZyk8P3BocCBlbmRpZjsgPz48P3BocCBpZigkZ2FfZCA9PSB0cnVlICYgJGdhX3MgPT0gMSk6ID8+IChEZW1vZXgpPD9waHAgZW5kaWY7ID8+CgkJPC9zcGFuPgoJCQk8L2Rpdj4KCQkKICA8P3BocCB9ID8+CiAgCiAgPD9waHAKICBpZigkc3RfcyA+IDAgfHwgJHN0X2kgPiAwIHx8ICRkZWxpdmVyeSA9PSAiYmx1ZSIpeyA/PgogIAk8ZGl2IGNsYXNzPSJwcm9kdWN0LXN0b2NrLWxpc3QtaXRlbSI+PGRpdiBjbGFzcz0icHJvZHVjdC1zdG9jay1sZWZ0Ij5TdG9ja2hvbG06PC9kaXY+PGkgY2xhc3M9ImZhcyBmYS1zcXVhcmUgcHJvZHVjdC1zdG9jay08P3BocCBwcmludCAkc3Q7ID8+Ij48L2k+PD9waHAgcHJpbnQgKCRzdF9zID4gMTApID8gIjEwKyIgOiAkc3RfczsgPz4gc3QKCQkKCQkKCQk8c3BhbiBjbGFzcz0icHJvZHVjdC1zdG9jay1leHRyYSI+CgkJPD9waHAgaWYoJHN0X2kgPiAwICYmICRzdF9zID09IDAgJiYgJGxldl9zID09IDApOiA/PiAoPD9waHAgcHJpbnQgKCRzdF9pID4gMTApID8gIjEwKyIgOiAkc3RfaTsgPz4gc3QgcMOlIHbDpGcpPD9waHAgZW5kaWY7ID8+PD9waHAgaWYoJHN0X2QgPT0gdHJ1ZSAmICRzdF9zID09IDEpOiA/PiAoRGVtb2V4KTw/cGhwIGVuZGlmOyA/PgoJCTwvc3Bhbj4KCQkJPC9kaXY+CiAgPD9waHAgfSA/PgogIAo8L2Rpdj4KCjw/cGhwCn0KPz4=
PD9waHAKCgogICRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwogIGlmKGlzX2EoJHByb2R1Y3QsICJXQ19Qcm9kdWN0IikgJiYgJHByb2R1Y3QtPmdldF9jYXRhbG9nX3Zpc2liaWxpdHkoKSA9PSAidmlzaWJsZSIgJiYgIXByb2R1Y3RfaXNfc2VydmljZV9hcnRpY2xlKCkpCiAgewogICAgCiAgICAkZ2EgPSBnZXRfZmllbGQoIl9zdG9ja19nYV9jb2xvciIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CiAgICAkZ2FfcyA9IGdldF9maWVsZCgiX3N0b2NrX2dhIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAgICRnYV9pID0gZ2V0X2ZpZWxkKCJfc3RvY2tfZ2FfaW5jb21pbmciLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwogICAgJGdhX2QgPSBnZXRfZmllbGQoImRlbW9fZ2EiLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwoKICAgICRzdCA9IGdldF9maWVsZCgiX3N0b2NrX3N0X2NvbG9yIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAgICRzdF9zID0gZ2V0X2ZpZWxkKCJfc3RvY2tfc3QiLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwogICAgJHN0X2kgPSBnZXRfZmllbGQoIl9zdG9ja19zdF9pbmNvbWluZyIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CiAgICAkc3RfZCA9IGdldF9maWVsZCgiZGVtb19zdCIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CgogICAgJGxldiA9IGdldF9maWVsZCgiX3N0b2NrX3JlbW90ZV9jb2xvciIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CiAgICBpZihlbXB0eSgkbGV2KSkKICAgICAgJGxldiA9ICJncmF5IjsKICAgICRsZXZfcyA9IGdldF9maWVsZCgiX3N0b2NrX3JlbW90ZSIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CiAgCiAgICAkc2hvd19idXR0b24gPSBnZXRfZmllbGQoImRvbGpfa29wa25hcHAiLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwogICAgJGhhc19jYXRlZ29yeSA9ICFlbXB0eSgkcHJvZHVjdC0+Z2V0X2NhdGVnb3J5X2lkcygpKTsKCiAgICBpZigkc2hvd19idXR0b24gIT0gdHJ1ZSkKICAgIHsKICAgICAgaWYoJHN0X3MgPiAwIHx8ICRnYV9zID4gMCB8fCAkbGV2ICE9ICdncmF5Jyl7CiAgCj8+CjxhIGNsYXNzPSJyb3lhbC1jYXJ0LWxpbmsgYWRkX3RvX2NhcnRfYnV0dG9uIGFqYXhfYWRkX3RvX2NhcnQiIGhyZWY9Ij9hZGQtdG8tY2FydD08P3BocCBwcmludCAkcHJvZHVjdC0+Z2V0X2lkKCk7ID8+IiBkYXRhLXF1YW50aXR5PSIxIiBkYXRhLXByb2R1Y3RfaWQ9Ijw/cGhwIHByaW50ICRwcm9kdWN0LT5nZXRfaWQoKTsgPz4iIGRhdGEtcHJvZHVjdF9za3U9Ijw/cGhwIHByaW50ICRwcm9kdWN0LT5nZXRfc2t1KCk7ID8+Ij48YnV0dG9uIGNsYXNzPSJyb3lhbC1jYXJ0Ij48aSBjbGFzcz0iZmFzIGZhLWNhcnQtcGx1cyI+PC9pPjwvYnV0dG9uPjwvYT4KPGEgY2xhc3M9ImFkZGVkLXRvLWNhcnQgd2MtZm9yd2FyZCIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPjwvYT4KPD9waHAKICAgICAgfQogICAgCiAgfWVsc2V7CiAgICBpZigkc3RfcyA+IDAgfHwgJGdhX3MgPiAwIHx8ICRsZXYgIT0gJ2dyYXknKXsKPz4KPGEgY2xhc3M9InJveWFsLWNhcnQtbGluayBhZGRfdG9fY2FydF9idXR0b24gYWpheF9hZGRfdG9fY2FydCIgaHJlZj0iP2FkZC10by1jYXJ0PTAiIGRhdGEtcXVhbnRpdHk9IjEiIGRhdGEtcHJvZHVjdF9pZD0iMCIgZGF0YS1wcm9kdWN0X3NrdT0iMCI+PGJ1dHRvbiBjbGFzcz0icm95YWwtY2FydCI+PGkgY2xhc3M9ImZhcyBmYS1jYXJ0LXBsdXMiPjwvaT48L2J1dHRvbj48L2E+CjxhIGNsYXNzPSJhZGRlZC10by1jYXJ0IHdjLWZvcndhcmQiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij48L2E+Cjw/cGhwCiAgICAgIH0KICB9Cn0KCj8+
PD9waHAKCgogICRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwogIGlmKGlzX2EoJHByb2R1Y3QsICJXQ19Qcm9kdWN0IikpCiAgewogICAgCiAgICAkZ2EgPSBnZXRfZmllbGQoIl9zdG9ja19nYV9jb2xvciIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CiAgICAkc3QgPSBnZXRfZmllbGQoIl9zdG9ja19zdF9jb2xvciIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CiAgICAkbGV2ID0gZ2V0X2ZpZWxkKCJfc3RvY2tfcmVtb3RlX2NvbG9yIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAKICAgICAgaWYoJGdhID09ICJncmF5IiAmJiAkc3QgPT0gImdyYXkiICYmICRsZXYgPT0gImdyYXkiKXsKCQkgID8+CiAgPHNwYW4gY2xhc3M9J3Byb2R1Y3Qtbm90LWF2YWlsYWJsZSc+UHJvZHVrdGVuIMOkciB0eXbDpHJyIGludGUgdGlsbGfDpG5nbGlnIGp1c3QgbnUuPC9zcGFuPgo8P3BocAogICAgfQogICAgCiAgfQoKPz4=
PD9waHAKCiRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwoKaWYoaXNfYSgkcHJvZHVjdCwgIldDX1Byb2R1Y3QiKSkKewoJCgkkZmFyZ2VyID0gW107CgkKCWlmKHN0cmxlbigkcHJvZHVjdC0+Z2V0X2F0dHJpYnV0ZSgiYmxhY2stZmFyZyIpKSA+IDApCgkJJGZhcmdlciA9IGFycmF5X21lcmdlKCRmYXJnZXIsIGV4cGxvZGUoIiwgIiwgJHByb2R1Y3QtPmdldF9hdHRyaWJ1dGUoImJsYWNrLWZhcmciKSkpOwoJCglpZihzdHJsZW4oJHByb2R1Y3QtPmdldF9hdHRyaWJ1dGUoInRvbmVyLWZhcmciKSkgPiAwKQoJCSRmYXJnZXIgPSBhcnJheV9tZXJnZSgkZmFyZ2VyLCBleHBsb2RlKCIsICIsICRwcm9kdWN0LT5nZXRfYXR0cmlidXRlKCJ0b25lci1mYXJnIikpKTsKCQoJaWYoaXNfYXJyYXkoJGZhcmdlcikgJiYgY291bnQoJGZhcmdlcikgPiAwKQoJewoJCXByaW50ICc8ZGl2IGNsYXNzPSJyb3lhbC1wcm9kdWN0LWNhcmQtdjItaW5rLWRvdHMiPic7CgkJCgkJZm9yZWFjaCgkZmFyZ2VyIGFzICRmYXJnKQoJCXsKCQkJaWYoJGZhcmcgPT0gIk9zcGVjaWZpY2VyYXQiKQoJCQkJY29udGludWU7CgkJCQoJCQlpZihzdHJsZW4oJGZhcmcpIDwgMSkKCQkJCWNvbnRpbnVlOwoJCQkKCQkJcHJpbnQgJzxkaXYgY2xhc3M9InJveWFsLXByb2R1Y3QtY2FyZC12Mi1pbmstZG90IGluay1kb3QtJyAuIHN0cnRvbG93ZXIoJGZhcmcpIC4gJyI+PC9kaXY+JzsKCQl9CgkJCgkJcHJpbnQgJzwvZGl2Pic7Cgl9Cn0KCj8+
Cgo8P3BocAoKJHByb2R1Y3QgPSBnZXRfY3VycmVudF9wcm9kdWN0KCk7CgppZihpc19hKCRwcm9kdWN0LCAiV0NfUHJvZHVjdCIpKQp7CiAgaWYoJHByb2R1Y3QtPmlzX29uX3NhbGUoKSkKICB7Cj8+PGRpdiBjbGFzcz0icm95YWwtcHJvZHVjdC1kaXNjb3VudCI+PD9waHAKICAKICAkc2FsZV9wcmljZSA9ICRwcm9kdWN0LT5nZXRfc2FsZV9wcmljZSgpOwogICRyZWd1bGFyX3ByaWNlID0gJHByb2R1Y3QtPmdldF9yZWd1bGFyX3ByaWNlKCk7CiAgJHByaWNlX2RpZmYgPSAkcmVndWxhcl9wcmljZSAtICRzYWxlX3ByaWNlOwoJICAKICBpZiAoJHByaWNlX2RpZmYgPiAxOTkpIHsKICBwcmludCAic3BhcmEgIiAuIHJvdW5kKCRwcmljZV9kaWZmKSAuICIga3IiOwp9IGVsc2UgewogICRwZXJjZW50YWdlID0gKCgkcmVndWxhcl9wcmljZSAtICRzYWxlX3ByaWNlKSAqIDEwMCkgLyAkcmVndWxhcl9wcmljZTsKICBwcmludCByb3VuZCgkcGVyY2VudGFnZSkgLiAiJSI7Cn0gCgkgIAoJICAKICAKICAKPz48L2Rpdj48P3BocAogIH0KLyp9ZWxzZXsKPz48ZGl2IGNsYXNzPSJyb3lhbC1wcm9kdWN0LWRpc2NvdW50Ij48P3BocAogIHByaW50ICIwJSI7Cj8+PC9kaXY+PD9waHAqLwp9Cgo/Pg==
PD9waHAKCiRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwoKaWYoaXNfYSgkcHJvZHVjdCwgIldDX1Byb2R1Y3QiKSkKewogIGlmKCRwcm9kdWN0LT5pc19vbl9zYWxlKCkpCiAgewoJICAKCSAgJGV4dHJhX2NsYXNzID0gKGNhbXBhaWduX2lzX2FjdGl2ZSgxOTYwNCkgJiYgY2FtcGFpZ25faGFzX3Byb2R1Y3QoMTk2MDQsICRwcm9kdWN0LT5nZXRfaWQoKSkpID8gImJsYWNrLXdlZWsiIDogIiI7CgkgICR0ZXh0ID0gKGNhbXBhaWduX2lzX2FjdGl2ZSgxOTYwNCkgJiYgY2FtcGFpZ25faGFzX3Byb2R1Y3QoMTk2MDQsICRwcm9kdWN0LT5nZXRfaWQoKSkpID8gIkN5YmVyIFdlZWsiIDogIkthbXBhbmoiOwogID8+Cgo8ZGl2IGlkPSJkaXZfYmxvY2stNTItMTI0NTgiIGNsYXNzPSJjdC1kaXYtYmxvY2siPgoJPGRpdiBpZD0idGV4dF9ibG9jay01My0xMjQ1OCIgY2xhc3M9ImN0LXRleHQtYmxvY2sgYW5nbGVkLWJhbm5lciA8P3BocCBwcmludCAkZXh0cmFfY2xhc3M7ID8+Ij4KCQk8P3BocCBwcmludCAkdGV4dDsgPz4KCTwvZGl2Pgo8L2Rpdj4KCjw/cGhwCiAgfQp9Cj8+
PD9waHAKCiRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwppZihpc19hKCRwcm9kdWN0LCAiV0NfUHJvZHVjdCIpKQp7CgogICRjYXRlZ29yaWVzID0gJHByb2R1Y3QtPmdldF9jYXRlZ29yeV9pZHMoKTsKICAKICBmb3JlYWNoKCRjYXRlZ29yaWVzIGFzICRjYXRlZ29yeSkKICB7CiAgIAkJJGhhc19iYW5uZXIgPSBnZXRfZmllbGQoInZpc2FfYmFubmVyX3BhX3Byb2R1a3QiLCAicHJvZHVjdF9jYXRfIiAuICRjYXRlZ29yeSk7CiAgICAKICAgIAlpZigkaGFzX2Jhbm5lciA9PSB0cnVlKQogICAgICAgIHsKICAgICAgICAgICRjb2xvciA9IGdldF9maWVsZCgiYmFubmVyZmFyZyIsICJwcm9kdWN0X2NhdF8iIC4gJGNhdGVnb3J5KTsKICAgICAgICAgICR0ZXh0ID0gZ2V0X2ZpZWxkKCJiYW5uZXJ0ZXh0IiwgInByb2R1Y3RfY2F0XyIgLiAkY2F0ZWdvcnkpOwogICAgICAgICAgJHRleHRjb2xvciA9IGdldF9maWVsZCgiYmFubmVydGV4dGZhcmciLCAicHJvZHVjdF9jYXRfIiAuICRjYXRlZ29yeSk7CiAgICAgICAgICAKICAgICAgICAgIHByaW50ICc8ZGl2IGNsYXNzPSJyb3lhbC1wcm9kdWN0LWJhbm5lciBjYXJkIiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjonIC4gJGNvbG9yIC4gJyI+JzsKICAJCSAgcHJpbnQgJzxkaXYgY2xhc3M9InJveWFsLXByb2R1Y3QtYmFubmVyLXRleHQiIHN0eWxlPSJjb2xvcjonIC4gJHRleHRjb2xvciAuICciPic7CiAgCQkgIHByaW50ICR0ZXh0OwogIAkJICBwcmludCAnPC9kaXY+JzsKICAJCSAgcHJpbnQgJzwvZGl2Pic7CiAgICAgICAgfQogIH0KCQoJaWYoZ2V0X2ZpZWxkKCJwcmUtb3duZWQiLCAkcHJvZHVjdC0+Z2V0X2lkKCkpID09IDEpCgl7CiAgICAgICAgICBwcmludCAnPGRpdiBjbGFzcz0icm95YWwtcHJvZHVjdC1iYW5uZXIgY2FyZCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IzNhNzRmZiI+JzsKICAJCSAgcHJpbnQgJzxkaXYgY2xhc3M9InJveWFsLXByb2R1Y3QtYmFubmVyLXRleHQiIHN0eWxlPSJjb2xvcjojZmZmIj4nOwogIAkJICBwcmludCAiUHJlLW93bmVkIjsKICAJCSAgcHJpbnQgJzwvZGl2Pic7CiAgCQkgIHByaW50ICc8L2Rpdj4nOwoJfQogIAp9Cgo/Pg==
PD9waHAKCiRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwoKaWYoaXNfYSgkcHJvZHVjdCwgIldDX1Byb2R1Y3QiKSkKewogICRpZCA9ICRwcm9kdWN0LT5nZXRfaWQoKTsKICAkZGVtbyA9IGZhbHNlOwogIGlmKGdldF9maWVsZCgiZGVtb19nYSIsICRpZCkgPT0gdHJ1ZSAmIGdldF9maWVsZCgiX3N0b2NrX3N0IiwgJGlkKSA9PSAwICYgZ2V0X2ZpZWxkKCJfc3RvY2tfZ2EiLCAkaWQpID09IDEpOiAkZGVtbyA9IHRydWU7IGVuZGlmOwogIGlmKGdldF9maWVsZCgiZGVtb19zdCIsICRpZCkgPT0gdHJ1ZSAmIGdldF9maWVsZCgiX3N0b2NrX2dhIiwgJGlkKSA9PSAwICYgZ2V0X2ZpZWxkKCJfc3RvY2tfc3QiLCAkaWQpID09IDEpOiAkZGVtbyA9IHRydWU7IGVuZGlmOwoKICBpZigkZGVtbyk6cHJpbnQgJzxzcGFuIGNsYXNzPSJwcm9kdWN0LWNhcmQtZGVtb2V4Ij5kZW1vPC9zcGFuPic7ZW5kaWY7IAp9Cj8+
PD9waHAKCiRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwoKaWYoaXNfYSgkcHJvZHVjdCwgIldDX1Byb2R1Y3QiKSkKewoJCj8+CjxhIGlkPSJsaW5rLTQ3LTEyNDU4IiBjbGFzcz0iY3QtbGluayIgaHJlZj0iPD9waHAgcHJpbnQgJHByb2R1Y3QtPmdldF9wZXJtYWxpbmsoKTsgPz4iIHRhcmdldD0iX3NlbGYiPgogIAo8P3BocCBwcmludCBnZXRfdGhlX3Bvc3RfdGh1bWJuYWlsKCAkcHJvZHVjdC0+Z2V0X2lkKCksICdtZWRpdW0nLCBhcnJheSggJ2NsYXNzJyA9PiAnYXV0by1zY2FsZScgKSApOyA/PgoJCjwvYT4KPD9waHAKfQoKPz4=
PD9waHAKCiRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwoKaWYoaXNfYSgkcHJvZHVjdCwgIldDX1Byb2R1Y3QiKSkKewokaWQgPSAkcHJvZHVjdC0+Z2V0X2lkKCk7CgppZihpc19hKCRwcm9kdWN0LCAiV0NfUHJvZHVjdCIpKXsKICBwcmludCAiPGEgaHJlZj0nIiAuIGdldF9wZXJtYWxpbmsoICRwcm9kdWN0LT5nZXRfaWQoKSApIC4gIicgY2xhc3M9J3Byb2R1Y3QtY2FyZC10aXRsZScgPiIgLiAkcHJvZHVjdC0+Z2V0X3RpdGxlKCkgLiAiPC9hPiI7CgoKfWVsc2V7CiAgcHJpbnQgIlByb2R1a3RuYW1uIjsKfQp9ZWxzZXsKIHByaW50ICJJbmdldCBwcm9kdWt0bmFtbiBoaXR0YWRlcyI7IAp9Cgo/Pg==
PD9waHAKJHByb2R1Y3QgPSBnZXRfY3VycmVudF9wcm9kdWN0KCk7CgppZihpc19hKCRwcm9kdWN0LCAiV0NfUHJvZHVjdCIpKQp7CnByaW50ICI8c3BhbiBzdHlsZT0nZGlzcGxheTpibG9jaztoZWlnaHQ6MTNweDsnPiIuJHByb2R1Y3QtPmdldF9za3UoKS4iIDwvc3Bhbj4iOwp9Cj8+
PD9waHAKCgovLyBzaG93X2Rlc2Nfbm9fYXR0cwoKJHByb2R1Y3QgPSBnZXRfY3VycmVudF9wcm9kdWN0KCk7CgppZihpc19hKCRwcm9kdWN0LCAiV0NfUHJvZHVjdCIpKQp7CgogICRjYXRlZ29yeV9pZHMgPSAkcHJvZHVjdC0+Z2V0X2NhdGVnb3J5X2lkcygpOwogIC8qJGNhdGVnb3JpZXMgPSBnZXRfdGVybXMoWwogICAgICAidGVybV90YXhvbm9teV9pZCIgPT4gJGNhdGVnb3J5X2lkcwogIF0pOyovCgogICR2YWx1ZXNfdG9fcHJpbnQgPSBbXTsKICBpZighZW1wdHkoJGNhdGVnb3J5X2lkcykgJiYgY291bnQoJGNhdGVnb3J5X2lkcykgPiAwKQogIHsKICAgIGZvcmVhY2goJGNhdGVnb3J5X2lkcyBhcyAkY2F0ZWdvcnlfaWQpCiAgICB7CgoJCSRjYXRlZ29yeSA9ICJwcm9kdWN0X2NhdF8iIC4gJGNhdGVnb3J5X2lkOwoJCSRub19hdHRzID0gZ2V0X2ZpZWxkKCJzaG93X2Rlc2Nfbm9fYXR0cyIsICRjYXRlZ29yeSk7CgkJCgkJaWYoJG5vX2F0dHMgPT0gdHJ1ZSkKCQl7CgkJCSR2YWx1ZXNfdG9fcHJpbnQgPSBbXTsKCQkJYnJlYWs7CgkJfQoJCQogICAgICAkaGFzX3Jvd3MgPSBoYXZlX3Jvd3MoImF0dHJpYnV0X2F0dF92aXNhX3BhX3Byb2R1a3RyYWQiLCAkY2F0ZWdvcnkpOwoKICAgICAgaWYoISRoYXNfcm93cykKICAgICAgICBjb250aW51ZTsKCiAgICAgICRmaWVsZHMgPSBnZXRfZmllbGQoImF0dHJpYnV0X2F0dF92aXNhX3BhX3Byb2R1a3RyYWQiLCAkY2F0ZWdvcnkpOyAvLyBnZXQgYWxsIGZpZWxkcyBpbiByZXBlYXRlcgoKICAgICAgaWYoIWVtcHR5KCRmaWVsZHMpKQogICAgICB7CiAgICAgICAgZm9yZWFjaCgkZmllbGRzIGFzICRmaWVsZCkKICAgICAgICB7CiAgICAgICAgICBpZihjb3VudCgkdmFsdWVzX3RvX3ByaW50KSA+PSA1KXticmVhazt9CgkJCQogICAgICAgICAgZm9yZWFjaCgkZmllbGQgYXMgJGtleSA9PiAkdmFsdWUpCiAgICAgICAgICB7CgkJCSAgJGF0dHJfdmFsdWUgPSAkcHJvZHVjdC0+Z2V0X2F0dHJpYnV0ZSgkdmFsdWUpOwogICAgICAgICAgICAgIGlmKCFlbXB0eSgkYXR0cl92YWx1ZSkpCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYoJGF0dHJfdmFsdWUgIT0gIk9zcGVjaWZpY2VyYXQiKQogICAgICAgICAgICAgICAgewoJCQkJCWlmKCFpbl9hcnJheSgkYXR0cl92YWx1ZSwgJHZhbHVlc190b19wcmludCkpCgkJCQkJewogICAgICAgICAgICAgICAgICAJCSR2YWx1ZXNfdG9fcHJpbnRbXSA9ICRhdHRyX3ZhbHVlOyAvLyBhZGQgdGF4b25vbXkgdG8gbGlzdAogICAgICAgICAgICAgICAgCX0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQoKICAgIH0KICB9CiAgCiAgICBpZihjb3VudCgkdmFsdWVzX3RvX3ByaW50KSA+IDApCgl7CiAgICAJcHJpbnQgJzx1bCBjbGFzcz0icHJvZHVrdGtvcnQtYXR0ciI+PGxpPjxpIGNsYXNzPSJmYXMgZmEtY2hlY2siPjwvaT4nIC4gaW1wbG9kZSggJzwvbGk+PGxpPjxpIGNsYXNzPSJmYXMgZmEtY2hlY2siPjwvaT4nLCAkdmFsdWVzX3RvX3ByaW50KSAuICc8L2xpPjwvdWw+JzsKCX1lbHNlewogICAgICAgIAoJCSRkZXNjID0gJHByb2R1Y3QtPmdldF9kZXNjcmlwdGlvbigpOwoJCSRkZXNjID0gZG9fc2hvcnRjb2RlKCRkZXNjKTsKCQkkZGVzYyA9IHN0cmlwX3RhZ3MoJGRlc2MpOwoJCQoJCWlmKCFlbXB0eSgkZGVzYykpCgkJewoJCQlpZihzdHJsZW4oJGRlc2MpID4gMTQwKQoJCQl7CgkJCQkkZGVzYyA9IHN1YnN0cigkZGVzYywgMCwgMTQwKSAuICIuLi4iOwoJCQl9CgkJfQoJCQoKCQlwcmludCAnPGRpdiBjbGFzcz0icHJvZHVjdC1zaG9ydC1kZXNjIj4nIC4gJGRlc2MgLiAnPC9kaXY+JzsKICAgIH0KfQoKPz4=
PGRpdiBpZD0icm95YWwtcHJvZHVjdC1wcmljZSI+CiAgPD9waHAKCiRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwoKaWYoaXNfYSgkcHJvZHVjdCwgIldDX1Byb2R1Y3QiKSkKewo/PgoKICAgIAo8P3BocAogCmlmKCRwcm9kdWN0LT5pc19vbl9zYWxlKCkpCnsKPz4KICAgICAgPGRpdiBpZD0icm95YWwtcHJvZHVjdC1wcmljZS1yZWd1bGFyIiBjbGFzcz0ic3RyaWtlb3V0Ij48P3BocCBwcmludCAkcHJvZHVjdC0+Z2V0X3JlZ3VsYXJfcHJpY2UoKTsgPz4ga3I8L2Rpdj48YnIgLz4KICAgICAgPGRpdiBpZD0icm95YWwtcHJvZHVjdC1wcmljZS1zYWxlIj48P3BocCBwcmludCAkcHJvZHVjdC0+Z2V0X3NhbGVfcHJpY2UoKTsgPz4ga3I8L2Rpdj4KPD9waHAKfWVsc2V7CnByaW50ICRwcm9kdWN0LT5nZXRfcHJpY2UoKSAuICIga3IiOwp9Cn0KZWxzZQp7CiAgcHJpbnQgIjAga3IiOwp9Cgo/Pgo8L2Rpdj4=
PD9waHAKCgokcHJvZHVjdCA9IGdldF9jdXJyZW50X3Byb2R1Y3QoKTsKCmlmKGlzX2EoJHByb2R1Y3QsICJXQ19Qcm9kdWN0IikgJiYgIXByb2R1Y3RfaXNfYnVuZGxlKCRwcm9kdWN0KSAmJiAkcHJvZHVjdC0+Z2V0X2NhdGFsb2dfdmlzaWJpbGl0eSgpID09ICJ2aXNpYmxlIiAmJiAhcHJvZHVjdF9pc19zZXJ2aWNlX2FydGljbGUoKSkKewogIAogICRnYSA9IGdldF9maWVsZCgiX3N0b2NrX2dhX2NvbG9yIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAkZ2FfcyA9IGdldF9maWVsZCgiX3N0b2NrX2dhIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAkZ2FfaSA9IGdldF9maWVsZCgiX3N0b2NrX2dhX2luY29taW5nIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAkZ2FfZCA9IGdldF9maWVsZCgiZGVtb19nYSIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CiAgCiAgJHN0ID0gZ2V0X2ZpZWxkKCJfc3RvY2tfc3RfY29sb3IiLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwogICRzdF9zID0gZ2V0X2ZpZWxkKCJfc3RvY2tfc3QiLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwogICRzdF9pID0gZ2V0X2ZpZWxkKCJfc3RvY2tfc3RfaW5jb21pbmciLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwogICRzdF9kID0gZ2V0X2ZpZWxkKCJkZW1vX3N0IiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAKICAkbGV2ID0gZ2V0X2ZpZWxkKCJfc3RvY2tfcmVtb3RlX2NvbG9yIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICBpZihlbXB0eSgkbGV2KSkKICAgICRsZXYgPSAiZ3JheSI7CiAgJGxldl9zID0gZ2V0X2ZpZWxkKCJfc3RvY2tfcmVtb3RlIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAkbGV2X2kgPSBnZXRfZmllbGQoIl9zdG9ja19yZW1vdGVfaW5jb21pbmciLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwogIAogICRkZWxpdmVyeSA9ICJncmF5IjsKICAKICAkc3RvY2tzID0gWyRnYSwgJHN0LCAkbGV2XTsKICAgIAogIGlmKGluX2FycmF5KCJibHVlIiwgJHN0b2NrcykpCiAgICAgICRkZWxpdmVyeSA9ICJibHVlIjsKCSAgICAKICBpZihpbl9hcnJheSgib3JhbmdlIiwgJHN0b2NrcykpCiAgICAgICRkZWxpdmVyeSA9ICJvcmFuZ2UiOwogICAgCiAgaWYoaW5fYXJyYXkoImdyZWVuIiwgJHN0b2NrcykpCiAgICAgICRkZWxpdmVyeSA9ICJncmVlbiI7CgogICR0b3QgPSAiZ3JheSI7CiAgaWYoaW5fYXJyYXkoImJsdWUiLCAkc3RvY2tzKSkKCSAgJHRvdCA9ICJibHVlIjsKICBpZihpbl9hcnJheSgib3JhbmdlIiwgJHN0b2NrcykpCgkgICR0b3QgPSAib3JhbmdlIjsKICBpZihpbl9hcnJheSgiZ3JlZW4iLCAkc3RvY2tzKSkKCSAgJHRvdCA9ICJncmVlbiI7CgkKICAkdG90X3MgPSAkZ2FfcyArICRzdF9zICsgJGxldl9zOwogICR0b3RfaSA9ICRnYV9pICsgJHN0X2kgKyAkbGV2X2k7CgkKCj8+Cgo8ZGl2IGNsYXNzPSJwcm9kdWN0LXN0b2NrLWxpc3QiPgoKCTw/cGhwIGlmKCR0b3RfcyA+IDAgfHwgJHRvdF9pID4gMCB8fCAkZGVsaXZlcnkgPT0gImJsdWUiKSB7ID8+Cgk8ZGl2IGNsYXNzPSJwcm9kdWN0LXN0b2NrLWxpc3QtaXRlbSI+CgkgIAoJICA8ZGl2IGNsYXNzPSJwcm9kdWN0LXN0b2NrLWxlZnQiPk9ubGluZTo8L2Rpdj4gPGkgY2xhc3M9ImZhcyBmYS1zcXVhcmUgcHJvZHVjdC1zdG9jay08P3BocCBwcmludCAkdG90OyA/PiI+PC9pPgoJCQoJCTw/cGhwIHByaW50ICgkdG90X3MgPiAxMCkgPyAiMTArIiA6ICR0b3RfczsgPz4gc3QKCQkKCQk8c3BhbiBjbGFzcz0icHJvZHVjdC1zdG9jay1leHRyYSI+CgkJPD9waHAgaWYoJHRvdF9zID09IDAgJiYgJHRvdF9pID4gMCkgeyA/PiAoPD9waHAgcHJpbnQgKCR0b3RfaSA+IDEwKSA/ICIxMCsiIDogJHRvdF9pOyA/PiBzdCBww6UgdsOkZyk8P3BocCB9ID8+CgkJPC9zcGFuPgoJPC9kaXY+Cgk8P3BocCB9ID8+CgogIDw/cGhwCiAgaWYoJGdhX3MgPiAwIHx8ICRnYV9pID4gMCB8fCAkZGVsaXZlcnkgPT0gImJsdWUiKXsgPz4KICAJPGRpdiBjbGFzcz0icHJvZHVjdC1zdG9jay1saXN0LWl0ZW0iPjxkaXYgY2xhc3M9InByb2R1Y3Qtc3RvY2stbGVmdCI+R8OkdmxlOjwvZGl2PjxpIGNsYXNzPSJmYXMgZmEtc3F1YXJlIHByb2R1Y3Qtc3RvY2stPD9waHAgcHJpbnQgJGdhOyA/PiI+PC9pPjw/cGhwIHByaW50ICgkZ2FfcyA+IDEwKSA/ICIxMCsiIDogJGdhX3M7ID8+IHN0CgkJCgkJCgkJPHNwYW4gY2xhc3M9InByb2R1Y3Qtc3RvY2stZXh0cmEiPgoJCQk8P3BocCBpZigkZ2FfaSA+IDAgJiYgJGdhX3MgPT0gMCAmJiAkbGV2X3MgPT0gMCk6ID8+ICg8P3BocCBwcmludCAoJGdhX2kgPiAxMCkgPyAiMTArIiA6ICRnYV9pOyA/PiBzdCBww6UgdsOkZyk8P3BocCBlbmRpZjsgPz48P3BocCBpZigkZ2FfZCA9PSB0cnVlICYgJGdhX3MgPT0gMSk6ID8+IChEZW1vZXgpPD9waHAgZW5kaWY7ID8+CgkJPC9zcGFuPgoJCQk8L2Rpdj4KCQkKICA8P3BocCB9ID8+CiAgCiAgPD9waHAKICBpZigkc3RfcyA+IDAgfHwgJHN0X2kgPiAwIHx8ICRkZWxpdmVyeSA9PSAiYmx1ZSIpeyA/PgogIAk8ZGl2IGNsYXNzPSJwcm9kdWN0LXN0b2NrLWxpc3QtaXRlbSI+PGRpdiBjbGFzcz0icHJvZHVjdC1zdG9jay1sZWZ0Ij5TdG9ja2hvbG06PC9kaXY+PGkgY2xhc3M9ImZhcyBmYS1zcXVhcmUgcHJvZHVjdC1zdG9jay08P3BocCBwcmludCAkc3Q7ID8+Ij48L2k+PD9waHAgcHJpbnQgKCRzdF9zID4gMTApID8gIjEwKyIgOiAkc3RfczsgPz4gc3QKCQkKCQkKCQk8c3BhbiBjbGFzcz0icHJvZHVjdC1zdG9jay1leHRyYSI+CgkJPD9waHAgaWYoJHN0X2kgPiAwICYmICRzdF9zID09IDAgJiYgJGxldl9zID09IDApOiA/PiAoPD9waHAgcHJpbnQgKCRzdF9pID4gMTApID8gIjEwKyIgOiAkc3RfaTsgPz4gc3QgcMOlIHbDpGcpPD9waHAgZW5kaWY7ID8+PD9waHAgaWYoJHN0X2QgPT0gdHJ1ZSAmICRzdF9zID09IDEpOiA/PiAoRGVtb2V4KTw/cGhwIGVuZGlmOyA/PgoJCTwvc3Bhbj4KCQkJPC9kaXY+CiAgPD9waHAgfSA/PgogIAo8L2Rpdj4KCjw/cGhwCn0KPz4=
PD9waHAKCgogICRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwogIGlmKGlzX2EoJHByb2R1Y3QsICJXQ19Qcm9kdWN0IikgJiYgJHByb2R1Y3QtPmdldF9jYXRhbG9nX3Zpc2liaWxpdHkoKSA9PSAidmlzaWJsZSIgJiYgIXByb2R1Y3RfaXNfc2VydmljZV9hcnRpY2xlKCkpCiAgewogICAgCiAgICAkZ2EgPSBnZXRfZmllbGQoIl9zdG9ja19nYV9jb2xvciIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CiAgICAkZ2FfcyA9IGdldF9maWVsZCgiX3N0b2NrX2dhIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAgICRnYV9pID0gZ2V0X2ZpZWxkKCJfc3RvY2tfZ2FfaW5jb21pbmciLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwogICAgJGdhX2QgPSBnZXRfZmllbGQoImRlbW9fZ2EiLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwoKICAgICRzdCA9IGdldF9maWVsZCgiX3N0b2NrX3N0X2NvbG9yIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAgICRzdF9zID0gZ2V0X2ZpZWxkKCJfc3RvY2tfc3QiLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwogICAgJHN0X2kgPSBnZXRfZmllbGQoIl9zdG9ja19zdF9pbmNvbWluZyIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CiAgICAkc3RfZCA9IGdldF9maWVsZCgiZGVtb19zdCIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CgogICAgJGxldiA9IGdldF9maWVsZCgiX3N0b2NrX3JlbW90ZV9jb2xvciIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CiAgICBpZihlbXB0eSgkbGV2KSkKICAgICAgJGxldiA9ICJncmF5IjsKICAgICRsZXZfcyA9IGdldF9maWVsZCgiX3N0b2NrX3JlbW90ZSIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CiAgCiAgICAkc2hvd19idXR0b24gPSBnZXRfZmllbGQoImRvbGpfa29wa25hcHAiLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwogICAgJGhhc19jYXRlZ29yeSA9ICFlbXB0eSgkcHJvZHVjdC0+Z2V0X2NhdGVnb3J5X2lkcygpKTsKCiAgICBpZigkc2hvd19idXR0b24gIT0gdHJ1ZSkKICAgIHsKICAgICAgaWYoJHN0X3MgPiAwIHx8ICRnYV9zID4gMCB8fCAkbGV2ICE9ICdncmF5Jyl7CiAgCj8+CjxhIGNsYXNzPSJyb3lhbC1jYXJ0LWxpbmsgYWRkX3RvX2NhcnRfYnV0dG9uIGFqYXhfYWRkX3RvX2NhcnQiIGhyZWY9Ij9hZGQtdG8tY2FydD08P3BocCBwcmludCAkcHJvZHVjdC0+Z2V0X2lkKCk7ID8+IiBkYXRhLXF1YW50aXR5PSIxIiBkYXRhLXByb2R1Y3RfaWQ9Ijw/cGhwIHByaW50ICRwcm9kdWN0LT5nZXRfaWQoKTsgPz4iIGRhdGEtcHJvZHVjdF9za3U9Ijw/cGhwIHByaW50ICRwcm9kdWN0LT5nZXRfc2t1KCk7ID8+Ij48YnV0dG9uIGNsYXNzPSJyb3lhbC1jYXJ0Ij48aSBjbGFzcz0iZmFzIGZhLWNhcnQtcGx1cyI+PC9pPjwvYnV0dG9uPjwvYT4KPGEgY2xhc3M9ImFkZGVkLXRvLWNhcnQgd2MtZm9yd2FyZCIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPjwvYT4KPD9waHAKICAgICAgfQogICAgCiAgfWVsc2V7CiAgICBpZigkc3RfcyA+IDAgfHwgJGdhX3MgPiAwIHx8ICRsZXYgIT0gJ2dyYXknKXsKPz4KPGEgY2xhc3M9InJveWFsLWNhcnQtbGluayBhZGRfdG9fY2FydF9idXR0b24gYWpheF9hZGRfdG9fY2FydCIgaHJlZj0iP2FkZC10by1jYXJ0PTAiIGRhdGEtcXVhbnRpdHk9IjEiIGRhdGEtcHJvZHVjdF9pZD0iMCIgZGF0YS1wcm9kdWN0X3NrdT0iMCI+PGJ1dHRvbiBjbGFzcz0icm95YWwtY2FydCI+PGkgY2xhc3M9ImZhcyBmYS1jYXJ0LXBsdXMiPjwvaT48L2J1dHRvbj48L2E+CjxhIGNsYXNzPSJhZGRlZC10by1jYXJ0IHdjLWZvcndhcmQiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij48L2E+Cjw/cGhwCiAgICAgIH0KICB9Cn0KCj8+
PD9waHAKCgogICRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwogIGlmKGlzX2EoJHByb2R1Y3QsICJXQ19Qcm9kdWN0IikpCiAgewogICAgCiAgICAkZ2EgPSBnZXRfZmllbGQoIl9zdG9ja19nYV9jb2xvciIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CiAgICAkc3QgPSBnZXRfZmllbGQoIl9zdG9ja19zdF9jb2xvciIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CiAgICAkbGV2ID0gZ2V0X2ZpZWxkKCJfc3RvY2tfcmVtb3RlX2NvbG9yIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAKICAgICAgaWYoJGdhID09ICJncmF5IiAmJiAkc3QgPT0gImdyYXkiICYmICRsZXYgPT0gImdyYXkiKXsKCQkgID8+CiAgPHNwYW4gY2xhc3M9J3Byb2R1Y3Qtbm90LWF2YWlsYWJsZSc+UHJvZHVrdGVuIMOkciB0eXbDpHJyIGludGUgdGlsbGfDpG5nbGlnIGp1c3QgbnUuPC9zcGFuPgo8P3BocAogICAgfQogICAgCiAgfQoKPz4=
PD9waHAKCiRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwoKaWYoaXNfYSgkcHJvZHVjdCwgIldDX1Byb2R1Y3QiKSkKewoJCgkkZmFyZ2VyID0gW107CgkKCWlmKHN0cmxlbigkcHJvZHVjdC0+Z2V0X2F0dHJpYnV0ZSgiYmxhY2stZmFyZyIpKSA+IDApCgkJJGZhcmdlciA9IGFycmF5X21lcmdlKCRmYXJnZXIsIGV4cGxvZGUoIiwgIiwgJHByb2R1Y3QtPmdldF9hdHRyaWJ1dGUoImJsYWNrLWZhcmciKSkpOwoJCglpZihzdHJsZW4oJHByb2R1Y3QtPmdldF9hdHRyaWJ1dGUoInRvbmVyLWZhcmciKSkgPiAwKQoJCSRmYXJnZXIgPSBhcnJheV9tZXJnZSgkZmFyZ2VyLCBleHBsb2RlKCIsICIsICRwcm9kdWN0LT5nZXRfYXR0cmlidXRlKCJ0b25lci1mYXJnIikpKTsKCQoJaWYoaXNfYXJyYXkoJGZhcmdlcikgJiYgY291bnQoJGZhcmdlcikgPiAwKQoJewoJCXByaW50ICc8ZGl2IGNsYXNzPSJyb3lhbC1wcm9kdWN0LWNhcmQtdjItaW5rLWRvdHMiPic7CgkJCgkJZm9yZWFjaCgkZmFyZ2VyIGFzICRmYXJnKQoJCXsKCQkJaWYoJGZhcmcgPT0gIk9zcGVjaWZpY2VyYXQiKQoJCQkJY29udGludWU7CgkJCQoJCQlpZihzdHJsZW4oJGZhcmcpIDwgMSkKCQkJCWNvbnRpbnVlOwoJCQkKCQkJcHJpbnQgJzxkaXYgY2xhc3M9InJveWFsLXByb2R1Y3QtY2FyZC12Mi1pbmstZG90IGluay1kb3QtJyAuIHN0cnRvbG93ZXIoJGZhcmcpIC4gJyI+PC9kaXY+JzsKCQl9CgkJCgkJcHJpbnQgJzwvZGl2Pic7Cgl9Cn0KCj8+
Cgo8P3BocAoKJHByb2R1Y3QgPSBnZXRfY3VycmVudF9wcm9kdWN0KCk7CgppZihpc19hKCRwcm9kdWN0LCAiV0NfUHJvZHVjdCIpKQp7CiAgaWYoJHByb2R1Y3QtPmlzX29uX3NhbGUoKSkKICB7Cj8+PGRpdiBjbGFzcz0icm95YWwtcHJvZHVjdC1kaXNjb3VudCI+PD9waHAKICAKICAkc2FsZV9wcmljZSA9ICRwcm9kdWN0LT5nZXRfc2FsZV9wcmljZSgpOwogICRyZWd1bGFyX3ByaWNlID0gJHByb2R1Y3QtPmdldF9yZWd1bGFyX3ByaWNlKCk7CiAgJHByaWNlX2RpZmYgPSAkcmVndWxhcl9wcmljZSAtICRzYWxlX3ByaWNlOwoJICAKICBpZiAoJHByaWNlX2RpZmYgPiAxOTkpIHsKICBwcmludCAic3BhcmEgIiAuIHJvdW5kKCRwcmljZV9kaWZmKSAuICIga3IiOwp9IGVsc2UgewogICRwZXJjZW50YWdlID0gKCgkcmVndWxhcl9wcmljZSAtICRzYWxlX3ByaWNlKSAqIDEwMCkgLyAkcmVndWxhcl9wcmljZTsKICBwcmludCByb3VuZCgkcGVyY2VudGFnZSkgLiAiJSI7Cn0gCgkgIAoJICAKICAKICAKPz48L2Rpdj48P3BocAogIH0KLyp9ZWxzZXsKPz48ZGl2IGNsYXNzPSJyb3lhbC1wcm9kdWN0LWRpc2NvdW50Ij48P3BocAogIHByaW50ICIwJSI7Cj8+PC9kaXY+PD9waHAqLwp9Cgo/Pg==
PD9waHAKCiRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwoKaWYoaXNfYSgkcHJvZHVjdCwgIldDX1Byb2R1Y3QiKSkKewogIGlmKCRwcm9kdWN0LT5pc19vbl9zYWxlKCkpCiAgewoJICAKCSAgJGV4dHJhX2NsYXNzID0gKGNhbXBhaWduX2lzX2FjdGl2ZSgxOTYwNCkgJiYgY2FtcGFpZ25faGFzX3Byb2R1Y3QoMTk2MDQsICRwcm9kdWN0LT5nZXRfaWQoKSkpID8gImJsYWNrLXdlZWsiIDogIiI7CgkgICR0ZXh0ID0gKGNhbXBhaWduX2lzX2FjdGl2ZSgxOTYwNCkgJiYgY2FtcGFpZ25faGFzX3Byb2R1Y3QoMTk2MDQsICRwcm9kdWN0LT5nZXRfaWQoKSkpID8gIkN5YmVyIFdlZWsiIDogIkthbXBhbmoiOwogID8+Cgo8ZGl2IGlkPSJkaXZfYmxvY2stNTItMTI0NTgiIGNsYXNzPSJjdC1kaXYtYmxvY2siPgoJPGRpdiBpZD0idGV4dF9ibG9jay01My0xMjQ1OCIgY2xhc3M9ImN0LXRleHQtYmxvY2sgYW5nbGVkLWJhbm5lciA8P3BocCBwcmludCAkZXh0cmFfY2xhc3M7ID8+Ij4KCQk8P3BocCBwcmludCAkdGV4dDsgPz4KCTwvZGl2Pgo8L2Rpdj4KCjw/cGhwCiAgfQp9Cj8+
PD9waHAKCiRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwppZihpc19hKCRwcm9kdWN0LCAiV0NfUHJvZHVjdCIpKQp7CgogICRjYXRlZ29yaWVzID0gJHByb2R1Y3QtPmdldF9jYXRlZ29yeV9pZHMoKTsKICAKICBmb3JlYWNoKCRjYXRlZ29yaWVzIGFzICRjYXRlZ29yeSkKICB7CiAgIAkJJGhhc19iYW5uZXIgPSBnZXRfZmllbGQoInZpc2FfYmFubmVyX3BhX3Byb2R1a3QiLCAicHJvZHVjdF9jYXRfIiAuICRjYXRlZ29yeSk7CiAgICAKICAgIAlpZigkaGFzX2Jhbm5lciA9PSB0cnVlKQogICAgICAgIHsKICAgICAgICAgICRjb2xvciA9IGdldF9maWVsZCgiYmFubmVyZmFyZyIsICJwcm9kdWN0X2NhdF8iIC4gJGNhdGVnb3J5KTsKICAgICAgICAgICR0ZXh0ID0gZ2V0X2ZpZWxkKCJiYW5uZXJ0ZXh0IiwgInByb2R1Y3RfY2F0XyIgLiAkY2F0ZWdvcnkpOwogICAgICAgICAgJHRleHRjb2xvciA9IGdldF9maWVsZCgiYmFubmVydGV4dGZhcmciLCAicHJvZHVjdF9jYXRfIiAuICRjYXRlZ29yeSk7CiAgICAgICAgICAKICAgICAgICAgIHByaW50ICc8ZGl2IGNsYXNzPSJyb3lhbC1wcm9kdWN0LWJhbm5lciBjYXJkIiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjonIC4gJGNvbG9yIC4gJyI+JzsKICAJCSAgcHJpbnQgJzxkaXYgY2xhc3M9InJveWFsLXByb2R1Y3QtYmFubmVyLXRleHQiIHN0eWxlPSJjb2xvcjonIC4gJHRleHRjb2xvciAuICciPic7CiAgCQkgIHByaW50ICR0ZXh0OwogIAkJICBwcmludCAnPC9kaXY+JzsKICAJCSAgcHJpbnQgJzwvZGl2Pic7CiAgICAgICAgfQogIH0KCQoJaWYoZ2V0X2ZpZWxkKCJwcmUtb3duZWQiLCAkcHJvZHVjdC0+Z2V0X2lkKCkpID09IDEpCgl7CiAgICAgICAgICBwcmludCAnPGRpdiBjbGFzcz0icm95YWwtcHJvZHVjdC1iYW5uZXIgY2FyZCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IzNhNzRmZiI+JzsKICAJCSAgcHJpbnQgJzxkaXYgY2xhc3M9InJveWFsLXByb2R1Y3QtYmFubmVyLXRleHQiIHN0eWxlPSJjb2xvcjojZmZmIj4nOwogIAkJICBwcmludCAiUHJlLW93bmVkIjsKICAJCSAgcHJpbnQgJzwvZGl2Pic7CiAgCQkgIHByaW50ICc8L2Rpdj4nOwoJfQogIAp9Cgo/Pg==
PD9waHAKCiRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwoKaWYoaXNfYSgkcHJvZHVjdCwgIldDX1Byb2R1Y3QiKSkKewogICRpZCA9ICRwcm9kdWN0LT5nZXRfaWQoKTsKICAkZGVtbyA9IGZhbHNlOwogIGlmKGdldF9maWVsZCgiZGVtb19nYSIsICRpZCkgPT0gdHJ1ZSAmIGdldF9maWVsZCgiX3N0b2NrX3N0IiwgJGlkKSA9PSAwICYgZ2V0X2ZpZWxkKCJfc3RvY2tfZ2EiLCAkaWQpID09IDEpOiAkZGVtbyA9IHRydWU7IGVuZGlmOwogIGlmKGdldF9maWVsZCgiZGVtb19zdCIsICRpZCkgPT0gdHJ1ZSAmIGdldF9maWVsZCgiX3N0b2NrX2dhIiwgJGlkKSA9PSAwICYgZ2V0X2ZpZWxkKCJfc3RvY2tfc3QiLCAkaWQpID09IDEpOiAkZGVtbyA9IHRydWU7IGVuZGlmOwoKICBpZigkZGVtbyk6cHJpbnQgJzxzcGFuIGNsYXNzPSJwcm9kdWN0LWNhcmQtZGVtb2V4Ij5kZW1vPC9zcGFuPic7ZW5kaWY7IAp9Cj8+
PD9waHAKCiRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwoKaWYoaXNfYSgkcHJvZHVjdCwgIldDX1Byb2R1Y3QiKSkKewoJCj8+CjxhIGlkPSJsaW5rLTQ3LTEyNDU4IiBjbGFzcz0iY3QtbGluayIgaHJlZj0iPD9waHAgcHJpbnQgJHByb2R1Y3QtPmdldF9wZXJtYWxpbmsoKTsgPz4iIHRhcmdldD0iX3NlbGYiPgogIAo8P3BocCBwcmludCBnZXRfdGhlX3Bvc3RfdGh1bWJuYWlsKCAkcHJvZHVjdC0+Z2V0X2lkKCksICdtZWRpdW0nLCBhcnJheSggJ2NsYXNzJyA9PiAnYXV0by1zY2FsZScgKSApOyA/PgoJCjwvYT4KPD9waHAKfQoKPz4=
PD9waHAKCiRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwoKaWYoaXNfYSgkcHJvZHVjdCwgIldDX1Byb2R1Y3QiKSkKewokaWQgPSAkcHJvZHVjdC0+Z2V0X2lkKCk7CgppZihpc19hKCRwcm9kdWN0LCAiV0NfUHJvZHVjdCIpKXsKICBwcmludCAiPGEgaHJlZj0nIiAuIGdldF9wZXJtYWxpbmsoICRwcm9kdWN0LT5nZXRfaWQoKSApIC4gIicgY2xhc3M9J3Byb2R1Y3QtY2FyZC10aXRsZScgPiIgLiAkcHJvZHVjdC0+Z2V0X3RpdGxlKCkgLiAiPC9hPiI7CgoKfWVsc2V7CiAgcHJpbnQgIlByb2R1a3RuYW1uIjsKfQp9ZWxzZXsKIHByaW50ICJJbmdldCBwcm9kdWt0bmFtbiBoaXR0YWRlcyI7IAp9Cgo/Pg==
PD9waHAKJHByb2R1Y3QgPSBnZXRfY3VycmVudF9wcm9kdWN0KCk7CgppZihpc19hKCRwcm9kdWN0LCAiV0NfUHJvZHVjdCIpKQp7CnByaW50ICI8c3BhbiBzdHlsZT0nZGlzcGxheTpibG9jaztoZWlnaHQ6MTNweDsnPiIuJHByb2R1Y3QtPmdldF9za3UoKS4iIDwvc3Bhbj4iOwp9Cj8+
PD9waHAKCgovLyBzaG93X2Rlc2Nfbm9fYXR0cwoKJHByb2R1Y3QgPSBnZXRfY3VycmVudF9wcm9kdWN0KCk7CgppZihpc19hKCRwcm9kdWN0LCAiV0NfUHJvZHVjdCIpKQp7CgogICRjYXRlZ29yeV9pZHMgPSAkcHJvZHVjdC0+Z2V0X2NhdGVnb3J5X2lkcygpOwogIC8qJGNhdGVnb3JpZXMgPSBnZXRfdGVybXMoWwogICAgICAidGVybV90YXhvbm9teV9pZCIgPT4gJGNhdGVnb3J5X2lkcwogIF0pOyovCgogICR2YWx1ZXNfdG9fcHJpbnQgPSBbXTsKICBpZighZW1wdHkoJGNhdGVnb3J5X2lkcykgJiYgY291bnQoJGNhdGVnb3J5X2lkcykgPiAwKQogIHsKICAgIGZvcmVhY2goJGNhdGVnb3J5X2lkcyBhcyAkY2F0ZWdvcnlfaWQpCiAgICB7CgoJCSRjYXRlZ29yeSA9ICJwcm9kdWN0X2NhdF8iIC4gJGNhdGVnb3J5X2lkOwoJCSRub19hdHRzID0gZ2V0X2ZpZWxkKCJzaG93X2Rlc2Nfbm9fYXR0cyIsICRjYXRlZ29yeSk7CgkJCgkJaWYoJG5vX2F0dHMgPT0gdHJ1ZSkKCQl7CgkJCSR2YWx1ZXNfdG9fcHJpbnQgPSBbXTsKCQkJYnJlYWs7CgkJfQoJCQogICAgICAkaGFzX3Jvd3MgPSBoYXZlX3Jvd3MoImF0dHJpYnV0X2F0dF92aXNhX3BhX3Byb2R1a3RyYWQiLCAkY2F0ZWdvcnkpOwoKICAgICAgaWYoISRoYXNfcm93cykKICAgICAgICBjb250aW51ZTsKCiAgICAgICRmaWVsZHMgPSBnZXRfZmllbGQoImF0dHJpYnV0X2F0dF92aXNhX3BhX3Byb2R1a3RyYWQiLCAkY2F0ZWdvcnkpOyAvLyBnZXQgYWxsIGZpZWxkcyBpbiByZXBlYXRlcgoKICAgICAgaWYoIWVtcHR5KCRmaWVsZHMpKQogICAgICB7CiAgICAgICAgZm9yZWFjaCgkZmllbGRzIGFzICRmaWVsZCkKICAgICAgICB7CiAgICAgICAgICBpZihjb3VudCgkdmFsdWVzX3RvX3ByaW50KSA+PSA1KXticmVhazt9CgkJCQogICAgICAgICAgZm9yZWFjaCgkZmllbGQgYXMgJGtleSA9PiAkdmFsdWUpCiAgICAgICAgICB7CgkJCSAgJGF0dHJfdmFsdWUgPSAkcHJvZHVjdC0+Z2V0X2F0dHJpYnV0ZSgkdmFsdWUpOwogICAgICAgICAgICAgIGlmKCFlbXB0eSgkYXR0cl92YWx1ZSkpCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYoJGF0dHJfdmFsdWUgIT0gIk9zcGVjaWZpY2VyYXQiKQogICAgICAgICAgICAgICAgewoJCQkJCWlmKCFpbl9hcnJheSgkYXR0cl92YWx1ZSwgJHZhbHVlc190b19wcmludCkpCgkJCQkJewogICAgICAgICAgICAgICAgICAJCSR2YWx1ZXNfdG9fcHJpbnRbXSA9ICRhdHRyX3ZhbHVlOyAvLyBhZGQgdGF4b25vbXkgdG8gbGlzdAogICAgICAgICAgICAgICAgCX0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQoKICAgIH0KICB9CiAgCiAgICBpZihjb3VudCgkdmFsdWVzX3RvX3ByaW50KSA+IDApCgl7CiAgICAJcHJpbnQgJzx1bCBjbGFzcz0icHJvZHVrdGtvcnQtYXR0ciI+PGxpPjxpIGNsYXNzPSJmYXMgZmEtY2hlY2siPjwvaT4nIC4gaW1wbG9kZSggJzwvbGk+PGxpPjxpIGNsYXNzPSJmYXMgZmEtY2hlY2siPjwvaT4nLCAkdmFsdWVzX3RvX3ByaW50KSAuICc8L2xpPjwvdWw+JzsKCX1lbHNlewogICAgICAgIAoJCSRkZXNjID0gJHByb2R1Y3QtPmdldF9kZXNjcmlwdGlvbigpOwoJCSRkZXNjID0gZG9fc2hvcnRjb2RlKCRkZXNjKTsKCQkkZGVzYyA9IHN0cmlwX3RhZ3MoJGRlc2MpOwoJCQoJCWlmKCFlbXB0eSgkZGVzYykpCgkJewoJCQlpZihzdHJsZW4oJGRlc2MpID4gMTQwKQoJCQl7CgkJCQkkZGVzYyA9IHN1YnN0cigkZGVzYywgMCwgMTQwKSAuICIuLi4iOwoJCQl9CgkJfQoJCQoKCQlwcmludCAnPGRpdiBjbGFzcz0icHJvZHVjdC1zaG9ydC1kZXNjIj4nIC4gJGRlc2MgLiAnPC9kaXY+JzsKICAgIH0KfQoKPz4=
PGRpdiBpZD0icm95YWwtcHJvZHVjdC1wcmljZSI+CiAgPD9waHAKCiRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwoKaWYoaXNfYSgkcHJvZHVjdCwgIldDX1Byb2R1Y3QiKSkKewo/PgoKICAgIAo8P3BocAogCmlmKCRwcm9kdWN0LT5pc19vbl9zYWxlKCkpCnsKPz4KICAgICAgPGRpdiBpZD0icm95YWwtcHJvZHVjdC1wcmljZS1yZWd1bGFyIiBjbGFzcz0ic3RyaWtlb3V0Ij48P3BocCBwcmludCAkcHJvZHVjdC0+Z2V0X3JlZ3VsYXJfcHJpY2UoKTsgPz4ga3I8L2Rpdj48YnIgLz4KICAgICAgPGRpdiBpZD0icm95YWwtcHJvZHVjdC1wcmljZS1zYWxlIj48P3BocCBwcmludCAkcHJvZHVjdC0+Z2V0X3NhbGVfcHJpY2UoKTsgPz4ga3I8L2Rpdj4KPD9waHAKfWVsc2V7CnByaW50ICRwcm9kdWN0LT5nZXRfcHJpY2UoKSAuICIga3IiOwp9Cn0KZWxzZQp7CiAgcHJpbnQgIjAga3IiOwp9Cgo/Pgo8L2Rpdj4=
PD9waHAKCgokcHJvZHVjdCA9IGdldF9jdXJyZW50X3Byb2R1Y3QoKTsKCmlmKGlzX2EoJHByb2R1Y3QsICJXQ19Qcm9kdWN0IikgJiYgIXByb2R1Y3RfaXNfYnVuZGxlKCRwcm9kdWN0KSAmJiAkcHJvZHVjdC0+Z2V0X2NhdGFsb2dfdmlzaWJpbGl0eSgpID09ICJ2aXNpYmxlIiAmJiAhcHJvZHVjdF9pc19zZXJ2aWNlX2FydGljbGUoKSkKewogIAogICRnYSA9IGdldF9maWVsZCgiX3N0b2NrX2dhX2NvbG9yIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAkZ2FfcyA9IGdldF9maWVsZCgiX3N0b2NrX2dhIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAkZ2FfaSA9IGdldF9maWVsZCgiX3N0b2NrX2dhX2luY29taW5nIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAkZ2FfZCA9IGdldF9maWVsZCgiZGVtb19nYSIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CiAgCiAgJHN0ID0gZ2V0X2ZpZWxkKCJfc3RvY2tfc3RfY29sb3IiLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwogICRzdF9zID0gZ2V0X2ZpZWxkKCJfc3RvY2tfc3QiLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwogICRzdF9pID0gZ2V0X2ZpZWxkKCJfc3RvY2tfc3RfaW5jb21pbmciLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwogICRzdF9kID0gZ2V0X2ZpZWxkKCJkZW1vX3N0IiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAKICAkbGV2ID0gZ2V0X2ZpZWxkKCJfc3RvY2tfcmVtb3RlX2NvbG9yIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICBpZihlbXB0eSgkbGV2KSkKICAgICRsZXYgPSAiZ3JheSI7CiAgJGxldl9zID0gZ2V0X2ZpZWxkKCJfc3RvY2tfcmVtb3RlIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAkbGV2X2kgPSBnZXRfZmllbGQoIl9zdG9ja19yZW1vdGVfaW5jb21pbmciLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwogIAogICRkZWxpdmVyeSA9ICJncmF5IjsKICAKICAkc3RvY2tzID0gWyRnYSwgJHN0LCAkbGV2XTsKICAgIAogIGlmKGluX2FycmF5KCJibHVlIiwgJHN0b2NrcykpCiAgICAgICRkZWxpdmVyeSA9ICJibHVlIjsKCSAgICAKICBpZihpbl9hcnJheSgib3JhbmdlIiwgJHN0b2NrcykpCiAgICAgICRkZWxpdmVyeSA9ICJvcmFuZ2UiOwogICAgCiAgaWYoaW5fYXJyYXkoImdyZWVuIiwgJHN0b2NrcykpCiAgICAgICRkZWxpdmVyeSA9ICJncmVlbiI7CgogICR0b3QgPSAiZ3JheSI7CiAgaWYoaW5fYXJyYXkoImJsdWUiLCAkc3RvY2tzKSkKCSAgJHRvdCA9ICJibHVlIjsKICBpZihpbl9hcnJheSgib3JhbmdlIiwgJHN0b2NrcykpCgkgICR0b3QgPSAib3JhbmdlIjsKICBpZihpbl9hcnJheSgiZ3JlZW4iLCAkc3RvY2tzKSkKCSAgJHRvdCA9ICJncmVlbiI7CgkKICAkdG90X3MgPSAkZ2FfcyArICRzdF9zICsgJGxldl9zOwogICR0b3RfaSA9ICRnYV9pICsgJHN0X2kgKyAkbGV2X2k7CgkKCj8+Cgo8ZGl2IGNsYXNzPSJwcm9kdWN0LXN0b2NrLWxpc3QiPgoKCTw/cGhwIGlmKCR0b3RfcyA+IDAgfHwgJHRvdF9pID4gMCB8fCAkZGVsaXZlcnkgPT0gImJsdWUiKSB7ID8+Cgk8ZGl2IGNsYXNzPSJwcm9kdWN0LXN0b2NrLWxpc3QtaXRlbSI+CgkgIAoJICA8ZGl2IGNsYXNzPSJwcm9kdWN0LXN0b2NrLWxlZnQiPk9ubGluZTo8L2Rpdj4gPGkgY2xhc3M9ImZhcyBmYS1zcXVhcmUgcHJvZHVjdC1zdG9jay08P3BocCBwcmludCAkdG90OyA/PiI+PC9pPgoJCQoJCTw/cGhwIHByaW50ICgkdG90X3MgPiAxMCkgPyAiMTArIiA6ICR0b3RfczsgPz4gc3QKCQkKCQk8c3BhbiBjbGFzcz0icHJvZHVjdC1zdG9jay1leHRyYSI+CgkJPD9waHAgaWYoJHRvdF9zID09IDAgJiYgJHRvdF9pID4gMCkgeyA/PiAoPD9waHAgcHJpbnQgKCR0b3RfaSA+IDEwKSA/ICIxMCsiIDogJHRvdF9pOyA/PiBzdCBww6UgdsOkZyk8P3BocCB9ID8+CgkJPC9zcGFuPgoJPC9kaXY+Cgk8P3BocCB9ID8+CgogIDw/cGhwCiAgaWYoJGdhX3MgPiAwIHx8ICRnYV9pID4gMCB8fCAkZGVsaXZlcnkgPT0gImJsdWUiKXsgPz4KICAJPGRpdiBjbGFzcz0icHJvZHVjdC1zdG9jay1saXN0LWl0ZW0iPjxkaXYgY2xhc3M9InByb2R1Y3Qtc3RvY2stbGVmdCI+R8OkdmxlOjwvZGl2PjxpIGNsYXNzPSJmYXMgZmEtc3F1YXJlIHByb2R1Y3Qtc3RvY2stPD9waHAgcHJpbnQgJGdhOyA/PiI+PC9pPjw/cGhwIHByaW50ICgkZ2FfcyA+IDEwKSA/ICIxMCsiIDogJGdhX3M7ID8+IHN0CgkJCgkJCgkJPHNwYW4gY2xhc3M9InByb2R1Y3Qtc3RvY2stZXh0cmEiPgoJCQk8P3BocCBpZigkZ2FfaSA+IDAgJiYgJGdhX3MgPT0gMCAmJiAkbGV2X3MgPT0gMCk6ID8+ICg8P3BocCBwcmludCAoJGdhX2kgPiAxMCkgPyAiMTArIiA6ICRnYV9pOyA/PiBzdCBww6UgdsOkZyk8P3BocCBlbmRpZjsgPz48P3BocCBpZigkZ2FfZCA9PSB0cnVlICYgJGdhX3MgPT0gMSk6ID8+IChEZW1vZXgpPD9waHAgZW5kaWY7ID8+CgkJPC9zcGFuPgoJCQk8L2Rpdj4KCQkKICA8P3BocCB9ID8+CiAgCiAgPD9waHAKICBpZigkc3RfcyA+IDAgfHwgJHN0X2kgPiAwIHx8ICRkZWxpdmVyeSA9PSAiYmx1ZSIpeyA/PgogIAk8ZGl2IGNsYXNzPSJwcm9kdWN0LXN0b2NrLWxpc3QtaXRlbSI+PGRpdiBjbGFzcz0icHJvZHVjdC1zdG9jay1sZWZ0Ij5TdG9ja2hvbG06PC9kaXY+PGkgY2xhc3M9ImZhcyBmYS1zcXVhcmUgcHJvZHVjdC1zdG9jay08P3BocCBwcmludCAkc3Q7ID8+Ij48L2k+PD9waHAgcHJpbnQgKCRzdF9zID4gMTApID8gIjEwKyIgOiAkc3RfczsgPz4gc3QKCQkKCQkKCQk8c3BhbiBjbGFzcz0icHJvZHVjdC1zdG9jay1leHRyYSI+CgkJPD9waHAgaWYoJHN0X2kgPiAwICYmICRzdF9zID09IDAgJiYgJGxldl9zID09IDApOiA/PiAoPD9waHAgcHJpbnQgKCRzdF9pID4gMTApID8gIjEwKyIgOiAkc3RfaTsgPz4gc3QgcMOlIHbDpGcpPD9waHAgZW5kaWY7ID8+PD9waHAgaWYoJHN0X2QgPT0gdHJ1ZSAmICRzdF9zID09IDEpOiA/PiAoRGVtb2V4KTw/cGhwIGVuZGlmOyA/PgoJCTwvc3Bhbj4KCQkJPC9kaXY+CiAgPD9waHAgfSA/PgogIAo8L2Rpdj4KCjw/cGhwCn0KPz4=
PD9waHAKCgogICRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwogIGlmKGlzX2EoJHByb2R1Y3QsICJXQ19Qcm9kdWN0IikgJiYgJHByb2R1Y3QtPmdldF9jYXRhbG9nX3Zpc2liaWxpdHkoKSA9PSAidmlzaWJsZSIgJiYgIXByb2R1Y3RfaXNfc2VydmljZV9hcnRpY2xlKCkpCiAgewogICAgCiAgICAkZ2EgPSBnZXRfZmllbGQoIl9zdG9ja19nYV9jb2xvciIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CiAgICAkZ2FfcyA9IGdldF9maWVsZCgiX3N0b2NrX2dhIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAgICRnYV9pID0gZ2V0X2ZpZWxkKCJfc3RvY2tfZ2FfaW5jb21pbmciLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwogICAgJGdhX2QgPSBnZXRfZmllbGQoImRlbW9fZ2EiLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwoKICAgICRzdCA9IGdldF9maWVsZCgiX3N0b2NrX3N0X2NvbG9yIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAgICRzdF9zID0gZ2V0X2ZpZWxkKCJfc3RvY2tfc3QiLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwogICAgJHN0X2kgPSBnZXRfZmllbGQoIl9zdG9ja19zdF9pbmNvbWluZyIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CiAgICAkc3RfZCA9IGdldF9maWVsZCgiZGVtb19zdCIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CgogICAgJGxldiA9IGdldF9maWVsZCgiX3N0b2NrX3JlbW90ZV9jb2xvciIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CiAgICBpZihlbXB0eSgkbGV2KSkKICAgICAgJGxldiA9ICJncmF5IjsKICAgICRsZXZfcyA9IGdldF9maWVsZCgiX3N0b2NrX3JlbW90ZSIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CiAgCiAgICAkc2hvd19idXR0b24gPSBnZXRfZmllbGQoImRvbGpfa29wa25hcHAiLCAkcHJvZHVjdC0+Z2V0X2lkKCkpOwogICAgJGhhc19jYXRlZ29yeSA9ICFlbXB0eSgkcHJvZHVjdC0+Z2V0X2NhdGVnb3J5X2lkcygpKTsKCiAgICBpZigkc2hvd19idXR0b24gIT0gdHJ1ZSkKICAgIHsKICAgICAgaWYoJHN0X3MgPiAwIHx8ICRnYV9zID4gMCB8fCAkbGV2ICE9ICdncmF5Jyl7CiAgCj8+CjxhIGNsYXNzPSJyb3lhbC1jYXJ0LWxpbmsgYWRkX3RvX2NhcnRfYnV0dG9uIGFqYXhfYWRkX3RvX2NhcnQiIGhyZWY9Ij9hZGQtdG8tY2FydD08P3BocCBwcmludCAkcHJvZHVjdC0+Z2V0X2lkKCk7ID8+IiBkYXRhLXF1YW50aXR5PSIxIiBkYXRhLXByb2R1Y3RfaWQ9Ijw/cGhwIHByaW50ICRwcm9kdWN0LT5nZXRfaWQoKTsgPz4iIGRhdGEtcHJvZHVjdF9za3U9Ijw/cGhwIHByaW50ICRwcm9kdWN0LT5nZXRfc2t1KCk7ID8+Ij48YnV0dG9uIGNsYXNzPSJyb3lhbC1jYXJ0Ij48aSBjbGFzcz0iZmFzIGZhLWNhcnQtcGx1cyI+PC9pPjwvYnV0dG9uPjwvYT4KPGEgY2xhc3M9ImFkZGVkLXRvLWNhcnQgd2MtZm9yd2FyZCIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPjwvYT4KPD9waHAKICAgICAgfQogICAgCiAgfWVsc2V7CiAgICBpZigkc3RfcyA+IDAgfHwgJGdhX3MgPiAwIHx8ICRsZXYgIT0gJ2dyYXknKXsKPz4KPGEgY2xhc3M9InJveWFsLWNhcnQtbGluayBhZGRfdG9fY2FydF9idXR0b24gYWpheF9hZGRfdG9fY2FydCIgaHJlZj0iP2FkZC10by1jYXJ0PTAiIGRhdGEtcXVhbnRpdHk9IjEiIGRhdGEtcHJvZHVjdF9pZD0iMCIgZGF0YS1wcm9kdWN0X3NrdT0iMCI+PGJ1dHRvbiBjbGFzcz0icm95YWwtY2FydCI+PGkgY2xhc3M9ImZhcyBmYS1jYXJ0LXBsdXMiPjwvaT48L2J1dHRvbj48L2E+CjxhIGNsYXNzPSJhZGRlZC10by1jYXJ0IHdjLWZvcndhcmQiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij48L2E+Cjw/cGhwCiAgICAgIH0KICB9Cn0KCj8+
PD9waHAKCgogICRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwogIGlmKGlzX2EoJHByb2R1Y3QsICJXQ19Qcm9kdWN0IikpCiAgewogICAgCiAgICAkZ2EgPSBnZXRfZmllbGQoIl9zdG9ja19nYV9jb2xvciIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CiAgICAkc3QgPSBnZXRfZmllbGQoIl9zdG9ja19zdF9jb2xvciIsICRwcm9kdWN0LT5nZXRfaWQoKSk7CiAgICAkbGV2ID0gZ2V0X2ZpZWxkKCJfc3RvY2tfcmVtb3RlX2NvbG9yIiwgJHByb2R1Y3QtPmdldF9pZCgpKTsKICAKICAgICAgaWYoJGdhID09ICJncmF5IiAmJiAkc3QgPT0gImdyYXkiICYmICRsZXYgPT0gImdyYXkiKXsKCQkgID8+CiAgPHNwYW4gY2xhc3M9J3Byb2R1Y3Qtbm90LWF2YWlsYWJsZSc+UHJvZHVrdGVuIMOkciB0eXbDpHJyIGludGUgdGlsbGfDpG5nbGlnIGp1c3QgbnUuPC9zcGFuPgo8P3BocAogICAgfQogICAgCiAgfQoKPz4=
PD9waHAKCiRwcm9kdWN0ID0gZ2V0X2N1cnJlbnRfcHJvZHVjdCgpOwoKaWYoaXNfYSgkcHJvZHVjdCwgIldDX1Byb2R1Y3QiKSkKewoJCgkkZmFyZ2VyID0gW107CgkKCWlmKHN0cmxlbigkcHJvZHVjdC0+Z2V0X2F0dHJpYnV0ZSgiYmxhY2stZmFyZyIpKSA+IDApCgkJJGZhcmdlciA9IGFycmF5X21lcmdlKCRmYXJnZXIsIGV4cGxvZGUoIiwgIiwgJHByb2R1Y3QtPmdldF9hdHRyaWJ1dGUoImJsYWNrLWZhcmciKSkpOwoJCglpZihzdHJsZW4oJHByb2R1Y3QtPmdldF9hdHRyaWJ1dGUoInRvbmVyLWZhcmciKSkgPiAwKQoJCSRmYXJnZXIgPSBhcnJheV9tZXJnZSgkZmFyZ2VyLCBleHBsb2RlKCIsICIsICRwcm9kdWN0LT5nZXRfYXR0cmlidXRlKCJ0b25lci1mYXJnIikpKTsKCQoJaWYoaXNfYXJyYXkoJGZhcmdlcikgJiYgY291bnQoJGZhcmdlcikgPiAwKQoJewoJCXByaW50ICc8ZGl2IGNsYXNzPSJyb3lhbC1wcm9kdWN0LWNhcmQtdjItaW5rLWRvdHMiPic7CgkJCgkJZm9yZWFjaCgkZmFyZ2VyIGFzICRmYXJnKQoJCXsKCQkJaWYoJGZhcmcgPT0gIk9zcGVjaWZpY2VyYXQiKQoJCQkJY29udGludWU7CgkJCQoJCQlpZihzdHJsZW4oJGZhcmcpIDwgMSkKCQkJCWNvbnRpbnVlOwoJCQkKCQkJcHJpbnQgJzxkaXYgY2xhc3M9InJveWFsLXByb2R1Y3QtY2FyZC12Mi1pbmstZG90IGluay1kb3QtJyAuIHN0cnRvbG93ZXIoJGZhcmcpIC4gJyI+PC9kaXY+JzsKCQl9CgkJCgkJcHJpbnQgJzwvZGl2Pic7Cgl9Cn0KCj8+