JSUgLSotIGNvZGluZzogbGF0aW4tMSAtKi0KJSUgQ29weXJpZ2h0IChjKSAyMDExLTIwMTIgQmFzaG8gVGVjaG5vbG9naWVzLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgolJQolJSBUaGlzIGZpbGUgaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwKJSUgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlCiUlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbgolJSBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKJSUKJSUgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKJSUKJSUgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAolJSBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgolJSAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKJSUgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCiUlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKJSUgdW5kZXIgdGhlIExpY2Vuc2UuCgolJSBAZG9jIEZpbGUgYmFja2VuZCBmb3IgbGFnZXIsIHdpdGggbXVsdGlwbGUgZmlsZSBzdXBwb3J0LgolJSBNdWx0aXBsZSBmaWxlcyBhcmUgc3VwcG9ydGVkLCBlYWNoIHdpdGggdGhlIHBhdGggYW5kIHRoZSBsb2dsZXZlbCBiZWluZwolJSBjb25maWd1cmFibGUuIFRoZSBjb25maWd1cmF0aW9uIHBhcmFtdGVyIGZvciB0aGlzIGJhY2tlbmQgaXMgYSBsaXN0IG9mCiUlIGtleS12YWx1ZSAyLXR1cGxlcy4gU2VlIHRoZSBpbml0KCkgZnVuY3Rpb24gZm9yIHRoZSBhdmFpbGFibGUgb3B0aW9ucy4KJSUgVGhpcyBiYWNrZW5kIHN1cHBvcnRzIGV4dGVybmFsIGFuZCBpbnRlcm5hbCBsb2cKJSUgcm90YXRpb24gYW5kIHdpbGwgcmUtb3BlbiBoYW5kbGVzIHRvIGZpbGVzIGlmIHRoZSBpbm9kZSBjaGFuZ2VzLiBJdCB3aWxsCiUlIGFsc28gcm90YXRlIHRoZSBmaWxlcyBpdHNlbGYgaWYgdGhlIHNpemUgb2YgdGhlIGZpbGUgZXhjZWVkcyB0aGUKJSUgYHNpemUnIGFuZCBrZWVwIGBjb3VudCcgcm90YXRlZCBmaWxlcy4gYGRhdGUnIGlzCiUlIGFuIGFsdGVybmF0ZSByb3RhdGlvbiB0cmlnZ2VyLCBiYXNlZCBvbiB0aW1lLiBTZWUgdGhlIFJFQURNRSBmb3IKJSUgZG9jdW1lbnRhdGlvbi4KJSUgRm9yIHBlcmZvcm1hbmNlLCB0aGUgZmlsZSBiYWNrZW5kIGRvZXMgZGVsYXllZCB3cml0ZXMsIGFsdGhvdWdoIGl0IHdpbGwKJSUgc3luYyBhdCBzcGVjaWZpYyBsb2cgbGV2ZWxzLCBjb25maWd1cmVkIHZpYSB0aGUgYHN5bmNfb24nIG9wdGlvbi4gQnkgZGVmYXVsdAolJSB0aGUgZXJyb3IgbGV2ZWwgb3IgYWJvdmUgd2lsbCB0cmlnZ2VyIGEgc3luYy4KCi1tb2R1bGUobGFnZXJfZmlsZV9iYWNrZW5kKS4KCi1pbmNsdWRlKCJsYWdlci5ocmwiKS4KCi1iZWhhdmlvdXIoZ2VuX2V2ZW50KS4KCi1pZmRlZihURVNUKS4KLWluY2x1ZGVfbGliKCJldW5pdC9pbmNsdWRlL2V1bml0LmhybCIpLgotaW5jbHVkZV9saWIoImtlcm5lbC9pbmNsdWRlL2ZpbGUuaHJsIikuCi1jb21waWxlKFt7cGFyc2VfdHJhbnNmb3JtLCBsYWdlcl90cmFuc2Zvcm19XSkuCi1lbmRpZi4KCi1leHBvcnQoW2luaXQvMSwgaGFuZGxlX2NhbGwvMiwgaGFuZGxlX2V2ZW50LzIsIGhhbmRsZV9pbmZvLzIsIHRlcm1pbmF0ZS8yLAogICAgICAgIGNvZGVfY2hhbmdlLzNdKS4KCi1leHBvcnQoW2NvbmZpZ190b19pZC8xXSkuCgotZGVmaW5lKERFRkFVTFRfTE9HX0xFVkVMLCBpbmZvKS4KLWRlZmluZShERUZBVUxUX1JPVEFUSU9OX1NJWkUsIDEwNDg1NzYwKS4gJSUgMTBtYgotZGVmaW5lKERFRkFVTFRfUk9UQVRJT05fREFURSwgIiREMCIpLiAlJSBtaWRuaWdodAotZGVmaW5lKERFRkFVTFRfUk9UQVRJT05fQ09VTlQsIDUpLgotZGVmaW5lKERFRkFVTFRfU1lOQ19MRVZFTCwgZXJyb3IpLgotZGVmaW5lKERFRkFVTFRfU1lOQ19JTlRFUlZBTCwgMTAwMCkuCi1kZWZpbmUoREVGQVVMVF9TWU5DX1NJWkUsIDEwMjQqNjQpLiAlJSA2NGtiCi1kZWZpbmUoREVGQVVMVF9DSEVDS19JTlRFUlZBTCwgMTAwMCkuCgotcmVjb3JkKHN0YXRlLCB7CiAgICAgICAgbmFtZSA6OiBzdHJpbmcoKSwKICAgICAgICBsZXZlbCA6OiB7J21hc2snLCBpbnRlZ2VyKCl9LAogICAgICAgIGZkIDo6IGZpbGU6aW9fZGV2aWNlKCksCiAgICAgICAgaW5vZGUgOjogaW50ZWdlcigpLAogICAgICAgIGZsYXA9ZmFsc2UgOjogYm9vbGVhbigpLAogICAgICAgIHNpemUgPSAwIDo6IGludGVnZXIoKSwKICAgICAgICBkYXRlIDo6IHVuZGVmaW5lZCB8IHN0cmluZygpLAogICAgICAgIGNvdW50ID0gMTAgOjogaW50ZWdlcigpLAogICAgICAgIGZvcm1hdHRlciA6OiBhdG9tKCksCiAgICAgICAgZm9ybWF0dGVyX2NvbmZpZyA6OiBhbnkoKSwKICAgICAgICBzeW5jX29uIDo6IHsnbWFzaycsIGludGVnZXIoKX0sCiAgICAgICAgY2hlY2tfaW50ZXJ2YWwgPSA/REVGQVVMVF9DSEVDS19JTlRFUlZBTCA6OiBub25fbmVnX2ludGVnZXIoKSwKICAgICAgICBzeW5jX2ludGVydmFsID0gP0RFRkFVTFRfU1lOQ19JTlRFUlZBTCA6OiBub25fbmVnX2ludGVnZXIoKSwKICAgICAgICBzeW5jX3NpemUgPSA/REVGQVVMVF9TWU5DX1NJWkUgOjogbm9uX25lZ19pbnRlZ2VyKCksCiAgICAgICAgbGFzdF9jaGVjayA9IG9zOnRpbWVzdGFtcCgpIDo6IGVybGFuZzp0aW1lc3RhbXAoKQogICAgfSkuCgotdHlwZSBvcHRpb24oKSA6OiB7ZmlsZSwgc3RyaW5nKCl9IHwge2xldmVsLCBsYWdlcjpsb2dfbGV2ZWwoKX0gfAogICAgICAgICAgICAgICAgICB7c2l6ZSwgbm9uX25lZ19pbnRlZ2VyKCl9IHwge2RhdGUsIHN0cmluZygpfSB8CiAgICAgICAgICAgICAgICAgIHtjb3VudCwgbm9uX25lZ19pbnRlZ2VyKCl9IHwge3N5bmNfaW50ZXJ2YWwsIG5vbl9uZWdfaW50ZWdlcigpfSB8CiAgICAgICAgICAgICAgICAgIHtzeW5jX3NpemUsIG5vbl9uZWdfaW50ZWdlcigpfSB8IHtzeW5jX29uLCBsYWdlcjpsb2dfbGV2ZWwoKX0gfAogICAgICAgICAgICAgICAgICB7Y2hlY2tfaW50ZXJ2YWwsIG5vbl9uZWdfaW50ZWdlcigpfSB8IHtmb3JtYXR0ZXIsIGF0b20oKX0gfAogICAgICAgICAgICAgICAgICB7Zm9ybWF0dGVyX2NvbmZpZywgdGVybSgpfS4KCi1zcGVjIGluaXQoW29wdGlvbigpLC4uLl0pIC0+IHtvaywgI3N0YXRle319IHwge2Vycm9yLCBiYWRfY29uZmlnfS4KaW5pdCh7RmlsZU5hbWUsIExvZ0xldmVsfSkgd2hlbiBpc19saXN0KEZpbGVOYW1lKSwgaXNfYXRvbShMb2dMZXZlbCkgLT4KICAgICUlIGJhY2t3YXJkcyBjb21wYXRhYmlsaXR5IGhhY2sKICAgIGluaXQoW3tmaWxlLCBGaWxlTmFtZX0sIHtsZXZlbCwgTG9nTGV2ZWx9XSk7CmluaXQoe0ZpbGVOYW1lLCBMb2dMZXZlbCwgU2l6ZSwgRGF0ZSwgQ291bnR9KSB3aGVuIGlzX2xpc3QoRmlsZU5hbWUpLCBpc19hdG9tKExvZ0xldmVsKSAtPgogICAgJSUgYmFja3dhcmRzIGNvbXBhdGFiaWxpdHkgaGFjawogICAgaW5pdChbe2ZpbGUsIEZpbGVOYW1lfSwge2xldmVsLCBMb2dMZXZlbH0sIHtzaXplLCBTaXplfSwge2RhdGUsIERhdGV9LCB7Y291bnQsIENvdW50fV0pOwppbml0KFt7RmlsZU5hbWUsIExvZ0xldmVsLCBTaXplLCBEYXRlLCBDb3VudH0sIHtGb3JtYXR0ZXIsRm9ybWF0dGVyQ29uZmlnfV0pIHdoZW4gaXNfbGlzdChGaWxlTmFtZSksIGlzX2F0b20oTG9nTGV2ZWwpLCBpc19hdG9tKEZvcm1hdHRlcikgLT4KICAgICUlIGJhY2t3YXJkcyBjb21wYXRhYmlsaXR5IGhhY2sKICAgIGluaXQoW3tmaWxlLCBGaWxlTmFtZX0sIHtsZXZlbCwgTG9nTGV2ZWx9LCB7c2l6ZSwgU2l6ZX0sIHtkYXRlLCBEYXRlfSwge2NvdW50LCBDb3VudH0sIHtmb3JtYXR0ZXIsIEZvcm1hdHRlcn0sIHtmb3JtYXR0ZXJfY29uZmlnLCBGb3JtYXR0ZXJDb25maWd9XSk7CmluaXQoW0xvZ0ZpbGUse0Zvcm1hdHRlcn1dKSAtPgogICAgJSUgYmFja3dhcmRzIGNvbXBhdGFiaWxpdHkgaGFjawogICAgaW5pdChbTG9nRmlsZSx7Rm9ybWF0dGVyLFtdfV0pOwppbml0KFt7RmlsZU5hbWUsIExvZ0xldmVsfSwge0Zvcm1hdHRlcixGb3JtYXR0ZXJDb25maWd9XSkgd2hlbiBpc19saXN0KEZpbGVOYW1lKSwgaXNfYXRvbShMb2dMZXZlbCksIGlzX2F0b20oRm9ybWF0dGVyKSAtPgogICAgJSUgYmFja3dhcmRzIGNvbXBhdGFiaWxpdHkgaGFjawogICAgaW5pdChbe2ZpbGUsIEZpbGVOYW1lfSwge2xldmVsLCBMb2dMZXZlbH0sIHtmb3JtYXR0ZXIsIEZvcm1hdHRlcn0sIHtmb3JtYXR0ZXJfY29uZmlnLCBGb3JtYXR0ZXJDb25maWd9XSk7CmluaXQoTG9nRmlsZUNvbmZpZykgd2hlbiBpc19saXN0KExvZ0ZpbGVDb25maWcpIC0+CiAgICBjYXNlIHZhbGlkYXRlX2xvZ2ZpbGVfcHJvcGxpc3QoTG9nRmlsZUNvbmZpZykgb2YKICAgICAgICBmYWxzZSAtPgogICAgICAgICAgICAlJSBmYWxpZWQgdG8gdmFsaWRhdGUgY29uZmlnCiAgICAgICAgICAgIHtlcnJvciwge2ZhdGFsLCBiYWRfY29uZmlnfX07CiAgICAgICAgQ29uZmlnIC0+CiAgICAgICAgICAgICUlIHByb2JhYmFibHkgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMsIGJ1dCB3aGF0ZXZlcgogICAgICAgICAgICBbTmFtZSwgTGV2ZWwsIERhdGUsIFNpemUsIENvdW50LCBTeW5jSW50ZXJ2YWwsIFN5bmNTaXplLCBTeW5jT24sIENoZWNrSW50ZXJ2YWwsIEZvcm1hdHRlciwgRm9ybWF0dGVyQ29uZmlnXSA9CiAgICAgICAgICAgICAgW3Byb3BsaXN0czpnZXRfdmFsdWUoS2V5LCBDb25maWcpIHx8IEtleSA8LSBbZmlsZSwgbGV2ZWwsIGRhdGUsIHNpemUsIGNvdW50LCBzeW5jX2ludGVydmFsLCBzeW5jX3NpemUsIHN5bmNfb24sIGNoZWNrX2ludGVydmFsLCBmb3JtYXR0ZXIsIGZvcm1hdHRlcl9jb25maWddXSwKICAgICAgICAgICAgc2NoZWR1bGVfcm90YXRpb24oTmFtZSwgRGF0ZSksCiAgICAgICAgICAgIFN0YXRlMCA9ICNzdGF0ZXtuYW1lPU5hbWUsIGxldmVsPUxldmVsLCBzaXplPVNpemUsIGRhdGU9RGF0ZSwgY291bnQ9Q291bnQsIGZvcm1hdHRlcj1Gb3JtYXR0ZXIsCiAgICAgICAgICAgICAgICBmb3JtYXR0ZXJfY29uZmlnPUZvcm1hdHRlckNvbmZpZywgc3luY19vbj1TeW5jT24sIHN5bmNfaW50ZXJ2YWw9U3luY0ludGVydmFsLCBzeW5jX3NpemU9U3luY1NpemUsCiAgICAgICAgICAgICAgICBjaGVja19pbnRlcnZhbD1DaGVja0ludGVydmFsfSwKICAgICAgICAgICAgU3RhdGUgPSBjYXNlIGxhZ2VyX3V0aWw6b3Blbl9sb2dmaWxlKE5hbWUsIHtTeW5jU2l6ZSwgU3luY0ludGVydmFsfSkgb2YKICAgICAgICAgICAgICAgIHtvaywge0ZELCBJbm9kZSwgX319IC0+CiAgICAgICAgICAgICAgICAgICAgU3RhdGUwI3N0YXRle2ZkPUZELCBpbm9kZT1Jbm9kZX07CiAgICAgICAgICAgICAgICB7ZXJyb3IsIFJlYXNvbn0gLT4KICAgICAgICAgICAgICAgICAgICA/SU5UX0xPRyhlcnJvciwgIkZhaWxlZCB0byBvcGVuIGxvZyBmaWxlIH5zIHdpdGggZXJyb3IgfnMiLCBbTmFtZSwgZmlsZTpmb3JtYXRfZXJyb3IoUmVhc29uKV0pLAogICAgICAgICAgICAgICAgICAgIFN0YXRlMCNzdGF0ZXtmbGFwPXRydWV9CiAgICAgICAgICAgIGVuZCwKICAgICAgICAgICAge29rLCBTdGF0ZX0KICAgIGVuZC4KCiUlIEBwcml2YXRlCmhhbmRsZV9jYWxsKHtzZXRfbG9nbGV2ZWwsIExldmVsfSwgI3N0YXRle25hbWU9SWRlbnR9ID0gU3RhdGUpIC0+CiAgICBjYXNlIHZhbGlkYXRlX2xvZ2xldmVsKExldmVsKSBvZgogICAgICAgIGZhbHNlIC0+CiAgICAgICAgICAgIHtvaywge2Vycm9yLCBiYWRfbG9nbGV2ZWx9LCBTdGF0ZX07CiAgICAgICAgTGV2ZWxzIC0+CiAgICAgICAgICAgID9JTlRfTE9HKG5vdGljZSwgIkNoYW5nZWQgbG9nbGV2ZWwgb2YgfnMgdG8gfnAiLCBbSWRlbnQsIExldmVsXSksCiAgICAgICAgICAgIHtvaywgb2ssIFN0YXRlI3N0YXRle2xldmVsPUxldmVsc319CiAgICBlbmQ7CmhhbmRsZV9jYWxsKGdldF9sb2dsZXZlbCwgI3N0YXRle2xldmVsPUxldmVsfSA9IFN0YXRlKSAtPgogICAge29rLCBMZXZlbCwgU3RhdGV9OwpoYW5kbGVfY2FsbChfUmVxdWVzdCwgU3RhdGUpIC0+CiAgICB7b2ssIG9rLCBTdGF0ZX0uCgolJSBAcHJpdmF0ZQpoYW5kbGVfZXZlbnQoe2xvZywgTWVzc2FnZX0sCiAgICAjc3RhdGV7bmFtZT1OYW1lLCBsZXZlbD1MLGZvcm1hdHRlcj1Gb3JtYXR0ZXIsZm9ybWF0dGVyX2NvbmZpZz1Gb3JtYXRDb25maWd9ID0gU3RhdGUpIC0+CiAgICBjYXNlIGxhZ2VyX3V0aWw6aXNfbG9nZ2FibGUoTWVzc2FnZSxMLHtsYWdlcl9maWxlX2JhY2tlbmQsIE5hbWV9KSBvZgogICAgICAgIHRydWUgLT4KICAgICAgICAgICAge29rLHdyaXRlKFN0YXRlLCBsYWdlcl9tc2c6dGltZXN0YW1wKE1lc3NhZ2UpLCBsYWdlcl9tc2c6c2V2ZXJpdHlfYXNfaW50KE1lc3NhZ2UpLCBGb3JtYXR0ZXI6Zm9ybWF0KE1lc3NhZ2UsRm9ybWF0Q29uZmlnKSkgfTsKICAgICAgICBmYWxzZSAtPgogICAgICAgICAgICB7b2ssIFN0YXRlfQogICAgZW5kOwpoYW5kbGVfZXZlbnQoX0V2ZW50LCBTdGF0ZSkgLT4KICAgIHtvaywgU3RhdGV9LgoKJSUgQHByaXZhdGUKaGFuZGxlX2luZm8oe3JvdGF0ZSwgRmlsZX0sICNzdGF0ZXtuYW1lPUZpbGUsY291bnQ9Q291bnQsZGF0ZT1EYXRlfSA9IFN0YXRlKSAtPgogICAgXyA9IGxhZ2VyX3V0aWw6cm90YXRlX2xvZ2ZpbGUoRmlsZSwgQ291bnQpLAogICAgc2NoZWR1bGVfcm90YXRpb24oRmlsZSwgRGF0ZSksCiAgICB7b2ssIFN0YXRlfTsKaGFuZGxlX2luZm8oX0luZm8sIFN0YXRlKSAtPgogICAge29rLCBTdGF0ZX0uCgolJSBAcHJpdmF0ZQp0ZXJtaW5hdGUoX1JlYXNvbiwgI3N0YXRle2ZkPUZEfSkgLT4KICAgICUlIGZsdXNoIGFuZCBjbG9zZSBhbnkgZmlsZSBoYW5kbGVzCiAgICBfID0gZmlsZTpkYXRhc3luYyhGRCksCiAgICBfID0gZmlsZTpjbG9zZShGRCksCiAgICBvay4KCiUlIEBwcml2YXRlCmNvZGVfY2hhbmdlKF9PbGRWc24sIFN0YXRlLCBfRXh0cmEpIC0+CiAgICB7b2ssIFN0YXRlfS4KCiUlIEBwcml2YXRlIGNvbnZlcnQgdGhlIGNvbmZpZyBpbnRvIGEgZ2VuX2V2ZW50IGhhbmRsZXIgSUQKY29uZmlnX3RvX2lkKHtOYW1lLF9TZXZlcml0eX0pIHdoZW4gaXNfbGlzdChOYW1lKSAtPgogICAgez9NT0RVTEUsIE5hbWV9Owpjb25maWdfdG9faWQoe05hbWUsX1NldmVyaXR5LF9TaXplLF9Sb3RhdGlvbixfQ291bnR9KSAtPgogICAgez9NT0RVTEUsIE5hbWV9Owpjb25maWdfdG9faWQoW3tOYW1lLF9TZXZlcml0eSxfU2l6ZSxfUm90YXRpb24sX0NvdW50fSwgX0Zvcm1hdF0pIC0+CiAgICB7P01PRFVMRSwgTmFtZX07CmNvbmZpZ190b19pZChbe05hbWUsX1NldmVyaXR5fSwgX0Zvcm1hdF0pIHdoZW4gaXNfbGlzdChOYW1lKSAtPgogICAgez9NT0RVTEUsIE5hbWV9Owpjb25maWdfdG9faWQoQ29uZmlnKSAtPgogICAgY2FzZSBwcm9wbGlzdHM6Z2V0X3ZhbHVlKGZpbGUsIENvbmZpZykgb2YKICAgICAgICB1bmRlZmluZWQgLT4KICAgICAgICAgICAgZXJsYW5nOmVycm9yKG5vX2ZpbGUpOwogICAgICAgIEZpbGUgLT4KICAgICAgICAgICAgez9NT0RVTEUsIEZpbGV9CiAgICBlbmQuCgoKd3JpdGUoI3N0YXRle25hbWU9TmFtZSwgZmQ9RkQsIGlub2RlPUlub2RlLCBmbGFwPUZsYXAsIHNpemU9Um90U2l6ZSwKICAgICAgICBjb3VudD1Db3VudH0gPSBTdGF0ZSwgVGltZXN0YW1wLCBMZXZlbCwgTXNnKSAtPgogICAgTGFzdENoZWNrID0gdGltZXI6bm93X2RpZmYoVGltZXN0YW1wLCBTdGF0ZSNzdGF0ZS5sYXN0X2NoZWNrKSBkaXYgMTAwMCwKICAgIGNhc2UgTGFzdENoZWNrID49IFN0YXRlI3N0YXRlLmNoZWNrX2ludGVydmFsIG9yZWxzZSBGRCA9PSB1bmRlZmluZWQgb2YKICAgICAgICB0cnVlIC0+CiAgICAgICAgICAgICUlIG5lZWQgdG8gY2hlY2sgZm9yIHJvdGF0aW9uCiAgICAgICAgICAgIGNhc2UgbGFnZXJfdXRpbDplbnN1cmVfbG9nZmlsZShOYW1lLCBGRCwgSW5vZGUsIHtTdGF0ZSNzdGF0ZS5zeW5jX3NpemUsIFN0YXRlI3N0YXRlLnN5bmNfaW50ZXJ2YWx9KSBvZgogICAgICAgICAgICAgICAge29rLCB7XywgXywgU2l6ZX19IHdoZW4gUm90U2l6ZSAvPSAwLCBTaXplID4gUm90U2l6ZSAtPgogICAgICAgICAgICAgICAgICAgIGNhc2UgbGFnZXJfdXRpbDpyb3RhdGVfbG9nZmlsZShOYW1lLCBDb3VudCkgb2YKICAgICAgICAgICAgICAgICAgICAgICAgb2sgLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICUlIGdvIGFyb3VuZCB0aGUgbG9vcCBhZ2Fpbiwgd2UnbGwgZG8gYW5vdGhlciByb3RhdGlvbiBjaGVjayBhbmQgaGl0IHRoZSBuZXh0IGNsYXVzZSBvZiBlbnN1cmVfbG9nZmlsZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUoU3RhdGUsIFRpbWVzdGFtcCwgTGV2ZWwsIE1zZyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHtlcnJvciwgUmVhc29ufSAtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBGbGFwIG9mCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSAtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfIC0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID9JTlRfTE9HKGVycm9yLCAiRmFpbGVkIHRvIHJvdGF0ZSBsb2cgZmlsZSB+cyB3aXRoIGVycm9yIH5zIiwgW05hbWUsIGZpbGU6Zm9ybWF0X2Vycm9yKFJlYXNvbildKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUjc3RhdGV7ZmxhcD10cnVlfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICAgICAgICAgZW5kOwogICAgICAgICAgICAgICAge29rLCB7TmV3RkQsIE5ld0lub2RlLCBffX0gLT4KICAgICAgICAgICAgICAgICAgICAlJSB1cGRhdGUgb3VyIGxhc3QgY2hlY2sgYW5kIHRyeSBhZ2FpbgogICAgICAgICAgICAgICAgICAgIGRvX3dyaXRlKFN0YXRlI3N0YXRle2xhc3RfY2hlY2s9VGltZXN0YW1wLCBmZD1OZXdGRCwgaW5vZGU9TmV3SW5vZGV9LCBMZXZlbCwgTXNnKTsKICAgICAgICAgICAgICAgIHtlcnJvciwgUmVhc29ufSAtPgogICAgICAgICAgICAgICAgICAgIGNhc2UgRmxhcCBvZgogICAgICAgICAgICAgICAgICAgICAgICB0cnVlIC0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZTsKICAgICAgICAgICAgICAgICAgICAgICAgXyAtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgP0lOVF9MT0coZXJyb3IsICJGYWlsZWQgdG8gcmVvcGVuIGxvZyBmaWxlIH5zIHdpdGggZXJyb3IgfnMiLCBbTmFtZSwgZmlsZTpmb3JtYXRfZXJyb3IoUmVhc29uKV0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUjc3RhdGV7ZmxhcD10cnVlfQogICAgICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICBlbmQ7CiAgICAgICAgZmFsc2UgLT4KICAgICAgICAgICAgZG9fd3JpdGUoU3RhdGUsIExldmVsLCBNc2cpCiAgICBlbmQuCgpkb193cml0ZSgjc3RhdGV7ZmQ9RkQsIG5hbWU9TmFtZSwgZmxhcD1GbGFwfSA9IFN0YXRlLCBMZXZlbCwgTXNnKSAtPgogICAgJSUgZGVsYXllZF93cml0ZSBkb2Vzbid0IHJlcG9ydCBlcnJvcnMKICAgIF8gPSBmaWxlOndyaXRlKEZELCB1bmljb2RlOmNoYXJhY3RlcnNfdG9fYmluYXJ5KE1zZykpLAogICAge21hc2ssIFN5bmNMZXZlbH0gPSBTdGF0ZSNzdGF0ZS5zeW5jX29uLAogICAgY2FzZSAoTGV2ZWwgYmFuZCBTeW5jTGV2ZWwpIC89IDAgb2YKICAgICAgICB0cnVlIC0+CiAgICAgICAgICAgICUlIGZvcmNlIGEgc3luYyBvbiBhbnkgbWVzc2FnZSB0aGF0IG1hdGNoZXMgdGhlICdzeW5jX29uJyBiaXRtYXNrCiAgICAgICAgICAgIEZsYXAyID0gY2FzZSBmaWxlOmRhdGFzeW5jKEZEKSBvZgogICAgICAgICAgICAgICAge2Vycm9yLCBSZWFzb24yfSB3aGVuIEZsYXAgPT0gZmFsc2UgLT4KICAgICAgICAgICAgICAgICAgICA/SU5UX0xPRyhlcnJvciwgIkZhaWxlZCB0byB3cml0ZSBsb2cgbWVzc2FnZSB0byBmaWxlIH5zOiB+cyIsCiAgICAgICAgICAgICAgICAgICAgICAgIFtOYW1lLCBmaWxlOmZvcm1hdF9lcnJvcihSZWFzb24yKV0pLAogICAgICAgICAgICAgICAgICAgIHRydWU7CiAgICAgICAgICAgICAgICBvayAtPgogICAgICAgICAgICAgICAgICAgIGZhbHNlOwogICAgICAgICAgICAgICAgXyAtPgogICAgICAgICAgICAgICAgICAgIEZsYXAKICAgICAgICAgICAgZW5kLAogICAgICAgICAgICBTdGF0ZSNzdGF0ZXtmbGFwPUZsYXAyfTsKICAgICAgICBfIC0+IAogICAgICAgICAgICBTdGF0ZQogICAgZW5kLgoKdmFsaWRhdGVfbG9nbGV2ZWwoTGV2ZWwpIC0+CiAgICB0cnkgbGFnZXJfdXRpbDpjb25maWdfdG9fbWFzayhMZXZlbCkgb2YKICAgICAgICBMZXZlbHMgLT4KICAgICAgICAgICAgTGV2ZWxzCiAgICBjYXRjaAogICAgICAgIF86XyAtPgogICAgICAgICAgICBmYWxzZQogICAgZW5kLgoKdmFsaWRhdGVfbG9nZmlsZV9wcm9wbGlzdChMaXN0KSAtPgogICAgdHJ5IHZhbGlkYXRlX2xvZ2ZpbGVfcHJvcGxpc3QoTGlzdCwgW10pIG9mCiAgICAgICAgUmVzIC0+CiAgICAgICAgICAgIGNhc2UgcHJvcGxpc3RzOmdldF92YWx1ZShmaWxlLCBSZXMpIG9mCiAgICAgICAgICAgICAgICB1bmRlZmluZWQgLT4KICAgICAgICAgICAgICAgICAgICA/SU5UX0xPRyhlcnJvciwgIk1pc3NpbmcgcmVxdWlyZWQgZmlsZSBvcHRpb24iLCBbXSksCiAgICAgICAgICAgICAgICAgICAgZmFsc2U7CiAgICAgICAgICAgICAgICBfRmlsZSAtPgogICAgICAgICAgICAgICAgICAgICUlIG1lcmdlIHdpdGggdGhlIGRlZmF1bHQgb3B0aW9ucwogICAgICAgICAgICAgICAgICAgIHtvaywgRGVmYXVsdFJvdGF0aW9uRGF0ZX0gPSBsYWdlcl91dGlsOnBhcnNlX3JvdGF0aW9uX2RhdGVfc3BlYyg/REVGQVVMVF9ST1RBVElPTl9EQVRFKSwKICAgICAgICAgICAgICAgICAgICBsaXN0czprZXltZXJnZSgxLCBsaXN0czpzb3J0KFJlcyksIGxpc3RzOnNvcnQoWwogICAgICAgICAgICAgICAgICAgICAgICAgICAge2xldmVsLCB2YWxpZGF0ZV9sb2dsZXZlbCg/REVGQVVMVF9MT0dfTEVWRUwpfSwge2RhdGUsIERlZmF1bHRSb3RhdGlvbkRhdGV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAge3NpemUsID9ERUZBVUxUX1JPVEFUSU9OX1NJWkV9LCB7Y291bnQsID9ERUZBVUxUX1JPVEFUSU9OX0NPVU5UfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzeW5jX29uLCB2YWxpZGF0ZV9sb2dsZXZlbCg/REVGQVVMVF9TWU5DX0xFVkVMKX0sIHtzeW5jX2ludGVydmFsLCA/REVGQVVMVF9TWU5DX0lOVEVSVkFMfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzeW5jX3NpemUsID9ERUZBVUxUX1NZTkNfU0laRX0sIHtjaGVja19pbnRlcnZhbCwgP0RFRkFVTFRfQ0hFQ0tfSU5URVJWQUx9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAge2Zvcm1hdHRlciwgbGFnZXJfZGVmYXVsdF9mb3JtYXR0ZXJ9LCB7Zm9ybWF0dGVyX2NvbmZpZywgW119CiAgICAgICAgICAgICAgICAgICAgICAgIF0pKQogICAgICAgICAgICBlbmQKICAgIGNhdGNoCiAgICAgICAge2JhZF9jb25maWcsIE1zZywgVmFsdWV9IC0+CiAgICAgICAgICAgID9JTlRfTE9HKGVycm9yLCAifnMgfnAgZm9yIGZpbGUgfnAiLAogICAgICAgICAgICAgICAgW01zZywgVmFsdWUsIHByb3BsaXN0czpnZXRfdmFsdWUoZmlsZSwgTGlzdCldKSwKICAgICAgICAgICAgZmFsc2UKICAgIGVuZC4KCnZhbGlkYXRlX2xvZ2ZpbGVfcHJvcGxpc3QoW10sIEFjYykgLT4KICAgIEFjYzsKdmFsaWRhdGVfbG9nZmlsZV9wcm9wbGlzdChbe2ZpbGUsIEZpbGV9fFRhaWxdLCBBY2MpIC0+CiAgICAlJSBpcyB0aGVyZSBhbnkgcmVhc29uYWJsZSB2YWxpZGF0aW9uIHdlIGNhbiBkbyBoZXJlPwogICAgdmFsaWRhdGVfbG9nZmlsZV9wcm9wbGlzdChUYWlsLCBbe2ZpbGUsIEZpbGV9fEFjY10pOwp2YWxpZGF0ZV9sb2dmaWxlX3Byb3BsaXN0KFt7bGV2ZWwsIExldmVsfXxUYWlsXSwgQWNjKSAtPgogICAgY2FzZSB2YWxpZGF0ZV9sb2dsZXZlbChMZXZlbCkgb2YKICAgICAgICBmYWxzZSAtPgogICAgICAgICAgICB0aHJvdyh7YmFkX2NvbmZpZywgIkludmFsaWQgbG9nbGV2ZWwiLCBMZXZlbH0pOwogICAgICAgIFJlcyAtPgogICAgICAgICAgICB2YWxpZGF0ZV9sb2dmaWxlX3Byb3BsaXN0KFRhaWwsIFt7bGV2ZWwsIFJlc318QWNjXSkKICAgIGVuZDsKdmFsaWRhdGVfbG9nZmlsZV9wcm9wbGlzdChbe3NpemUsIFNpemV9fFRhaWxdLCBBY2MpIC0+CiAgICBjYXNlIFNpemUgb2YKICAgICAgICBTIHdoZW4gaXNfaW50ZWdlcihTKSwgUyA+PSAwIC0+CiAgICAgICAgICAgIHZhbGlkYXRlX2xvZ2ZpbGVfcHJvcGxpc3QoVGFpbCwgW3tzaXplLCBTaXplfXxBY2NdKTsKICAgICAgICBfIC0+CiAgICAgICAgICAgIHRocm93KHtiYWRfY29uZmlnLCAiSW52YWxpZCByb3RhdGlvbiBzaXplIiwgU2l6ZX0pCiAgICBlbmQ7CnZhbGlkYXRlX2xvZ2ZpbGVfcHJvcGxpc3QoW3tjb3VudCwgQ291bnR9fFRhaWxdLCBBY2MpIC0+CiAgICBjYXNlIENvdW50IG9mCiAgICAgICAgQyB3aGVuIGlzX2ludGVnZXIoQyksIEMgPj0gMCAtPgogICAgICAgICAgICB2YWxpZGF0ZV9sb2dmaWxlX3Byb3BsaXN0KFRhaWwsIFt7Y291bnQsIENvdW50fXxBY2NdKTsKICAgICAgICBfIC0+CiAgICAgICAgICAgIHRocm93KHtiYWRfY29uZmlnLCAiSW52YWxpZCByb3RhdGlvbiBjb3VudCIsIENvdW50fSkKICAgIGVuZDsKdmFsaWRhdGVfbG9nZmlsZV9wcm9wbGlzdChbe2RhdGUsIERhdGV9fFRhaWxdLCBBY2MpIC0+CiAgICBjYXNlIGxhZ2VyX3V0aWw6cGFyc2Vfcm90YXRpb25fZGF0ZV9zcGVjKERhdGUpIG9mCiAgICAgICAge29rLCBTcGVjfSAtPgogICAgICAgICAgICB2YWxpZGF0ZV9sb2dmaWxlX3Byb3BsaXN0KFRhaWwsIFt7ZGF0ZSwgU3BlY318QWNjXSk7CiAgICAgICAge2Vycm9yLCBffSB3aGVuIERhdGUgPT0gIiIgLT4KICAgICAgICAgICAgJSUgbGVnYWN5IGNvbmZpZyBhbGxvd2VkIGJsYW5rcwogICAgICAgICAgICB2YWxpZGF0ZV9sb2dmaWxlX3Byb3BsaXN0KFRhaWwsIFt7ZGF0ZSwgdW5kZWZpbmVkfXxBY2NdKTsKICAgICAgICB7ZXJyb3IsIF99IC0+CiAgICAgICAgICAgIHRocm93KHtiYWRfY29uZmlnLCAiSW52YWxpZCByb3RhdGlvbiBkYXRlIiwgRGF0ZX0pCiAgICBlbmQ7CnZhbGlkYXRlX2xvZ2ZpbGVfcHJvcGxpc3QoW3tzeW5jX2ludGVydmFsLCBTeW5jSW50fXxUYWlsXSwgQWNjKSAtPgogICAgY2FzZSBTeW5jSW50IG9mCiAgICAgICAgVmFsIHdoZW4gaXNfaW50ZWdlcihWYWwpLCBWYWwgPj0gMCAtPgogICAgICAgICAgICB2YWxpZGF0ZV9sb2dmaWxlX3Byb3BsaXN0KFRhaWwsIFt7c3luY19pbnRlcnZhbCwgVmFsfXxBY2NdKTsKICAgICAgICBfIC0+CiAgICAgICAgICAgIHRocm93KHtiYWRfY29uZmlnLCAiSW52YWxpZCBzeW5jIGludGVydmFsIiwgU3luY0ludH0pCiAgICBlbmQ7CnZhbGlkYXRlX2xvZ2ZpbGVfcHJvcGxpc3QoW3tzeW5jX3NpemUsIFN5bmNTaXplfXxUYWlsXSwgQWNjKSAtPgogICAgY2FzZSBTeW5jU2l6ZSBvZgogICAgICAgIFZhbCB3aGVuIGlzX2ludGVnZXIoVmFsKSwgVmFsID49IDAgLT4KICAgICAgICAgICAgdmFsaWRhdGVfbG9nZmlsZV9wcm9wbGlzdChUYWlsLCBbe3N5bmNfc2l6ZSwgVmFsfXxBY2NdKTsKICAgICAgICBfIC0+CiAgICAgICAgICAgIHRocm93KHtiYWRfY29uZmlnLCAiSW52YWxpZCBzeW5jIHNpemUiLCBTeW5jU2l6ZX0pCiAgICBlbmQ7CnZhbGlkYXRlX2xvZ2ZpbGVfcHJvcGxpc3QoW3tjaGVja19pbnRlcnZhbCwgQ2hlY2tJbnR9fFRhaWxdLCBBY2MpIC0+CiAgICBjYXNlIENoZWNrSW50IG9mCiAgICAgICAgVmFsIHdoZW4gaXNfaW50ZWdlcihWYWwpLCBWYWwgPj0gMCAtPgogICAgICAgICAgICB2YWxpZGF0ZV9sb2dmaWxlX3Byb3BsaXN0KFRhaWwsIFt7Y2hlY2tfaW50ZXJ2YWwsIFZhbH18QWNjXSk7CiAgICAgICAgYWx3YXlzIC0+CiAgICAgICAgICAgIHZhbGlkYXRlX2xvZ2ZpbGVfcHJvcGxpc3QoVGFpbCwgW3tjaGVja19pbnRlcnZhbCwgMH18QWNjXSk7CiAgICAgICAgXyAtPgogICAgICAgICAgICB0aHJvdyh7YmFkX2NvbmZpZywgIkludmFsaWQgY2hlY2sgaW50ZXJ2YWwiLCBDaGVja0ludH0pCiAgICBlbmQ7CnZhbGlkYXRlX2xvZ2ZpbGVfcHJvcGxpc3QoW3tzeW5jX29uLCBMZXZlbH18VGFpbF0sIEFjYykgLT4KICAgIGNhc2UgdmFsaWRhdGVfbG9nbGV2ZWwoTGV2ZWwpIG9mCiAgICAgICAgZmFsc2UgLT4KICAgICAgICAgICAgdGhyb3coe2JhZF9jb25maWcsICJJbnZhbGlkIHN5bmMgb24gbGV2ZWwiLCBMZXZlbH0pOwogICAgICAgIFJlcyAtPgogICAgICAgICAgICB2YWxpZGF0ZV9sb2dmaWxlX3Byb3BsaXN0KFRhaWwsIFt7c3luY19vbiwgUmVzfXxBY2NdKQogICAgZW5kOwp2YWxpZGF0ZV9sb2dmaWxlX3Byb3BsaXN0KFt7Zm9ybWF0dGVyLCBGbXR9fFRhaWxdLCBBY2MpIC0+CiAgICBjYXNlIGlzX2F0b20oRm10KSBvZgogICAgICAgIHRydWUgLT4KICAgICAgICAgICAgdmFsaWRhdGVfbG9nZmlsZV9wcm9wbGlzdChUYWlsLCBbe2Zvcm1hdHRlciwgRm10fXxBY2NdKTsKICAgICAgICBmYWxzZSAtPgogICAgICAgICAgICB0aHJvdyh7YmFkX2NvbmZpZywgIkludmFsaWQgZm9ybWF0dGVyIG1vZHVsZSIsIEZtdH0pCiAgICBlbmQ7CnZhbGlkYXRlX2xvZ2ZpbGVfcHJvcGxpc3QoW3tmb3JtYXR0ZXJfY29uZmlnLCBGbXRDZmd9fFRhaWxdLCBBY2MpIC0+CiAgICBjYXNlIGlzX2xpc3QoRm10Q2ZnKSBvZgogICAgICAgIHRydWUgLT4KICAgICAgICAgICAgdmFsaWRhdGVfbG9nZmlsZV9wcm9wbGlzdChUYWlsLCBbe2Zvcm1hdHRlcl9jb25maWcsIEZtdENmZ318QWNjXSk7CiAgICAgICAgZmFsc2UgLT4KICAgICAgICAgICAgdGhyb3coe2JhZF9jb25maWcsICJJbnZhbGlkIGZvcm1hdHRlciBjb25maWciLCBGbXRDZmd9KQogICAgZW5kOwp2YWxpZGF0ZV9sb2dmaWxlX3Byb3BsaXN0KFtPdGhlcnxfVGFpbF0sIF9BY2MpIC0+CiAgICB0aHJvdyh7YmFkX2NvbmZpZywgIkludmFsaWQgb3B0aW9uIiwgT3RoZXJ9KS4KCnNjaGVkdWxlX3JvdGF0aW9uKF8sIHVuZGVmaW5lZCkgLT4KICAgIG9rOwpzY2hlZHVsZV9yb3RhdGlvbihOYW1lLCBEYXRlKSAtPgogICAgZXJsYW5nOnNlbmRfYWZ0ZXIobGFnZXJfdXRpbDpjYWxjdWxhdGVfbmV4dF9yb3RhdGlvbihEYXRlKSAqIDEwMDAsIHNlbGYoKSwge3JvdGF0ZSwgTmFtZX0pLAogICAgb2suCgotaWZkZWYoVEVTVCkuCgpnZXRfbG9nbGV2ZWxfdGVzdCgpIC0+CiAgICB7b2ssIExldmVsLCBffSA9IGhhbmRsZV9jYWxsKGdldF9sb2dsZXZlbCwKICAgICAgICAjc3RhdGV7bmFtZT0iYmFyIiwgbGV2ZWw9bGFnZXJfdXRpbDpjb25maWdfdG9fbWFzayhpbmZvKSwgZmQ9MCwgaW5vZGU9MH0pLAogICAgP2Fzc2VydEVxdWFsKExldmVsLCBsYWdlcl91dGlsOmNvbmZpZ190b19tYXNrKGluZm8pKSwKICAgIHtvaywgTGV2ZWwyLCBffSA9IGhhbmRsZV9jYWxsKGdldF9sb2dsZXZlbCwKICAgICAgICAjc3RhdGV7bmFtZT0iZm9vIiwgbGV2ZWw9bGFnZXJfdXRpbDpjb25maWdfdG9fbWFzayh3YXJuaW5nKSwgZmQ9MCwgaW5vZGU9MH0pLAogICAgP2Fzc2VydEVxdWFsKExldmVsMiwgbGFnZXJfdXRpbDpjb25maWdfdG9fbWFzayh3YXJuaW5nKSkuCgpyb3RhdGlvbl90ZXN0XygpIC0+CiAgICB7Zm9yZWFjaCwKICAgICBmdW4oKSAtPgogICAgICAgICAgICAgW2ZpbGU6ZGVsZXRlKEYpfHxGIDwtIGZpbGVsaWI6d2lsZGNhcmQoInRlc3QubG9nKiIpXSwKICAgICAgICAgICAgIFN5bmNMZXZlbCA9IHZhbGlkYXRlX2xvZ2xldmVsKD9ERUZBVUxUX1NZTkNfTEVWRUwpLAogICAgICAgICAgICAgU3luY1NpemUgPSA/REVGQVVMVF9TWU5DX1NJWkUsCiAgICAgICAgICAgICBTeW5jSW50ZXJ2YWwgPSA/REVGQVVMVF9TWU5DX0lOVEVSVkFMLAogICAgICAgICAgICAgQ2hlY2tJbnRlcnZhbCA9IDAsICUlIGhhcmQgdG8gdGVzdCBkZWxheWVkIG1vZGUKCiAgICAgICAgICAgICAjc3RhdGV7bmFtZT0idGVzdC5sb2ciLCBsZXZlbD0/REVCVUcsIHN5bmNfb249U3luY0xldmVsLAogICAgICAgICAgICAgICAgICAgIHN5bmNfc2l6ZT1TeW5jU2l6ZSwgc3luY19pbnRlcnZhbD1TeW5jSW50ZXJ2YWwsIGNoZWNrX2ludGVydmFsPUNoZWNrSW50ZXJ2YWx9CgogICAgIGVuZCwKICAgICBmdW4oXykgLT4KICAgICAgICAgICAgIFtmaWxlOmRlbGV0ZShGKXx8RiA8LSBmaWxlbGliOndpbGRjYXJkKCJ0ZXN0LmxvZyoiKV0KICAgICBlbmQsCiAgICAgW2Z1bihEZWZhdWx0U3RhdGUgPSAjc3RhdGV7c3luY19zaXplPVN5bmNTaXplLCBzeW5jX2ludGVydmFsID0gU3luY0ludGVydmFsfSkgLT4KICAgICAgICAgIHsiRXh0ZXJuYWwgcm90YXRpb24gc2hvdWxkIHdvcmsiLAogICAgICAgICAgIGZ1bigpIC0+CiAgICAgICAgICAgICAgICAgICB7b2ssIHtGRCwgSW5vZGUsIF99fSA9IGxhZ2VyX3V0aWw6b3Blbl9sb2dmaWxlKCJ0ZXN0LmxvZyIsIHtTeW5jU2l6ZSwgU3luY0ludGVydmFsfSksCiAgICAgICAgICAgICAgICAgICBTdGF0ZTAgPSBEZWZhdWx0U3RhdGUjc3RhdGV7ZmQ9RkQsIGlub2RlPUlub2RlfSwKICAgICAgICAgICAgICAgICAgID9hc3NlcnRNYXRjaCgjc3RhdGV7bmFtZT0idGVzdC5sb2ciLCBsZXZlbD0/REVCVUcsIGZkPUZELCBpbm9kZT1Jbm9kZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUoU3RhdGUwLCBvczp0aW1lc3RhbXAoKSwgP0RFQlVHLCAiaGVsbG8gd29ybGQiKSksCiAgICAgICAgICAgICAgICAgICBmaWxlOmRlbGV0ZSgidGVzdC5sb2ciKSwKICAgICAgICAgICAgICAgICAgIFJlc3VsdCA9IHdyaXRlKFN0YXRlMCwgb3M6dGltZXN0YW1wKCksID9ERUJVRywgImhlbGxvIHdvcmxkIiksCiAgICAgICAgICAgICAgICAgICAlJSBhc3NlcnQgZmlsZSBoYXMgY2hhbmdlZAogICAgICAgICAgICAgICAgICAgP2Fzc2VydCgjc3RhdGV7bmFtZT0idGVzdC5sb2ciLCBsZXZlbD0/REVCVUcsIGZkPUZELCBpbm9kZT1Jbm9kZX0gPS89IFJlc3VsdCksCiAgICAgICAgICAgICAgICAgICA/YXNzZXJ0TWF0Y2goI3N0YXRle25hbWU9InRlc3QubG9nIiwgbGV2ZWw9P0RFQlVHfSwgUmVzdWx0KSwKICAgICAgICAgICAgICAgICAgIGZpbGU6cmVuYW1lKCJ0ZXN0LmxvZyIsICJ0ZXN0LmxvZy4xIiksCiAgICAgICAgICAgICAgICAgICBSZXN1bHQyID0gd3JpdGUoUmVzdWx0LCBvczp0aW1lc3RhbXAoKSwgP0RFQlVHLCAiaGVsbG8gd29ybGQiKSwKICAgICAgICAgICAgICAgICAgICUlIGFzc2VydCBmaWxlIGhhcyBjaGFuZ2VkCiAgICAgICAgICAgICAgICAgICA/YXNzZXJ0KFJlc3VsdCA9Lz0gUmVzdWx0MiksCiAgICAgICAgICAgICAgICAgICA/YXNzZXJ0TWF0Y2goI3N0YXRle25hbWU9InRlc3QubG9nIiwgbGV2ZWw9P0RFQlVHfSwgUmVzdWx0MiksCiAgICAgICAgICAgICAgICAgICBvawogICAgICAgICAgIGVuZH0KICAgICAgZW5kLAogICAgICBmdW4oRGVmYXVsdFN0YXRlID0gI3N0YXRle3N5bmNfc2l6ZT1TeW5jU2l6ZSwgc3luY19pbnRlcnZhbCA9IFN5bmNJbnRlcnZhbH0pIC0+CiAgICAgICAgICB7IkludGVybmFsIHJvdGF0aW9uIGFuZCBkZWxheWVkIHdyaXRlIiwKICAgICAgICAgICBmdW4oKSAtPgogICAgICAgICAgICAgICAgICAgQ2hlY2tJbnRlcnZhbCA9IDMwMDAsICUgMyBzZWMKICAgICAgICAgICAgICAgICAgIFJvdGF0aW9uU2l6ZSA9IDE1LAogICAgICAgICAgICAgICAgICAgUHJldmlvdXNDaGVjayA9IG9zOnRpbWVzdGFtcCgpLAoKICAgICAgICAgICAgICAgICAgIHtvaywge0ZELCBJbm9kZSwgX319ID0gbGFnZXJfdXRpbDpvcGVuX2xvZ2ZpbGUoInRlc3QubG9nIiwge1N5bmNTaXplLCBTeW5jSW50ZXJ2YWx9KSwKICAgICAgICAgICAgICAgICAgIFN0YXRlMCA9IERlZmF1bHRTdGF0ZSNzdGF0ZXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmQ9RkQsIGlub2RlPUlub2RlLCBzaXplPVJvdGF0aW9uU2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfaW50ZXJ2YWw9Q2hlY2tJbnRlcnZhbCwgbGFzdF9jaGVjaz1QcmV2aW91c0NoZWNrfSwKCiAgICAgICAgICAgICAgICAgICAlJSBuZXcgbWVzc2FnZSB3aXRoaW4gY2hlY2sgaW50ZXJ2YWwgd2l0aCBzeW5jX29uIGxldmVsCiAgICAgICAgICAgICAgICAgICBNc2cxVGltZXN0YW1wID0gYWRkX3NlY3MoUHJldmlvdXNDaGVjaywgMSksCiAgICAgICAgICAgICAgICAgICBTdGF0ZTAgPSBTdGF0ZTEgPSB3cml0ZShTdGF0ZTAsIE1zZzFUaW1lc3RhbXAsID9FUlJPUiwgImJpZyBiaWcgbWVzc2FnZSAxIiksCgogICAgICAgICAgICAgICAgICAgJSUgbmV3IG1lc3NhZ2Ugd2l0aGluIGNoZWNrIGludGVydmFsIHVuZGVyIHN5bmNfb24gbGV2ZWwKICAgICAgICAgICAgICAgICAgICUlIG5vdCB3cml0dGVuIHRvIGRpc2sgeWV0CiAgICAgICAgICAgICAgICAgICBNc2cyVGltZXN0YW1wID0gYWRkX3NlY3MoUHJldmlvdXNDaGVjaywgMiksCiAgICAgICAgICAgICAgICAgICBTdGF0ZTAgPSBTdGF0ZTIgPSB3cml0ZShTdGF0ZTEsIE1zZzJUaW1lc3RhbXAsID9ERUJVRywgImJ1ZmZlcmVkIG1lc3NhZ2UgMiIpLAoKICAgICAgICAgICAgICAgICAgICUlIGFsdGhvdWdoIGZpbGUgc2l6ZSBpcyBiaWcgZW5vdWdoLi4uCiAgICAgICAgICAgICAgICAgICB7b2ssIEZJbmZvfSA9IGZpbGU6cmVhZF9maWxlX2luZm8oInRlc3QubG9nIiksCiAgICAgICAgICAgICAgICAgICA/YXNzZXJ0KFJvdGF0aW9uU2l6ZSA8IEZJbmZvI2ZpbGVfaW5mby5zaXplKSwKICAgICAgICAgICAgICAgICAgICUlIC4uLm5vIHJvdGF0aW9uIHlldAogICAgICAgICAgICAgICAgICAgP2Fzc2VydEVxdWFsKFByZXZpb3VzQ2hlY2ssIFN0YXRlMiNzdGF0ZS5sYXN0X2NoZWNrKSwKICAgICAgICAgICAgICAgICAgID9hc3NlcnROb3QoZmlsZWxpYjppc19yZWd1bGFyKCJ0ZXN0LmxvZy4wIikpLAoKICAgICAgICAgICAgICAgICAgICUlIG5ldyBtZXNzYWdlIGFmdGVyIGNoZWNrIGludGVydmFsCiAgICAgICAgICAgICAgICAgICBNc2czVGltZXN0YW1wID0gYWRkX3NlY3MoUHJldmlvdXNDaGVjaywgNCksCiAgICAgICAgICAgICAgICAgICBfU3RhdGUzID0gd3JpdGUoU3RhdGUyLCBNc2czVGltZXN0YW1wLCA/REVCVUcsICJtZXNzYWdlIDMiKSwKCiAgICAgICAgICAgICAgICAgICAlJSByb3RhdGlvbiBoYXBwZW5lZAogICAgICAgICAgICAgICAgICAgP2Fzc2VydChmaWxlbGliOmlzX3JlZ3VsYXIoInRlc3QubG9nLjAiKSksCgogICAgICAgICAgICAgICAgICAge29rLCBCaW4xfSA9IGZpbGU6cmVhZF9maWxlKCJ0ZXN0LmxvZy4wIiksCiAgICAgICAgICAgICAgICAgICB7b2ssIEJpbjJ9ID0gZmlsZTpyZWFkX2ZpbGUoInRlc3QubG9nIiksCiAgICAgICAgICAgICAgICAgICAlJSBtZXNzYWdlIDEtMyB3cml0dGVuIHRvIGZpbGUKICAgICAgICAgICAgICAgICAgID9hc3NlcnRFcXVhbCg8PCJiaWcgYmlnIG1lc3NhZ2UgMWJ1ZmZlcmVkIG1lc3NhZ2UgMiI+PiwgQmluMSksCiAgICAgICAgICAgICAgICAgICAlJSBtZXNzYWdlIDQgYnVmZmVyZWQsIG5vdCB5ZXQgd3JpdHRlbiB0byBmaWxlCiAgICAgICAgICAgICAgICAgICA/YXNzZXJ0RXF1YWwoPDwiIj4+LCBCaW4yKSwKICAgICAgICAgICAgICAgICAgIG9rCiAgICAgICAgICAgZW5kfQogICAgICBlbmQKICAgICBdfS4KCmFkZF9zZWNzKHtNZWdhLCBTZWNzLCBNaWNyb30sIEFkZCkgLT4KICAgIE5ld1NlY3MgPSBTZWNzICsgQWRkLAogICAge01lZ2EgKyBOZXdTZWNzIGRpdiAxMDAwMDAwMCwgTmV3U2VjcyByZW0gMTAwMDAwMDAsIE1pY3JvfS4KCmZpbGVzeXN0ZW1fdGVzdF8oKSAtPgogICAge2ZvcmVhY2gsCiAgICAgICAgZnVuKCkgLT4KICAgICAgICAgICAgICAgIGZpbGU6d3JpdGVfZmlsZSgidGVzdC5sb2ciLCAiIiksCiAgICAgICAgICAgICAgICBlcnJvcl9sb2dnZXI6dHR5KGZhbHNlKSwKICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uOmxvYWQobGFnZXIpLAogICAgICAgICAgICAgICAgYXBwbGljYXRpb246c2V0X2VudihsYWdlciwgaGFuZGxlcnMsIFt7bGFnZXJfdGVzdF9iYWNrZW5kLCBpbmZvfV0pLAogICAgICAgICAgICAgICAgYXBwbGljYXRpb246c2V0X2VudihsYWdlciwgZXJyb3JfbG9nZ2VyX3JlZGlyZWN0LCBmYWxzZSksCiAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbjpzZXRfZW52KGxhZ2VyLCBhc3luY190aHJlc2hvbGQsIHVuZGVmaW5lZCksCiAgICAgICAgICAgICAgICBsYWdlcjpzdGFydCgpCiAgICAgICAgZW5kLAogICAgICAgIGZ1bihfKSAtPgogICAgICAgICAgICAgICAgZmlsZTpkZWxldGUoInRlc3QubG9nIiksCiAgICAgICAgICAgICAgICBmaWxlOmRlbGV0ZSgidGVzdC5sb2cuMCIpLAogICAgICAgICAgICAgICAgZmlsZTpkZWxldGUoInRlc3QubG9nLjEiKSwKICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uOnN0b3AobGFnZXIpLAogICAgICAgICAgICAgICAgZXJyb3JfbG9nZ2VyOnR0eSh0cnVlKQogICAgICAgIGVuZCwKICAgICAgICBbCiAgICAgICAgICAgIHsidW5kZXIgbm9ybWFsIGNpcmN1bXN0YW5jZXMsIGZpbGUgc2hvdWxkIGJlIG9wZW5lZCIsCiAgICAgICAgICAgICAgICBmdW4oKSAtPgogICAgICAgICAgICAgICAgICAgICAgICBnZW5fZXZlbnQ6YWRkX2hhbmRsZXIobGFnZXJfZXZlbnQsIGxhZ2VyX2ZpbGVfYmFja2VuZCwgW3sidGVzdC5sb2ciLCBpbmZvfSwge2xhZ2VyX2RlZmF1bHRfZm9ybWF0dGVyfV0pLAogICAgICAgICAgICAgICAgICAgICAgICBsYWdlcjpsb2coZXJyb3IsIHNlbGYoKSwgIlRlc3QgbWVzc2FnZSIpLAogICAgICAgICAgICAgICAgICAgICAgICB7b2ssIEJpbn0gPSBmaWxlOnJlYWRfZmlsZSgidGVzdC5sb2ciKSwKICAgICAgICAgICAgICAgICAgICAgICAgUGlkID0gcGlkX3RvX2xpc3Qoc2VsZigpKSwKICAgICAgICAgICAgICAgICAgICAgICAgP2Fzc2VydE1hdGNoKFtfLCBfLCAiW2Vycm9yXSIsIFBpZCwgIlRlc3QgbWVzc2FnZVxuIl0sIHJlOnNwbGl0KEJpbiwgIiAiLCBbe3JldHVybiwgbGlzdH0sIHtwYXJ0cywgNX1dKSkKICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICB9LAogICAgICAgICAgICB7ImRvbid0IGNob2tlIG9uIHVuaWNvZGUiLAogICAgICAgICAgICAgICAgZnVuKCkgLT4KICAgICAgICAgICAgICAgICAgICAgICAgZ2VuX2V2ZW50OmFkZF9oYW5kbGVyKGxhZ2VyX2V2ZW50LCBsYWdlcl9maWxlX2JhY2tlbmQsIFt7InRlc3QubG9nIiwgaW5mb30sIHtsYWdlcl9kZWZhdWx0X2Zvcm1hdHRlcn1dKSwKICAgICAgICAgICAgICAgICAgICAgICAgbGFnZXI6bG9nKGVycm9yLCBzZWxmKCksIn50cyIsIFtbMjAwMTMsMjU5OTEsMjc5NzksMzU3OTddXSksCiAgICAgICAgICAgICAgICAgICAgICAgIHtvaywgQmlufSA9IGZpbGU6cmVhZF9maWxlKCJ0ZXN0LmxvZyIpLAogICAgICAgICAgICAgICAgICAgICAgICBQaWQgPSBwaWRfdG9fbGlzdChzZWxmKCkpLAogICAgICAgICAgICAgICAgICAgICAgICA/YXNzZXJ0TWF0Y2goW18sIF8sICJbZXJyb3JdIiwgUGlkLCAgWzIyOCwxODQsMTczLDIzMCwxNTAsMTM1LDIzMCwxODEsMTM5LDIzMiwxNzUsMTQ5LCAkXG5dXSwgcmU6c3BsaXQoQmluLCAiICIsIFt7cmV0dXJuLCBsaXN0fSwge3BhcnRzLCA1fV0pKQogICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsiZG9uJ3QgY2hva2Ugb24gbGF0aW4tMSIsCiAgICAgICAgICAgICAgICBmdW4oKSAtPgogICAgICAgICAgICAgICAgICAgICAgICAlJSBYWFggaWYgdGhpcyB0ZXN0IGZhaWxzLCBjaGVjayB0aGF0IHRoaXMgZmlsZSBpcyBlbmNvZGVkIGxhdGluLTEsIG5vdCB1dGYtOCEKICAgICAgICAgICAgICAgICAgICAgICAgZ2VuX2V2ZW50OmFkZF9oYW5kbGVyKGxhZ2VyX2V2ZW50LCBsYWdlcl9maWxlX2JhY2tlbmQsIFt7InRlc3QubG9nIiwgaW5mb30sIHtsYWdlcl9kZWZhdWx0X2Zvcm1hdHRlcn1dKSwKICAgICAgICAgICAgICAgICAgICAgICAgbGFnZXI6bG9nKGVycm9yLCBzZWxmKCksIn50cyIsIFsiTMbdzk4t7yJdKSwKICAgICAgICAgICAgICAgICAgICAgICAge29rLCBCaW59ID0gZmlsZTpyZWFkX2ZpbGUoInRlc3QubG9nIiksCiAgICAgICAgICAgICAgICAgICAgICAgIFBpZCA9IHBpZF90b19saXN0KHNlbGYoKSksCiAgICAgICAgICAgICAgICAgICAgICAgIFJlcyA9IHJlOnNwbGl0KEJpbiwgIiAiLCBbe3JldHVybiwgbGlzdH0sIHtwYXJ0cywgNX1dKSwKICAgICAgICAgICAgICAgICAgICAgICAgP2Fzc2VydE1hdGNoKFtfLCBfLCAiW2Vycm9yXSIsIFBpZCwgIFs3NiwxOTUsMTM0LDE5NSwxNTcsMTk1LDE0Miw3OCw0NSwxOTUsMTc1LCRcbl1dLCBSZXMpCiAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgfSwKICAgICAgICAgICAgeyJmaWxlIGNhbid0IGJlIG9wZW5lZCBvbiBzdGFydHVwIHRyaWdnZXJzIGFuIGVycm9yIG1lc3NhZ2UiLAogICAgICAgICAgICAgICAgZnVuKCkgLT4KICAgICAgICAgICAgICAgICAgICAgICAge29rLCBGSW5mb30gPSBmaWxlOnJlYWRfZmlsZV9pbmZvKCJ0ZXN0LmxvZyIpLAogICAgICAgICAgICAgICAgICAgICAgICBmaWxlOndyaXRlX2ZpbGVfaW5mbygidGVzdC5sb2ciLCBGSW5mbyNmaWxlX2luZm97bW9kZSA9IDB9KSwKICAgICAgICAgICAgICAgICAgICAgICAgZ2VuX2V2ZW50OmFkZF9oYW5kbGVyKGxhZ2VyX2V2ZW50LCBsYWdlcl9maWxlX2JhY2tlbmQsIHsidGVzdC5sb2ciLCBpbmZvLCAxMCoxMDI0KjEwMjQsICIkRDAiLCA1fSksCiAgICAgICAgICAgICAgICAgICAgICAgID9hc3NlcnRFcXVhbCgxLCBsYWdlcl90ZXN0X2JhY2tlbmQ6Y291bnQoKSksCiAgICAgICAgICAgICAgICAgICAgICAgIHtfTGV2ZWwsIF9UaW1lLE1lc3NhZ2UsX01ldGFkYXRhfSA9IGxhZ2VyX3Rlc3RfYmFja2VuZDpwb3AoKSwKICAgICAgICAgICAgICAgICAgICAgICAgP2Fzc2VydEVxdWFsKCJGYWlsZWQgdG8gb3BlbiBsb2cgZmlsZSB0ZXN0LmxvZyB3aXRoIGVycm9yIHBlcm1pc3Npb24gZGVuaWVkIiwgbGlzdHM6ZmxhdHRlbihNZXNzYWdlKSkKICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICB9LAogICAgICAgICAgICB7ImZpbGUgdGhhdCBiZWNvbWVzIHVuYXZhaWxhYmxlIGF0IHJ1bnRpbWUgc2hvdWxkIHRyaWdnZXIgYW4gZXJyb3IgbWVzc2FnZSIsCiAgICAgICAgICAgICAgICBmdW4oKSAtPgogICAgICAgICAgICAgICAgICAgICAgICBnZW5fZXZlbnQ6YWRkX2hhbmRsZXIobGFnZXJfZXZlbnQsIGxhZ2VyX2ZpbGVfYmFja2VuZCwgW3tmaWxlLCAidGVzdC5sb2cifSwge2xldmVsLCBpbmZvfSwge2NoZWNrX2ludGVydmFsLCAwfV0pLAogICAgICAgICAgICAgICAgICAgICAgICA/YXNzZXJ0RXF1YWwoMCwgbGFnZXJfdGVzdF9iYWNrZW5kOmNvdW50KCkpLAogICAgICAgICAgICAgICAgICAgICAgICBsYWdlcjpsb2coZXJyb3IsIHNlbGYoKSwgIlRlc3QgbWVzc2FnZSIpLAogICAgICAgICAgICAgICAgICAgICAgICA/YXNzZXJ0RXF1YWwoMSwgbGFnZXJfdGVzdF9iYWNrZW5kOmNvdW50KCkpLAogICAgICAgICAgICAgICAgICAgICAgICBmaWxlOmRlbGV0ZSgidGVzdC5sb2ciKSwKICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTp3cml0ZV9maWxlKCJ0ZXN0LmxvZyIsICIiKSwKICAgICAgICAgICAgICAgICAgICAgICAge29rLCBGSW5mb30gPSBmaWxlOnJlYWRfZmlsZV9pbmZvKCJ0ZXN0LmxvZyIpLAogICAgICAgICAgICAgICAgICAgICAgICBmaWxlOndyaXRlX2ZpbGVfaW5mbygidGVzdC5sb2ciLCBGSW5mbyNmaWxlX2luZm97bW9kZSA9IDB9KSwKICAgICAgICAgICAgICAgICAgICAgICAgbGFnZXI6bG9nKGVycm9yLCBzZWxmKCksICJUZXN0IG1lc3NhZ2UiKSwKICAgICAgICAgICAgICAgICAgICAgICAgP2Fzc2VydEVxdWFsKDMsIGxhZ2VyX3Rlc3RfYmFja2VuZDpjb3VudCgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgbGFnZXJfdGVzdF9iYWNrZW5kOnBvcCgpLAogICAgICAgICAgICAgICAgICAgICAgICBsYWdlcl90ZXN0X2JhY2tlbmQ6cG9wKCksCiAgICAgICAgICAgICAgICAgICAgICAgIHtfTGV2ZWwsIF9UaW1lLCBNZXNzYWdlLF9NZXRhZGF0YX0gPSBsYWdlcl90ZXN0X2JhY2tlbmQ6cG9wKCksCiAgICAgICAgICAgICAgICAgICAgICAgID9hc3NlcnRFcXVhbCgiRmFpbGVkIHRvIHJlb3BlbiBsb2cgZmlsZSB0ZXN0LmxvZyB3aXRoIGVycm9yIHBlcm1pc3Npb24gZGVuaWVkIiwgbGlzdHM6ZmxhdHRlbihNZXNzYWdlKSkKICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICB9LAogICAgICAgICAgICB7InVuYXZhaWxhYmxlIGZpbGVzIHRoYXQgYXJlIGZpeGVkIGF0IHJ1bnRpbWUgc2hvdWxkIHN0YXJ0IGhhdmluZyBsb2cgbWVzc2FnZXMgd3JpdHRlbiIsCiAgICAgICAgICAgICAgICBmdW4oKSAtPgogICAgICAgICAgICAgICAgICAgICAgICB7b2ssIEZJbmZvfSA9IGZpbGU6cmVhZF9maWxlX2luZm8oInRlc3QubG9nIiksCiAgICAgICAgICAgICAgICAgICAgICAgIE9sZFBlcm1zID0gRkluZm8jZmlsZV9pbmZvLm1vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6d3JpdGVfZmlsZV9pbmZvKCJ0ZXN0LmxvZyIsIEZJbmZvI2ZpbGVfaW5mb3ttb2RlID0gMH0pLAogICAgICAgICAgICAgICAgICAgICAgICBnZW5fZXZlbnQ6YWRkX2hhbmRsZXIobGFnZXJfZXZlbnQsIGxhZ2VyX2ZpbGVfYmFja2VuZCwgW3tmaWxlLCAidGVzdC5sb2cifSx7Y2hlY2tfaW50ZXJ2YWwsIDB9XSksCiAgICAgICAgICAgICAgICAgICAgICAgID9hc3NlcnRFcXVhbCgxLCBsYWdlcl90ZXN0X2JhY2tlbmQ6Y291bnQoKSksCiAgICAgICAgICAgICAgICAgICAgICAgIHtfTGV2ZWwsIF9UaW1lLCBNZXNzYWdlLF9NZXRhZGF0YX0gPSBsYWdlcl90ZXN0X2JhY2tlbmQ6cG9wKCksCiAgICAgICAgICAgICAgICAgICAgICAgID9hc3NlcnRFcXVhbCgiRmFpbGVkIHRvIG9wZW4gbG9nIGZpbGUgdGVzdC5sb2cgd2l0aCBlcnJvciBwZXJtaXNzaW9uIGRlbmllZCIsIGxpc3RzOmZsYXR0ZW4oTWVzc2FnZSkpLAogICAgICAgICAgICAgICAgICAgICAgICBmaWxlOndyaXRlX2ZpbGVfaW5mbygidGVzdC5sb2ciLCBGSW5mbyNmaWxlX2luZm97bW9kZSA9IE9sZFBlcm1zfSksCiAgICAgICAgICAgICAgICAgICAgICAgIGxhZ2VyOmxvZyhlcnJvciwgc2VsZigpLCAiVGVzdCBtZXNzYWdlIiksCiAgICAgICAgICAgICAgICAgICAgICAgIHtvaywgQmlufSA9IGZpbGU6cmVhZF9maWxlKCJ0ZXN0LmxvZyIpLAogICAgICAgICAgICAgICAgICAgICAgICBQaWQgPSBwaWRfdG9fbGlzdChzZWxmKCkpLAogICAgICAgICAgICAgICAgICAgICAgICA/YXNzZXJ0TWF0Y2goW18sIF8sICJbZXJyb3JdIiwgUGlkLCAiVGVzdCBtZXNzYWdlXG4iXSwgcmU6c3BsaXQoQmluLCAiICIsIFt7cmV0dXJuLCBsaXN0fSwge3BhcnRzLCA1fV0pKQogICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsiZXh0ZXJuYWwgbG9nZmlsZSByb3RhdGlvbi9kZWxldGlvbiBzaG91bGQgYmUgaGFuZGxlZCIsCiAgICAgICAgICAgICAgICBmdW4oKSAtPgogICAgICAgICAgICAgICAgICAgICAgICBnZW5fZXZlbnQ6YWRkX2hhbmRsZXIobGFnZXJfZXZlbnQsIGxhZ2VyX2ZpbGVfYmFja2VuZCwgW3tmaWxlLCAidGVzdC5sb2cifSwge2xldmVsLCBpbmZvfSwge2NoZWNrX2ludGVydmFsLCAwfV0pLAogICAgICAgICAgICAgICAgICAgICAgICA/YXNzZXJ0RXF1YWwoMCwgbGFnZXJfdGVzdF9iYWNrZW5kOmNvdW50KCkpLAogICAgICAgICAgICAgICAgICAgICAgICBsYWdlcjpsb2coZXJyb3IsIHNlbGYoKSwgIlRlc3QgbWVzc2FnZTEiKSwKICAgICAgICAgICAgICAgICAgICAgICAgP2Fzc2VydEVxdWFsKDEsIGxhZ2VyX3Rlc3RfYmFja2VuZDpjb3VudCgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTpkZWxldGUoInRlc3QubG9nIiksCiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6d3JpdGVfZmlsZSgidGVzdC5sb2ciLCAiIiksCiAgICAgICAgICAgICAgICAgICAgICAgIGxhZ2VyOmxvZyhlcnJvciwgc2VsZigpLCAiVGVzdCBtZXNzYWdlMiIpLAogICAgICAgICAgICAgICAgICAgICAgICB7b2ssIEJpbn0gPSBmaWxlOnJlYWRfZmlsZSgidGVzdC5sb2ciKSwKICAgICAgICAgICAgICAgICAgICAgICAgUGlkID0gcGlkX3RvX2xpc3Qoc2VsZigpKSwKICAgICAgICAgICAgICAgICAgICAgICAgP2Fzc2VydE1hdGNoKFtfLCBfLCAiW2Vycm9yXSIsIFBpZCwgIlRlc3QgbWVzc2FnZTJcbiJdLCByZTpzcGxpdChCaW4sICIgIiwgW3tyZXR1cm4sIGxpc3R9LCB7cGFydHMsIDV9XSkpLAogICAgICAgICAgICAgICAgICAgICAgICBmaWxlOnJlbmFtZSgidGVzdC5sb2ciLCAidGVzdC5sb2cuMCIpLAogICAgICAgICAgICAgICAgICAgICAgICBsYWdlcjpsb2coZXJyb3IsIHNlbGYoKSwgIlRlc3QgbWVzc2FnZTMiKSwKICAgICAgICAgICAgICAgICAgICAgICAge29rLCBCaW4yfSA9IGZpbGU6cmVhZF9maWxlKCJ0ZXN0LmxvZyIpLAogICAgICAgICAgICAgICAgICAgICAgICA/YXNzZXJ0TWF0Y2goW18sIF8sICJbZXJyb3JdIiwgUGlkLCAiVGVzdCBtZXNzYWdlM1xuIl0sIHJlOnNwbGl0KEJpbjIsICIgIiwgW3tyZXR1cm4sIGxpc3R9LCB7cGFydHMsIDV9XSkpCiAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgfSwKICAgICAgICAgICAgeyJpbnRlcm5hbCBzaXplIHJvdGF0aW9uIHNob3VsZCB3b3JrIiwKICAgICAgICAgICAgICAgIGZ1bigpIC0+CiAgICAgICAgICAgICAgICAgICAgICAgIGdlbl9ldmVudDphZGRfaGFuZGxlcihsYWdlcl9ldmVudCwgbGFnZXJfZmlsZV9iYWNrZW5kLCBbe2ZpbGUsICJ0ZXN0LmxvZyJ9LCB7bGV2ZWwsIGluZm99LCB7Y2hlY2tfaW50ZXJ2YWwsIDB9LCB7c2l6ZSwgMTB9XSksCiAgICAgICAgICAgICAgICAgICAgICAgIGxhZ2VyOmxvZyhlcnJvciwgc2VsZigpLCAiVGVzdCBtZXNzYWdlMSIpLAogICAgICAgICAgICAgICAgICAgICAgICBsYWdlcjpsb2coZXJyb3IsIHNlbGYoKSwgIlRlc3QgbWVzc2FnZTEiKSwKICAgICAgICAgICAgICAgICAgICAgICAgP2Fzc2VydChmaWxlbGliOmlzX3JlZ3VsYXIoInRlc3QubG9nLjAiKSkKICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICB9LAogICAgICAgICAgICB7ImludGVybmFsIHRpbWUgcm90YXRpb24gc2hvdWxkIHdvcmsiLAogICAgICAgICAgICAgICAgZnVuKCkgLT4KICAgICAgICAgICAgICAgICAgICAgICAgZ2VuX2V2ZW50OmFkZF9oYW5kbGVyKGxhZ2VyX2V2ZW50LCBsYWdlcl9maWxlX2JhY2tlbmQsIFt7ZmlsZSwgInRlc3QubG9nIn0sIHtsZXZlbCwgaW5mb30sIHtjaGVja19pbnRlcnZhbCwgMTAwMH1dKSwKICAgICAgICAgICAgICAgICAgICAgICAgbGFnZXI6bG9nKGVycm9yLCBzZWxmKCksICJUZXN0IG1lc3NhZ2UxIiksCiAgICAgICAgICAgICAgICAgICAgICAgIGxhZ2VyOmxvZyhlcnJvciwgc2VsZigpLCAiVGVzdCBtZXNzYWdlMSIpLAogICAgICAgICAgICAgICAgICAgICAgICB3aGVyZWlzKGxhZ2VyX2V2ZW50KSAhIHtyb3RhdGUsICJ0ZXN0LmxvZyJ9LAogICAgICAgICAgICAgICAgICAgICAgICBsYWdlcjpsb2coZXJyb3IsIHNlbGYoKSwgIlRlc3QgbWVzc2FnZTEiKSwKICAgICAgICAgICAgICAgICAgICAgICAgP2Fzc2VydChmaWxlbGliOmlzX3JlZ3VsYXIoInRlc3QubG9nLjAiKSkKICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICB9LAogICAgICAgICAgICB7InN5bmNfb24gb3B0aW9uIHNob3VsZCB3b3JrIiwKICAgICAgICAgICAgICAgIGZ1bigpIC0+CiAgICAgICAgICAgICAgICAgICAgICAgIGdlbl9ldmVudDphZGRfaGFuZGxlcihsYWdlcl9ldmVudCwgbGFnZXJfZmlsZV9iYWNrZW5kLCBbe2ZpbGUsICJ0ZXN0LmxvZyJ9LCB7bGV2ZWwsIGluZm99LCB7c3luY19vbiwgIj1pbmZvIn0sIHtjaGVja19pbnRlcnZhbCwgNTAwMH0sIHtzeW5jX2ludGVydmFsLCA1MDAwfV0pLAogICAgICAgICAgICAgICAgICAgICAgICBsYWdlcjpsb2coZXJyb3IsIHNlbGYoKSwgIlRlc3QgbWVzc2FnZTEiKSwKICAgICAgICAgICAgICAgICAgICAgICAgbGFnZXI6bG9nKGVycm9yLCBzZWxmKCksICJUZXN0IG1lc3NhZ2UxIiksCiAgICAgICAgICAgICAgICAgICAgICAgID9hc3NlcnRFcXVhbCh7b2ssIDw8Pj59LCBmaWxlOnJlYWRfZmlsZSgidGVzdC5sb2ciKSksCiAgICAgICAgICAgICAgICAgICAgICAgIGxhZ2VyOmxvZyhpbmZvLCBzZWxmKCksICJUZXN0IG1lc3NhZ2UxIiksCiAgICAgICAgICAgICAgICAgICAgICAgIHtvaywgQmlufSA9IGZpbGU6cmVhZF9maWxlKCJ0ZXN0LmxvZyIpLAogICAgICAgICAgICAgICAgICAgICAgICA/YXNzZXJ0KDw8Pj4gLz0gQmluKQogICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsic3luY19vbiBub25lIG9wdGlvbiBzaG91bGQgd29yayAoYWxzbyB0ZXN0cyBzeW5jX2ludGVydmFsKSIsCiAgICAgICAgICAgICAgICBmdW4oKSAtPgogICAgICAgICAgICAgICAgICAgICAgICBnZW5fZXZlbnQ6YWRkX2hhbmRsZXIobGFnZXJfZXZlbnQsIGxhZ2VyX2ZpbGVfYmFja2VuZCwgW3tmaWxlLCAidGVzdC5sb2cifSwge2xldmVsLCBpbmZvfSwge3N5bmNfb24sICJub25lIn0sIHtjaGVja19pbnRlcnZhbCwgNTAwMH0sIHtzeW5jX2ludGVydmFsLCAxMDAwfV0pLAogICAgICAgICAgICAgICAgICAgICAgICBsYWdlcjpsb2coZXJyb3IsIHNlbGYoKSwgIlRlc3QgbWVzc2FnZTEiKSwKICAgICAgICAgICAgICAgICAgICAgICAgbGFnZXI6bG9nKGVycm9yLCBzZWxmKCksICJUZXN0IG1lc3NhZ2UxIiksCiAgICAgICAgICAgICAgICAgICAgICAgID9hc3NlcnRFcXVhbCh7b2ssIDw8Pj59LCBmaWxlOnJlYWRfZmlsZSgidGVzdC5sb2ciKSksCiAgICAgICAgICAgICAgICAgICAgICAgIGxhZ2VyOmxvZyhpbmZvLCBzZWxmKCksICJUZXN0IG1lc3NhZ2UxIiksCiAgICAgICAgICAgICAgICAgICAgICAgID9hc3NlcnRFcXVhbCh7b2ssIDw8Pj59LCBmaWxlOnJlYWRfZmlsZSgidGVzdC5sb2ciKSksCiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyOnNsZWVwKDEwMDApLAogICAgICAgICAgICAgICAgICAgICAgICB7b2ssIEJpbn0gPSBmaWxlOnJlYWRfZmlsZSgidGVzdC5sb2ciKSwKICAgICAgICAgICAgICAgICAgICAgICAgP2Fzc2VydCg8PD4+IC89IEJpbikKICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICB9LAogICAgICAgICAgICB7InN5bmNfc2l6ZSBvcHRpb24gc2hvdWxkIHdvcmsiLAogICAgICAgICAgICAgICAgZnVuKCkgLT4KICAgICAgICAgICAgICAgICAgICAgICAgZ2VuX2V2ZW50OmFkZF9oYW5kbGVyKGxhZ2VyX2V2ZW50LCBsYWdlcl9maWxlX2JhY2tlbmQsIFt7ZmlsZSwgInRlc3QubG9nIn0sIHtsZXZlbCwgaW5mb30sIHtzeW5jX29uLCAibm9uZSJ9LCB7Y2hlY2tfaW50ZXJ2YWwsIDUwMDF9LCB7c3luY19zaXplLCA2NDB9LCB7c3luY19pbnRlcnZhbCwgNTAwMX1dKSwKICAgICAgICAgICAgICAgICAgICAgICAgbGFnZXI6bG9nKGVycm9yLCBzZWxmKCksICJUZXN0IG1lc3NhZ2VpczY0Ynl0ZXMiKSwKICAgICAgICAgICAgICAgICAgICAgICAgbGFnZXI6bG9nKGVycm9yLCBzZWxmKCksICJUZXN0IG1lc3NhZ2VpczY0Ynl0ZXMiKSwKICAgICAgICAgICAgICAgICAgICAgICAgbGFnZXI6bG9nKGVycm9yLCBzZWxmKCksICJUZXN0IG1lc3NhZ2VpczY0Ynl0ZXMiKSwKICAgICAgICAgICAgICAgICAgICAgICAgbGFnZXI6bG9nKGVycm9yLCBzZWxmKCksICJUZXN0IG1lc3NhZ2VpczY0Ynl0ZXMiKSwKICAgICAgICAgICAgICAgICAgICAgICAgbGFnZXI6bG9nKGVycm9yLCBzZWxmKCksICJUZXN0IG1lc3NhZ2VpczY0Ynl0ZXMiKSwKICAgICAgICAgICAgICAgICAgICAgICAgP2Fzc2VydEVxdWFsKHtvaywgPDw+Pn0sIGZpbGU6cmVhZF9maWxlKCJ0ZXN0LmxvZyIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgbGFnZXI6bG9nKGVycm9yLCBzZWxmKCksICJUZXN0IG1lc3NhZ2VpczY0Ynl0ZXMiKSwKICAgICAgICAgICAgICAgICAgICAgICAgbGFnZXI6bG9nKGVycm9yLCBzZWxmKCksICJUZXN0IG1lc3NhZ2VpczY0Ynl0ZXMiKSwKICAgICAgICAgICAgICAgICAgICAgICAgbGFnZXI6bG9nKGVycm9yLCBzZWxmKCksICJUZXN0IG1lc3NhZ2VpczY0Ynl0ZXMiKSwKICAgICAgICAgICAgICAgICAgICAgICAgbGFnZXI6bG9nKGVycm9yLCBzZWxmKCksICJUZXN0IG1lc3NhZ2VpczY0Ynl0ZXMiKSwKICAgICAgICAgICAgICAgICAgICAgICAgP2Fzc2VydEVxdWFsKHtvaywgPDw+Pn0sIGZpbGU6cmVhZF9maWxlKCJ0ZXN0LmxvZyIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgJSUgbm93IHdlJ3ZlIHdyaXR0ZW4gZW5vdWdoIGJ5dGVzCiAgICAgICAgICAgICAgICAgICAgICAgIGxhZ2VyOmxvZyhlcnJvciwgc2VsZigpLCAiVGVzdCBtZXNzYWdlaXM2NGJ5dGVzIiksCiAgICAgICAgICAgICAgICAgICAgICAgIHtvaywgQmlufSA9IGZpbGU6cmVhZF9maWxlKCJ0ZXN0LmxvZyIpLAogICAgICAgICAgICAgICAgICAgICAgICA/YXNzZXJ0KDw8Pj4gLz0gQmluKQogICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsicnVudGltZSBsZXZlbCBjaGFuZ2VzIiwKICAgICAgICAgICAgICAgIGZ1bigpIC0+CiAgICAgICAgICAgICAgICAgICAgICAgIGdlbl9ldmVudDphZGRfaGFuZGxlcihsYWdlcl9ldmVudCwge2xhZ2VyX2ZpbGVfYmFja2VuZCwgInRlc3QubG9nIn0sIHsidGVzdC5sb2ciLCBpbmZvfSksCiAgICAgICAgICAgICAgICAgICAgICAgID9hc3NlcnRFcXVhbCgwLCBsYWdlcl90ZXN0X2JhY2tlbmQ6Y291bnQoKSksCiAgICAgICAgICAgICAgICAgICAgICAgIGxhZ2VyOmxvZyhpbmZvLCBzZWxmKCksICJUZXN0IG1lc3NhZ2UxIiksCiAgICAgICAgICAgICAgICAgICAgICAgIGxhZ2VyOmxvZyhlcnJvciwgc2VsZigpLCAiVGVzdCBtZXNzYWdlMiIpLAogICAgICAgICAgICAgICAgICAgICAgICB7b2ssIEJpbn0gPSBmaWxlOnJlYWRfZmlsZSgidGVzdC5sb2ciKSwKICAgICAgICAgICAgICAgICAgICAgICAgTGluZXMgPSBsZW5ndGgocmU6c3BsaXQoQmluLCAiXG4iLCBbe3JldHVybiwgbGlzdH0sIHRyaW1dKSksCiAgICAgICAgICAgICAgICAgICAgICAgID9hc3NlcnRFcXVhbChMaW5lcywgMiksCiAgICAgICAgICAgICAgICAgICAgICAgID9hc3NlcnRFcXVhbChvaywgbGFnZXI6c2V0X2xvZ2xldmVsKGxhZ2VyX2ZpbGVfYmFja2VuZCwgInRlc3QubG9nIiwgd2FybmluZykpLAogICAgICAgICAgICAgICAgICAgICAgICBsYWdlcjpsb2coaW5mbywgc2VsZigpLCAiVGVzdCBtZXNzYWdlMyIpLCAlJSB0aGlzIHdvbid0IGdldCBsb2dnZWQKICAgICAgICAgICAgICAgICAgICAgICAgbGFnZXI6bG9nKGVycm9yLCBzZWxmKCksICJUZXN0IG1lc3NhZ2U0IiksCiAgICAgICAgICAgICAgICAgICAgICAgIHtvaywgQmluMn0gPSBmaWxlOnJlYWRfZmlsZSgidGVzdC5sb2ciKSwKICAgICAgICAgICAgICAgICAgICAgICAgTGluZXMyID0gbGVuZ3RoKHJlOnNwbGl0KEJpbjIsICJcbiIsIFt7cmV0dXJuLCBsaXN0fSwgdHJpbV0pKSwKICAgICAgICAgICAgICAgICAgICAgICAgP2Fzc2VydEVxdWFsKExpbmVzMiwgMykKICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICB9LAogICAgICAgICAgICB7ImludmFsaWQgcnVudGltZSBsZXZlbCBjaGFuZ2VzIiwKICAgICAgICAgICAgICAgIGZ1bigpIC0+CiAgICAgICAgICAgICAgICAgICAgICAgIGdlbl9ldmVudDphZGRfaGFuZGxlcihsYWdlcl9ldmVudCwgbGFnZXJfZmlsZV9iYWNrZW5kLCBbeyJ0ZXN0LmxvZyIsIGluZm8sIDEwKjEwMjQqMTAyNCwgIiREMCIsIDV9LCB7bGFnZXJfZGVmYXVsdF9mb3JtYXR0ZXJ9XSksCiAgICAgICAgICAgICAgICAgICAgICAgIGdlbl9ldmVudDphZGRfaGFuZGxlcihsYWdlcl9ldmVudCwgbGFnZXJfZmlsZV9iYWNrZW5kLCB7InRlc3QzLmxvZyIsIGluZm99KSwKICAgICAgICAgICAgICAgICAgICAgICAgP2Fzc2VydEVxdWFsKHtlcnJvciwgYmFkX21vZHVsZX0sIGxhZ2VyOnNldF9sb2dsZXZlbChsYWdlcl9maWxlX2JhY2tlbmQsICJ0ZXN0LmxvZyIsIHdhcm5pbmcpKQogICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsidHJhY2luZyBzaG91bGQgd29yayIsCiAgICAgICAgICAgICAgICBmdW4oKSAtPgogICAgICAgICAgICAgICAgICAgICAgICBnZW5fZXZlbnQ6YWRkX2hhbmRsZXIobGFnZXJfZXZlbnQsIGxhZ2VyX2ZpbGVfYmFja2VuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsidGVzdC5sb2ciLCBjcml0aWNhbH0pLAogICAgICAgICAgICAgICAgICAgICAgICBsYWdlcjplcnJvcigiVGVzdCBtZXNzYWdlIiksCiAgICAgICAgICAgICAgICAgICAgICAgID9hc3NlcnRFcXVhbCh7b2ssIDw8Pj59LCBmaWxlOnJlYWRfZmlsZSgidGVzdC5sb2ciKSksCiAgICAgICAgICAgICAgICAgICAgICAgIHtMZXZlbCwgX30gPSBsYWdlcl9jb25maWc6Z2V0KGxvZ2xldmVsKSwKICAgICAgICAgICAgICAgICAgICAgICAgbGFnZXJfY29uZmlnOnNldChsb2dsZXZlbCwge0xldmVsLCBbe1t7bW9kdWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/TU9EVUxFfV0sID9ERUJVRywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtsYWdlcl9maWxlX2JhY2tlbmQsICJ0ZXN0LmxvZyJ9fV19KSwKICAgICAgICAgICAgICAgICAgICAgICAgbGFnZXI6ZXJyb3IoIlRlc3QgbWVzc2FnZSIpLAogICAgICAgICAgICAgICAgICAgICAgICB0aW1lcjpzbGVlcCgxMDAwKSwKICAgICAgICAgICAgICAgICAgICAgICAge29rLCBCaW59ID0gZmlsZTpyZWFkX2ZpbGUoInRlc3QubG9nIiksCiAgICAgICAgICAgICAgICAgICAgICAgID9hc3NlcnRNYXRjaChbXywgXywgIltlcnJvcl0iLCBfLCAiVGVzdCBtZXNzYWdlXG4iXSwgcmU6c3BsaXQoQmluLCAiICIsIFt7cmV0dXJuLCBsaXN0fSwge3BhcnRzLCA1fV0pKQogICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsidHJhY2luZyBzaG91bGQgbm90IGR1cGxpY2F0ZSBtZXNzYWdlcyIsCiAgICAgICAgICAgICAgICBmdW4oKSAtPgogICAgICAgICAgICAgICAgICAgICAgICBnZW5fZXZlbnQ6YWRkX2hhbmRsZXIobGFnZXJfZXZlbnQsIGxhZ2VyX2ZpbGVfYmFja2VuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt7ZmlsZSwgInRlc3QubG9nIn0sIHtsZXZlbCwgY3JpdGljYWx9LCB7Y2hlY2tfaW50ZXJ2YWwsIGFsd2F5c31dKSwKICAgICAgICAgICAgICAgICAgICAgICAgbGFnZXI6Y3JpdGljYWwoIlRlc3QgbWVzc2FnZSIpLAogICAgICAgICAgICAgICAgICAgICAgICB7b2ssIEJpbjF9ID0gZmlsZTpyZWFkX2ZpbGUoInRlc3QubG9nIiksCiAgICAgICAgICAgICAgICAgICAgICAgID9hc3NlcnRNYXRjaChbXywgXywgIltjcml0aWNhbF0iLCBfLCAiVGVzdCBtZXNzYWdlXG4iXSwgcmU6c3BsaXQoQmluMSwgIiAiLCBbe3JldHVybiwgbGlzdH0sIHtwYXJ0cywgNX1dKSksCiAgICAgICAgICAgICAgICAgICAgICAgIG9rID0gZmlsZTpkZWxldGUoInRlc3QubG9nIiksCiAgICAgICAgICAgICAgICAgICAgICAgIHtMZXZlbCwgX30gPSBsYWdlcl9jb25maWc6Z2V0KGxvZ2xldmVsKSwKICAgICAgICAgICAgICAgICAgICAgICAgbGFnZXJfY29uZmlnOnNldChsb2dsZXZlbCwge0xldmVsLCBbe1t7bW9kdWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/TU9EVUxFfV0sID9ERUJVRywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtsYWdlcl9maWxlX2JhY2tlbmQsICJ0ZXN0LmxvZyJ9fV19KSwKICAgICAgICAgICAgICAgICAgICAgICAgbGFnZXI6Y3JpdGljYWwoIlRlc3QgbWVzc2FnZSIpLAogICAgICAgICAgICAgICAgICAgICAgICB7b2ssIEJpbjJ9ID0gZmlsZTpyZWFkX2ZpbGUoInRlc3QubG9nIiksCiAgICAgICAgICAgICAgICAgICAgICAgID9hc3NlcnRNYXRjaChbXywgXywgIltjcml0aWNhbF0iLCBfLCAiVGVzdCBtZXNzYWdlXG4iXSwgcmU6c3BsaXQoQmluMiwgIiAiLCBbe3JldHVybiwgbGlzdH0sIHtwYXJ0cywgNX1dKSksCiAgICAgICAgICAgICAgICAgICAgICAgIG9rID0gZmlsZTpkZWxldGUoInRlc3QubG9nIiksCiAgICAgICAgICAgICAgICAgICAgICAgIGxhZ2VyOmVycm9yKCJUZXN0IG1lc3NhZ2UiKSwKICAgICAgICAgICAgICAgICAgICAgICAge29rLCBCaW4zfSA9IGZpbGU6cmVhZF9maWxlKCJ0ZXN0LmxvZyIpLAogICAgICAgICAgICAgICAgICAgICAgICA/YXNzZXJ0TWF0Y2goW18sIF8sICJbZXJyb3JdIiwgXywgIlRlc3QgbWVzc2FnZVxuIl0sIHJlOnNwbGl0KEJpbjMsICIgIiwgW3tyZXR1cm4sIGxpc3R9LCB7cGFydHMsIDV9XSkpCiAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgfSwKICAgICAgICAgICAgeyJ0cmFjaW5nIHRvIGEgZGVkaWNhdGVkIGZpbGUgc2hvdWxkIHdvcmsiLAogICAgICAgICAgICAgICAgZnVuKCkgLT4KICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTpkZWxldGUoImZvby5sb2ciKSwKICAgICAgICAgICAgICAgICAgICAgICAge29rLCBffSA9IGxhZ2VyOnRyYWNlX2ZpbGUoImZvby5sb2ciLCBbe21vZHVsZSwgP01PRFVMRX1dKSwKICAgICAgICAgICAgICAgICAgICAgICAgbGFnZXI6ZXJyb3IoIlRlc3QgbWVzc2FnZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAlJSBub3QgZWxlZ2libGUgZm9yIHRyYWNlCiAgICAgICAgICAgICAgICAgICAgICAgIGxhZ2VyOmxvZyhlcnJvciwgc2VsZigpLCAiVGVzdCBtZXNzYWdlIiksCiAgICAgICAgICAgICAgICAgICAgICAgIHtvaywgQmluM30gPSBmaWxlOnJlYWRfZmlsZSgiZm9vLmxvZyIpLAogICAgICAgICAgICAgICAgICAgICAgICA/YXNzZXJ0TWF0Y2goW18sIF8sICJbZXJyb3JdIiwgXywgIlRlc3QgbWVzc2FnZVxuIl0sIHJlOnNwbGl0KEJpbjMsICIgIiwgW3tyZXR1cm4sIGxpc3R9LCB7cGFydHMsIDV9XSkpCiAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgfQogICAgICAgIF0KICAgIH0uCgpmb3JtYXR0aW5nX3Rlc3RfKCkgLT4KICAgIHtmb3JlYWNoLAogICAgICAgIGZ1bigpIC0+CiAgICAgICAgICAgICAgICBmaWxlOndyaXRlX2ZpbGUoInRlc3QubG9nIiwgIiIpLAogICAgICAgICAgICAgICAgZmlsZTp3cml0ZV9maWxlKCJ0ZXN0Mi5sb2ciLCAiIiksCiAgICAgICAgICAgICAgICBlcnJvcl9sb2dnZXI6dHR5KGZhbHNlKSwKICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uOmxvYWQobGFnZXIpLAogICAgICAgICAgICAgICAgYXBwbGljYXRpb246c2V0X2VudihsYWdlciwgaGFuZGxlcnMsIFt7bGFnZXJfdGVzdF9iYWNrZW5kLCBpbmZvfV0pLAogICAgICAgICAgICAgICAgYXBwbGljYXRpb246c2V0X2VudihsYWdlciwgZXJyb3JfbG9nZ2VyX3JlZGlyZWN0LCBmYWxzZSksCiAgICAgICAgICAgICAgICBsYWdlcjpzdGFydCgpCiAgICAgICAgZW5kLAogICAgICAgIGZ1bihfKSAtPgogICAgICAgICAgICAgICAgZmlsZTpkZWxldGUoInRlc3QubG9nIiksCiAgICAgICAgICAgICAgICBmaWxlOmRlbGV0ZSgidGVzdDIubG9nIiksCiAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbjpzdG9wKGxhZ2VyKSwKICAgICAgICAgICAgICAgIGVycm9yX2xvZ2dlcjp0dHkodHJ1ZSkKICAgICAgICBlbmQsCiAgICAgICAgICAgIFt7IlNob3VsZCBoYXZlIHR3byBsb2cgZmlsZXMsIHRoZSBzZWNvbmQgcHJlZml4ZWQgd2l0aCAyPiIsCiAgICAgICAgICAgICAgICBmdW4oKSAtPgogICAgICAgICAgICAgICAgICAgICAgIGdlbl9ldmVudDphZGRfaGFuZGxlcihsYWdlcl9ldmVudCwgbGFnZXJfZmlsZV9iYWNrZW5kLFt7InRlc3QubG9nIiwgZGVidWd9LHtsYWdlcl9kZWZhdWx0X2Zvcm1hdHRlcixbIlsiLHNldmVyaXR5LCJdICIsIG1lc3NhZ2UsICJcbiJdfV0pLAogICAgICAgICAgICAgICAgICAgICAgIGdlbl9ldmVudDphZGRfaGFuZGxlcihsYWdlcl9ldmVudCwgbGFnZXJfZmlsZV9iYWNrZW5kLFt7InRlc3QyLmxvZyIsIGRlYnVnfSx7bGFnZXJfZGVmYXVsdF9mb3JtYXR0ZXIsWyIyPiBbIixzZXZlcml0eSwiXSAiLCBtZXNzYWdlLCAiXG4iXX1dKSwKICAgICAgICAgICAgICAgICAgICAgICBsYWdlcjpsb2coZXJyb3IsIHNlbGYoKSwgIlRlc3QgbWVzc2FnZSIpLAogICAgICAgICAgICAgICAgICAgICAgID9hc3NlcnRNYXRjaCh7b2ssIDw8IltlcnJvcl0gVGVzdCBtZXNzYWdlXG4iPj59LGZpbGU6cmVhZF9maWxlKCJ0ZXN0LmxvZyIpKSwKICAgICAgICAgICAgICAgICAgICAgICA/YXNzZXJ0TWF0Y2goe29rLCA8PCIyPiBbZXJyb3JdIFRlc3QgbWVzc2FnZVxuIj4+fSxmaWxlOnJlYWRfZmlsZSgidGVzdDIubG9nIikpCiAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgfQogICAgICAgIF19LgoKY29uZmlnX3ZhbGlkYXRpb25fdGVzdF8oKSAtPgogICAgWwogICAgICAgIHsibWlzc2luZyBmaWxlIiwKICAgICAgICAgICAgP19hc3NlcnRFcXVhbChmYWxzZSwKICAgICAgICAgICAgICAgIHZhbGlkYXRlX2xvZ2ZpbGVfcHJvcGxpc3QoW3tsZXZlbCwgaW5mb30se3NpemUsIDEwfV0pKQogICAgICAgIH0sCiAgICAgICAgeyJiYWQgbGV2ZWwiLAogICAgICAgICAgICA/X2Fzc2VydEVxdWFsKGZhbHNlLAogICAgICAgICAgICAgICAgdmFsaWRhdGVfbG9nZmlsZV9wcm9wbGlzdChbe2ZpbGUsICJ0ZXN0LmxvZyJ9LCB7bGV2ZWwsIGJsYWh9LHtzaXplLCAxMH1dKSkKICAgICAgICB9LAogICAgICAgIHsiYmFkIHNpemUiLAogICAgICAgICAgICA/X2Fzc2VydEVxdWFsKGZhbHNlLAogICAgICAgICAgICAgICAgdmFsaWRhdGVfbG9nZmlsZV9wcm9wbGlzdChbe2ZpbGUsICJ0ZXN0LmxvZyJ9LCB7c2l6ZSwgaW5maW5pdHl9XSkpCiAgICAgICAgfSwKICAgICAgICB7ImJhZCBjb3VudCIsCiAgICAgICAgICAgID9fYXNzZXJ0RXF1YWwoZmFsc2UsCiAgICAgICAgICAgICAgICB2YWxpZGF0ZV9sb2dmaWxlX3Byb3BsaXN0KFt7ZmlsZSwgInRlc3QubG9nIn0sIHtjb3VudCwgaW5maW5pdHl9XSkpCiAgICAgICAgfSwKICAgICAgICB7ImJhZCBkYXRlIiwKICAgICAgICAgICAgP19hc3NlcnRFcXVhbChmYWxzZSwKICAgICAgICAgICAgICAgIHZhbGlkYXRlX2xvZ2ZpbGVfcHJvcGxpc3QoW3tmaWxlLCAidGVzdC5sb2cifSwge2RhdGUsICJtaWRuaWdodCJ9XSkpCiAgICAgICAgfSwKICAgICAgICB7ImJsYW5rIGRhdGUgaXMgb2siLAogICAgICAgICAgICA/X2Fzc2VydE1hdGNoKFtffF9dLAogICAgICAgICAgICAgICAgdmFsaWRhdGVfbG9nZmlsZV9wcm9wbGlzdChbe2ZpbGUsICJ0ZXN0LmxvZyJ9LCB7ZGF0ZSwgIiJ9XSkpCiAgICAgICAgfSwKICAgICAgICB7ImJhZCBzeW5jX2ludGVydmFsIiwKICAgICAgICAgICAgP19hc3NlcnRFcXVhbChmYWxzZSwKICAgICAgICAgICAgICAgIHZhbGlkYXRlX2xvZ2ZpbGVfcHJvcGxpc3QoW3tmaWxlLCAidGVzdC5sb2cifSwge3N5bmNfaW50ZXJ2YWwsIGluZmluaXR5fV0pKQogICAgICAgIH0sCiAgICAgICAgeyJiYWQgc3luY19zaXplIiwKICAgICAgICAgICAgP19hc3NlcnRFcXVhbChmYWxzZSwKICAgICAgICAgICAgICAgIHZhbGlkYXRlX2xvZ2ZpbGVfcHJvcGxpc3QoW3tmaWxlLCAidGVzdC5sb2cifSwge3N5bmNfc2l6ZSwgaW5maW5pdHl9XSkpCiAgICAgICAgfSwKICAgICAgICB7ImJhZCBjaGVja19pbnRlcnZhbCIsCiAgICAgICAgICAgID9fYXNzZXJ0RXF1YWwoZmFsc2UsCiAgICAgICAgICAgICAgICB2YWxpZGF0ZV9sb2dmaWxlX3Byb3BsaXN0KFt7ZmlsZSwgInRlc3QubG9nIn0sIHtjaGVja19pbnRlcnZhbCwgaW5maW5pdHl9XSkpCiAgICAgICAgfSwKICAgICAgICB7ImJhZCBzeW5jX29uIGxldmVsIiwKICAgICAgICAgICAgP19hc3NlcnRFcXVhbChmYWxzZSwKICAgICAgICAgICAgICAgIHZhbGlkYXRlX2xvZ2ZpbGVfcHJvcGxpc3QoW3tmaWxlLCAidGVzdC5sb2cifSwge3N5bmNfb24sIGluZmluaXR5fV0pKQogICAgICAgIH0sCiAgICAgICAgeyJiYWQgZm9ybWF0dGVyIG1vZHVsZSIsCiAgICAgICAgICAgID9fYXNzZXJ0RXF1YWwoZmFsc2UsCiAgICAgICAgICAgICAgICB2YWxpZGF0ZV9sb2dmaWxlX3Byb3BsaXN0KFt7ZmlsZSwgInRlc3QubG9nIn0sIHtmb3JtYXR0ZXIsICJpbzpmb3JtYXQifV0pKQogICAgICAgIH0sCiAgICAgICAgeyJiYWQgZm9ybWF0dGVyIGNvbmZpZyIsCiAgICAgICAgICAgID9fYXNzZXJ0RXF1YWwoZmFsc2UsCiAgICAgICAgICAgICAgICB2YWxpZGF0ZV9sb2dmaWxlX3Byb3BsaXN0KFt7ZmlsZSwgInRlc3QubG9nIn0sIHtmb3JtYXR0ZXJfY29uZmlnLCBibGFofV0pKQogICAgICAgIH0sCiAgICAgICAgeyJ1bmtub3duIG9wdGlvbiIsCiAgICAgICAgICAgID9fYXNzZXJ0RXF1YWwoZmFsc2UsCiAgICAgICAgICAgICAgICB2YWxpZGF0ZV9sb2dmaWxlX3Byb3BsaXN0KFt7ZmlsZSwgInRlc3QubG9nIn0sIHtyaHViYXJiLCBzcGljeX1dKSkKICAgICAgICB9CiAgICBdLgoKCi1lbmRpZi4KCg==