1688054432
waR3U4bTeM%3A8a911675b70c5c9b44750634019c3be7-16680720bcd15d063018cc7e34db0cb0
s:88768:"TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlIjoxNDp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6NTc6IkVuc3VyZXMgdGhhdCBhcnJheXMgY29uZm9ybSB0byB0aGUgYXJyYXkgY29kaW5nIHN0YW5kYXJkLiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTozOntpOjA7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcQXV0aG9yIjo0OntzOjc6IgAqAG5hbWUiO3M6NjoiYXV0aG9yIjtzOjU3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcQXV0aG9yAGF1dGhvck5hbWUiO3M6MTM6IkdyZWcgU2hlcndvb2QiO3M6NTg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xBdXRob3IAYXV0aG9yRW1haWwiO3M6MTk6ImdzaGVyd29vZEBzcXVpei5uZXQiO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtOO31pOjE7Tzo0NjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcR2VuZXJpYyI6Mjp7czo3OiIAKgBuYW1lIjtzOjk6ImNvcHlyaWdodCI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6NDQ6IjIwMDYtMjAxNSBTcXVpeiBQdHkgTHRkIChBQk4gNzcgMDg0IDY3MCA2MDApIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aToyO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXEdlbmVyaWMiOjI6e3M6NzoiACoAbmFtZSI7czo3OiJsaWNlbnNlIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czo4MDoiaHR0cHM6Ly9naXRodWIuY29tL3NxdWl6bGFicy9QSFBfQ29kZVNuaWZmZXIvYmxvYi9tYXN0ZXIvbGljZW5jZS50eHQgQlNEIExpY2VuY2UiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX19czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBjb250ZXh0IjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dCI6Mjp7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZSI7czowOiIiO3M6NTY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2VBbGlhc2VzIjthOjA6e319czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGhhc2giO3M6MzI6IjE2NjgwNzIwYmNkMTVkMDYzMDE4Y2M3ZTM0ZGIwY2IwIjtzOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAG5hbWUiO3M6MjU6IkFycmF5RGVjbGFyYXRpb25TbmlmZi5waHAiO3M6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAcGF0aCI7czo5MjoidmVuZG9yL3NxdWl6bGFicy9waHBfY29kZXNuaWZmZXIvc3JjL1N0YW5kYXJkcy9TcXVpei9TbmlmZnMvQXJyYXlzL0FycmF5RGVjbGFyYXRpb25TbmlmZi5waHAiO3M6NDE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAc291cmNlIjtzOjM5MzAxOiI8P3BocAovKioKICogRW5zdXJlcyB0aGF0IGFycmF5cyBjb25mb3JtIHRvIHRoZSBhcnJheSBjb2Rpbmcgc3RhbmRhcmQuCiAqCiAqIEBhdXRob3IgICAgR3JlZyBTaGVyd29vZCA8Z3NoZXJ3b29kQHNxdWl6Lm5ldD4KICogQGNvcHlyaWdodCAyMDA2LTIwMTUgU3F1aXogUHR5IEx0ZCAoQUJOIDc3IDA4NCA2NzAgNjAwKQogKiBAbGljZW5zZSAgIGh0dHBzOi8vZ2l0aHViLmNvbS9zcXVpemxhYnMvUEhQX0NvZGVTbmlmZmVyL2Jsb2IvbWFzdGVyL2xpY2VuY2UudHh0IEJTRCBMaWNlbmNlCiAqLwoKbmFtZXNwYWNlIFBIUF9Db2RlU25pZmZlclxTdGFuZGFyZHNcU3F1aXpcU25pZmZzXEFycmF5czsKCnVzZSBQSFBfQ29kZVNuaWZmZXJcRmlsZXNcRmlsZTsKdXNlIFBIUF9Db2RlU25pZmZlclxTbmlmZnNcU25pZmY7CnVzZSBQSFBfQ29kZVNuaWZmZXJcVXRpbFxUb2tlbnM7CgpjbGFzcyBBcnJheURlY2xhcmF0aW9uU25pZmYgaW1wbGVtZW50cyBTbmlmZgp7CgoKICAgIC8qKgogICAgICogUmV0dXJucyBhbiBhcnJheSBvZiB0b2tlbnMgdGhpcyB0ZXN0IHdhbnRzIHRvIGxpc3RlbiBmb3IuCiAgICAgKgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVnaXN0ZXIoKQogICAgewogICAgICAgIHJldHVybiBbCiAgICAgICAgICAgIFRfQVJSQVksCiAgICAgICAgICAgIFRfT1BFTl9TSE9SVF9BUlJBWSwKICAgICAgICBdOwoKICAgIH0vL2VuZCByZWdpc3RlcigpCgoKICAgIC8qKgogICAgICogUHJvY2Vzc2VzIHRoaXMgc25pZmYsIHdoZW4gb25lIG9mIGl0cyB0b2tlbnMgaXMgZW5jb3VudGVyZWQuCiAgICAgKgogICAgICogQHBhcmFtIFxQSFBfQ29kZVNuaWZmZXJcRmlsZXNcRmlsZSAkcGhwY3NGaWxlIFRoZSBjdXJyZW50IGZpbGUgYmVpbmcgY2hlY2tlZC4KICAgICAqIEBwYXJhbSBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgJHN0YWNrUHRyICBUaGUgcG9zaXRpb24gb2YgdGhlIGN1cnJlbnQgdG9rZW4gaW4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc3RhY2sgcGFzc2VkIGluICR0b2tlbnMuCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwcm9jZXNzKEZpbGUgJHBocGNzRmlsZSwgJHN0YWNrUHRyKQogICAgewogICAgICAgICR0b2tlbnMgPSAkcGhwY3NGaWxlLT5nZXRUb2tlbnMoKTsKCiAgICAgICAgaWYgKCR0b2tlbnNbJHN0YWNrUHRyXVsnY29kZSddID09PSBUX0FSUkFZKSB7CiAgICAgICAgICAgICRwaHBjc0ZpbGUtPnJlY29yZE1ldHJpYygkc3RhY2tQdHIsICdTaG9ydCBhcnJheSBzeW50YXggdXNlZCcsICdubycpOwoKICAgICAgICAgICAgLy8gQXJyYXkga2V5d29yZCBzaG91bGQgYmUgbG93ZXIgY2FzZS4KICAgICAgICAgICAgaWYgKCR0b2tlbnNbJHN0YWNrUHRyXVsnY29udGVudCddICE9PSBzdHJ0b2xvd2VyKCR0b2tlbnNbJHN0YWNrUHRyXVsnY29udGVudCddKSkgewogICAgICAgICAgICAgICAgaWYgKCR0b2tlbnNbJHN0YWNrUHRyXVsnY29udGVudCddID09PSBzdHJ0b3VwcGVyKCR0b2tlbnNbJHN0YWNrUHRyXVsnY29udGVudCddKSkgewogICAgICAgICAgICAgICAgICAgICRwaHBjc0ZpbGUtPnJlY29yZE1ldHJpYygkc3RhY2tQdHIsICdBcnJheSBrZXl3b3JkIGNhc2UnLCAndXBwZXInKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJHBocGNzRmlsZS0+cmVjb3JkTWV0cmljKCRzdGFja1B0ciwgJ0FycmF5IGtleXdvcmQgY2FzZScsICdtaXhlZCcpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRlcnJvciA9ICdBcnJheSBrZXl3b3JkIHNob3VsZCBiZSBsb3dlciBjYXNlOyBleHBlY3RlZCAiYXJyYXkiIGJ1dCBmb3VuZCAiJXMiJzsKICAgICAgICAgICAgICAgICRkYXRhICA9IFskdG9rZW5zWyRzdGFja1B0cl1bJ2NvbnRlbnQnXV07CiAgICAgICAgICAgICAgICAkZml4ICAgPSAkcGhwY3NGaWxlLT5hZGRGaXhhYmxlRXJyb3IoJGVycm9yLCAkc3RhY2tQdHIsICdOb3RMb3dlckNhc2UnLCAkZGF0YSk7CiAgICAgICAgICAgICAgICBpZiAoJGZpeCA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICRwaHBjc0ZpbGUtPmZpeGVyLT5yZXBsYWNlVG9rZW4oJHN0YWNrUHRyLCAnYXJyYXknKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRwaHBjc0ZpbGUtPnJlY29yZE1ldHJpYygkc3RhY2tQdHIsICdBcnJheSBrZXl3b3JkIGNhc2UnLCAnbG93ZXInKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJGFycmF5U3RhcnQgPSAkdG9rZW5zWyRzdGFja1B0cl1bJ3BhcmVudGhlc2lzX29wZW5lciddOwogICAgICAgICAgICBpZiAoaXNzZXQoJHRva2Vuc1skYXJyYXlTdGFydF1bJ3BhcmVudGhlc2lzX2Nsb3NlciddKSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJGFycmF5RW5kID0gJHRva2Vuc1skYXJyYXlTdGFydF1bJ3BhcmVudGhlc2lzX2Nsb3NlciddOwoKICAgICAgICAgICAgaWYgKCRhcnJheVN0YXJ0ICE9PSAoJHN0YWNrUHRyICsgMSkpIHsKICAgICAgICAgICAgICAgICRlcnJvciA9ICdUaGVyZSBtdXN0IGJlIG5vIHNwYWNlIGJldHdlZW4gdGhlICJhcnJheSIga2V5d29yZCBhbmQgdGhlIG9wZW5pbmcgcGFyZW50aGVzaXMnOwoKICAgICAgICAgICAgICAgICRuZXh0ID0gJHBocGNzRmlsZS0+ZmluZE5leHQoVF9XSElURVNQQUNFLCAoJHN0YWNrUHRyICsgMSksICRhcnJheVN0YXJ0LCB0cnVlKTsKICAgICAgICAgICAgICAgIGlmIChpc3NldChUb2tlbnM6OiRjb21tZW50VG9rZW5zWyR0b2tlbnNbJG5leHRdWydjb2RlJ11dKSA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IGhhdmUgYW55d2hlcmUgdG8gcHV0IHRoZSBjb21tZW50LCBzbyBkb24ndCBhdHRlbXB0IHRvIGZpeCBpdC4KICAgICAgICAgICAgICAgICAgICAkcGhwY3NGaWxlLT5hZGRFcnJvcigkZXJyb3IsICRzdGFja1B0ciwgJ1NwYWNlQWZ0ZXJLZXl3b3JkJyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICRmaXggPSAkcGhwY3NGaWxlLT5hZGRGaXhhYmxlRXJyb3IoJGVycm9yLCAkc3RhY2tQdHIsICdTcGFjZUFmdGVyS2V5d29yZCcpOwogICAgICAgICAgICAgICAgICAgIGlmICgkZml4ID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRwaHBjc0ZpbGUtPmZpeGVyLT5iZWdpbkNoYW5nZXNldCgpOwogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCRpID0gKCRzdGFja1B0ciArIDEpOyAkaSA8ICRhcnJheVN0YXJ0OyAkaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGhwY3NGaWxlLT5maXhlci0+cmVwbGFjZVRva2VuKCRpLCAnJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICRwaHBjc0ZpbGUtPmZpeGVyLT5lbmRDaGFuZ2VzZXQoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkcGhwY3NGaWxlLT5yZWNvcmRNZXRyaWMoJHN0YWNrUHRyLCAnU2hvcnQgYXJyYXkgc3ludGF4IHVzZWQnLCAneWVzJyk7CiAgICAgICAgICAgICRhcnJheVN0YXJ0ID0gJHN0YWNrUHRyOwogICAgICAgICAgICAkYXJyYXlFbmQgICA9ICR0b2tlbnNbJHN0YWNrUHRyXVsnYnJhY2tldF9jbG9zZXInXTsKICAgICAgICB9Ly9lbmQgaWYKCiAgICAgICAgLy8gQ2hlY2sgZm9yIGVtcHR5IGFycmF5cy4KICAgICAgICAkY29udGVudCA9ICRwaHBjc0ZpbGUtPmZpbmROZXh0KFRfV0hJVEVTUEFDRSwgKCRhcnJheVN0YXJ0ICsgMSksICgkYXJyYXlFbmQgKyAxKSwgdHJ1ZSk7CiAgICAgICAgaWYgKCRjb250ZW50ID09PSAkYXJyYXlFbmQpIHsKICAgICAgICAgICAgLy8gRW1wdHkgYXJyYXksIGJ1dCBpZiB0aGUgYnJhY2tldHMgYXJlbid0IHRvZ2V0aGVyLCB0aGVyZSdzIGEgcHJvYmxlbS4KICAgICAgICAgICAgaWYgKCgkYXJyYXlFbmQgLSAkYXJyYXlTdGFydCkgIT09IDEpIHsKICAgICAgICAgICAgICAgICRlcnJvciA9ICdFbXB0eSBhcnJheSBkZWNsYXJhdGlvbiBtdXN0IGhhdmUgbm8gc3BhY2UgYmV0d2VlbiB0aGUgcGFyZW50aGVzZXMnOwogICAgICAgICAgICAgICAgJGZpeCAgID0gJHBocGNzRmlsZS0+YWRkRml4YWJsZUVycm9yKCRlcnJvciwgJHN0YWNrUHRyLCAnU3BhY2VJbkVtcHR5QXJyYXknKTsKCiAgICAgICAgICAgICAgICBpZiAoJGZpeCA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICRwaHBjc0ZpbGUtPmZpeGVyLT5iZWdpbkNoYW5nZXNldCgpOwogICAgICAgICAgICAgICAgICAgIGZvciAoJGkgPSAoJGFycmF5U3RhcnQgKyAxKTsgJGkgPCAkYXJyYXlFbmQ7ICRpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHBocGNzRmlsZS0+Zml4ZXItPnJlcGxhY2VUb2tlbigkaSwgJycpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgJHBocGNzRmlsZS0+Zml4ZXItPmVuZENoYW5nZXNldCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBXZSBjYW4gcmV0dXJuIGhlcmUgYmVjYXVzZSB0aGVyZSBpcyBub3RoaW5nIGVsc2UgdG8gY2hlY2suIEFsbCBjb2RlCiAgICAgICAgICAgIC8vIGJlbG93IGNhbiBhc3N1bWUgdGhhdCB0aGUgYXJyYXkgaXMgbm90IGVtcHR5LgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBpZiAoJHRva2Vuc1skYXJyYXlTdGFydF1bJ2xpbmUnXSA9PT0gJHRva2Vuc1skYXJyYXlFbmRdWydsaW5lJ10pIHsKICAgICAgICAgICAgJHRoaXMtPnByb2Nlc3NTaW5nbGVMaW5lQXJyYXkoJHBocGNzRmlsZSwgJHN0YWNrUHRyLCAkYXJyYXlTdGFydCwgJGFycmF5RW5kKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkdGhpcy0+cHJvY2Vzc011bHRpTGluZUFycmF5KCRwaHBjc0ZpbGUsICRzdGFja1B0ciwgJGFycmF5U3RhcnQsICRhcnJheUVuZCk7CiAgICAgICAgfQoKICAgIH0vL2VuZCBwcm9jZXNzKCkKCgogICAgLyoqCiAgICAgKiBQcm9jZXNzZXMgYSBzaW5nbGUtbGluZSBhcnJheSBkZWZpbml0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSBcUEhQX0NvZGVTbmlmZmVyXEZpbGVzXEZpbGUgJHBocGNzRmlsZSAgVGhlIGN1cnJlbnQgZmlsZSBiZWluZyBjaGVja2VkLgogICAgICogQHBhcmFtIGludCAgICAgICAgICAgICAgICAgICAgICAgICAkc3RhY2tQdHIgICBUaGUgcG9zaXRpb24gb2YgdGhlIGN1cnJlbnQgdG9rZW4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIHN0YWNrIHBhc3NlZCBpbiAkdG9rZW5zLgogICAgICogQHBhcmFtIGludCAgICAgICAgICAgICAgICAgICAgICAgICAkYXJyYXlTdGFydCBUaGUgdG9rZW4gdGhhdCBzdGFydHMgdGhlIGFycmF5IGRlZmluaXRpb24uCiAgICAgKiBAcGFyYW0gaW50ICAgICAgICAgICAgICAgICAgICAgICAgICRhcnJheUVuZCAgIFRoZSB0b2tlbiB0aGF0IGVuZHMgdGhlIGFycmF5IGRlZmluaXRpb24uCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwcm9jZXNzU2luZ2xlTGluZUFycmF5KCRwaHBjc0ZpbGUsICRzdGFja1B0ciwgJGFycmF5U3RhcnQsICRhcnJheUVuZCkKICAgIHsKICAgICAgICAkdG9rZW5zID0gJHBocGNzRmlsZS0+Z2V0VG9rZW5zKCk7CgogICAgICAgIC8vIENoZWNrIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSB2YWx1ZXMuIElmIHNvLCB0aGVuIGl0IGhhcyB0byBiZSBtdWx0aXBsZSBsaW5lcwogICAgICAgIC8vIHVubGVzcyBpdCBpcyBjb250YWluZWQgaW5zaWRlIGEgZnVuY3Rpb24gY2FsbCBvciBjb25kaXRpb24uCiAgICAgICAgJHZhbHVlQ291bnQgPSAwOwogICAgICAgICRjb21tYXMgICAgID0gW107CiAgICAgICAgZm9yICgkaSA9ICgkYXJyYXlTdGFydCArIDEpOyAkaSA8ICRhcnJheUVuZDsgJGkrKykgewogICAgICAgICAgICAvLyBTa2lwIGJyYWNrZXRlZCBzdGF0ZW1lbnRzLCBsaWtlIGZ1bmN0aW9uIGNhbGxzLgogICAgICAgICAgICBpZiAoJHRva2Vuc1skaV1bJ2NvZGUnXSA9PT0gVF9PUEVOX1BBUkVOVEhFU0lTKSB7CiAgICAgICAgICAgICAgICAkaSA9ICR0b2tlbnNbJGldWydwYXJlbnRoZXNpc19jbG9zZXInXTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoJHRva2Vuc1skaV1bJ2NvZGUnXSA9PT0gVF9DT01NQSkgewogICAgICAgICAgICAgICAgLy8gQmVmb3JlIGNvdW50aW5nIHRoaXMgY29tbWEsIG1ha2Ugc3VyZSB3ZSBhcmUgbm90CiAgICAgICAgICAgICAgICAvLyBhdCB0aGUgZW5kIG9mIHRoZSBhcnJheS4KICAgICAgICAgICAgICAgICRuZXh0ID0gJHBocGNzRmlsZS0+ZmluZE5leHQoVF9XSElURVNQQUNFLCAoJGkgKyAxKSwgJGFycmF5RW5kLCB0cnVlKTsKICAgICAgICAgICAgICAgIGlmICgkbmV4dCAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICAkdmFsdWVDb3VudCsrOwogICAgICAgICAgICAgICAgICAgICRjb21tYXNbXSA9ICRpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvLyBUaGVyZSBpcyBhIGNvbW1hIGF0IHRoZSBlbmQgb2YgYSBzaW5nbGUgbGluZSBhcnJheS4KICAgICAgICAgICAgICAgICAgICAkZXJyb3IgPSAnQ29tbWEgbm90IGFsbG93ZWQgYWZ0ZXIgbGFzdCB2YWx1ZSBpbiBzaW5nbGUtbGluZSBhcnJheSBkZWNsYXJhdGlvbic7CiAgICAgICAgICAgICAgICAgICAgJGZpeCAgID0gJHBocGNzRmlsZS0+YWRkRml4YWJsZUVycm9yKCRlcnJvciwgJGksICdDb21tYUFmdGVyTGFzdCcpOwogICAgICAgICAgICAgICAgICAgIGlmICgkZml4ID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRwaHBjc0ZpbGUtPmZpeGVyLT5yZXBsYWNlVG9rZW4oJGksICcnKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9Ly9lbmQgZm9yCgogICAgICAgIC8vIE5vdyBjaGVjayBlYWNoIG9mIHRoZSBkb3VibGUgYXJyb3dzIChpZiBhbnkpLgogICAgICAgICRuZXh0QXJyb3cgPSAkYXJyYXlTdGFydDsKICAgICAgICB3aGlsZSAoKCRuZXh0QXJyb3cgPSAkcGhwY3NGaWxlLT5maW5kTmV4dChUX0RPVUJMRV9BUlJPVywgKCRuZXh0QXJyb3cgKyAxKSwgJGFycmF5RW5kKSkgIT09IGZhbHNlKSB7CiAgICAgICAgICAgIGlmICgkdG9rZW5zWygkbmV4dEFycm93IC0gMSldWydjb2RlJ10gIT09IFRfV0hJVEVTUEFDRSkgewogICAgICAgICAgICAgICAgJGNvbnRlbnQgPSAkdG9rZW5zWygkbmV4dEFycm93IC0gMSldWydjb250ZW50J107CiAgICAgICAgICAgICAgICAkZXJyb3IgICA9ICdFeHBlY3RlZCAxIHNwYWNlIGJldHdlZW4gIiVzIiBhbmQgZG91YmxlIGFycm93OyAwIGZvdW5kJzsKICAgICAgICAgICAgICAgICRkYXRhICAgID0gWyRjb250ZW50XTsKICAgICAgICAgICAgICAgICRmaXggICAgID0gJHBocGNzRmlsZS0+YWRkRml4YWJsZUVycm9yKCRlcnJvciwgJG5leHRBcnJvdywgJ05vU3BhY2VCZWZvcmVEb3VibGVBcnJvdycsICRkYXRhKTsKICAgICAgICAgICAgICAgIGlmICgkZml4ID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgJHBocGNzRmlsZS0+Zml4ZXItPmFkZENvbnRlbnRCZWZvcmUoJG5leHRBcnJvdywgJyAnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRzcGFjZUxlbmd0aCA9ICR0b2tlbnNbKCRuZXh0QXJyb3cgLSAxKV1bJ2xlbmd0aCddOwogICAgICAgICAgICAgICAgaWYgKCRzcGFjZUxlbmd0aCAhPT0gMSkgewogICAgICAgICAgICAgICAgICAgICRjb250ZW50ID0gJHRva2Vuc1soJG5leHRBcnJvdyAtIDIpXVsnY29udGVudCddOwogICAgICAgICAgICAgICAgICAgICRlcnJvciAgID0gJ0V4cGVjdGVkIDEgc3BhY2UgYmV0d2VlbiAiJXMiIGFuZCBkb3VibGUgYXJyb3c7ICVzIGZvdW5kJzsKICAgICAgICAgICAgICAgICAgICAkZGF0YSAgICA9IFsKICAgICAgICAgICAgICAgICAgICAgICAgJGNvbnRlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICRzcGFjZUxlbmd0aCwKICAgICAgICAgICAgICAgICAgICBdOwoKICAgICAgICAgICAgICAgICAgICAkZml4ID0gJHBocGNzRmlsZS0+YWRkRml4YWJsZUVycm9yKCRlcnJvciwgJG5leHRBcnJvdywgJ1NwYWNlQmVmb3JlRG91YmxlQXJyb3cnLCAkZGF0YSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRmaXggPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHBocGNzRmlsZS0+Zml4ZXItPnJlcGxhY2VUb2tlbigoJG5leHRBcnJvdyAtIDEpLCAnICcpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfS8vZW5kIGlmCgogICAgICAgICAgICBpZiAoJHRva2Vuc1soJG5leHRBcnJvdyArIDEpXVsnY29kZSddICE9PSBUX1dISVRFU1BBQ0UpIHsKICAgICAgICAgICAgICAgICRjb250ZW50ID0gJHRva2Vuc1soJG5leHRBcnJvdyArIDEpXVsnY29udGVudCddOwogICAgICAgICAgICAgICAgJGVycm9yICAgPSAnRXhwZWN0ZWQgMSBzcGFjZSBiZXR3ZWVuIGRvdWJsZSBhcnJvdyBhbmQgIiVzIjsgMCBmb3VuZCc7CiAgICAgICAgICAgICAgICAkZGF0YSAgICA9IFskY29udGVudF07CiAgICAgICAgICAgICAgICAkZml4ICAgICA9ICRwaHBjc0ZpbGUtPmFkZEZpeGFibGVFcnJvcigkZXJyb3IsICRuZXh0QXJyb3csICdOb1NwYWNlQWZ0ZXJEb3VibGVBcnJvdycsICRkYXRhKTsKICAgICAgICAgICAgICAgIGlmICgkZml4ID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgJHBocGNzRmlsZS0+Zml4ZXItPmFkZENvbnRlbnQoJG5leHRBcnJvdywgJyAnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRzcGFjZUxlbmd0aCA9ICR0b2tlbnNbKCRuZXh0QXJyb3cgKyAxKV1bJ2xlbmd0aCddOwogICAgICAgICAgICAgICAgaWYgKCRzcGFjZUxlbmd0aCAhPT0gMSkgewogICAgICAgICAgICAgICAgICAgICRjb250ZW50ID0gJHRva2Vuc1soJG5leHRBcnJvdyArIDIpXVsnY29udGVudCddOwogICAgICAgICAgICAgICAgICAgICRlcnJvciAgID0gJ0V4cGVjdGVkIDEgc3BhY2UgYmV0d2VlbiBkb3VibGUgYXJyb3cgYW5kICIlcyI7ICVzIGZvdW5kJzsKICAgICAgICAgICAgICAgICAgICAkZGF0YSAgICA9IFsKICAgICAgICAgICAgICAgICAgICAgICAgJGNvbnRlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICRzcGFjZUxlbmd0aCwKICAgICAgICAgICAgICAgICAgICBdOwoKICAgICAgICAgICAgICAgICAgICAkZml4ID0gJHBocGNzRmlsZS0+YWRkRml4YWJsZUVycm9yKCRlcnJvciwgJG5leHRBcnJvdywgJ1NwYWNlQWZ0ZXJEb3VibGVBcnJvdycsICRkYXRhKTsKICAgICAgICAgICAgICAgICAgICBpZiAoJGZpeCA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAkcGhwY3NGaWxlLT5maXhlci0+cmVwbGFjZVRva2VuKCgkbmV4dEFycm93ICsgMSksICcgJyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9Ly9lbmQgaWYKICAgICAgICB9Ly9lbmQgd2hpbGUKCiAgICAgICAgaWYgKCR2YWx1ZUNvdW50ID4gMCkgewogICAgICAgICAgICAkbmVzdGVkUGFyZW50aGVzaXMgPSBmYWxzZTsKICAgICAgICAgICAgaWYgKGlzc2V0KCR0b2tlbnNbJHN0YWNrUHRyXVsnbmVzdGVkX3BhcmVudGhlc2lzJ10pID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAkbmVzdGVkICAgICAgICAgICAgPSAkdG9rZW5zWyRzdGFja1B0cl1bJ25lc3RlZF9wYXJlbnRoZXNpcyddOwogICAgICAgICAgICAgICAgJG5lc3RlZFBhcmVudGhlc2lzID0gYXJyYXlfcG9wKCRuZXN0ZWQpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoJG5lc3RlZFBhcmVudGhlc2lzID09PSBmYWxzZQogICAgICAgICAgICAgICAgfHwgJHRva2Vuc1skbmVzdGVkUGFyZW50aGVzaXNdWydsaW5lJ10gIT09ICR0b2tlbnNbJHN0YWNrUHRyXVsnbGluZSddCiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgJGVycm9yID0gJ0FycmF5IHdpdGggbXVsdGlwbGUgdmFsdWVzIGNhbm5vdCBiZSBkZWNsYXJlZCBvbiBhIHNpbmdsZSBsaW5lJzsKICAgICAgICAgICAgICAgICRmaXggICA9ICRwaHBjc0ZpbGUtPmFkZEZpeGFibGVFcnJvcigkZXJyb3IsICRzdGFja1B0ciwgJ1NpbmdsZUxpbmVOb3RBbGxvd2VkJyk7CiAgICAgICAgICAgICAgICBpZiAoJGZpeCA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICRwaHBjc0ZpbGUtPmZpeGVyLT5iZWdpbkNoYW5nZXNldCgpOwogICAgICAgICAgICAgICAgICAgICRwaHBjc0ZpbGUtPmZpeGVyLT5hZGROZXdsaW5lKCRhcnJheVN0YXJ0KTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCR0b2tlbnNbKCRhcnJheUVuZCAtIDEpXVsnY29kZSddID09PSBUX1dISVRFU1BBQ0UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHBocGNzRmlsZS0+Zml4ZXItPnJlcGxhY2VUb2tlbigoJGFycmF5RW5kIC0gMSksICRwaHBjc0ZpbGUtPmVvbENoYXIpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRwaHBjc0ZpbGUtPmZpeGVyLT5hZGROZXdsaW5lQmVmb3JlKCRhcnJheUVuZCk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAkcGhwY3NGaWxlLT5maXhlci0+ZW5kQ2hhbmdlc2V0KCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBXZSBoYXZlIGEgbXVsdGlwbGUgdmFsdWUgYXJyYXkgdGhhdCBpcyBpbnNpZGUgYSBjb25kaXRpb24gb3IKICAgICAgICAgICAgLy8gZnVuY3Rpb24uIENoZWNrIGl0cyBzcGFjaW5nIGlzIGNvcnJlY3QuCiAgICAgICAgICAgIGZvcmVhY2ggKCRjb21tYXMgYXMgJGNvbW1hKSB7CiAgICAgICAgICAgICAgICBpZiAoJHRva2Vuc1soJGNvbW1hICsgMSldWydjb2RlJ10gIT09IFRfV0hJVEVTUEFDRSkgewogICAgICAgICAgICAgICAgICAgICRjb250ZW50ID0gJHRva2Vuc1soJGNvbW1hICsgMSldWydjb250ZW50J107CiAgICAgICAgICAgICAgICAgICAgJGVycm9yICAgPSAnRXhwZWN0ZWQgMSBzcGFjZSBiZXR3ZWVuIGNvbW1hIGFuZCAiJXMiOyAwIGZvdW5kJzsKICAgICAgICAgICAgICAgICAgICAkZGF0YSAgICA9IFskY29udGVudF07CiAgICAgICAgICAgICAgICAgICAgJGZpeCAgICAgPSAkcGhwY3NGaWxlLT5hZGRGaXhhYmxlRXJyb3IoJGVycm9yLCAkY29tbWEsICdOb1NwYWNlQWZ0ZXJDb21tYScsICRkYXRhKTsKICAgICAgICAgICAgICAgICAgICBpZiAoJGZpeCA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAkcGhwY3NGaWxlLT5maXhlci0+YWRkQ29udGVudCgkY29tbWEsICcgJyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkc3BhY2VMZW5ndGggPSAkdG9rZW5zWygkY29tbWEgKyAxKV1bJ2xlbmd0aCddOwogICAgICAgICAgICAgICAgICAgIGlmICgkc3BhY2VMZW5ndGggIT09IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGNvbnRlbnQgPSAkdG9rZW5zWygkY29tbWEgKyAyKV1bJ2NvbnRlbnQnXTsKICAgICAgICAgICAgICAgICAgICAgICAgJGVycm9yICAgPSAnRXhwZWN0ZWQgMSBzcGFjZSBiZXR3ZWVuIGNvbW1hIGFuZCAiJXMiOyAlcyBmb3VuZCc7CiAgICAgICAgICAgICAgICAgICAgICAgICRkYXRhICAgID0gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNvbnRlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3BhY2VMZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgIF07CgogICAgICAgICAgICAgICAgICAgICAgICAkZml4ID0gJHBocGNzRmlsZS0+YWRkRml4YWJsZUVycm9yKCRlcnJvciwgJGNvbW1hLCAnU3BhY2VBZnRlckNvbW1hJywgJGRhdGEpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGZpeCA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBocGNzRmlsZS0+Zml4ZXItPnJlcGxhY2VUb2tlbigoJGNvbW1hICsgMSksICcgJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9Ly9lbmQgaWYKCiAgICAgICAgICAgICAgICBpZiAoJHRva2Vuc1soJGNvbW1hIC0gMSldWydjb2RlJ10gPT09IFRfV0hJVEVTUEFDRSkgewogICAgICAgICAgICAgICAgICAgICRjb250ZW50ICAgICA9ICR0b2tlbnNbKCRjb21tYSAtIDIpXVsnY29udGVudCddOwogICAgICAgICAgICAgICAgICAgICRzcGFjZUxlbmd0aCA9ICR0b2tlbnNbKCRjb21tYSAtIDEpXVsnbGVuZ3RoJ107CiAgICAgICAgICAgICAgICAgICAgJGVycm9yICAgICAgID0gJ0V4cGVjdGVkIDAgc3BhY2VzIGJldHdlZW4gIiVzIiBhbmQgY29tbWE7ICVzIGZvdW5kJzsKICAgICAgICAgICAgICAgICAgICAkZGF0YSAgICAgICAgPSBbCiAgICAgICAgICAgICAgICAgICAgICAgICRjb250ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAkc3BhY2VMZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgXTsKCiAgICAgICAgICAgICAgICAgICAgJGZpeCA9ICRwaHBjc0ZpbGUtPmFkZEZpeGFibGVFcnJvcigkZXJyb3IsICRjb21tYSwgJ1NwYWNlQmVmb3JlQ29tbWEnLCAkZGF0YSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRmaXggPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHBocGNzRmlsZS0+Zml4ZXItPnJlcGxhY2VUb2tlbigoJGNvbW1hIC0gMSksICcnKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0vL2VuZCBmb3JlYWNoCiAgICAgICAgfS8vZW5kIGlmCgogICAgfS8vZW5kIHByb2Nlc3NTaW5nbGVMaW5lQXJyYXkoKQoKCiAgICAvKioKICAgICAqIFByb2Nlc3NlcyBhIG11bHRpLWxpbmUgYXJyYXkgZGVmaW5pdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gXFBIUF9Db2RlU25pZmZlclxGaWxlc1xGaWxlICRwaHBjc0ZpbGUgIFRoZSBjdXJyZW50IGZpbGUgYmVpbmcgY2hlY2tlZC4KICAgICAqIEBwYXJhbSBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgJHN0YWNrUHRyICAgVGhlIHBvc2l0aW9uIG9mIHRoZSBjdXJyZW50IHRva2VuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBzdGFjayBwYXNzZWQgaW4gJHRva2Vucy4KICAgICAqIEBwYXJhbSBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgJGFycmF5U3RhcnQgVGhlIHRva2VuIHRoYXQgc3RhcnRzIHRoZSBhcnJheSBkZWZpbml0aW9uLgogICAgICogQHBhcmFtIGludCAgICAgICAgICAgICAgICAgICAgICAgICAkYXJyYXlFbmQgICBUaGUgdG9rZW4gdGhhdCBlbmRzIHRoZSBhcnJheSBkZWZpbml0aW9uLgogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcHJvY2Vzc011bHRpTGluZUFycmF5KCRwaHBjc0ZpbGUsICRzdGFja1B0ciwgJGFycmF5U3RhcnQsICRhcnJheUVuZCkKICAgIHsKICAgICAgICAkdG9rZW5zICAgICAgID0gJHBocGNzRmlsZS0+Z2V0VG9rZW5zKCk7CiAgICAgICAgJGtleXdvcmRTdGFydCA9ICR0b2tlbnNbJHN0YWNrUHRyXVsnY29sdW1uJ107CgogICAgICAgIC8vIENoZWNrIHRoZSBjbG9zaW5nIGJyYWNrZXQgaXMgb24gYSBuZXcgbGluZS4KICAgICAgICAkbGFzdENvbnRlbnQgPSAkcGhwY3NGaWxlLT5maW5kUHJldmlvdXMoVF9XSElURVNQQUNFLCAoJGFycmF5RW5kIC0gMSksICRhcnJheVN0YXJ0LCB0cnVlKTsKICAgICAgICBpZiAoJHRva2Vuc1skbGFzdENvbnRlbnRdWydsaW5lJ10gPT09ICR0b2tlbnNbJGFycmF5RW5kXVsnbGluZSddKSB7CiAgICAgICAgICAgICRlcnJvciA9ICdDbG9zaW5nIHBhcmVudGhlc2lzIG9mIGFycmF5IGRlY2xhcmF0aW9uIG11c3QgYmUgb24gYSBuZXcgbGluZSc7CiAgICAgICAgICAgICRmaXggICA9ICRwaHBjc0ZpbGUtPmFkZEZpeGFibGVFcnJvcigkZXJyb3IsICRhcnJheUVuZCwgJ0Nsb3NlQnJhY2VOZXdMaW5lJyk7CiAgICAgICAgICAgIGlmICgkZml4ID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAkcGhwY3NGaWxlLT5maXhlci0+YWRkTmV3bGluZUJlZm9yZSgkYXJyYXlFbmQpOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmICgkdG9rZW5zWyRhcnJheUVuZF1bJ2NvbHVtbiddICE9PSAka2V5d29yZFN0YXJ0KSB7CiAgICAgICAgICAgIC8vIENoZWNrIHRoZSBjbG9zaW5nIGJyYWNrZXQgaXMgbGluZWQgdXAgdW5kZXIgdGhlICJhIiBpbiBhcnJheS4KICAgICAgICAgICAgJGV4cGVjdGVkID0gKCRrZXl3b3JkU3RhcnQgLSAxKTsKICAgICAgICAgICAgJGZvdW5kICAgID0gKCR0b2tlbnNbJGFycmF5RW5kXVsnY29sdW1uJ10gLSAxKTsKICAgICAgICAgICAgJGVycm9yICAgID0gJ0Nsb3NpbmcgcGFyZW50aGVzaXMgbm90IGFsaWduZWQgY29ycmVjdGx5OyBleHBlY3RlZCAlcyBzcGFjZShzKSBidXQgZm91bmQgJXMnOwogICAgICAgICAgICAkZGF0YSAgICAgPSBbCiAgICAgICAgICAgICAgICAkZXhwZWN0ZWQsCiAgICAgICAgICAgICAgICAkZm91bmQsCiAgICAgICAgICAgIF07CgogICAgICAgICAgICAkZml4ID0gJHBocGNzRmlsZS0+YWRkRml4YWJsZUVycm9yKCRlcnJvciwgJGFycmF5RW5kLCAnQ2xvc2VCcmFjZU5vdEFsaWduZWQnLCAkZGF0YSk7CiAgICAgICAgICAgIGlmICgkZml4ID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICBpZiAoJGZvdW5kID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgJHBocGNzRmlsZS0+Zml4ZXItPmFkZENvbnRlbnQoKCRhcnJheUVuZCAtIDEpLCBzdHJfcmVwZWF0KCcgJywgJGV4cGVjdGVkKSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICRwaHBjc0ZpbGUtPmZpeGVyLT5yZXBsYWNlVG9rZW4oKCRhcnJheUVuZCAtIDEpLCBzdHJfcmVwZWF0KCcgJywgJGV4cGVjdGVkKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9Ly9lbmQgaWYKCiAgICAgICAgJGtleVVzZWQgICAgPSBmYWxzZTsKICAgICAgICAkc2luZ2xlVXNlZCA9IGZhbHNlOwogICAgICAgICRpbmRpY2VzICAgID0gW107CiAgICAgICAgJG1heExlbmd0aCAgPSAwOwoKICAgICAgICBpZiAoJHRva2Vuc1skc3RhY2tQdHJdWydjb2RlJ10gPT09IFRfQVJSQVkpIHsKICAgICAgICAgICAgJGxhc3RUb2tlbiA9ICR0b2tlbnNbJHN0YWNrUHRyXVsncGFyZW50aGVzaXNfb3BlbmVyJ107CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGxhc3RUb2tlbiA9ICRzdGFja1B0cjsKICAgICAgICB9CgogICAgICAgIC8vIEZpbmQgYWxsIHRoZSBkb3VibGUgYXJyb3dzIHRoYXQgcmVzaWRlIGluIHRoaXMgc2NvcGUuCiAgICAgICAgZm9yICgkbmV4dFRva2VuID0gKCRzdGFja1B0ciArIDEpOyAkbmV4dFRva2VuIDwgJGFycmF5RW5kOyAkbmV4dFRva2VuKyspIHsKICAgICAgICAgICAgLy8gU2tpcCBicmFja2V0ZWQgc3RhdGVtZW50cywgbGlrZSBmdW5jdGlvbiBjYWxscy4KICAgICAgICAgICAgaWYgKCR0b2tlbnNbJG5leHRUb2tlbl1bJ2NvZGUnXSA9PT0gVF9PUEVOX1BBUkVOVEhFU0lTCiAgICAgICAgICAgICAgICAmJiAoaXNzZXQoJHRva2Vuc1skbmV4dFRva2VuXVsncGFyZW50aGVzaXNfb3duZXInXSkgPT09IGZhbHNlCiAgICAgICAgICAgICAgICB8fCAkdG9rZW5zWyRuZXh0VG9rZW5dWydwYXJlbnRoZXNpc19vd25lciddICE9PSAkc3RhY2tQdHIpCiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgJG5leHRUb2tlbiA9ICR0b2tlbnNbJG5leHRUb2tlbl1bJ3BhcmVudGhlc2lzX2Nsb3NlciddOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgkdG9rZW5zWyRuZXh0VG9rZW5dWydjb2RlJ10gPT09IFRfQVJSQVkKICAgICAgICAgICAgICAgIHx8ICR0b2tlbnNbJG5leHRUb2tlbl1bJ2NvZGUnXSA9PT0gVF9PUEVOX1NIT1JUX0FSUkFZCiAgICAgICAgICAgICAgICB8fCAkdG9rZW5zWyRuZXh0VG9rZW5dWydjb2RlJ10gPT09IFRfQ0xPU1VSRQogICAgICAgICAgICAgICAgfHwgJHRva2Vuc1skbmV4dFRva2VuXVsnY29kZSddID09PSBUX0ZOCiAgICAgICAgICAgICAgICB8fCAkdG9rZW5zWyRuZXh0VG9rZW5dWydjb2RlJ10gPT09IFRfTUFUQ0gKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAvLyBMZXQgc3Vic2VxdWVudCBjYWxscyBvZiB0aGlzIHRlc3QgaGFuZGxlIG5lc3RlZCBhcnJheXMuCiAgICAgICAgICAgICAgICBpZiAoJHRva2Vuc1skbGFzdFRva2VuXVsnY29kZSddICE9PSBUX0RPVUJMRV9BUlJPVykgewogICAgICAgICAgICAgICAgICAgICRpbmRpY2VzW10gPSBbJ3ZhbHVlJyA9PiAkbmV4dFRva2VuXTsKICAgICAgICAgICAgICAgICAgICAkbGFzdFRva2VuID0gJG5leHRUb2tlbjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoJHRva2Vuc1skbmV4dFRva2VuXVsnY29kZSddID09PSBUX0FSUkFZKSB7CiAgICAgICAgICAgICAgICAgICAgJG5leHRUb2tlbiA9ICR0b2tlbnNbJHRva2Vuc1skbmV4dFRva2VuXVsncGFyZW50aGVzaXNfb3BlbmVyJ11dWydwYXJlbnRoZXNpc19jbG9zZXInXTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoJHRva2Vuc1skbmV4dFRva2VuXVsnY29kZSddID09PSBUX09QRU5fU0hPUlRfQVJSQVkpIHsKICAgICAgICAgICAgICAgICAgICAkbmV4dFRva2VuID0gJHRva2Vuc1skbmV4dFRva2VuXVsnYnJhY2tldF9jbG9zZXInXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgLy8gVF9DTE9TVVJFLgogICAgICAgICAgICAgICAgICAgICRuZXh0VG9rZW4gPSAkdG9rZW5zWyRuZXh0VG9rZW5dWydzY29wZV9jbG9zZXInXTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkbmV4dFRva2VuID0gJHBocGNzRmlsZS0+ZmluZE5leHQoVF9XSElURVNQQUNFLCAoJG5leHRUb2tlbiArIDEpLCBudWxsLCB0cnVlKTsKICAgICAgICAgICAgICAgIGlmICgkdG9rZW5zWyRuZXh0VG9rZW5dWydjb2RlJ10gIT09IFRfQ09NTUEpIHsKICAgICAgICAgICAgICAgICAgICAkbmV4dFRva2VuLS07CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICRsYXN0VG9rZW4gPSAkbmV4dFRva2VuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9Ly9lbmQgaWYKCiAgICAgICAgICAgIGlmICgkdG9rZW5zWyRuZXh0VG9rZW5dWydjb2RlJ10gIT09IFRfRE9VQkxFX0FSUk9XICYmICR0b2tlbnNbJG5leHRUb2tlbl1bJ2NvZGUnXSAhPT0gVF9DT01NQSkgewogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRjdXJyZW50RW50cnkgPSBbXTsKCiAgICAgICAgICAgIGlmICgkdG9rZW5zWyRuZXh0VG9rZW5dWydjb2RlJ10gPT09IFRfQ09NTUEpIHsKICAgICAgICAgICAgICAgICRzdGFja1B0ckNvdW50ID0gMDsKICAgICAgICAgICAgICAgIGlmIChpc3NldCgkdG9rZW5zWyRzdGFja1B0cl1bJ25lc3RlZF9wYXJlbnRoZXNpcyddKSA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICRzdGFja1B0ckNvdW50ID0gY291bnQoJHRva2Vuc1skc3RhY2tQdHJdWyduZXN0ZWRfcGFyZW50aGVzaXMnXSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJGNvbW1hQ291bnQgPSAwOwogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCR0b2tlbnNbJG5leHRUb2tlbl1bJ25lc3RlZF9wYXJlbnRoZXNpcyddKSA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICRjb21tYUNvdW50ID0gY291bnQoJHRva2Vuc1skbmV4dFRva2VuXVsnbmVzdGVkX3BhcmVudGhlc2lzJ10pOwogICAgICAgICAgICAgICAgICAgIGlmICgkdG9rZW5zWyRzdGFja1B0cl1bJ2NvZGUnXSA9PT0gVF9BUlJBWSkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgcGFyZW50aGVzaXMgdGhhdCBhcmUgdXNlZCB0byBkZWZpbmUgdGhlIGFycmF5LgogICAgICAgICAgICAgICAgICAgICAgICAkY29tbWFDb3VudC0tOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoJGNvbW1hQ291bnQgPiAkc3RhY2tQdHJDb3VudCkgewogICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgY29tbWEgaXMgaW5zaWRlIG1vcmUgcGFyZW50aGVzaXMgdGhhbiB0aGUgQVJSQVkga2V5d29yZCwKICAgICAgICAgICAgICAgICAgICAvLyB0aGVuIHRoZXJlIGl0IGlzIGFjdHVhbGx5IGEgY29tbWEgdXNlZCB0byBzZXBhcmF0ZSBhcmd1bWVudHMKICAgICAgICAgICAgICAgICAgICAvLyBpbiBhIGZ1bmN0aW9uIGNhbGwuCiAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCRrZXlVc2VkID09PSB0cnVlICYmICR0b2tlbnNbJGxhc3RUb2tlbl1bJ2NvZGUnXSA9PT0gVF9DT01NQSkgewogICAgICAgICAgICAgICAgICAgICRlcnJvciA9ICdObyBrZXkgc3BlY2lmaWVkIGZvciBhcnJheSBlbnRyeTsgZmlyc3QgZW50cnkgc3BlY2lmaWVzIGtleSc7CiAgICAgICAgICAgICAgICAgICAgJHBocGNzRmlsZS0+YWRkRXJyb3IoJGVycm9yLCAkbmV4dFRva2VuLCAnTm9LZXlTcGVjaWZpZWQnKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCRrZXlVc2VkID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgIGlmICgkdG9rZW5zWygkbmV4dFRva2VuIC0gMSldWydjb2RlJ10gPT09IFRfV0hJVEVTUEFDRSkgewogICAgICAgICAgICAgICAgICAgICAgICAkcHJldiA9ICRwaHBjc0ZpbGUtPmZpbmRQcmV2aW91cyhUb2tlbnM6OiRlbXB0eVRva2VucywgKCRuZXh0VG9rZW4gLSAxKSwgbnVsbCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoJHRva2Vuc1skcHJldl1bJ2NvZGUnXSAhPT0gVF9FTkRfSEVSRURPQwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgJHRva2Vuc1skcHJldl1bJ2NvZGUnXSAhPT0gVF9FTkRfTk9XRE9DKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgJHRva2Vuc1soJG5leHRUb2tlbiAtIDEpXVsnbGluZSddID09PSAkdG9rZW5zWyRuZXh0VG9rZW5dWydsaW5lJ10KICAgICAgICAgICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRva2Vuc1soJG5leHRUb2tlbiAtIDEpXVsnY29udGVudCddID09PSAkcGhwY3NGaWxlLT5lb2xDaGFyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNwYWNlTGVuZ3RoID0gJ25ld2xpbmUnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3BhY2VMZW5ndGggPSAkdG9rZW5zWygkbmV4dFRva2VuIC0gMSldWydsZW5ndGgnXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXJyb3IgPSAnRXhwZWN0ZWQgMCBzcGFjZXMgYmVmb3JlIGNvbW1hOyAlcyBmb3VuZCc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGF0YSAgPSBbJHNwYWNlTGVuZ3RoXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgZXJyb3IgaXMgb25seSBmaXhhYmxlIGlmIHRoZXJlIGlzIG9ubHkgd2hpdGVzcGFjZSBiZXR3ZWVuIHRoZSB0b2tlbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHByZXYgPT09ICRwaHBjc0ZpbGUtPmZpbmRQcmV2aW91cyhUX1dISVRFU1BBQ0UsICgkbmV4dFRva2VuIC0gMSksIG51bGwsIHRydWUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGZpeCA9ICRwaHBjc0ZpbGUtPmFkZEZpeGFibGVFcnJvcigkZXJyb3IsICRuZXh0VG9rZW4sICdTcGFjZUJlZm9yZUNvbW1hJywgJGRhdGEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZml4ID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwaHBjc0ZpbGUtPmZpeGVyLT5yZXBsYWNlVG9rZW4oKCRuZXh0VG9rZW4gLSAxKSwgJycpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBocGNzRmlsZS0+YWRkRXJyb3IoJGVycm9yLCAkbmV4dFRva2VuLCAnU3BhY2VCZWZvcmVDb21tYScsICRkYXRhKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0vL2VuZCBpZgoKICAgICAgICAgICAgICAgICAgICAkdmFsdWVDb250ZW50ID0gJHBocGNzRmlsZS0+ZmluZE5leHQoCiAgICAgICAgICAgICAgICAgICAgICAgIFRva2Vuczo6JGVtcHR5VG9rZW5zLAogICAgICAgICAgICAgICAgICAgICAgICAoJGxhc3RUb2tlbiArIDEpLAogICAgICAgICAgICAgICAgICAgICAgICAkbmV4dFRva2VuLAogICAgICAgICAgICAgICAgICAgICAgICB0cnVlCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgJGluZGljZXNbXSAgPSBbJ3ZhbHVlJyA9PiAkdmFsdWVDb250ZW50XTsKICAgICAgICAgICAgICAgICAgICAkc2luZ2xlVXNlZCA9IHRydWU7CiAgICAgICAgICAgICAgICB9Ly9lbmQgaWYKCiAgICAgICAgICAgICAgICAkbGFzdFRva2VuID0gJG5leHRUb2tlbjsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9Ly9lbmQgaWYKCiAgICAgICAgICAgIGlmICgkdG9rZW5zWyRuZXh0VG9rZW5dWydjb2RlJ10gPT09IFRfRE9VQkxFX0FSUk9XKSB7CiAgICAgICAgICAgICAgICBpZiAoJHNpbmdsZVVzZWQgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAkZXJyb3IgPSAnS2V5IHNwZWNpZmllZCBmb3IgYXJyYXkgZW50cnk7IGZpcnN0IGVudHJ5IGhhcyBubyBrZXknOwogICAgICAgICAgICAgICAgICAgICRwaHBjc0ZpbGUtPmFkZEVycm9yKCRlcnJvciwgJG5leHRUb2tlbiwgJ0tleVNwZWNpZmllZCcpOwogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkY3VycmVudEVudHJ5WydhcnJvdyddID0gJG5leHRUb2tlbjsKICAgICAgICAgICAgICAgICRrZXlVc2VkID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICAvLyBGaW5kIHRoZSBzdGFydCBvZiBpbmRleCB0aGF0IHVzZXMgdGhpcyBkb3VibGUgYXJyb3cuCiAgICAgICAgICAgICAgICAkaW5kZXhFbmQgICA9ICRwaHBjc0ZpbGUtPmZpbmRQcmV2aW91cyhUX1dISVRFU1BBQ0UsICgkbmV4dFRva2VuIC0gMSksICRhcnJheVN0YXJ0LCB0cnVlKTsKICAgICAgICAgICAgICAgICRpbmRleFN0YXJ0ID0gJHBocGNzRmlsZS0+ZmluZFN0YXJ0T2ZTdGF0ZW1lbnQoJGluZGV4RW5kKTsKCiAgICAgICAgICAgICAgICBpZiAoJGluZGV4U3RhcnQgPT09ICRpbmRleEVuZCkgewogICAgICAgICAgICAgICAgICAgICRjdXJyZW50RW50cnlbJ2luZGV4J10gICAgICAgICA9ICRpbmRleEVuZDsKICAgICAgICAgICAgICAgICAgICAkY3VycmVudEVudHJ5WydpbmRleF9jb250ZW50J10gPSAkdG9rZW5zWyRpbmRleEVuZF1bJ2NvbnRlbnQnXTsKICAgICAgICAgICAgICAgICAgICAkY3VycmVudEVudHJ5WydpbmRleF9sZW5ndGgnXSAgPSAkdG9rZW5zWyRpbmRleEVuZF1bJ2xlbmd0aCddOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkY3VycmVudEVudHJ5WydpbmRleCddICAgICAgICAgPSAkaW5kZXhTdGFydDsKICAgICAgICAgICAgICAgICAgICAkY3VycmVudEVudHJ5WydpbmRleF9jb250ZW50J10gPSAnJzsKICAgICAgICAgICAgICAgICAgICAkY3VycmVudEVudHJ5WydpbmRleF9sZW5ndGgnXSAgPSAwOwogICAgICAgICAgICAgICAgICAgIGZvciAoJGkgPSAkaW5kZXhTdGFydDsgJGkgPD0gJGluZGV4RW5kOyAkaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRjdXJyZW50RW50cnlbJ2luZGV4X2NvbnRlbnQnXSAuPSAkdG9rZW5zWyRpXVsnY29udGVudCddOwogICAgICAgICAgICAgICAgICAgICAgICAkY3VycmVudEVudHJ5WydpbmRleF9sZW5ndGgnXSAgKz0gJHRva2Vuc1skaV1bJ2xlbmd0aCddOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoJG1heExlbmd0aCA8ICRjdXJyZW50RW50cnlbJ2luZGV4X2xlbmd0aCddKSB7CiAgICAgICAgICAgICAgICAgICAgJG1heExlbmd0aCA9ICRjdXJyZW50RW50cnlbJ2luZGV4X2xlbmd0aCddOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIEZpbmQgdGhlIHZhbHVlIG9mIHRoaXMgaW5kZXguCiAgICAgICAgICAgICAgICAkbmV4dENvbnRlbnQgPSAkcGhwY3NGaWxlLT5maW5kTmV4dCgKICAgICAgICAgICAgICAgICAgICBUb2tlbnM6OiRlbXB0eVRva2VucywKICAgICAgICAgICAgICAgICAgICAoJG5leHRUb2tlbiArIDEpLAogICAgICAgICAgICAgICAgICAgICRhcnJheUVuZCwKICAgICAgICAgICAgICAgICAgICB0cnVlCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICRjdXJyZW50RW50cnlbJ3ZhbHVlJ10gPSAkbmV4dENvbnRlbnQ7CiAgICAgICAgICAgICAgICAkaW5kaWNlc1tdID0gJGN1cnJlbnRFbnRyeTsKICAgICAgICAgICAgICAgICRsYXN0VG9rZW4gPSAkbmV4dFRva2VuOwogICAgICAgICAgICB9Ly9lbmQgaWYKICAgICAgICB9Ly9lbmQgZm9yCgogICAgICAgIC8vIENoZWNrIGZvciBtdWx0aS1saW5lIGFycmF5cyB0aGF0IHNob3VsZCBiZSBzaW5nbGUtbGluZS4KICAgICAgICAkc2luZ2xlVmFsdWUgPSBmYWxzZTsKCiAgICAgICAgaWYgKGVtcHR5KCRpbmRpY2VzKSA9PT0gdHJ1ZSkgewogICAgICAgICAgICAkc2luZ2xlVmFsdWUgPSB0cnVlOwogICAgICAgIH0gZWxzZSBpZiAoY291bnQoJGluZGljZXMpID09PSAxICYmICR0b2tlbnNbJGxhc3RUb2tlbl1bJ2NvZGUnXSA9PT0gVF9DT01NQSkgewogICAgICAgICAgICAvLyBUaGVyZSBtYXkgYmUgYW5vdGhlciBhcnJheSB2YWx1ZSB3aXRob3V0IGEgY29tbWEuCiAgICAgICAgICAgICRleGNsdWRlICAgICA9IFRva2Vuczo6JGVtcHR5VG9rZW5zOwogICAgICAgICAgICAkZXhjbHVkZVtdICAgPSBUX0NPTU1BOwogICAgICAgICAgICAkbmV4dENvbnRlbnQgPSAkcGhwY3NGaWxlLT5maW5kTmV4dCgkZXhjbHVkZSwgKCRpbmRpY2VzWzBdWyd2YWx1ZSddICsgMSksICRhcnJheUVuZCwgdHJ1ZSk7CiAgICAgICAgICAgIGlmICgkbmV4dENvbnRlbnQgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAkc2luZ2xlVmFsdWUgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoJHNpbmdsZVZhbHVlID09PSB0cnVlKSB7CiAgICAgICAgICAgIC8vIEJlZm9yZSB3ZSBjb21wbGFpbiwgbWFrZSBzdXJlIHRoZSBzaW5nbGUgdmFsdWUgaXNuJ3QgYSBoZXJlL25vd2RvYy4KICAgICAgICAgICAgJG5leHQgPSAkcGhwY3NGaWxlLT5maW5kTmV4dChUb2tlbnM6OiRoZXJlZG9jVG9rZW5zLCAoJGFycmF5U3RhcnQgKyAxKSwgKCRhcnJheUVuZCAtIDEpKTsKICAgICAgICAgICAgaWYgKCRuZXh0ID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgLy8gQXJyYXkgY2Fubm90IGJlIGVtcHR5LCBzbyB0aGlzIGlzIGEgbXVsdGktbGluZSBhcnJheSB3aXRoCiAgICAgICAgICAgICAgICAvLyBhIHNpbmdsZSB2YWx1ZS4gSXQgc2hvdWxkIGJlIGRlZmluZWQgb24gc2luZ2xlIGxpbmUuCiAgICAgICAgICAgICAgICAkZXJyb3IgICAgID0gJ011bHRpLWxpbmUgYXJyYXkgY29udGFpbnMgYSBzaW5nbGUgdmFsdWU7IHVzZSBzaW5nbGUtbGluZSBhcnJheSBpbnN0ZWFkJzsKICAgICAgICAgICAgICAgICRlcnJvckNvZGUgPSAnTXVsdGlMaW5lTm90QWxsb3dlZCc7CgogICAgICAgICAgICAgICAgJGZpbmQgICAgPSBUb2tlbnM6OiRwaHBjc0NvbW1lbnRUb2tlbnM7CiAgICAgICAgICAgICAgICAkZmluZFtdICA9IFRfQ09NTUVOVDsKICAgICAgICAgICAgICAgICRjb21tZW50ID0gJHBocGNzRmlsZS0+ZmluZE5leHQoJGZpbmQsICgkYXJyYXlTdGFydCArIDEpLCAkYXJyYXlFbmQpOwogICAgICAgICAgICAgICAgaWYgKCRjb21tZW50ID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgICRmaXggPSAkcGhwY3NGaWxlLT5hZGRGaXhhYmxlRXJyb3IoJGVycm9yLCAkc3RhY2tQdHIsICRlcnJvckNvZGUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkZml4ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgJHBocGNzRmlsZS0+YWRkRXJyb3IoJGVycm9yLCAkc3RhY2tQdHIsICRlcnJvckNvZGUpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICgkZml4ID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgJHBocGNzRmlsZS0+Zml4ZXItPmJlZ2luQ2hhbmdlc2V0KCk7CiAgICAgICAgICAgICAgICAgICAgZm9yICgkaSA9ICgkYXJyYXlTdGFydCArIDEpOyAkaSA8ICRhcnJheUVuZDsgJGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRva2Vuc1skaV1bJ2NvZGUnXSAhPT0gVF9XSElURVNQQUNFKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgJHBocGNzRmlsZS0+Zml4ZXItPnJlcGxhY2VUb2tlbigkaSwgJycpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgZm9yICgkaSA9ICgkYXJyYXlFbmQgLSAxKTsgJGkgPiAkYXJyYXlTdGFydDsgJGktLSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRva2Vuc1skaV1bJ2NvZGUnXSAhPT0gVF9XSElURVNQQUNFKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgJHBocGNzRmlsZS0+Zml4ZXItPnJlcGxhY2VUb2tlbigkaSwgJycpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgJHBocGNzRmlsZS0+Zml4ZXItPmVuZENoYW5nZXNldCgpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfS8vZW5kIGlmCiAgICAgICAgfS8vZW5kIGlmCgogICAgICAgIC8qCiAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBjaGVja3MgZm9yIGFycmF5cyB0aGF0IGRvbid0IHNwZWNpZnkga2V5cy4KCiAgICAgICAgICAgIEFycmF5cyBzdWNoIGFzOgogICAgICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgICdhYWEnLAogICAgICAgICAgICAgICAgJ2JiYicsCiAgICAgICAgICAgICAgICAnZCcsCiAgICAgICAgICAgICAgICk7CiAgICAgICAgKi8KCiAgICAgICAgaWYgKCRrZXlVc2VkID09PSBmYWxzZSAmJiBlbXB0eSgkaW5kaWNlcykgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICRjb3VudCAgICAgPSBjb3VudCgkaW5kaWNlcyk7CiAgICAgICAgICAgICRsYXN0SW5kZXggPSAkaW5kaWNlc1soJGNvdW50IC0gMSldWyd2YWx1ZSddOwoKICAgICAgICAgICAgJHRyYWlsaW5nQ29udGVudCA9ICRwaHBjc0ZpbGUtPmZpbmRQcmV2aW91cygKICAgICAgICAgICAgICAgIFRva2Vuczo6JGVtcHR5VG9rZW5zLAogICAgICAgICAgICAgICAgKCRhcnJheUVuZCAtIDEpLAogICAgICAgICAgICAgICAgJGxhc3RJbmRleCwKICAgICAgICAgICAgICAgIHRydWUKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICgkdG9rZW5zWyR0cmFpbGluZ0NvbnRlbnRdWydjb2RlJ10gIT09IFRfQ09NTUEpIHsKICAgICAgICAgICAgICAgICRwaHBjc0ZpbGUtPnJlY29yZE1ldHJpYygkc3RhY2tQdHIsICdBcnJheSBlbmQgY29tbWEnLCAnbm8nKTsKICAgICAgICAgICAgICAgICRlcnJvciA9ICdDb21tYSByZXF1aXJlZCBhZnRlciBsYXN0IHZhbHVlIGluIGFycmF5IGRlY2xhcmF0aW9uJzsKICAgICAgICAgICAgICAgICRmaXggICA9ICRwaHBjc0ZpbGUtPmFkZEZpeGFibGVFcnJvcigkZXJyb3IsICR0cmFpbGluZ0NvbnRlbnQsICdOb0NvbW1hQWZ0ZXJMYXN0Jyk7CiAgICAgICAgICAgICAgICBpZiAoJGZpeCA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICRwaHBjc0ZpbGUtPmZpeGVyLT5hZGRDb250ZW50KCR0cmFpbGluZ0NvbnRlbnQsICcsJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkcGhwY3NGaWxlLT5yZWNvcmRNZXRyaWMoJHN0YWNrUHRyLCAnQXJyYXkgZW5kIGNvbW1hJywgJ3llcycpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBmb3JlYWNoICgkaW5kaWNlcyBhcyAkdmFsdWVQb3NpdGlvbiA9PiAkdmFsdWUpIHsKICAgICAgICAgICAgICAgIGlmIChlbXB0eSgkdmFsdWVbJ3ZhbHVlJ10pID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gQXJyYXkgd2FzIG1hbGZvcm1lZCBhbmQgd2UgY291bGRuJ3QgZmlndXJlIG91dAogICAgICAgICAgICAgICAgICAgIC8vIHRoZSBhcnJheSB2YWx1ZSBjb3JyZWN0bHksIHNvIHdlIGhhdmUgdG8gaWdub3JlIGl0LgogICAgICAgICAgICAgICAgICAgIC8vIE90aGVyIHBhcnRzIG9mIHRoaXMgc25pZmYgd2lsbCBjb3JyZWN0IHRoZSBlcnJvci4KICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkdmFsdWVQb2ludGVyID0gJHZhbHVlWyd2YWx1ZSddOwoKICAgICAgICAgICAgICAgICRpZ25vcmVUb2tlbnMgID0gWwogICAgICAgICAgICAgICAgICAgIFRfV0hJVEVTUEFDRSA9PiBUX1dISVRFU1BBQ0UsCiAgICAgICAgICAgICAgICAgICAgVF9DT01NQSAgICAgID0+IFRfQ09NTUEsCiAgICAgICAgICAgICAgICBdOwogICAgICAgICAgICAgICAgJGlnbm9yZVRva2VucyArPSBUb2tlbnM6OiRjYXN0VG9rZW5zOwoKICAgICAgICAgICAgICAgIGlmICgkdG9rZW5zWyR2YWx1ZVBvaW50ZXJdWydjb2RlJ10gPT09IFRfQ0xPU1VSRQogICAgICAgICAgICAgICAgICAgIHx8ICR0b2tlbnNbJHZhbHVlUG9pbnRlcl1bJ2NvZGUnXSA9PT0gVF9GTgogICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgJGlnbm9yZVRva2VucyArPSBbVF9TVEFUSUMgPT4gVF9TVEFUSUNdOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRwcmV2aW91cyA9ICRwaHBjc0ZpbGUtPmZpbmRQcmV2aW91cygkaWdub3JlVG9rZW5zLCAoJHZhbHVlUG9pbnRlciAtIDEpLCAoJGFycmF5U3RhcnQgKyAxKSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICBpZiAoJHByZXZpb3VzID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgICRwcmV2aW91cyA9ICRzdGFja1B0cjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkcHJldmlvdXNJc1doaXRlc3BhY2UgPSAkdG9rZW5zWygkdmFsdWVQb2ludGVyIC0gMSldWydjb2RlJ10gPT09IFRfV0hJVEVTUEFDRTsKICAgICAgICAgICAgICAgIGlmICgkdG9rZW5zWyRwcmV2aW91c11bJ2xpbmUnXSA9PT0gJHRva2Vuc1skdmFsdWVQb2ludGVyXVsnbGluZSddKSB7CiAgICAgICAgICAgICAgICAgICAgJGVycm9yID0gJ0VhY2ggdmFsdWUgaW4gYSBtdWx0aS1saW5lIGFycmF5IG11c3QgYmUgb24gYSBuZXcgbGluZSc7CiAgICAgICAgICAgICAgICAgICAgaWYgKCR2YWx1ZVBvc2l0aW9uID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRlcnJvciA9ICdUaGUgZmlyc3QgdmFsdWUgaW4gYSBtdWx0aS12YWx1ZSBhcnJheSBtdXN0IGJlIG9uIGEgbmV3IGxpbmUnOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgJGZpeCA9ICRwaHBjc0ZpbGUtPmFkZEZpeGFibGVFcnJvcigkZXJyb3IsICR2YWx1ZVBvaW50ZXIsICdWYWx1ZU5vTmV3bGluZScpOwogICAgICAgICAgICAgICAgICAgIGlmICgkZml4ID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkcHJldmlvdXNJc1doaXRlc3BhY2UgPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwaHBjc0ZpbGUtPmZpeGVyLT5yZXBsYWNlVG9rZW4oKCR2YWx1ZVBvaW50ZXIgLSAxKSwgJHBocGNzRmlsZS0+ZW9sQ2hhcik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGhwY3NGaWxlLT5maXhlci0+YWRkTmV3bGluZUJlZm9yZSgkdmFsdWVQb2ludGVyKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoJHByZXZpb3VzSXNXaGl0ZXNwYWNlID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgJGV4cGVjdGVkID0gJGtleXdvcmRTdGFydDsKCiAgICAgICAgICAgICAgICAgICAgJGZpcnN0ID0gJHBocGNzRmlsZS0+ZmluZEZpcnN0T25MaW5lKFRfV0hJVEVTUEFDRSwgJHZhbHVlUG9pbnRlciwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgJGZvdW5kID0gKCR0b2tlbnNbJGZpcnN0XVsnY29sdW1uJ10gLSAxKTsKICAgICAgICAgICAgICAgICAgICBpZiAoJGZvdW5kICE9PSAkZXhwZWN0ZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGVycm9yID0gJ0FycmF5IHZhbHVlIG5vdCBhbGlnbmVkIGNvcnJlY3RseTsgZXhwZWN0ZWQgJXMgc3BhY2VzIGJ1dCBmb3VuZCAlcyc7CiAgICAgICAgICAgICAgICAgICAgICAgICRkYXRhICA9IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRleHBlY3RlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmb3VuZCwKICAgICAgICAgICAgICAgICAgICAgICAgXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICRmaXggPSAkcGhwY3NGaWxlLT5hZGRGaXhhYmxlRXJyb3IoJGVycm9yLCAkZmlyc3QsICdWYWx1ZU5vdEFsaWduZWQnLCAkZGF0YSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZml4ID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGZvdW5kID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBocGNzRmlsZS0+Zml4ZXItPmFkZENvbnRlbnQoKCRmaXJzdCAtIDEpLCBzdHJfcmVwZWF0KCcgJywgJGV4cGVjdGVkKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwaHBjc0ZpbGUtPmZpeGVyLT5yZXBsYWNlVG9rZW4oKCRmaXJzdCAtIDEpLCBzdHJfcmVwZWF0KCcgJywgJGV4cGVjdGVkKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9Ly9lbmQgaWYKICAgICAgICAgICAgfS8vZW5kIGZvcmVhY2gKICAgICAgICB9Ly9lbmQgaWYKCiAgICAgICAgLyoKICAgICAgICAgICAgQmVsb3cgdGhlIGFjdHVhbCBpbmRlbnRhdGlvbiBvZiB0aGUgYXJyYXkgaXMgY2hlY2tlZC4KICAgICAgICAgICAgRXJyb3JzIHdpbGwgYmUgdGhyb3duIHdoZW4gYSBrZXkgaXMgbm90IGFsaWduZWQsIHdoZW4KICAgICAgICAgICAgYSBkb3VibGUgYXJyb3cgaXMgbm90IGFsaWduZWQsIGFuZCB3aGVuIGEgdmFsdWUgaXMgbm90CiAgICAgICAgICAgIGFsaWduZWQgY29ycmVjdGx5LgogICAgICAgICAgICBJZiBhbiBlcnJvciBpcyBmb3VuZCBpbiBvbmUgb2YgdGhlIGFib3ZlIGFyZWFzLCB0aGVuIGVycm9ycwogICAgICAgICAgICBhcmUgbm90IHJlcG9ydGVkIGZvciB0aGUgcmVzdCBvZiB0aGUgbGluZSB0byBhdm9pZCByZXBvcnRpbmcKICAgICAgICAgICAgc3BhY2VzIGFuZCBjb2x1bW5zIGluY29ycmVjdGx5LiBPZnRlbiBmaXhpbmcgdGhlIGZpcnN0CiAgICAgICAgICAgIHByb2JsZW0gd2lsbCBmaXggdGhlIG90aGVyIDIgYW55d2F5LgoKICAgICAgICAgICAgRm9yIGV4YW1wbGU6CgogICAgICAgICAgICAkYSA9IGFycmF5KAogICAgICAgICAgICAgICAgICAnaW5kZXgnICA9PiAnMicsCiAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG9yCgogICAgICAgICAgICAkYSA9IFsKICAgICAgICAgICAgICAgICAgJ2luZGV4JyAgPT4gJzInLAogICAgICAgICAgICAgICAgIF07CgogICAgICAgICAgICBJbiB0aGlzIGFycmF5LCB0aGUgZG91YmxlIGFycm93IGlzIGluZGVudGVkIHRvbyBmYXIsIGJ1dCB0aGlzCiAgICAgICAgICAgIHdpbGwgYWxzbyBjYXVzZSBhbiBlcnJvciBpbiB0aGUgdmFsdWUncyBhbGlnbm1lbnQuIElmIHRoZSBhcnJvdyB3ZXJlCiAgICAgICAgICAgIHRvIGJlIG1vdmVkIGJhY2sgb25lIHNwYWNlIGhvd2V2ZXIsIHRoZW4gYm90aCBlcnJvcnMgd291bGQgYmUgZml4ZWQuCiAgICAgICAgKi8KCiAgICAgICAgJGluZGljZXNTdGFydCA9ICgka2V5d29yZFN0YXJ0ICsgMSk7CiAgICAgICAgZm9yZWFjaCAoJGluZGljZXMgYXMgJHZhbHVlUG9zaXRpb24gPT4gJGluZGV4KSB7CiAgICAgICAgICAgICR2YWx1ZVBvaW50ZXIgPSAkaW5kZXhbJ3ZhbHVlJ107CiAgICAgICAgICAgIGlmICgkdmFsdWVQb2ludGVyID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgLy8gU3ludGF4IGVycm9yIG9yIGxpdmUgY29kaW5nLgogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChpc3NldCgkaW5kZXhbJ2luZGV4J10pID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgLy8gQXJyYXkgdmFsdWUgb25seS4KICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkaW5kZXhQb2ludGVyID0gJGluZGV4WydpbmRleCddOwogICAgICAgICAgICAkaW5kZXhMaW5lICAgID0gJHRva2Vuc1skaW5kZXhQb2ludGVyXVsnbGluZSddOwoKICAgICAgICAgICAgJHByZXZpb3VzID0gJHBocGNzRmlsZS0+ZmluZFByZXZpb3VzKFtUX1dISVRFU1BBQ0UsIFRfQ09NTUFdLCAoJGluZGV4UG9pbnRlciAtIDEpLCAoJGFycmF5U3RhcnQgKyAxKSwgdHJ1ZSk7CiAgICAgICAgICAgIGlmICgkcHJldmlvdXMgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAkcHJldmlvdXMgPSAkc3RhY2tQdHI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgkdG9rZW5zWyRwcmV2aW91c11bJ2xpbmUnXSA9PT0gJGluZGV4TGluZSkgewogICAgICAgICAgICAgICAgJGVycm9yID0gJ0VhY2ggaW5kZXggaW4gYSBtdWx0aS1saW5lIGFycmF5IG11c3QgYmUgb24gYSBuZXcgbGluZSc7CiAgICAgICAgICAgICAgICBpZiAoJHZhbHVlUG9zaXRpb24gPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAkZXJyb3IgPSAnVGhlIGZpcnN0IGluZGV4IGluIGEgbXVsdGktdmFsdWUgYXJyYXkgbXVzdCBiZSBvbiBhIG5ldyBsaW5lJzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkZml4ID0gJHBocGNzRmlsZS0+YWRkRml4YWJsZUVycm9yKCRlcnJvciwgJGluZGV4UG9pbnRlciwgJ0luZGV4Tm9OZXdsaW5lJyk7CiAgICAgICAgICAgICAgICBpZiAoJGZpeCA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgIGlmICgkdG9rZW5zWygkaW5kZXhQb2ludGVyIC0gMSldWydjb2RlJ10gPT09IFRfV0hJVEVTUEFDRSkgewogICAgICAgICAgICAgICAgICAgICAgICAkcGhwY3NGaWxlLT5maXhlci0+cmVwbGFjZVRva2VuKCgkaW5kZXhQb2ludGVyIC0gMSksICRwaHBjc0ZpbGUtPmVvbENoYXIpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRwaHBjc0ZpbGUtPmZpeGVyLT5hZGROZXdsaW5lQmVmb3JlKCRpbmRleFBvaW50ZXIpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCR0b2tlbnNbJGluZGV4UG9pbnRlcl1bJ2NvbHVtbiddICE9PSAkaW5kaWNlc1N0YXJ0ICYmICgkaW5kZXhQb2ludGVyIC0gMSkgIT09ICRhcnJheVN0YXJ0KSB7CiAgICAgICAgICAgICAgICAkZXhwZWN0ZWQgPSAoJGluZGljZXNTdGFydCAtIDEpOwogICAgICAgICAgICAgICAgJGZvdW5kICAgID0gKCR0b2tlbnNbJGluZGV4UG9pbnRlcl1bJ2NvbHVtbiddIC0gMSk7CiAgICAgICAgICAgICAgICAkZXJyb3IgICAgPSAnQXJyYXkga2V5IG5vdCBhbGlnbmVkIGNvcnJlY3RseTsgZXhwZWN0ZWQgJXMgc3BhY2VzIGJ1dCBmb3VuZCAlcyc7CiAgICAgICAgICAgICAgICAkZGF0YSAgICAgPSBbCiAgICAgICAgICAgICAgICAgICAgJGV4cGVjdGVkLAogICAgICAgICAgICAgICAgICAgICRmb3VuZCwKICAgICAgICAgICAgICAgIF07CgogICAgICAgICAgICAgICAgJGZpeCA9ICRwaHBjc0ZpbGUtPmFkZEZpeGFibGVFcnJvcigkZXJyb3IsICRpbmRleFBvaW50ZXIsICdLZXlOb3RBbGlnbmVkJywgJGRhdGEpOwogICAgICAgICAgICAgICAgaWYgKCRmaXggPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoJGZvdW5kID09PSAwIHx8ICR0b2tlbnNbKCRpbmRleFBvaW50ZXIgLSAxKV1bJ2NvZGUnXSAhPT0gVF9XSElURVNQQUNFKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRwaHBjc0ZpbGUtPmZpeGVyLT5hZGRDb250ZW50KCgkaW5kZXhQb2ludGVyIC0gMSksIHN0cl9yZXBlYXQoJyAnLCAkZXhwZWN0ZWQpKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkcGhwY3NGaWxlLT5maXhlci0+cmVwbGFjZVRva2VuKCgkaW5kZXhQb2ludGVyIC0gMSksIHN0cl9yZXBlYXQoJyAnLCAkZXhwZWN0ZWQpKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRhcnJvd1N0YXJ0ID0gKCR0b2tlbnNbJGluZGV4UG9pbnRlcl1bJ2NvbHVtbiddICsgJG1heExlbmd0aCArIDEpOwogICAgICAgICAgICBpZiAoJHRva2Vuc1skaW5kZXhbJ2Fycm93J11dWydjb2x1bW4nXSAhPT0gJGFycm93U3RhcnQpIHsKICAgICAgICAgICAgICAgICRleHBlY3RlZCA9ICgkYXJyb3dTdGFydCAtICgkaW5kZXhbJ2luZGV4X2xlbmd0aCddICsgJHRva2Vuc1skaW5kZXhQb2ludGVyXVsnY29sdW1uJ10pKTsKICAgICAgICAgICAgICAgICRmb3VuZCAgICA9ICgkdG9rZW5zWyRpbmRleFsnYXJyb3cnXV1bJ2NvbHVtbiddIC0gKCRpbmRleFsnaW5kZXhfbGVuZ3RoJ10gKyAkdG9rZW5zWyRpbmRleFBvaW50ZXJdWydjb2x1bW4nXSkpOwogICAgICAgICAgICAgICAgJGVycm9yICAgID0gJ0FycmF5IGRvdWJsZSBhcnJvdyBub3QgYWxpZ25lZCBjb3JyZWN0bHk7IGV4cGVjdGVkICVzIHNwYWNlKHMpIGJ1dCBmb3VuZCAlcyc7CiAgICAgICAgICAgICAgICAkZGF0YSAgICAgPSBbCiAgICAgICAgICAgICAgICAgICAgJGV4cGVjdGVkLAogICAgICAgICAgICAgICAgICAgICRmb3VuZCwKICAgICAgICAgICAgICAgIF07CgogICAgICAgICAgICAgICAgJGZpeCA9ICRwaHBjc0ZpbGUtPmFkZEZpeGFibGVFcnJvcigkZXJyb3IsICRpbmRleFsnYXJyb3cnXSwgJ0RvdWJsZUFycm93Tm90QWxpZ25lZCcsICRkYXRhKTsKICAgICAgICAgICAgICAgIGlmICgkZml4ID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRmb3VuZCA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAkcGhwY3NGaWxlLT5maXhlci0+YWRkQ29udGVudCgoJGluZGV4WydhcnJvdyddIC0gMSksIHN0cl9yZXBlYXQoJyAnLCAkZXhwZWN0ZWQpKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkcGhwY3NGaWxlLT5maXhlci0+cmVwbGFjZVRva2VuKCgkaW5kZXhbJ2Fycm93J10gLSAxKSwgc3RyX3JlcGVhdCgnICcsICRleHBlY3RlZCkpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHZhbHVlU3RhcnQgPSAoJGFycm93U3RhcnQgKyAzKTsKICAgICAgICAgICAgaWYgKCR0b2tlbnNbJHZhbHVlUG9pbnRlcl1bJ2NvbHVtbiddICE9PSAkdmFsdWVTdGFydCkgewogICAgICAgICAgICAgICAgJGV4cGVjdGVkID0gKCR2YWx1ZVN0YXJ0IC0gKCR0b2tlbnNbJGluZGV4WydhcnJvdyddXVsnbGVuZ3RoJ10gKyAkdG9rZW5zWyRpbmRleFsnYXJyb3cnXV1bJ2NvbHVtbiddKSk7CiAgICAgICAgICAgICAgICAkZm91bmQgICAgPSAoJHRva2Vuc1skdmFsdWVQb2ludGVyXVsnY29sdW1uJ10gLSAoJHRva2Vuc1skaW5kZXhbJ2Fycm93J11dWydsZW5ndGgnXSArICR0b2tlbnNbJGluZGV4WydhcnJvdyddXVsnY29sdW1uJ10pKTsKICAgICAgICAgICAgICAgIGlmICgkZm91bmQgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgJGZvdW5kID0gJ25ld2xpbmUnOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRlcnJvciA9ICdBcnJheSB2YWx1ZSBub3QgYWxpZ25lZCBjb3JyZWN0bHk7IGV4cGVjdGVkICVzIHNwYWNlKHMpIGJ1dCBmb3VuZCAlcyc7CiAgICAgICAgICAgICAgICAkZGF0YSAgPSBbCiAgICAgICAgICAgICAgICAgICAgJGV4cGVjdGVkLAogICAgICAgICAgICAgICAgICAgICRmb3VuZCwKICAgICAgICAgICAgICAgIF07CgogICAgICAgICAgICAgICAgJGZpeCA9ICRwaHBjc0ZpbGUtPmFkZEZpeGFibGVFcnJvcigkZXJyb3IsICRpbmRleFsnYXJyb3cnXSwgJ1ZhbHVlTm90QWxpZ25lZCcsICRkYXRhKTsKICAgICAgICAgICAgICAgIGlmICgkZml4ID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRmb3VuZCA9PT0gJ25ld2xpbmUnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRwcmV2ID0gJHBocGNzRmlsZS0+ZmluZFByZXZpb3VzKFRfV0hJVEVTUEFDRSwgKCR2YWx1ZVBvaW50ZXIgLSAxKSwgbnVsbCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICRwaHBjc0ZpbGUtPmZpeGVyLT5iZWdpbkNoYW5nZXNldCgpOwogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCRpID0gKCRwcmV2ICsgMSk7ICRpIDwgJHZhbHVlUG9pbnRlcjsgJGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBocGNzRmlsZS0+Zml4ZXItPnJlcGxhY2VUb2tlbigkaSwgJycpOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAkcGhwY3NGaWxlLT5maXhlci0+cmVwbGFjZVRva2VuKCgkdmFsdWVQb2ludGVyIC0gMSksIHN0cl9yZXBlYXQoJyAnLCAkZXhwZWN0ZWQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgJHBocGNzRmlsZS0+Zml4ZXItPmVuZENoYW5nZXNldCgpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoJGZvdW5kID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRwaHBjc0ZpbGUtPmZpeGVyLT5hZGRDb250ZW50KCgkdmFsdWVQb2ludGVyIC0gMSksIHN0cl9yZXBlYXQoJyAnLCAkZXhwZWN0ZWQpKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkcGhwY3NGaWxlLT5maXhlci0+cmVwbGFjZVRva2VuKCgkdmFsdWVQb2ludGVyIC0gMSksIHN0cl9yZXBlYXQoJyAnLCAkZXhwZWN0ZWQpKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0vL2VuZCBpZgoKICAgICAgICAgICAgLy8gQ2hlY2sgZWFjaCBsaW5lIGVuZHMgaW4gYSBjb21tYS4KICAgICAgICAgICAgJHZhbHVlU3RhcnQgPSAkdmFsdWVQb2ludGVyOwogICAgICAgICAgICAkbmV4dENvbW1hICA9IGZhbHNlOwoKICAgICAgICAgICAgJGVuZCA9ICRwaHBjc0ZpbGUtPmZpbmRFbmRPZlN0YXRlbWVudCgkdmFsdWVTdGFydCk7CiAgICAgICAgICAgIGlmICgkZW5kID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgJHZhbHVlRW5kID0gJHZhbHVlU3RhcnQ7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoJHRva2Vuc1skZW5kXVsnY29kZSddID09PSBUX0NPTU1BKSB7CiAgICAgICAgICAgICAgICAkdmFsdWVFbmQgID0gJHBocGNzRmlsZS0+ZmluZFByZXZpb3VzKFRva2Vuczo6JGVtcHR5VG9rZW5zLCAoJGVuZCAtIDEpLCAkdmFsdWVTdGFydCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAkbmV4dENvbW1hID0gJGVuZDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICR2YWx1ZUVuZCA9ICRlbmQ7CiAgICAgICAgICAgICAgICAkbmV4dCAgICAgPSAkcGhwY3NGaWxlLT5maW5kTmV4dChUb2tlbnM6OiRlbXB0eVRva2VucywgKCRlbmQgKyAxKSwgJGFycmF5RW5kLCB0cnVlKTsKICAgICAgICAgICAgICAgIGlmICgkbmV4dCAhPT0gZmFsc2UgJiYgJHRva2Vuc1skbmV4dF1bJ2NvZGUnXSA9PT0gVF9DT01NQSkgewogICAgICAgICAgICAgICAgICAgICRuZXh0Q29tbWEgPSAkbmV4dDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHZhbHVlTGluZSA9ICR0b2tlbnNbJHZhbHVlRW5kXVsnbGluZSddOwogICAgICAgICAgICBpZiAoJHRva2Vuc1skdmFsdWVFbmRdWydjb2RlJ10gPT09IFRfRU5EX0hFUkVET0MgfHwgJHRva2Vuc1skdmFsdWVFbmRdWydjb2RlJ10gPT09IFRfRU5EX05PV0RPQykgewogICAgICAgICAgICAgICAgJHZhbHVlTGluZSsrOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoJG5leHRDb21tYSA9PT0gZmFsc2UgfHwgKCR0b2tlbnNbJG5leHRDb21tYV1bJ2xpbmUnXSAhPT0gJHZhbHVlTGluZSkpIHsKICAgICAgICAgICAgICAgICRlcnJvciA9ICdFYWNoIGxpbmUgaW4gYW4gYXJyYXkgZGVjbGFyYXRpb24gbXVzdCBlbmQgaW4gYSBjb21tYSc7CiAgICAgICAgICAgICAgICAkZml4ICAgPSAkcGhwY3NGaWxlLT5hZGRGaXhhYmxlRXJyb3IoJGVycm9yLCAkdmFsdWVQb2ludGVyLCAnTm9Db21tYScpOwoKICAgICAgICAgICAgICAgIGlmICgkZml4ID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gRmluZCB0aGUgZW5kIG9mIHRoZSBsaW5lIGFuZCBwdXQgYSBjb21tYSB0aGVyZS4KICAgICAgICAgICAgICAgICAgICBmb3IgKCRpID0gKCR2YWx1ZVBvaW50ZXIgKyAxKTsgJGkgPD0gJGFycmF5RW5kOyAkaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdG9rZW5zWyRpXVsnbGluZSddID4gJHZhbHVlTGluZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICRwaHBjc0ZpbGUtPmZpeGVyLT5iZWdpbkNoYW5nZXNldCgpOwogICAgICAgICAgICAgICAgICAgICRwaHBjc0ZpbGUtPmZpeGVyLT5hZGRDb250ZW50QmVmb3JlKCgkaSAtIDEpLCAnLCcpOwogICAgICAgICAgICAgICAgICAgIGlmICgkbmV4dENvbW1hICE9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgICAgICAkcGhwY3NGaWxlLT5maXhlci0+cmVwbGFjZVRva2VuKCRuZXh0Q29tbWEsICcnKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICRwaHBjc0ZpbGUtPmZpeGVyLT5lbmRDaGFuZ2VzZXQoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfS8vZW5kIGlmCgogICAgICAgICAgICAvLyBDaGVjayB0aGF0IHRoZXJlIGlzIG5vIHNwYWNlIGJlZm9yZSB0aGUgY29tbWEuCiAgICAgICAgICAgIGlmICgkbmV4dENvbW1hICE9PSBmYWxzZSAmJiAkdG9rZW5zWygkbmV4dENvbW1hIC0gMSldWydjb2RlJ10gPT09IFRfV0hJVEVTUEFDRSkgewogICAgICAgICAgICAgICAgLy8gSGVyZS9ub3dkb2MgY2xvc2luZyB0YWdzIG11c3QgaGF2ZSB0aGUgY29tbWEgb24gdGhlIG5leHQgbGluZS4KICAgICAgICAgICAgICAgICRwcmV2ID0gJHBocGNzRmlsZS0+ZmluZFByZXZpb3VzKFRva2Vuczo6JGVtcHR5VG9rZW5zLCAoJG5leHRDb21tYSAtIDEpLCBudWxsLCB0cnVlKTsKICAgICAgICAgICAgICAgIGlmICgkdG9rZW5zWyRwcmV2XVsnY29kZSddICE9PSBUX0VORF9IRVJFRE9DICYmICR0b2tlbnNbJHByZXZdWydjb2RlJ10gIT09IFRfRU5EX05PV0RPQykgewogICAgICAgICAgICAgICAgICAgICRjb250ZW50ICAgICA9ICR0b2tlbnNbKCRuZXh0Q29tbWEgLSAyKV1bJ2NvbnRlbnQnXTsKICAgICAgICAgICAgICAgICAgICAkc3BhY2VMZW5ndGggPSAkdG9rZW5zWygkbmV4dENvbW1hIC0gMSldWydsZW5ndGgnXTsKICAgICAgICAgICAgICAgICAgICAkZXJyb3IgICAgICAgPSAnRXhwZWN0ZWQgMCBzcGFjZXMgYmV0d2VlbiAiJXMiIGFuZCBjb21tYTsgJXMgZm91bmQnOwogICAgICAgICAgICAgICAgICAgICRkYXRhICAgICAgICA9IFsKICAgICAgICAgICAgICAgICAgICAgICAgJGNvbnRlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICRzcGFjZUxlbmd0aCwKICAgICAgICAgICAgICAgICAgICBdOwoKICAgICAgICAgICAgICAgICAgICAkZml4ID0gJHBocGNzRmlsZS0+YWRkRml4YWJsZUVycm9yKCRlcnJvciwgJG5leHRDb21tYSwgJ1NwYWNlQmVmb3JlQ29tbWEnLCAkZGF0YSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRmaXggPT09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHBocGNzRmlsZS0+Zml4ZXItPnJlcGxhY2VUb2tlbigoJG5leHRDb21tYSAtIDEpLCAnJyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfS8vZW5kIGZvcmVhY2gKCiAgICB9Ly9lbmQgcHJvY2Vzc011bHRpTGluZUFycmF5KCkKCgp9Ly9lbmQgY2xhc3MKIjtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAG5hbWVzcGFjZXMiO2E6MTp7czo0NjoiXFBIUF9Db2RlU25pZmZlclxTdGFuZGFyZHNcU3F1aXpcU25pZmZzXEFycmF5cyI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjQ2OiJcUEhQX0NvZGVTbmlmZmVyXFN0YW5kYXJkc1xTcXVpelxTbmlmZnNcQXJyYXlzIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6NjoiQXJyYXlzIjt9fXM6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAaW5jbHVkZXMiO2E6MDp7fXM6NDQ6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEZpbGUAZnVuY3Rpb25zIjthOjA6e31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAGNvbnN0YW50cyI7YTowOnt9czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBjbGFzc2VzIjthOjE6e3M6Njg6IlxQSFBfQ29kZVNuaWZmZXJcU3RhbmRhcmRzXFNxdWl6XFNuaWZmc1xBcnJheXNcQXJyYXlEZWNsYXJhdGlvblNuaWZmIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXyI6MTM6e3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjY4OiJcUEhQX0NvZGVTbmlmZmVyXFN0YW5kYXJkc1xTcXVpelxTbmlmZnNcQXJyYXlzXEFycmF5RGVjbGFyYXRpb25TbmlmZiI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjIxOiJBcnJheURlY2xhcmF0aW9uU25pZmYiO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AZG9jQmxvY2siO047czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAHBhcmVudCI7TjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AaW1wbGVtZW50cyI7YToxOntzOjI5OiJcUEhQX0NvZGVTbmlmZmVyXFNuaWZmc1xTbmlmZiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjI5OiJcUEhQX0NvZGVTbmlmZmVyXFNuaWZmc1xTbmlmZiI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjU6IlNuaWZmIjt9fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBjb25zdGFudHMiO2E6MDp7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXENsYXNzXwBwcm9wZXJ0aWVzIjthOjA6e31zOjQ0OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AbWV0aG9kcyI7YTo0OntzOjgwOiJcUEhQX0NvZGVTbmlmZmVyXFN0YW5kYXJkc1xTcXVpelxTbmlmZnNcQXJyYXlzXEFycmF5RGVjbGFyYXRpb25TbmlmZjo6cmVnaXN0ZXIoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjEyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjU3OiJSZXR1cm5zIGFuIGFycmF5IG9mIHRva2VucyB0aGlzIHRlc3Qgd2FudHMgdG8gbGlzdGVuIGZvci4iO3M6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX1zOjM5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHRhZ3MiO2E6MTp7aTowO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFJldHVybl8iOjM6e3M6NzoiACoAdHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFycmF5XyI6Mzp7czoxMjoiACoAdmFsdWVUeXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcTWl4ZWRfIjowOnt9czoxMDoiACoAa2V5VHlwZSI7TjtzOjE3OiIAKgBkZWZhdWx0S2V5VHlwZSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbXBvdW5kIjoyOntzOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHR5cGVzIjthOjI6e2k6MDtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcU3RyaW5nXyI6MDp7fWk6MTtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fX1zOjUyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEFnZ3JlZ2F0ZWRUeXBlAHRva2VuIjtzOjE6InwiO319czo3OiIAKgBuYW1lIjtzOjY6InJldHVybiI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXENvbnRleHQiOjI6e3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcQ29udGV4dABuYW1lc3BhY2UiO3M6NDU6IlBIUF9Db2RlU25pZmZlclxTdGFuZGFyZHNcU3F1aXpcU25pZmZzXEFycmF5cyI7czo1NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xDb250ZXh0AG5hbWVzcGFjZUFsaWFzZXMiO2E6Mzp7czo0OiJGaWxlIjtzOjI2OiJQSFBfQ29kZVNuaWZmZXJcRmlsZXNcRmlsZSI7czo1OiJTbmlmZiI7czoyODoiUEhQX0NvZGVTbmlmZmVyXFNuaWZmc1xTbmlmZiI7czo2OiJUb2tlbnMiO3M6Mjc6IlBIUF9Db2RlU25pZmZlclxVdGlsXFRva2VucyI7fX1zOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjgwOiJcUEhQX0NvZGVTbmlmZmVyXFN0YW5kYXJkc1xTcXVpelxTbmlmZnNcQXJyYXlzXEFycmF5RGVjbGFyYXRpb25TbmlmZjo6cmVnaXN0ZXIoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjg6InJlZ2lzdGVyIjt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjA6e31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjI1O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABlbmRMb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MzI7czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBjb2x1bW5OdW1iZXIiO2k6MDt9czo0NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHJldHVyblR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xNaXhlZF8iOjA6e31zOjU3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAaGFzUmV0dXJuQnlSZWZlcmVuY2UiO2I6MDtzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbWV0YWRhdGEiO2E6MDp7fX1zOjc5OiJcUEhQX0NvZGVTbmlmZmVyXFN0YW5kYXJkc1xTcXVpelxTbmlmZnNcQXJyYXlzXEFycmF5RGVjbGFyYXRpb25TbmlmZjo6cHJvY2VzcygpIjtPOjM1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZCI6MTI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABkb2NCbG9jayI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrIjo3OntzOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAHN1bW1hcnkiO3M6NjA6IlByb2Nlc3NlcyB0aGlzIHNuaWZmLCB3aGVuIG9uZSBvZiBpdHMgdG9rZW5zIGlzIGVuY291bnRlcmVkLiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTozOntpOjA7Tzo0NDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUGFyYW0iOjY6e3M6NTg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbQB2YXJpYWJsZU5hbWUiO3M6OToicGhwY3NGaWxlIjtzOjU2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUGFyYW0AaXNWYXJpYWRpYyI7YjowO3M6NTc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbQBpc1JlZmVyZW5jZSI7YjowO3M6NzoiACoAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8iOjE6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjI3OiJcUEhQX0NvZGVTbmlmZmVyXEZpbGVzXEZpbGUiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo0OiJGaWxlIjt9fXM6NzoiACoAbmFtZSI7czo1OiJwYXJhbSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MzE6IlRoZSBjdXJyZW50IGZpbGUgYmVpbmcgY2hlY2tlZC4iO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjE7Tzo0NDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUGFyYW0iOjY6e3M6NTg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbQB2YXJpYWJsZU5hbWUiO3M6ODoic3RhY2tQdHIiO3M6NTY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbQBpc1ZhcmlhZGljIjtiOjA7czo1NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFBhcmFtAGlzUmVmZXJlbmNlIjtiOjA7czo3OiIAKgB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6NzoiACoAbmFtZSI7czo1OiJwYXJhbSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6NjU6IlRoZSBwb3NpdGlvbiBvZiB0aGUgY3VycmVudCB0b2tlbiBpbgp0aGUgc3RhY2sgcGFzc2VkIGluICR0b2tlbnMuIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aToyO086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFJldHVybl8iOjM6e3M6NzoiACoAdHlwZSI7TzozNjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFZvaWRfIjowOnt9czo3OiIAKgBuYW1lIjtzOjY6InJldHVybiI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo3NjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjc5OiJcUEhQX0NvZGVTbmlmZmVyXFN0YW5kYXJkc1xTcXVpelxTbmlmZnNcQXJyYXlzXEFycmF5RGVjbGFyYXRpb25TbmlmZjo6cHJvY2VzcygpIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6NzoicHJvY2VzcyI7fXM6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABhYnN0cmFjdCI7YjowO3M6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmaW5hbCI7YjowO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABzdGF0aWMiO2I6MDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAdmlzaWJpbGl0eSI7TzozOToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5IjoxOntzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxWaXNpYmlsaXR5AHZpc2liaWxpdHkiO3M6NjoicHVibGljIjt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFyZ3VtZW50cyI7YToyOntpOjA7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czo5OiJwaHBjc0ZpbGUiO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfIjoxOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8AZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czoyNzoiXFBIUF9Db2RlU25pZmZlclxGaWxlc1xGaWxlIjtzOjM2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAG5hbWUiO3M6NDoiRmlsZSI7fX1zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABkZWZhdWx0IjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGJ5UmVmZXJlbmNlIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAaXNWYXJpYWRpYyI7YjowO31pOjE7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czo4OiJzdGFja1B0ciI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE1peGVkXyI6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fX1zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjQ0O3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABlbmRMb2NhdGlvbiI7TzozMzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uIjoyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGxpbmVOdW1iZXIiO2k6MTMwO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AY29sdW1uTnVtYmVyIjtpOjA7fXM6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAByZXR1cm5UeXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcTWl4ZWRfIjowOnt9czo1NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGhhc1JldHVybkJ5UmVmZXJlbmNlIjtiOjA7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAG1ldGFkYXRhIjthOjA6e319czo5NDoiXFBIUF9Db2RlU25pZmZlclxTdGFuZGFyZHNcU3F1aXpcU25pZmZzXEFycmF5c1xBcnJheURlY2xhcmF0aW9uU25pZmY6OnByb2Nlc3NTaW5nbGVMaW5lQXJyYXkoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjEyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjQxOiJQcm9jZXNzZXMgYSBzaW5nbGUtbGluZSBhcnJheSBkZWZpbml0aW9uLiI7czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czowOiIiO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fXM6Mzk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAdGFncyI7YTo1OntpOjA7Tzo0NDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUGFyYW0iOjY6e3M6NTg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbQB2YXJpYWJsZU5hbWUiO3M6OToicGhwY3NGaWxlIjtzOjU2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUGFyYW0AaXNWYXJpYWRpYyI7YjowO3M6NTc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbQBpc1JlZmVyZW5jZSI7YjowO3M6NzoiACoAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE9iamVjdF8iOjE6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XwBmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjI3OiJcUEhQX0NvZGVTbmlmZmVyXEZpbGVzXEZpbGUiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czo0OiJGaWxlIjt9fXM6NzoiACoAbmFtZSI7czo1OiJwYXJhbSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MzE6IlRoZSBjdXJyZW50IGZpbGUgYmVpbmcgY2hlY2tlZC4iO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjE7Tzo0NDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUGFyYW0iOjY6e3M6NTg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbQB2YXJpYWJsZU5hbWUiO3M6ODoic3RhY2tQdHIiO3M6NTY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbQBpc1ZhcmlhZGljIjtiOjA7czo1NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFBhcmFtAGlzUmVmZXJlbmNlIjtiOjA7czo3OiIAKgB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6NzoiACoAbmFtZSI7czo1OiJwYXJhbSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6NjU6IlRoZSBwb3NpdGlvbiBvZiB0aGUgY3VycmVudCB0b2tlbgppbiB0aGUgc3RhY2sgcGFzc2VkIGluICR0b2tlbnMuIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aToyO086NDQ6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFBhcmFtIjo2OntzOjU4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUGFyYW0AdmFyaWFibGVOYW1lIjtzOjEwOiJhcnJheVN0YXJ0IjtzOjU2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUGFyYW0AaXNWYXJpYWRpYyI7YjowO3M6NTc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbQBpc1JlZmVyZW5jZSI7YjowO3M6NzoiACoAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e31zOjc6IgAqAG5hbWUiO3M6NToicGFyYW0iO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjQzOiJUaGUgdG9rZW4gdGhhdCBzdGFydHMgdGhlIGFycmF5IGRlZmluaXRpb24uIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aTozO086NDQ6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFBhcmFtIjo2OntzOjU4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUGFyYW0AdmFyaWFibGVOYW1lIjtzOjg6ImFycmF5RW5kIjtzOjU2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUGFyYW0AaXNWYXJpYWRpYyI7YjowO3M6NTc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbQBpc1JlZmVyZW5jZSI7YjowO3M6NzoiACoAdHlwZSI7TzozODoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXEludGVnZXIiOjA6e31zOjc6IgAqAG5hbWUiO3M6NToicGFyYW0iO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjQxOiJUaGUgdG9rZW4gdGhhdCBlbmRzIHRoZSBhcnJheSBkZWZpbml0aW9uLiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6NDtPOjQ2OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xSZXR1cm5fIjozOntzOjc6IgAqAHR5cGUiO086MzY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xWb2lkXyI6MDp7fXM6NzoiACoAbmFtZSI7czo2OiJyZXR1cm4iO3M6MTQ6IgAqAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fX1zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGNvbnRleHQiO3I6NzY7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBsb2NhdGlvbiI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGlzVGVtcGxhdGVTdGFydCI7YjowO3M6NDg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZUVuZCI7YjowO31zOjQyOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZnFzZW4iO086MzA6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbiI6Mjp7czozNzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBmcXNlbiI7czo5NDoiXFBIUF9Db2RlU25pZmZlclxTdGFuZGFyZHNcU3F1aXpcU25pZmZzXEFycmF5c1xBcnJheURlY2xhcmF0aW9uU25pZmY6OnByb2Nlc3NTaW5nbGVMaW5lQXJyYXkoKSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjIyOiJwcm9jZXNzU2luZ2xlTGluZUFycmF5Ijt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjQ6e2k6MDtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjk6InBocGNzRmlsZSI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE1peGVkXyI6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fWk6MTtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjg6InN0YWNrUHRyIjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcTWl4ZWRfIjowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9aToyO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQiOjU6e3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AG5hbWUiO3M6MTA6ImFycmF5U3RhcnQiO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xNaXhlZF8iOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABkZWZhdWx0IjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGJ5UmVmZXJlbmNlIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAaXNWYXJpYWRpYyI7YjowO31pOjM7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czo4OiJhcnJheUVuZCI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE1peGVkXyI6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fX1zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjE0NDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZW5kTG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjMwNDtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE1peGVkXyI6MDp7fXM6NTc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABoYXNSZXR1cm5CeVJlZmVyZW5jZSI7YjowO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABtZXRhZGF0YSI7YTowOnt9fXM6OTM6IlxQSFBfQ29kZVNuaWZmZXJcU3RhbmRhcmRzXFNxdWl6XFNuaWZmc1xBcnJheXNcQXJyYXlEZWNsYXJhdGlvblNuaWZmOjpwcm9jZXNzTXVsdGlMaW5lQXJyYXkoKSI7TzozNToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QiOjEyOntzOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZG9jQmxvY2siO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jayI6Nzp7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBzdW1tYXJ5IjtzOjQwOiJQcm9jZXNzZXMgYSBtdWx0aS1saW5lIGFycmF5IGRlZmluaXRpb24uIjtzOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGRlc2NyaXB0aW9uIjtPOjQ1OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24iOjI6e3M6NTk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AYm9keVRlbXBsYXRlIjtzOjA6IiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319czozOToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawB0YWdzIjthOjU6e2k6MDtPOjQ0OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbSI6Njp7czo1ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFBhcmFtAHZhcmlhYmxlTmFtZSI7czo5OiJwaHBjc0ZpbGUiO3M6NTY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbQBpc1ZhcmlhZGljIjtiOjA7czo1NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFBhcmFtAGlzUmVmZXJlbmNlIjtiOjA7czo3OiIAKgB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcT2JqZWN0XyI6MTp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xPYmplY3RfAGZxc2VuIjtPOjMwOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4iOjI6e3M6Mzc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AZnFzZW4iO3M6Mjc6IlxQSFBfQ29kZVNuaWZmZXJcRmlsZXNcRmlsZSI7czozNjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxGcXNlbgBuYW1lIjtzOjQ6IkZpbGUiO319czo3OiIAKgBuYW1lIjtzOjU6InBhcmFtIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czozMToiVGhlIGN1cnJlbnQgZmlsZSBiZWluZyBjaGVja2VkLiI7czo1MToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgB0YWdzIjthOjA6e319fWk6MTtPOjQ0OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbSI6Njp7czo1ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFBhcmFtAHZhcmlhYmxlTmFtZSI7czo4OiJzdGFja1B0ciI7czo1NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFBhcmFtAGlzVmFyaWFkaWMiO2I6MDtzOjU3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUGFyYW0AaXNSZWZlcmVuY2UiO2I6MDtzOjc6IgAqAHR5cGUiO086Mzg6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xJbnRlZ2VyIjowOnt9czo3OiIAKgBuYW1lIjtzOjU6InBhcmFtIjtzOjE0OiIAKgBkZXNjcmlwdGlvbiI7Tzo0NToicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uIjoyOntzOjU5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAGJvZHlUZW1wbGF0ZSI7czo2NToiVGhlIHBvc2l0aW9uIG9mIHRoZSBjdXJyZW50IHRva2VuCmluIHRoZSBzdGFjayBwYXNzZWQgaW4gJHRva2Vucy4iO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjI7Tzo0NDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUGFyYW0iOjY6e3M6NTg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbQB2YXJpYWJsZU5hbWUiO3M6MTA6ImFycmF5U3RhcnQiO3M6NTY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbQBpc1ZhcmlhZGljIjtiOjA7czo1NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFBhcmFtAGlzUmVmZXJlbmNlIjtiOjA7czo3OiIAKgB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6NzoiACoAbmFtZSI7czo1OiJwYXJhbSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6NDM6IlRoZSB0b2tlbiB0aGF0IHN0YXJ0cyB0aGUgYXJyYXkgZGVmaW5pdGlvbi4iO3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcRGVzY3JpcHRpb24AdGFncyI7YTowOnt9fX1pOjM7Tzo0NDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXFRhZ3NcUGFyYW0iOjY6e3M6NTg6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbQB2YXJpYWJsZU5hbWUiO3M6ODoiYXJyYXlFbmQiO3M6NTY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2tcVGFnc1xQYXJhbQBpc1ZhcmlhZGljIjtiOjA7czo1NzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFBhcmFtAGlzUmVmZXJlbmNlIjtiOjA7czo3OiIAKgB0eXBlIjtPOjM4OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcSW50ZWdlciI6MDp7fXM6NzoiACoAbmFtZSI7czo1OiJwYXJhbSI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6NDE6IlRoZSB0b2tlbiB0aGF0IGVuZHMgdGhlIGFycmF5IGRlZmluaXRpb24uIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19aTo0O086NDY6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xUYWdzXFJldHVybl8iOjM6e3M6NzoiACoAdHlwZSI7TzozNjoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXFZvaWRfIjowOnt9czo3OiIAKgBuYW1lIjtzOjY6InJldHVybiI7czoxNDoiACoAZGVzY3JpcHRpb24iO086NDU6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbiI6Mjp7czo1OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9ja1xEZXNjcmlwdGlvbgBib2R5VGVtcGxhdGUiO3M6MDoiIjtzOjUxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrXERlc2NyaXB0aW9uAHRhZ3MiO2E6MDp7fX19fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAY29udGV4dCI7cjo3NjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXERvY0Jsb2NrAGxvY2F0aW9uIjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRG9jQmxvY2sAaXNUZW1wbGF0ZVN0YXJ0IjtiOjA7czo0ODoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxEb2NCbG9jawBpc1RlbXBsYXRlRW5kIjtiOjA7fXM6NDI6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABmcXNlbiI7TzozMDoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuIjoyOntzOjM3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXEZxc2VuAGZxc2VuIjtzOjkzOiJcUEhQX0NvZGVTbmlmZmVyXFN0YW5kYXJkc1xTcXVpelxTbmlmZnNcQXJyYXlzXEFycmF5RGVjbGFyYXRpb25TbmlmZjo6cHJvY2Vzc011bHRpTGluZUFycmF5KCkiO3M6MzY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cRnFzZW4AbmFtZSI7czoyMToicHJvY2Vzc011bHRpTGluZUFycmF5Ijt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGFic3RyYWN0IjtiOjA7czo0MjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAGZpbmFsIjtiOjA7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcTWV0aG9kAHN0YXRpYyI7YjowO3M6NDc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZAB2aXNpYmlsaXR5IjtPOjM5OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkiOjE6e3M6NTE6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXFZpc2liaWxpdHkAdmlzaWJpbGl0eSI7czo2OiJwdWJsaWMiO31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAYXJndW1lbnRzIjthOjQ6e2k6MDtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjk6InBocGNzRmlsZSI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE1peGVkXyI6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fWk6MTtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50Ijo1OntzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABuYW1lIjtzOjg6InN0YWNrUHRyIjtzOjQzOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudAB0eXBlIjtPOjM3OiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cVHlwZXNcTWl4ZWRfIjowOnt9czo0NjoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAZGVmYXVsdCI7TjtzOjUwOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABieVJlZmVyZW5jZSI7YjowO3M6NDk6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGlzVmFyaWFkaWMiO2I6MDt9aToyO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQiOjU6e3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AG5hbWUiO3M6MTA6ImFycmF5U3RhcnQiO3M6NDM6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AHR5cGUiO086Mzc6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxUeXBlc1xNaXhlZF8iOjA6e31zOjQ2OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABkZWZhdWx0IjtOO3M6NTA6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGJ5UmVmZXJlbmNlIjtiOjA7czo0OToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAaXNWYXJpYWRpYyI7YjowO31pOjM7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudCI6NTp7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAbmFtZSI7czo4OiJhcnJheUVuZCI7czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAdHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE1peGVkXyI6MDp7fXM6NDY6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXEFyZ3VtZW50AGRlZmF1bHQiO047czo1MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQXJndW1lbnQAYnlSZWZlcmVuY2UiO2I6MDtzOjQ5OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxBcmd1bWVudABpc1ZhcmlhZGljIjtiOjA7fX1zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAbG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjMxODtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAZW5kTG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjg5MjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxNZXRob2QAcmV0dXJuVHlwZSI7TzozNzoicGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFR5cGVzXE1peGVkXyI6MDp7fXM6NTc6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABoYXNSZXR1cm5CeVJlZmVyZW5jZSI7YjowO3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cUGhwXE1ldGhvZABtZXRhZGF0YSI7YTowOnt9fX1zOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AdXNlZFRyYWl0cyI7YTowOnt9czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcQ2xhc3NfAGxvY2F0aW9uIjtPOjMzOiJwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24iOjI6e3M6NDU6IgBwaHBEb2N1bWVudG9yXFJlZmxlY3Rpb25cTG9jYXRpb24AbGluZU51bWJlciI7aToxNjtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ4OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AZW5kTG9jYXRpb24iO086MzM6InBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbiI6Mjp7czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxMb2NhdGlvbgBsaW5lTnVtYmVyIjtpOjg5NTtzOjQ3OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXExvY2F0aW9uAGNvbHVtbk51bWJlciI7aTowO31zOjQ1OiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxDbGFzc18AbWV0YWRhdGEiO2E6MDp7fX19czo0NToiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBpbnRlcmZhY2VzIjthOjA6e31zOjQxOiIAcGhwRG9jdW1lbnRvclxSZWZsZWN0aW9uXFBocFxGaWxlAHRyYWl0cyI7YTowOnt9czo0MDoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBlbnVtcyI7YTowOnt9czo0MzoiAHBocERvY3VtZW50b3JcUmVmbGVjdGlvblxQaHBcRmlsZQBtZXRhZGF0YSI7YTowOnt9fQ==";