IyEvdXNyL2Jpbi9weXRob24KIyB2aW06IHNldCBmaWxlZW5jb2Rpbmc9bGF0aW4tMToKCmltcG9ydCByZQppbXBvcnQgc3lzCgpmcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBzZXR1cCwgRXh0ZW5zaW9uCgojIFdlIHBpY2sgdXAgY29uZmlndXJlJ3Mgc3R1ZmYgaGVyZS4gU2FkbHkgZGlzdHV0aWxzIG5lZWRzIHRoaXMgYnJva2VuIG91dAojIGludG8gc2VwYXJhdGUgaW5jbHVkZXMsIGxpYnMgYW5kIGRlZmluZXMsIGFyZ2gKY29uZmlndXJlX2ZsYWdzID0gJ0BWSVBTX0NGTEFHU0AgQFZJUFNfSU5DTFVERVNAIEBWSVBTX0xJQlNAIC1JQHRvcF9zcmNkaXJAL2xpYnZpcHMvaW5jbHVkZSAtSUB0b3Bfc3JjZGlyQC9saWJ2aXBzQ0MvaW5jbHVkZScKCiMgUGFyc2UgY29tcGlsZXIgZmxhZ3MgaW50byB0aGVzZSBjYXRlZ29yaWVzLCB5dWshCmNvbmZpZ3VyZV9tYWNyb3MgPSBbXQpjb25maWd1cmVfaW5jbHVkZV9kaXJzID0gW10KY29uZmlndXJlX2xpYnJhcnlfZGlycyA9IFtdCmNvbmZpZ3VyZV9saWJzID0gW10KY29uZmlndXJlX29wdGlvbnMgPSBbXQoKZm9yIGZsYWcgaW4gY29uZmlndXJlX2ZsYWdzLnNwbGl0KCk6CgltYXRjaCA9IHJlLm1hdGNoICgnLUQoLiopKD0oLiopKT8nLCBmbGFnKQoJaWYgbWF0Y2g6CgkJa2V5ID0gbWF0Y2guZ3JvdXAgKDEpCgkJaWYgbWF0Y2guZ3JvdXAgKDIpOgoJCQl2YWx1ZSA9IG1hdGNoLmdyb3VwICgyKQoJCWVsc2U6CgkJCXZhbHVlID0gMQoJCWNvbmZpZ3VyZV9tYWNyb3MgKz0gWyhrZXksIHZhbHVlKV0KCQljb250aW51ZQoKCW1hdGNoID0gcmUubWF0Y2ggKCctSSguKiknLCBmbGFnKQoJaWYgbWF0Y2g6CgkJY29uZmlndXJlX2luY2x1ZGVfZGlycyArPSBbbWF0Y2guZ3JvdXAgKDEpXQoJCWNvbnRpbnVlCgoJbWF0Y2ggPSByZS5tYXRjaCAoJy1MKC4qKScsIGZsYWcpCglpZiBtYXRjaDoKCQljb25maWd1cmVfbGlicmFyeV9kaXJzICs9IFttYXRjaC5ncm91cCAoMSldCgkJY29udGludWUKCgltYXRjaCA9IHJlLm1hdGNoICgnLWwoLiopJywgZmxhZykKCWlmIG1hdGNoOgoJCWNvbmZpZ3VyZV9saWJzICs9IFttYXRjaC5ncm91cCAoMSldCgkJY29udGludWUKCgltYXRjaCA9IHJlLm1hdGNoICgnLSguKiknLCBmbGFnKQoJaWYgbWF0Y2g6CgkJY29uZmlndXJlX29wdGlvbnMgKz0gW2ZsYWddCgkJY29udGludWUKCglwcmludCAnJXM6IHVua25vd24gY29uZmlndXJlIG9wdGlvbiEnICUgZmxhZwoJc3lzLmV4aXQgKDEpCgpkZWYgbWFrZV9leHRlbnNpb24gKG5hbWUsIHNvdXJjZSk6CglyZXR1cm4gRXh0ZW5zaW9uIChuYW1lLCAKCQkJCQkgc291cmNlcyA9IFtzb3VyY2VdLCAKCQkJCQkgZGVmaW5lX21hY3JvcyA9IGNvbmZpZ3VyZV9tYWNyb3MsCgkJCQkJIGluY2x1ZGVfZGlycyA9IGNvbmZpZ3VyZV9pbmNsdWRlX2RpcnMsCgkJCQkJIGxpYnJhcmllcyA9IGNvbmZpZ3VyZV9saWJzLAoJCQkJCSBsaWJyYXJ5X2RpcnMgPSBjb25maWd1cmVfbGlicmFyeV9kaXJzLAoJCQkJCSBleHRyYV9jb21waWxlX2FyZ3MgPSBjb25maWd1cmVfb3B0aW9ucywKCQkJCQkgZXh0cmFfbGlua19hcmdzID0gY29uZmlndXJlX29wdGlvbnMsCgkJCQkJIHJ1bnRpbWVfbGlicmFyeV9kaXJzPSBbJ0BJTV9MSUJESVJAJ10pCgptb2R1bGUxID0gbWFrZV9leHRlbnNpb24gKCd2aW1hZ2Vtb2R1bGUnLCAndmltYWdlbW9kdWxlLmNwcCcpCm1vZHVsZTIgPSBtYWtlX2V4dGVuc2lvbiAoJ3ZtYXNrbW9kdWxlJywgJ3ZtYXNrbW9kdWxlLmNwcCcpCm1vZHVsZTMgPSBtYWtlX2V4dGVuc2lvbiAoJ3ZlcnJvcm1vZHVsZScsICd2ZXJyb3Jtb2R1bGUuY3BwJykKbW9kdWxlNCA9IG1ha2VfZXh0ZW5zaW9uICgndmRpc3BsYXltb2R1bGUnLCAndmRpc3BsYXltb2R1bGUuY3BwJykKCnNldHVwIChuYW1lID0gJ3ZpcHNDQycsCgl2ZXJzaW9uID0gJzcuMjAuNycsCglkZXNjcmlwdGlvbiA9ICd2aXBzLTcueCBpbWFnZSBwcm9jZXNzaW5nIGxpYnJhcnknLAoJYXV0aG9yID0gJ0pvc+kgTWFy7WEgR2FyY+1hIFDpcmV6LCBKb2huIEN1cGl0dCcsCglhdXRob3JfZW1haWwgPSAnamN1cGl0dEBnbWFpbC5jb20nLAoJdXJsID0gJ2h0dHA6Ly93d3cudmlwcy5lY3Muc290b24uYWMudWsnLAoJcGFja2FnZXMgPSBbJ3ZpcHNDQyddLAoJZXh0X3BhY2thZ2UgPSAndmlwc0NDJywKCWV4dF9tb2R1bGVzID0gW21vZHVsZTEsIG1vZHVsZTIsIG1vZHVsZTMsIG1vZHVsZTRdKQoKCg==