# Name: smd_crunchers v0.11 # Type: Library plugin # Library of compression algorithms # Author: Stef Dawson / Devin Doucette / Alexandre Tedeschi # URL: http://stefdawson.com/ # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjEzOiJzbWRfY3J1bmNoZXJzIjtzOjY6ImF1dGhvciI7czo0 OToiU3RlZiBEYXdzb24gLyBEZXZpbiBEb3VjZXR0ZSAvIEFsZXhhbmRyZSBUZWRlc2NoaSI7 czoxMDoiYXV0aG9yX3VyaSI7czoyMjoiaHR0cDovL3N0ZWZkYXdzb24uY29tLyI7czo3OiJ2 ZXJzaW9uIjtzOjQ6IjAuMTEiO3M6MTE6ImRlc2NyaXB0aW9uIjtzOjMzOiJMaWJyYXJ5IG9m IGNvbXByZXNzaW9uIGFsZ29yaXRobXMiO3M6NDoiY29kZSI7czo1MjY0OToiLyoqDQogKiBz bWRfY3J1bmNoZXJzDQogKg0KICogQSBUZXh0cGF0dGVybiBDTVMgcGx1Z2luIGxpYnJhcnkg Zm9yIHN0YW5kYXJkIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gYWxnb3JpdGhtcw0KICog IC0+IHppcC91bnppcA0KICogIC0+IHRhcg0KICogIC0+IGd6aXANCiAqICAtPiBiemlwMg0K ICoNCiAqIEBhdXRob3IgRGV2aW4gRG91Y2V0dGUNCiAqIEBhdXRob3IgQWxleGFuZHJlIFRl ZGVzY2hpDQogKiBAYXV0aG9yIFN0ZWYgRGF3c29uDQogKiBAbGluayAgIGh0dHA6Ly9zaGF3 LmNhLw0KICogQGxpbmsgICBodHRwOi8vc3RlZmRhd3Nvbi5jb20vDQogKi8NCg0KLy8gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfY3J1bmNoX2NhcGFiaWxpdGll cygkdHlwZT0nY29tcHJlc3MnKSB7DQoJJHNtZF9jcnVuY2hlcnMgPSBhcnJheSgpOw0KDQoJ Ly8gQmktZGlyZWN0aW9uYWwgY2xhc3MNCglpZiAoY2xhc3NfZXhpc3RzKCdzbWRfY3J1bmNo X3Rhcl9maWxlJykpIHsNCgkJJHNtZF9jcnVuY2hlcnNbXSA9ICd0YXInOw0KCX0NCg0KCWlm ICgkdHlwZSA9PSAnY29tcHJlc3MnKSB7DQoJCS8vIEF2YWlsYWJsZSBjb21wcmVzc29ycw0K CQlpZiAoZnVuY3Rpb25fZXhpc3RzKCdnemNvbXByZXNzJykgJiYgZnVuY3Rpb25fZXhpc3Rz KCdnem9wZW4nKSAmJiBmdW5jdGlvbl9leGlzdHMoJ2d6d3JpdGUnKSkgew0KCQkJaWYgKGNs YXNzX2V4aXN0cygnc21kX2NydW5jaF9nemlwX2ZpbGUnKSkgew0KCQkJCSRzbWRfY3J1bmNo ZXJzW10gPSAnZ3ppcCc7DQoJCQl9DQoJCQlpZiAoY2xhc3NfZXhpc3RzKCdzbWRfY3J1bmNo X3ppcF9maWxlJykpIHsNCgkJCQkkc21kX2NydW5jaGVyc1tdID0gJ3ppcCc7DQoJCQl9DQoJ CX0NCgkJaWYgKGZ1bmN0aW9uX2V4aXN0cygnYnpjb21wcmVzcycpICYmIGZ1bmN0aW9uX2V4 aXN0cygnYnpvcGVuJykgJiYgZnVuY3Rpb25fZXhpc3RzKCdiendyaXRlJykpIHsNCgkJCWlm IChjbGFzc19leGlzdHMoJ3NtZF9jcnVuY2hfYnppcF9maWxlJykpIHsNCgkJCQkkc21kX2Ny dW5jaGVyc1tdID0gJ2J6aXAyJzsNCgkJCX0NCgkJfQ0KCX0gZWxzZSB7DQoJCS8vIEF2YWls YWJsZSBkZWNvbXByZXNzb3JzDQoJCWlmIChmdW5jdGlvbl9leGlzdHMoJ2d6aW5mbGF0ZScp KSB7DQoJCQlpZiAoY2xhc3NfZXhpc3RzKCdzbWRfY3J1bmNoX2d6aXBfZmlsZScpKSB7DQoJ CQkJJHNtZF9jcnVuY2hlcnNbXSA9ICdnemlwJzsNCgkJCX0NCgkJCWlmIChjbGFzc19leGlz dHMoJ3NtZF9jcnVuY2hfZFVuemlwMicpKSB7DQoJCQkJJHNtZF9jcnVuY2hlcnNbXSA9ICd6 aXAnOw0KCQkJfQ0KCQl9DQoJCWlmIChmdW5jdGlvbl9leGlzdHMoJ2J6ZGVjb21wcmVzcycp KSB7DQoJCQlpZiAoY2xhc3NfZXhpc3RzKCdzbWRfY3J1bmNoX2J6aXBfZmlsZScpKSB7DQoJ CQkJJHNtZF9jcnVuY2hlcnNbXSA9ICdiemlwMic7DQoJCQl9DQoJCX0NCgl9DQoJcmV0dXJu ICRzbWRfY3J1bmNoZXJzOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1 bmN0aW9uIHNtZF9ta2Rpcl9yZWN1cnNpdmUoJHBhdGgsICRtb2RlID0gMDc1NSkgew0KCWlm KEBta2RpcigkcGF0aCwgJG1vZGUpIG9yIGZpbGVfZXhpc3RzKCRwYXRoKSkgcmV0dXJuIHRy dWU7DQoJcmV0dXJuIChzbWRfbWtkaXJfcmVjdXJzaXZlKGRpcm5hbWUoJHBhdGgpLCAkbW9k ZSkgYW5kIG1rZGlyKCRwYXRoLCAkbW9kZSkpOw0KfQ0KDQovKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogfCBUQVIvR1pJUC9CWklQMi9a SVAgQVJDSElWRSBDTEFTU0VTIDIuMQ0KIHwgQnkgRGV2aW4gRG91Y2V0dGUNCiB8IENvcHly aWdodCAoYykgMjAwNSBEZXZpbiBEb3VjZXR0ZQ0KIHwgRW1haWw6IGRhcmtzbm9vcHlAc2hh dy5jYQ0KICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KIHwgRW1haWwgYnVncy9zdWdnZXN0aW9ucyB0byBkYXJrc25vb3B5QHNoYXcuY2EN CiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N CiB8IFRoaXMgc2NyaXB0IGhhcyBiZWVuIGNyZWF0ZWQgYW5kIHJlbGVhc2VkIHVuZGVyDQog fCB0aGUgR05VIEdQTCBhbmQgaXMgZnJlZSB0byB1c2UgYW5kIHJlZGlzdHJpYnV0ZQ0KIHwg b25seSBpZiB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90IHJlbW92ZWQNCiArLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KDQpj bGFzcyBzbWRfY3J1bmNoX2FyY2hpdmUNCnsNCglmdW5jdGlvbiBzbWRfY3J1bmNoX2FyY2hp dmUoJG5hbWUpDQoJew0KCQkkdGhpcy0+b3B0aW9ucyA9IGFycmF5ICgNCgkJCSdiYXNlZGly JyA9PiAiLiIsDQoJCQknbmFtZScgPT4gJG5hbWUsDQoJCQkncHJlcGVuZCcgPT4gIiIsDQoJ CQknaW5tZW1vcnknID0+IDAsDQoJCQknb3ZlcndyaXRlJyA9PiAwLA0KCQkJJ3JlY3Vyc2Un ID0+IDEsDQoJCQknc3RvcmVwYXRocycgPT4gMSwNCgkJCSdmb2xsb3dsaW5rcycgPT4gMCwN CgkJCSdsZXZlbCcgPT4gMywNCgkJCSdtZXRob2QnID0+IDEsDQoJCQknc2Z4JyA9PiAiIiwN CgkJCSd0eXBlJyA9PiAiIiwNCgkJCSdjb21tZW50JyA9PiAiIg0KCQkpOw0KCQkkdGhpcy0+ ZmlsZXMgPSBhcnJheSAoKTsNCgkJJHRoaXMtPmV4Y2x1ZGUgPSBhcnJheSAoKTsNCgkJJHRo aXMtPnN0b3Jlb25seSA9IGFycmF5ICgpOw0KCQkkdGhpcy0+ZXJyb3IgPSBhcnJheSAoKTsN Cgl9DQoNCglmdW5jdGlvbiBzZXRfb3B0aW9ucygkb3B0aW9ucykNCgl7DQoJCWZvcmVhY2gg KCRvcHRpb25zIGFzICRrZXkgPT4gJHZhbHVlKQ0KCQkJJHRoaXMtPm9wdGlvbnNbJGtleV0g PSAkdmFsdWU7DQoJCWlmICghZW1wdHkgKCR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10pKQ0K CQl7DQoJCQkkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddID0gc3RyX3JlcGxhY2UoIlxcIiwg Ii8iLCAkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddKTsNCgkJCSR0aGlzLT5vcHRpb25zWydi YXNlZGlyJ10gPSBwcmVnX3JlcGxhY2UoIi9cLysvIiwgIi8iLCAkdGhpcy0+b3B0aW9uc1sn YmFzZWRpciddKTsNCgkJCSR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10gPSBwcmVnX3JlcGxh Y2UoIi9cLyQvIiwgIiIsICR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10pOw0KCQl9DQoJCWlm ICghZW1wdHkgKCR0aGlzLT5vcHRpb25zWyduYW1lJ10pKQ0KCQl7DQoJCQkkdGhpcy0+b3B0 aW9uc1snbmFtZSddID0gc3RyX3JlcGxhY2UoIlxcIiwgIi8iLCAkdGhpcy0+b3B0aW9uc1sn bmFtZSddKTsNCgkJCSR0aGlzLT5vcHRpb25zWyduYW1lJ10gPSBwcmVnX3JlcGxhY2UoIi9c LysvIiwgIi8iLCAkdGhpcy0+b3B0aW9uc1snbmFtZSddKTsNCgkJfQ0KCQlpZiAoIWVtcHR5 ICgkdGhpcy0+b3B0aW9uc1sncHJlcGVuZCddKSkNCgkJew0KCQkJJHRoaXMtPm9wdGlvbnNb J3ByZXBlbmQnXSA9IHN0cl9yZXBsYWNlKCJcXCIsICIvIiwgJHRoaXMtPm9wdGlvbnNbJ3By ZXBlbmQnXSk7DQoJCQkkdGhpcy0+b3B0aW9uc1sncHJlcGVuZCddID0gcHJlZ19yZXBsYWNl KCIvXihcLipcLyspKy8iLCAiIiwgJHRoaXMtPm9wdGlvbnNbJ3ByZXBlbmQnXSk7DQoJCQkk dGhpcy0+b3B0aW9uc1sncHJlcGVuZCddID0gcHJlZ19yZXBsYWNlKCIvXC8rLyIsICIvIiwg JHRoaXMtPm9wdGlvbnNbJ3ByZXBlbmQnXSk7DQoJCQkkdGhpcy0+b3B0aW9uc1sncHJlcGVu ZCddID0gcHJlZ19yZXBsYWNlKCIvXC8kLyIsICIiLCAkdGhpcy0+b3B0aW9uc1sncHJlcGVu ZCddKSAuICIvIjsNCgkJfQ0KCX0NCg0KCWZ1bmN0aW9uIGNyZWF0ZV9hcmNoaXZlKCkNCgl7 DQoJCSR0aGlzLT5tYWtlX2xpc3QoKTsNCg0KCQlpZiAoJHRoaXMtPm9wdGlvbnNbJ2lubWVt b3J5J10gPT0gMCkNCgkJew0KCQkJJHB3ZCA9IGdldGN3ZCgpOw0KCQkJY2hkaXIoJHRoaXMt Pm9wdGlvbnNbJ2Jhc2VkaXInXSk7DQoJCQlpZiAoJHRoaXMtPm9wdGlvbnNbJ292ZXJ3cml0 ZSddID09IDAgJiYgZmlsZV9leGlzdHMoJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSAuICgkdGhp cy0+b3B0aW9uc1sndHlwZSddID09ICJnemlwIiB8fCAkdGhpcy0+b3B0aW9uc1sndHlwZSdd ID09ICJiemlwIiA/ICIudG1wIiA6ICIiKSkpDQoJCQl7DQoJCQkJJHRoaXMtPmVycm9yW10g PSAiRmlsZSB7JHRoaXMtPm9wdGlvbnNbJ25hbWUnXX0gYWxyZWFkeSBleGlzdHMuIjsNCgkJ CQljaGRpcigkcHdkKTsNCgkJCQlyZXR1cm4gMDsNCgkJCX0NCgkJCWVsc2UgaWYgKCR0aGlz LT5hcmNoaXZlID0gQGZvcGVuKCR0aGlzLT5vcHRpb25zWyduYW1lJ10gLiAoJHRoaXMtPm9w dGlvbnNbJ3R5cGUnXSA9PSAiZ3ppcCIgfHwgJHRoaXMtPm9wdGlvbnNbJ3R5cGUnXSA9PSAi YnppcCIgPyAiLnRtcCIgOiAiIiksICJ3YisiKSkNCgkJCQljaGRpcigkcHdkKTsNCgkJCWVs c2UNCgkJCXsNCgkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJDb3VsZCBub3Qgb3BlbiB7JHRoaXMt Pm9wdGlvbnNbJ25hbWUnXX0gZm9yIHdyaXRpbmcuIjsNCgkJCQljaGRpcigkcHdkKTsNCgkJ CQlyZXR1cm4gMDsNCgkJCX0NCgkJfQ0KCQllbHNlDQoJCQkkdGhpcy0+YXJjaGl2ZSA9ICIi Ow0KDQoJCXN3aXRjaCAoJHRoaXMtPm9wdGlvbnNbJ3R5cGUnXSkNCgkJew0KCQljYXNlICJ6 aXAiOg0KCQkJaWYgKCEkdGhpcy0+Y3JlYXRlX3ppcCgpKQ0KCQkJew0KCQkJCSR0aGlzLT5l cnJvcltdID0gIkNvdWxkIG5vdCBjcmVhdGUgemlwIGZpbGUuIjsNCgkJCQlyZXR1cm4gMDsN CgkJCX0NCgkJCWJyZWFrOw0KCQljYXNlICJiemlwIjoNCgkJCWlmICghJHRoaXMtPmNyZWF0 ZV90YXIoKSkNCgkJCXsNCgkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJDb3VsZCBub3QgY3JlYXRl IHRhciBmaWxlLiI7DQoJCQkJcmV0dXJuIDA7DQoJCQl9DQoJCQlpZiAoISR0aGlzLT5jcmVh dGVfYnppcCgpKQ0KCQkJew0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBjcmVh dGUgYnppcDIgZmlsZS4iOw0KCQkJCXJldHVybiAwOw0KCQkJfQ0KCQkJYnJlYWs7DQoJCWNh c2UgImd6aXAiOg0KCQkJaWYgKCEkdGhpcy0+Y3JlYXRlX3RhcigpKQ0KCQkJew0KCQkJCSR0 aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBjcmVhdGUgdGFyIGZpbGUuIjsNCgkJCQlyZXR1 cm4gMDsNCgkJCX0NCgkJCWlmICghJHRoaXMtPmNyZWF0ZV9nemlwKCkpDQoJCQl7DQoJCQkJ JHRoaXMtPmVycm9yW10gPSAiQ291bGQgbm90IGNyZWF0ZSBnemlwIGZpbGUuIjsNCgkJCQly ZXR1cm4gMDsNCgkJCX0NCgkJCWJyZWFrOw0KCQljYXNlICJ0YXIiOg0KCQkJaWYgKCEkdGhp cy0+Y3JlYXRlX3RhcigpKQ0KCQkJew0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5v dCBjcmVhdGUgdGFyIGZpbGUuIjsNCgkJCQlyZXR1cm4gMDsNCgkJCX0NCgkJfQ0KDQoJCWlm ICgkdGhpcy0+b3B0aW9uc1snaW5tZW1vcnknXSA9PSAwKQ0KCQl7DQoJCQlmY2xvc2UoJHRo aXMtPmFyY2hpdmUpOw0KCQkJaWYgKCR0aGlzLT5vcHRpb25zWyd0eXBlJ10gPT0gImd6aXAi IHx8ICR0aGlzLT5vcHRpb25zWyd0eXBlJ10gPT0gImJ6aXAiKQ0KCQkJCXVubGluaygkdGhp cy0+b3B0aW9uc1snYmFzZWRpciddIC4gIi8iIC4gJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSAu ICIudG1wIik7DQoJCX0NCgl9DQoNCglmdW5jdGlvbiBhZGRfZGF0YSgkZGF0YSkNCgl7DQoJ CWlmICgkdGhpcy0+b3B0aW9uc1snaW5tZW1vcnknXSA9PSAwKQ0KCQkJZndyaXRlKCR0aGlz LT5hcmNoaXZlLCAkZGF0YSk7DQoJCWVsc2UNCgkJCSR0aGlzLT5hcmNoaXZlIC49ICRkYXRh Ow0KCX0NCg0KCWZ1bmN0aW9uIG1ha2VfbGlzdCgpDQoJew0KCQlpZiAoIWVtcHR5ICgkdGhp cy0+ZXhjbHVkZSkpDQoJCQlmb3JlYWNoICgkdGhpcy0+ZmlsZXMgYXMgJGtleSA9PiAkdmFs dWUpDQoJCQkJZm9yZWFjaCAoJHRoaXMtPmV4Y2x1ZGUgYXMgJGN1cnJlbnQpDQoJCQkJCWlm ICgkdmFsdWVbJ25hbWUnXSA9PSAkY3VycmVudFsnbmFtZSddKQ0KCQkJCQkJdW5zZXQgKCR0 aGlzLT5maWxlc1ska2V5XSk7DQoJCWlmICghZW1wdHkgKCR0aGlzLT5zdG9yZW9ubHkpKQ0K CQkJZm9yZWFjaCAoJHRoaXMtPmZpbGVzIGFzICRrZXkgPT4gJHZhbHVlKQ0KCQkJCWZvcmVh Y2ggKCR0aGlzLT5zdG9yZW9ubHkgYXMgJGN1cnJlbnQpDQoJCQkJCWlmICgkdmFsdWVbJ25h bWUnXSA9PSAkY3VycmVudFsnbmFtZSddKQ0KCQkJCQkJJHRoaXMtPmZpbGVzWyRrZXldWydt ZXRob2QnXSA9IDA7DQoJCXVuc2V0ICgkdGhpcy0+ZXhjbHVkZSwgJHRoaXMtPnN0b3Jlb25s eSk7DQoJfQ0KDQoJZnVuY3Rpb24gYWRkX2ZpbGVzKCRsaXN0KQ0KCXsNCgkJJHRlbXAgPSAk dGhpcy0+bGlzdF9maWxlcygkbGlzdCk7DQoJCWZvcmVhY2ggKCR0ZW1wIGFzICRjdXJyZW50 KQ0KCQkJJHRoaXMtPmZpbGVzW10gPSAkY3VycmVudDsNCgl9DQoNCglmdW5jdGlvbiBleGNs dWRlX2ZpbGVzKCRsaXN0KQ0KCXsNCgkJJHRlbXAgPSAkdGhpcy0+bGlzdF9maWxlcygkbGlz dCk7DQoJCWZvcmVhY2ggKCR0ZW1wIGFzICRjdXJyZW50KQ0KCQkJJHRoaXMtPmV4Y2x1ZGVb XSA9ICRjdXJyZW50Ow0KCX0NCg0KCWZ1bmN0aW9uIHN0b3JlX2ZpbGVzKCRsaXN0KQ0KCXsN CgkJJHRlbXAgPSAkdGhpcy0+bGlzdF9maWxlcygkbGlzdCk7DQoJCWZvcmVhY2ggKCR0ZW1w IGFzICRjdXJyZW50KQ0KCQkJJHRoaXMtPnN0b3Jlb25seVtdID0gJGN1cnJlbnQ7DQoJfQ0K DQoJZnVuY3Rpb24gbGlzdF9maWxlcygkbGlzdCkNCgl7DQoJCWlmICghaXNfYXJyYXkgKCRs aXN0KSkNCgkJew0KCQkJJHRlbXAgPSAkbGlzdDsNCgkJCSRsaXN0ID0gYXJyYXkgKCR0ZW1w KTsNCgkJCXVuc2V0ICgkdGVtcCk7DQoJCX0NCg0KCQkkZmlsZXMgPSBhcnJheSAoKTsNCg0K CQkkcHdkID0gZ2V0Y3dkKCk7DQoJCWNoZGlyKCR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10p Ow0KDQoJCWZvcmVhY2ggKCRsaXN0IGFzICRjdXJyZW50KQ0KCQl7DQoJCQkkY3VycmVudCA9 IHN0cl9yZXBsYWNlKCJcXCIsICIvIiwgJGN1cnJlbnQpOw0KCQkJJGN1cnJlbnQgPSBwcmVn X3JlcGxhY2UoIi9cLysvIiwgIi8iLCAkY3VycmVudCk7DQoJCQkkY3VycmVudCA9IHByZWdf cmVwbGFjZSgiL1wvJC8iLCAiIiwgJGN1cnJlbnQpOw0KCQkJaWYgKHN0cnN0cigkY3VycmVu dCwgIioiKSkNCgkJCXsNCgkJCQkkcmVnZXggPSBwcmVnX3JlcGxhY2UoIi8oW1xcXF5cJFwu XFtcXVx8XChcKVw/XCtce1x9XC9dKS8iLCAiXFxcXFxcMSIsICRjdXJyZW50KTsNCgkJCQkk cmVnZXggPSBzdHJfcmVwbGFjZSgiKiIsICIuKiIsICRyZWdleCk7DQoJCQkJJGRpciA9IHN0 cnN0cigkY3VycmVudCwgIi8iKSA/IHN1YnN0cigkY3VycmVudCwgMCwgc3RycnBvcygkY3Vy cmVudCwgIi8iKSkgOiAiLiI7DQoJCQkJJHRlbXAgPSAkdGhpcy0+cGFyc2VfZGlyKCRkaXIp Ow0KCQkJCWZvcmVhY2ggKCR0ZW1wIGFzICRjdXJyZW50MikNCgkJCQkJaWYgKHByZWdfbWF0 Y2goIi9eeyRyZWdleH0kL2kiLCAkY3VycmVudDJbJ25hbWUnXSkpDQoJCQkJCQkkZmlsZXNb XSA9ICRjdXJyZW50MjsNCgkJCQl1bnNldCAoJHJlZ2V4LCAkZGlyLCAkdGVtcCwgJGN1cnJl bnQpOw0KCQkJfQ0KCQkJZWxzZSBpZiAoQGlzX2RpcigkY3VycmVudCkpDQoJCQl7DQoJCQkJ JHRlbXAgPSAkdGhpcy0+cGFyc2VfZGlyKCRjdXJyZW50KTsNCgkJCQlmb3JlYWNoICgkdGVt cCBhcyAkZmlsZSkNCgkJCQkJJGZpbGVzW10gPSAkZmlsZTsNCgkJCQl1bnNldCAoJHRlbXAs ICRmaWxlKTsNCgkJCX0NCgkJCWVsc2UgaWYgKEBmaWxlX2V4aXN0cygkY3VycmVudCkpDQoJ CQkJJGZpbGVzW10gPSBhcnJheSAoJ25hbWUnID0+ICRjdXJyZW50LCAnbmFtZTInID0+ICR0 aGlzLT5vcHRpb25zWydwcmVwZW5kJ10gLg0KCQkJCQlwcmVnX3JlcGxhY2UoIi8oXC4rXC8r KSsvIiwgIiIsICgkdGhpcy0+b3B0aW9uc1snc3RvcmVwYXRocyddID09IDAgJiYgc3Ryc3Ry KCRjdXJyZW50LCAiLyIpKSA/DQoJCQkJCXN1YnN0cigkY3VycmVudCwgc3RycnBvcygkY3Vy cmVudCwgIi8iKSArIDEpIDogJGN1cnJlbnQpLA0KCQkJCQkndHlwZScgPT4gQGlzX2xpbmso JGN1cnJlbnQpICYmICR0aGlzLT5vcHRpb25zWydmb2xsb3dsaW5rcyddID09IDAgPyAyIDog MCwNCgkJCQkJJ2V4dCcgPT4gc3Vic3RyKCRjdXJyZW50LCBzdHJycG9zKCRjdXJyZW50LCAi LiIpKSwgJ3N0YXQnID0+IHN0YXQoJGN1cnJlbnQpKTsNCgkJfQ0KDQoJCWNoZGlyKCRwd2Qp Ow0KDQoJCXVuc2V0ICgkY3VycmVudCwgJHB3ZCk7DQoNCgkJdXNvcnQoJGZpbGVzLCBhcnJh eSAoInNtZF9jcnVuY2hfYXJjaGl2ZSIsICJzb3J0X2ZpbGVzIikpOw0KDQoJCXJldHVybiAk ZmlsZXM7DQoJfQ0KDQoJZnVuY3Rpb24gcGFyc2VfZGlyKCRkaXJuYW1lKQ0KCXsNCgkJaWYg KCR0aGlzLT5vcHRpb25zWydzdG9yZXBhdGhzJ10gPT0gMSAmJiAhcHJlZ19tYXRjaCgiL14o XC4rXC8qKSskLyIsICRkaXJuYW1lKSkNCgkJCSRmaWxlcyA9IGFycmF5IChhcnJheSAoJ25h bWUnID0+ICRkaXJuYW1lLCAnbmFtZTInID0+ICR0aGlzLT5vcHRpb25zWydwcmVwZW5kJ10g Lg0KCQkJCXByZWdfcmVwbGFjZSgiLyhcLitcLyspKy8iLCAiIiwgKCR0aGlzLT5vcHRpb25z WydzdG9yZXBhdGhzJ10gPT0gMCAmJiBzdHJzdHIoJGRpcm5hbWUsICIvIikpID8NCgkJCQlz dWJzdHIoJGRpcm5hbWUsIHN0cnJwb3MoJGRpcm5hbWUsICIvIikgKyAxKSA6ICRkaXJuYW1l KSwgJ3R5cGUnID0+IDUsICdzdGF0JyA9PiBzdGF0KCRkaXJuYW1lKSkpOw0KCQllbHNlDQoJ CQkkZmlsZXMgPSBhcnJheSAoKTsNCgkJJGRpciA9IEBvcGVuZGlyKCRkaXJuYW1lKTsNCg0K CQl3aGlsZSAoJGZpbGUgPSBAcmVhZGRpcigkZGlyKSkNCgkJew0KCQkJJGZ1bGxuYW1lID0g JGRpcm5hbWUgLiAiLyIgLiAkZmlsZTsNCgkJCWlmICgkZmlsZSA9PSAiLiIgfHwgJGZpbGUg PT0gIi4uIikNCgkJCQljb250aW51ZTsNCgkJCWVsc2UgaWYgKEBpc19kaXIoJGZ1bGxuYW1l KSkNCgkJCXsNCgkJCQlpZiAoZW1wdHkgKCR0aGlzLT5vcHRpb25zWydyZWN1cnNlJ10pKQ0K CQkJCQljb250aW51ZTsNCgkJCQkkdGVtcCA9ICR0aGlzLT5wYXJzZV9kaXIoJGZ1bGxuYW1l KTsNCgkJCQlmb3JlYWNoICgkdGVtcCBhcyAkZmlsZTIpDQoJCQkJCSRmaWxlc1tdID0gJGZp bGUyOw0KCQkJfQ0KCQkJZWxzZSBpZiAoQGZpbGVfZXhpc3RzKCRmdWxsbmFtZSkpDQoJCQkJ JGZpbGVzW10gPSBhcnJheSAoJ25hbWUnID0+ICRmdWxsbmFtZSwgJ25hbWUyJyA9PiAkdGhp cy0+b3B0aW9uc1sncHJlcGVuZCddIC4NCgkJCQkJcHJlZ19yZXBsYWNlKCIvKFwuK1wvKykr LyIsICIiLCAoJHRoaXMtPm9wdGlvbnNbJ3N0b3JlcGF0aHMnXSA9PSAwICYmIHN0cnN0cigk ZnVsbG5hbWUsICIvIikpID8NCgkJCQkJc3Vic3RyKCRmdWxsbmFtZSwgc3RycnBvcygkZnVs bG5hbWUsICIvIikgKyAxKSA6ICRmdWxsbmFtZSksDQoJCQkJCSd0eXBlJyA9PiBAaXNfbGlu aygkZnVsbG5hbWUpICYmICR0aGlzLT5vcHRpb25zWydmb2xsb3dsaW5rcyddID09IDAgPyAy IDogMCwNCgkJCQkJJ2V4dCcgPT4gc3Vic3RyKCRmaWxlLCBzdHJycG9zKCRmaWxlLCAiLiIp KSwgJ3N0YXQnID0+IHN0YXQoJGZ1bGxuYW1lKSk7DQoJCX0NCg0KCQlAY2xvc2VkaXIoJGRp cik7DQoNCgkJcmV0dXJuICRmaWxlczsNCgl9DQoNCglmdW5jdGlvbiBzb3J0X2ZpbGVzKCRh LCAkYikNCgl7DQoJCWlmICgkYVsndHlwZSddICE9ICRiWyd0eXBlJ10pDQoJCQlpZiAoJGFb J3R5cGUnXSA9PSA1IHx8ICRiWyd0eXBlJ10gPT0gMikNCgkJCQlyZXR1cm4gLTE7DQoJCQll bHNlIGlmICgkYVsndHlwZSddID09IDIgfHwgJGJbJ3R5cGUnXSA9PSA1KQ0KCQkJCXJldHVy biAxOw0KCQllbHNlIGlmICgkYVsndHlwZSddID09IDUpDQoJCQlyZXR1cm4gc3RyY21wKHN0 cnRvbG93ZXIoJGFbJ25hbWUnXSksIHN0cnRvbG93ZXIoJGJbJ25hbWUnXSkpOw0KCQllbHNl IGlmICgkYVsnZXh0J10gIT0gJGJbJ2V4dCddKQ0KCQkJcmV0dXJuIHN0cmNtcCgkYVsnZXh0 J10sICRiWydleHQnXSk7DQoJCWVsc2UgaWYgKCRhWydzdGF0J11bN10gIT0gJGJbJ3N0YXQn XVs3XSkNCgkJCXJldHVybiAkYVsnc3RhdCddWzddID4gJGJbJ3N0YXQnXVs3XSA/IC0xIDog MTsNCgkJZWxzZQ0KCQkJcmV0dXJuIHN0cmNtcChzdHJ0b2xvd2VyKCRhWyduYW1lJ10pLCBz dHJ0b2xvd2VyKCRiWyduYW1lJ10pKTsNCgkJcmV0dXJuIDA7DQoJfQ0KDQoJZnVuY3Rpb24g ZG93bmxvYWRfZmlsZSgpDQoJew0KCQlpZiAoJHRoaXMtPm9wdGlvbnNbJ2lubWVtb3J5J10g PT0gMCkNCgkJew0KCQkJJHRoaXMtPmVycm9yW10gPSAiQ2FuIG9ubHkgdXNlIGRvd25sb2Fk X2ZpbGUoKSBpZiBhcmNoaXZlIGlzIGluIG1lbW9yeS4gUmVkaXJlY3QgdG8gZmlsZSBvdGhl cndpc2UsIGl0IGlzIGZhc3Rlci4iOw0KCQkJcmV0dXJuOw0KCQl9DQoJCXN3aXRjaCAoJHRo aXMtPm9wdGlvbnNbJ3R5cGUnXSkNCgkJew0KCQljYXNlICJ6aXAiOg0KCQkJaGVhZGVyKCJD b250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3ppcCIpOw0KCQkJYnJlYWs7DQoJCWNhc2UgImJ6 aXAiOg0KCQkJaGVhZGVyKCJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtYnppcDIiKTsN CgkJCWJyZWFrOw0KCQljYXNlICJnemlwIjoNCgkJCWhlYWRlcigiQ29udGVudC1UeXBlOiBh cHBsaWNhdGlvbi94LWd6aXAiKTsNCgkJCWJyZWFrOw0KCQljYXNlICJ0YXIiOg0KCQkJaGVh ZGVyKCJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtdGFyIik7DQoJCX0NCgkJJGhlYWRl ciA9ICJDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT1cIiI7DQoJ CSRoZWFkZXIgLj0gc3Ryc3RyKCR0aGlzLT5vcHRpb25zWyduYW1lJ10sICIvIikgPyBzdWJz dHIoJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSwgc3RycnBvcygkdGhpcy0+b3B0aW9uc1snbmFt ZSddLCAiLyIpICsgMSkgOiAkdGhpcy0+b3B0aW9uc1snbmFtZSddOw0KCQkkaGVhZGVyIC49 ICJcIiI7DQoJCWhlYWRlcigkaGVhZGVyKTsNCgkJaGVhZGVyKCJDb250ZW50LUxlbmd0aDog IiAuIHN0cmxlbigkdGhpcy0+YXJjaGl2ZSkpOw0KCQloZWFkZXIoIkNvbnRlbnQtVHJhbnNm ZXItRW5jb2Rpbmc6IGJpbmFyeSIpOw0KCQloZWFkZXIoIkNhY2hlLUNvbnRyb2w6IG5vLWNh Y2hlLCBtdXN0LXJldmFsaWRhdGUsIG1heC1hZ2U9NjAiKTsNCgkJaGVhZGVyKCJFeHBpcmVz OiBTYXQsIDAxIEphbiAyMDAwIDEyOjAwOjAwIEdNVCIpOw0KCQlwcmludCgkdGhpcy0+YXJj aGl2ZSk7DQoJfQ0KfQ0KDQpjbGFzcyBzbWRfY3J1bmNoX3Rhcl9maWxlIGV4dGVuZHMgc21k X2NydW5jaF9hcmNoaXZlDQp7DQoJZnVuY3Rpb24gc21kX2NydW5jaF90YXJfZmlsZSgkbmFt ZSkNCgl7DQoJCSR0aGlzLT5zbWRfY3J1bmNoX2FyY2hpdmUoJG5hbWUpOw0KCQkkdGhpcy0+ b3B0aW9uc1sndHlwZSddID0gInRhciI7DQoJfQ0KDQoJZnVuY3Rpb24gY3JlYXRlX3Rhcigp DQoJew0KCQkkcHdkID0gZ2V0Y3dkKCk7DQoJCWNoZGlyKCR0aGlzLT5vcHRpb25zWydiYXNl ZGlyJ10pOw0KDQoJCWZvcmVhY2ggKCR0aGlzLT5maWxlcyBhcyAkY3VycmVudCkNCgkJew0K CQkJaWYgKCRjdXJyZW50WyduYW1lJ10gPT0gJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSkNCgkJ CQljb250aW51ZTsNCgkJCWlmIChzdHJsZW4oJGN1cnJlbnRbJ25hbWUyJ10pID4gOTkpDQoJ CQl7DQoJCQkJJHBhdGggPSBzdWJzdHIoJGN1cnJlbnRbJ25hbWUyJ10sIDAsIHN0cnBvcygk Y3VycmVudFsnbmFtZTInXSwgIi8iLCBzdHJsZW4oJGN1cnJlbnRbJ25hbWUyJ10pIC0gMTAw KSArIDEpOw0KCQkJCSRjdXJyZW50WyduYW1lMiddID0gc3Vic3RyKCRjdXJyZW50WyduYW1l MiddLCBzdHJsZW4oJHBhdGgpKTsNCgkJCQlpZiAoc3RybGVuKCRwYXRoKSA+IDE1NCB8fCBz dHJsZW4oJGN1cnJlbnRbJ25hbWUyJ10pID4gOTkpDQoJCQkJew0KCQkJCQkkdGhpcy0+ZXJy b3JbXSA9ICJDb3VsZCBub3QgYWRkIHskcGF0aH17JGN1cnJlbnRbJ25hbWUyJ119IHRvIGFy Y2hpdmUgYmVjYXVzZSB0aGUgZmlsZW5hbWUgaXMgdG9vIGxvbmcuIjsNCgkJCQkJY29udGlu dWU7DQoJCQkJfQ0KCQkJfQ0KCQkJJGJsb2NrID0gcGFjaygiYTEwMGE4YThhOGExMmExMmE4 YTFhMTAwYTZhMmEzMmEzMmE4YThhMTU1YTEyIiwgJGN1cnJlbnRbJ25hbWUyJ10sIHNwcmlu dGYoIiUwN28iLA0KCQkJCSRjdXJyZW50WydzdGF0J11bMl0pLCBzcHJpbnRmKCIlMDdvIiwg JGN1cnJlbnRbJ3N0YXQnXVs0XSksIHNwcmludGYoIiUwN28iLCAkY3VycmVudFsnc3RhdCdd WzVdKSwNCgkJCQlzcHJpbnRmKCIlMDExbyIsICRjdXJyZW50Wyd0eXBlJ10gPT0gMiA/IDAg OiAkY3VycmVudFsnc3RhdCddWzddKSwgc3ByaW50ZigiJTAxMW8iLCAkY3VycmVudFsnc3Rh dCddWzldKSwNCgkJCQkiICAgICAgICAiLCAkY3VycmVudFsndHlwZSddLCAkY3VycmVudFsn dHlwZSddID09IDIgPyBAcmVhZGxpbmsoJGN1cnJlbnRbJ25hbWUnXSkgOiAiIiwgInVzdGFy ICIsICIgIiwNCgkJCQkiVW5rbm93biIsICJVbmtub3duIiwgIiIsICIiLCAhZW1wdHkgKCRw YXRoKSA/ICRwYXRoIDogIiIsICIiKTsNCg0KCQkJJGNoZWNrc3VtID0gMDsNCgkJCWZvciAo JGkgPSAwOyAkaSA8IDUxMjsgJGkrKykNCgkJCQkkY2hlY2tzdW0gKz0gb3JkKHN1YnN0cigk YmxvY2ssICRpLCAxKSk7DQoJCQkkY2hlY2tzdW0gPSBwYWNrKCJhOCIsIHNwcmludGYoIiUw N28iLCAkY2hlY2tzdW0pKTsNCgkJCSRibG9jayA9IHN1YnN0cl9yZXBsYWNlKCRibG9jaywg JGNoZWNrc3VtLCAxNDgsIDgpOw0KDQoJCQlpZiAoJGN1cnJlbnRbJ3R5cGUnXSA9PSAyIHx8 ICRjdXJyZW50WydzdGF0J11bN10gPT0gMCkNCgkJCQkkdGhpcy0+YWRkX2RhdGEoJGJsb2Nr KTsNCgkJCWVsc2UgaWYgKCRmcCA9IEBmb3BlbigkY3VycmVudFsnbmFtZSddLCAicmIiKSkN CgkJCXsNCgkJCQkkdGhpcy0+YWRkX2RhdGEoJGJsb2NrKTsNCgkJCQl3aGlsZSAoJHRlbXAg PSBmcmVhZCgkZnAsIDEwNDg1NzYpKQ0KCQkJCQkkdGhpcy0+YWRkX2RhdGEoJHRlbXApOw0K CQkJCWlmICgkY3VycmVudFsnc3RhdCddWzddICUgNTEyID4gMCkNCgkJCQl7DQoJCQkJCSR0 ZW1wID0gIiI7DQoJCQkJCWZvciAoJGkgPSAwOyAkaSA8IDUxMiAtICRjdXJyZW50WydzdGF0 J11bN10gJSA1MTI7ICRpKyspDQoJCQkJCQkkdGVtcCAuPSAiXDAiOw0KCQkJCQkkdGhpcy0+ YWRkX2RhdGEoJHRlbXApOw0KCQkJCX0NCgkJCQlmY2xvc2UoJGZwKTsNCgkJCX0NCgkJCWVs c2UNCgkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJDb3VsZCBub3Qgb3BlbiBmaWxlIHskY3VycmVu dFsnbmFtZSddfSBmb3IgcmVhZGluZy4gSXQgd2FzIG5vdCBhZGRlZC4iOw0KCQl9DQoNCgkJ JHRoaXMtPmFkZF9kYXRhKHBhY2soImExMDI0IiwgIiIpKTsNCg0KCQljaGRpcigkcHdkKTsN Cg0KCQlyZXR1cm4gMTsNCgl9DQoNCglmdW5jdGlvbiBleHRyYWN0X2ZpbGVzKCkNCgl7DQoJ CSRwd2QgPSBnZXRjd2QoKTsNCgkJY2hkaXIoJHRoaXMtPm9wdGlvbnNbJ2Jhc2VkaXInXSk7 DQoNCgkJaWYgKCRmcCA9ICR0aGlzLT5vcGVuX2FyY2hpdmUoKSkNCgkJew0KCQkJaWYgKCR0 aGlzLT5vcHRpb25zWydpbm1lbW9yeSddID09IDEpDQoJCQkJJHRoaXMtPmZpbGVzID0gYXJy YXkgKCk7DQoNCgkJCXdoaWxlICgkYmxvY2sgPSBmcmVhZCgkZnAsIDUxMikpDQoJCQl7DQoJ CQkJJHRlbXAgPSB1bnBhY2soImExMDBuYW1lL2E4bW9kZS9hOHVpZC9hOGdpZC9hMTJzaXpl L2ExMm10aW1lL2E4Y2hlY2tzdW0vYTF0eXBlL2ExMDBzeW1saW5rL2E2bWFnaWMvYTJ0ZW1w L2EzMnRlbXAvYTMydGVtcC9hOHRlbXAvYTh0ZW1wL2ExNTVwcmVmaXgvYTEydGVtcCIsICRi bG9jayk7DQoJCQkJJGZpbGUgPSBhcnJheSAoDQoJCQkJCSduYW1lJyA9PiAkdGVtcFsncHJl Zml4J10gLiAkdGVtcFsnbmFtZSddLA0KCQkJCQknc3RhdCcgPT4gYXJyYXkgKA0KCQkJCQkJ MiA9PiAkdGVtcFsnbW9kZSddLA0KCQkJCQkJNCA9PiBvY3RkZWMoJHRlbXBbJ3VpZCddKSwN CgkJCQkJCTUgPT4gb2N0ZGVjKCR0ZW1wWydnaWQnXSksDQoJCQkJCQk3ID0+IG9jdGRlYygk dGVtcFsnc2l6ZSddKSwNCgkJCQkJCTkgPT4gb2N0ZGVjKCR0ZW1wWydtdGltZSddKSwNCgkJ CQkJKSwNCgkJCQkJJ2NoZWNrc3VtJyA9PiBvY3RkZWMoJHRlbXBbJ2NoZWNrc3VtJ10pLA0K CQkJCQkndHlwZScgPT4gJHRlbXBbJ3R5cGUnXSwNCgkJCQkJJ21hZ2ljJyA9PiAkdGVtcFsn bWFnaWMnXSwNCgkJCQkpOw0KDQoJCQkJaWYgKCRmaWxlWydjaGVja3N1bSddID09IDB4MDAw MDAwMDApDQoJCQkJCWJyZWFrOw0KCQkJCWVsc2UgaWYgKHN1YnN0cigkZmlsZVsnbWFnaWMn XSwgMCwgNSkgIT0gInVzdGFyIikNCgkJCQl7DQoJCQkJCSR0aGlzLT5lcnJvcltdID0gIlRo aXMgc2NyaXB0IGRvZXMgbm90IHN1cHBvcnQgZXh0cmFjdGluZyB0aGlzIHR5cGUgb2YgdGFy IGZpbGUuIjsNCgkJCQkJYnJlYWs7DQoJCQkJfQ0KCQkJCSRibG9jayA9IHN1YnN0cl9yZXBs YWNlKCRibG9jaywgIiAgICAgICAgIiwgMTQ4LCA4KTsNCgkJCQkkY2hlY2tzdW0gPSAwOw0K CQkJCWZvciAoJGkgPSAwOyAkaSA8IDUxMjsgJGkrKykNCgkJCQkJJGNoZWNrc3VtICs9IG9y ZChzdWJzdHIoJGJsb2NrLCAkaSwgMSkpOw0KCQkJCWlmICgkZmlsZVsnY2hlY2tzdW0nXSAh PSAkY2hlY2tzdW0pDQoJCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBleHRyYWN0 IGZyb20geyR0aGlzLT5vcHRpb25zWyduYW1lJ119LCBpdCBpcyBjb3JydXB0LiI7DQoNCgkJ CQkvLyBBZGRlZDogY3JlYXRlIGRpciBpZiByZXF1aXJlZA0KCQkJCWlmIChzdHJwb3MoJGZp bGVbJ25hbWUnXSwgJy4uJykgPT09IGZhbHNlKSB7DQoJCQkJCSRwYXRoX3BhcnRzID0gcGF0 aGluZm8oJGZpbGVbJ25hbWUnXSk7DQoJCQkJCWlmICghZmlsZV9leGlzdHMoJGZpbGVbJ25h bWUnXSkpIHsNCgkJCQkJCSRyZXQgPSBzbWRfbWtkaXJfcmVjdXJzaXZlKCgoaXNzZXQoJHBh dGhfcGFydHNbJ2V4dGVuc2lvbiddKSkgPyBkaXJuYW1lKCR0aGlzLT5vcHRpb25zWydiYXNl ZGlyJ10uRFMuJGZpbGVbJ25hbWUnXSkgOiAkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddLkRT LiRmaWxlWyduYW1lJ10pKTsNCgkJCQkJfQ0KCQkJCX0NCg0KCQkJCWlmICgkdGhpcy0+b3B0 aW9uc1snaW5tZW1vcnknXSA9PSAxKQ0KCQkJCXsNCgkJCQkJJGZpbGVbJ2RhdGEnXSA9IGZy ZWFkKCRmcCwgJGZpbGVbJ3N0YXQnXVs3XSk7DQoJCQkJCWZyZWFkKCRmcCwgKDUxMiAtICRm aWxlWydzdGF0J11bN10gJSA1MTIpID09IDUxMiA/IDAgOiAoNTEyIC0gJGZpbGVbJ3N0YXQn XVs3XSAlIDUxMikpOw0KCQkJCQl1bnNldCAoJGZpbGVbJ2NoZWNrc3VtJ10sICRmaWxlWydt YWdpYyddKTsNCgkJCQkJJHRoaXMtPmZpbGVzW10gPSAkZmlsZTsNCgkJCQl9DQoJCQkJZWxz ZSBpZiAoJGZpbGVbJ3R5cGUnXSA9PSA1KQ0KCQkJCXsNCgkJCQkJaWYgKCFpc19kaXIoJGZp bGVbJ25hbWUnXSkpDQoJCQkJCQlta2RpcigkZmlsZVsnbmFtZSddLCAkZmlsZVsnc3RhdCdd WzJdKTsNCgkJCQl9DQoJCQkJZWxzZSBpZiAoJHRoaXMtPm9wdGlvbnNbJ292ZXJ3cml0ZSdd ID09IDAgJiYgZmlsZV9leGlzdHMoJGZpbGVbJ25hbWUnXSkpDQoJCQkJew0KCQkJCQkkdGhp cy0+ZXJyb3JbXSA9ICJ7JGZpbGVbJ25hbWUnXX0gYWxyZWFkeSBleGlzdHMuIjsNCgkJCQkJ Y29udGludWU7DQoJCQkJfQ0KCQkJCWVsc2UgaWYgKCRmaWxlWyd0eXBlJ10gPT0gMikNCgkJ CQl7DQoJCQkJCXN5bWxpbmsoJHRlbXBbJ3N5bWxpbmsnXSwgJGZpbGVbJ25hbWUnXSk7DQoJ CQkJCWNobW9kKCRmaWxlWyduYW1lJ10sICRmaWxlWydzdGF0J11bMl0pOw0KCQkJCX0NCgkJ CQllbHNlIGlmICgkbmV3ID0gZm9wZW4oJGZpbGVbJ25hbWUnXSwgIndiIikpDQoJCQkJew0K CQkJCQlmd3JpdGUoJG5ldywgZnJlYWQoJGZwLCAkZmlsZVsnc3RhdCddWzddKSk7DQoJCQkJ CWZyZWFkKCRmcCwgKDUxMiAtICRmaWxlWydzdGF0J11bN10gJSA1MTIpID09IDUxMiA/IDAg OiAoNTEyIC0gJGZpbGVbJ3N0YXQnXVs3XSAlIDUxMikpOw0KCQkJCQlmY2xvc2UoJG5ldyk7 DQoJCQkJCUBjaG1vZCgkZmlsZVsnbmFtZSddLCAwNjQ0KTsgLy8gSGFyZC1jb2RlZCBmb3Ig bm93IGJlY2F1c2UgdGhlIHN0dXBpZCAwMTAwNjQ0IHZhbHVlIGluICRmaWxlWydzdGF0J11b Ml0gY29uZnVzZXMgdGhlIE9TL1BIUA0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQkk dGhpcy0+ZXJyb3JbXSA9ICJDb3VsZCBub3Qgb3BlbiB7JGZpbGVbJ25hbWUnXX0gZm9yIHdy aXRpbmcuIjsNCgkJCQkJY29udGludWU7DQoJCQkJfQ0KCQkJCS8vIFJlbW92ZSBvd25lciBh bmQgZ3JvdXAgc2V0dGluZyBzaW5jZSB0aGVyZSBpcyBhbG1vc3QgMCBsaWtlbGlob29kIHRo ZSBmaWxlcyB3aWxsIGhhdmUgdGhlIHNhbWUgdXNlci9ncm91cCBhY3Jvc3Mgc3lzdGVtcw0K CQkJCS8vIEluIG90aGVyIHdvcmRzLCBsZWF2ZSBvd25lci9ncm91cCBhdCB0aGUgQXBhY2hl IGRlZmF1bHQgLS0gd2hpY2ggaXMgd2hhdCB3ZSB3YW50DQovLwkJCQljaG93bigkZmlsZVsn bmFtZSddLCAkZmlsZVsnc3RhdCddWzRdKTsNCi8vCQkJCWNoZ3JwKCRmaWxlWyduYW1lJ10s ICRmaWxlWydzdGF0J11bNV0pOw0KCQkJCUB0b3VjaCgkZmlsZVsnbmFtZSddLCAkZmlsZVsn c3RhdCddWzldKTsNCgkJCQl1bnNldCAoJGZpbGUpOw0KCQkJfQ0KCQl9DQoJCWVsc2UNCgkJ CSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBvcGVuIGZpbGUgeyR0aGlzLT5vcHRpb25z WyduYW1lJ119IjsNCg0KCQljaGRpcigkcHdkKTsNCgl9DQoNCglmdW5jdGlvbiBvcGVuX2Fy Y2hpdmUoKQ0KCXsNCgkJcmV0dXJuIEBmb3BlbigkdGhpcy0+b3B0aW9uc1snbmFtZSddLCAi cmIiKTsNCgl9DQp9DQoNCmNsYXNzIHNtZF9jcnVuY2hfZ3ppcF9maWxlIGV4dGVuZHMgc21k X2NydW5jaF90YXJfZmlsZQ0Kew0KCWZ1bmN0aW9uIHNtZF9jcnVuY2hfZ3ppcF9maWxlKCRu YW1lKQ0KCXsNCgkJJHRoaXMtPnNtZF9jcnVuY2hfdGFyX2ZpbGUoJG5hbWUpOw0KCQkkdGhp cy0+b3B0aW9uc1sndHlwZSddID0gImd6aXAiOw0KCX0NCg0KCWZ1bmN0aW9uIGNyZWF0ZV9n emlwKCkNCgl7DQoJCWlmICgkdGhpcy0+b3B0aW9uc1snaW5tZW1vcnknXSA9PSAwKQ0KCQl7 DQoJCQkkcHdkID0gZ2V0Y3dkKCk7DQoJCQljaGRpcigkdGhpcy0+b3B0aW9uc1snYmFzZWRp ciddKTsNCgkJCWlmICgkZnAgPSBnem9wZW4oJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSwgIndi eyR0aGlzLT5vcHRpb25zWydsZXZlbCddfSIpKQ0KCQkJew0KCQkJCWZzZWVrKCR0aGlzLT5h cmNoaXZlLCAwKTsNCgkJCQl3aGlsZSAoJHRlbXAgPSBmcmVhZCgkdGhpcy0+YXJjaGl2ZSwg MTA0ODU3NikpDQoJCQkJCWd6d3JpdGUoJGZwLCAkdGVtcCk7DQoJCQkJZ3pjbG9zZSgkZnAp Ow0KCQkJCWNoZGlyKCRwd2QpOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCSR0aGlzLT5l cnJvcltdID0gIkNvdWxkIG5vdCBvcGVuIHskdGhpcy0+b3B0aW9uc1snbmFtZSddfSBmb3Ig d3JpdGluZy4iOw0KCQkJCWNoZGlyKCRwd2QpOw0KCQkJCXJldHVybiAwOw0KCQkJfQ0KCQl9 DQoJCWVsc2UNCgkJCSR0aGlzLT5hcmNoaXZlID0gZ3plbmNvZGUoJHRoaXMtPmFyY2hpdmUs ICR0aGlzLT5vcHRpb25zWydsZXZlbCddKTsNCg0KCQlyZXR1cm4gMTsNCgl9DQoNCglmdW5j dGlvbiBvcGVuX2FyY2hpdmUoKQ0KCXsNCgkJcmV0dXJuIEBnem9wZW4oJHRoaXMtPm9wdGlv bnNbJ25hbWUnXSwgInJiIik7DQoJfQ0KfQ0KDQpjbGFzcyBzbWRfY3J1bmNoX2J6aXBfZmls ZSBleHRlbmRzIHNtZF9jcnVuY2hfdGFyX2ZpbGUNCnsNCglmdW5jdGlvbiBzbWRfY3J1bmNo X2J6aXBfZmlsZSgkbmFtZSkNCgl7DQoJCSR0aGlzLT5zbWRfY3J1bmNoX3Rhcl9maWxlKCRu YW1lKTsNCgkJJHRoaXMtPm9wdGlvbnNbJ3R5cGUnXSA9ICJiemlwIjsNCgl9DQoNCglmdW5j dGlvbiBjcmVhdGVfYnppcCgpDQoJew0KCQlpZiAoJHRoaXMtPm9wdGlvbnNbJ2lubWVtb3J5 J10gPT0gMCkNCgkJew0KCQkJJHB3ZCA9IGdldGN3ZCgpOw0KCQkJY2hkaXIoJHRoaXMtPm9w dGlvbnNbJ2Jhc2VkaXInXSk7DQoJCQlpZiAoJGZwID0gYnpvcGVuKCR0aGlzLT5vcHRpb25z WyduYW1lJ10sICJ3YiIpKQ0KCQkJew0KCQkJCWZzZWVrKCR0aGlzLT5hcmNoaXZlLCAwKTsN CgkJCQl3aGlsZSAoJHRlbXAgPSBmcmVhZCgkdGhpcy0+YXJjaGl2ZSwgMTA0ODU3NikpDQoJ CQkJCWJ6d3JpdGUoJGZwLCAkdGVtcCk7DQoJCQkJYnpjbG9zZSgkZnApOw0KCQkJCWNoZGly KCRwd2QpOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkNv dWxkIG5vdCBvcGVuIHskdGhpcy0+b3B0aW9uc1snbmFtZSddfSBmb3Igd3JpdGluZy4iOw0K CQkJCWNoZGlyKCRwd2QpOw0KCQkJCXJldHVybiAwOw0KCQkJfQ0KCQl9DQoJCWVsc2UNCgkJ CSR0aGlzLT5hcmNoaXZlID0gYnpjb21wcmVzcygkdGhpcy0+YXJjaGl2ZSwgJHRoaXMtPm9w dGlvbnNbJ2xldmVsJ10pOw0KDQoJCXJldHVybiAxOw0KCX0NCg0KCWZ1bmN0aW9uIG9wZW5f YXJjaGl2ZSgpDQoJew0KCQlyZXR1cm4gQGJ6b3BlbigkdGhpcy0+b3B0aW9uc1snbmFtZSdd LCAiciIpOw0KCX0NCn0NCg0KY2xhc3Mgc21kX2NydW5jaF96aXBfZmlsZSBleHRlbmRzIHNt ZF9jcnVuY2hfYXJjaGl2ZQ0Kew0KCWZ1bmN0aW9uIHNtZF9jcnVuY2hfemlwX2ZpbGUoJG5h bWUpDQoJew0KCQkkdGhpcy0+c21kX2NydW5jaF9hcmNoaXZlKCRuYW1lKTsNCgkJJHRoaXMt Pm9wdGlvbnNbJ3R5cGUnXSA9ICJ6aXAiOw0KCX0NCg0KCWZ1bmN0aW9uIGNyZWF0ZV96aXAo KQ0KCXsNCgkJJGZpbGVzID0gMDsNCgkJJG9mZnNldCA9IDA7DQoJCSRjZW50cmFsID0gIiI7 DQoNCgkJaWYgKCFlbXB0eSAoJHRoaXMtPm9wdGlvbnNbJ3NmeCddKSkNCgkJCWlmICgkZnAg PSBAZm9wZW4oJHRoaXMtPm9wdGlvbnNbJ3NmeCddLCAicmIiKSkNCgkJCXsNCgkJCQkkdGVt cCA9IGZyZWFkKCRmcCwgZmlsZXNpemUoJHRoaXMtPm9wdGlvbnNbJ3NmeCddKSk7DQoJCQkJ ZmNsb3NlKCRmcCk7DQoJCQkJJHRoaXMtPmFkZF9kYXRhKCR0ZW1wKTsNCgkJCQkkb2Zmc2V0 ICs9IHN0cmxlbigkdGVtcCk7DQoJCQkJdW5zZXQgKCR0ZW1wKTsNCgkJCX0NCgkJCWVsc2UN CgkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJDb3VsZCBub3Qgb3BlbiBzZnggbW9kdWxlIGZyb20g eyR0aGlzLT5vcHRpb25zWydzZngnXX0uIjsNCg0KCQkkcHdkID0gZ2V0Y3dkKCk7DQoJCWNo ZGlyKCR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10pOw0KDQoJCWZvcmVhY2ggKCR0aGlzLT5m aWxlcyBhcyAkY3VycmVudCkNCgkJew0KCQkJaWYgKCRjdXJyZW50WyduYW1lJ10gPT0gJHRo aXMtPm9wdGlvbnNbJ25hbWUnXSkNCgkJCQljb250aW51ZTsNCg0KCQkJJHRpbWVkYXRlID0g ZXhwbG9kZSgiICIsIGRhdGUoIlkgbiBqIEcgaSBzIiwgJGN1cnJlbnRbJ3N0YXQnXVs5XSkp Ow0KCQkJJHRpbWVkYXRlID0gKCR0aW1lZGF0ZVswXSAtIDE5ODAgPDwgMjUpIHwgKCR0aW1l ZGF0ZVsxXSA8PCAyMSkgfCAoJHRpbWVkYXRlWzJdIDw8IDE2KSB8DQoJCQkJKCR0aW1lZGF0 ZVszXSA8PCAxMSkgfCAoJHRpbWVkYXRlWzRdIDw8IDUpIHwgKCR0aW1lZGF0ZVs1XSk7DQoN CgkJCSRibG9jayA9IHBhY2soIlZ2dnZWIiwgMHgwNDAzNGI1MCwgMHgwMDBBLCAweDAwMDAs IChpc3NldCgkY3VycmVudFsnbWV0aG9kJ10pIHx8ICR0aGlzLT5vcHRpb25zWydtZXRob2Qn XSA9PSAwKSA/IDB4MDAwMCA6IDB4MDAwOCwgJHRpbWVkYXRlKTsNCg0KCQkJaWYgKCRjdXJy ZW50WydzdGF0J11bN10gPT0gMCAmJiAkY3VycmVudFsndHlwZSddID09IDUpDQoJCQl7DQoJ CQkJJGJsb2NrIC49IHBhY2soIlZWVnZ2IiwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgw MDAwMDAwMCwgc3RybGVuKCRjdXJyZW50WyduYW1lMiddKSArIDEsIDB4MDAwMCk7DQoJCQkJ JGJsb2NrIC49ICRjdXJyZW50WyduYW1lMiddIC4gIi8iOw0KCQkJCSR0aGlzLT5hZGRfZGF0 YSgkYmxvY2spOw0KCQkJCSRjZW50cmFsIC49IHBhY2soIlZ2dnZ2VlZWVnZ2dnZ2VlYiLCAw eDAyMDE0YjUwLCAweDAwMTQsICR0aGlzLT5vcHRpb25zWydtZXRob2QnXSA9PSAwID8gMHgw MDAwIDogMHgwMDBBLCAweDAwMDAsDQoJCQkJCShpc3NldCgkY3VycmVudFsnbWV0aG9kJ10p IHx8ICR0aGlzLT5vcHRpb25zWydtZXRob2QnXSA9PSAwKSA/IDB4MDAwMCA6IDB4MDAwOCwg JHRpbWVkYXRlLA0KCQkJCQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBz dHJsZW4oJGN1cnJlbnRbJ25hbWUyJ10pICsgMSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwg MHgwMDAwLCAkY3VycmVudFsndHlwZSddID09IDUgPyAweDAwMDAwMDEwIDogMHgwMDAwMDAw MCwgJG9mZnNldCk7DQoJCQkJJGNlbnRyYWwgLj0gJGN1cnJlbnRbJ25hbWUyJ10gLiAiLyI7 DQoJCQkJJGZpbGVzKys7DQoJCQkJJG9mZnNldCArPSAoMzEgKyBzdHJsZW4oJGN1cnJlbnRb J25hbWUyJ10pKTsNCgkJCX0NCgkJCWVsc2UgaWYgKCRjdXJyZW50WydzdGF0J11bN10gPT0g MCkNCgkJCXsNCgkJCQkkYmxvY2sgLj0gcGFjaygiVlZWdnYiLCAweDAwMDAwMDAwLCAweDAw MDAwMDAwLCAweDAwMDAwMDAwLCBzdHJsZW4oJGN1cnJlbnRbJ25hbWUyJ10pLCAweDAwMDAp Ow0KCQkJCSRibG9jayAuPSAkY3VycmVudFsnbmFtZTInXTsNCgkJCQkkdGhpcy0+YWRkX2Rh dGEoJGJsb2NrKTsNCgkJCQkkY2VudHJhbCAuPSBwYWNrKCJWdnZ2dlZWVlZ2dnZ2dlZWIiwg MHgwMjAxNGI1MCwgMHgwMDE0LCAkdGhpcy0+b3B0aW9uc1snbWV0aG9kJ10gPT0gMCA/IDB4 MDAwMCA6IDB4MDAwQSwgMHgwMDAwLA0KCQkJCQkoaXNzZXQoJGN1cnJlbnRbJ21ldGhvZCdd KSB8fCAkdGhpcy0+b3B0aW9uc1snbWV0aG9kJ10gPT0gMCkgPyAweDAwMDAgOiAweDAwMDgs ICR0aW1lZGF0ZSwNCgkJCQkJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwg c3RybGVuKCRjdXJyZW50WyduYW1lMiddKSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgw MDAwLCAkY3VycmVudFsndHlwZSddID09IDUgPyAweDAwMDAwMDEwIDogMHgwMDAwMDAwMCwg JG9mZnNldCk7DQoJCQkJJGNlbnRyYWwgLj0gJGN1cnJlbnRbJ25hbWUyJ107DQoJCQkJJGZp bGVzKys7DQoJCQkJJG9mZnNldCArPSAoMzAgKyBzdHJsZW4oJGN1cnJlbnRbJ25hbWUyJ10p KTsNCgkJCX0NCgkJCWVsc2UgaWYgKCRmcCA9IEBmb3BlbigkY3VycmVudFsnbmFtZSddLCAi cmIiKSkNCgkJCXsNCgkJCQkkdGVtcCA9IGZyZWFkKCRmcCwgJGN1cnJlbnRbJ3N0YXQnXVs3 XSk7DQoJCQkJZmNsb3NlKCRmcCk7DQoJCQkJJGNyYzMyID0gY3JjMzIoJHRlbXApOw0KCQkJ CWlmICghaXNzZXQoJGN1cnJlbnRbJ21ldGhvZCddKSAmJiAkdGhpcy0+b3B0aW9uc1snbWV0 aG9kJ10gPT0gMSkNCgkJCQl7DQoJCQkJCSR0ZW1wID0gZ3pjb21wcmVzcygkdGVtcCwgJHRo aXMtPm9wdGlvbnNbJ2xldmVsJ10pOw0KCQkJCQkkc2l6ZSA9IHN0cmxlbigkdGVtcCkgLSA2 Ow0KCQkJCQkkdGVtcCA9IHN1YnN0cigkdGVtcCwgMiwgJHNpemUpOw0KCQkJCX0NCgkJCQll bHNlDQoJCQkJCSRzaXplID0gc3RybGVuKCR0ZW1wKTsNCgkJCQkkYmxvY2sgLj0gcGFjaygi VlZWdnYiLCAkY3JjMzIsICRzaXplLCAkY3VycmVudFsnc3RhdCddWzddLCBzdHJsZW4oJGN1 cnJlbnRbJ25hbWUyJ10pLCAweDAwMDApOw0KCQkJCSRibG9jayAuPSAkY3VycmVudFsnbmFt ZTInXTsNCgkJCQkkdGhpcy0+YWRkX2RhdGEoJGJsb2NrKTsNCgkJCQkkdGhpcy0+YWRkX2Rh dGEoJHRlbXApOw0KCQkJCXVuc2V0ICgkdGVtcCk7DQoJCQkJJGNlbnRyYWwgLj0gcGFjaygi VnZ2dnZWVlZWdnZ2dnZWViIsIDB4MDIwMTRiNTAsIDB4MDAxNCwgJHRoaXMtPm9wdGlvbnNb J21ldGhvZCddID09IDAgPyAweDAwMDAgOiAweDAwMEEsIDB4MDAwMCwNCgkJCQkJKGlzc2V0 KCRjdXJyZW50WydtZXRob2QnXSkgfHwgJHRoaXMtPm9wdGlvbnNbJ21ldGhvZCddID09IDAp ID8gMHgwMDAwIDogMHgwMDA4LCAkdGltZWRhdGUsDQoJCQkJCSRjcmMzMiwgJHNpemUsICRj dXJyZW50WydzdGF0J11bN10sIHN0cmxlbigkY3VycmVudFsnbmFtZTInXSksIDB4MDAwMCwg MHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwMDAwMCwgJG9mZnNldCk7DQoJCQkJJGNl bnRyYWwgLj0gJGN1cnJlbnRbJ25hbWUyJ107DQoJCQkJJGZpbGVzKys7DQoJCQkJJG9mZnNl dCArPSAoMzAgKyBzdHJsZW4oJGN1cnJlbnRbJ25hbWUyJ10pICsgJHNpemUpOw0KCQkJfQ0K CQkJZWxzZQ0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBvcGVuIGZpbGUgeyRj dXJyZW50WyduYW1lJ119IGZvciByZWFkaW5nLiBJdCB3YXMgbm90IGFkZGVkLiI7DQoJCX0N Cg0KCQkkdGhpcy0+YWRkX2RhdGEoJGNlbnRyYWwpOw0KDQoJCSR0aGlzLT5hZGRfZGF0YShw YWNrKCJWdnZ2dlZWdiIsIDB4MDYwNTRiNTAsIDB4MDAwMCwgMHgwMDAwLCAkZmlsZXMsICRm aWxlcywgc3RybGVuKCRjZW50cmFsKSwgJG9mZnNldCwNCgkJCSFlbXB0eSAoJHRoaXMtPm9w dGlvbnNbJ2NvbW1lbnQnXSkgPyBzdHJsZW4oJHRoaXMtPm9wdGlvbnNbJ2NvbW1lbnQnXSkg OiAweDAwMDApKTsNCg0KCQlpZiAoIWVtcHR5ICgkdGhpcy0+b3B0aW9uc1snY29tbWVudCdd KSkNCgkJCSR0aGlzLT5hZGRfZGF0YSgkdGhpcy0+b3B0aW9uc1snY29tbWVudCddKTsNCg0K CQljaGRpcigkcHdkKTsNCg0KCQlyZXR1cm4gMTsNCgl9DQp9DQoNCi8vIDE5LzA4LzIwMTEg KHYyLjY2MykNCi8vIC0gdW56aXBBbGwgd2FzIHVzaW5nIGRvdWJsZSBzbGFzaGVzIChwYXRo Ly9maWxlbmFtZSkgdG8gc2F2ZSBmaWxlcy4gKHRoYW5rcyB0byBLYXJlbiBQZXl0b24pLg0K Ly8gMDkvMDgvMjAxMCAodjIuNjYyKQ0KLy8gLSB1bnppcEFsbCBwYXJhbWV0ZXJzIGZ1bGx5 IHJldmlld2VkIGFuZCBmaXhlZC4gVGhhbmtzIFJvbm55IERyZXNjaGxlciBhbmQgQ29ub3Ig TWFjIEFvaWRoLg0KLy8gMTIvMDUvMjAxMCAodjIuNjYxKQ0KLy8gLSBGaXhlZCBFX1NUUklD VCBub3RpY2U6ICJPbmx5IHZhcmlhYmxlcyBzaG91bGQgYmUgcGFzc2VkIGJ5IHJlZmVyZW5j ZSIuIFRoYW5rcyBFcmlrIFcuDQovLyAyNC8wMy8yMDEwICh2Mi42NikNCi8vIC0gRml4ZWQg YnVnIGluc2lkZSB1bnppcEFsbCB3aGVuIGRpcm5hbWUgaXMgIi4iICh0aGFua3MgdG8gVGhv cnN0ZW4gR3JvdGgpDQovLyAtIEFkZGVkIGNoYXJhY3RlciAiwrQiIHRvIHRoZSBzdHJpbmcg Y29udmVyc2lvbiB0YWJsZSAoZXg6IGNhaXhhIGTCtMOhZ3VhKQ0KLy8gMjcvMDIvMjAxMA0K Ly8gLSBSZW1vdmVkIFBIUDQgc3VwcG9ydCAoZmlsZV9wdXRfY29udGVudHMgcmVkZWNsYXJh dGlvbikuDQovLyAwNC8xMi8yMDA5ICh2Mi42NSkNCi8vICogQWRkZWQgY2hhcmFjdGVyIHRy YW5zbGF0aW9uIHRvIGRlY29kZSBhY2NlbnRzIGFuZC9vciBzcGVjaWFsIGNoYXJhY3RlcnMu DQovLyAxMC8xMS8yMDA5DQovLyAqIFNvbWUgc2VjdXJpdHkgYWRkZWQgdG8gYXZvaWQgbWFs aWNpb3VzIFpJUCBmaWxlcyAocmVsYXRpdmUgZGlycykNCi8vICogdW56aXBBbGwoKSB3aWxs IG91dHB1dCBieSBkZWZhdWx0IHRvIHNhbWUgZm9sZGVyIG9mIHRoZSBjYWxsZXIgc2NyaXB0 DQovLyAyNS8wOS8yMDA5DQovLyAtIENvZGUgb3B0aW1pemF0aW9uIHRvIHJlZHVjZSBtZW1v cnkgdXNhZ2UgKHVuY29tcHJlc3MoJiRjb250ZW50cykpDQovLyAxMi8wNy8yMDA5ICgyLjYy KQ0KLy8gLSBEZWJ1ZyBtZXNzYWdlcyBhcmUgc2hvd24gb25seSB3aGVuIGV4cGxpY2l0Lg0K Ly8gLSBOZXcgbWV0aG9kOiBnZXRMYXN0RXJyb3IoKQ0KDQojIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KIyBDbGFzcyBk VW56aXAyIHYyLjY2Mw0KIw0KIyAgQXV0aG9yOiBBbGV4YW5kcmUgVGVkZXNjaGkgKGQpDQoj ICBFLU1haWw6IGFsZXhhbmRyZWJyIGF0IGdtYWlsIGRvdCBjb20NCiMgIExvbmRyaW5hIC0g UFIgLyBCcmF6aWwNCiMNCiMgIE9iamVjdGl2ZToNCiMgICAgVGhpcyBjbGFzcyBhbGxvd3Mg cHJvZ3JhbW1lciB0byBlYXNpbHkgdW56aXAgZmlsZXMgb24gdGhlIGZseS4NCiMNCiMgIFJl cXVpcmVtZW50czoNCiMgICAgVGhpcyBjbGFzcyByZXF1aXJlcyBleHRlbnNpb24gWkxpYiBF bmFibGVkLiBJdCBpcyBkZWZhdWx0DQojICAgIGZvciBtb3N0IHNpdGUgaG9zdHMgYXJvdW5k IHRoZSB3b3JsZCwgYW5kIGZvciB0aGUgUEhQIFdpbjMyIGRpc3QuDQojDQojICBUbyBkbzoN CiMgICAqIEVycm9yIGhhbmRsaW5nDQojICAgKiBXcml0ZSBhIFBIUC1TaWRlIGd6aW5mbGF0 ZSwgdG8gY29tcGxldGVseSBhdm9pZCBhbnkgZXh0ZXJuYWwgZXh0ZW5zaW9ucw0KIyAgICog V3JpdGUgb3RoZXIgZGVjb21wcmVzcyBhbGdvcml0aG1zDQojDQojICBNZXRob2RzOg0KIyAg KiBkVW56aXAyKCRmaWxlbmFtZSkgICAgICAgICAtIENvbnN0cnVjdG9yIC0gT3BlbnMgJGZp bGVuYW1lDQojICAqIGdldExpc3QoWyRzdG9wT25GaWxlXSkgICAgIC0gUmV0cmlldmUgdGhl IGZpbGUgbGlzdA0KIyAgKiBnZXRFeHRyYUluZm8oJHppcGZpbGVuYW1lKSAtIFJldHJpZXZl IG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgY29tcHJlc3NlZCBmaWxlDQojICAqIGdldFppcElu Zm8oWyRlbnRyeV0pICAgICAgIC0gUmV0cmlldmUgWklQIGZpbGUgZGV0YWlscy4NCiMgICog dW56aXAoJHppcGZpbGVuYW1lLCBbJG91dGZpbGVuYW1lLCBbJGFwcGx5Q2htb2RdXSkgLSBV bnppcCBmaWxlDQojICAqIHVuemlwQWxsKFskb3V0RGlyLCBbJHppcERpciwgWyRtYWludGFp blN0cnVjdHVyZSwgWyRhcHBseUNobW9kXV1dXSkNCiMgICogY2xvc2UoKSAgICAgICAgICAg ICAgICAgICAgLSBDbG9zZSBmaWxlIGhhbmRsZXIsIGJ1dCBrZWVwIHRoZSBsaXN0DQojICAq IF9fZGVzdHJveSgpICAgICAgICAgICAgICAgIC0gQ2xvc2UgZmlsZSBoYW5kbGVyIGFuZCBy ZWxlYXNlIG1lbW9yeQ0KIw0KIyAgSWYgeW91IG1vZGlmeSB0aGlzIGNsYXNzLCBvciBoYXZl IGFueSBpZGVhcyB0byBpbXByb3ZlIGl0LCBwbGVhc2UgY29udGFjdCBtZSENCiMgIFlvdSBh cmUgYWxsb3dlZCB0byByZWRpc3RyaWJ1dGUgdGhpcyBjbGFzcywgaWYgeW91IGtlZXAgbXkg bmFtZSBhbmQgY29udGFjdCBlLW1haWwgb24gaXQuDQojDQojICBQTEVBU0UhIElGIFlPVSBV U0UgVEhJUyBDTEFTUyBJTiBBTlkgT0YgWU9VUiBQUk9KRUNUUywgUExFQVNFIExFVCBNRSBL Tk9XIQ0KIyAgSWYgeW91IGhhdmUgcHJvYmxlbXMgdXNpbmcgaXQsIGRvbid0IHRoaW5rIHR3 aWNlIGJlZm9yZSBjb250YWN0aW5nIG1lIQ0KIw0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KY2xhc3Mgc21kX2Ny dW5jaF9kVW56aXAyew0KCUZ1bmN0aW9uIGdldFZlcnNpb24oKXsNCgkJcmV0dXJuICIyLjY2 MyI7DQoJfQ0KCS8vIFB1YmxpYw0KCXZhciAkZmlsZU5hbWU7DQoJdmFyICRsYXN0RXJyb3I7 DQoJdmFyICRjb21wcmVzc2VkTGlzdDsgLy8gWW91IHdpbGwgcHJvYmxhYmx5IHVzZSBvbmx5 IHRoaXMgb25lIQ0KCXZhciAkY2VudHJhbERpckxpc3Q7IC8vIENlbnRyYWwgZGlyIGxpc3Qu Li4gSXQncyBhIGtpbmQgb2YgJ2V4dHJhIGF0dHJpYnV0ZXMnIGZvciBhIHNldCBvZiBmaWxl cw0KCXZhciAkZW5kT2ZDZW50cmFsOyAgIC8vIEVuZCBvZiBjZW50cmFsIGRpciwgY29udGFp bnMgWklQIENvbW1lbnRzDQoJdmFyICRkZWJ1ZzsNCg0KCS8vIFByaXZhdGUNCgl2YXIgJGZo Ow0KCXZhciAkemlwU2lnbmF0dXJlID0gIlx4NTBceDRiXHgwM1x4MDQiOyAvLyBsb2NhbCBm aWxlIGhlYWRlciBzaWduYXR1cmUNCgl2YXIgJGRpclNpZ25hdHVyZSA9ICJceDUwXHg0Ylx4 MDFceDAyIjsgLy8gY2VudHJhbCBkaXIgaGVhZGVyIHNpZ25hdHVyZQ0KCXZhciAkZGlyU2ln bmF0dXJlRT0gIlx4NTBceDRiXHgwNVx4MDYiOyAvLyBlbmQgb2YgY2VudHJhbCBkaXIgc2ln bmF0dXJlDQoNCgkvLyBQdWJsaWMNCglGdW5jdGlvbiBzbWRfY3J1bmNoX2RVbnppcDIoJGZp bGVOYW1lKXsNCgkJJHRoaXMtPmZpbGVOYW1lICAgICAgID0gJGZpbGVOYW1lOw0KCQkkdGhp cy0+Y29tcHJlc3NlZExpc3QgPSANCgkJJHRoaXMtPmNlbnRyYWxEaXJMaXN0ID0gDQoJCSR0 aGlzLT5lbmRPZkNlbnRyYWwgICA9IEFycmF5KCk7DQoJfQ0KCQ0KCUZ1bmN0aW9uIGdldExp c3QoJHN0b3BPbkZpbGU9ZmFsc2Upew0KCQlpZihzaXplb2YoJHRoaXMtPmNvbXByZXNzZWRM aXN0KSl7DQoJCQkkdGhpcy0+ZGVidWdNc2coMSwgIlJldHVybmluZyBhbHJlYWR5IGxvYWRl ZCBmaWxlIGxpc3QuIik7DQoJCQlyZXR1cm4gJHRoaXMtPmNvbXByZXNzZWRMaXN0Ow0KCQl9 DQoJCQ0KCQkvLyBPcGVuIGZpbGUsIGFuZCBzZXQgZmlsZSBoYW5kbGVyDQoJCSRmaCA9IGZv cGVuKCR0aGlzLT5maWxlTmFtZSwgInIiKTsNCgkJJHRoaXMtPmZoID0gJiRmaDsNCgkJaWYo ISRmaCl7DQoJCQkkdGhpcy0+ZGVidWdNc2coMiwgIkZhaWxlZCB0byBsb2FkIGZpbGUuIik7 DQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCgkJDQoJCSR0aGlzLT5kZWJ1Z01zZygxLCAiTG9h ZGluZyBsaXN0IGZyb20gJ0VuZCBvZiBDZW50cmFsIERpcicgaW5kZXggbGlzdC4uLiIpOw0K CQlpZighJHRoaXMtPl9sb2FkRmlsZUxpc3RCeUVPRigkZmgsICRzdG9wT25GaWxlKSl7DQoJ CQkkdGhpcy0+ZGVidWdNc2coMSwgIkZhaWxlZCEgVHJ5aW5nIHRvIGxvYWQgbGlzdCBsb29r aW5nIGZvciBzaWduYXR1cmVzLi4uIik7DQoJCQlpZighJHRoaXMtPl9sb2FkRmlsZUxpc3RC eVNpZ25hdHVyZXMoJGZoLCAkc3RvcE9uRmlsZSkpew0KCQkJCSR0aGlzLT5kZWJ1Z01zZygx LCAiRmFpbGVkISBDb3VsZCBub3QgZmluZCBhbnkgdmFsaWQgaGVhZGVyLiIpOw0KCQkJCSR0 aGlzLT5kZWJ1Z01zZygyLCAiWklQIEZpbGUgaXMgY29ycnVwdGVkIG9yIGVtcHR5Iik7DQoJ CQkJcmV0dXJuIGZhbHNlOw0KCQkJfQ0KCQl9DQoJCQ0KCQlpZigkdGhpcy0+ZGVidWcpew0K CQkJIy0tLS0tLS0gRGVidWcgY29tcHJlc3NlZExpc3QNCgkJCSRra2sgPSAwOw0KCQkJZWNo byAiPHRhYmxlIGJvcmRlcj0nMCcgc3R5bGU9J2ZvbnQ6IDExcHggVmVyZGFuYTsgYm9yZGVy OiAxcHggc29saWQgIzAwMCc+IjsNCgkJCWZvcmVhY2goJHRoaXMtPmNvbXByZXNzZWRMaXN0 IGFzICRmaWxlTmFtZT0+JGl0ZW0pew0KCQkJCWlmKCEka2trICYmICRra2s9MSl7DQoJCQkJ CWVjaG8gIjx0ciBzdHlsZT0nYmFja2dyb3VuZDogI0FEQSc+IjsNCgkJCQkJZm9yZWFjaCgk aXRlbSBhcyAkZmllbGROYW1lPT4kdmFsdWUpDQoJCQkJCQllY2hvICI8dGQ+JGZpZWxkTmFt ZTwvdGQ+IjsNCgkJCQkJZWNobyAnPC90cj4nOw0KCQkJCX0NCgkJCQllY2hvICI8dHIgc3R5 bGU9J2JhY2tncm91bmQ6ICNDRkMnPiI7DQoJCQkJZm9yZWFjaCgkaXRlbSBhcyAkZmllbGRO YW1lPT4kdmFsdWUpew0KCQkJCQlpZigkZmllbGROYW1lID09ICdsYXN0bW9kX2RhdGV0aW1l JykNCgkJCQkJCWVjaG8gIjx0ZCB0aXRsZT0nJGZpZWxkTmFtZScgbm93cmFwPSdub3dyYXAn PiIuZGF0ZSgiZC9tL1kgSDppOnMiLCAkdmFsdWUpLiI8L3RkPiI7DQoJCQkJCWVsc2UNCgkJ CQkJCWVjaG8gIjx0ZCB0aXRsZT0nJGZpZWxkTmFtZScgbm93cmFwPSdub3dyYXAnPiR2YWx1 ZTwvdGQ+IjsNCgkJCQl9DQoJCQkJZWNobyAiPC90cj4iOw0KCQkJfQ0KCQkJZWNobyAiPC90 YWJsZT4iOw0KCQkJDQoJCQkjLS0tLS0tLSBEZWJ1ZyBjZW50cmFsRGlyTGlzdA0KCQkJJGtr ayA9IDA7DQoJCQlpZihzaXplb2YoJHRoaXMtPmNlbnRyYWxEaXJMaXN0KSl7DQoJCQkJZWNo byAiPHRhYmxlIGJvcmRlcj0nMCcgc3R5bGU9J2ZvbnQ6IDExcHggVmVyZGFuYTsgYm9yZGVy OiAxcHggc29saWQgIzAwMCc+IjsNCgkJCQlmb3JlYWNoKCR0aGlzLT5jZW50cmFsRGlyTGlz dCBhcyAkZmlsZU5hbWU9PiRpdGVtKXsNCgkJCQkJaWYoISRra2sgJiYgJGtraz0xKXsNCgkJ CQkJCWVjaG8gIjx0ciBzdHlsZT0nYmFja2dyb3VuZDogI0FBRCc+IjsNCgkJCQkJCWZvcmVh Y2goJGl0ZW0gYXMgJGZpZWxkTmFtZT0+JHZhbHVlKQ0KCQkJCQkJCWVjaG8gIjx0ZD4kZmll bGROYW1lPC90ZD4iOw0KCQkJCQkJZWNobyAnPC90cj4nOw0KCQkJCQl9DQoJCQkJCWVjaG8g Ijx0ciBzdHlsZT0nYmFja2dyb3VuZDogI0NDRic+IjsNCgkJCQkJZm9yZWFjaCgkaXRlbSBh cyAkZmllbGROYW1lPT4kdmFsdWUpew0KCQkJCQkJaWYoJGZpZWxkTmFtZSA9PSAnbGFzdG1v ZF9kYXRldGltZScpDQoJCQkJCQkJZWNobyAiPHRkIHRpdGxlPSckZmllbGROYW1lJyBub3dy YXA9J25vd3JhcCc+Ii5kYXRlKCJkL20vWSBIOmk6cyIsICR2YWx1ZSkuIjwvdGQ+IjsNCgkJ CQkJCWVsc2UNCgkJCQkJCQllY2hvICI8dGQgdGl0bGU9JyRmaWVsZE5hbWUnIG5vd3JhcD0n bm93cmFwJz4kdmFsdWU8L3RkPiI7DQoJCQkJCX0NCgkJCQkJZWNobyAiPC90cj4iOw0KCQkJ CX0NCgkJCQllY2hvICI8L3RhYmxlPiI7DQoJCQl9DQoJCQ0KCQkJIy0tLS0tLS0gRGVidWcg ZW5kT2ZDZW50cmFsDQoJCQkka2trID0gMDsNCgkJCWlmKHNpemVvZigkdGhpcy0+ZW5kT2ZD ZW50cmFsKSl7DQoJCQkJZWNobyAiPHRhYmxlIGJvcmRlcj0nMCcgc3R5bGU9J2ZvbnQ6IDEx cHggVmVyZGFuYScgc3R5bGU9J2JvcmRlcjogMXB4IHNvbGlkICMwMDAnPiI7DQoJCQkJZWNo byAiPHRyIHN0eWxlPSdiYWNrZ3JvdW5kOiAjREFBJz48dGQgY29sc3Bhbj0nMic+ZFVuemlw IC0gRW5kIG9mIGZpbGU8L3RkPjwvdHI+IjsNCgkJCQlmb3JlYWNoKCR0aGlzLT5lbmRPZkNl bnRyYWwgYXMgJGZpZWxkPT4kdmFsdWUpew0KCQkJCQllY2hvICI8dHI+IjsNCgkJCQkJZWNo byAiPHRkIHN0eWxlPSdiYWNrZ3JvdW5kOiAjRkNDJz4kZmllbGQ8L3RkPiI7DQoJCQkJCWVj aG8gIjx0ZCBzdHlsZT0nYmFja2dyb3VuZDogI0ZERCc+JHZhbHVlPC90ZD4iOw0KCQkJCQll Y2hvICI8L3RyPiI7DQoJCQkJfQ0KCQkJCWVjaG8gIjwvdGFibGU+IjsNCgkJCX0NCgkJfQ0K CQkNCgkJcmV0dXJuICR0aGlzLT5jb21wcmVzc2VkTGlzdDsNCgl9DQoJRnVuY3Rpb24gZ2V0 RXh0cmFJbmZvKCRjb21wcmVzc2VkRmlsZU5hbWUpew0KCQlyZXR1cm4NCgkJCWlzc2V0KCR0 aGlzLT5jZW50cmFsRGlyTGlzdFskY29tcHJlc3NlZEZpbGVOYW1lXSk/DQoJCQkkdGhpcy0+ Y2VudHJhbERpckxpc3RbJGNvbXByZXNzZWRGaWxlTmFtZV06DQoJCQlmYWxzZTsNCgl9DQoJ RnVuY3Rpb24gZ2V0WmlwSW5mbygkZGV0YWlsPWZhbHNlKXsNCgkJcmV0dXJuICRkZXRhaWw/ DQoJCQkkdGhpcy0+ZW5kT2ZDZW50cmFsWyRkZXRhaWxdOg0KCQkJJHRoaXMtPmVuZE9mQ2Vu dHJhbDsNCgl9DQoJDQoJRnVuY3Rpb24gdW56aXAoJGNvbXByZXNzZWRGaWxlTmFtZSwgJHRh cmdldEZpbGVOYW1lPWZhbHNlLCAkYXBwbHlDaG1vZD0wNzc3KXsNCgkJaWYoIXNpemVvZigk dGhpcy0+Y29tcHJlc3NlZExpc3QpKXsNCgkJCSR0aGlzLT5kZWJ1Z01zZygxLCAiVHJ5aW5n IHRvIHVuemlwIGJlZm9yZSBsb2FkaW5nIGZpbGUgbGlzdC4uLiBMb2FkaW5nIGl0ISIpOw0K CQkJJHRoaXMtPmdldExpc3QoZmFsc2UsICRjb21wcmVzc2VkRmlsZU5hbWUpOw0KCQl9DQoJ CQ0KCQkkZmRldGFpbHMgPSAmJHRoaXMtPmNvbXByZXNzZWRMaXN0WyRjb21wcmVzc2VkRmls ZU5hbWVdOw0KCQlpZighaXNzZXQoJHRoaXMtPmNvbXByZXNzZWRMaXN0WyRjb21wcmVzc2Vk RmlsZU5hbWVdKSl7DQoJCQkkdGhpcy0+ZGVidWdNc2coMiwgIkZpbGUgJzxiPiRjb21wcmVz c2VkRmlsZU5hbWU8L2I+JyBpcyBub3QgY29tcHJlc3NlZCBpbiB0aGUgemlwLiIpOw0KCQkJ cmV0dXJuIGZhbHNlOw0KCQl9DQoJCWlmKHN1YnN0cigkY29tcHJlc3NlZEZpbGVOYW1lLCAt MSkgPT0gIi8iKXsNCgkJCSR0aGlzLT5kZWJ1Z01zZygyLCAiVHJ5aW5nIHRvIHVuemlwIGEg Zm9sZGVyIG5hbWUgJzxiPiRjb21wcmVzc2VkRmlsZU5hbWU8L2I+Jy4iKTsNCgkJCXJldHVy biBmYWxzZTsNCgkJfQ0KCQlpZighJGZkZXRhaWxzWyd1bmNvbXByZXNzZWRfc2l6ZSddKXsN CgkJCSR0aGlzLT5kZWJ1Z01zZygxLCAiRmlsZSAnPGI+JGNvbXByZXNzZWRGaWxlTmFtZTwv Yj4nIGlzIGVtcHR5LiIpOw0KCQkJcmV0dXJuICR0YXJnZXRGaWxlTmFtZT8NCgkJCQlmaWxl X3B1dF9jb250ZW50cygkdGFyZ2V0RmlsZU5hbWUsICIiKToNCgkJCQkiIjsNCgkJfQ0KCQkN CgkJZnNlZWsoJHRoaXMtPmZoLCAkZmRldGFpbHNbJ2NvbnRlbnRzLXN0YXJ0T2Zmc2V0J10p Ow0KCQkkdG9VbmNvbXByZXNzID0gZnJlYWQoJHRoaXMtPmZoLCAkZmRldGFpbHNbJ2NvbXBy ZXNzZWRfc2l6ZSddKTsNCgkJJHJldCA9ICR0aGlzLT51bmNvbXByZXNzKA0KCQkJCSR0b1Vu Y29tcHJlc3MsDQoJCQkJJGZkZXRhaWxzWydjb21wcmVzc2lvbl9tZXRob2QnXSwNCgkJCQkk ZmRldGFpbHNbJ3VuY29tcHJlc3NlZF9zaXplJ10sDQoJCQkJJHRhcmdldEZpbGVOYW1lDQoJ CQkpOw0KCQl1bnNldCgkdG9VbmNvbXByZXNzKTsNCgkJaWYoJGFwcGx5Q2htb2QgJiYgJHRh cmdldEZpbGVOYW1lKQ0KCQkJY2htb2QoJHRhcmdldEZpbGVOYW1lLCAwNzc3KTsNCg0KCQly ZXR1cm4gJHJldDsNCgl9DQoJRnVuY3Rpb24gdW56aXBBbGwoJHRhcmdldERpcj1mYWxzZSwg JGJhc2VEaXI9IiIsICRtYWludGFpblN0cnVjdHVyZT10cnVlLCAkYXBwbHlDaG1vZD0wNzc3 KXsNCgkJaWYoJHRhcmdldERpciA9PT0gZmFsc2UpDQoJCQkkdGFyZ2V0RGlyID0gZGlybmFt ZSgkX1NFUlZFUlsnU0NSSVBUX0ZJTEVOQU1FJ10pLiIvIjsNCgkJDQoJCWlmKHN1YnN0cigk dGFyZ2V0RGlyLCAtMSkgPT0gIi8iKQ0KCQkJJHRhcmdldERpciA9IHN1YnN0cigkdGFyZ2V0 RGlyLCAwLCAtMSk7DQoJCQ0KCQkkbGlzdGEgPSAkdGhpcy0+Z2V0TGlzdCgpOw0KCQlpZihz aXplb2YoJGxpc3RhKSkgZm9yZWFjaCgkbGlzdGEgYXMgJGZpbGVOYW1lPT4kdHJhc2gpew0K CQkJJGRpcm5hbWUgID0gZGlybmFtZSgkZmlsZU5hbWUpOw0KCQkJJG91dEROICAgID0gIiR0 YXJnZXREaXIvJGRpcm5hbWUiOw0KCQkJDQoJCQlpZihzdWJzdHIoJGRpcm5hbWUsIDAsIHN0 cmxlbigkYmFzZURpcikpICE9ICRiYXNlRGlyKQ0KCQkJCWNvbnRpbnVlOw0KCQkJDQoJCQlp ZighaXNfZGlyKCRvdXRETikgJiYgJG1haW50YWluU3RydWN0dXJlKXsNCgkJCQkkc3RyID0g IiI7DQoJCQkJJGZvbGRlcnMgPSBleHBsb2RlKCIvIiwgJGRpcm5hbWUpOw0KCQkJCWZvcmVh Y2goJGZvbGRlcnMgYXMgJGZvbGRlcil7DQoJCQkJCSRzdHIgPSAkc3RyPyIkc3RyLyRmb2xk ZXIiOiRmb2xkZXI7DQoJCQkJCWlmKCFpc19kaXIoIiR0YXJnZXREaXIvJHN0ciIpKXsNCgkJ CQkJCSR0aGlzLT5kZWJ1Z01zZygxLCAiQ3JlYXRpbmcgZm9sZGVyOiAkdGFyZ2V0RGlyLyRz dHIiKTsNCgkJCQkJCW1rZGlyKCIkdGFyZ2V0RGlyLyRzdHIiKTsNCgkJCQkJCWlmKCRhcHBs eUNobW9kKQ0KCQkJCQkJCWNobW9kKCIkdGFyZ2V0RGlyLyRzdHIiLCAkYXBwbHlDaG1vZCk7 DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCQlpZihzdWJzdHIoJGZpbGVOYW1lLCAtMSwgMSkg PT0gIi8iKQ0KCQkJCWNvbnRpbnVlOw0KCQkJDQoJCQkkbWFpbnRhaW5TdHJ1Y3R1cmU/DQoJ CQkJJHRoaXMtPnVuemlwKCRmaWxlTmFtZSwgIiR0YXJnZXREaXIvJGZpbGVOYW1lIiwgJGFw cGx5Q2htb2QpOg0KCQkJCSR0aGlzLT51bnppcCgkZmlsZU5hbWUsICIkdGFyZ2V0RGlyLyIu YmFzZW5hbWUoJGZpbGVOYW1lKSwgJGFwcGx5Q2htb2QpOw0KCQl9DQoJfQ0KCQ0KCUZ1bmN0 aW9uIGNsb3NlKCl7ICAgICAvLyBGcmVlIHRoZSBmaWxlIHJlc291cmNlDQoJCWlmKCR0aGlz LT5maCkNCgkJCWZjbG9zZSgkdGhpcy0+ZmgpOw0KCX0NCglGdW5jdGlvbiBfX2Rlc3Ryb3ko KXsgDQoJCSR0aGlzLT5jbG9zZSgpOw0KCX0NCgkNCgkvLyBQcml2YXRlICh5b3Ugc2hvdWxk IE5PVCBjYWxsIHRoZXNlIG1ldGhvZHMpOg0KCUZ1bmN0aW9uIHVuY29tcHJlc3MoJiRjb250 ZW50LCAkbW9kZSwgJHVuY29tcHJlc3NlZFNpemUsICR0YXJnZXRGaWxlTmFtZT1mYWxzZSl7 DQoJCXN3aXRjaCgkbW9kZSl7DQoJCQljYXNlIDA6DQoJCQkJLy8gTm90IGNvbXByZXNzZWQN CgkJCQlyZXR1cm4gJHRhcmdldEZpbGVOYW1lPw0KCQkJCQlmaWxlX3B1dF9jb250ZW50cygk dGFyZ2V0RmlsZU5hbWUsICRjb250ZW50KToNCgkJCQkJJGNvbnRlbnQ7DQoJCQljYXNlIDE6 DQoJCQkJJHRoaXMtPmRlYnVnTXNnKDIsICJTaHJ1bmsgbW9kZSBpcyBub3Qgc3VwcG9ydGVk Li4uIHlldD8iKTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQljYXNlIDI6DQoJCQljYXNlIDM6 DQoJCQljYXNlIDQ6DQoJCQljYXNlIDU6DQoJCQkJJHRoaXMtPmRlYnVnTXNnKDIsICJDb21w cmVzc2lvbiBmYWN0b3IgIi4oJG1vZGUtMSkuIiBpcyBub3Qgc3VwcG9ydGVkLi4uIHlldD8i KTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQljYXNlIDY6DQoJCQkJJHRoaXMtPmRlYnVnTXNn KDIsICJJbXBsb2RlIGlzIG5vdCBzdXBwb3J0ZWQuLi4geWV0PyIpOw0KCQkJCXJldHVybiBm YWxzZTsNCgkJCWNhc2UgNzoNCgkJCQkkdGhpcy0+ZGVidWdNc2coMiwgIlRva2VuaXppbmcg Y29tcHJlc3Npb24gYWxnb3JpdGhtIGlzIG5vdCBzdXBwb3J0ZWQuLi4geWV0PyIpOw0KCQkJ CXJldHVybiBmYWxzZTsNCgkJCWNhc2UgODoNCgkJCQkvLyBEZWZsYXRlDQoJCQkJcmV0dXJu ICR0YXJnZXRGaWxlTmFtZT8NCgkJCQkJZmlsZV9wdXRfY29udGVudHMoJHRhcmdldEZpbGVO YW1lLCBnemluZmxhdGUoJGNvbnRlbnQsICR1bmNvbXByZXNzZWRTaXplKSk6DQoJCQkJCWd6 aW5mbGF0ZSgkY29udGVudCwgJHVuY29tcHJlc3NlZFNpemUpOw0KCQkJY2FzZSA5Og0KCQkJ CSR0aGlzLT5kZWJ1Z01zZygyLCAiRW5oYW5jZWQgRGVmbGF0aW5nIGlzIG5vdCBzdXBwb3J0 ZWQuLi4geWV0PyIpOw0KCQkJCXJldHVybiBmYWxzZTsNCgkJCWNhc2UgMTA6DQoJCQkJJHRo aXMtPmRlYnVnTXNnKDIsICJQS1dBUkUgRGF0ZSBDb21wcmVzc2lvbiBMaWJyYXJ5IEltcG9s b2RpbmcgaXMgbm90IHN1cHBvcnRlZC4uLiB5ZXQ/Iik7DQoJCQkJcmV0dXJuIGZhbHNlOw0K CQkJY2FzZSAxMjoNCgkJCQkvLyBCemlwMg0KCQkJCXJldHVybiAkdGFyZ2V0RmlsZU5hbWU/ DQoJCQkJCWZpbGVfcHV0X2NvbnRlbnRzKCR0YXJnZXRGaWxlTmFtZSwgYnpkZWNvbXByZXNz KCRjb250ZW50KSk6DQoJCQkJCWJ6ZGVjb21wcmVzcygkY29udGVudCk7DQoJCQljYXNlIDE4 Og0KCQkJCSR0aGlzLT5kZWJ1Z01zZygyLCAiSUJNIFRFUlNFIGlzIG5vdCBzdXBwb3J0ZWQu Li4geWV0PyIpOw0KCQkJCXJldHVybiBmYWxzZTsNCgkJCWRlZmF1bHQ6DQoJCQkJJHRoaXMt PmRlYnVnTXNnKDIsICJVbmtub3duIHVuY29tcHJlc3MgbWV0aG9kOiAkbW9kZSIpOw0KCQkJ CXJldHVybiBmYWxzZTsNCgkJfQ0KCX0NCglGdW5jdGlvbiBkZWJ1Z01zZygkbGV2ZWwsICRz dHJpbmcpew0KCQlpZigkdGhpcy0+ZGVidWcpew0KCQkJaWYoJGxldmVsID09IDEpDQoJCQkJ ZWNobyAiPGIgc3R5bGU9J2NvbG9yOiAjNzc3Jz5kVW56aXAyOjwvYj4gJHN0cmluZzxicj4i Ow0KCQkJDQoJCQlpZigkbGV2ZWwgPT0gMikNCgkJCQllY2hvICI8YiBzdHlsZT0nY29sb3I6 ICNGMDAnPmRVbnppcDI6PC9iPiAkc3RyaW5nPGJyPiI7DQoJCX0NCgkJJHRoaXMtPmxhc3RF cnJvciA9ICRzdHJpbmc7DQoJfQ0KCUZ1bmN0aW9uIGdldExhc3RFcnJvcigpew0KCQlyZXR1 cm4gJHRoaXMtPmxhc3RFcnJvcjsNCgl9DQoJDQoJRnVuY3Rpb24gX2xvYWRGaWxlTGlzdEJ5 RU9GKCYkZmgsICRzdG9wT25GaWxlPWZhbHNlKXsNCgkJLy8gQ2hlY2sgaWYgdGhlcmUncyBh IHZhbGlkIENlbnRyYWwgRGlyIHNpZ25hdHVyZS4NCgkJLy8gTGV0J3MgY29uc2lkZXIgYSBm aWxlIGNvbW1lbnQgc21hbGxlciB0aGFuIDEwMjQgY2hhcmFjdGVycy4uLg0KCQkvLyBBY3R1 YWxseSwgaXQgbGVuZ3RoIGNhbiBiZSA2NTUzNi4uIEJ1dCB3ZSdyZSBub3QgZ29pbmcgdG8g c3VwcG9ydCBpdC4NCgkJDQoJCWZvcigkeCA9IDA7ICR4IDwgMTAyNDsgJHgrKyl7DQoJCQlm c2VlaygkZmgsIC0yMi0keCwgU0VFS19FTkQpOw0KCQkJDQoJCQkkc2lnbmF0dXJlID0gZnJl YWQoJGZoLCA0KTsNCgkJCWlmKCRzaWduYXR1cmUgPT0gJHRoaXMtPmRpclNpZ25hdHVyZUUp ew0KCQkJCS8vIElmIGZvdW5kIEVPRiBDZW50cmFsIERpcg0KCQkJCSRlb2RpclsnZGlza19u dW1iZXJfdGhpcyddICAgPSB1bnBhY2soInYiLCBmcmVhZCgkZmgsIDIpKTsgLy8gbnVtYmVy IG9mIHRoaXMgZGlzaw0KCQkJCSRlb2RpclsnZGlza19udW1iZXInXSAgICAgICAgPSB1bnBh Y2soInYiLCBmcmVhZCgkZmgsIDIpKTsgLy8gbnVtYmVyIG9mIHRoZSBkaXNrIHdpdGggdGhl IHN0YXJ0IG9mIHRoZSBjZW50cmFsIGRpcmVjdG9yeQ0KCQkJCSRlb2RpclsndG90YWxfZW50 cmllc190aGlzJ10gPSB1bnBhY2soInYiLCBmcmVhZCgkZmgsIDIpKTsgLy8gdG90YWwgbnVt YmVyIG9mIGVudHJpZXMgaW4gdGhlIGNlbnRyYWwgZGlyIG9uIHRoaXMgZGlzaw0KCQkJCSRl b2RpclsndG90YWxfZW50cmllcyddICAgICAgPSB1bnBhY2soInYiLCBmcmVhZCgkZmgsIDIp KTsgLy8gdG90YWwgbnVtYmVyIG9mIGVudHJpZXMgaW4NCgkJCQkkZW9kaXJbJ3NpemVfb2Zf Y2QnXSAgICAgICAgID0gdW5wYWNrKCJWIiwgZnJlYWQoJGZoLCA0KSk7IC8vIHNpemUgb2Yg dGhlIGNlbnRyYWwgZGlyZWN0b3J5DQoJCQkJJGVvZGlyWydvZmZzZXRfc3RhcnRfY2QnXSAg ICA9IHVucGFjaygiViIsIGZyZWFkKCRmaCwgNCkpOyAvLyBvZmZzZXQgb2Ygc3RhcnQgb2Yg Y2VudHJhbCBkaXJlY3Rvcnkgd2l0aCByZXNwZWN0IHRvIHRoZSBzdGFydGluZyBkaXNrIG51 bWJlcg0KCQkJCSR6aXBGaWxlQ29tbWVudExlbmdodCAgICAgICAgPSB1bnBhY2soInYiLCBm cmVhZCgkZmgsIDIpKTsgLy8gemlwZmlsZSBjb21tZW50IGxlbmd0aA0KCQkJCSRlb2Rpclsn emlwZmlsZV9jb21tZW50J10gICAgPSAkemlwRmlsZUNvbW1lbnRMZW5naHRbMV0/ZnJlYWQo JGZoLCAkemlwRmlsZUNvbW1lbnRMZW5naHRbMV0pOicnOyAvLyB6aXBmaWxlIGNvbW1lbnQN CgkJCQkkdGhpcy0+ZW5kT2ZDZW50cmFsID0gQXJyYXkoDQoJCQkJCSdkaXNrX251bWJlcl90 aGlzJz0+JGVvZGlyWydkaXNrX251bWJlcl90aGlzJ11bMV0sDQoJCQkJCSdkaXNrX251bWJl cic9PiRlb2RpclsnZGlza19udW1iZXInXVsxXSwNCgkJCQkJJ3RvdGFsX2VudHJpZXNfdGhp cyc9PiRlb2RpclsndG90YWxfZW50cmllc190aGlzJ11bMV0sDQoJCQkJCSd0b3RhbF9lbnRy aWVzJz0+JGVvZGlyWyd0b3RhbF9lbnRyaWVzJ11bMV0sDQoJCQkJCSdzaXplX29mX2NkJz0+ JGVvZGlyWydzaXplX29mX2NkJ11bMV0sDQoJCQkJCSdvZmZzZXRfc3RhcnRfY2QnPT4kZW9k aXJbJ29mZnNldF9zdGFydF9jZCddWzFdLA0KCQkJCQknemlwZmlsZV9jb21tZW50Jz0+JGVv ZGlyWyd6aXBmaWxlX2NvbW1lbnQnXSwNCgkJCQkpOw0KCQkJCQ0KCQkJCS8vIFRoZW4sIGxv YWQgZmlsZSBsaXN0DQoJCQkJZnNlZWsoJGZoLCAkdGhpcy0+ZW5kT2ZDZW50cmFsWydvZmZz ZXRfc3RhcnRfY2QnXSk7DQoJCQkJJHNpZ25hdHVyZSA9IGZyZWFkKCRmaCwgNCk7DQoJCQkJ DQoJCQkJd2hpbGUoJHNpZ25hdHVyZSA9PSAkdGhpcy0+ZGlyU2lnbmF0dXJlKXsNCgkJCQkJ JGRpclsndmVyc2lvbl9tYWRlYnknXSAgICAgID0gdW5wYWNrKCJ2IiwgZnJlYWQoJGZoLCAy KSk7IC8vIHZlcnNpb24gbWFkZSBieQ0KCQkJCQkkZGlyWyd2ZXJzaW9uX25lZWRlZCddICAg ICAgPSB1bnBhY2soInYiLCBmcmVhZCgkZmgsIDIpKTsgLy8gdmVyc2lvbiBuZWVkZWQgdG8g ZXh0cmFjdA0KCQkJCQkkZGlyWydnZW5lcmFsX2JpdF9mbGFnJ10gICAgPSB1bnBhY2soInYi LCBmcmVhZCgkZmgsIDIpKTsgLy8gZ2VuZXJhbCBwdXJwb3NlIGJpdCBmbGFnDQoJCQkJCSRk aXJbJ2NvbXByZXNzaW9uX21ldGhvZCddICA9IHVucGFjaygidiIsIGZyZWFkKCRmaCwgMikp OyAvLyBjb21wcmVzc2lvbiBtZXRob2QNCgkJCQkJJGRpclsnbGFzdG1vZF90aW1lJ10gICAg ICAgID0gdW5wYWNrKCJ2IiwgZnJlYWQoJGZoLCAyKSk7IC8vIGxhc3QgbW9kIGZpbGUgdGlt ZQ0KCQkJCQkkZGlyWydsYXN0bW9kX2RhdGUnXSAgICAgICAgPSB1bnBhY2soInYiLCBmcmVh ZCgkZmgsIDIpKTsgLy8gbGFzdCBtb2QgZmlsZSBkYXRlDQoJCQkJCSRkaXJbJ2NyYy0zMidd ICAgICAgICAgICAgICA9IGZyZWFkKCRmaCwgNCk7ICAgICAgICAgICAgICAvLyBjcmMtMzIN CgkJCQkJJGRpclsnY29tcHJlc3NlZF9zaXplJ10gICAgID0gdW5wYWNrKCJWIiwgZnJlYWQo JGZoLCA0KSk7IC8vIGNvbXByZXNzZWQgc2l6ZQ0KCQkJCQkkZGlyWyd1bmNvbXByZXNzZWRf c2l6ZSddICAgPSB1bnBhY2soIlYiLCBmcmVhZCgkZmgsIDQpKTsgLy8gdW5jb21wcmVzc2Vk IHNpemUNCgkJCQkJJGZpbGVOYW1lTGVuZ3RoICAgICAgICAgICAgID0gdW5wYWNrKCJ2Iiwg ZnJlYWQoJGZoLCAyKSk7IC8vIGZpbGVuYW1lIGxlbmd0aA0KCQkJCQkkZXh0cmFGaWVsZExl bmd0aCAgICAgICAgICAgPSB1bnBhY2soInYiLCBmcmVhZCgkZmgsIDIpKTsgLy8gZXh0cmEg ZmllbGQgbGVuZ3RoDQoJCQkJCSRmaWxlQ29tbWVudExlbmd0aCAgICAgICAgICA9IHVucGFj aygidiIsIGZyZWFkKCRmaCwgMikpOyAvLyBmaWxlIGNvbW1lbnQgbGVuZ3RoDQoJCQkJCSRk aXJbJ2Rpc2tfbnVtYmVyX3N0YXJ0J10gICA9IHVucGFjaygidiIsIGZyZWFkKCRmaCwgMikp OyAvLyBkaXNrIG51bWJlciBzdGFydA0KCQkJCQkkZGlyWydpbnRlcm5hbF9hdHRyaWJ1dGVz J10gPSB1bnBhY2soInYiLCBmcmVhZCgkZmgsIDIpKTsgLy8gaW50ZXJuYWwgZmlsZSBhdHRy aWJ1dGVzLWJ5dGUxDQoJCQkJCSRkaXJbJ2V4dGVybmFsX2F0dHJpYnV0ZXMxJ109IHVucGFj aygidiIsIGZyZWFkKCRmaCwgMikpOyAvLyBleHRlcm5hbCBmaWxlIGF0dHJpYnV0ZXMtYnl0 ZTINCgkJCQkJJGRpclsnZXh0ZXJuYWxfYXR0cmlidXRlczInXT0gdW5wYWNrKCJ2IiwgZnJl YWQoJGZoLCAyKSk7IC8vIGV4dGVybmFsIGZpbGUgYXR0cmlidXRlcw0KCQkJCQkkZGlyWydy ZWxhdGl2ZV9vZmZzZXQnXSAgICAgPSB1bnBhY2soIlYiLCBmcmVhZCgkZmgsIDQpKTsgLy8g cmVsYXRpdmUgb2Zmc2V0IG9mIGxvY2FsIGhlYWRlcg0KCQkJCQkkZGlyWydmaWxlX25hbWUn XSAgICAgICAgICAgPSBmcmVhZCgkZmgsICRmaWxlTmFtZUxlbmd0aFsxXSk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvLyBmaWxlbmFtZQ0KCQkJCQkkZGlyWydleHRyYV9maWVs ZCddICAgICAgICAgPSAkZXh0cmFGaWVsZExlbmd0aFsxXSA/ZnJlYWQoJGZoLCAkZXh0cmFG aWVsZExlbmd0aFsxXSkgOicnOyAvLyBleHRyYSBmaWVsZA0KCQkJCQkkZGlyWydmaWxlX2Nv bW1lbnQnXSAgICAgICAgPSAkZmlsZUNvbW1lbnRMZW5ndGhbMV0/ZnJlYWQoJGZoLCAkZmls ZUNvbW1lbnRMZW5ndGhbMV0pOicnOyAvLyBmaWxlIGNvbW1lbnQJCQkNCgkJCQkJDQoJCQkJ CS8vIENvbnZlcnQgdGhlIGRhdGUgYW5kIHRpbWUsIGZyb20gTVMtRE9TIGZvcm1hdCB0byBV TklYIFRpbWVzdGFtcA0KCQkJCQkkQklObGFzdG1vZF9kYXRlID0gc3RyX3BhZChkZWNiaW4o JGRpclsnbGFzdG1vZF9kYXRlJ11bMV0pLCAxNiwgJzAnLCBTVFJfUEFEX0xFRlQpOw0KCQkJ CQkkQklObGFzdG1vZF90aW1lID0gc3RyX3BhZChkZWNiaW4oJGRpclsnbGFzdG1vZF90aW1l J11bMV0pLCAxNiwgJzAnLCBTVFJfUEFEX0xFRlQpOw0KCQkJCQkkbGFzdG1vZF9kYXRlWSA9 IGJpbmRlYyhzdWJzdHIoJEJJTmxhc3Rtb2RfZGF0ZSwgIDAsIDcpKSsxOTgwOw0KCQkJCQkk bGFzdG1vZF9kYXRlTSA9IGJpbmRlYyhzdWJzdHIoJEJJTmxhc3Rtb2RfZGF0ZSwgIDcsIDQp KTsNCgkJCQkJJGxhc3Rtb2RfZGF0ZUQgPSBiaW5kZWMoc3Vic3RyKCRCSU5sYXN0bW9kX2Rh dGUsIDExLCA1KSk7DQoJCQkJCSRsYXN0bW9kX3RpbWVIID0gYmluZGVjKHN1YnN0cigkQklO bGFzdG1vZF90aW1lLCAgIDAsIDUpKTsNCgkJCQkJJGxhc3Rtb2RfdGltZU0gPSBiaW5kZWMo c3Vic3RyKCRCSU5sYXN0bW9kX3RpbWUsICAgNSwgNikpOw0KCQkJCQkkbGFzdG1vZF90aW1l UyA9IGJpbmRlYyhzdWJzdHIoJEJJTmxhc3Rtb2RfdGltZSwgIDExLCA1KSk7CQ0KCQkJCQkN CgkJCQkJLy8gU29tZSBwcm90ZWN0aW9uIGFnYWlucyBhdHRhY2tzLi4uDQoJCQkJCSRkaXJb J2ZpbGVfbmFtZSddICAgICA9ICR0aGlzLT5fZGVjb2RlRmlsZW5hbWUoJGRpclsnZmlsZV9u YW1lJ10pOw0KCQkJCQlpZighJGRpclsnZmlsZV9uYW1lJ10gPSAkdGhpcy0+X3Byb3RlY3Qo JGRpclsnZmlsZV9uYW1lJ10pKQ0KCQkJCQkJY29udGludWU7DQoJCQkJCQ0KCQkJCQkkdGhp cy0+Y2VudHJhbERpckxpc3RbJGRpclsnZmlsZV9uYW1lJ11dID0gQXJyYXkoDQoJCQkJCQkn dmVyc2lvbl9tYWRlYnknPT4kZGlyWyd2ZXJzaW9uX21hZGVieSddWzFdLA0KCQkJCQkJJ3Zl cnNpb25fbmVlZGVkJz0+JGRpclsndmVyc2lvbl9uZWVkZWQnXVsxXSwNCgkJCQkJCSdnZW5l cmFsX2JpdF9mbGFnJz0+c3RyX3BhZChkZWNiaW4oJGRpclsnZ2VuZXJhbF9iaXRfZmxhZydd WzFdKSwgOCwgJzAnLCBTVFJfUEFEX0xFRlQpLA0KCQkJCQkJJ2NvbXByZXNzaW9uX21ldGhv ZCc9PiRkaXJbJ2NvbXByZXNzaW9uX21ldGhvZCddWzFdLA0KCQkJCQkJJ2xhc3Rtb2RfZGF0 ZXRpbWUnICA9Pm1rdGltZSgkbGFzdG1vZF90aW1lSCwgJGxhc3Rtb2RfdGltZU0sICRsYXN0 bW9kX3RpbWVTLCAkbGFzdG1vZF9kYXRlTSwgJGxhc3Rtb2RfZGF0ZUQsICRsYXN0bW9kX2Rh dGVZKSwNCgkJCQkJCSdjcmMtMzInICAgICAgICAgICAgPT5zdHJfcGFkKGRlY2hleChvcmQo JGRpclsnY3JjLTMyJ11bM10pKSwgMiwgJzAnLCBTVFJfUEFEX0xFRlQpLg0KCQkJCQkJCQkJ CQkgIHN0cl9wYWQoZGVjaGV4KG9yZCgkZGlyWydjcmMtMzInXVsyXSkpLCAyLCAnMCcsIFNU Ul9QQURfTEVGVCkuDQoJCQkJCQkJCQkJCSAgc3RyX3BhZChkZWNoZXgob3JkKCRkaXJbJ2Ny Yy0zMiddWzFdKSksIDIsICcwJywgU1RSX1BBRF9MRUZUKS4NCgkJCQkJCQkJCQkJICBzdHJf cGFkKGRlY2hleChvcmQoJGRpclsnY3JjLTMyJ11bMF0pKSwgMiwgJzAnLCBTVFJfUEFEX0xF RlQpLA0KCQkJCQkJJ2NvbXByZXNzZWRfc2l6ZSc9PiRkaXJbJ2NvbXByZXNzZWRfc2l6ZSdd WzFdLA0KCQkJCQkJJ3VuY29tcHJlc3NlZF9zaXplJz0+JGRpclsndW5jb21wcmVzc2VkX3Np emUnXVsxXSwNCgkJCQkJCSdkaXNrX251bWJlcl9zdGFydCc9PiRkaXJbJ2Rpc2tfbnVtYmVy X3N0YXJ0J11bMV0sDQoJCQkJCQknaW50ZXJuYWxfYXR0cmlidXRlcyc9PiRkaXJbJ2ludGVy bmFsX2F0dHJpYnV0ZXMnXVsxXSwNCgkJCQkJCSdleHRlcm5hbF9hdHRyaWJ1dGVzMSc9PiRk aXJbJ2V4dGVybmFsX2F0dHJpYnV0ZXMxJ11bMV0sDQoJCQkJCQknZXh0ZXJuYWxfYXR0cmli dXRlczInPT4kZGlyWydleHRlcm5hbF9hdHRyaWJ1dGVzMiddWzFdLA0KCQkJCQkJJ3JlbGF0 aXZlX29mZnNldCc9PiRkaXJbJ3JlbGF0aXZlX29mZnNldCddWzFdLA0KCQkJCQkJJ2ZpbGVf bmFtZSc9PiRkaXJbJ2ZpbGVfbmFtZSddLA0KCQkJCQkJJ2V4dHJhX2ZpZWxkJz0+JGRpclsn ZXh0cmFfZmllbGQnXSwNCgkJCQkJCSdmaWxlX2NvbW1lbnQnPT4kZGlyWydmaWxlX2NvbW1l bnQnXSwNCgkJCQkJKTsNCgkJCQkJJHNpZ25hdHVyZSA9IGZyZWFkKCRmaCwgNCk7DQoJCQkJ fQ0KCQkJCQ0KCQkJCS8vIElmIGxvYWRlZCBjZW50cmFsRGlycywgdGhlbiB0cnkgdG8gaWRl bnRpZnkgdGhlIG9mZnNldFBvc2l0aW9uIG9mIHRoZSBjb21wcmVzc2VkIGRhdGEuDQoJCQkJ aWYoJHRoaXMtPmNlbnRyYWxEaXJMaXN0KSBmb3JlYWNoKCR0aGlzLT5jZW50cmFsRGlyTGlz dCBhcyAkZmlsZW5hbWU9PiRkZXRhaWxzKXsNCgkJCQkJJGkgPSAkdGhpcy0+X2dldEZpbGVI ZWFkZXJJbmZvcm1hdGlvbigkZmgsICRkZXRhaWxzWydyZWxhdGl2ZV9vZmZzZXQnXSk7DQoJ CQkJCSR0aGlzLT5jb21wcmVzc2VkTGlzdFskZmlsZW5hbWVdWydmaWxlX25hbWUnXSAgICAg ICAgICA9ICRmaWxlbmFtZTsNCgkJCQkJJHRoaXMtPmNvbXByZXNzZWRMaXN0WyRmaWxlbmFt ZV1bJ2NvbXByZXNzaW9uX21ldGhvZCddID0gJGRldGFpbHNbJ2NvbXByZXNzaW9uX21ldGhv ZCddOw0KCQkJCQkkdGhpcy0+Y29tcHJlc3NlZExpc3RbJGZpbGVuYW1lXVsndmVyc2lvbl9u ZWVkZWQnXSAgICAgPSAkZGV0YWlsc1sndmVyc2lvbl9uZWVkZWQnXTsNCgkJCQkJJHRoaXMt PmNvbXByZXNzZWRMaXN0WyRmaWxlbmFtZV1bJ2xhc3Rtb2RfZGF0ZXRpbWUnXSAgID0gJGRl dGFpbHNbJ2xhc3Rtb2RfZGF0ZXRpbWUnXTsNCgkJCQkJJHRoaXMtPmNvbXByZXNzZWRMaXN0 WyRmaWxlbmFtZV1bJ2NyYy0zMiddICAgICAgICAgICAgID0gJGRldGFpbHNbJ2NyYy0zMidd Ow0KCQkJCQkkdGhpcy0+Y29tcHJlc3NlZExpc3RbJGZpbGVuYW1lXVsnY29tcHJlc3NlZF9z aXplJ10gICAgPSAkZGV0YWlsc1snY29tcHJlc3NlZF9zaXplJ107DQoJCQkJCSR0aGlzLT5j b21wcmVzc2VkTGlzdFskZmlsZW5hbWVdWyd1bmNvbXByZXNzZWRfc2l6ZSddICA9ICRkZXRh aWxzWyd1bmNvbXByZXNzZWRfc2l6ZSddOw0KCQkJCQkkdGhpcy0+Y29tcHJlc3NlZExpc3Rb JGZpbGVuYW1lXVsnbGFzdG1vZF9kYXRldGltZSddICAgPSAkZGV0YWlsc1snbGFzdG1vZF9k YXRldGltZSddOw0KCQkJCQkkdGhpcy0+Y29tcHJlc3NlZExpc3RbJGZpbGVuYW1lXVsnZXh0 cmFfZmllbGQnXSAgICAgICAgPSAkaVsnZXh0cmFfZmllbGQnXTsNCgkJCQkJJHRoaXMtPmNv bXByZXNzZWRMaXN0WyRmaWxlbmFtZV1bJ2NvbnRlbnRzLXN0YXJ0T2Zmc2V0J109JGlbJ2Nv bnRlbnRzLXN0YXJ0T2Zmc2V0J107DQoJCQkJCWlmKHN0cnRvbG93ZXIoJHN0b3BPbkZpbGUp ID09IHN0cnRvbG93ZXIoJGZpbGVuYW1lKSkNCgkJCQkJCWJyZWFrOw0KCQkJCX0NCgkJCQly ZXR1cm4gdHJ1ZTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KCUZ1bmN0aW9u IF9sb2FkRmlsZUxpc3RCeVNpZ25hdHVyZXMoJiRmaCwgJHN0b3BPbkZpbGU9ZmFsc2Upew0K CQlmc2VlaygkZmgsIDApOw0KCQkNCgkJJHJldHVybiA9IGZhbHNlOw0KCQlmb3IoOzspew0K CQkJJGRldGFpbHMgPSAkdGhpcy0+X2dldEZpbGVIZWFkZXJJbmZvcm1hdGlvbigkZmgpOw0K CQkJaWYoISRkZXRhaWxzKXsNCgkJCQkkdGhpcy0+ZGVidWdNc2coMSwgIkludmFsaWQgc2ln bmF0dXJlLiBUcnlpbmcgdG8gdmVyaWZ5IGlmIGlzIG9sZCBzdHlsZSBEYXRhIERlc2NyaXB0 b3IuLi4iKTsNCgkJCQlmc2VlaygkZmgsIDEyIC0gNCwgU0VFS19DVVIpOyAvLyAxMjogRGF0 YSBkZXNjcmlwdG9yIC0gNDogU2lnbmF0dXJlICh0aGF0IHdpbGwgYmUgcmVhZCBhZ2FpbikN CgkJCQkkZGV0YWlscyA9ICR0aGlzLT5fZ2V0RmlsZUhlYWRlckluZm9ybWF0aW9uKCRmaCk7 DQoJCQl9DQoJCQlpZighJGRldGFpbHMpew0KCQkJCSR0aGlzLT5kZWJ1Z01zZygxLCAiU3Rp bGwgaW52YWxpZCBzaWduYXR1cmUuIFByb2JhYmx5IHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUg ZmlsZS4iKTsNCgkJCQlicmVhazsNCgkJCX0NCgkJCSRmaWxlbmFtZSA9ICRkZXRhaWxzWydm aWxlX25hbWUnXTsNCgkJCSR0aGlzLT5jb21wcmVzc2VkTGlzdFskZmlsZW5hbWVdID0gJGRl dGFpbHM7DQoJCQkkcmV0dXJuID0gdHJ1ZTsNCgkJCWlmKHN0cnRvbG93ZXIoJHN0b3BPbkZp bGUpID09IHN0cnRvbG93ZXIoJGZpbGVuYW1lKSkNCgkJCQlicmVhazsNCgkJfQ0KCQkNCgkJ cmV0dXJuICRyZXR1cm47DQoJfQ0KCUZ1bmN0aW9uIF9nZXRGaWxlSGVhZGVySW5mb3JtYXRp b24oJiRmaCwgJHN0YXJ0T2Zmc2V0PWZhbHNlKXsNCgkJaWYoJHN0YXJ0T2Zmc2V0ICE9PSBm YWxzZSkNCgkJCWZzZWVrKCRmaCwgJHN0YXJ0T2Zmc2V0KTsNCgkJDQoJCSRzaWduYXR1cmUg PSBmcmVhZCgkZmgsIDQpOw0KCQlpZigkc2lnbmF0dXJlID09ICR0aGlzLT56aXBTaWduYXR1 cmUpew0KCQkJIyAkdGhpcy0+ZGVidWdNc2coMSwgIlppcCBTaWduYXR1cmUhIik7DQoJCQkN CgkJCS8vIEdldCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgemlwcGVkIGZpbGUNCgkJCSRmaWxl Wyd2ZXJzaW9uX25lZWRlZCddICAgICA9IHVucGFjaygidiIsIGZyZWFkKCRmaCwgMikpOyAv LyB2ZXJzaW9uIG5lZWRlZCB0byBleHRyYWN0DQoJCQkkZmlsZVsnZ2VuZXJhbF9iaXRfZmxh ZyddICAgPSB1bnBhY2soInYiLCBmcmVhZCgkZmgsIDIpKTsgLy8gZ2VuZXJhbCBwdXJwb3Nl IGJpdCBmbGFnDQoJCQkkZmlsZVsnY29tcHJlc3Npb25fbWV0aG9kJ10gPSB1bnBhY2soInYi LCBmcmVhZCgkZmgsIDIpKTsgLy8gY29tcHJlc3Npb24gbWV0aG9kDQoJCQkkZmlsZVsnbGFz dG1vZF90aW1lJ10gICAgICAgPSB1bnBhY2soInYiLCBmcmVhZCgkZmgsIDIpKTsgLy8gbGFz dCBtb2QgZmlsZSB0aW1lDQoJCQkkZmlsZVsnbGFzdG1vZF9kYXRlJ10gICAgICAgPSB1bnBh Y2soInYiLCBmcmVhZCgkZmgsIDIpKTsgLy8gbGFzdCBtb2QgZmlsZSBkYXRlDQoJCQkkZmls ZVsnY3JjLTMyJ10gICAgICAgICAgICAgPSBmcmVhZCgkZmgsIDQpOyAgICAgICAgICAgICAg Ly8gY3JjLTMyDQoJCQkkZmlsZVsnY29tcHJlc3NlZF9zaXplJ10gICAgPSB1bnBhY2soIlYi LCBmcmVhZCgkZmgsIDQpKTsgLy8gY29tcHJlc3NlZCBzaXplDQoJCQkkZmlsZVsndW5jb21w cmVzc2VkX3NpemUnXSAgPSB1bnBhY2soIlYiLCBmcmVhZCgkZmgsIDQpKTsgLy8gdW5jb21w cmVzc2VkIHNpemUNCgkJCSRmaWxlTmFtZUxlbmd0aCAgICAgICAgICAgICA9IHVucGFjaygi diIsIGZyZWFkKCRmaCwgMikpOyAvLyBmaWxlbmFtZSBsZW5ndGgNCgkJCSRleHRyYUZpZWxk TGVuZ3RoICAgICAgICAgICA9IHVucGFjaygidiIsIGZyZWFkKCRmaCwgMikpOyAvLyBleHRy YSBmaWVsZCBsZW5ndGgNCgkJCSRmaWxlWydmaWxlX25hbWUnXSAgICAgICAgICA9IGZyZWFk KCRmaCwgJGZpbGVOYW1lTGVuZ3RoWzFdKTsgLy8gZmlsZW5hbWUNCgkJCSRmaWxlWydleHRy YV9maWVsZCddICAgICAgICA9ICRleHRyYUZpZWxkTGVuZ3RoWzFdP2ZyZWFkKCRmaCwgJGV4 dHJhRmllbGRMZW5ndGhbMV0pOicnOyAvLyBleHRyYSBmaWVsZA0KCQkJJGZpbGVbJ2NvbnRl bnRzLXN0YXJ0T2Zmc2V0J109IGZ0ZWxsKCRmaCk7DQoJCQkNCgkJCS8vIEJ5cGFzcyB0aGUg d2hvbGUgY29tcHJlc3NlZCBjb250ZW50cywgYW5kIGxvb2sgZm9yIHRoZSBuZXh0IGZpbGUN CgkJCWZzZWVrKCRmaCwgJGZpbGVbJ2NvbXByZXNzZWRfc2l6ZSddWzFdLCBTRUVLX0NVUik7 DQoJCQkNCgkJCS8vIENvbnZlcnQgdGhlIGRhdGUgYW5kIHRpbWUsIGZyb20gTVMtRE9TIGZv cm1hdCB0byBVTklYIFRpbWVzdGFtcA0KCQkJJEJJTmxhc3Rtb2RfZGF0ZSA9IHN0cl9wYWQo ZGVjYmluKCRmaWxlWydsYXN0bW9kX2RhdGUnXVsxXSksIDE2LCAnMCcsIFNUUl9QQURfTEVG VCk7DQoJCQkkQklObGFzdG1vZF90aW1lID0gc3RyX3BhZChkZWNiaW4oJGZpbGVbJ2xhc3Rt b2RfdGltZSddWzFdKSwgMTYsICcwJywgU1RSX1BBRF9MRUZUKTsNCgkJCSRsYXN0bW9kX2Rh dGVZID0gYmluZGVjKHN1YnN0cigkQklObGFzdG1vZF9kYXRlLCAgMCwgNykpKzE5ODA7DQoJ CQkkbGFzdG1vZF9kYXRlTSA9IGJpbmRlYyhzdWJzdHIoJEJJTmxhc3Rtb2RfZGF0ZSwgIDcs IDQpKTsNCgkJCSRsYXN0bW9kX2RhdGVEID0gYmluZGVjKHN1YnN0cigkQklObGFzdG1vZF9k YXRlLCAxMSwgNSkpOw0KCQkJJGxhc3Rtb2RfdGltZUggPSBiaW5kZWMoc3Vic3RyKCRCSU5s YXN0bW9kX3RpbWUsICAgMCwgNSkpOw0KCQkJJGxhc3Rtb2RfdGltZU0gPSBiaW5kZWMoc3Vi c3RyKCRCSU5sYXN0bW9kX3RpbWUsICAgNSwgNikpOw0KCQkJJGxhc3Rtb2RfdGltZVMgPSBi aW5kZWMoc3Vic3RyKCRCSU5sYXN0bW9kX3RpbWUsICAxMSwgNSkpOw0KCQkJDQoJCQkvLyBT b21lIHByb3RlY3Rpb24gYWdhaW5zIGF0dGFja3MuLi4NCgkJCSRmaWxlWydmaWxlX25hbWUn XSAgICAgPSAkdGhpcy0+X2RlY29kZUZpbGVuYW1lKCRmaWxlWydmaWxlX25hbWUnXSk7DQoJ CQlpZighJGZpbGVbJ2ZpbGVfbmFtZSddID0gJHRoaXMtPl9wcm90ZWN0KCRmaWxlWydmaWxl X25hbWUnXSkpDQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJDQoJCQkvLyBNb3VudCBmaWxlIHRh YmxlDQoJCQkkaSA9IEFycmF5KA0KCQkJCSdmaWxlX25hbWUnICAgICAgICAgPT4kZmlsZVsn ZmlsZV9uYW1lJ10sDQoJCQkJJ2NvbXByZXNzaW9uX21ldGhvZCc9PiRmaWxlWydjb21wcmVz c2lvbl9tZXRob2QnXVsxXSwNCgkJCQkndmVyc2lvbl9uZWVkZWQnICAgID0+JGZpbGVbJ3Zl cnNpb25fbmVlZGVkJ11bMV0sDQoJCQkJJ2xhc3Rtb2RfZGF0ZXRpbWUnICA9Pm1rdGltZSgk bGFzdG1vZF90aW1lSCwgJGxhc3Rtb2RfdGltZU0sICRsYXN0bW9kX3RpbWVTLCAkbGFzdG1v ZF9kYXRlTSwgJGxhc3Rtb2RfZGF0ZUQsICRsYXN0bW9kX2RhdGVZKSwNCgkJCQknY3JjLTMy JyAgICAgICAgICAgID0+c3RyX3BhZChkZWNoZXgob3JkKCRmaWxlWydjcmMtMzInXVszXSkp LCAyLCAnMCcsIFNUUl9QQURfTEVGVCkuDQoJCQkJCQkJCQkgIHN0cl9wYWQoZGVjaGV4KG9y ZCgkZmlsZVsnY3JjLTMyJ11bMl0pKSwgMiwgJzAnLCBTVFJfUEFEX0xFRlQpLg0KCQkJCQkJ CQkJICBzdHJfcGFkKGRlY2hleChvcmQoJGZpbGVbJ2NyYy0zMiddWzFdKSksIDIsICcwJywg U1RSX1BBRF9MRUZUKS4NCgkJCQkJCQkJCSAgc3RyX3BhZChkZWNoZXgob3JkKCRmaWxlWydj cmMtMzInXVswXSkpLCAyLCAnMCcsIFNUUl9QQURfTEVGVCksDQoJCQkJJ2NvbXByZXNzZWRf c2l6ZScgICA9PiRmaWxlWydjb21wcmVzc2VkX3NpemUnXVsxXSwNCgkJCQkndW5jb21wcmVz c2VkX3NpemUnID0+JGZpbGVbJ3VuY29tcHJlc3NlZF9zaXplJ11bMV0sDQoJCQkJJ2V4dHJh X2ZpZWxkJyAgICAgICA9PiRmaWxlWydleHRyYV9maWVsZCddLA0KCQkJCSdnZW5lcmFsX2Jp dF9mbGFnJyAgPT5zdHJfcGFkKGRlY2JpbigkZmlsZVsnZ2VuZXJhbF9iaXRfZmxhZyddWzFd KSwgOCwgJzAnLCBTVFJfUEFEX0xFRlQpLA0KCQkJCSdjb250ZW50cy1zdGFydE9mZnNldCc9 PiRmaWxlWydjb250ZW50cy1zdGFydE9mZnNldCddDQoJCQkpOw0KCQkJcmV0dXJuICRpOw0K CQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoJDQoJRnVuY3Rpb24gX2RlY29kZUZpbGVuYW1l KCRmaWxlbmFtZSl7DQoJCSRmcm9tID0gIlx4YjdceGI1XHhiNlx4YzdceDhlXHg4Zlx4OTJc eDgwXHhkNFx4OTBceGQyXHhkM1x4ZGVceGQ2XHhkN1x4ZDhceGQxXHhhNVx4ZTNceGUwIi4N CgkJICAgICAgICAiXHhlMlx4ZTVceDk5XHg5ZFx4ZWJceGU5XHhlYVx4OWFceGVkXHhlOFx4 ZTFceDg1XHhhMFx4ODNceGM2XHg4NFx4ODZceDkxXHg4N1x4OGEiLg0KCQkJCSJceDgyXHg4 OFx4ODlceDhkXHhhMVx4OGNceDhiXHhkMFx4YTRceDk1XHhhMlx4OTNceGU0XHg5NFx4OWJc eDk3XHhhM1x4OTZceGVjXHhlNyIuDQoJCQkJIlx4OTjDryI7DQoJCSR0byAgID0gIsOAw4HD gsODw4TDhcOGw4fDiMOJw4rDi8OMw43DjsOPw5DDkcOSw5PDlMOVw5bDmMOZw5rDm8Ocw53D nsOfw6DDocOiw6PDpMOlw6bDp8Oow6nDqsOrw6zDrcOuw6/DsMOxw7LDs8O0w7XDtsO4w7nD usO7w73DvsO/wrQiOw0KDQoJCXJldHVybiBzdHJ0cigkZmlsZW5hbWUsICRmcm9tLCAkdG8p Ow0KCX0NCglGdW5jdGlvbiBfcHJvdGVjdCgkZnVsbFBhdGgpew0KCQkvLyBLbm93biBoYWNr LWF0dGFja3MgKGZpbGVuYW1lIGxpa2UpOg0KCQkvLyAgIC9ob21lL3Vzcg0KCQkvLyAgIC4u Ly4uL2hvbWUvdXNyDQoJCS8vICAgZm9sZGVyLy4uLy4uLy4uL2hvbWUvdXNyDQoJCS8vICAg c2FtcGxlLyh4MCkuLi9ob21lL3Vzcg0KCQkNCgkJJGZ1bGxQYXRoID0gc3RydHIoJGZ1bGxQ YXRoLCAiOio8PnxcIlx4MFxcIiwgIi4uLi4uLi4vIik7DQoJCXdoaWxlKCRmdWxsUGF0aFsw XSA9PSAiLyIpDQoJCQkkZnVsbFBhdGggPSBzdWJzdHIoJGZ1bGxQYXRoLCAxKTsNCgkJDQoJ CWlmKHN1YnN0cigkZnVsbFBhdGgsIC0xKSA9PSAiLyIpew0KCQkJJGJhc2UgICAgID0gJyc7 DQoJCQkkZnVsbFBhdGggPSBzdWJzdHIoJGZ1bGxQYXRoLCAwLCAtMSk7DQoJCX0NCgkJZWxz ZXsNCgkJCSRiYXNlICAgICA9IGJhc2VuYW1lKCRmdWxsUGF0aCk7DQoJCQkkZnVsbFBhdGgg PSBkaXJuYW1lKCRmdWxsUGF0aCk7DQoJCX0NCgkJDQoJCSRwYXJ0cyAgID0gZXhwbG9kZSgi LyIsICRmdWxsUGF0aCk7DQoJCSRsYXN0SWR4ID0gZmFsc2U7DQoJCWZvcmVhY2goJHBhcnRz IGFzICRpZHg9PiRwYXJ0KXsNCgkJCWlmKCRwYXJ0ID09ICIuIikNCgkJCQl1bnNldCgkcGFy dHNbJGlkeF0pOw0KCQkJZWxzZWlmKCRwYXJ0ID09ICIuLiIpew0KCQkJCXVuc2V0KCRwYXJ0 c1skaWR4XSk7DQoJCQkJaWYoJGxhc3RJZHggIT09IGZhbHNlKXsNCgkJCQkJdW5zZXQoJHBh cnRzWyRsYXN0SWR4XSk7DQoJCQkJfQ0KCQkJfQ0KCQkJZWxzZWlmKCRwYXJ0ID09PSAnJyl7 DQoJCQkJdW5zZXQoJHBhcnRzWyRpZHhdKTsNCgkJCX0NCgkJCWVsc2V7DQoJCQkJJGxhc3RJ ZHggPSAkaWR4Ow0KCQkJfQ0KCQl9DQoJCQ0KCQkkZnVsbFBhdGggPSBzaXplb2YoJHBhcnRz KT9pbXBsb2RlKCIvIiwgJHBhcnRzKS4iLyI6IiI7DQoJCXJldHVybiAkZnVsbFBhdGguJGJh c2U7DQoJfQ0KfQ0KDQpjbGFzcyBzbWRfY3J1bmNoX2RaaXB7DQoJdmFyICRmaWxlbmFtZTsN Cgl2YXIgJG92ZXJ3cml0ZTsNCg0KCXZhciAkemlwU2lnbmF0dXJlID0gIlx4NTBceDRiXHgw M1x4MDQiOyAvLyBsb2NhbCBmaWxlIGhlYWRlciBzaWduYXR1cmUNCgl2YXIgJGRpclNpZ25h dHVyZSA9ICJceDUwXHg0Ylx4MDFceDAyIjsgLy8gY2VudHJhbCBkaXIgaGVhZGVyIHNpZ25h dHVyZQ0KCXZhciAkZGlyU2lnbmF0dXJlRT0gIlx4NTBceDRiXHgwNVx4MDYiOyAvLyBlbmQg b2YgY2VudHJhbCBkaXIgc2lnbmF0dXJlDQoJdmFyICRmaWxlc19jb3VudCAgPSAwOw0KCXZh ciAkZmg7DQoNCglGdW5jdGlvbiBzbWRfY3J1bmNoX2RaaXAoJGZpbGVuYW1lLCAkb3Zlcndy aXRlPXRydWUpew0KCQkkdGhpcy0+ZmlsZW5hbWUgID0gJGZpbGVuYW1lOw0KCQkkdGhpcy0+ b3ZlcndyaXRlID0gJG92ZXJ3cml0ZTsNCgl9DQoJRnVuY3Rpb24gYWRkRGlyKCRkaXJuYW1l LCAkZmlsZUNvbW1lbnRzPScnKXsNCgkJaWYoc3Vic3RyKCRkaXJuYW1lLCAtMSkgIT0gJy8n KQ0KCQkJJGRpcm5hbWUgLj0gJy8nOw0KCQkkdGhpcy0+YWRkRmlsZShmYWxzZSwgJGRpcm5h bWUsICRmaWxlQ29tbWVudHMpOw0KCX0NCglGdW5jdGlvbiBhZGRGaWxlKCRmaWxlbmFtZSwg JGNmaWxlbmFtZSwgJGZpbGVDb21tZW50cz0nJywgJGRhdGE9ZmFsc2Upew0KCQlpZighKCRm aCA9ICYkdGhpcy0+ZmgpKQ0KCQkJJGZoID0gZm9wZW4oJHRoaXMtPmZpbGVuYW1lLCAkdGhp cy0+b3ZlcndyaXRlPyd3Yic6J2ErYicpOw0KCQkNCgkJLy8gJGZpbGVuYW1lIGNhbiBiZSBh IGxvY2FsIGZpbGUgT1IgdGhlIGRhdGEgd2ljaCB3aWxsIGJlIGNvbXByZXNzZWQNCgkJaWYo c3Vic3RyKCRjZmlsZW5hbWUsIC0xKT09Jy8nKXsNCgkJCSRkZXRhaWxzWyd1bmNzaXplJ10g PSAwOw0KCQkJJGRhdGEgPSAnJzsNCgkJfQ0KCQllbHNlaWYoZmlsZV9leGlzdHMoJGZpbGVu YW1lKSl7DQoJCQkkZGV0YWlsc1sndW5jc2l6ZSddID0gZmlsZXNpemUoJGZpbGVuYW1lKTsN CgkJCSRkYXRhID0gZmlsZV9nZXRfY29udGVudHMoJGZpbGVuYW1lKTsNCgkJfQ0KCQllbHNl aWYoJGZpbGVuYW1lKXsNCgkJCWVjaG8gIjxiPkNhbm5vdCBhZGQgJGZpbGVuYW1lLiBGaWxl IG5vdCBmb3VuZDwvYj48YnI+IjsNCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KCQllbHNlew0K CQkJJGRldGFpbHNbJ3VuY3NpemUnXSA9IHN0cmxlbigkZmlsZW5hbWUpOw0KCQkJLy8gREFU QSBpcyBnaXZlbi4uIHVzZSBpdCEgOnwNCgkJfQ0KDQoJCS8vIGlmIGRhdGEgdG8gY29tcHJl c3MgaXMgdG9vIHNtYWxsLCBqdXN0IHN0b3JlIGl0DQoJCWlmKCRkZXRhaWxzWyd1bmNzaXpl J10gPCAyNTYpew0KCQkJJGRldGFpbHNbJ2NvbXNpemUnXSA9ICRkZXRhaWxzWyd1bmNzaXpl J107DQoJCQkkZGV0YWlsc1sndm5lZWRlZCddID0gMTA7DQoJCQkkZGV0YWlsc1snY21ldGhv ZCddID0gMDsNCgkJCSR6ZGF0YSA9ICYkZGF0YTsNCgkJfQ0KCQllbHNleyAvLyBvdGhlcndp c2UsIGNvbXByZXNzIGl0DQoJCQkkemRhdGEgPSBnemNvbXByZXNzKCRkYXRhKTsNCgkJCSR6 ZGF0YSA9IHN1YnN0cihzdWJzdHIoJHpkYXRhLCAwLCBzdHJsZW4oJHpkYXRhKSAtIDQpLCAy KTsgLy8gZml4IGNyYyBidWcgKHRoYW5rcyB0byBFcmljIE11ZWxsZXIpDQoJCQkkZGV0YWls c1snY29tc2l6ZSddID0gc3RybGVuKCR6ZGF0YSk7DQoJCQkkZGV0YWlsc1sndm5lZWRlZCdd ID0gMTA7DQoJCQkkZGV0YWlsc1snY21ldGhvZCddID0gODsNCgkJfQ0KCQkNCgkJJGRldGFp bHNbJ2JpdGZsYWcnXSA9IDA7DQoJCSRkZXRhaWxzWydjcmNfMzInXSAgPSBjcmMzMigkZGF0 YSk7DQoJCQ0KCQkvLyBDb252ZXJ0IGRhdGUgYW5kIHRpbWUgdG8gRE9TIEZvcm1hdCwgYW5k IHNldCB0aGVuDQoJCSRsYXN0bW9kX3RpbWVTICA9IHN0cl9wYWQoZGVjYmluKGRhdGUoJ3Mn KT49MzI/ZGF0ZSgncycpLTMyOmRhdGUoJ3MnKSksIDUsICcwJywgU1RSX1BBRF9MRUZUKTsN CgkJJGxhc3Rtb2RfdGltZU0gID0gc3RyX3BhZChkZWNiaW4oZGF0ZSgnaScpKSwgNiwgJzAn LCBTVFJfUEFEX0xFRlQpOw0KCQkkbGFzdG1vZF90aW1lSCAgPSBzdHJfcGFkKGRlY2Jpbihk YXRlKCdIJykpLCA1LCAnMCcsIFNUUl9QQURfTEVGVCk7DQoJCSRsYXN0bW9kX2RhdGVEICA9 IHN0cl9wYWQoZGVjYmluKGRhdGUoJ2QnKSksIDUsICcwJywgU1RSX1BBRF9MRUZUKTsNCgkJ JGxhc3Rtb2RfZGF0ZU0gID0gc3RyX3BhZChkZWNiaW4oZGF0ZSgnbScpKSwgNCwgJzAnLCBT VFJfUEFEX0xFRlQpOw0KCQkkbGFzdG1vZF9kYXRlWSAgPSBzdHJfcGFkKGRlY2JpbihkYXRl KCdZJyktMTk4MCksIDcsICcwJywgU1RSX1BBRF9MRUZUKTsNCgkJDQoJCSMgZWNobyAiTW9k VGltZTogJGxhc3Rtb2RfdGltZVMtJGxhc3Rtb2RfdGltZU0tJGxhc3Rtb2RfdGltZUggKCIu ZGF0ZSgicyBIIEgiKS4iKVxuIjsNCgkJIyBlY2hvICJNb2REYXRlOiAkbGFzdG1vZF9kYXRl RC0kbGFzdG1vZF9kYXRlTS0kbGFzdG1vZF9kYXRlWSAoIi5kYXRlKCJkIG0gWSIpLiIpXG4i Ow0KCQkkZGV0YWlsc1snbW9kdGltZSddID0gYmluZGVjKCIkbGFzdG1vZF90aW1lSCRsYXN0 bW9kX3RpbWVNJGxhc3Rtb2RfdGltZVMiKTsNCgkJJGRldGFpbHNbJ21vZGRhdGUnXSA9IGJp bmRlYygiJGxhc3Rtb2RfZGF0ZVkkbGFzdG1vZF9kYXRlTSRsYXN0bW9kX2RhdGVEIik7DQoJ CQ0KCQkkZGV0YWlsc1snb2Zmc2V0J10gPSBmdGVsbCgkZmgpOw0KCQlmd3JpdGUoJGZoLCAk dGhpcy0+emlwU2lnbmF0dXJlKTsNCgkJZndyaXRlKCRmaCwgcGFjaygncycsICRkZXRhaWxz Wyd2bmVlZGVkJ10pKTsgLy8gdmVyc2lvbl9uZWVkZWQNCgkJZndyaXRlKCRmaCwgcGFjaygn cycsICRkZXRhaWxzWydiaXRmbGFnJ10pKTsgLy8gZ2VuZXJhbF9iaXRfZmxhZw0KCQlmd3Jp dGUoJGZoLCBwYWNrKCdzJywgJGRldGFpbHNbJ2NtZXRob2QnXSkpOyAvLyBjb21wcmVzc2lv bl9tZXRob2QNCgkJZndyaXRlKCRmaCwgcGFjaygncycsICRkZXRhaWxzWydtb2R0aW1lJ10p KTsgLy8gbGFzdG1vZF90aW1lDQoJCWZ3cml0ZSgkZmgsIHBhY2soJ3MnLCAkZGV0YWlsc1sn bW9kZGF0ZSddKSk7IC8vIGxhc3Rtb2RfZGF0ZQ0KCQlmd3JpdGUoJGZoLCBwYWNrKCdWJywg JGRldGFpbHNbJ2NyY18zMiddKSk7ICAvLyBjcmMtMzINCgkJZndyaXRlKCRmaCwgcGFjaygn SScsICRkZXRhaWxzWydjb21zaXplJ10pKTsgLy8gY29tcHJlc3NlZF9zaXplDQoJCWZ3cml0 ZSgkZmgsIHBhY2soJ0knLCAkZGV0YWlsc1sndW5jc2l6ZSddKSk7IC8vIHVuY29tcHJlc3Nl ZF9zaXplDQoJCWZ3cml0ZSgkZmgsIHBhY2soJ3MnLCBzdHJsZW4oJGNmaWxlbmFtZSkpKTsg ICAvLyBmaWxlX25hbWVfbGVuZ3RoDQoJCWZ3cml0ZSgkZmgsIHBhY2soJ3MnLCAwKSk7ICAv LyBleHRyYV9maWVsZF9sZW5ndGgNCgkJZndyaXRlKCRmaCwgJGNmaWxlbmFtZSk7ICAgIC8v IGZpbGVfbmFtZQ0KCQkvLyBpZ25vcmluZyBleHRyYV9maWVsZA0KCQlmd3JpdGUoJGZoLCAk emRhdGEpOw0KCQkNCgkJLy8gQXBwZW5kIGl0IHRvIGNlbnRyYWwgZGlyDQoJCSRkZXRhaWxz WydleHRlcm5hbF9hdHRyaWJ1dGVzJ10gID0gKHN1YnN0cigkY2ZpbGVuYW1lLCAtMSk9PScv JyYmISR6ZGF0YSk/MTY6MzI7IC8vIERpcmVjdG9yeSBvciBmaWxlIG5hbWUNCgkJJGRldGFp bHNbJ2NvbW1lbnRzJ10gICAgICAgICAgICAgPSAkZmlsZUNvbW1lbnRzOw0KCQkkdGhpcy0+ YXBwZW5kQ2VudHJhbERpcigkY2ZpbGVuYW1lLCAkZGV0YWlscyk7DQoJCSR0aGlzLT5maWxl c19jb3VudCsrOw0KCX0NCglGdW5jdGlvbiBzZXRFeHRyYSgkZmlsZW5hbWUsICRwcm9wZXJ0 eSwgJHZhbHVlKXsNCgkJJHRoaXMtPmNlbnRyYWxkaXJzWyRmaWxlbmFtZV1bJHByb3BlcnR5 XSA9ICR2YWx1ZTsNCgl9DQoJRnVuY3Rpb24gc2F2ZSgkemlwQ29tbWVudHM9Jycpew0KCQlp ZighKCRmaCA9ICYkdGhpcy0+ZmgpKQ0KCQkJJGZoID0gZm9wZW4oJHRoaXMtPmZpbGVuYW1l LCAkdGhpcy0+b3ZlcndyaXRlPyd3JzonYSsnKTsNCgkJDQoJCSRjZHJlYyA9ICIiOw0KCQlm b3JlYWNoKCR0aGlzLT5jZW50cmFsZGlycyBhcyAkZmlsZW5hbWU9PiRjZCl7DQoJCQkkY2Ry ZWMgLj0gJHRoaXMtPmRpclNpZ25hdHVyZTsNCgkJCSRjZHJlYyAuPSAiXHgwXHgwIjsgICAg ICAgICAgICAgICAgICAvLyB2ZXJzaW9uIG1hZGUgYnkNCgkJCSRjZHJlYyAuPSBwYWNrKCd2 JywgJGNkWyd2bmVlZGVkJ10pOyAvLyB2ZXJzaW9uIG5lZWRlZCB0byBleHRyYWN0DQoJCQkk Y2RyZWMgLj0gIlx4MFx4MCI7ICAgICAgICAgICAgICAgICAgLy8gZ2VuZXJhbCBiaXQgZmxh Zw0KCQkJJGNkcmVjIC49IHBhY2soJ3YnLCAkY2RbJ2NtZXRob2QnXSk7IC8vIGNvbXByZXNz aW9uIG1ldGhvZA0KCQkJJGNkcmVjIC49IHBhY2soJ3YnLCAkY2RbJ21vZHRpbWUnXSk7IC8v IGxhc3Rtb2QgdGltZQ0KCQkJJGNkcmVjIC49IHBhY2soJ3YnLCAkY2RbJ21vZGRhdGUnXSk7 IC8vIGxhc3Rtb2QgZGF0ZQ0KCQkJJGNkcmVjIC49IHBhY2soJ1YnLCAkY2RbJ2NyY18zMidd KTsgIC8vIGNyYzMyDQoJCQkkY2RyZWMgLj0gcGFjaygnVicsICRjZFsnY29tc2l6ZSddKTsg Ly8gY29tcHJlc3NlZCBmaWxlc2l6ZQ0KCQkJJGNkcmVjIC49IHBhY2soJ1YnLCAkY2RbJ3Vu Y3NpemUnXSk7IC8vIHVuY29tcHJlc3NlZCBmaWxlc2l6ZQ0KCQkJJGNkcmVjIC49IHBhY2so J3YnLCBzdHJsZW4oJGZpbGVuYW1lKSk7IC8vIGZpbGUgY29tbWVudCBsZW5ndGgNCgkJCSRj ZHJlYyAuPSBwYWNrKCd2JywgMCk7ICAgICAgICAgICAgICAgIC8vIGV4dHJhIGZpZWxkIGxl bmd0aA0KCQkJJGNkcmVjIC49IHBhY2soJ3YnLCBzdHJsZW4oJGNkWydjb21tZW50cyddKSk7 IC8vIGZpbGUgY29tbWVudCBsZW5ndGgNCgkJCSRjZHJlYyAuPSBwYWNrKCd2JywgMCk7IC8v IGRpc2sgbnVtYmVyIHN0YXJ0DQoJCQkkY2RyZWMgLj0gcGFjaygndicsIDApOyAvLyBpbnRl cm5hbCBmaWxlIGF0dHJpYnV0ZXMNCgkJCSRjZHJlYyAuPSBwYWNrKCdWJywgJGNkWydleHRl cm5hbF9hdHRyaWJ1dGVzJ10pOyAvLyBpbnRlcm5hbCBmaWxlIGF0dHJpYnV0ZXMNCgkJCSRj ZHJlYyAuPSBwYWNrKCdWJywgJGNkWydvZmZzZXQnXSk7IC8vIHJlbGF0aXZlIG9mZnNldCBv ZiBsb2NhbCBoZWFkZXINCgkJCSRjZHJlYyAuPSAkZmlsZW5hbWU7DQoJCQkkY2RyZWMgLj0g JGNkWydjb21tZW50cyddOw0KCQl9DQoJCSRiZWZvcmVfY2QgPSBmdGVsbCgkZmgpOw0KCQlm d3JpdGUoJGZoLCAkY2RyZWMpOw0KDQoJCS8vIGVuZCBvZiBjZW50cmFsIGRpcg0KCQlmd3Jp dGUoJGZoLCAkdGhpcy0+ZGlyU2lnbmF0dXJlRSk7DQoJCWZ3cml0ZSgkZmgsIHBhY2soJ3Yn LCAwKSk7IC8vIG51bWJlciBvZiB0aGlzIGRpc2sNCgkJZndyaXRlKCRmaCwgcGFjaygndics IDApKTsgLy8gbnVtYmVyIG9mIHRoZSBkaXNrIHdpdGggdGhlIHN0YXJ0IG9mIHRoZSBjZW50 cmFsIGRpcmVjdG9yeQ0KCQlmd3JpdGUoJGZoLCBwYWNrKCd2JywgJHRoaXMtPmZpbGVzX2Nv dW50KSk7IC8vIHRvdGFsICMgb2YgZW50cmllcyAib24gdGhpcyBkaXNrIiANCgkJZndyaXRl KCRmaCwgcGFjaygndicsICR0aGlzLT5maWxlc19jb3VudCkpOyAvLyB0b3RhbCAjIG9mIGVu dHJpZXMgb3ZlcmFsbCANCgkJZndyaXRlKCRmaCwgcGFjaygnVicsIHN0cmxlbigkY2RyZWMp KSk7ICAgICAvLyBzaXplIG9mIGNlbnRyYWwgZGlyIA0KCQlmd3JpdGUoJGZoLCBwYWNrKCdW JywgJGJlZm9yZV9jZCkpOyAgICAgICAgIC8vIG9mZnNldCB0byBzdGFydCBvZiBjZW50cmFs IGRpcg0KCQlmd3JpdGUoJGZoLCBwYWNrKCd2Jywgc3RybGVuKCR6aXBDb21tZW50cykpKTsg Ly8gLnppcCBmaWxlIGNvbW1lbnQgbGVuZ3RoDQoJCWZ3cml0ZSgkZmgsICR6aXBDb21tZW50 cyk7DQoJCQ0KCQlmY2xvc2UoJGZoKTsNCgl9DQoJDQoJLy8gUHJpdmF0ZQ0KCUZ1bmN0aW9u IGFwcGVuZENlbnRyYWxEaXIoJGZpbGVuYW1lLCRwcm9wZXJ0aWVzKXsNCgkJJHRoaXMtPmNl bnRyYWxkaXJzWyRmaWxlbmFtZV0gPSAkcHJvcGVydGllczsNCgl9DQp9DQoiO3M6NDoidHlw ZSI7czoxOiIyIjtzOjU6Im9yZGVyIjtzOjE6IjUiO3M6NToiZmxhZ3MiO3M6MToiMCI7czo0 OiJoZWxwIjtzOjU3NDI6IjxkaXYgaWQ9InNtZF9oZWxwIj4KCgk8aDE+c21kX2NydW5jaGVy czwvaDE+CgoJPHAgY2xhc3M9ImltcG9ydGFudCI+UmVxdWlyZXMgUEhQNSs8L3A+CgoJPHA+ TGlicmFyeSBvZiBjb21wcmVzc2lvbiAvIGRlY29tcHJlc3Npb24gYWxnb3JpdGhtcyBtb3N0 bHkgd3JpdHRlbiBieSBvdGhlciBwZW9wbGUuPC9wPgoKCTxwPkFmdGVyIGluc3RhbGxhdGlv biwgaXQgZW5hYmxlcyBhbnlvbmUgdG8gZW1wbG95IGJpLWRpcmVjdGlvbmFsIFRhciwgWmlw LCBHemlwIGFuZCBCemlwMiBtZWNoYW5pc21zLCBzb21lIG9mIHdoaWNoIHdvdWxkIG9yZGlu YXJpbHkgcmVseSBvbiBwYXJ0aWN1bGFyIGNvbXBvbmVudHMgYmVpbmcgY29tcGlsZWQgaW50 byA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPi48L3A+CgoJPHA+V2hpbGUgY2VydGFp biBjb3JlIGxpYnJhcmllcyBhcmUgc3RpbGwgcmVxdWlyZWQgdG8gYmUgY29tcGlsZWQgaW50 byA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPiAoZS5nLiB6bGliKSwgdGhpcyBwbHVn aW4gbWl0aWdhdGVzIHRoZSBuZWVkIGZvciBhbnkgZnVydGhlciBleHRlbnNpb25zIGxpa2Ug PHNwYW4gY2xhc3M9ImNhcHMiPlBFQ0w8L3NwYW4+IC8gPHNwYW4gY2xhc3M9ImNhcHMiPlBF QVI8L3NwYW4+IHRvIG9mZmVyIHppcCBjYXBhYmlsaXRpZXMuIEluIGxpbWl0ZWQgc2VydmVy IHNldHVwcyBvciBwbGFjZXMgd2hlcmUgdXNlcnMgZG9uJiM4MjE3O3QgaGF2ZSBhY2Nlc3Mg dG8gY29uZmlndXJhdGlvbiBmaWxlcywgdGhpcyBpcyByYXRoZXIgaGFuZHkuPC9wPgoKCTxo Mj5Vc2FnZTwvaDI+CgoJPGRsPgoJCTxkdD5GdW5jdGlvbiA8Y29kZT5zbWRfY3J1bmNoX2Nh cGFiaWxpdGllcyggdHlwZSApPC9jb2RlPjwvZHQ+CgkJPGRkPkZpbmQgb3V0IHdoaWNoIGNv bXByZXNzaW9uIC8gZGVjb21wcmVzc2lvbiBmYWNpbGl0aWVzIGFyZSBhdmFpbGFibGUgb24g dGhlIGN1cnJlbnQgc2VydmVyIHNldHVwLiBUaGUgPGNvZGU+dHlwZTwvY29kZT4gYXJndW1l bnQgY2FuIGJlIGVpdGhlcjoKCTxkbD4KCQk8ZGQ+PGNvZGU+Y29tcHJlc3M8L2NvZGU+OiB0 byBkZXRlcm1pbmUgd2hpY2ggY29tcHJlc3Npb24gZmFjaWxpdGllcyBhcmUgYXZhaWxhYmxl PC9kZD4KCQk8ZGQ+PGNvZGU+ZGVjb21wcmVzczwvY29kZT46IHRvIGRldGVybWluZSB3aGlj aCBkZWNvbXByZXNzaW9uIGZhY2lsaXRpZXMgYXJlIGF2YWlsYWJsZTwvZGQ+Cgk8L2RsPjwv ZGQ+CgkJPGRkPkRlZmF1bHQ6IDxjb2RlPmNvbXByZXNzPC9jb2RlPjwvZGQ+CgkJPGRkPlJl dHVybnM6IGFuIGFycmF5IGNvbnRhaW5pbmcgemVybyBvciBtb3JlIG9mOgoJPGRsPgoJCTxk ZD48Y29kZT50YXI8L2NvZGU+PC9kZD4KCQk8ZGQ+PGNvZGU+emlwPC9jb2RlPjwvZGQ+CgkJ PGRkPjxjb2RlPmd6aXA8L2NvZGU+PC9kZD4KCQk8ZGQ+PGNvZGU+YnppcDI8L2NvZGU+PC9k ZD4KCTwvZGw+PC9kZD4KCQk8ZHQ+RnVuY3Rpb24gPGNvZGU+c21kX21rZGlyX3JlY3Vyc2l2 ZSggcGF0aCwgbW9kZSApPC9jb2RlPjwvZHQ+CgkJPGRkPkNyZWF0ZSBhIGRpcmVjdG9yeSB0 cmVlIHJlcHJlc2VudGluZyA8Y29kZT5wYXRoPC9jb2RlPiwgYW5kIHNldCB0aGUgb3B0aW9u YWwgPGNvZGU+bW9kZTwvY29kZT4gcGVybWlzc2lvbnMgKERlZmF1bHQ6IDA3NTUpPC9kZD4K CQk8ZHQ+Q2xhc3Mgc21kX2NydW5jaF9hcmNoaXZlPC9kdD4KCQk8ZGQ+QmFzZSBjbGFzcyBm b3IgYWxsIG1haW4gYXJjaGl2aW5nIC8gdW5hcmNoaXZpbmcgZmFjaWxpdGllcywgPHN0cm9u Zz5leGNsdWRpbmcgdW56aXA8L3N0cm9uZz4uPC9kZD4KCQk8ZHQ+Q2xhc3Mgc21kX2NydW5j aF90YXJfZmlsZTwvZHQ+CgkJPGRkPlNwZWNpZmljIGNsYXNzIGZvciBoYW5kbGluZyAoZGUp Y29tcHJlc3Npb24gb2YgLnRhciBmaWxlczwvZGQ+CgkJPGR0PkNsYXNzIHNtZF9jcnVuY2hf Z3ppcF9maWxlPC9kdD4KCQk8ZGQ+U3BlY2lmaWMgY2xhc3MgZm9yIGhhbmRsaW5nIChkZSlj b21wcmVzc2lvbiBvZi5neiBhbmQgLnRneiBmaWxlczwvZGQ+CgkJPGR0PkNsYXNzIHNtZF9j cnVuY2hfYnppcF9maWxlPC9kdD4KCQk8ZGQ+U3BlY2lmaWMgY2xhc3MgZm9yIGhhbmRsaW5n IChkZSljb21wcmVzc2lvbiBvZi5iejIgYW5kIC50YnoyIGZpbGVzPC9kZD4KCQk8ZHQ+Q2xh c3Mgc21kX2NydW5jaF96aXBfZmlsZTwvZHQ+CgkJPGRkPlNwZWNpZmljIGNsYXNzIGZvciBo YW5kbGluZyBjb21wcmVzc2lvbiBvZi56aXAgZmlsZXM8L2RkPgoJCTxkdD5DbGFzcyBzbWRf Y3J1bmNoX2RVbnppcDI8L2R0PgoJCTxkZD5TcGVjaWZpYyBjbGFzcyBmb3IgaGFuZGxpbmcg ZGVjb21wcmVzc2lvbiBvZi56aXAgZmlsZXM8L2RkPgoJCTxkdD5DbGFzcyBzbWRfY3J1bmNo X2RaaXA8L2R0PgoJCTxkZD5BbHRlcm5hdGl2ZSBtZXRob2RzIGZvciBjb21wcmVzc2luZyAu emlwIGZpbGVzPC9kZD4KCTwvZGw+CgoJPGgyPkV4YW1wbGUgMTogY29tcHJlc3MgYWxsIGZp bGVzIGluIGEgZm9sZGVyIGFzIHppcDwvaDI+CgoJPHA+QnV0IGV4Y2x1ZGUgYW55IDxjb2Rl Pi5zdm48L2NvZGU+IGRpcmVjdG9yaWVzIGluIHRoZSBwcm9jZXNzLiBUaGVuIGltbWVkaWF0 ZWx5IHNlcnZlIHRoZSBmaWxlIGFzIGEgZG93bmxvYWRhYmxlIGl0ZW0gPGNvZGU+ZmlsZS56 aXA8L2NvZGU+LjwvcD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2si PiRhcmMgPSBuZXcgc21kX2NydW5jaF96aXBfZmlsZSgmIzM5O2ZpbGUuemlwJiMzOTspOwok YXJjLSZndDtzZXRfb3B0aW9ucyhhcnJheSgKICAgICAmIzM5O2Jhc2VkaXImIzM5OyAgID0m Z3Q7ICYjMzk7L3BhdGgvdG8vZmlsZXMmIzM5OywKICAgICAmIzM5O292ZXJ3cml0ZSYjMzk7 ID0mZ3Q7IDEsCiAgICAgJiMzOTtpbm1lbW9yeSYjMzk7ICA9Jmd0OyAxCiAgICkpOwokYXJj LSZndDthZGRfZmlsZXMoJiMzOTsvcGF0aC90by9maWxlcy8qLiomIzM5Oyk7CiRhcmMtJmd0 O2V4Y2x1ZGVfZmlsZXMoJiMzOTsvcGF0aC90by9maWxlcy8qLnN2biomIzM5Oyk7CiRhcmMt Jmd0O2NyZWF0ZV9hcmNoaXZlKCk7CiRhcmMtJmd0O2Rvd25sb2FkX2ZpbGUoKTsKPC9jb2Rl PjwvcHJlPgoKCTxoMj5FeGFtcGxlIDI6IGRlY29tcHJlc3MgZ3ppcCBhcmNoaXZlPC9oMj4K Cgk8cD5UaGlzIGlzIHRoZSBzYW1lIGdlbmVyaWMgcHJvY2VkdXJlIGZvciBhbGwgc3VwcG9y dGVkIGNvbXByZXNzZWQgdHlwZXMuPC9wPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNs YXNzPSJibG9jayI+JGZ1bGxwYXRoID0gJiMzOTsvcGF0aC90by9maWxlLmd6JiMzOTs7CiRh cmMgPSBuZXcgc21kX2NydW5jaF9nemlwX2ZpbGUoYmFzZW5hbWUoJGZ1bGxwYXRoKSk7CiRh cmMtJmd0O3NldF9vcHRpb25zKGFycmF5KAogICAgICYjMzk7YmFzZWRpciYjMzk7ICAgPSZn dDsgJiMzOTsvcGF0aC90by9leHBvcnQvZm9sZGVyJiMzOTssCiAgICAgJiMzOTtvdmVyd3Jp dGUmIzM5OyA9Jmd0OyAxCiAgICkpOwokYXJjLSZndDtleHRyYWN0X2ZpbGVzKCk7CjwvY29k ZT48L3ByZT4KCgk8aDI+RXhhbXBsZSAzOiBkZWNvbXByZXNzIHppcCBhcmNoaXZlPC9oMj4K CjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPiRmdWxscGF0aCA9ICYj Mzk7L3BhdGgvdG8vZmlsZS56aXAmIzM5OzsKJHppcCA9IG5ldyBzbWRfY3J1bmNoX2RVbnpp cDIoJGZ1bGxwYXRoKTsKJGZpbGVsaXN0ID0gJHppcC0mZ3Q7Z2V0TGlzdCgpOwpmb3JlYWNo KCRmaWxlbGlzdCBhcyAkZm4gPSZndDsgJHppcHBlZEZpbGUpIHsKICAgLy8gRG8gZmlsZSBz aXplL3R5cGUgdmFsaWRhdGlvbiBoZXJlPwogICBlY2hvICZxdW90OyRmbiAoJHppcHBlZEZp bGVbJiMzOTt1bmNvbXByZXNzZWRfc2l6ZSYjMzk7XSBieXRlcykmbHQ7YnImZ3Q7JnF1b3Q7 Owp9CiR6aXAtJmd0O3VuemlwQWxsKCYjMzk7L3BhdGgvdG8vZXhwb3J0L2ZvbGRlciYjMzk7 KTsKJHppcC0mZ3Q7Y2xvc2UoKTsKPC9jb2RlPjwvcHJlPgoKCTxoMj5BdXRob3IgLyBjcmVk aXRzPC9oMj4KCgk8cD48YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vY29udGFjdCI+ U3RlZiBEYXdzb248L2E+LjwvcD4KCgk8cD5MaWJyYXJpZXMgZnJvbSA8YSBocmVmPSJodHRw Oi8vcGhwY2xhc3Nlcy5vcmcvIj48c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPiBDbGFz c2VzPC9hPiBieSBEZXZpbiBEb3VjZXR0ZSBhbmQgQWxleGFuZHJlIFRlZGVzY2hpLiBNYW55 IHRoYW5rcyB0byB0aG9zZSBhdXRob3JzIGZvciBhd2Vzb21lIGNvZGluZyBza2lsbHouPC9w PgoKCTxoMj5DaGFuZ2Vsb2c8L2gyPgoKCTx1bD4KCQk8bGk+MjkgSmFuIDIwMTIgfCB2MC4x MCB8IEluaXRpYWwgcmVsZWFzZTwvbGk+CgkJPGxpPjI5IEphbiAyMDEyIHwgdjAuMTEgfCBB ZGRlZCA8Y29kZT5zbWRfbWtkaXJfcmVjdXJzaXZlKCk8L2NvZGU+PC9saT4KCTwvdWw+Cgo8 L2Rpdj4KPCEtLSAqKiogQkVHSU4gUExVR0lOIENTUyAqKiogLS0+CjxzdHlsZSB0eXBlPSJ0 ZXh0L2NzcyI+CiNzbWRfaGVscCB7IGxpbmUtaGVpZ2h0OjEuNSA7fQojc21kX2hlbHAgY29k ZSB7IGZvbnQtd2VpZ2h0OmJvbGQ7IGZvbnQ6IDEwNSUvMTMwJSAiQ291cmllciBOZXciLCBj b3VyaWVyLCBtb25vc3BhY2U7IGJhY2tncm91bmQtY29sb3I6ICNmMGU2OGM7IGNvbG9yOiMz MzM7IH0KI3NtZF9oZWxwIGNvZGUuYmxvY2sgeyBmb250LXdlaWdodDpub3JtYWw7IGJvcmRl cjoxcHggZG90dGVkICM5OTk7IGRpc3BsYXk6YmxvY2s7IG1hcmdpbjoxMHB4IDEwcHggMjBw eDsgcGFkZGluZzoxMHB4OyB9CiNzbWRfaGVscCBoMSB7IGZvbnQ6IDIycHggR2VvcmdpYSwg c2VyaWY7IG1hcmdpbjogMDsgdGV4dC1hbGlnbjogY2VudGVyOyB9CiNzbWRfaGVscCBoMiB7 IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazsgcGFkZGluZzoxMHB4IDAgMDsgZm9u dDogMThweCBHZW9yZ2lhLCBzZXJpZjsgfQojc21kX2hlbHAgaDMgeyBmb250OiBib2xkIDEz cHggR2VvcmdpYSwgc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxcHg7IG1hcmdpbjogMjBweCAw IDA7IHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7IH0KI3NtZF9oZWxwIGg0IHsgZm9udDog Ym9sZCAxMnB4IEdlb3JnaWEsIHNlcmlmOyBsZXR0ZXItc3BhY2luZzogMXB4OyBtYXJnaW46 IDEwcHggMCAwOyB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyB9CiNzbWRfaGVscCAuYXRu bSB7IGZvbnQtd2VpZ2h0OmJvbGQ7IH0KI3NtZF9oZWxwIC5tYW5kIHsgYmFja2dyb3VuZDoj ZWVlOyBib3JkZXI6MXB4IGRvdHRlZCAjOTk5OyB9CiNzbWRfaGVscCB0YWJsZSB7IHdpZHRo OjkwJTsgdGV4dC1hbGlnbjpjZW50ZXI7IHBhZGRpbmctYm90dG9tOjFlbTsgYm9yZGVyLWNv bGxhcHNlOmNvbGxhcHNlOyB9CiNzbWRfaGVscCB0ZCwgI3NtZF9oZWxwIHRoIHsgYm9yZGVy OjFweCBzb2xpZCAjOTk5OyBwYWRkaW5nOi41ZW07IH0KI3NtZF9oZWxwIHVsIHsgbGlzdC1z dHlsZS10eXBlOnNxdWFyZTsgfQojc21kX2hlbHAgLmltcG9ydGFudCB7IGNvbG9yOnJlZDsg fQojc21kX2hlbHAgbGkgeyBtYXJnaW46NXB4IDIwcHggNXB4IDMwcHg7IH0KI3NtZF9oZWxw IC5icmVhayB7IG1hcmdpbi10b3A6NXB4OyB9CiNzbWRfaGVscCBkbCBkZCB7IG1hcmdpbjoy cHggMTVweDsgfQojc21kX2hlbHAgZGwgZGQ6YmVmb3JlIHsgY29udGVudDogIlwyMDIyXDAw YTAiOyB9CiNzbWRfaGVscCBkbCBkZCBkbCB7IHBhZGRpbmc6IDAgMTVweDsgfQo8L3N0eWxl Pgo8IS0tICoqKiBFTkQgUExVR0lOIENTUyAqKiogLS0+CiI7czozOiJtZDUiO3M6MzI6IjNi NDI5ZjQwZTJjM2EwM2M3NmY2M2EwMmQwNmZjZTYxIjt9