IwojIEZyZWVUeXBlIDIgY29uZmlndXJhdGlvbiBmaWxlIHRvIGRldGVjdCBhIFdpbjMyIGhvc3QgcGxhdGZvcm0uCiMKCgojIENvcHlyaWdodCAxOTk2LTIwMDAgYnkKIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiMKIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAojIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQojIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CiMgZnVsbHkuCgoKLlBIT05ZOiBzZXR1cAoKCmlmZXEgKCQoUExBVEZPUk0pLGFuc2kpCgogICMgRGV0ZWN0aW5nIFdpbmRvd3MgTlQgaXMgZWFzeSwgYXMgdGhlIE9TIHZhcmlhYmxlIG11c3QgYmUgZGVmaW5lZCBhbmQKICAjIGNvbnRhaW5zIGBXaW5kb3dzX05UJy4gIFVudGVzdGVkIHdpdGggV2luZG93cyAySywgYnV0IEkgZ3Vlc3MgaXQgc2hvdWxkCiAgIyB3b3JrLi4uCiAgIwogIGlmZXEgKCQoT1MpLFdpbmRvd3NfTlQpCgogICAgaXNfd2luZG93cyA6PSAxCgogICAgIyBXZSB0ZXN0IGZvciB0aGUgQ09NU1BFQyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlbiBydW4gdGhlIGB2ZXInCiAgICAjIGNvbW1hbmQtbGluZSBwcm9ncmFtIHRvIHNlZSBpZiBpdHMgb3V0cHV0IGNvbnRhaW5zIHRoZSB3b3JkIGBXaW5kb3dzJy4KICAgICMKICAgICMgSWYgdGhpcyBpcyB0cnVlLCB3ZSBhcmUgcnVubmluZyBhIHdpbjMyIHBsYXRmb3JtIChvciBhbiBlbXVsYXRpb24pLgogICAgIwogIGVsc2UKICAgIGlmZGVmIENPTVNQRUMKICAgICAgaXNfd2luZG93cyA6PSAkKGZpbmRzdHJpbmcgV2luZG93cywkKHN0cmlwICQoc2hlbGwgdmVyKSkpCiAgICBlbmRpZgogIGVuZGlmICAjIHRlc3QgTlQKCiAgaWZkZWYgaXNfd2luZG93cwoKICAgIFBMQVRGT1JNIDo9IHdpbjMyCgogIGVuZGlmCmVuZGlmICMgdGVzdCBQTEFURk9STSBhbnNpCgppZmVxICgkKFBMQVRGT1JNKSx3aW4zMikKCiAgREVMRVRFICAgOj0gZGVsCiAgQ09QWSAgICAgOj0gY29weQoKICAjIGdjYyBNYWtlZmlsZSBieSBkZWZhdWx0CiAgQ09ORklHX0ZJTEUgOj0gdzMyLWdjYy5tawogIFNFUCAgICAgICAgIDo9IC8KICBpZmVxICgkKGZpcnN0d29yZCAkKENDKSksY2MpCiAgICBDQyAgICAgICAgOj0gZ2NjCiAgZW5kaWYKCiAgaWZuZXEgKCQoZmluZHN0cmluZyBsaXN0LCQoTUFLRUNNREdPQUxTKSksKSAgIyB0ZXN0IGZvciB0aGUgImxpc3QiIHRhcmdldAogICAgZHVtcF90YXJnZXRfbGlzdDoKCSAgICBAZWNobyD/CgkgICAgQGVjaG8gJChQUk9KRUNUX1RJVExFKSBidWlsZCBzeXN0ZW0gLS0gc3VwcG9ydGVkIGNvbXBpbGVycwoJICAgIEBlY2hvIP8KCSAgICBAZWNobyBTZXZlcmFsIGNvbW1hbmQtbGluZSBjb21waWxlcnMgYXJlIHN1cHBvcnRlZCBvbiBXaW4zMjoKCSAgICBAZWNobyD/CgkgICAgQGVjaG8g//9tYWtlIHNldHVw////////////////////////////Z2NjICh3aXRoIE1pbmd3KQoJICAgIEBlY2hvIP//bWFrZSBzZXR1cCB2aXN1YWxj/////////////////01pY3Jvc29mdCBWaXN1YWwgQysrCgkgICAgQGVjaG8g//9tYWtlIHNldHVwIGJjYzMy////////////////////Qm9ybGFuZCBDL0MrKwoJICAgIEBlY2hvIP//bWFrZSBzZXR1cCBsY2P//////////////////////1dpbjMyLUxDQwoJICAgIEBlY2hvIP//bWFrZSBzZXR1cCBpbnRlbGP//////////////////0ludGVsIEMvQysrCgkgICAgQGVjaG8g/woKICAgIHNldHVwOiBkdW1wX3RhcmdldF9saXN0CiAgICAuUEhPTlk6IGR1bXBfdGFyZ2V0X2xpc3QgbGlzdAogIGVsc2UKICAgIHNldHVwOiBkb3Nfc2V0dXAKICBlbmRpZgoKICAjIGFkZGl0aW9uYWxseSwgd2UgcHJvdmlkZSBob29rcyBmb3IgdmFyaW91cyBvdGhlciBjb21waWxlcnMKICAjCiAgaWZuZXEgKCQoZmluZHN0cmluZyB2aXN1YWxjLCQoTUFLRUNNREdPQUxTKSksKSAgICAgIyBWaXN1YWwgQy9DKysKICAgIENPTkZJR19GSUxFIDo9IHczMi12Y2MubWsKICAgIFNFUCAgICAgICAgIDo9ICQoQkFDS1NMQVNIKQogICAgQ0MgICAgICAgICAgOj0gY2wKICAgIHZpc3VhbGM6IHNldHVwCiAgICAuUEhPTlk6IHZpc3VhbGMKICBlbmRpZgoKICBpZm5lcSAoJChmaW5kc3RyaW5nIGludGVsYywkKE1BS0VDTURHT0FMUykpLCkgICAgICAjIEludGVsIEMvQysrCiAgICBDT05GSUdfRklMRSA6PSB3MzItaW50bC5tawogICAgU0VQICAgICAgICAgOj0gJChCQUNLU0xBU0gpCiAgICBDQyAgICAgICAgICA6PSBjbAogICAgdmlzdWFsYzogc2V0dXAKICAgIC5QSE9OWTogaW50ZWxjCiAgZW5kaWYKCiAgaWZuZXEgKCQoZmluZHN0cmluZyB3YXRjb20sJChNQUtFQ01ER09BTFMpKSwpICAgICAgIyBXYXRjb20gQy9DKysKICAgIENPTkZJR19GSUxFIDo9IHczMi13YXQubWsKICAgIFNFUCAgICAgICAgIDo9ICQoQkFDS1NMQVNIKQogICAgQ0MgICAgICAgICAgOj0gd2NjMzg2CiAgICB3YXRjb206IHNldHVwCiAgICAuUEhPTlk6IHdhdGNvbQogIGVuZGlmCgogIGlmbmVxICgkKGZpbmRzdHJpbmcgdmlzdWFsYWdlLCQoTUFLRUNNREdPQUxTKSksKSAgICMgVmlzdWFsIEFnZSBDKysKICAgIENPTkZJR19GSUxFIDo9IHczMi1pY2MubWsKICAgIFNFUCAgICAgICAgIDo9ICQoQkFDS1NMQVNIKQogICAgQ0MgICAgICAgICAgOj0gaWNjCiAgICB2aXN1YWxhZ2U6IHNldHVwCiAgICAuUEhPTlk6IHZpc3VhbGFnZQogIGVuZGlmCgogIGlmbmVxICgkKGZpbmRzdHJpbmcgbGNjLCQoTUFLRUNNREdPQUxTKSksKSAgICAgICAgICMgTENDLVdpbjMyCiAgICBDT05GSUdfRklMRSA6PSB3MzItbGNjLm1rCiAgICBTRVAgICAgICAgICA6PSAkKEJBQ0tTTEFTSCkKICAgIENDICAgICAgICAgIDo9IGxjYwogICAgbGNjOiBzZXR1cAogICAgLlBIT05ZOiBsY2MKICBlbmRpZgoKICBpZm5lcSAoJChmaW5kc3RyaW5nIG1pbmd3MzIsJChNQUtFQ01ER09BTFMpKSwpICAgICAjIG1pbmd3MzIKICAgIENPTkZJR19GSUxFIDo9IHczMi1taW5ndzMyLm1rCiAgICBTRVAgICAgICAgICA6PSAkKEJBQ0tTTEFTSCkKICAgIENDICAgICAgICAgIDo9IGdjYwogICAgbWluZ3czMjogc2V0dXAKICAgIC5QSE9OWTogbWluZ3czMgogIGVuZGlmCgogIGlmbmVxICgkKGZpbmRzdHJpbmcgYmNjMzIsJChNQUtFQ01ER09BTFMpKSwpICAgICAgICMgQm9ybGFuZCBDKysKICAgIENPTkZJR19GSUxFIDo9IHczMi1iY2MubWsKICAgIFNFUCAgICAgICAgIDo9ICQoQkFDS1NMQVNIKQogICAgQ0MgICAgICAgICAgOj0gYmNjMzIKICAgIGJjYzMyOiBzZXR1cAogICAgLlBIT05ZOiBiY2MzMgogIGVuZGlmCgogIGlmbmVxICgkKGZpbmRzdHJpbmcgZGV2ZWwtYmNjLCQoTUFLRUNNREdPQUxTKSksKSAgICMgZGV2ZWxvcG1lbnQgdGFyZ2V0CiAgICBDT05GSUdfRklMRSA6PSB3MzItYmNjZC5tawogICAgQ0MgICAgICAgICAgOj0gYmNjMzIKICAgIFNFUCAgICAgICAgIDo9IC8KICAgIGRldmVsLWJjYzogc2V0dXAKICAgIC5QSE9OWTogZGV2ZWwtYmNjCiAgZW5kaWYKCiAgaWZuZXEgKCQoZmluZHN0cmluZyBkZXZlbC1nY2MsJChNQUtFQ01ER09BTFMpKSwpICAgIyBkZXZlbG9wbWVudCB0YXJnZXQKICAgIENPTkZJR19GSUxFIDo9IHczMi1kZXYubWsKICAgIENDICAgICAgICAgIDo9IGdjYwogICAgU0VQICAgICAgICAgOj0gLwogICAgZGV2ZWwtZ2NjOiBzZXR1cAogICAgLlBIT05ZOiBkZXZlbC1nY2MKICBlbmRpZgoKZW5kaWYgICAjIHRlc3QgUExBVEZPUk0gd2luMzIKCiMgRU9GCg==