Name: series-workflow72gdj Phase: Succeeded StartedAt: 2026-09-09 18:51:05 +0000 UTC FinishedAt: 2026-09-09 22:35:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow72gdj[0] Phase: Succeeded StartedAt: 2026-09-09 18:51:05 +0000 UTC FinishedAt: 2026-09-09 18:56:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow72gdj[0].run-triage Phase: Succeeded StartedAt: 2026-09-09 18:51:05 +0000 UTC FinishedAt: 2026-09-09 18:56:18 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "af0b84a9215d951d16f26b7ee34353b970cf5d4e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "af0b84a9215d951d16f26b7ee34353b970cf5d4e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "232355cb-a149-49dc-9b33-695e871b1f2d" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "__htab_map_lookup_and_delete_batch", "htab_map_lookup_batch", "htab_map_lookup_and_delete_batch", "htab_lru_map_lookup_batch", "htab_lru_map_lookup_and_delete_batch", "htab_percpu_map_lookup_batch", "htab_percpu_map_lookup_and_delete_batch", "htab_lru_percpu_map_lookup_batch", "htab_lru_percpu_map_lookup_and_delete_batch" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE4OjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCYjMzQ7LAogICAgJiMzNDtodGFiX21hcF9sb29rdXBfYmF0Y2gmIzM0OywKICAgICYjMzQ7aHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gmIzM0OywKICAgICYjMzQ7aHRhYl9scnVfbWFwX2xvb2t1cF9iYXRjaCYjMzQ7LAogICAgJiMzNDtodGFiX2xydV9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gmIzM0OywKICAgICYjMzQ7aHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9iYXRjaCYjMzQ7LAogICAgJiMzNDtodGFiX3BlcmNwdV9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gmIzM0OywKICAgICYjMzQ7aHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfYmF0Y2gmIzM0OywKICAgICYjMzQ7aHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgcGVyaW9kaWMgdm9sdW50YXJ5IHJlc2NoZWR1bGluZyAoYGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKWApIGFuZCBSQ1UgdW5sb2NraW5nIGFmdGVyIGl0ZXJhdGluZyBvdmVyIGEgYmF0Y2ggb2YgZW1wdHkgYnVja2V0cyAoYEhUQUJfQkFUQ0hfRU1QVFlfUkVTQ0hFRGApIGluIEJQRiBoYXNoIHRhYmxlIGJhdGNoIG9wZXJhdGlvbnMgKGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCkgdG8gcHJldmVudCBzb2Z0IGxvY2t1cHMgYW5kIFJDVSBzdGFsbHMuXG5cblRoZSBuZXdseSBpbnRyb2R1Y2VkIGNvdW50ZXIgdmFyaWFibGUgYGVtcHR5X2NudGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byAwIGFuZCBjb3JyZWN0bHkgcmVzZXQuIFRoZSBwYXRjaCBtb2RpZmllcyBvbmx5IGxvb3AgY29udHJvbCBmbG93IGFuZCBzY2hlZHVsaW5nIGJlaGF2aW9yOyBpdCBkb2VzIG5vdCBjaGFuZ2UgYnVmZmVyIGFsbG9jYXRpb24sIGRhdGEgY29weWluZyBsZW5ndGhzLCBzdHJ1Y3QgZGVmaW5pdGlvbnMsIG9yIG1lbW9yeSBpbml0aWFsaXphdGlvbiBsb2dpYywgbm9yIGRvZXMgaXQgY3JlYXRlIGFueSByaXNrIG9mIHJlYWRpbmcgb3IgbGVha2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJhdGNoIGxvb2t1cCBhbmQgZGVsZXRlIGl0ZXJhdGlvbiBsb2dpYyBpbiBrZXJuZWwvYnBmL2hhc2h0YWIuYyAoX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCkgdG8gaW50cm9kdWNlIHBlcmlvZGljIHJlc2NoZWR1bGluZyAoY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcykgYW5kIFJDVSBjcml0aWNhbCBzZWN0aW9uIGV4aXRzIHdoZW4gZW5jb3VudGVyaW5nIGNvbnNlY3V0aXZlIGVtcHR5IGJ1Y2tldHMuIFRoaXMgYWx0ZXJzIFJDVSBzeW5jaHJvbml6YXRpb24sIGxvY2tpbmcsIGFuZCBpdGVyYXRpb24gY29udHJvbCBmbG93IGluIHJlYWNoYWJsZSBCUEYgbWFwIHN5c2NhbGwgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxODo1NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDM3MGU2NzRmZGM2NDZiOTZmYjY4M2I1YzY1NGNjOTI3ZDBkMjgxZTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDE4OjU0OjQ2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGFzaHRhYi5jIGIva2VybmVsL2JwZi9oYXNodGFiLmNcbmluZGV4IDZmMzMxYzgwMTMwZDcuLmE3MmRjNWI5ZjE4NGQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9oYXNodGFiLmNcbkBAIC0xNzcyLDYgJiM0MzsxNzcyLDEyIEBAIHN0YXRpYyBpbnQgaHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsXG4gXHRcdFx0XHRcdFx0IGZsYWdzKTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIE1heCBjb25zZWN1dGl2ZSBlbXB0eSBidWNrZXRzIHRvIHdhbGsgaW4gb25lIFJDVSAmIzQzO1xuJiM0MzsgKiBpbnN0cnVtZW50YXRpb24tZGlzYWJsZWQgc2VjdGlvbiBiZWZvcmUgcmVzY2hlZHVsaW5nLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBIVEFCX0JBVENIX0VNUFRZX1JFU0NIRUQgNjRcbiYjNDM7XG4gc3RhdGljIGludFxuIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcdFx0XHRcdCAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuQEAgLTE3OTMsNiAmIzQzOzE3OTksNyBAQCBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzID0gMDtcbiBcdGJvb2wgbG9ja2VkID0gZmFsc2U7XG4gXHRzdHJ1Y3QgaHRhYl9lbGVtICpsO1xuJiM0MztcdHUzMiBlbXB0eV9jbnQgPSAwO1xuIFx0c3RydWN0IGJ1Y2tldCAqYjtcbiBcdGludCByZXQgPSAwO1xuIFxuQEAgLTE5NzEsMTIgJiM0MzsxOTc4LDIxIEBAIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcdH1cbiBcbiBuZXh0X2JhdGNoOlxuLVx0LyogSWYgd2UgYXJlIG5vdCBjb3B5aW5nIGRhdGEsIHdlIGNhbiBnbyB0byBuZXh0IGJ1Y2tldCBhbmQgYXZvaWRcbi1cdCAqIHVubG9ja2luZyB0aGUgcmN1LlxuJiM0MztcdC8qXG4mIzQzO1x0ICogSWYgd2UgYXJlIG5vdCBjb3B5aW5nIGRhdGEsIHdlIGNhbiBnbyB0byBuZXh0IGJ1Y2tldCBhbmQgYXZvaWRcbiYjNDM7XHQgKiB1bmxvY2tpbmcgdGhlIHJjdS4gQm91bmQgdGhlIHdhbGsgdGhvdWdoOiBhZnRlclxuJiM0MztcdCAqIEhUQUJfQkFUQ0hfRU1QVFlfUkVTQ0hFRCBjb25zZWN1dGl2ZSBlbXB0eSBidWNrZXRzLCBmdWxseSBleGl0XG4mIzQzO1x0ICogdGhlIGNyaXRpY2FsIHNlY3Rpb24gKG5vIGxvY2tzIGFyZSBoZWxkIGhlcmUpIGFuZCByZXNjaGVkdWxlLlxuIFx0ICovXG4gXHRpZiAoIWJ1Y2tldF9jbnQgXHUwMDI2XHUwMDI2IChiYXRjaCAmIzQzOyAxIFx1MDAzYyBodGFiLVx1MDAzZW5fYnVja2V0cykpIHtcbiBcdFx0YmF0Y2gmIzQzOyYjNDM7O1xuLVx0XHRnb3RvIGFnYWluX25vY29weTtcbiYjNDM7XHRcdGlmICgmIzQzOyYjNDM7ZW1wdHlfY250IFx1MDAzYyBIVEFCX0JBVENIX0VNUFRZX1JFU0NIRUQpXG4mIzQzO1x0XHRcdGdvdG8gYWdhaW5fbm9jb3B5O1xuJiM0MztcdFx0ZW1wdHlfY250ID0gMDtcbiYjNDM7XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdFx0YnBmX2VuYWJsZV9pbnN0cnVtZW50YXRpb24oKTtcbiYjNDM7XHRcdGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKTtcbiYjNDM7XHRcdGdvdG8gYWdhaW47XG4gXHR9XG4gXG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbkBAIC0xOTkwLDExICYjNDM7MjAwNiwxMyBAQCBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXG4gXHR9XG4gXG4gXHR0b3RhbCAmIzQzOz0gYnVja2V0X2NudDtcbiYjNDM7XHRlbXB0eV9jbnQgPSAwO1xuIFx0YmF0Y2gmIzQzOyYjNDM7O1xuIFx0aWYgKGJhdGNoIFx1MDAzZT0gaHRhYi1cdTAwM2VuX2J1Y2tldHMpIHtcbiBcdFx0cmV0ID0gLUVOT0VOVDtcbiBcdFx0Z290byBhZnRlcl9sb29wO1xuIFx0fVxuJiM0MztcdGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKTtcbiBcdGdvdG8gYWdhaW47XG4gXG4gYWZ0ZXJfbG9vcDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxODo1NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gmIzM0OywKICAgICYjMzQ7aHRhYl9tYXBfbG9va3VwX2JhdGNoJiMzNDssCiAgICAmIzM0O2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoJiMzNDssCiAgICAmIzM0O2h0YWJfbHJ1X21hcF9sb29rdXBfYmF0Y2gmIzM0OywKICAgICYjMzQ7aHRhYl9scnVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoJiMzNDssCiAgICAmIzM0O2h0YWJfcGVyY3B1X21hcF9sb29rdXBfYmF0Y2gmIzM0OywKICAgICYjMzQ7aHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoJiMzNDssCiAgICAmIzM0O2h0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2JhdGNoJiMzNDssCiAgICAmIzM0O2h0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJhdGNoIGxvb2t1cCBhbmQgZGVsZXRlIGl0ZXJhdGlvbiBsb2dpYyBpbiBrZXJuZWwvYnBmL2hhc2h0YWIuYyAoX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCkgdG8gaW50cm9kdWNlIHBlcmlvZGljIHJlc2NoZWR1bGluZyAoY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcykgYW5kIFJDVSBjcml0aWNhbCBzZWN0aW9uIGV4aXRzIHdoZW4gZW5jb3VudGVyaW5nIGNvbnNlY3V0aXZlIGVtcHR5IGJ1Y2tldHMuIFRoaXMgYWx0ZXJzIFJDVSBzeW5jaHJvbml6YXRpb24sIGxvY2tpbmcsIGFuZCBpdGVyYXRpb24gY29udHJvbCBmbG93IGluIHJlYWNoYWJsZSBCUEYgbWFwIHN5c2NhbGwgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDM3MGU2NzRmZGM2NDZiOTZmYjY4M2I1YzY1NGNjOTI3ZDBkMjgxZTIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDE4OjU0OjQ2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuYwppbmRleCA2ZjMzMWM4MDEzMGQ3Li5hNzJkYzViOWYxODRkIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2hhc2h0YWIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2hhc2h0YWIuYwpAQCAtMTc3Miw2ICYjNDM7MTc3MiwxMiBAQCBzdGF0aWMgaW50IGh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLAogCQkJCQkJIGZsYWdzKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogTWF4IGNvbnNlY3V0aXZlIGVtcHR5IGJ1Y2tldHMgdG8gd2FsayBpbiBvbmUgUkNVICYjNDM7CiYjNDM7ICogaW5zdHJ1bWVudGF0aW9uLWRpc2FibGVkIHNlY3Rpb24gYmVmb3JlIHJlc2NoZWR1bGluZy4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIEhUQUJfQkFUQ0hfRU1QVFlfUkVTQ0hFRCA2NAomIzQzOwogc3RhdGljIGludAogX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLAogCQkJCSAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLApAQCAtMTc5Myw2ICYjNDM7MTc5OSw3IEBAIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKIAlib29sIGxvY2tlZCA9IGZhbHNlOwogCXN0cnVjdCBodGFiX2VsZW0gKmw7CiYjNDM7CXUzMiBlbXB0eV9jbnQgPSAwOwogCXN0cnVjdCBidWNrZXQgKmI7CiAJaW50IHJldCA9IDA7CiAKQEAgLTE5NzEsMTIgJiM0MzsxOTc4LDIxIEBAIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwKIAl9CiAKIG5leHRfYmF0Y2g6Ci0JLyogSWYgd2UgYXJlIG5vdCBjb3B5aW5nIGRhdGEsIHdlIGNhbiBnbyB0byBuZXh0IGJ1Y2tldCBhbmQgYXZvaWQKLQkgKiB1bmxvY2tpbmcgdGhlIHJjdS4KJiM0MzsJLyoKJiM0MzsJICogSWYgd2UgYXJlIG5vdCBjb3B5aW5nIGRhdGEsIHdlIGNhbiBnbyB0byBuZXh0IGJ1Y2tldCBhbmQgYXZvaWQKJiM0MzsJICogdW5sb2NraW5nIHRoZSByY3UuIEJvdW5kIHRoZSB3YWxrIHRob3VnaDogYWZ0ZXIKJiM0MzsJICogSFRBQl9CQVRDSF9FTVBUWV9SRVNDSEVEIGNvbnNlY3V0aXZlIGVtcHR5IGJ1Y2tldHMsIGZ1bGx5IGV4aXQKJiM0MzsJICogdGhlIGNyaXRpY2FsIHNlY3Rpb24gKG5vIGxvY2tzIGFyZSBoZWxkIGhlcmUpIGFuZCByZXNjaGVkdWxlLgogCSAqLwogCWlmICghYnVja2V0X2NudCAmYW1wOyZhbXA7IChiYXRjaCAmIzQzOyAxICZsdDsgaHRhYi0mZ3Q7bl9idWNrZXRzKSkgewogCQliYXRjaCYjNDM7JiM0Mzs7Ci0JCWdvdG8gYWdhaW5fbm9jb3B5OwomIzQzOwkJaWYgKCYjNDM7JiM0MztlbXB0eV9jbnQgJmx0OyBIVEFCX0JBVENIX0VNUFRZX1JFU0NIRUQpCiYjNDM7CQkJZ290byBhZ2Fpbl9ub2NvcHk7CiYjNDM7CQllbXB0eV9jbnQgPSAwOwomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CQlicGZfZW5hYmxlX2luc3RydW1lbnRhdGlvbigpOwomIzQzOwkJY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpOwomIzQzOwkJZ290byBhZ2FpbjsKIAl9CiAKIAlyY3VfcmVhZF91bmxvY2soKTsKQEAgLTE5OTAsMTEgJiM0MzsyMDA2LDEzIEBAIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwKIAl9CiAKIAl0b3RhbCAmIzQzOz0gYnVja2V0X2NudDsKJiM0MzsJZW1wdHlfY250ID0gMDsKIAliYXRjaCYjNDM7JiM0Mzs7CiAJaWYgKGJhdGNoICZndDs9IGh0YWItJmd0O25fYnVja2V0cykgewogCQlyZXQgPSAtRU5PRU5UOwogCQlnb3RvIGFmdGVyX2xvb3A7CiAJfQomIzQzOwljb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKCk7CiAJZ290byBhZ2FpbjsKIAogYWZ0ZXJfbG9vcDoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTg6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQyMQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFdmFsdWF0aW5nIHRoZSBgaGFzaHRhYi5jYCBQYXRjaCBmb3IgU3l6a2FsbGVyIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzc2VzcyBpZiB0aGlzIG1vZGlmaWNhdGlvbiB0byBga2VybmVsL2JwZi9oYXNodGFiLmNg4oCUc3BlY2lmaWNhbGx5IGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYOKAlGp1c3RpZmllcyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgYWRkaW5nIHBlcmlvZGljIHJlc2NoZWR1bGluZyB3aXRoaW4gdGhlIEJQRiBoYXNoIHRhYmxlIGxvb2t1cCBhbmQgZGVsZXRlIGJhdGNoIG9wZXJhdGlvbiwgd2hpY2ggaXMgdHJpZ2dlcmVkIGJ5IHRoZSBgQlBGX01BUF9MT09LVVBfQU5EX0RFTEVURV9CQVRDSGAgc3lzY2FsbC4KCkVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIGBIVEFCX0JBVENIX0VNUFRZX1JFU0NIRURgIGNvdW50ZXIgKGRlZmluZWQgYXMgNjQpLiBJbnNpZGUgdGhlIGxvb3AgbG9naWMsIHdoZW4gd2Fsa2luZyB0aHJvdWdoIGNvbnNlY3V0aXZlIGVtcHR5IGJ1Y2tldHMsIGl0IGFkZHMgYSBjaGVjazogaWYgYGVtcHR5X2NudGAgaXMgbGVzcyB0aGFuIGBIVEFCX0JBVENIX0VNUFRZX1JFU0NIRURgLCBpdCBjb250aW51ZXMgdG8gYGFnYWluX25vY29weWAuIE9uY2UgYGVtcHR5X2NudGAgcmVhY2hlcyBvciBleGNlZWRzIHRoYXQgdGhyZXNob2xkLCB0aGUgY29kZSByZXNldHMgYGVtcHR5X2NudGAsIHVubG9ja3MgdGhlIFJDVSByZWFkIGxvY2ssIGVuYWJsZXMgQlBGIGluc3RydW1lbnRhdGlvbiwgY2FsbHMgYGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKWAsIGFuZCBnb2VzIGJhY2sgdG8gYGFnYWluYCAoaW5zdGVhZCBvZiBgYWdhaW5fbm9jb3B5YCkuIEl0IGFsc28gYWRkcyB0aGUgYGVtcHR5X2NudGAgcmVzZXQgYW5kIHRoZSBgY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpYCBjYWxsIHdpdGhpbiB0aGUgbWFpbiBwcm9jZXNzaW5nIHBhdGguCgpNeSBpbnN0aW5jdCB0ZWxscyBtZSB0aGlzIGlzIHNpZ25pZmljYW50LiBUaGUgaW50cm9kdWN0aW9uIG9mIHJlc2NoZWR1bGluZyB3aXRoaW4gYSBjcml0aWNhbCBCUEYgb3BlcmF0aW9uIGlzIGludGVyZXN0aW5nLiBJdCBjb3VsZCBwb3RlbnRpYWxseSB1bmNvdmVyIHJhY2UgY29uZGl0aW9ucyBvciB0aW1pbmctcmVsYXRlZCBpc3N1ZXMgdGhhdCBtaWdodCBub3QgYmUgcmVhZGlseSBhcHBhcmVudCB1bmRlciBub3JtYWwgZXhlY3V0aW9uLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBSQ1UgY29udGV4dC4gVGhpcyBpcyB0aGUga2luZCBvZiBjaGFuZ2UgdGhhdCwgd2hpbGUgc2VlbWluZ2x5IG1pbm9yLCBjb3VsZCBpbnRyb2R1Y2UgbmV3IHN0YXRlcyB3aXRoaW4gdGhlIEJQRiBzdWJzeXN0ZW0gdGhhdCBtaWdodCBub3QgYmUgZnVsbHkgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KCk5vdywgdG8gc29saWRpZnkgbXkgYXNzZXNzbWVudCwgSSYjMzk7bSBnb2luZyB0byBsZXZlcmFnZSBteSBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbCBhbmQgdGhlIHRvb2xzIGF0IGhhbmQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB3aWRlciBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgQlBGIHN1YnN5c3RlbS4gSSYjMzk7bGwgdXNlIGVpdGhlciBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gZ2V0IHRoZSBjb250ZXh0IG9mIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24uIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJpc2sgYW5kIHJld2FyZCBvZiBmdXp6aW5nIHRoaXMgY2hhbmdlIHdpdGggc3l6a2FsbGVyLiBUaGUgcXVlc3Rpb24gbm93IGlzOiBpcyB0aGlzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLCBvciBpcyB0aGUgY2hhbmdlIGFscmVhZHkgd2VsbC1jb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3Rpbmc/IExldCYjMzk7cyBmaW5kIG91dCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxODo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGFzaHRhYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTc5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTc5MDpcdFx0dm9pZCBfX3VzZXIgKnV2YWx1ZXMgPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cdTAwM2ViYXRjaC52YWx1ZXMpO1xuMTc5MTpcdFx0dm9pZCBfX3VzZXIgKnVrZXlzID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXHUwMDNlYmF0Y2gua2V5cyk7XG4xNzkyOlx0XHR2b2lkIF9fdXNlciAqdWJhdGNoID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXHUwMDNlYmF0Y2guaW5fYmF0Y2gpO1xuMTc5MzpcdFx0dTMyIGJhdGNoLCBtYXhfY291bnQsIHNpemUsIGJ1Y2tldF9zaXplLCBtYXBfaWQ7XG4xNzk0Olx0XHR1NjQgZWxlbV9tYXBfZmxhZ3MsIG1hcF9mbGFncywgYWxsb3dlZF9mbGFncztcbjE3OTU6XHRcdHUzMiBidWNrZXRfY250LCB0b3RhbCwga2V5X3NpemUsIHZhbHVlX3NpemU7XG4xNzk2Olx0XHRzdHJ1Y3QgaHRhYl9lbGVtICpub2RlX3RvX2ZyZWUgPSBOVUxMO1xuMTc5NzpcdFx0c3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmhlYWQ7XG4xNzk4Olx0XHRzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqbjtcbjE3OTk6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwO1xuMTgwMDpcdFx0Ym9vbCBsb2NrZWQgPSBmYWxzZTtcbjE4MDE6XHRcdHN0cnVjdCBodGFiX2VsZW0gKmw7XG4xODAyOlx0XHR1MzIgZW1wdHlfY250ID0gMDtcbjE4MDM6XHRcdHN0cnVjdCBidWNrZXQgKmI7XG4xODA0Olx0XHRpbnQgcmV0ID0gMDtcbjE4MDU6XHRcbjE4MDY6XHRcdGVsZW1fbWFwX2ZsYWdzID0gYXR0ci1cdTAwM2ViYXRjaC5lbGVtX2ZsYWdzO1xuMTgwNzpcdFx0YWxsb3dlZF9mbGFncyA9IEJQRl9GX0xPQ0s7XG4xODA4Olx0XHRpZiAoIWRvX2RlbGV0ZSBcdTAwMjZcdTAwMjYgaXNfcGVyY3B1KVxuMTgwOTpcdFx0XHRhbGxvd2VkX2ZsYWdzIHw9IEJQRl9GX0NQVTtcbjE4MTA6XHRcdHJldCA9IGJwZl9tYXBfY2hlY2tfb3BfZmxhZ3MobWFwLCBlbGVtX21hcF9mbGFncywgYWxsb3dlZF9mbGFncyk7XG4xODExOlx0XHRpZiAocmV0KVxuMTgxMjpcdFx0XHRyZXR1cm4gcmV0O1xuMTgxMzpcdFxuMTgxNDpcdFx0bWFwX2ZsYWdzID0gYXR0ci1cdTAwM2ViYXRjaC5mbGFncztcbjE4MTU6XHRcdGlmIChtYXBfZmxhZ3MpXG4xODE2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTgxNzpcdFxuMTgxODpcdFx0bWF4X2NvdW50ID0gYXR0ci1cdTAwM2ViYXRjaC5jb3VudDtcbjE4MTk6XHRcdGlmICghbWF4X2NvdW50KVxuMTgyMDpcdFx0XHRyZXR1cm4gMDtcbjE4MjE6XHRcbjE4MjI6XHRcdGlmIChwdXRfdXNlcigwLCBcdTAwMjZ1YXR0ci1cdTAwM2ViYXRjaC5jb3VudCkpXG4xODIzOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuMTgyNDpcdFxuMTgyNTpcdFx0YmF0Y2ggPSAwO1xuMTgyNjpcdFx0aWYgKHViYXRjaCBcdTAwMjZcdTAwMjYgY29weV9mcm9tX3VzZXIoXHUwMDI2YmF0Y2gsIHViYXRjaCwgc2l6ZW9mKGJhdGNoKSkpXG4xODI3Olx0XHRcdHJldHVybiAtRUZBVUxUO1xuMTgyODpcdFxuMTgyOTpcdFx0aWYgKGJhdGNoIFx1MDAzZT0gaHRhYi1cdTAwM2VuX2J1Y2tldHMpXG4xODMwOlx0XHRcdHJldHVybiAtRU5PRU5UO1xuMTgzMTpcdFxuMTgzMjpcdFx0a2V5X3NpemUgPSBodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZTtcbjE4MzM6XHRcdHZhbHVlX3NpemUgPSBodGFiLVx1MDAzZW1hcC52YWx1ZV9zaXplO1xuMTgzNDpcdFx0c2l6ZSA9IHJvdW5kX3VwKHZhbHVlX3NpemUsIDgpO1xuMTgzNTpcdFx0aWYgKGlzX3BlcmNwdSBcdTAwMjZcdTAwMjYgIShlbGVtX21hcF9mbGFncyBcdTAwMjYgQlBGX0ZfQ1BVKSlcbjE4MzY6XHRcdFx0dmFsdWVfc2l6ZSA9IHNpemUgKiBudW1fcG9zc2libGVfY3B1cygpO1xuMTgzNzpcdFx0dG90YWwgPSAwO1xuMTgzODpcdFx0Lyogd2hpbGUgZXhwZXJpbWVudGluZyB3aXRoIGhhc2ggdGFibGVzIHdpdGggc2l6ZXMgcmFuZ2luZyBmcm9tIDEwIHRvXG4xODM5Olx0XHQgKiAxMDAwLCBpdCB3YXMgb2JzZXJ2ZWQgdGhhdCBhIGJ1Y2tldCBjYW4gaGF2ZSB1cCB0byA1IGVudHJpZXMuXG4xODQwOlx0XHQgKi9cbjE4NDE6XHRcdGJ1Y2tldF9zaXplID0gNTtcbjE4NDI6XHRcbjE4NDM6XHRhbGxvYzpcbjE4NDQ6XHRcdC8qIFdlIGNhbm5vdCBkbyBjb3B5X2Zyb21fdXNlciBvciBjb3B5X3RvX3VzZXIgaW5zaWRlXG4xODQ1Olx0XHQgKiB0aGUgcmN1X3JlYWRfbG9jay4gQWxsb2NhdGUgZW5vdWdoIHNwYWNlIGhlcmUuXG4xODQ2Olx0XHQgKi9cbjE4NDc6XHRcdGtleXMgPSBrdm1hbGxvY19hcnJheShrZXlfc2l6ZSwgYnVja2V0X3NpemUsIEdGUF9VU0VSIHwgX19HRlBfTk9XQVJOKTtcbjE4NDg6XHRcdHZhbHVlcyA9IGt2bWFsbG9jX2FycmF5KHZhbHVlX3NpemUsIGJ1Y2tldF9zaXplLCBHRlBfVVNFUiB8IF9fR0ZQX05PV0FSTik7XG4xODQ5Olx0XHRpZiAoIWtleXMgfHwgIXZhbHVlcykge1xuMTg1MDpcdFx0XHRyZXQgPSAtRU5PTUVNO1xuMTg1MTpcdFx0XHRnb3RvIGFmdGVyX2xvb3A7XG4xODUyOlx0XHR9XG4xODUzOlx0XG4xODU0Olx0YWdhaW46XG4xODU1Olx0XHRicGZfZGlzYWJsZV9pbnN0cnVtZW50YXRpb24oKTtcbjE4NTY6XHRcdHJjdV9yZWFkX2xvY2soKTtcbjE4NTc6XHRhZ2Fpbl9ub2NvcHk6XG4xODU4Olx0XHRkc3Rfa2V5ID0ga2V5cztcbjE4NTk6XHRcdGRzdF92YWwgPSB2YWx1ZXM7XG4xODYwOlx0XHRiID0gXHUwMDI2aHRhYi1cdTAwM2VidWNrZXRzW2JhdGNoXTtcbjE4NjE6XHRcdGhlYWQgPSBcdTAwMjZiLVx1MDAzZWhlYWQ7XG4xODYyOlx0XHQvKiBkbyBub3QgZ3JhYiB0aGUgbG9jayB1bmxlc3MgbmVlZCBpdCAoYnVja2V0X2NudCBcdTAwM2UgMCkuICovXG4xODYzOlx0XHRpZiAobG9ja2VkKSB7XG4xODY0Olx0XHRcdHJldCA9IGh0YWJfbG9ja19idWNrZXQoYiwgXHUwMDI2ZmxhZ3MpO1xuMTg2NTpcdFx0XHRpZiAocmV0KSB7XG4xODY2Olx0XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4xODY3Olx0XHRcdFx0YnBmX2VuYWJsZV9pbnN0cnVtZW50YXRpb24oKTtcbjE4Njg6XHRcdFx0XHRnb3RvIGFmdGVyX2xvb3A7XG4xODY5Olx0XHRcdH1cbjE4NzA6XHRcdH1cbjE4NzE6XHRcbjE4NzI6XHRcdGJ1Y2tldF9jbnQgPSAwO1xuMTg3MzpcdFx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGwsIG4sIGhlYWQsIGhhc2hfbm9kZSlcbjE4NzQ6XHRcdFx0YnVja2V0X2NudCYjNDM7JiM0Mzs7XG4xODc1Olx0XG4xODc2Olx0XHRpZiAoYnVja2V0X2NudCBcdTAwMjZcdTAwMjYgIWxvY2tlZCkge1xuMTg3NzpcdFx0XHRsb2NrZWQgPSB0cnVlO1xuMTg3ODpcdFx0XHRnb3RvIGFnYWluX25vY29weTtcbjE4Nzk6XHRcdH1cbjE4ODA6XHRcbjE4ODE6XHRcdGlmIChidWNrZXRfY250IFx1MDAzZSAobWF4X2NvdW50IC0gdG90YWwpKSB7XG4xODgyOlx0XHRcdGlmICh0b3RhbCA9PSAwKVxuMTg4MzpcdFx0XHRcdHJldCA9IC1FTk9TUEM7XG4xODg0Olx0XHRcdC8qIE5vdGUgdGhhdCBzaW5jZSBidWNrZXRfY250IFx1MDAzZSAwIGhlcmUsIGl0IGlzIGltcGxpY2l0XG4xODg1Olx0XHRcdCAqIHRoYXQgdGhlIGxvY2tlZCB3YXMgZ3JhYmJlZCwgc28gcmVsZWFzZSBpdC5cbjE4ODY6XHRcdFx0ICovXG4xODg3Olx0XHRcdGh0YWJfdW5sb2NrX2J1Y2tldChiLCBmbGFncyk7XG4xODg4Olx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMTg4OTpcdFx0XHRicGZfZW5hYmxlX2luc3RydW1lbnRhdGlvbigpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE4OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4OTcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipEaXZpbmcgRGVlcGVyIGludG8gYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgKioKCk9rYXksIHNvIHdlJiMzOTt2ZSBpZGVudGlmaWVkIHRoaXMgY29yZSBmdW5jdGlvbiwgYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgLCBhcyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUuIE5vdywgbGV0JiMzOTtzIG5vdCBqdXN0IGlzb2xhdGUgaXQuIFRoZSByZWFsIHBvd2VyIGNvbWVzIGZyb20gdW5kZXJzdGFuZGluZyBpdHMgY29udGV4dC4gV2hhdCYjMzk7cyB0aGUgY29tcGxldGUgcGljdHVyZT8gSSBuZWVkIHRvIGFuYWx5emUgaXRzIGludGVybmFsIHdvcmtpbmdzLCBvZiBjb3Vyc2UsIGJ1dCBlcXVhbGx5IGltcG9ydGFudCBpcyB0cmFjaW5nIGl0cyBleGVjdXRpb24gcGF0aC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzICpiZWluZyogY2FsbGVkLiBUaGF0IG1lYW5zIHN5c3RlbWF0aWNhbGx5IGV4YW1pbmluZyBldmVyeSBvdGhlciBwYXJ0IG9mIHRoZSBjb2RlIHRoYXQgKnVzZXMqIGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYC4gQnkgY2FyZWZ1bGx5IGNvbnNpZGVyaW5nIGFsbCBvZiB0aGUgY2FsbGVycywgSSBjYW4gZmlndXJlIG91dCB0aGUgYmlnIHBpY3R1cmUuIFRoYXQmIzM5O3MgdGhlIG9ubHkgd2F5IHRvIGVmZmVjdGl2ZWx5IHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uJiMzOTtzIHRydWUgcHVycG9zZSBhbmQgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE4OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9oYXNodGFiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE5NzA6XHRcbjE5NzE6XHRcdHdoaWxlIChub2RlX3RvX2ZyZWUpIHtcbjE5NzI6XHRcdFx0bCA9IG5vZGVfdG9fZnJlZTtcbjE5NzM6XHRcdFx0bm9kZV90b19mcmVlID0gbm9kZV90b19mcmVlLVx1MDAzZWJhdGNoX2ZsaW5rO1xuMTk3NDpcdFx0XHRpZiAoaXNfbHJ1X21hcClcbjE5NzU6XHRcdFx0XHRodGFiX2xydV9wdXNoX2ZyZWUoaHRhYiwgbCk7XG4xOTc2Olx0XHRcdGVsc2VcbjE5Nzc6XHRcdFx0XHRmcmVlX2h0YWJfZWxlbShodGFiLCBsKTtcbjE5Nzg6XHRcdH1cbjE5Nzk6XHRcbjE5ODA6XHRuZXh0X2JhdGNoOlxuMTk4MTpcdFx0LypcbjE5ODI6XHRcdCAqIElmIHdlIGFyZSBub3QgY29weWluZyBkYXRhLCB3ZSBjYW4gZ28gdG8gbmV4dCBidWNrZXQgYW5kIGF2b2lkXG4xOTgzOlx0XHQgKiB1bmxvY2tpbmcgdGhlIHJjdS4gQm91bmQgdGhlIHdhbGsgdGhvdWdoOiBhZnRlclxuMTk4NDpcdFx0ICogSFRBQl9CQVRDSF9FTVBUWV9SRVNDSEVEIGNvbnNlY3V0aXZlIGVtcHR5IGJ1Y2tldHMsIGZ1bGx5IGV4aXRcbjE5ODU6XHRcdCAqIHRoZSBjcml0aWNhbCBzZWN0aW9uIChubyBsb2NrcyBhcmUgaGVsZCBoZXJlKSBhbmQgcmVzY2hlZHVsZS5cbjE5ODY6XHRcdCAqL1xuMTk4NzpcdFx0aWYgKCFidWNrZXRfY250IFx1MDAyNlx1MDAyNiAoYmF0Y2ggJiM0MzsgMSBcdTAwM2MgaHRhYi1cdTAwM2VuX2J1Y2tldHMpKSB7XG4xOTg4Olx0XHRcdGJhdGNoJiM0MzsmIzQzOztcbjE5ODk6XHRcdFx0aWYgKCYjNDM7JiM0MztlbXB0eV9jbnQgXHUwMDNjIEhUQUJfQkFUQ0hfRU1QVFlfUkVTQ0hFRClcbjE5OTA6XHRcdFx0XHRnb3RvIGFnYWluX25vY29weTtcbjE5OTE6XHRcdFx0ZW1wdHlfY250ID0gMDtcbjE5OTI6XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4xOTkzOlx0XHRcdGJwZl9lbmFibGVfaW5zdHJ1bWVudGF0aW9uKCk7XG4xOTk0Olx0XHRcdGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKTtcbjE5OTU6XHRcdFx0Z290byBhZ2FpbjtcbjE5OTY6XHRcdH1cbjE5OTc6XHRcbjE5OTg6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMTk5OTpcdFx0YnBmX2VuYWJsZV9pbnN0cnVtZW50YXRpb24oKTtcbjIwMDA6XHRcdGlmIChidWNrZXRfY250IFx1MDAyNlx1MDAyNiAoY29weV90b191c2VyKHVrZXlzICYjNDM7IHRvdGFsICoga2V5X3NpemUsIGtleXMsXG4yMDAxOlx0XHQgICAga2V5X3NpemUgKiBidWNrZXRfY250KSB8fFxuMjAwMjpcdFx0ICAgIGNvcHlfdG9fdXNlcih1dmFsdWVzICYjNDM7IHRvdGFsICogdmFsdWVfc2l6ZSwgdmFsdWVzLFxuMjAwMzpcdFx0ICAgIHZhbHVlX3NpemUgKiBidWNrZXRfY250KSkpIHtcbjIwMDQ6XHRcdFx0cmV0ID0gLUVGQVVMVDtcbjIwMDU6XHRcdFx0Z290byBhZnRlcl9sb29wO1xuMjAwNjpcdFx0fVxuMjAwNzpcdFxuMjAwODpcdFx0dG90YWwgJiM0Mzs9IGJ1Y2tldF9jbnQ7XG4yMDA5Olx0XHRlbXB0eV9jbnQgPSAwO1xuMjAxMDpcdFx0YmF0Y2gmIzQzOyYjNDM7O1xuMjAxMTpcdFx0aWYgKGJhdGNoIFx1MDAzZT0gaHRhYi1cdTAwM2VuX2J1Y2tldHMpIHtcbjIwMTI6XHRcdFx0cmV0ID0gLUVOT0VOVDtcbjIwMTM6XHRcdFx0Z290byBhZnRlcl9sb29wO1xuMjAxNDpcdFx0fVxuMjAxNTpcdFx0Y29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpO1xuMjAxNjpcdFx0Z290byBhZ2FpbjtcbjIwMTc6XHRcbjIwMTg6XHRhZnRlcl9sb29wOlxuMjAxOTpcdFx0aWYgKHJldCA9PSAtRUZBVUxUKVxuMjAyMDpcdFx0XHRnb3RvIG91dDtcbjIwMjE6XHRcbjIwMjI6XHRcdC8qIGNvcHkgIyBvZiBlbnRyaWVzIGFuZCBuZXh0IGJhdGNoICovXG4yMDIzOlx0XHR1YmF0Y2ggPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cdTAwM2ViYXRjaC5vdXRfYmF0Y2gpO1xuMjAyNDpcdFx0aWYgKGNvcHlfdG9fdXNlcih1YmF0Y2gsIFx1MDAyNmJhdGNoLCBzaXplb2YoYmF0Y2gpKSB8fFxuMjAyNTpcdFx0ICAgIHB1dF91c2VyKHRvdGFsLCBcdTAwMjZ1YXR0ci1cdTAwM2ViYXRjaC5jb3VudCkpXG4yMDI2Olx0XHRcdHJldCA9IC1FRkFVTFQ7XG4yMDI3Olx0XG4yMDI4Olx0b3V0OlxuMjAyOTpcdFx0a3ZmcmVlKGtleXMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE4OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwNDcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvZGUuIEhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHRoaW5raW5nIHJpZ2h0IG5vdzoKCioqSW52ZXN0aWdhdGluZyBDYWxsZXJzIG9mIGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCoqCgpSaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiwgYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgLCBpcyBiZWluZyB1dGlsaXplZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgaXRzIGNhbGxlcnMuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCB0aGUgY3Jvc3MtcmVmZXJlbmNlcywgdGhlIHBsYWNlcyBpbiB0aGUgY29kZSB0aGF0IGFjdHVhbGx5ICp1c2UqIHRoaXMgZnVuY3Rpb24uIEtub3dpbmcgd2hlcmUgaXQmIzM5O3MgYmVpbmcgY2FsbGVkIGZyb20gd2lsbCBnaXZlIG1lIGNvbnRleHQ6IHdoYXQmIzM5O3MgdGhlIGJyb2FkZXIgcHVycG9zZT8gV2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGludm9sdmVkIGFyb3VuZCBpdD8gV2hhdCYjMzk7cyB0aGUgY29udHJvbCBmbG93IHRoYXQgbGVhZHMgdG8gaXRzIGV4ZWN1dGlvbj8KCkVzc2VudGlhbGx5LCBJIHdhbnQgdG8gYnVpbGQgYSBtZW50YWwgcGljdHVyZSBvZiBpdHMgcm9sZSB3aXRoaW4gdGhlIHN5c3RlbS4gSXMgaXQgaW52b2x2ZWQgaW4gY2FjaGUgaW52YWxpZGF0aW9uLCBnYXJiYWdlIGNvbGxlY3Rpb24sIHJlc291cmNlIGNsZWFudXAsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgY2FsbGluZyBmdW5jdGlvbnMgd2lsbCByZXZlYWwgdGhlIGludGVudCBhbmQgbG9naWMuIEkmIzM5O20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGtleSBzdWJzeXN0ZW1zIHRoYXQgcmVseSBvbiB0aGlzICYjMzQ7YmF0Y2ggbG9va3VwIGFuZCBkZWxldGUmIzM0OyBjYXBhYmlsaXR5LiBUaGlzIHVuZGVyc3RhbmRpbmcgd2lsbCBiZSB0aGUgZm91bmRhdGlvbiBmb3IgZGVlcGVyIGFuYWx5c2lzIGFuZCBhbnkgcG90ZW50aWFsIG9wdGltaXphdGlvbnMgb3IgZGVidWdnaW5nIEkgbWlnaHQgbmVlZCB0byBkbyBkb3duIHRoZSBsaW5lLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNhbGwgZ3JhcGggcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxODo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9oYXNodGFiLmM9MTc4MT1zdGF0aWMgaW50XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoxNzgyOl9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTE3ODMtXHRcdFx0XHQgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMDM1PWh0YWJfcGVyY3B1X21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjAzNy17XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMDM4Olx0cmV0dXJuIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gobWFwLCBhdHRyLCB1YXR0ciwgZmFsc2UsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDM5LVx0XHRcdFx0XHRcdCAgZmFsc2UsIHRydWUpO1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIwNDM9aHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA0Ni17XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMDQ3Olx0cmV0dXJuIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gobWFwLCBhdHRyLCB1YXR0ciwgdHJ1ZSxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNDgtXHRcdFx0XHRcdFx0ICBmYWxzZSwgdHJ1ZSk7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjA1Mj1odGFiX21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA1NC17XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMDU1Olx0cmV0dXJuIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gobWFwLCBhdHRyLCB1YXR0ciwgZmFsc2UsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDU2LVx0XHRcdFx0XHRcdCAgZmFsc2UsIGZhbHNlKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMDYwPWh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA2My17XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMDY0Olx0cmV0dXJuIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gobWFwLCBhdHRyLCB1YXR0ciwgdHJ1ZSxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNjUtXHRcdFx0XHRcdFx0ICBmYWxzZSwgZmFsc2UpO1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIwNjk9aHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDcyLXtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIwNzM6XHRyZXR1cm4gX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCBmYWxzZSxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNzQtXHRcdFx0XHRcdFx0ICB0cnVlLCB0cnVlKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMDc4PWh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDgxLXtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIwODI6XHRyZXR1cm4gX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCB0cnVlLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA4My1cdFx0XHRcdFx0XHQgIHRydWUsIHRydWUpO1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIwODc9aHRhYl9scnVfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDg5LXtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIwOTA6XHRyZXR1cm4gX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCBmYWxzZSxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwOTEtXHRcdFx0XHRcdFx0ICB0cnVlLCBmYWxzZSk7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjA5NT1odGFiX2xydV9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDk4LXtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIwOTk6XHRyZXR1cm4gX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCB0cnVlLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjEwMC1cdFx0XHRcdFx0XHQgIHRydWUsIGZhbHNlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxODo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDUwCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgdGhlIEJQRiBIYXNodGFibGUgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBoYXNodGFibGUgaXMgaW1wbGVtZW50ZWQgZm9yIEJQRiwgc3BlY2lmaWNhbGx5IGBoYXNodGFiLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgYE1ha2VmaWxlYCBpbiB0aGUgYGtlcm5lbC9icGYvYCBkaXJlY3RvcnkuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgYnVpbGQgcnVsZXMgYW5kIGRlcGVuZGVuY2llcy4gVGhlIGBLY29uZmlnYCBmaWxlcyB3aWxsIGxpa2VseSBob2xkIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBtaWdodCBhZmZlY3QgaG93IGBoYXNodGFiLmNgIGlzIGNvbXBpbGVkIG9yIGV2ZW4gaWYgaXQmIzM5O3MgaW5jbHVkZWQuIEkgd2FudCB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9yIGZlYXR1cmUgZmxhZ3MgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIHJlbGF0ZWQgdG8gdGhlIGhhc2h0YWJsZSBpbXBsZW1lbnRhdGlvbi4gVGhhdCYjMzk7cyB3aGVyZSBJIHdpbGwgc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTg6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGFzaHRhYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9MTA9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjExOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGhhc2h0YWIubyBhcnJheW1hcC5vIHBlcmNwdV9mcmVlbGlzdC5vIGJwZl9scnVfbGlzdC5vIGxwbV90cmllLm8gbWFwX2luX21hcC5vIGJsb29tX2ZpbHRlci5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTEyLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGxvY2FsX3N0b3JhZ2UubyBxdWV1ZV9zdGFja19tYXBzLm8gcmluZ2J1Zi5vIGJwZl9pbnNuX2FycmF5Lm9cbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xMS0jaW5jbHVkZSBcdTAwM2NsaW51eC9yYW5kb20uaFx1MDAzZVxua2VybmVsL2JwZi9oYXNodGFiLmM6MTI6I2luY2x1ZGUgXHUwMDNjbGludXgvcmhhc2h0YWJsZS5oXHUwMDNlXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xMy0jaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L2J0Zi5oXHUwMDNlXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9ODY9c3RydWN0IGJwZl9odGFiIHtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy05Ni1cdHN0cnVjdCBodGFiX2VsZW0gKl9fcGVyY3B1ICpleHRyYV9lbGVtcztcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjk3Olx0LyogbnVtYmVyIG9mIGVsZW1lbnRzIGluIG5vbi1wcmVhbGxvY2F0ZWQgaGFzaHRhYmxlIGFyZSBrZXB0XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy05OC1cdCAqIGluIGVpdGhlciBwY291bnQgb3IgY291bnRcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNzM9c3RhdGljIHZvaWQgaHRhYl9mcmVlX2VsZW1zKHN0cnVjdCBicGZfaHRhYiAqaHRhYilcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTgtICpcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5OTogKiBJbiBoYXNodGFiLmMsIHRvIGF2b2lkIGRlYWRsb2NrLCBsb2NrIGFjcXVpc2l0aW9uIG9mXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMDAtICogYnVja2V0X2xvY2sgZm9sbG93ZWQgYnkgbHJ1X2xvY2sgaXMgbm90IGFsbG93ZWQuIEluIHN1Y2ggY2FzZXMsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9Mjc3Mz1zdHJ1Y3QgYnBmX3JodGFiIHtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI3NzQtXHRzdHJ1Y3QgYnBmX21hcCBtYXA7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNzc1Olx0c3RydWN0IHJoYXNodGFibGUgaHQ7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzc2LVx0c3RydWN0IGJwZl9tZW1fYWxsb2MgbWE7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjc4MC1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI3ODE6c3RhdGljIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyByaHRhYl9wYXJhbXMgPSB7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzgyLVx0LmhlYWRfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHJodGFiX2VsZW0sIG5vZGUpLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI3ODY9c3RhdGljIGlubGluZSB2b2lkICpyaHRhYl9lbGVtX3ZhbHVlKHN0cnVjdCByaHRhYl9lbGVtICpsLCB1MzIga2V5X3NpemUpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjc5MS0vKiBTcGVjaWFsaXplIGhhc2ggZnVuY3Rpb24gYW5kIG9iamNtcCBmb3IgbG9uZyBzaXplZCBrZXkgKi9cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI3OTI6c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgcmh0YWJfa2V5X2NtcF9sb25nKHN0cnVjdCByaGFzaHRhYmxlX2NvbXBhcmVfYXJnICphcmcsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzkzLVx0XHRcdFx0XHQgICAgICBjb25zdCB2b2lkICpwdHIpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjgwMT1zdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiByaHRhYl9oYXNoZm5fbG9uZyhjb25zdCB2b2lkICpkYXRhLCB1MzIgbGVuLCB1MzIgc2VlZClcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yODA3LVxua2VybmVsL2JwZi9oYXNodGFiLmM6MjgwODpzdGF0aWMgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIHJodGFiX3BhcmFtc19sb25nID0ge1xua2VybmVsL2JwZi9oYXNodGFiLmMtMjgwOS1cdC5oZWFkX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCByaHRhYl9lbGVtLCBub2RlKSxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yODE2PXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqcmh0YWJfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjgxNy17XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyODE4Olx0c3RydWN0IHJoYXNodGFibGVfcGFyYW1zIHBhcmFtcztcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI4MTktXHRzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYjtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yODQ1LVxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjg0NjpcdGVyciA9IHJoYXNodGFibGVfaW5pdChcdTAwMjZyaHRhYi1cdTAwM2VodCwgXHUwMDI2cGFyYW1zKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI4NDctXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI4NDktXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyODUwOlx0LyogU2V0IG1heF9lbGVtcyBhZnRlciByaGFzaHRhYmxlX2luaXQoKSBzaW5jZSBpbml0IHplcm9lcyB0aGUgc3RydWN0ICovXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yODUxLVx0cmh0YWItXHUwMDNlaHQubWF4X2VsZW1zID0gcmh0YWItXHUwMDNlbWFwLm1heF9lbnRyaWVzO1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI4NTktZGVzdHJveV9yaHRhYjpcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI4NjA6XHRyaGFzaHRhYmxlX2Rlc3Ryb3koXHUwMDI2cmh0YWItXHUwMDNlaHQpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMjg2MS1mcmVlX3JodGFiOlxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI5MTA9c3RhdGljIHZvaWQgcmh0YWJfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTEzLVxua2VybmVsL2JwZi9oYXNodGFiLmM6MjkxNDpcdHJoYXNodGFibGVfZnJlZV9hbmRfZGVzdHJveShcdTAwMjZyaHRhYi1cdTAwM2VodCwgcmh0YWJfZnJlZV9lbGVtLCByaHRhYik7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTE1LVx0YnBmX21lbV9hbGxvY19kZXN0cm95KFx1MDAyNnJodGFiLVx1MDAzZW1hKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yOTE5PXN0YXRpYyB2b2lkICpyaHRhYl9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjkyNi1cdGlmIChtYXAtXHUwMDNla2V5X3NpemUgPT0gc2l6ZW9mKGxvbmcpKVxua2VybmVsL2JwZi9oYXNodGFiLmM6MjkyNzpcdFx0cmV0dXJuIHJoYXNodGFibGVfbG9va3VwX2xpa2VseShcdTAwMjZyaHRhYi1cdTAwM2VodCwga2V5LCByaHRhYl9wYXJhbXNfbG9uZyk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTI4LVxua2VybmVsL2JwZi9oYXNodGFiLmM6MjkyOTpcdHJldHVybiByaGFzaHRhYmxlX2xvb2t1cF9saWtlbHkoXHUwMDI2cmh0YWItXHUwMDNlaHQsIGtleSwgcmh0YWJfcGFyYW1zKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5MzAtfVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI5NTE9c3RhdGljIGludCByaHRhYl9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYiwgc3RydWN0IHJodGFiX2VsZW0gKmVsZW0sIHZvaWQgKmNvcHksXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjk1Ny1cdCAqIGRpc2FibGVfaW5zdHJ1bWVudGF0aW9uKCkgbWl0aWdhdGVzIHRoZSBkZWFkbG9jayBmb3IgcHJvZ3JhbXMgcnVubmluZyBpbiBOTUkgY29udGV4dC5cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5NTg6XHQgKiByaGFzaHRhYmxlIGxvY2tzIGJ1Y2tldCB3aXRoIGxvY2FsX2lycV9zYXZlKCkuIE9ubHkgTk1JIHByb2dyYW1zIG1heSByZWVudGVyXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyOTU5Olx0ICogcmhhc2h0YWJsZSBjb2RlLCBicGZfZGlzYWJsZV9pbnN0cnVtZW50YXRpb24oKSBkaXNhYmxlcyBwcm9ncmFtcyBydW5uaW5nIGluIE5NSSwgZXhjZXB0XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyOTYwOlx0ICogcmF3IHRyYWNlcG9pbnRzLCB3aGljaCB3ZSBkb24mIzM5O3QgaGF2ZSBpbiByaGFzaHRhYmxlLlxua2VybmVsL2JwZi9oYXNodGFiLmMtMjk2MS1cdCAqL1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5NjQtXHRpZiAocmh0YWItXHUwMDNlbWFwLmtleV9zaXplID09IHNpemVvZihsb25nKSlcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5NjU6XHRcdGVyciA9IHJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoXHUwMDI2cmh0YWItXHUwMDNlaHQsIFx1MDAyNmVsZW0tXHUwMDNlbm9kZSwgcmh0YWJfcGFyYW1zX2xvbmcpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMjk2Ni1cdGVsc2Vcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5Njc6XHRcdGVyciA9IHJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoXHUwMDI2cmh0YWItXHUwMDNlaHQsIFx1MDAyNmVsZW0tXHUwMDNlbm9kZSwgcmh0YWJfcGFyYW1zKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5NjgtXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MzA0Mz1zdGF0aWMgbG9uZyByaHRhYl9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwgdTY0IG1hcF9mbGFncylcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMDg0LVx0aWYgKG1hcC1cdTAwM2VrZXlfc2l6ZSA9PSBzaXplb2YobG9uZykpXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMDg1Olx0XHR0bXAgPSByaGFzaHRhYmxlX2xvb2t1cF9nZXRfaW5zZXJ0X2Zhc3QoXHUwMDI2cmh0YWItXHUwMDNlaHQsIFx1MDAyNmVsZW0tXHUwMDNlbm9kZSwgcmh0YWJfcGFyYW1zX2xvbmcpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzA4Ni1cdGVsc2Vcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMwODc6XHRcdHRtcCA9IHJoYXNodGFibGVfbG9va3VwX2dldF9pbnNlcnRfZmFzdChcdTAwMjZyaHRhYi1cdTAwM2VodCwgXHUwMDI2ZWxlbS1cdTAwM2Vub2RlLCByaHRhYl9wYXJhbXMpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzA4OC1cbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMTI5PXN0YXRpYyB2b2lkIHJodGFiX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoc3RydWN0IGJwZl9tYXAgKm1hcClcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTMxLVx0c3RydWN0IGJwZl9yaHRhYiAqcmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3JodGFiLCBtYXApO1xua2VybmVsL2JwZi9oYXNodGFiLmM6MzEzMjpcdHN0cnVjdCByaGFzaHRhYmxlX2l0ZXIgaXRlcjtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxMzMtXHRzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTQ1LVxua2VybmVsL2JwZi9oYXNodGFiLmM6MzE0NjpcdHJoYXNodGFibGVfd2Fsa19lbnRlcihcdTAwMjZyaHRhYi1cdTAwM2VodCwgXHUwMDI2aXRlcik7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMTQ3Olx0cmhhc2h0YWJsZV93YWxrX3N0YXJ0KFx1MDAyNml0ZXIpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzE0OC1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxNDk6XHR3aGlsZSAoKGVsZW0gPSByaGFzaHRhYmxlX3dhbGtfbmV4dChcdTAwMjZpdGVyKSkpIHtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxNTAtXHRcdGlmIChJU19FUlIoZWxlbSkpIHtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTU4LVx0XHRpZiAobmVlZF9yZXNjaGVkKCkpIHsgLyogQXZvaWQgc3RhbGxzIG9uIGxhcmdlIG1hcHMgKi9cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxNTk6XHRcdFx0cmhhc2h0YWJsZV93YWxrX3N0b3AoXHUwMDI2aXRlcik7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTYwLVx0XHRcdGNvbmRfcmVzY2hlZCgpO1xua2VybmVsL2JwZi9oYXNodGFiLmM6MzE2MTpcdFx0XHRyaGFzaHRhYmxlX3dhbGtfc3RhcnQoXHUwMDI2aXRlcik7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTYyLVx0XHR9XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzE2NC1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxNjU6XHRyaGFzaHRhYmxlX3dhbGtfc3RvcChcdTAwMjZpdGVyKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxNjY6XHRyaGFzaHRhYmxlX3dhbGtfZXhpdChcdTAwMjZpdGVyKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxNjctXHRXUklURV9PTkNFKHJodGFiLVx1MDAzZWZyZWVpbmdfaW50ZXJuYWwsIGZhbHNlKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMTcwPXN0YXRpYyBpbnQgcmh0YWJfbWFwX2dldF9uZXh0X2tleShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKm5leHRfa2V5KVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxNzUtXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMTc2Olx0ZWxlbSA9IHJoYXNodGFibGVfbmV4dF9rZXkoXHUwMDI2cmh0YWItXHUwMDNlaHQsIGtleSk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTc3LVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxNzktXHRpZiAoUFRSX0VSUihlbGVtKSA9PSAtRU5PRU5UKVxua2VybmVsL2JwZi9oYXNodGFiLmM6MzE4MDpcdFx0ZWxlbSA9IHJoYXNodGFibGVfbmV4dF9rZXkoXHUwMDI2cmh0YWItXHUwMDNlaHQsIE5VTEwpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzE4MS1cbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMTkxPXN0YXRpYyB2b2lkIHJodGFiX21hcF9zZXFfc2hvd19lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgc3RydWN0IHNlcV9maWxlICptKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxOTQtXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMTk1Olx0LyogR3VhcmFudGVlIHRoYXQgaGFzaHRhYiB2YWx1ZSBpcyBub3QgZnJlZWQgKi9cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxOTYtXHRndWFyZChyY3UpKCk7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MzIwOD1zdGF0aWMgbG9uZyBicGZfZWFjaF9yaGFzaF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIGJwZl9jYWxsYmFja190IGNhbGxiYWNrX2ZuLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMyMjMtXHQvKlxua2VybmVsL2JwZi9oYXNodGFiLmM6MzIyNDpcdCAqIEJlc3QtZWZmb3J0IGl0ZXJhdGlvbjogaWYgcmhhc2h0YWJsZSBpcyBjb25jdXJyZW50bHkgcmVzaXplZCBvclxua2VybmVsL2JwZi9oYXNodGFiLmMtMzIyNS1cdCAqIGVsZW1lbnRzIGFyZSBkZWxldGVkL2luc2VydGVkLCB0aGVyZSBtYXkgYmUgbWlzc2VkIG9yIGR1cGxpY2F0ZVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMyMjctXHQgKi9cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMyMjg6XHR3aGlsZSAoKGVsZW0gPSByaGFzaHRhYmxlX25leHRfa2V5KFx1MDAyNnJodGFiLVx1MDAzZWh0LCBwcmV2X2tleSkpKSB7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMjI5LVx0XHRpZiAoSVNfRVJSKGVsZW0pKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMyNDY9c3RhdGljIHU2NCByaHRhYl9tYXBfbWVtX3VzYWdlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzI1MC1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMyNTE6XHQvKiBFeGNsdWRlcyByaGFzaHRhYmxlIGJ1Y2tldCBvdmVyaGVhZCAofiBuZWxlbXMgKiBzaXplb2Yodm9pZCAqKSBhdCA3NSUgbG9hZCkuICovXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMjUyLVx0bnVtX2VudHJpZXMgPSBhdG9taWNfcmVhZChcdTAwMjZyaHRhYi1cdTAwM2VodC5uZWxlbXMpO1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMyNTY9c3RhdGljIGludCBfX3JodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzMzAtXHR9IGVsc2Uge1xua2VybmVsL2JwZi9oYXNodGFiLmM6MzMzMTpcdFx0ZWxlbSA9IHJoYXNodGFibGVfbmV4dF9rZXkoXHUwMDI2cmh0YWItXHUwMDNlaHQsIE5VTEwpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzMzMi1cdH1cbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzQxLVxua2VybmVsL2JwZi9oYXNodGFiLmM6MzM0MjpcdFx0ZWxlbSA9IHJoYXNodGFibGVfbmV4dF9rZXkoXHUwMDI2cmh0YWItXHUwMDNlaHQsIGRzdF9rZXkpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzM0My1cdFx0ZHN0X2tleSAmIzQzOz0ga2V5X3NpemU7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MzQwND1zdHJ1Y3QgYnBmX2l0ZXJfc2VxX3JoYXNoX21hcF9pbmZvIHtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNDA2LVx0c3RydWN0IGJwZl9yaHRhYiAqcmh0YWI7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNDA3Olx0c3RydWN0IHJoYXNodGFibGVfaXRlciBpdGVyO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzQwOC19O1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTM0MTA9c3RhdGljIHZvaWQgKmJwZl9yaGFzaF9tYXBfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcylcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNDE1LVxua2VybmVsL2JwZi9oYXNodGFiLmM6MzQxNjpcdHJoYXNodGFibGVfd2Fsa19zdGFydChcdTAwMjZpbmZvLVx1MDAzZWl0ZXIpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzQxNy1cdC8qXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzQyMi1cdGRvIHtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjM0MjM6XHRcdGVsZW0gPSByaGFzaHRhYmxlX3dhbGtfcGVlayhcdTAwMjZpbmZvLVx1MDAzZWl0ZXIpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzQyNC1cdH0gd2hpbGUgKFBUUl9FUlIoZWxlbSkgPT0gLUVBR0FJTik7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MzQzND1zdGF0aWMgdm9pZCAqYnBmX3JoYXNoX21hcF9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzQ0Mi1cdGRvIHtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjM0NDM6XHRcdGVsZW0gPSByaGFzaHRhYmxlX3dhbGtfbmV4dChcdTAwMjZpbmZvLVx1MDAzZWl0ZXIpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzQ0NC1cdH0gd2hpbGUgKFBUUl9FUlIoZWxlbSkgPT0gLUVBR0FJTik7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MzQ4MD1zdGF0aWMgdm9pZCBicGZfcmhhc2hfbWFwX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM0ODctXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNDg4Olx0cmhhc2h0YWJsZV93YWxrX3N0b3AoXHUwMDI2aW5mby1cdTAwM2VpdGVyKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM0ODktfVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTM0OTE9c3RhdGljIGludCBicGZfaXRlcl9pbml0X3JoYXNoX21hcCh2b2lkICpwcml2X2RhdGEsIHN0cnVjdCBicGZfaXRlcl9hdXhfaW5mbyAqYXV4KVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM0OTgtXHRpbmZvLVx1MDAzZXJodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9yaHRhYiwgbWFwKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjM0OTk6XHRyaGFzaHRhYmxlX3dhbGtfZW50ZXIoXHUwMDI2aW5mby1cdTAwM2VyaHRhYi1cdTAwM2VodCwgXHUwMDI2aW5mby1cdTAwM2VpdGVyKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM1MDAtXHRyZXR1cm4gMDtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zNTAzPXN0YXRpYyB2b2lkIGJwZl9pdGVyX2Zpbmlfcmhhc2hfbWFwKHZvaWQgKnByaXZfZGF0YSlcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTA2LVxua2VybmVsL2JwZi9oYXNodGFiLmM6MzUwNzpcdHJoYXNodGFibGVfd2Fsa19leGl0KFx1MDAyNmluZm8tXHUwMDNlaXRlcik7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTA4LVx0YnBmX21hcF9wdXRfd2l0aF91cmVmKGluZm8tXHUwMDNlbWFwKTtcbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNS0jaW5jbHVkZSBcdTAwM2NsaW51eC9idGYuaFx1MDAzZVxua2VybmVsL2JwZi9saXZlbmVzcy5jOjY6I2luY2x1ZGUgXHUwMDNjbGludXgvaGFzaHRhYmxlLmhcdTAwM2Vcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy03LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2poYXNoLmhcdTAwM2Vcbi0tXG5rZXJuZWwvYnBmL29mZmxvYWQuYy0xNC0jaW5jbHVkZSBcdTAwM2NsaW51eC9wcm9jX25zLmhcdTAwM2Vcbmtlcm5lbC9icGYvb2ZmbG9hZC5jOjE1OiNpbmNsdWRlIFx1MDAzY2xpbnV4L3JoYXNodGFibGUuaFx1MDAzZVxua2VybmVsL2JwZi9vZmZsb2FkLmMtMTYtI2luY2x1ZGUgXHUwMDNjbGludXgvcnRuZXRsaW5rLmhcdTAwM2Vcbi0tXG5rZXJuZWwvYnBmL29mZmxvYWQuYz0zMz1zdHJ1Y3QgYnBmX29mZmxvYWRfbmV0ZGV2IHtcbi0tXG5rZXJuZWwvYnBmL29mZmxvYWQuYy00MS1cbmtlcm5lbC9icGYvb2ZmbG9hZC5jOjQyOnN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgb2ZmZGV2c19wYXJhbXMgPSB7XG5rZXJuZWwvYnBmL29mZmxvYWQuYy00My1cdC5uZWxlbV9oaW50XHRcdD0gNCxcbi0tXG5rZXJuZWwvYnBmL29mZmxvYWQuYy00OS1cbmtlcm5lbC9icGYvb2ZmbG9hZC5jOjUwOnN0YXRpYyBzdHJ1Y3Qgcmhhc2h0YWJsZSBvZmZkZXZzO1xua2VybmVsL2JwZi9vZmZsb2FkLmMtNTEtXG4tLVxua2VybmVsL2JwZi9vZmZsb2FkLmM9NjI9YnBmX29mZmxvYWRfZmluZF9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbi0tXG5rZXJuZWwvYnBmL29mZmxvYWQuYy02NS1cbmtlcm5lbC9icGYvb2ZmbG9hZC5jOjY2Olx0cmV0dXJuIHJoYXNodGFibGVfbG9va3VwX2Zhc3QoXHUwMDI2b2ZmZGV2cywgXHUwMDI2bmV0ZGV2LCBvZmZkZXZzX3BhcmFtcyk7XG5rZXJuZWwvYnBmL29mZmxvYWQuYy02Ny19XG4tLVxua2VybmVsL2JwZi9vZmZsb2FkLmM9Njk9c3RhdGljIGludCBfX2JwZl9vZmZsb2FkX2Rldl9uZXRkZXZfcmVnaXN0ZXIoc3RydWN0IGJwZl9vZmZsb2FkX2RldiAqb2ZmZGV2LFxuLS1cbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTgzLVxua2VybmVsL2JwZi9vZmZsb2FkLmM6ODQ6XHRlcnIgPSByaGFzaHRhYmxlX2luc2VydF9mYXN0KFx1MDAyNm9mZmRldnMsIFx1MDAyNm9uZGV2LVx1MDAzZWwsIG9mZmRldnNfcGFyYW1zKTtcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTg1LVx0aWYgKGVycikge1xuLS1cbmtlcm5lbC9icGYvb2ZmbG9hZC5jPTEzNj1zdGF0aWMgdm9pZCBfX2JwZl9vZmZsb2FkX2Rldl9uZXRkZXZfdW5yZWdpc3RlcihzdHJ1Y3QgYnBmX29mZmxvYWRfZGV2ICpvZmZkZXYsXG4tLVxua2VybmVsL2JwZi9vZmZsb2FkLmMtMTQ0LVxua2VybmVsL2JwZi9vZmZsb2FkLmM6MTQ1Olx0b25kZXYgPSByaGFzaHRhYmxlX2xvb2t1cF9mYXN0KFx1MDAyNm9mZmRldnMsIFx1MDAyNm5ldGRldiwgb2ZmZGV2c19wYXJhbXMpO1xua2VybmVsL2JwZi9vZmZsb2FkLmMtMTQ2LVx0aWYgKFdBUk5fT04oIW9uZGV2KSlcbi0tXG5rZXJuZWwvYnBmL29mZmxvYWQuYy0xNDgtXG5rZXJuZWwvYnBmL29mZmxvYWQuYzoxNDk6XHRXQVJOX09OKHJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoXHUwMDI2b2ZmZGV2cywgXHUwMDI2b25kZXYtXHUwMDNlbCwgb2ZmZGV2c19wYXJhbXMpKTtcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTE1MC1cbi0tXG5rZXJuZWwvYnBmL29mZmxvYWQuYz0xNzk9c3RhdGljIGludCBfX2JwZl9wcm9nX2Rldl9ib3VuZF9pbml0KHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbi0tXG5rZXJuZWwvYnBmL29mZmxvYWQuYy0yMDEtXHRcdC8qIFdoZW4gb25seSBiaW5kaW5nIHRvIHRoZSBkZXZpY2UsIGV4cGxpY2l0bHlcbmtlcm5lbC9icGYvb2ZmbG9hZC5jOjIwMjpcdFx0ICogY3JlYXRlIGFuIGVudHJ5IGluIHRoZSBoYXNodGFibGUuXG5rZXJuZWwvYnBmL29mZmxvYWQuYy0yMDMtXHRcdCAqL1xuLS1cbmtlcm5lbC9icGYvb2ZmbG9hZC5jPTg2MT1zdGF0aWMgaW50IF9faW5pdCBicGZfb2ZmbG9hZF9pbml0KHZvaWQpXG5rZXJuZWwvYnBmL29mZmxvYWQuYy04NjIte1xua2VybmVsL2JwZi9vZmZsb2FkLmM6ODYzOlx0cmV0dXJuIHJoYXNodGFibGVfaW5pdChcdTAwMjZvZmZkZXZzLCBcdTAwMjZvZmZkZXZzX3BhcmFtcyk7XG5rZXJuZWwvYnBmL29mZmxvYWQuYy04NjQtfVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTEzODI9c3RhdGljIGludCBtYXBfY3JlYXRlX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0ciwgc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNDMzLVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTQzNDpcdC8qIGZpbmQgbWFwIHR5cGUgYW5kIGluaXQgbWFwOiBoYXNodGFibGUgdnMgcmJ0cmVlIHZzIGJsb29tIHZzIC4uLiAqL1xua2VybmVsL2JwZi9zeXNjYWxsLmMtMTQzNS1cdG1hcF90eXBlID0gYXR0ci1cdTAwM2VtYXBfdHlwZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTg6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxMDUKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIGl0OgoKKipDaGVja2luZyBLY29uZmlnIGZvciBCUEZfU1lTQ0FMTCoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW4uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IHRoZSBCUEZfU1lTQ0FMTCBvcHRpb24gY29uZmlndXJlZCBjb3JyZWN0bHkuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGNvbnN1bHQgdGhlIEtjb25maWcgZmlsZXMuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIHJpZ2h0PyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIHRoZSBjb3JlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzIOKAkyBwZXJoYXBzIGluIHRoZSBuZXR3b3JraW5nIG9yIHNlY3VyaXR5IHNlY3Rpb25zLCBkZXBlbmRpbmcgb24gaG93IGl0JiMzOTtzIGltcGxlbWVudGVkLiBJJiMzOTttIGxvb2tpbmcgZm9yIGEgc3RyYWlnaHRmb3J3YXJkIGRlZmluaXRpb24gb3IgYSBjb25kaXRpb25hbCBkZXBlbmRlbmN5IHRoYXQgY291bGQgaW1wYWN0IHRoaXMgc2V0dGluZy4gSXQmIzM5O3MgcG9zc2libGUgSSYjMzk7bGwgbmVlZCB0byB0cmFjZSBkZXBlbmRlbmNpZXMgYmFja3dhcmQgaWYgaXQmIzM5O3Mgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMuIEtub3dpbmcgbXkgd2F5IGFyb3VuZCB0aGUgY29uZmlnIHN5c3RlbSwgSSBleHBlY3QgSSBzaG91bGQgYmUgYWJsZSB0byBxdWlja2x5IGRldGVybWluZSBpZiBpdCYjMzk7cyBlbmFibGVkLCBkaXNhYmxlZCwgb3Igc2V0IHRvIGEgbW9kdWxlLiBJIGFtIGFsc28gcGxhbm5pbmcgdG8gbG9vayBmb3IgYW55IGRlZmF1bHQgc2V0dGluZ3MgYXNzb2NpYXRlZCB3aXRoIGl0LCBvciBtYXliZSBhbnkgYXNzb2NpYXRlZCBtZW51IGVudHJpZXMuIFRoZW4gSSYjMzk7bGwgY2hlY2sgYW5kIG1ha2Ugc3VyZSB0aGF0IHRoaXMgc2V0dGluZyBpcyBhcHByb3ByaWF0ZSBmb3IgdGhpcyBidWlsZCBhcmNoaXRlY3R1cmUsIGFuZCBhbnkgcmVsYXRlZCBkZXBlbmRlbmNpZXMgb3IgY29uZmxpY3RzLiBMZXQmIzM5O3MgZ2V0IHRvIGl0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxODo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTg6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzOTEKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkh1bnRpbmcgZm9yIEJQRl9TWVNDQUxMIGluIHRoZSBDb25maWcqKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciBgQlBGX1NZU0NBTExgLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGFzc3VtaW5nIGl0JiMzOTtzIGxpa2VseSBhIGtlcm5lbCBjb25maWd1cmF0aW9uIHBhcmFtZXRlciwgcHJvYmFibHkgdW5kZXIgb25lIG9mIHRoZSBicm9hZGVyIEJQRiBvciBzZWN1cml0eS1yZWxhdGVkIHNlY3Rpb25zLiBTaW5jZSBpdCYjMzk7cyBhIHN5c2NhbGwtcmVsYXRlZCBmZWF0dXJlLCBJIGNhbiBhbG1vc3QgZ3VhcmFudGVlIGl0cyBleGlzdGVuY2UuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdCYjMzk7cyBkZWZpbmVkIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB1c2UgdGhlIHN0YW5kYXJkIHRvb2xzOyBhIGBncmVwYCB0aHJvdWdoIHRoZSBrZXJuZWwmIzM5O3MgYEtjb25maWdgIGZpbGVzIHNob3VsZCBkbyB0aGUgdHJpY2ssIG1heWJlIHN0YXJ0aW5nIHdpdGggYSB3aWxkY2FyZCBzZWFyY2ggbGlrZSBgS2NvbmZpZyogQlBGX1NZU0NBTExgLiBPciBwZXJoYXBzIEkgd2lsbCB1c2UgJiMzOTtmaW5kJiMzOTsgYW5kICYjMzk7Z3JlcCYjMzk7IGNvbW1hbmRzIHRvIHNlYXJjaC4gRGVwZW5kaW5nIG9uIHRoZSBzaXplIG9mIHRoZSBjb2RlYmFzZSwgSSBtaWdodCBuZWVkIHRvIHJlZmluZSB0aGF0IHNlYXJjaCBpZiBpdCYjMzk7cyB0b28gYnJvYWQgaW5pdGlhbGx5LiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGNvbnRleHQgYXJvdW5kIHRoYXQgb3B0aW9uIOKAkyB3aGF0IG90aGVyIGZlYXR1cmVzIGRvZXMgaXQgZW5hYmxlIG9yIGRpc2FibGU/IEFyZSB0aGVyZSBhbnkgcHJlcmVxdWlzaXRlcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFuZCBtb3JlIGltcG9ydGFudGx5LCB3aGF0JiMzOTtzIHRoZSBkZWZhdWx0IHZhbHVlIGFuZCB3aGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdD8gSSYjMzk7bGwgcHJvYmFibHkgYWxzbyBjaGVjayByZWxldmFudCBgTWFrZWZpbGVgcyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGNvbmZpZyBvcHRpb24gdHJhbnNsYXRlcyBpbnRvIGJ1aWxkIGZsYWdzIGFuZCB1bHRpbWF0ZWx5LCBob3cgaXQgYWZmZWN0cyB0aGUgZ2VuZXJhdGVkIGtlcm5lbCBjb2RlLiBJZGVhbGx5LCBJJiMzOTtsbCBmaW5kIGEgY29uY2lzZSBkZXNjcmlwdGlvbiBvZiB3aGF0IHRoZSBvcHRpb24gYWN0dWFsbHkgKmRvZXMqIGFsb25nIHRoZSB3YXkuIFRoYXQmIzM5O3MgdGhlIHByaW9yaXR5IHJpZ2h0IG5vdywgZmluZGluZyBpdHMgZGVmaW5pdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTg6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yOT1tZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy0zMC1cbmtlcm5lbC9icGYvS2NvbmZpZzozMTpjb25maWcgQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy0zMi1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE4OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODMyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwmIzM5O3MgQlBGIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBzdGFydCB3aXRoIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoZSBCZXJrZWxleSBQYWNrZXQgRmlsdGVyIChCUEYpIHN1YnN5c3RlbS4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYXZhaWxhYmxlIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBiZWZvcmUgSSBnbyBkZWVwZXIuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIGxvb2sgYXQgYGtlcm5lbC9icGYvS2NvbmZpZ2AuIFRoaXMgS2NvbmZpZyBmaWxlIHdpbGwgYmUgdGhlIGNlbnRyYWwgcG9pbnQgdG8gdW5kZXJzdGFuZCBob3cgQlBGIGlzIGludGVncmF0ZWQgaW50byB0aGUga2VybmVsJiMzOTtzIGJ1aWxkIHN5c3RlbSBhbmQgd2hhdCBmZWF0dXJlcyBjYW4gYmUgZW5hYmxlZCBvciBkaXNhYmxlZC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBCUEYgY29udHJvbHMgYXJlIGRlZmluZWQsIGFuZCB3aGVyZSBJIGNhbiBzdGFydCB1bnRhbmdsaW5nIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gZGlmZmVyZW50IEJQRiBmZWF0dXJlcy4gVGhpcyBpcyB0aGUgbG9naWNhbCBmaXJzdCBzdGVwIGZvciBtZSB0byB1bmRlcnN0YW5kIGhvdyBCUEYgZml0cyBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxODo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzA6XHRcbiAgMzE6XHRjb25maWcgQlBGX1NZU0NBTExcbiAgMzI6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4gIDMzOlx0XHRzZWxlY3QgQlBGXG4gIDM0Olx0XHRzZWxlY3QgSVJRX1dPUktcbiAgMzU6XHRcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxuICAzNjpcdFx0c2VsZWN0IFRBU0tTX1RSQUNFX1JDVVxuICAzNzpcdFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcbiAgMzg6XHRcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXG4gIDM5Olx0XHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcbiAgNDA6XHRcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXG4gIDQxOlx0XHRkZWZhdWx0IG5cbiAgNDI6XHRcdGhlbHBcbiAgNDM6XHRcdCAgRW5hYmxlIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIEJQRiBwcm9ncmFtc1xuICA0NDpcdFx0ICBhbmQgbWFwcyB2aWEgZmlsZSBkZXNjcmlwdG9ycy5cbiAgNDU6XHRcbiAgNDY6XHRjb25maWcgQlBGX0pJVFxuICA0NzpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclwmIzM0O1xuICA0ODpcdFx0ZGVwZW5kcyBvbiBCUEZcbiAgNDk6XHRcdGRlcGVuZHMgb24gSEFWRV9DQlBGX0pJVCB8fCBIQVZFX0VCUEZfSklUXG4gIDUwOlx0XHRzZWxlY3QgRVhFQ01FTVxuICA1MTpcdFx0aGVscFxuICA1MjpcdFx0ICBCUEYgcHJvZ3JhbXMgYXJlIG5vcm1hbGx5IGhhbmRsZWQgYnkgYSBCUEYgaW50ZXJwcmV0ZXIuIFRoaXMgb3B0aW9uXG4gIDUzOlx0XHQgIGFsbG93cyB0aGUga2VybmVsIHRvIGdlbmVyYXRlIG5hdGl2ZSBjb2RlIHdoZW4gYSBwcm9ncmFtIGlzIGxvYWRlZFxuICA1NDpcdFx0ICBpbnRvIHRoZSBrZXJuZWwuIFRoaXMgd2lsbCBzaWduaWZpY2FudGx5IHNwZWVkLXVwIHByb2Nlc3Npbmcgb2YgQlBGXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE4OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1Mzk1CgkJCQkJCQlvdXRwdXQ6IDI2NQoJCQkJCQkJdGhvdWdodHM6IDExNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgSGFzaHRhYmxlIEJhdGNoIExvb2t1cC9EZWxldGUgUGF0Y2ggZm9yIEZ1enppbmcqKgoKT2theSwgc28gdGhlIGNvbmZpZyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGlzIGBCUEZfU1lTQ0FMTGAuIExldCYjMzk7cyBkaXZlIGluIGFuZCBzZWUgd2hhdCYjMzk7cyBjaGFuZ2VkLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGtlcm5lbC9icGYvaGFzaHRhYi5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCgpYCBmdW5jdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQmIzM5O3MgdGhlIGNvcmUgaXNzdWU/IEFoLCBpdCBhcHBlYXJzIHRoYXQgd2hlbiBpdGVyYXRpbmcgdGhyb3VnaCBlbXB0eSBidWNrZXRzIGR1cmluZyBhIGJhdGNoIGxvb2t1cC9kZWxldGUsIHRoZSBvcmlnaW5hbCBjb2RlIHVzZWQgdG8ganVzdCBsb29wIHdpdGhvdXQgZHJvcHBpbmcgUkNVLCBlbmFibGluZyBpbnN0cnVtZW50YXRpb24sIG9yIHJlc2NoZWR1bGluZywgcG90ZW50aWFsbHkgbGVhZGluZyB0byBSQ1Ugc3RhbGxzIG9yIHByb2xvbmdlZCBwZXJpb2RzIHdoZXJlIGluc3RydW1lbnRhdGlvbiBpcyBkaXNhYmxlZCwgZXNwZWNpYWxseSBpbiBzcGFyc2UgaGFzaCBtYXBzLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSByZXNjaGVkdWxpbmcgbWVjaGFuaXNtIChgSFRBQl9CQVRDSF9FTVBUWV9SRVNDSEVEIDY0YCkgYWZ0ZXIgYSBjZXJ0YWluIG51bWJlciBvZiBlbXB0eSBidWNrZXRzLCB3aGljaCBzZWVtcyBsaWtlIGEgZ29vZCBpbXByb3ZlbWVudC4gSXQmIzM5O3MgZXNzZW50aWFsbHkgZHJvcHBpbmcgUkNVLCBlbmFibGluZyBpbnN0cnVtZW50YXRpb24sIGNhbGxpbmcgYGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKWAsIGFuZCB0aGVuIHJlc3RhcnRpbmcgdGhlIGxvb3AuIFRoaXMgYWxzbyBjYWxscyBgY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpYCB3aGVuIGFkdmFuY2luZyB0byB0aGUgbmV4dCBub24tZW1wdHkgYnVja2V0LgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcywgaXMgdGhpcyBjb2RlIHJlYWNoYWJsZT8gQWJzb2x1dGVseSEgVGhpcyBjaGFuZ2UgZGlyZWN0bHkgYWZmZWN0cyB0aGUgYGJwZigpYCBzeXNjYWxsJiMzOTtzIG1hcCBiYXRjaCBvcGVyYXRpb25zOiBgaHRhYl9tYXBfbG9va3VwX2JhdGNoYCwgYGh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgYGh0YWJfbHJ1X21hcF9sb29rdXBfYmF0Y2hgLCBgaHRhYl9scnVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgYGh0YWJfcGVyY3B1X21hcF9sb29rdXBfYmF0Y2hgLCBgaHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgYGh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2JhdGNoYCwgYW5kIGBodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCB3aGljaCBhcmUgaW52b2tlZCBmcm9tIHVzZXJzcGFjZSB2aWEgYHN5c19icGYoKWAgd2l0aCBgQlBGX01BUF9MT09LVVBfQkFUQ0hgIGFuZCBgQlBGX01BUF9MT09LVVBfQU5EX0RFTEVURV9CQVRDSGAuCgpUaGUgY29yZSBzdWJzeXN0ZW0gdG91Y2hlZCBoZXJlIGlzIEJQRiBtYXAgaGFuZGxpbmcgYW5kIHN5c2NhbGwgaGFuZGxpbmcuIFRoaXMgaXMgcmlnaHQgaW4gdGhlIHdoZWVsaG91c2UgZm9yIHBvdGVudGlhbCBjb25jdXJyZW5jeSBidWdzLiBJdCYjMzk7cyB0b3RhbGx5IHBsYXVzaWJsZSB0aGF0IHRoaXMgY291bGQgaW50cm9kdWNlIFJDVSBsaWZldGltZSBpc3N1ZXMsIHN0YXRlIGNvcnJ1cHRpb24sIGluZmluaXRlIGxvb3BzLCBvciBldmVuIG1pc3NlZCBlbGVtZW50cyBkdXJpbmcgYmF0Y2ggb3BlcmF0aW9ucyBpZiByZXNjaGVkdWxpbmcgaGFwcGVucyBtaWQtaXRlcmF0aW9uLCBlc3BlY2lhbGx5IHdpdGggY29uY3VycmVudCB1cGRhdGVzL2RlbGV0aW9ucyBvciBsYXJnZSwgc3BhcnNlIGhhc2ggbWFwcy4gR2l2ZW4gdGhlIGNyaXRlcmlhLCB0aGlzIGlzIGEgZGVmaW5pdGUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLgoKTG9va2luZyBhdCB0aGUgcG9zaXRpdmUgY3JpdGVyaWEsIHRoaXMgcGF0Y2ggZGVmaW5pdGl2ZWx5IHRvdWNoZXMgJiMzNDtyZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlJiMzNDsgd2l0aGluIGEgY29yZSBzdWJzeXN0ZW0gKEJQRiBhbmQgc3lzY2FsbCBoYW5kbGluZyksIHNvIHRoZSB2ZXJkaWN0IGlzIGEgcmVzb3VuZGluZyBgdHJ1ZWAgZm9yIGBXb3J0aEZ1enppbmdgLgoKRm9yIGZvY3VzIHN5bWJvbHMsIHdlJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uIGFsbCB0aGUgYmF0Y2ggb3BlcmF0aW9uczogYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgLCBgaHRhYl9tYXBfbG9va3VwX2JhdGNoYCwgYGh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgYGh0YWJfbHJ1X21hcF9sb29rdXBfYmF0Y2hgLCBgaHRhYl9scnVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgYGh0YWJfcGVyY3B1X21hcF9sb29rdXBfYmF0Y2hgLCBgaHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgYGh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2JhdGNoYCwgYW5kIGBodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYC4gV2UgYXJlIGRpcmVjdGx5IHRhcmdldGluZyB0aGUgZnVuY3Rpb25zIG1vZGlmaWVkIGFuZCBhbGwgZW50cnkgcG9pbnRzLgoKVGhlIG5lY2Vzc2FyeSBjb25maWcgaXMganVzdCBgQlBGX1NZU0NBTExgLCBub3RoaW5nIGVsc2UgbmVlZGVkLgoKVGhlcmVmb3JlLCBvdXIgZmluYWwgYXNzZXNzbWVudCBpczoKCiogICBgV29ydGhGdXp6aW5nYDogYHRydWVgCiogICBgRW5hYmxlQ29uZmlnc2A6IGBbJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7XWAKKiAgIGBGb2N1c1N5bWJvbHNgOiBgWyYjMzQ7X19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCYjMzQ7LCAmIzM0O2h0YWJfbWFwX2xvb2t1cF9iYXRjaCYjMzQ7LCAmIzM0O2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoJiMzNDssICYjMzQ7aHRhYl9scnVfbWFwX2xvb2t1cF9iYXRjaCYjMzQ7LCAmIzM0O2h0YWJfbHJ1X21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCYjMzQ7LCAmIzM0O2h0YWJfcGVyY3B1X21hcF9sb29rdXBfYmF0Y2gmIzM0OywgJiMzNDtodGFiX3BlcmNwdV9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gmIzM0OywgJiMzNDtodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9iYXRjaCYjMzQ7LCAmIzM0O2h0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gmIzM0O11gCiogICBSZWFzb25pbmc6IFRoZSBwYXRjaCBtb2RpZmllcyBjcml0aWNhbCBCUEYgYW5kIHN5c2NhbGwgaGFuZGxpbmcgY29kZSByZWxhdGVkIHRvIG1hcCBiYXRjaCBvcGVyYXRpb25zLiBUaGUgcG90ZW50aWFsIGZvciBjb25jdXJyZW5jeSBpc3N1ZXMgaW4gdGhlIGhhbmRsaW5nIG9mIHNwYXJzZSBoYXNoIG1hcHMgd2FycmFudHMgcmlnb3JvdXMgZnV6emluZy4KCk5vdywgbGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTg6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCYjMzQ7LAogICAgJiMzNDtodGFiX21hcF9sb29rdXBfYmF0Y2gmIzM0OywKICAgICYjMzQ7aHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gmIzM0OywKICAgICYjMzQ7aHRhYl9scnVfbWFwX2xvb2t1cF9iYXRjaCYjMzQ7LAogICAgJiMzNDtodGFiX2xydV9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gmIzM0OywKICAgICYjMzQ7aHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9iYXRjaCYjMzQ7LAogICAgJiMzNDtodGFiX3BlcmNwdV9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gmIzM0OywKICAgICYjMzQ7aHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfYmF0Y2gmIzM0OywKICAgICYjMzQ7aHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmF0Y2ggbG9va3VwIGFuZCBkZWxldGUgaXRlcmF0aW9uIGxvZ2ljIGluIGtlcm5lbC9icGYvaGFzaHRhYi5jIChfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKSB0byBpbnRyb2R1Y2UgcGVyaW9kaWMgcmVzY2hlZHVsaW5nIChjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKSBhbmQgUkNVIGNyaXRpY2FsIHNlY3Rpb24gZXhpdHMgd2hlbiBlbmNvdW50ZXJpbmcgY29uc2VjdXRpdmUgZW1wdHkgYnVja2V0cy4gVGhpcyBhbHRlcnMgUkNVIHN5bmNocm9uaXphdGlvbiwgbG9ja2luZywgYW5kIGl0ZXJhdGlvbiBjb250cm9sIGZsb3cgaW4gcmVhY2hhYmxlIEJQRiBtYXAgc3lzY2FsbCBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gmIzM0OywKICAgICYjMzQ7aHRhYl9tYXBfbG9va3VwX2JhdGNoJiMzNDssCiAgICAmIzM0O2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoJiMzNDssCiAgICAmIzM0O2h0YWJfbHJ1X21hcF9sb29rdXBfYmF0Y2gmIzM0OywKICAgICYjMzQ7aHRhYl9scnVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoJiMzNDssCiAgICAmIzM0O2h0YWJfcGVyY3B1X21hcF9sb29rdXBfYmF0Y2gmIzM0OywKICAgICYjMzQ7aHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoJiMzNDssCiAgICAmIzM0O2h0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2JhdGNoJiMzNDssCiAgICAmIzM0O2h0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJhdGNoIGxvb2t1cCBhbmQgZGVsZXRlIGl0ZXJhdGlvbiBsb2dpYyBpbiBrZXJuZWwvYnBmL2hhc2h0YWIuYyAoX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCkgdG8gaW50cm9kdWNlIHBlcmlvZGljIHJlc2NoZWR1bGluZyAoY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcykgYW5kIFJDVSBjcml0aWNhbCBzZWN0aW9uIGV4aXRzIHdoZW4gZW5jb3VudGVyaW5nIGNvbnNlY3V0aXZlIGVtcHR5IGJ1Y2tldHMuIFRoaXMgYWx0ZXJzIFJDVSBzeW5jaHJvbml6YXRpb24sIGxvY2tpbmcsIGFuZCBpdGVyYXRpb24gY29udHJvbCBmbG93IGluIHJlYWNoYWJsZSBCUEYgbWFwIHN5c2NhbGwgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTg6NTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxODo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgcGVyaW9kaWMgdm9sdW50YXJ5IHJlc2NoZWR1bGluZyAoYGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKWApIGFuZCBSQ1UgdW5sb2NraW5nIGFmdGVyIGl0ZXJhdGluZyBvdmVyIGEgYmF0Y2ggb2YgZW1wdHkgYnVja2V0cyAoYEhUQUJfQkFUQ0hfRU1QVFlfUkVTQ0hFRGApIGluIEJQRiBoYXNoIHRhYmxlIGJhdGNoIG9wZXJhdGlvbnMgKGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCkgdG8gcHJldmVudCBzb2Z0IGxvY2t1cHMgYW5kIFJDVSBzdGFsbHMuXG5cblRoZSBuZXdseSBpbnRyb2R1Y2VkIGNvdW50ZXIgdmFyaWFibGUgYGVtcHR5X2NudGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byAwIGFuZCBjb3JyZWN0bHkgcmVzZXQuIFRoZSBwYXRjaCBtb2RpZmllcyBvbmx5IGxvb3AgY29udHJvbCBmbG93IGFuZCBzY2hlZHVsaW5nIGJlaGF2aW9yOyBpdCBkb2VzIG5vdCBjaGFuZ2UgYnVmZmVyIGFsbG9jYXRpb24sIGRhdGEgY29weWluZyBsZW5ndGhzLCBzdHJ1Y3QgZGVmaW5pdGlvbnMsIG9yIG1lbW9yeSBpbml0aWFsaXphdGlvbiBsb2dpYywgbm9yIGRvZXMgaXQgY3JlYXRlIGFueSByaXNrIG9mIHJlYWRpbmcgb3IgbGVha2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDM3MGU2NzRmZGM2NDZiOTZmYjY4M2I1YzY1NGNjOTI3ZDBkMjgxZTIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDE4OjU0OjQ2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuYwppbmRleCA2ZjMzMWM4MDEzMGQ3Li5hNzJkYzViOWYxODRkIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2hhc2h0YWIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2hhc2h0YWIuYwpAQCAtMTc3Miw2ICYjNDM7MTc3MiwxMiBAQCBzdGF0aWMgaW50IGh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLAogCQkJCQkJIGZsYWdzKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogTWF4IGNvbnNlY3V0aXZlIGVtcHR5IGJ1Y2tldHMgdG8gd2FsayBpbiBvbmUgUkNVICYjNDM7CiYjNDM7ICogaW5zdHJ1bWVudGF0aW9uLWRpc2FibGVkIHNlY3Rpb24gYmVmb3JlIHJlc2NoZWR1bGluZy4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIEhUQUJfQkFUQ0hfRU1QVFlfUkVTQ0hFRCA2NAomIzQzOwogc3RhdGljIGludAogX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLAogCQkJCSAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLApAQCAtMTc5Myw2ICYjNDM7MTc5OSw3IEBAIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKIAlib29sIGxvY2tlZCA9IGZhbHNlOwogCXN0cnVjdCBodGFiX2VsZW0gKmw7CiYjNDM7CXUzMiBlbXB0eV9jbnQgPSAwOwogCXN0cnVjdCBidWNrZXQgKmI7CiAJaW50IHJldCA9IDA7CiAKQEAgLTE5NzEsMTIgJiM0MzsxOTc4LDIxIEBAIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwKIAl9CiAKIG5leHRfYmF0Y2g6Ci0JLyogSWYgd2UgYXJlIG5vdCBjb3B5aW5nIGRhdGEsIHdlIGNhbiBnbyB0byBuZXh0IGJ1Y2tldCBhbmQgYXZvaWQKLQkgKiB1bmxvY2tpbmcgdGhlIHJjdS4KJiM0MzsJLyoKJiM0MzsJICogSWYgd2UgYXJlIG5vdCBjb3B5aW5nIGRhdGEsIHdlIGNhbiBnbyB0byBuZXh0IGJ1Y2tldCBhbmQgYXZvaWQKJiM0MzsJICogdW5sb2NraW5nIHRoZSByY3UuIEJvdW5kIHRoZSB3YWxrIHRob3VnaDogYWZ0ZXIKJiM0MzsJICogSFRBQl9CQVRDSF9FTVBUWV9SRVNDSEVEIGNvbnNlY3V0aXZlIGVtcHR5IGJ1Y2tldHMsIGZ1bGx5IGV4aXQKJiM0MzsJICogdGhlIGNyaXRpY2FsIHNlY3Rpb24gKG5vIGxvY2tzIGFyZSBoZWxkIGhlcmUpIGFuZCByZXNjaGVkdWxlLgogCSAqLwogCWlmICghYnVja2V0X2NudCAmYW1wOyZhbXA7IChiYXRjaCAmIzQzOyAxICZsdDsgaHRhYi0mZ3Q7bl9idWNrZXRzKSkgewogCQliYXRjaCYjNDM7JiM0Mzs7Ci0JCWdvdG8gYWdhaW5fbm9jb3B5OwomIzQzOwkJaWYgKCYjNDM7JiM0MztlbXB0eV9jbnQgJmx0OyBIVEFCX0JBVENIX0VNUFRZX1JFU0NIRUQpCiYjNDM7CQkJZ290byBhZ2Fpbl9ub2NvcHk7CiYjNDM7CQllbXB0eV9jbnQgPSAwOwomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CQlicGZfZW5hYmxlX2luc3RydW1lbnRhdGlvbigpOwomIzQzOwkJY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpOwomIzQzOwkJZ290byBhZ2FpbjsKIAl9CiAKIAlyY3VfcmVhZF91bmxvY2soKTsKQEAgLTE5OTAsMTEgJiM0MzsyMDA2LDEzIEBAIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwKIAl9CiAKIAl0b3RhbCAmIzQzOz0gYnVja2V0X2NudDsKJiM0MzsJZW1wdHlfY250ID0gMDsKIAliYXRjaCYjNDM7JiM0Mzs7CiAJaWYgKGJhdGNoICZndDs9IGh0YWItJmd0O25fYnVja2V0cykgewogCQlyZXQgPSAtRU5PRU5UOwogCQlnb3RvIGFmdGVyX2xvb3A7CiAJfQomIzQzOwljb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKCk7CiAJZ290byBhZ2FpbjsKIAogYWZ0ZXJfbG9vcDoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE4OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MzMKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEhhc2h0YWJsZSBDaGFuZ2VzKioKCk9rYXksIHNvIHdlIGhhdmUgYSBwYXRjaCB0aGF0JiMzOTtzIHRvdWNoaW5nIGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCB3aXRoaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYC4gTmF0dXJhbGx5LCBJIHdhbnQgdG8gc2VlIHRoZSAqY29udGV4dCogYXJvdW5kIHRoaXMgZnVuY3Rpb24uIE1vZGlmaWNhdGlvbnMgdG8gYmF0Y2ggb3BlcmF0aW9ucyBjYW4gYmUgdHJpY2t5LCBzbyBhIHRob3JvdWdoIGluc3BlY3Rpb24gaXMgY3J1Y2lhbC4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyBob3cgdGhpcyBgbG9va3VwX2FuZF9kZWxldGVgIGZ1bmN0aW9uIGlzIGJlaGF2aW5nLiBUaGVyZWZvcmUsIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhcm91bmQgbGluZSAxNzcwIHRvIDIwMjAgd2l0aGluIHRoYXQgZmlsZS4gTGV0JiMzOTtzIGZpcmUgdXAgYHJlYWQtZmlsZWAgYW5kIHRha2UgYSBkZWVwIGRpdmUgaW50byB0aGF0IHNlY3Rpb24gb2YgYGhhc2h0YWIuY2AuIEkgbmVlZCB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiB0aGlzIGZ1bmN0aW9uJiMzOTtzIGxvZ2ljIGFuZCBhbnkgcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMgYmVmb3JlIEkgY2FuIHByb3Blcmx5IGV2YWx1YXRlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTg6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hhc2h0YWIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3ODA6XHRcbjE3ODE6XHRzdGF0aWMgaW50XG4xNzgyOlx0X19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuMTc4MzpcdFx0XHRcdFx0ICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4xNzg0Olx0XHRcdFx0XHQgICB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyLFxuMTc4NTpcdFx0XHRcdFx0ICAgYm9vbCBkb19kZWxldGUsIGJvb2wgaXNfbHJ1X21hcCxcbjE3ODY6XHRcdFx0XHRcdCAgIGJvb2wgaXNfcGVyY3B1KVxuMTc4NzpcdHtcbjE3ODg6XHRcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbjE3ODk6XHRcdHZvaWQgKmtleXMgPSBOVUxMLCAqdmFsdWVzID0gTlVMTCwgKnZhbHVlLCAqZHN0X2tleSwgKmRzdF92YWw7XG4xNzkwOlx0XHR2b2lkIF9fdXNlciAqdXZhbHVlcyA9IHU2NF90b191c2VyX3B0cihhdHRyLVx1MDAzZWJhdGNoLnZhbHVlcyk7XG4xNzkxOlx0XHR2b2lkIF9fdXNlciAqdWtleXMgPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cdTAwM2ViYXRjaC5rZXlzKTtcbjE3OTI6XHRcdHZvaWQgX191c2VyICp1YmF0Y2ggPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cdTAwM2ViYXRjaC5pbl9iYXRjaCk7XG4xNzkzOlx0XHR1MzIgYmF0Y2gsIG1heF9jb3VudCwgc2l6ZSwgYnVja2V0X3NpemUsIG1hcF9pZDtcbjE3OTQ6XHRcdHU2NCBlbGVtX21hcF9mbGFncywgbWFwX2ZsYWdzLCBhbGxvd2VkX2ZsYWdzO1xuMTc5NTpcdFx0dTMyIGJ1Y2tldF9jbnQsIHRvdGFsLCBrZXlfc2l6ZSwgdmFsdWVfc2l6ZTtcbjE3OTY6XHRcdHN0cnVjdCBodGFiX2VsZW0gKm5vZGVfdG9fZnJlZSA9IE5VTEw7XG4xNzk3Olx0XHRzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGVhZDtcbjE3OTg6XHRcdHN0cnVjdCBobGlzdF9udWxsc19ub2RlICpuO1xuMTc5OTpcdFx0dW5zaWduZWQgbG9uZyBmbGFncyA9IDA7XG4xODAwOlx0XHRib29sIGxvY2tlZCA9IGZhbHNlO1xuMTgwMTpcdFx0c3RydWN0IGh0YWJfZWxlbSAqbDtcbjE4MDI6XHRcdHUzMiBlbXB0eV9jbnQgPSAwO1xuMTgwMzpcdFx0c3RydWN0IGJ1Y2tldCAqYjtcbjE4MDQ6XHRcdGludCByZXQgPSAwO1xuMTgwNTpcdFxuMTgwNjpcdFx0ZWxlbV9tYXBfZmxhZ3MgPSBhdHRyLVx1MDAzZWJhdGNoLmVsZW1fZmxhZ3M7XG4xODA3Olx0XHRhbGxvd2VkX2ZsYWdzID0gQlBGX0ZfTE9DSztcbjE4MDg6XHRcdGlmICghZG9fZGVsZXRlIFx1MDAyNlx1MDAyNiBpc19wZXJjcHUpXG4xODA5Olx0XHRcdGFsbG93ZWRfZmxhZ3MgfD0gQlBGX0ZfQ1BVO1xuMTgxMDpcdFx0cmV0ID0gYnBmX21hcF9jaGVja19vcF9mbGFncyhtYXAsIGVsZW1fbWFwX2ZsYWdzLCBhbGxvd2VkX2ZsYWdzKTtcbjE4MTE6XHRcdGlmIChyZXQpXG4xODEyOlx0XHRcdHJldHVybiByZXQ7XG4xODEzOlx0XG4xODE0Olx0XHRtYXBfZmxhZ3MgPSBhdHRyLVx1MDAzZWJhdGNoLmZsYWdzO1xuMTgxNTpcdFx0aWYgKG1hcF9mbGFncylcbjE4MTY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xODE3Olx0XG4xODE4Olx0XHRtYXhfY291bnQgPSBhdHRyLVx1MDAzZWJhdGNoLmNvdW50O1xuMTgxOTpcdFx0aWYgKCFtYXhfY291bnQpXG4xODIwOlx0XHRcdHJldHVybiAwO1xuMTgyMTpcdFxuMTgyMjpcdFx0aWYgKHB1dF91c2VyKDAsIFx1MDAyNnVhdHRyLVx1MDAzZWJhdGNoLmNvdW50KSlcbjE4MjM6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4xODI0Olx0XG4xODI1Olx0XHRiYXRjaCA9IDA7XG4xODI2Olx0XHRpZiAodWJhdGNoIFx1MDAyNlx1MDAyNiBjb3B5X2Zyb21fdXNlcihcdTAwMjZiYXRjaCwgdWJhdGNoLCBzaXplb2YoYmF0Y2gpKSlcbjE4Mjc6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4xODI4Olx0XG4xODI5Olx0XHRpZiAoYmF0Y2ggXHUwMDNlPSBodGFiLVx1MDAzZW5fYnVja2V0cylcbjE4MzA6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4xODMxOlx0XG4xODMyOlx0XHRrZXlfc2l6ZSA9IGh0YWItXHUwMDNlbWFwLmtleV9zaXplO1xuMTgzMzpcdFx0dmFsdWVfc2l6ZSA9IGh0YWItXHUwMDNlbWFwLnZhbHVlX3NpemU7XG4xODM0Olx0XHRzaXplID0gcm91bmRfdXAodmFsdWVfc2l6ZSwgOCk7XG4xODM1Olx0XHRpZiAoaXNfcGVyY3B1IFx1MDAyNlx1MDAyNiAhKGVsZW1fbWFwX2ZsYWdzIFx1MDAyNiBCUEZfRl9DUFUpKVxuMTgzNjpcdFx0XHR2YWx1ZV9zaXplID0gc2l6ZSAqIG51bV9wb3NzaWJsZV9jcHVzKCk7XG4xODM3Olx0XHR0b3RhbCA9IDA7XG4xODM4Olx0XHQvKiB3aGlsZSBleHBlcmltZW50aW5nIHdpdGggaGFzaCB0YWJsZXMgd2l0aCBzaXplcyByYW5naW5nIGZyb20gMTAgdG9cbjE4Mzk6XHRcdCAqIDEwMDAsIGl0IHdhcyBvYnNlcnZlZCB0aGF0IGEgYnVja2V0IGNhbiBoYXZlIHVwIHRvIDUgZW50cmllcy5cbjE4NDA6XHRcdCAqL1xuMTg0MTpcdFx0YnVja2V0X3NpemUgPSA1O1xuMTg0MjpcdFxuMTg0MzpcdGFsbG9jOlxuMTg0NDpcdFx0LyogV2UgY2Fubm90IGRvIGNvcHlfZnJvbV91c2VyIG9yIGNvcHlfdG9fdXNlciBpbnNpZGVcbjE4NDU6XHRcdCAqIHRoZSByY3VfcmVhZF9sb2NrLiBBbGxvY2F0ZSBlbm91Z2ggc3BhY2UgaGVyZS5cbjE4NDY6XHRcdCAqL1xuMTg0NzpcdFx0a2V5cyA9IGt2bWFsbG9jX2FycmF5KGtleV9zaXplLCBidWNrZXRfc2l6ZSwgR0ZQX1VTRVIgfCBfX0dGUF9OT1dBUk4pO1xuMTg0ODpcdFx0dmFsdWVzID0ga3ZtYWxsb2NfYXJyYXkodmFsdWVfc2l6ZSwgYnVja2V0X3NpemUsIEdGUF9VU0VSIHwgX19HRlBfTk9XQVJOKTtcbjE4NDk6XHRcdGlmICgha2V5cyB8fCAhdmFsdWVzKSB7XG4xODUwOlx0XHRcdHJldCA9IC1FTk9NRU07XG4xODUxOlx0XHRcdGdvdG8gYWZ0ZXJfbG9vcDtcbjE4NTI6XHRcdH1cbjE4NTM6XHRcbjE4NTQ6XHRhZ2FpbjpcbjE4NTU6XHRcdGJwZl9kaXNhYmxlX2luc3RydW1lbnRhdGlvbigpO1xuMTg1NjpcdFx0cmN1X3JlYWRfbG9jaygpO1xuMTg1NzpcdGFnYWluX25vY29weTpcbjE4NTg6XHRcdGRzdF9rZXkgPSBrZXlzO1xuMTg1OTpcdFx0ZHN0X3ZhbCA9IHZhbHVlcztcbjE4NjA6XHRcdGIgPSBcdTAwMjZodGFiLVx1MDAzZWJ1Y2tldHNbYmF0Y2hdO1xuMTg2MTpcdFx0aGVhZCA9IFx1MDAyNmItXHUwMDNlaGVhZDtcbjE4NjI6XHRcdC8qIGRvIG5vdCBncmFiIHRoZSBsb2NrIHVubGVzcyBuZWVkIGl0IChidWNrZXRfY250IFx1MDAzZSAwKS4gKi9cbjE4NjM6XHRcdGlmIChsb2NrZWQpIHtcbjE4NjQ6XHRcdFx0cmV0ID0gaHRhYl9sb2NrX2J1Y2tldChiLCBcdTAwMjZmbGFncyk7XG4xODY1Olx0XHRcdGlmIChyZXQpIHtcbjE4NjY6XHRcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjE4Njc6XHRcdFx0XHRicGZfZW5hYmxlX2luc3RydW1lbnRhdGlvbigpO1xuMTg2ODpcdFx0XHRcdGdvdG8gYWZ0ZXJfbG9vcDtcbjE4Njk6XHRcdFx0fVxuMTg3MDpcdFx0fVxuMTg3MTpcdFxuMTg3MjpcdFx0YnVja2V0X2NudCA9IDA7XG4xODczOlx0XHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UobCwgbiwgaGVhZCwgaGFzaF9ub2RlKVxuMTg3NDpcdFx0XHRidWNrZXRfY250JiM0MzsmIzQzOztcbjE4NzU6XHRcbjE4NzY6XHRcdGlmIChidWNrZXRfY250IFx1MDAyNlx1MDAyNiAhbG9ja2VkKSB7XG4xODc3Olx0XHRcdGxvY2tlZCA9IHRydWU7XG4xODc4Olx0XHRcdGdvdG8gYWdhaW5fbm9jb3B5O1xuMTg3OTpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxODo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTU3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIEZ1bmN0aW9uJiMzOTtzIFN1YnNlcXVlbnQgTGluZXMqKgoKQWxyaWdodCwgSSYjMzk7dmUgZ290IHRoZSBpbml0aWFsIGxpbmVzIG9mIHRoZSBmdW5jdGlvbiBwYXJzZWQsIGFuZCBJIGhhdmUgYSBzb2xpZCBncmlwIG9uIHRoZSBpbml0aWFsIHNldHVwLiBOb3csIEkgbmVlZCB0byBnZXQgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgaXRzIG92ZXJhbGwgb3BlcmF0aW9uLiBUaW1lIHRvIHpvb20gaW4gYW5kIGRpdmUgaW50byB0aGUgcmVzdCBvZiB0aGUgZnVuY3Rpb24mIzM5O3MgbG9naWMuIFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGlzIGl0IG1hbmlwdWxhdGluZz8gV2hhdCBhcmUgdGhlIGtleSBjb25kaXRpb25hbCBicmFuY2hlcz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHBvdGVudGlhbCBlZGdlIGNhc2VzIHRoYXQganVtcCBvdXQgYXQgbWUgYXMgSSBzY2FuIHRoZSBuZXh0IHNlY3Rpb24/IEkmIzM5O20gbG9va2luZyBmb3IgcGF0dGVybnMsIHJlZHVuZGFuY2llcywgYW5kIGFueSBub24tb2J2aW91cyBvcGVyYXRpb25zIHRoYXQgbWlnaHQgYmUgY3JpdGljYWwgdG8gaXRzIG92ZXJhbGwgZWZmZWN0aXZlbmVzcy4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyBwcmVzZW50LiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIG1lYXQgb2YgdGhlIGZ1bmN0aW9uJiMzOTtzIHB1cnBvc2Ugc2hvdWxkIGJlY29tZSBhcHBhcmVudCwgYW5kIHdoZXJlIEkgY2FuIHN0YXJ0IHRvIG1ha2UgYSBmdWxsIG1lbnRhbCBtb2RlbCBvZiBpdHMgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE4OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9oYXNodGFiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODgwOlx0XG4xODgxOlx0XHRpZiAoYnVja2V0X2NudCBcdTAwM2UgKG1heF9jb3VudCAtIHRvdGFsKSkge1xuMTg4MjpcdFx0XHRpZiAodG90YWwgPT0gMClcbjE4ODM6XHRcdFx0XHRyZXQgPSAtRU5PU1BDO1xuMTg4NDpcdFx0XHQvKiBOb3RlIHRoYXQgc2luY2UgYnVja2V0X2NudCBcdTAwM2UgMCBoZXJlLCBpdCBpcyBpbXBsaWNpdFxuMTg4NTpcdFx0XHQgKiB0aGF0IHRoZSBsb2NrZWQgd2FzIGdyYWJiZWQsIHNvIHJlbGVhc2UgaXQuXG4xODg2Olx0XHRcdCAqL1xuMTg4NzpcdFx0XHRodGFiX3VubG9ja19idWNrZXQoYiwgZmxhZ3MpO1xuMTg4ODpcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjE4ODk6XHRcdFx0YnBmX2VuYWJsZV9pbnN0cnVtZW50YXRpb24oKTtcbjE4OTA6XHRcdFx0Z290byBhZnRlcl9sb29wO1xuMTg5MTpcdFx0fVxuMTg5MjpcdFxuMTg5MzpcdFx0aWYgKGJ1Y2tldF9jbnQgXHUwMDNlIGJ1Y2tldF9zaXplKSB7XG4xODk0Olx0XHRcdGJ1Y2tldF9zaXplID0gYnVja2V0X2NudDtcbjE4OTU6XHRcdFx0LyogTm90ZSB0aGF0IHNpbmNlIGJ1Y2tldF9jbnQgXHUwMDNlIDAgaGVyZSwgaXQgaXMgaW1wbGljaXRcbjE4OTY6XHRcdFx0ICogdGhhdCB0aGUgbG9ja2VkIHdhcyBncmFiYmVkLCBzbyByZWxlYXNlIGl0LlxuMTg5NzpcdFx0XHQgKi9cbjE4OTg6XHRcdFx0aHRhYl91bmxvY2tfYnVja2V0KGIsIGZsYWdzKTtcbjE4OTk6XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4xOTAwOlx0XHRcdGJwZl9lbmFibGVfaW5zdHJ1bWVudGF0aW9uKCk7XG4xOTAxOlx0XHRcdGt2ZnJlZShrZXlzKTtcbjE5MDI6XHRcdFx0a3ZmcmVlKHZhbHVlcyk7XG4xOTAzOlx0XHRcdGdvdG8gYWxsb2M7XG4xOTA0Olx0XHR9XG4xOTA1Olx0XG4xOTA2Olx0XHQvKiBOZXh0IGJsb2NrIGlzIG9ubHkgc2FmZSB0byBydW4gaWYgeW91IGhhdmUgZ3JhYmJlZCB0aGUgbG9jayAqL1xuMTkwNzpcdFx0aWYgKCFsb2NrZWQpXG4xOTA4Olx0XHRcdGdvdG8gbmV4dF9iYXRjaDtcbjE5MDk6XHRcbjE5MTA6XHRcdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3NhZmUobCwgbiwgaGVhZCwgaGFzaF9ub2RlKSB7XG4xOTExOlx0XHRcdG1lbWNweShkc3Rfa2V5LCBsLVx1MDAzZWtleSwga2V5X3NpemUpO1xuMTkxMjpcdFxuMTkxMzpcdFx0XHRpZiAoaXNfcGVyY3B1KSB7XG4xOTE0Olx0XHRcdFx0aW50IG9mZiA9IDAsIGNwdTtcbjE5MTU6XHRcdFx0XHR2b2lkIF9fcGVyY3B1ICpwcHRyO1xuMTkxNjpcdFxuMTkxNzpcdFx0XHRcdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihsLCBtYXAtXHUwMDNla2V5X3NpemUpO1xuMTkxODpcdFx0XHRcdGlmIChlbGVtX21hcF9mbGFncyBcdTAwMjYgQlBGX0ZfQ1BVKSB7XG4xOTE5Olx0XHRcdFx0XHRjcHUgPSBlbGVtX21hcF9mbGFncyBcdTAwM2VcdTAwM2UgMzI7XG4xOTIwOlx0XHRcdFx0XHRjb3B5X21hcF92YWx1ZShcdTAwMjZodGFiLVx1MDAzZW1hcCwgZHN0X3ZhbCwgcGVyX2NwdV9wdHIocHB0ciwgY3B1KSk7XG4xOTIxOlx0XHRcdFx0XHRjaGVja19hbmRfaW5pdF9tYXBfdmFsdWUoXHUwMDI2aHRhYi1cdTAwM2VtYXAsIGRzdF92YWwpO1xuMTkyMjpcdFx0XHRcdH0gZWxzZSB7XG4xOTIzOlx0XHRcdFx0XHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4xOTI0Olx0XHRcdFx0XHRcdGNvcHlfbWFwX3ZhbHVlX2xvbmcoXHUwMDI2aHRhYi1cdTAwM2VtYXAsIGRzdF92YWwgJiM0Mzsgb2ZmLFxuMTkyNTpcdFx0XHRcdFx0XHRcdFx0ICAgIHBlcl9jcHVfcHRyKHBwdHIsIGNwdSkpO1xuMTkyNjpcdFx0XHRcdFx0XHRjaGVja19hbmRfaW5pdF9tYXBfdmFsdWUoXHUwMDI2aHRhYi1cdTAwM2VtYXAsIGRzdF92YWwgJiM0Mzsgb2ZmKTtcbjE5Mjc6XHRcdFx0XHRcdFx0b2ZmICYjNDM7PSBzaXplO1xuMTkyODpcdFx0XHRcdFx0fVxuMTkyOTpcdFx0XHRcdH1cbjE5MzA6XHRcdFx0fSBlbHNlIHtcbjE5MzE6XHRcdFx0XHR2YWx1ZSA9IGh0YWJfZWxlbV92YWx1ZShsLCBrZXlfc2l6ZSk7XG4xOTMyOlx0XHRcdFx0aWYgKGlzX2ZkX2h0YWIoaHRhYikpIHtcbjE5MzM6XHRcdFx0XHRcdHN0cnVjdCBicGZfbWFwICoqaW5uZXJfbWFwID0gdmFsdWU7XG4xOTM0Olx0XG4xOTM1Olx0XHRcdFx0XHQgLyogQWN0dWFsIHZhbHVlIGlzIHRoZSBpZCBvZiB0aGUgaW5uZXIgbWFwICovXG4xOTM2Olx0XHRcdFx0XHRtYXBfaWQgPSBtYXAtXHUwMDNlb3BzLVx1MDAzZW1hcF9mZF9zeXNfbG9va3VwX2VsZW0oKmlubmVyX21hcCk7XG4xOTM3Olx0XHRcdFx0XHR2YWx1ZSA9IFx1MDAyNm1hcF9pZDtcbjE5Mzg6XHRcdFx0XHR9XG4xOTM5Olx0XG4xOTQwOlx0XHRcdFx0aWYgKGVsZW1fbWFwX2ZsYWdzIFx1MDAyNiBCUEZfRl9MT0NLKVxuMTk0MTpcdFx0XHRcdFx0Y29weV9tYXBfdmFsdWVfbG9ja2VkKG1hcCwgZHN0X3ZhbCwgdmFsdWUsXG4xOTQyOlx0XHRcdFx0XHRcdFx0ICAgICAgdHJ1ZSk7XG4xOTQzOlx0XHRcdFx0ZWxzZVxuMTk0NDpcdFx0XHRcdFx0Y29weV9tYXBfdmFsdWUobWFwLCBkc3RfdmFsLCB2YWx1ZSk7XG4xOTQ1Olx0XHRcdFx0LyogWmVyb2luZyBzcGVjaWFsIGZpZWxkcyBpbiB0aGUgdGVtcCBidWZmZXIgKi9cbjE5NDY6XHRcdFx0XHRjaGVja19hbmRfaW5pdF9tYXBfdmFsdWUobWFwLCBkc3RfdmFsKTtcbjE5NDc6XHRcdFx0fVxuMTk0ODpcdFx0XHRpZiAoZG9fZGVsZXRlKSB7XG4xOTQ5Olx0XHRcdFx0aGxpc3RfbnVsbHNfZGVsX3JjdShcdTAwMjZsLVx1MDAzZWhhc2hfbm9kZSk7XG4xOTUwOlx0XG4xOTUxOlx0XHRcdFx0LyogYnBmX2xydV9wdXNoX2ZyZWUoKSB3aWxsIGFjcXVpcmUgbHJ1X2xvY2ssIHdoaWNoXG4xOTUyOlx0XHRcdFx0ICogbWF5IGNhdXNlIGRlYWRsb2NrLiBTZWUgY29tbWVudHMgaW4gZnVuY3Rpb25cbjE5NTM6XHRcdFx0XHQgKiBwcmVhbGxvY19scnVfcG9wKCkuIExldCB1cyBkbyBicGZfbHJ1X3B1c2hfZnJlZSgpXG4xOTU0Olx0XHRcdFx0ICogYWZ0ZXIgcmVsZWFzaW5nIHRoZSBidWNrZXQgbG9jay5cbjE5NTU6XHRcdFx0XHQgKlxuMTk1NjpcdFx0XHRcdCAqIEZvciBodGFiIG9mIG1hcHMsIGh0YWJfcHV0X2ZkX3ZhbHVlKCkgaW5cbjE5NTc6XHRcdFx0XHQgKiBmcmVlX2h0YWJfZWxlbSgpIG1heSBhY3F1aXJlIGEgc3BpbmxvY2sgd2l0aCBidWNrZXRcbjE5NTg6XHRcdFx0XHQgKiBsb2NrIGJlaW5nIGhlbGQgYW5kIGl0IHZpb2xhdGVzIHRoZSBsb2NrIHJ1bGUsIHNvXG4xOTU5Olx0XHRcdFx0ICogaW52b2tlIGZyZWVfaHRhYl9lbGVtKCkgYWZ0ZXIgdW5sb2NrIGFzIHdlbGwuXG4xOTYwOlx0XHRcdFx0ICovXG4xOTYxOlx0XHRcdFx0bC1cdTAwM2ViYXRjaF9mbGluayA9IG5vZGVfdG9fZnJlZTtcbjE5NjI6XHRcdFx0XHRub2RlX3RvX2ZyZWUgPSBsO1xuMTk2MzpcdFx0XHR9XG4xOTY0Olx0XHRcdGRzdF9rZXkgJiM0Mzs9IGtleV9zaXplO1xuMTk2NTpcdFx0XHRkc3RfdmFsICYjNDM7PSB2YWx1ZV9zaXplO1xuMTk2NjpcdFx0fVxuMTk2NzpcdFxuMTk2ODpcdFx0aHRhYl91bmxvY2tfYnVja2V0KGIsIGZsYWdzKTtcbjE5Njk6XHRcdGxvY2tlZCA9IGZhbHNlO1xuMTk3MDpcdFxuMTk3MTpcdFx0d2hpbGUgKG5vZGVfdG9fZnJlZSkge1xuMTk3MjpcdFx0XHRsID0gbm9kZV90b19mcmVlO1xuMTk3MzpcdFx0XHRub2RlX3RvX2ZyZWUgPSBub2RlX3RvX2ZyZWUtXHUwMDNlYmF0Y2hfZmxpbms7XG4xOTc0Olx0XHRcdGlmIChpc19scnVfbWFwKVxuMTk3NTpcdFx0XHRcdGh0YWJfbHJ1X3B1c2hfZnJlZShodGFiLCBsKTtcbjE5NzY6XHRcdFx0ZWxzZVxuMTk3NzpcdFx0XHRcdGZyZWVfaHRhYl9lbGVtKGh0YWIsIGwpO1xuMTk3ODpcdFx0fVxuMTk3OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxODo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzY3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIEkmIzM5O20gcmVhZHkgdG8gZGl2ZSBpbi4gR2l2ZSBtZSB0aGUgdGV4dCEgSSYjMzk7bGwgcHJvY2VzcyBpdCBhbmQgZm9ybXVsYXRlIGEgZmlyc3QtcGVyc29uIHN1bW1hcnkgYXMgaWYgdGhlIHRob3VnaHRzIGRlc2NyaWJlZCAqd2VyZSogbXkgb3duLCBrZWVwaW5nIGluIG1pbmQgbXkgcHJlc3VtZWQgZXhwZXJ0aXNlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCBoZXJlLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBudWFuY2VzLCBzbyBJIHdpbGwgbWFrZSBzdXJlIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGxpbmVzIGxlYWRpbmcgdXAgdG8gMjAzMC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTg6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hhc2h0YWIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTk4MDpcdG5leHRfYmF0Y2g6XG4xOTgxOlx0XHQvKlxuMTk4MjpcdFx0ICogSWYgd2UgYXJlIG5vdCBjb3B5aW5nIGRhdGEsIHdlIGNhbiBnbyB0byBuZXh0IGJ1Y2tldCBhbmQgYXZvaWRcbjE5ODM6XHRcdCAqIHVubG9ja2luZyB0aGUgcmN1LiBCb3VuZCB0aGUgd2FsayB0aG91Z2g6IGFmdGVyXG4xOTg0Olx0XHQgKiBIVEFCX0JBVENIX0VNUFRZX1JFU0NIRUQgY29uc2VjdXRpdmUgZW1wdHkgYnVja2V0cywgZnVsbHkgZXhpdFxuMTk4NTpcdFx0ICogdGhlIGNyaXRpY2FsIHNlY3Rpb24gKG5vIGxvY2tzIGFyZSBoZWxkIGhlcmUpIGFuZCByZXNjaGVkdWxlLlxuMTk4NjpcdFx0ICovXG4xOTg3Olx0XHRpZiAoIWJ1Y2tldF9jbnQgXHUwMDI2XHUwMDI2IChiYXRjaCAmIzQzOyAxIFx1MDAzYyBodGFiLVx1MDAzZW5fYnVja2V0cykpIHtcbjE5ODg6XHRcdFx0YmF0Y2gmIzQzOyYjNDM7O1xuMTk4OTpcdFx0XHRpZiAoJiM0MzsmIzQzO2VtcHR5X2NudCBcdTAwM2MgSFRBQl9CQVRDSF9FTVBUWV9SRVNDSEVEKVxuMTk5MDpcdFx0XHRcdGdvdG8gYWdhaW5fbm9jb3B5O1xuMTk5MTpcdFx0XHRlbXB0eV9jbnQgPSAwO1xuMTk5MjpcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjE5OTM6XHRcdFx0YnBmX2VuYWJsZV9pbnN0cnVtZW50YXRpb24oKTtcbjE5OTQ6XHRcdFx0Y29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpO1xuMTk5NTpcdFx0XHRnb3RvIGFnYWluO1xuMTk5NjpcdFx0fVxuMTk5NzpcdFxuMTk5ODpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4xOTk5Olx0XHRicGZfZW5hYmxlX2luc3RydW1lbnRhdGlvbigpO1xuMjAwMDpcdFx0aWYgKGJ1Y2tldF9jbnQgXHUwMDI2XHUwMDI2IChjb3B5X3RvX3VzZXIodWtleXMgJiM0MzsgdG90YWwgKiBrZXlfc2l6ZSwga2V5cyxcbjIwMDE6XHRcdCAgICBrZXlfc2l6ZSAqIGJ1Y2tldF9jbnQpIHx8XG4yMDAyOlx0XHQgICAgY29weV90b191c2VyKHV2YWx1ZXMgJiM0MzsgdG90YWwgKiB2YWx1ZV9zaXplLCB2YWx1ZXMsXG4yMDAzOlx0XHQgICAgdmFsdWVfc2l6ZSAqIGJ1Y2tldF9jbnQpKSkge1xuMjAwNDpcdFx0XHRyZXQgPSAtRUZBVUxUO1xuMjAwNTpcdFx0XHRnb3RvIGFmdGVyX2xvb3A7XG4yMDA2Olx0XHR9XG4yMDA3Olx0XG4yMDA4Olx0XHR0b3RhbCAmIzQzOz0gYnVja2V0X2NudDtcbjIwMDk6XHRcdGVtcHR5X2NudCA9IDA7XG4yMDEwOlx0XHRiYXRjaCYjNDM7JiM0Mzs7XG4yMDExOlx0XHRpZiAoYmF0Y2ggXHUwMDNlPSBodGFiLVx1MDAzZW5fYnVja2V0cykge1xuMjAxMjpcdFx0XHRyZXQgPSAtRU5PRU5UO1xuMjAxMzpcdFx0XHRnb3RvIGFmdGVyX2xvb3A7XG4yMDE0Olx0XHR9XG4yMDE1Olx0XHRjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKCk7XG4yMDE2Olx0XHRnb3RvIGFnYWluO1xuMjAxNzpcdFxuMjAxODpcdGFmdGVyX2xvb3A6XG4yMDE5Olx0XHRpZiAocmV0ID09IC1FRkFVTFQpXG4yMDIwOlx0XHRcdGdvdG8gb3V0O1xuMjAyMTpcdFxuMjAyMjpcdFx0LyogY29weSAjIG9mIGVudHJpZXMgYW5kIG5leHQgYmF0Y2ggKi9cbjIwMjM6XHRcdHViYXRjaCA9IHU2NF90b191c2VyX3B0cihhdHRyLVx1MDAzZWJhdGNoLm91dF9iYXRjaCk7XG4yMDI0Olx0XHRpZiAoY29weV90b191c2VyKHViYXRjaCwgXHUwMDI2YmF0Y2gsIHNpemVvZihiYXRjaCkpIHx8XG4yMDI1Olx0XHQgICAgcHV0X3VzZXIodG90YWwsIFx1MDAyNnVhdHRyLVx1MDAzZWJhdGNoLmNvdW50KSlcbjIwMjY6XHRcdFx0cmV0ID0gLUVGQVVMVDtcbjIwMjc6XHRcbjIwMjg6XHRvdXQ6XG4yMDI5Olx0XHRrdmZyZWUoa2V5cyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE4OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNTUKCQkJCQkJCW91dHB1dDogMTgwCgkJCQkJCQl0aG91Z2h0czogODY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIEhhc2h0YWIgQmF0Y2ggTG9va3VwL0RlbGV0ZSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBhbmQgc3RhYmlsaXR5IGlzc3VlIHdpdGhpbiB0aGUgQlBGIGhhc2h0YWIgYmF0Y2ggbG9va3VwL2RlbGV0ZSBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IHRoZSBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAgZnVuY3Rpb24uIFRoZSBjb3JlIHByb2JsZW0gd2FzIHRoYXQgd2hlbiBkZWFsaW5nIHdpdGggYSBCUEYgaGFzaHRhYiB3aXRoIGEgaGlnaCBudW1iZXIgb2YgZW1wdHkgYnVja2V0cywgdGhlIGtlcm5lbCBjb3VsZCBnZXQgc3R1Y2sgaW4gYSB0aWdodCBsb29wIHVuZGVyIGByY3VfcmVhZF9sb2NrKClgIGFuZCB3aXRoIGluc3RydW1lbnRhdGlvbiBkaXNhYmxlZC4gVGhpcyBsZWQgdG8gcG90ZW50aWFsIFJDVSBzdGFsbHMsIHNvZnQgbG9ja3Vwcywgb3IgZXZlbiB3YXRjaGRvZyB0aW1lb3V0cy4KClRoZSBmaXggaW50cm9kdWNlcyBhIG5ldyBjb25zdGFudCwgYEhUQUJfQkFUQ0hfRU1QVFlfUkVTQ0hFRGAsIHdoaWNoIGFwcGVhcnMgdG8gYmUgc2V0IHRvIDY0LiAgQW4gYGVtcHR5X2NudGAgdmFyaWFibGUgaXMgYWxzbyBpbnRyb2R1Y2VkIGFzIGEgY291bnRlci4gVGhlIGxvZ2ljIG5vdyB3b3JrcyBsaWtlIHRoaXM6ICBJbnN0ZWFkIG9mIGxvb3BpbmcgZW5kbGVzc2x5IG9uIGVtcHR5IGJ1Y2tldHMsIHRoZSBjb2RlIG5vdyBpbmNyZW1lbnRzIGBlbXB0eV9jbnRgIHdpdGggZWFjaCBlbXB0eSBidWNrZXQgc2tpcHBlZC4gSWYgYGVtcHR5X2NudGAgaXMgbGVzcyB0aGFuIGBIVEFCX0JBVENIX0VNUFRZX1JFU0NIRURgLCBpdCBjb250aW51ZXMgc2tpcHBpbmcuIEJ1dCBpZiBgZW1wdHlfY250YCByZWFjaGVzIG9yIGV4Y2VlZHMgYEhUQUJfQkFUQ0hfRU1QVFlfUkVTQ0hFRGAsIHRoZSBsb29wICpyZXNjaGVkdWxlcyogdXNpbmcgYHJjdV9yZWFkX3VubG9jaygpYCwgYGJwZl9lbmFibGVfaW5zdHJ1bWVudGF0aW9uKClgLCBhbmQgYGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKWAsIGVzc2VudGlhbGx5IHlpZWxkaW5nIGNvbnRyb2wgYmVmb3JlIHJlc3VtaW5nLiBUaGlzIGlzIGFsc28gZG9uZSB3aGVuIGFjdHVhbGx5IHByb2Nlc3NpbmcgZGF0YSAoYGJ1Y2tldF9jbnQgJmd0OyAwYCkuIFRoaXMgcHJldmVudHMgdGhlIHRpZ2h0IGxvb3AuCgpNeSBwcmltYXJ5IGNvbmNlcm4gaXMgYWx3YXlzIGFyb3VuZCBtZW1vcnkgc2FmZXR5LCBzbyBJJiMzOTt2ZSBjYXJlZnVsbHkgZXhhbWluZWQgdGhlIHBhdGNoIGZvciBhbnkgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gIEkmIzM5O3ZlIGNoZWNrZWQ6CgoxLiAgYGVtcHR5X2NudGA6IFByb3Blcmx5IGluaXRpYWxpemVkIHRvIHplcm8gYXQgZnVuY3Rpb24gZW50cnkuCjIuICBCdWZmZXIgc2l6aW5nLCBtZW1vcnkgaW5pdGlhbGl6YXRpb24sIGNvcHkgc2l6ZXMsIGFuZCBkYXRhIGxheW91dC4gIEV2ZXJ5dGhpbmcgbG9va3Mgc291bmQuICBga2V5c2AgYW5kIGB2YWx1ZXNgIGFyZSBjb3JyZWN0bHkgYWxsb2NhdGVkIHZpYSBga3ZtYWxsb2NfYXJyYXlgLCBmaWxsZWQgb25seSB3aGVuIGBidWNrZXRfY250ICZndDsgMGAgKGFuZCBgbG9ja2VkYCBpcyB0cnVlKSwgYW5kIGNvcGllZCB0byB1c2VyIHNwYWNlIHdpdGggdGhlIHJpZ2h0IHNpemUuCjMuICBVbmluaXRpYWxpemVkIHZhcmlhYmxlcywgdXNlci1zcGFjZSBpbmZvLWxlYWtzLCBvciB1bmluaXRpYWxpemVkIHBhZGRpbmc6IFRoZSBgYmF0Y2hgLCBgdG90YWxgIGFuZCBgZW1wdHlfY250YCB2YXJpYWJsZXMgYXJlIGFsbCBwcm9wZXJseSBpbml0aWFsaXplZCBvciB1c2VkLiBgY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpYCBkb2VzbiYjMzk7dCB0b3VjaCBtZW1vcnkgZGlyZWN0bHksIGl0IHNpbXBseSBmYWNpbGl0YXRlcyByZXNjaGVkdWxpbmcuCgpUaGVyZWZvcmUsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBleHBvc2UgYW55IGtlcm5lbCBpbmZvLWxlYWtzLgoKQ29uc2lkZXJpbmcgdGhhdCB0aGUgcGF0Y2ggZm9jdXNlcyBvbiBsb29wIGNvbnRyb2wgZmxvdyBhbmQgdm9sdW50YXJ5IHByZWVtcHRpb24gdG8gcHJldmVudCBSQ1Ugc3RhbGxzL3NvZnQgbG9ja3VwcywgSSBkb24mIzM5O3Qgc2VlIGFueSBjaGFuZ2VzIHRoYXQgd291bGQgdHJpZ2dlciBLQVNBTiBvciBLTVNBTiBpc3N1ZXMuIFRoZXJlIGFyZSBubyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gY2hhbmdlcywgbm8gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBubyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgcmVhZHMsIGFuZCBubyBpbmZvIGxlYWtzLiBUaGlzIHBhdGNoIGlzIGZ1bmRhbWVudGFsbHkgYWRkcmVzc2luZyBsYXRlbmN5IGFuZCBzY2hlZHVsaW5nLCBub3QgbWVtb3J5IGNvcnJ1cHRpb24sIHdoaWNoIGlzIG1vcmUgb2YgYSBsb2NrZGVwIG9yIFJDVSBzdGFsbCBkZXRlY3RvciBjb25jZXJuLiAgU28sIGBOZWVkc0tNU0FOYCBzaG91bGQgZGVmaW5pdGVseSBiZSBgZmFsc2VgLiBJJiMzOTt2ZSBkb3VibGUtY2hlY2tlZCBteSBhbmFseXNpcywgYW5kIEkmIzM5O20gcHJlcGFyZWQgdG8gc2V0IHRoZSByZXN1bHRzIGFjY29yZGluZ2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxODo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHBlcmlvZGljIHZvbHVudGFyeSByZXNjaGVkdWxpbmcgKGBjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKClgKSBhbmQgUkNVIHVubG9ja2luZyBhZnRlciBpdGVyYXRpbmcgb3ZlciBhIGJhdGNoIG9mIGVtcHR5IGJ1Y2tldHMgKGBIVEFCX0JBVENIX0VNUFRZX1JFU0NIRURgKSBpbiBCUEYgaGFzaCB0YWJsZSBiYXRjaCBvcGVyYXRpb25zIChgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGApIHRvIHByZXZlbnQgc29mdCBsb2NrdXBzIGFuZCBSQ1Ugc3RhbGxzLlxuXG5UaGUgbmV3bHkgaW50cm9kdWNlZCBjb3VudGVyIHZhcmlhYmxlIGBlbXB0eV9jbnRgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gMCBhbmQgY29ycmVjdGx5IHJlc2V0LiBUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSBsb29wIGNvbnRyb2wgZmxvdyBhbmQgc2NoZWR1bGluZyBiZWhhdmlvcjsgaXQgZG9lcyBub3QgY2hhbmdlIGJ1ZmZlciBhbGxvY2F0aW9uLCBkYXRhIGNvcHlpbmcgbGVuZ3Rocywgc3RydWN0IGRlZmluaXRpb25zLCBvciBtZW1vcnkgaW5pdGlhbGl6YXRpb24gbG9naWMsIG5vciBkb2VzIGl0IGNyZWF0ZSBhbnkgcmlzayBvZiByZWFkaW5nIG9yIGxlYWtpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHBlcmlvZGljIHZvbHVudGFyeSByZXNjaGVkdWxpbmcgKGBjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKClgKSBhbmQgUkNVIHVubG9ja2luZyBhZnRlciBpdGVyYXRpbmcgb3ZlciBhIGJhdGNoIG9mIGVtcHR5IGJ1Y2tldHMgKGBIVEFCX0JBVENIX0VNUFRZX1JFU0NIRURgKSBpbiBCUEYgaGFzaCB0YWJsZSBiYXRjaCBvcGVyYXRpb25zIChgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGApIHRvIHByZXZlbnQgc29mdCBsb2NrdXBzIGFuZCBSQ1Ugc3RhbGxzLlxuXG5UaGUgbmV3bHkgaW50cm9kdWNlZCBjb3VudGVyIHZhcmlhYmxlIGBlbXB0eV9jbnRgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gMCBhbmQgY29ycmVjdGx5IHJlc2V0LiBUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSBsb29wIGNvbnRyb2wgZmxvdyBhbmQgc2NoZWR1bGluZyBiZWhhdmlvcjsgaXQgZG9lcyBub3QgY2hhbmdlIGJ1ZmZlciBhbGxvY2F0aW9uLCBkYXRhIGNvcHlpbmcgbGVuZ3Rocywgc3RydWN0IGRlZmluaXRpb25zLCBvciBtZW1vcnkgaW5pdGlhbGl6YXRpb24gbG9naWMsIG5vciBkb2VzIGl0IGNyZWF0ZSBhbnkgcmlzayBvZiByZWFkaW5nIG9yIGxlYWtpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE4OjU0OjQ4LjQyMDgzMTM5NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MzI1MDMzMzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaFwiLFxuICAgIFwiaHRhYl9tYXBfbG9va3VwX2JhdGNoXCIsXG4gICAgXCJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaFwiLFxuICAgIFwiaHRhYl9scnVfbWFwX2xvb2t1cF9iYXRjaFwiLFxuICAgIFwiaHRhYl9scnVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoXCIsXG4gICAgXCJodGFiX3BlcmNwdV9tYXBfbG9va3VwX2JhdGNoXCIsXG4gICAgXCJodGFiX3BlcmNwdV9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hcIixcbiAgICBcImh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2JhdGNoXCIsXG4gICAgXCJodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHBlcmlvZGljIHZvbHVudGFyeSByZXNjaGVkdWxpbmcgKGBjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKClgKSBhbmQgUkNVIHVubG9ja2luZyBhZnRlciBpdGVyYXRpbmcgb3ZlciBhIGJhdGNoIG9mIGVtcHR5IGJ1Y2tldHMgKGBIVEFCX0JBVENIX0VNUFRZX1JFU0NIRURgKSBpbiBCUEYgaGFzaCB0YWJsZSBiYXRjaCBvcGVyYXRpb25zIChgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGApIHRvIHByZXZlbnQgc29mdCBsb2NrdXBzIGFuZCBSQ1Ugc3RhbGxzLlxcblxcblRoZSBuZXdseSBpbnRyb2R1Y2VkIGNvdW50ZXIgdmFyaWFibGUgYGVtcHR5X2NudGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byAwIGFuZCBjb3JyZWN0bHkgcmVzZXQuIFRoZSBwYXRjaCBtb2RpZmllcyBvbmx5IGxvb3AgY29udHJvbCBmbG93IGFuZCBzY2hlZHVsaW5nIGJlaGF2aW9yOyBpdCBkb2VzIG5vdCBjaGFuZ2UgYnVmZmVyIGFsbG9jYXRpb24sIGRhdGEgY29weWluZyBsZW5ndGhzLCBzdHJ1Y3QgZGVmaW5pdGlvbnMsIG9yIG1lbW9yeSBpbml0aWFsaXphdGlvbiBsb2dpYywgbm9yIGRvZXMgaXQgY3JlYXRlIGFueSByaXNrIG9mIHJlYWRpbmcgb3IgbGVha2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmF0Y2ggbG9va3VwIGFuZCBkZWxldGUgaXRlcmF0aW9uIGxvZ2ljIGluIGtlcm5lbC9icGYvaGFzaHRhYi5jIChfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKSB0byBpbnRyb2R1Y2UgcGVyaW9kaWMgcmVzY2hlZHVsaW5nIChjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKSBhbmQgUkNVIGNyaXRpY2FsIHNlY3Rpb24gZXhpdHMgd2hlbiBlbmNvdW50ZXJpbmcgY29uc2VjdXRpdmUgZW1wdHkgYnVja2V0cy4gVGhpcyBhbHRlcnMgUkNVIHN5bmNocm9uaXphdGlvbiwgbG9ja2luZywgYW5kIGl0ZXJhdGlvbiBjb250cm9sIGZsb3cgaW4gcmVhY2hhYmxlIEJQRiBtYXAgc3lzY2FsbCBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxODo1NDo0OC40MjA4MzU1ODVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTYyMTQ4MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzNzBlNjc0ZmRjNjQ2Yjk2ZmI2ODNiNWM2NTRjYzkyN2QwZDI4MWUyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDkgMTg6NTQ6NDYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xcbmluZGV4IDZmMzMxYzgwMTMwZDcuLmE3MmRjNWI5ZjE4NGQgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9oYXNodGFiLmNcXG4rKysgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xcbkBAIC0xNzcyLDYgKzE3NzIsMTIgQEAgc3RhdGljIGludCBodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0IGZsYWdzKTtcXG4gfVxcbiBcXG4rLypcXG4rICogTWF4IGNvbnNlY3V0aXZlIGVtcHR5IGJ1Y2tldHMgdG8gd2FsayBpbiBvbmUgUkNVICtcXG4rICogaW5zdHJ1bWVudGF0aW9uLWRpc2FibGVkIHNlY3Rpb24gYmVmb3JlIHJlc2NoZWR1bGluZy5cXG4rICovXFxuKyNkZWZpbmUgSFRBQl9CQVRDSF9FTVBUWV9SRVNDSEVEIDY0XFxuK1xcbiBzdGF0aWMgaW50XFxuIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4gXFx0XFx0XFx0XFx0ICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuQEAgLTE3OTMsNiArMTc5OSw3IEBAIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncyA9IDA7XFxuIFxcdGJvb2wgbG9ja2VkID0gZmFsc2U7XFxuIFxcdHN0cnVjdCBodGFiX2VsZW0gKmw7XFxuK1xcdHUzMiBlbXB0eV9jbnQgPSAwO1xcbiBcXHRzdHJ1Y3QgYnVja2V0ICpiO1xcbiBcXHRpbnQgcmV0ID0gMDtcXG4gXFxuQEAgLTE5NzEsMTIgKzE5NzgsMjEgQEAgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbiBcXHR9XFxuIFxcbiBuZXh0X2JhdGNoOlxcbi1cXHQvKiBJZiB3ZSBhcmUgbm90IGNvcHlpbmcgZGF0YSwgd2UgY2FuIGdvIHRvIG5leHQgYnVja2V0IGFuZCBhdm9pZFxcbi1cXHQgKiB1bmxvY2tpbmcgdGhlIHJjdS5cXG4rXFx0LypcXG4rXFx0ICogSWYgd2UgYXJlIG5vdCBjb3B5aW5nIGRhdGEsIHdlIGNhbiBnbyB0byBuZXh0IGJ1Y2tldCBhbmQgYXZvaWRcXG4rXFx0ICogdW5sb2NraW5nIHRoZSByY3UuIEJvdW5kIHRoZSB3YWxrIHRob3VnaDogYWZ0ZXJcXG4rXFx0ICogSFRBQl9CQVRDSF9FTVBUWV9SRVNDSEVEIGNvbnNlY3V0aXZlIGVtcHR5IGJ1Y2tldHMsIGZ1bGx5IGV4aXRcXG4rXFx0ICogdGhlIGNyaXRpY2FsIHNlY3Rpb24gKG5vIGxvY2tzIGFyZSBoZWxkIGhlcmUpIGFuZCByZXNjaGVkdWxlLlxcbiBcXHQgKi9cXG4gXFx0aWYgKCFidWNrZXRfY250IFxcdTAwMjZcXHUwMDI2IChiYXRjaCArIDEgXFx1MDAzYyBodGFiLVxcdTAwM2VuX2J1Y2tldHMpKSB7XFxuIFxcdFxcdGJhdGNoKys7XFxuLVxcdFxcdGdvdG8gYWdhaW5fbm9jb3B5O1xcbitcXHRcXHRpZiAoKytlbXB0eV9jbnQgXFx1MDAzYyBIVEFCX0JBVENIX0VNUFRZX1JFU0NIRUQpXFxuK1xcdFxcdFxcdGdvdG8gYWdhaW5fbm9jb3B5O1xcbitcXHRcXHRlbXB0eV9jbnQgPSAwO1xcbitcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFx0XFx0YnBmX2VuYWJsZV9pbnN0cnVtZW50YXRpb24oKTtcXG4rXFx0XFx0Y29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpO1xcbitcXHRcXHRnb3RvIGFnYWluO1xcbiBcXHR9XFxuIFxcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG5AQCAtMTk5MCwxMSArMjAwNiwxMyBAQCBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXFxuIFxcdH1cXG4gXFxuIFxcdHRvdGFsICs9IGJ1Y2tldF9jbnQ7XFxuK1xcdGVtcHR5X2NudCA9IDA7XFxuIFxcdGJhdGNoKys7XFxuIFxcdGlmIChiYXRjaCBcXHUwMDNlPSBodGFiLVxcdTAwM2VuX2J1Y2tldHMpIHtcXG4gXFx0XFx0cmV0ID0gLUVOT0VOVDtcXG4gXFx0XFx0Z290byBhZnRlcl9sb29wO1xcbiBcXHR9XFxuK1xcdGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKTtcXG4gXFx0Z290byBhZ2FpbjtcXG4gXFxuIGFmdGVyX2xvb3A6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE4OjU0OjQ5Ljg3NzczMjcwMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzgwNTQ4OTg0MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoXCIsXG4gICAgXCJodGFiX21hcF9sb29rdXBfYmF0Y2hcIixcbiAgICBcImh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoXCIsXG4gICAgXCJodGFiX2xydV9tYXBfbG9va3VwX2JhdGNoXCIsXG4gICAgXCJodGFiX2xydV9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hcIixcbiAgICBcImh0YWJfcGVyY3B1X21hcF9sb29rdXBfYmF0Y2hcIixcbiAgICBcImh0YWJfcGVyY3B1X21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaFwiLFxuICAgIFwiaHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfYmF0Y2hcIixcbiAgICBcImh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmF0Y2ggbG9va3VwIGFuZCBkZWxldGUgaXRlcmF0aW9uIGxvZ2ljIGluIGtlcm5lbC9icGYvaGFzaHRhYi5jIChfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKSB0byBpbnRyb2R1Y2UgcGVyaW9kaWMgcmVzY2hlZHVsaW5nIChjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKSBhbmQgUkNVIGNyaXRpY2FsIHNlY3Rpb24gZXhpdHMgd2hlbiBlbmNvdW50ZXJpbmcgY29uc2VjdXRpdmUgZW1wdHkgYnVja2V0cy4gVGhpcyBhbHRlcnMgUkNVIHN5bmNocm9uaXphdGlvbiwgbG9ja2luZywgYW5kIGl0ZXJhdGlvbiBjb250cm9sIGZsb3cgaW4gcmVhY2hhYmxlIEJQRiBtYXAgc3lzY2FsbCBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDM3MGU2NzRmZGM2NDZiOTZmYjY4M2I1YzY1NGNjOTI3ZDBkMjgxZTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDE4OjU0OjQ2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuaW5kZXggNmYzMzFjODAxMzBkNy4uYTcyZGM1YjlmMTg0ZCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvaGFzaHRhYi5jXG4rKysgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuQEAgLTE3NzIsNiArMTc3MiwxMiBAQCBzdGF0aWMgaW50IGh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuIFx0XHRcdFx0XHRcdCBmbGFncyk7XG4gfVxuIFxuKy8qXG4rICogTWF4IGNvbnNlY3V0aXZlIGVtcHR5IGJ1Y2tldHMgdG8gd2FsayBpbiBvbmUgUkNVICtcbisgKiBpbnN0cnVtZW50YXRpb24tZGlzYWJsZWQgc2VjdGlvbiBiZWZvcmUgcmVzY2hlZHVsaW5nLlxuKyAqL1xuKyNkZWZpbmUgSFRBQl9CQVRDSF9FTVBUWV9SRVNDSEVEIDY0XG4rXG4gc3RhdGljIGludFxuIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcdFx0XHRcdCAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuQEAgLTE3OTMsNiArMTc5OSw3IEBAIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwO1xuIFx0Ym9vbCBsb2NrZWQgPSBmYWxzZTtcbiBcdHN0cnVjdCBodGFiX2VsZW0gKmw7XG4rXHR1MzIgZW1wdHlfY250ID0gMDtcbiBcdHN0cnVjdCBidWNrZXQgKmI7XG4gXHRpbnQgcmV0ID0gMDtcbiBcbkBAIC0xOTcxLDEyICsxOTc4LDIxIEBAIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcdH1cbiBcbiBuZXh0X2JhdGNoOlxuLVx0LyogSWYgd2UgYXJlIG5vdCBjb3B5aW5nIGRhdGEsIHdlIGNhbiBnbyB0byBuZXh0IGJ1Y2tldCBhbmQgYXZvaWRcbi1cdCAqIHVubG9ja2luZyB0aGUgcmN1LlxuK1x0LypcbitcdCAqIElmIHdlIGFyZSBub3QgY29weWluZyBkYXRhLCB3ZSBjYW4gZ28gdG8gbmV4dCBidWNrZXQgYW5kIGF2b2lkXG4rXHQgKiB1bmxvY2tpbmcgdGhlIHJjdS4gQm91bmQgdGhlIHdhbGsgdGhvdWdoOiBhZnRlclxuK1x0ICogSFRBQl9CQVRDSF9FTVBUWV9SRVNDSEVEIGNvbnNlY3V0aXZlIGVtcHR5IGJ1Y2tldHMsIGZ1bGx5IGV4aXRcbitcdCAqIHRoZSBjcml0aWNhbCBzZWN0aW9uIChubyBsb2NrcyBhcmUgaGVsZCBoZXJlKSBhbmQgcmVzY2hlZHVsZS5cbiBcdCAqL1xuIFx0aWYgKCFidWNrZXRfY250IFx1MDAyNlx1MDAyNiAoYmF0Y2ggKyAxIFx1MDAzYyBodGFiLVx1MDAzZW5fYnVja2V0cykpIHtcbiBcdFx0YmF0Y2grKztcbi1cdFx0Z290byBhZ2Fpbl9ub2NvcHk7XG4rXHRcdGlmICgrK2VtcHR5X2NudCBcdTAwM2MgSFRBQl9CQVRDSF9FTVBUWV9SRVNDSEVEKVxuK1x0XHRcdGdvdG8gYWdhaW5fbm9jb3B5O1xuK1x0XHRlbXB0eV9jbnQgPSAwO1xuK1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbitcdFx0YnBmX2VuYWJsZV9pbnN0cnVtZW50YXRpb24oKTtcbitcdFx0Y29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpO1xuK1x0XHRnb3RvIGFnYWluO1xuIFx0fVxuIFxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG5AQCAtMTk5MCwxMSArMjAwNiwxMyBAQCBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXG4gXHR9XG4gXG4gXHR0b3RhbCArPSBidWNrZXRfY250O1xuK1x0ZW1wdHlfY250ID0gMDtcbiBcdGJhdGNoKys7XG4gXHRpZiAoYmF0Y2ggXHUwMDNlPSBodGFiLVx1MDAzZW5fYnVja2V0cykge1xuIFx0XHRyZXQgPSAtRU5PRU5UO1xuIFx0XHRnb3RvIGFmdGVyX2xvb3A7XG4gXHR9XG4rXHRjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKCk7XG4gXHRnb3RvIGFnYWluO1xuIFxuIGFmdGVyX2xvb3A6XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxODo1NDo0OS44Nzc3MzM5MTJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMzg2NjYxNDcwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFdmFsdWF0aW5nIHRoZSBgaGFzaHRhYi5jYCBQYXRjaCBmb3IgU3l6a2FsbGVyIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBhc3Nlc3MgaWYgdGhpcyBtb2RpZmljYXRpb24gdG8gYGtlcm5lbC9icGYvaGFzaHRhYi5jYOKAlHNwZWNpZmljYWxseSBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGDigJRqdXN0aWZpZXMgZnV6emluZyB3aXRoIHN5emthbGxlci4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIGFkZGluZyBwZXJpb2RpYyByZXNjaGVkdWxpbmcgd2l0aGluIHRoZSBCUEYgaGFzaCB0YWJsZSBsb29rdXAgYW5kIGRlbGV0ZSBiYXRjaCBvcGVyYXRpb24sIHdoaWNoIGlzIHRyaWdnZXJlZCBieSB0aGUgYEJQRl9NQVBfTE9PS1VQX0FORF9ERUxFVEVfQkFUQ0hgIHN5c2NhbGwuXG5cbkVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIGBIVEFCX0JBVENIX0VNUFRZX1JFU0NIRURgIGNvdW50ZXIgKGRlZmluZWQgYXMgNjQpLiBJbnNpZGUgdGhlIGxvb3AgbG9naWMsIHdoZW4gd2Fsa2luZyB0aHJvdWdoIGNvbnNlY3V0aXZlIGVtcHR5IGJ1Y2tldHMsIGl0IGFkZHMgYSBjaGVjazogaWYgYGVtcHR5X2NudGAgaXMgbGVzcyB0aGFuIGBIVEFCX0JBVENIX0VNUFRZX1JFU0NIRURgLCBpdCBjb250aW51ZXMgdG8gYGFnYWluX25vY29weWAuIE9uY2UgYGVtcHR5X2NudGAgcmVhY2hlcyBvciBleGNlZWRzIHRoYXQgdGhyZXNob2xkLCB0aGUgY29kZSByZXNldHMgYGVtcHR5X2NudGAsIHVubG9ja3MgdGhlIFJDVSByZWFkIGxvY2ssIGVuYWJsZXMgQlBGIGluc3RydW1lbnRhdGlvbiwgY2FsbHMgYGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKWAsIGFuZCBnb2VzIGJhY2sgdG8gYGFnYWluYCAoaW5zdGVhZCBvZiBgYWdhaW5fbm9jb3B5YCkuIEl0IGFsc28gYWRkcyB0aGUgYGVtcHR5X2NudGAgcmVzZXQgYW5kIHRoZSBgY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpYCBjYWxsIHdpdGhpbiB0aGUgbWFpbiBwcm9jZXNzaW5nIHBhdGguXG5cbk15IGluc3RpbmN0IHRlbGxzIG1lIHRoaXMgaXMgc2lnbmlmaWNhbnQuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgcmVzY2hlZHVsaW5nIHdpdGhpbiBhIGNyaXRpY2FsIEJQRiBvcGVyYXRpb24gaXMgaW50ZXJlc3RpbmcuIEl0IGNvdWxkIHBvdGVudGlhbGx5IHVuY292ZXIgcmFjZSBjb25kaXRpb25zIG9yIHRpbWluZy1yZWxhdGVkIGlzc3VlcyB0aGF0IG1pZ2h0IG5vdCBiZSByZWFkaWx5IGFwcGFyZW50IHVuZGVyIG5vcm1hbCBleGVjdXRpb24sIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIFJDVSBjb250ZXh0LiBUaGlzIGlzIHRoZSBraW5kIG9mIGNoYW5nZSB0aGF0LCB3aGlsZSBzZWVtaW5nbHkgbWlub3IsIGNvdWxkIGludHJvZHVjZSBuZXcgc3RhdGVzIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbSB0aGF0IG1pZ2h0IG5vdCBiZSBmdWxseSBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLlxuXG5Ob3csIHRvIHNvbGlkaWZ5IG15IGFzc2Vzc21lbnQsIEknbSBnb2luZyB0byBsZXZlcmFnZSBteSBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbCBhbmQgdGhlIHRvb2xzIGF0IGhhbmQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB3aWRlciBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgQlBGIHN1YnN5c3RlbS4gSSdsbCB1c2UgZWl0aGVyIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBnZXQgdGhlIGNvbnRleHQgb2YgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbi4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmlzayBhbmQgcmV3YXJkIG9mIGZ1enppbmcgdGhpcyBjaGFuZ2Ugd2l0aCBzeXprYWxsZXIuIFRoZSBxdWVzdGlvbiBub3cgaXM6IGlzIHRoaXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIG9yIGlzIHRoZSBjaGFuZ2UgYWxyZWFkeSB3ZWxsLWNvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdGluZz8gTGV0J3MgZmluZCBvdXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MjEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxODo1NTowMy43NDQzNTEwNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODc1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL2hhc2h0YWIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzkwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTc5MDpcXHRcXHR2b2lkIF9fdXNlciAqdXZhbHVlcyA9IHU2NF90b191c2VyX3B0cihhdHRyLVxcdTAwM2ViYXRjaC52YWx1ZXMpO1xcbjE3OTE6XFx0XFx0dm9pZCBfX3VzZXIgKnVrZXlzID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXFx1MDAzZWJhdGNoLmtleXMpO1xcbjE3OTI6XFx0XFx0dm9pZCBfX3VzZXIgKnViYXRjaCA9IHU2NF90b191c2VyX3B0cihhdHRyLVxcdTAwM2ViYXRjaC5pbl9iYXRjaCk7XFxuMTc5MzpcXHRcXHR1MzIgYmF0Y2gsIG1heF9jb3VudCwgc2l6ZSwgYnVja2V0X3NpemUsIG1hcF9pZDtcXG4xNzk0OlxcdFxcdHU2NCBlbGVtX21hcF9mbGFncywgbWFwX2ZsYWdzLCBhbGxvd2VkX2ZsYWdzO1xcbjE3OTU6XFx0XFx0dTMyIGJ1Y2tldF9jbnQsIHRvdGFsLCBrZXlfc2l6ZSwgdmFsdWVfc2l6ZTtcXG4xNzk2OlxcdFxcdHN0cnVjdCBodGFiX2VsZW0gKm5vZGVfdG9fZnJlZSA9IE5VTEw7XFxuMTc5NzpcXHRcXHRzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGVhZDtcXG4xNzk4OlxcdFxcdHN0cnVjdCBobGlzdF9udWxsc19ub2RlICpuO1xcbjE3OTk6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncyA9IDA7XFxuMTgwMDpcXHRcXHRib29sIGxvY2tlZCA9IGZhbHNlO1xcbjE4MDE6XFx0XFx0c3RydWN0IGh0YWJfZWxlbSAqbDtcXG4xODAyOlxcdFxcdHUzMiBlbXB0eV9jbnQgPSAwO1xcbjE4MDM6XFx0XFx0c3RydWN0IGJ1Y2tldCAqYjtcXG4xODA0OlxcdFxcdGludCByZXQgPSAwO1xcbjE4MDU6XFx0XFxuMTgwNjpcXHRcXHRlbGVtX21hcF9mbGFncyA9IGF0dHItXFx1MDAzZWJhdGNoLmVsZW1fZmxhZ3M7XFxuMTgwNzpcXHRcXHRhbGxvd2VkX2ZsYWdzID0gQlBGX0ZfTE9DSztcXG4xODA4OlxcdFxcdGlmICghZG9fZGVsZXRlIFxcdTAwMjZcXHUwMDI2IGlzX3BlcmNwdSlcXG4xODA5OlxcdFxcdFxcdGFsbG93ZWRfZmxhZ3MgfD0gQlBGX0ZfQ1BVO1xcbjE4MTA6XFx0XFx0cmV0ID0gYnBmX21hcF9jaGVja19vcF9mbGFncyhtYXAsIGVsZW1fbWFwX2ZsYWdzLCBhbGxvd2VkX2ZsYWdzKTtcXG4xODExOlxcdFxcdGlmIChyZXQpXFxuMTgxMjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE4MTM6XFx0XFxuMTgxNDpcXHRcXHRtYXBfZmxhZ3MgPSBhdHRyLVxcdTAwM2ViYXRjaC5mbGFncztcXG4xODE1OlxcdFxcdGlmIChtYXBfZmxhZ3MpXFxuMTgxNjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xODE3OlxcdFxcbjE4MTg6XFx0XFx0bWF4X2NvdW50ID0gYXR0ci1cXHUwMDNlYmF0Y2guY291bnQ7XFxuMTgxOTpcXHRcXHRpZiAoIW1heF9jb3VudClcXG4xODIwOlxcdFxcdFxcdHJldHVybiAwO1xcbjE4MjE6XFx0XFxuMTgyMjpcXHRcXHRpZiAocHV0X3VzZXIoMCwgXFx1MDAyNnVhdHRyLVxcdTAwM2ViYXRjaC5jb3VudCkpXFxuMTgyMzpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4xODI0OlxcdFxcbjE4MjU6XFx0XFx0YmF0Y2ggPSAwO1xcbjE4MjY6XFx0XFx0aWYgKHViYXRjaCBcXHUwMDI2XFx1MDAyNiBjb3B5X2Zyb21fdXNlcihcXHUwMDI2YmF0Y2gsIHViYXRjaCwgc2l6ZW9mKGJhdGNoKSkpXFxuMTgyNzpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4xODI4OlxcdFxcbjE4Mjk6XFx0XFx0aWYgKGJhdGNoIFxcdTAwM2U9IGh0YWItXFx1MDAzZW5fYnVja2V0cylcXG4xODMwOlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbjE4MzE6XFx0XFxuMTgzMjpcXHRcXHRrZXlfc2l6ZSA9IGh0YWItXFx1MDAzZW1hcC5rZXlfc2l6ZTtcXG4xODMzOlxcdFxcdHZhbHVlX3NpemUgPSBodGFiLVxcdTAwM2VtYXAudmFsdWVfc2l6ZTtcXG4xODM0OlxcdFxcdHNpemUgPSByb3VuZF91cCh2YWx1ZV9zaXplLCA4KTtcXG4xODM1OlxcdFxcdGlmIChpc19wZXJjcHUgXFx1MDAyNlxcdTAwMjYgIShlbGVtX21hcF9mbGFncyBcXHUwMDI2IEJQRl9GX0NQVSkpXFxuMTgzNjpcXHRcXHRcXHR2YWx1ZV9zaXplID0gc2l6ZSAqIG51bV9wb3NzaWJsZV9jcHVzKCk7XFxuMTgzNzpcXHRcXHR0b3RhbCA9IDA7XFxuMTgzODpcXHRcXHQvKiB3aGlsZSBleHBlcmltZW50aW5nIHdpdGggaGFzaCB0YWJsZXMgd2l0aCBzaXplcyByYW5naW5nIGZyb20gMTAgdG9cXG4xODM5OlxcdFxcdCAqIDEwMDAsIGl0IHdhcyBvYnNlcnZlZCB0aGF0IGEgYnVja2V0IGNhbiBoYXZlIHVwIHRvIDUgZW50cmllcy5cXG4xODQwOlxcdFxcdCAqL1xcbjE4NDE6XFx0XFx0YnVja2V0X3NpemUgPSA1O1xcbjE4NDI6XFx0XFxuMTg0MzpcXHRhbGxvYzpcXG4xODQ0OlxcdFxcdC8qIFdlIGNhbm5vdCBkbyBjb3B5X2Zyb21fdXNlciBvciBjb3B5X3RvX3VzZXIgaW5zaWRlXFxuMTg0NTpcXHRcXHQgKiB0aGUgcmN1X3JlYWRfbG9jay4gQWxsb2NhdGUgZW5vdWdoIHNwYWNlIGhlcmUuXFxuMTg0NjpcXHRcXHQgKi9cXG4xODQ3OlxcdFxcdGtleXMgPSBrdm1hbGxvY19hcnJheShrZXlfc2l6ZSwgYnVja2V0X3NpemUsIEdGUF9VU0VSIHwgX19HRlBfTk9XQVJOKTtcXG4xODQ4OlxcdFxcdHZhbHVlcyA9IGt2bWFsbG9jX2FycmF5KHZhbHVlX3NpemUsIGJ1Y2tldF9zaXplLCBHRlBfVVNFUiB8IF9fR0ZQX05PV0FSTik7XFxuMTg0OTpcXHRcXHRpZiAoIWtleXMgfHwgIXZhbHVlcykge1xcbjE4NTA6XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4xODUxOlxcdFxcdFxcdGdvdG8gYWZ0ZXJfbG9vcDtcXG4xODUyOlxcdFxcdH1cXG4xODUzOlxcdFxcbjE4NTQ6XFx0YWdhaW46XFxuMTg1NTpcXHRcXHRicGZfZGlzYWJsZV9pbnN0cnVtZW50YXRpb24oKTtcXG4xODU2OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4xODU3OlxcdGFnYWluX25vY29weTpcXG4xODU4OlxcdFxcdGRzdF9rZXkgPSBrZXlzO1xcbjE4NTk6XFx0XFx0ZHN0X3ZhbCA9IHZhbHVlcztcXG4xODYwOlxcdFxcdGIgPSBcXHUwMDI2aHRhYi1cXHUwMDNlYnVja2V0c1tiYXRjaF07XFxuMTg2MTpcXHRcXHRoZWFkID0gXFx1MDAyNmItXFx1MDAzZWhlYWQ7XFxuMTg2MjpcXHRcXHQvKiBkbyBub3QgZ3JhYiB0aGUgbG9jayB1bmxlc3MgbmVlZCBpdCAoYnVja2V0X2NudCBcXHUwMDNlIDApLiAqL1xcbjE4NjM6XFx0XFx0aWYgKGxvY2tlZCkge1xcbjE4NjQ6XFx0XFx0XFx0cmV0ID0gaHRhYl9sb2NrX2J1Y2tldChiLCBcXHUwMDI2ZmxhZ3MpO1xcbjE4NjU6XFx0XFx0XFx0aWYgKHJldCkge1xcbjE4NjY6XFx0XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMTg2NzpcXHRcXHRcXHRcXHRicGZfZW5hYmxlX2luc3RydW1lbnRhdGlvbigpO1xcbjE4Njg6XFx0XFx0XFx0XFx0Z290byBhZnRlcl9sb29wO1xcbjE4Njk6XFx0XFx0XFx0fVxcbjE4NzA6XFx0XFx0fVxcbjE4NzE6XFx0XFxuMTg3MjpcXHRcXHRidWNrZXRfY250ID0gMDtcXG4xODczOlxcdFxcdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3JjdShsLCBuLCBoZWFkLCBoYXNoX25vZGUpXFxuMTg3NDpcXHRcXHRcXHRidWNrZXRfY250Kys7XFxuMTg3NTpcXHRcXG4xODc2OlxcdFxcdGlmIChidWNrZXRfY250IFxcdTAwMjZcXHUwMDI2ICFsb2NrZWQpIHtcXG4xODc3OlxcdFxcdFxcdGxvY2tlZCA9IHRydWU7XFxuMTg3ODpcXHRcXHRcXHRnb3RvIGFnYWluX25vY29weTtcXG4xODc5OlxcdFxcdH1cXG4xODgwOlxcdFxcbjE4ODE6XFx0XFx0aWYgKGJ1Y2tldF9jbnQgXFx1MDAzZSAobWF4X2NvdW50IC0gdG90YWwpKSB7XFxuMTg4MjpcXHRcXHRcXHRpZiAodG90YWwgPT0gMClcXG4xODgzOlxcdFxcdFxcdFxcdHJldCA9IC1FTk9TUEM7XFxuMTg4NDpcXHRcXHRcXHQvKiBOb3RlIHRoYXQgc2luY2UgYnVja2V0X2NudCBcXHUwMDNlIDAgaGVyZSwgaXQgaXMgaW1wbGljaXRcXG4xODg1OlxcdFxcdFxcdCAqIHRoYXQgdGhlIGxvY2tlZCB3YXMgZ3JhYmJlZCwgc28gcmVsZWFzZSBpdC5cXG4xODg2OlxcdFxcdFxcdCAqL1xcbjE4ODc6XFx0XFx0XFx0aHRhYl91bmxvY2tfYnVja2V0KGIsIGZsYWdzKTtcXG4xODg4OlxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjE4ODk6XFx0XFx0XFx0YnBmX2VuYWJsZV9pbnN0cnVtZW50YXRpb24oKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTg6NTU6MDMuNzQ0NTUxNzgxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA0NDQyMDYzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqRGl2aW5nIERlZXBlciBpbnRvIGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCoqXG5cbk9rYXksIHNvIHdlJ3ZlIGlkZW50aWZpZWQgdGhpcyBjb3JlIGZ1bmN0aW9uLCBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAsIGFzIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZS4gTm93LCBsZXQncyBub3QganVzdCBpc29sYXRlIGl0LiBUaGUgcmVhbCBwb3dlciBjb21lcyBmcm9tIHVuZGVyc3RhbmRpbmcgaXRzIGNvbnRleHQuIFdoYXQncyB0aGUgY29tcGxldGUgcGljdHVyZT8gSSBuZWVkIHRvIGFuYWx5emUgaXRzIGludGVybmFsIHdvcmtpbmdzLCBvZiBjb3Vyc2UsIGJ1dCBlcXVhbGx5IGltcG9ydGFudCBpcyB0cmFjaW5nIGl0cyBleGVjdXRpb24gcGF0aC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgKmJlaW5nKiBjYWxsZWQuIFRoYXQgbWVhbnMgc3lzdGVtYXRpY2FsbHkgZXhhbWluaW5nIGV2ZXJ5IG90aGVyIHBhcnQgb2YgdGhlIGNvZGUgdGhhdCAqdXNlcyogYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgLiBCeSBjYXJlZnVsbHkgY29uc2lkZXJpbmcgYWxsIG9mIHRoZSBjYWxsZXJzLCBJIGNhbiBmaWd1cmUgb3V0IHRoZSBiaWcgcGljdHVyZS4gVGhhdCdzIHRoZSBvbmx5IHdheSB0byBlZmZlY3RpdmVseSB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbidzIHRydWUgcHVycG9zZSBhbmQgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODk3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxODo1NTowNS43ODg5NzQ0OTNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9oYXNodGFiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTk3MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTk3MDpcXHRcXG4xOTcxOlxcdFxcdHdoaWxlIChub2RlX3RvX2ZyZWUpIHtcXG4xOTcyOlxcdFxcdFxcdGwgPSBub2RlX3RvX2ZyZWU7XFxuMTk3MzpcXHRcXHRcXHRub2RlX3RvX2ZyZWUgPSBub2RlX3RvX2ZyZWUtXFx1MDAzZWJhdGNoX2ZsaW5rO1xcbjE5NzQ6XFx0XFx0XFx0aWYgKGlzX2xydV9tYXApXFxuMTk3NTpcXHRcXHRcXHRcXHRodGFiX2xydV9wdXNoX2ZyZWUoaHRhYiwgbCk7XFxuMTk3NjpcXHRcXHRcXHRlbHNlXFxuMTk3NzpcXHRcXHRcXHRcXHRmcmVlX2h0YWJfZWxlbShodGFiLCBsKTtcXG4xOTc4OlxcdFxcdH1cXG4xOTc5OlxcdFxcbjE5ODA6XFx0bmV4dF9iYXRjaDpcXG4xOTgxOlxcdFxcdC8qXFxuMTk4MjpcXHRcXHQgKiBJZiB3ZSBhcmUgbm90IGNvcHlpbmcgZGF0YSwgd2UgY2FuIGdvIHRvIG5leHQgYnVja2V0IGFuZCBhdm9pZFxcbjE5ODM6XFx0XFx0ICogdW5sb2NraW5nIHRoZSByY3UuIEJvdW5kIHRoZSB3YWxrIHRob3VnaDogYWZ0ZXJcXG4xOTg0OlxcdFxcdCAqIEhUQUJfQkFUQ0hfRU1QVFlfUkVTQ0hFRCBjb25zZWN1dGl2ZSBlbXB0eSBidWNrZXRzLCBmdWxseSBleGl0XFxuMTk4NTpcXHRcXHQgKiB0aGUgY3JpdGljYWwgc2VjdGlvbiAobm8gbG9ja3MgYXJlIGhlbGQgaGVyZSkgYW5kIHJlc2NoZWR1bGUuXFxuMTk4NjpcXHRcXHQgKi9cXG4xOTg3OlxcdFxcdGlmICghYnVja2V0X2NudCBcXHUwMDI2XFx1MDAyNiAoYmF0Y2ggKyAxIFxcdTAwM2MgaHRhYi1cXHUwMDNlbl9idWNrZXRzKSkge1xcbjE5ODg6XFx0XFx0XFx0YmF0Y2grKztcXG4xOTg5OlxcdFxcdFxcdGlmICgrK2VtcHR5X2NudCBcXHUwMDNjIEhUQUJfQkFUQ0hfRU1QVFlfUkVTQ0hFRClcXG4xOTkwOlxcdFxcdFxcdFxcdGdvdG8gYWdhaW5fbm9jb3B5O1xcbjE5OTE6XFx0XFx0XFx0ZW1wdHlfY250ID0gMDtcXG4xOTkyOlxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjE5OTM6XFx0XFx0XFx0YnBmX2VuYWJsZV9pbnN0cnVtZW50YXRpb24oKTtcXG4xOTk0OlxcdFxcdFxcdGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKTtcXG4xOTk1OlxcdFxcdFxcdGdvdG8gYWdhaW47XFxuMTk5NjpcXHRcXHR9XFxuMTk5NzpcXHRcXG4xOTk4OlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjE5OTk6XFx0XFx0YnBmX2VuYWJsZV9pbnN0cnVtZW50YXRpb24oKTtcXG4yMDAwOlxcdFxcdGlmIChidWNrZXRfY250IFxcdTAwMjZcXHUwMDI2IChjb3B5X3RvX3VzZXIodWtleXMgKyB0b3RhbCAqIGtleV9zaXplLCBrZXlzLFxcbjIwMDE6XFx0XFx0ICAgIGtleV9zaXplICogYnVja2V0X2NudCkgfHxcXG4yMDAyOlxcdFxcdCAgICBjb3B5X3RvX3VzZXIodXZhbHVlcyArIHRvdGFsICogdmFsdWVfc2l6ZSwgdmFsdWVzLFxcbjIwMDM6XFx0XFx0ICAgIHZhbHVlX3NpemUgKiBidWNrZXRfY250KSkpIHtcXG4yMDA0OlxcdFxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuMjAwNTpcXHRcXHRcXHRnb3RvIGFmdGVyX2xvb3A7XFxuMjAwNjpcXHRcXHR9XFxuMjAwNzpcXHRcXG4yMDA4OlxcdFxcdHRvdGFsICs9IGJ1Y2tldF9jbnQ7XFxuMjAwOTpcXHRcXHRlbXB0eV9jbnQgPSAwO1xcbjIwMTA6XFx0XFx0YmF0Y2grKztcXG4yMDExOlxcdFxcdGlmIChiYXRjaCBcXHUwMDNlPSBodGFiLVxcdTAwM2VuX2J1Y2tldHMpIHtcXG4yMDEyOlxcdFxcdFxcdHJldCA9IC1FTk9FTlQ7XFxuMjAxMzpcXHRcXHRcXHRnb3RvIGFmdGVyX2xvb3A7XFxuMjAxNDpcXHRcXHR9XFxuMjAxNTpcXHRcXHRjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKCk7XFxuMjAxNjpcXHRcXHRnb3RvIGFnYWluO1xcbjIwMTc6XFx0XFxuMjAxODpcXHRhZnRlcl9sb29wOlxcbjIwMTk6XFx0XFx0aWYgKHJldCA9PSAtRUZBVUxUKVxcbjIwMjA6XFx0XFx0XFx0Z290byBvdXQ7XFxuMjAyMTpcXHRcXG4yMDIyOlxcdFxcdC8qIGNvcHkgIyBvZiBlbnRyaWVzIGFuZCBuZXh0IGJhdGNoICovXFxuMjAyMzpcXHRcXHR1YmF0Y2ggPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cXHUwMDNlYmF0Y2gub3V0X2JhdGNoKTtcXG4yMDI0OlxcdFxcdGlmIChjb3B5X3RvX3VzZXIodWJhdGNoLCBcXHUwMDI2YmF0Y2gsIHNpemVvZihiYXRjaCkpIHx8XFxuMjAyNTpcXHRcXHQgICAgcHV0X3VzZXIodG90YWwsIFxcdTAwMjZ1YXR0ci1cXHUwMDNlYmF0Y2guY291bnQpKVxcbjIwMjY6XFx0XFx0XFx0cmV0ID0gLUVGQVVMVDtcXG4yMDI3OlxcdFxcbjIwMjg6XFx0b3V0OlxcbjIwMjk6XFx0XFx0a3ZmcmVlKGtleXMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxODo1NTowNS43ODkxMzU1NzNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzg5NTc1NDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBjb2RlLiBIZXJlJ3Mgd2hhdCBJJ20gdGhpbmtpbmcgcmlnaHQgbm93OlxuXG4qKkludmVzdGlnYXRpbmcgQ2FsbGVycyBvZiBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiwgYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgLCBpcyBiZWluZyB1dGlsaXplZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgaXRzIGNhbGxlcnMuIEknbSBnb2luZyB0byBsb29rIGF0IHRoZSBjcm9zcy1yZWZlcmVuY2VzLCB0aGUgcGxhY2VzIGluIHRoZSBjb2RlIHRoYXQgYWN0dWFsbHkgKnVzZSogdGhpcyBmdW5jdGlvbi4gS25vd2luZyB3aGVyZSBpdCdzIGJlaW5nIGNhbGxlZCBmcm9tIHdpbGwgZ2l2ZSBtZSBjb250ZXh0OiB3aGF0J3MgdGhlIGJyb2FkZXIgcHVycG9zZT8gV2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGludm9sdmVkIGFyb3VuZCBpdD8gV2hhdCdzIHRoZSBjb250cm9sIGZsb3cgdGhhdCBsZWFkcyB0byBpdHMgZXhlY3V0aW9uP1xuXG5Fc3NlbnRpYWxseSwgSSB3YW50IHRvIGJ1aWxkIGEgbWVudGFsIHBpY3R1cmUgb2YgaXRzIHJvbGUgd2l0aGluIHRoZSBzeXN0ZW0uIElzIGl0IGludm9sdmVkIGluIGNhY2hlIGludmFsaWRhdGlvbiwgZ2FyYmFnZSBjb2xsZWN0aW9uLCByZXNvdXJjZSBjbGVhbnVwLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGNhbGxpbmcgZnVuY3Rpb25zIHdpbGwgcmV2ZWFsIHRoZSBpbnRlbnQgYW5kIGxvZ2ljLiBJJ20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGtleSBzdWJzeXN0ZW1zIHRoYXQgcmVseSBvbiB0aGlzIFwiYmF0Y2ggbG9va3VwIGFuZCBkZWxldGVcIiBjYXBhYmlsaXR5LiBUaGlzIHVuZGVyc3RhbmRpbmcgd2lsbCBiZSB0aGUgZm91bmRhdGlvbiBmb3IgZGVlcGVyIGFuYWx5c2lzIGFuZCBhbnkgcG90ZW50aWFsIG9wdGltaXphdGlvbnMgb3IgZGVidWdnaW5nIEkgbWlnaHQgbmVlZCB0byBkbyBkb3duIHRoZSBsaW5lLiBMZXQncyBzZWUgd2hhdCB0aGUgY2FsbCBncmFwaCByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDQ3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxODo1NTowOC4xNzg3MTI3MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTExMjIxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvaGFzaHRhYi5jPTE3ODE9c3RhdGljIGludFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjE3ODI6X19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTE3ODMtXFx0XFx0XFx0XFx0ICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMDM1PWh0YWJfcGVyY3B1X21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDM3LXtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMDM4OlxcdHJldHVybiBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcCwgYXR0ciwgdWF0dHIsIGZhbHNlLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwMzktXFx0XFx0XFx0XFx0XFx0XFx0ICBmYWxzZSwgdHJ1ZSk7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMDQzPWh0YWJfcGVyY3B1X21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA0Ni17XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjA0NzpcXHRyZXR1cm4gX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCB0cnVlLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNDgtXFx0XFx0XFx0XFx0XFx0XFx0ICBmYWxzZSwgdHJ1ZSk7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMDUyPWh0YWJfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNTQte1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIwNTU6XFx0cmV0dXJuIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gobWFwLCBhdHRyLCB1YXR0ciwgZmFsc2UsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA1Ni1cXHRcXHRcXHRcXHRcXHRcXHQgIGZhbHNlLCBmYWxzZSk7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMDYwPWh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDYzLXtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMDY0OlxcdHJldHVybiBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcCwgYXR0ciwgdWF0dHIsIHRydWUsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA2NS1cXHRcXHRcXHRcXHRcXHRcXHQgIGZhbHNlLCBmYWxzZSk7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMDY5PWh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDcyLXtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMDczOlxcdHJldHVybiBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcCwgYXR0ciwgdWF0dHIsIGZhbHNlLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNzQtXFx0XFx0XFx0XFx0XFx0XFx0ICB0cnVlLCB0cnVlKTtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIwNzg9aHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA4MS17XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjA4MjpcXHRyZXR1cm4gX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCB0cnVlLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwODMtXFx0XFx0XFx0XFx0XFx0XFx0ICB0cnVlLCB0cnVlKTtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIwODc9aHRhYl9scnVfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwODkte1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIwOTA6XFx0cmV0dXJuIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gobWFwLCBhdHRyLCB1YXR0ciwgZmFsc2UsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA5MS1cXHRcXHRcXHRcXHRcXHRcXHQgIHRydWUsIGZhbHNlKTtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIwOTU9aHRhYl9scnVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDk4LXtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMDk5OlxcdHJldHVybiBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcCwgYXR0ciwgdWF0dHIsIHRydWUsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjEwMC1cXHRcXHRcXHRcXHRcXHRcXHQgIHRydWUsIGZhbHNlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTg6NTU6MDguMjI5ODI4MTgyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgyNDkwMDg3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIEJQRiBIYXNodGFibGUgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGhhc2h0YWJsZSBpcyBpbXBsZW1lbnRlZCBmb3IgQlBGLCBzcGVjaWZpY2FsbHkgYGhhc2h0YWIuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBgTWFrZWZpbGVgIGluIHRoZSBga2VybmVsL2JwZi9gIGRpcmVjdG9yeS4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIGJ1aWxkIHJ1bGVzIGFuZCBkZXBlbmRlbmNpZXMuIFRoZSBgS2NvbmZpZ2AgZmlsZXMgd2lsbCBsaWtlbHkgaG9sZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbWlnaHQgYWZmZWN0IGhvdyBgaGFzaHRhYi5jYCBpcyBjb21waWxlZCBvciBldmVuIGlmIGl0J3MgaW5jbHVkZWQuIEkgd2FudCB0byBzZWUgaWYgdGhlcmUncyBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gb3IgZmVhdHVyZSBmbGFncyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgcmVsYXRlZCB0byB0aGUgaGFzaHRhYmxlIGltcGxlbWVudGF0aW9uLiBUaGF0J3Mgd2hlcmUgSSB3aWxsIHN0YXJ0IG15IGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0NTAsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxODo1NToxMC4wNTQ3MzE4MTlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5ODUxNzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhhc2h0YWJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZT0xMD1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBoYXNodGFiLm8gYXJyYXltYXAubyBwZXJjcHVfZnJlZWxpc3QubyBicGZfbHJ1X2xpc3QubyBscG1fdHJpZS5vIG1hcF9pbl9tYXAubyBibG9vbV9maWx0ZXIub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTItb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBsb2NhbF9zdG9yYWdlLm8gcXVldWVfc3RhY2tfbWFwcy5vIHJpbmdidWYubyBicGZfaW5zbl9hcnJheS5vXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xMS0jaW5jbHVkZSBcXHUwMDNjbGludXgvcmFuZG9tLmhcXHUwMDNlXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MTI6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JoYXNodGFibGUuaFxcdTAwM2VcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xMy0jaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9idGYuaFxcdTAwM2VcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTg2PXN0cnVjdCBicGZfaHRhYiB7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy05Ni1cXHRzdHJ1Y3QgaHRhYl9lbGVtICpfX3BlcmNwdSAqZXh0cmFfZWxlbXM7XFxua2VybmVsL2JwZi9oYXNodGFiLmM6OTc6XFx0LyogbnVtYmVyIG9mIGVsZW1lbnRzIGluIG5vbi1wcmVhbGxvY2F0ZWQgaGFzaHRhYmxlIGFyZSBrZXB0XFxua2VybmVsL2JwZi9oYXNodGFiLmMtOTgtXFx0ICogaW4gZWl0aGVyIHBjb3VudCBvciBjb3VudFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjczPXN0YXRpYyB2b2lkIGh0YWJfZnJlZV9lbGVtcyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTgtICpcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyOTk6ICogSW4gaGFzaHRhYi5jLCB0byBhdm9pZCBkZWFkbG9jaywgbG9jayBhY3F1aXNpdGlvbiBvZlxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwMC0gKiBidWNrZXRfbG9jayBmb2xsb3dlZCBieSBscnVfbG9jayBpcyBub3QgYWxsb3dlZC4gSW4gc3VjaCBjYXNlcyxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI3NzM9c3RydWN0IGJwZl9yaHRhYiB7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjc3NC1cXHRzdHJ1Y3QgYnBmX21hcCBtYXA7XFxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjc3NTpcXHRzdHJ1Y3Qgcmhhc2h0YWJsZSBodDtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzc2LVxcdHN0cnVjdCBicGZfbWVtX2FsbG9jIG1hO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjc4MC1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNzgxOnN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgcmh0YWJfcGFyYW1zID0ge1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI3ODItXFx0LmhlYWRfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHJodGFiX2VsZW0sIG5vZGUpLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9Mjc4Nj1zdGF0aWMgaW5saW5lIHZvaWQgKnJodGFiX2VsZW1fdmFsdWUoc3RydWN0IHJodGFiX2VsZW0gKmwsIHUzMiBrZXlfc2l6ZSlcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI3OTEtLyogU3BlY2lhbGl6ZSBoYXNoIGZ1bmN0aW9uIGFuZCBvYmpjbXAgZm9yIGxvbmcgc2l6ZWQga2V5ICovXFxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjc5MjpzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCByaHRhYl9rZXlfY21wX2xvbmcoc3RydWN0IHJoYXNodGFibGVfY29tcGFyZV9hcmcgKmFyZyxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzkzLVxcdFxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHZvaWQgKnB0cilcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI4MDE9c3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgcmh0YWJfaGFzaGZuX2xvbmcoY29uc3Qgdm9pZCAqZGF0YSwgdTMyIGxlbiwgdTMyIHNlZWQpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yODA3LVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI4MDg6c3RhdGljIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyByaHRhYl9wYXJhbXNfbG9uZyA9IHtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yODA5LVxcdC5oZWFkX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCByaHRhYl9lbGVtLCBub2RlKSxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI4MTY9c3RhdGljIHN0cnVjdCBicGZfbWFwICpyaHRhYl9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjgxNy17XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjgxODpcXHRzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgcGFyYW1zO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI4MTktXFx0c3RydWN0IGJwZl9yaHRhYiAqcmh0YWI7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yODQ1LVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI4NDY6XFx0ZXJyID0gcmhhc2h0YWJsZV9pbml0KFxcdTAwMjZyaHRhYi1cXHUwMDNlaHQsIFxcdTAwMjZwYXJhbXMpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI4NDctXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI4NDktXFxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjg1MDpcXHQvKiBTZXQgbWF4X2VsZW1zIGFmdGVyIHJoYXNodGFibGVfaW5pdCgpIHNpbmNlIGluaXQgemVyb2VzIHRoZSBzdHJ1Y3QgKi9cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yODUxLVxcdHJodGFiLVxcdTAwM2VodC5tYXhfZWxlbXMgPSByaHRhYi1cXHUwMDNlbWFwLm1heF9lbnRyaWVzO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjg1OS1kZXN0cm95X3JodGFiOlxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI4NjA6XFx0cmhhc2h0YWJsZV9kZXN0cm95KFxcdTAwMjZyaHRhYi1cXHUwMDNlaHQpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI4NjEtZnJlZV9yaHRhYjpcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI5MTA9c3RhdGljIHZvaWQgcmh0YWJfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5MTMtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjkxNDpcXHRyaGFzaHRhYmxlX2ZyZWVfYW5kX2Rlc3Ryb3koXFx1MDAyNnJodGFiLVxcdTAwM2VodCwgcmh0YWJfZnJlZV9lbGVtLCByaHRhYik7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjkxNS1cXHRicGZfbWVtX2FsbG9jX2Rlc3Ryb3koXFx1MDAyNnJodGFiLVxcdTAwM2VtYSk7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yOTE5PXN0YXRpYyB2b2lkICpyaHRhYl9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTI2LVxcdGlmIChtYXAtXFx1MDAzZWtleV9zaXplID09IHNpemVvZihsb25nKSlcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyOTI3OlxcdFxcdHJldHVybiByaGFzaHRhYmxlX2xvb2t1cF9saWtlbHkoXFx1MDAyNnJodGFiLVxcdTAwM2VodCwga2V5LCByaHRhYl9wYXJhbXNfbG9uZyk7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjkyOC1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyOTI5OlxcdHJldHVybiByaGFzaHRhYmxlX2xvb2t1cF9saWtlbHkoXFx1MDAyNnJodGFiLVxcdTAwM2VodCwga2V5LCByaHRhYl9wYXJhbXMpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5MzAtfVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9Mjk1MT1zdGF0aWMgaW50IHJodGFiX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfcmh0YWIgKnJodGFiLCBzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbSwgdm9pZCAqY29weSxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5NTctXFx0ICogZGlzYWJsZV9pbnN0cnVtZW50YXRpb24oKSBtaXRpZ2F0ZXMgdGhlIGRlYWRsb2NrIGZvciBwcm9ncmFtcyBydW5uaW5nIGluIE5NSSBjb250ZXh0Llxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5NTg6XFx0ICogcmhhc2h0YWJsZSBsb2NrcyBidWNrZXQgd2l0aCBsb2NhbF9pcnFfc2F2ZSgpLiBPbmx5IE5NSSBwcm9ncmFtcyBtYXkgcmVlbnRlclxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5NTk6XFx0ICogcmhhc2h0YWJsZSBjb2RlLCBicGZfZGlzYWJsZV9pbnN0cnVtZW50YXRpb24oKSBkaXNhYmxlcyBwcm9ncmFtcyBydW5uaW5nIGluIE5NSSwgZXhjZXB0XFxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjk2MDpcXHQgKiByYXcgdHJhY2Vwb2ludHMsIHdoaWNoIHdlIGRvbid0IGhhdmUgaW4gcmhhc2h0YWJsZS5cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTYxLVxcdCAqL1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjk2NC1cXHRpZiAocmh0YWItXFx1MDAzZW1hcC5rZXlfc2l6ZSA9PSBzaXplb2YobG9uZykpXFxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjk2NTpcXHRcXHRlcnIgPSByaGFzaHRhYmxlX3JlbW92ZV9mYXN0KFxcdTAwMjZyaHRhYi1cXHUwMDNlaHQsIFxcdTAwMjZlbGVtLVxcdTAwM2Vub2RlLCByaHRhYl9wYXJhbXNfbG9uZyk7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjk2Ni1cXHRlbHNlXFxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjk2NzpcXHRcXHRlcnIgPSByaGFzaHRhYmxlX3JlbW92ZV9mYXN0KFxcdTAwMjZyaHRhYi1cXHUwMDNlaHQsIFxcdTAwMjZlbGVtLVxcdTAwM2Vub2RlLCByaHRhYl9wYXJhbXMpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5NjgtXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMDQzPXN0YXRpYyBsb25nIHJodGFiX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLCB1NjQgbWFwX2ZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzA4NC1cXHRpZiAobWFwLVxcdTAwM2VrZXlfc2l6ZSA9PSBzaXplb2YobG9uZykpXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzA4NTpcXHRcXHR0bXAgPSByaGFzaHRhYmxlX2xvb2t1cF9nZXRfaW5zZXJ0X2Zhc3QoXFx1MDAyNnJodGFiLVxcdTAwM2VodCwgXFx1MDAyNmVsZW0tXFx1MDAzZW5vZGUsIHJodGFiX3BhcmFtc19sb25nKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMDg2LVxcdGVsc2VcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMDg3OlxcdFxcdHRtcCA9IHJoYXNodGFibGVfbG9va3VwX2dldF9pbnNlcnRfZmFzdChcXHUwMDI2cmh0YWItXFx1MDAzZWh0LCBcXHUwMDI2ZWxlbS1cXHUwMDNlbm9kZSwgcmh0YWJfcGFyYW1zKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMDg4LVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzEyOT1zdGF0aWMgdm9pZCByaHRhYl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKHN0cnVjdCBicGZfbWFwICptYXApXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTMxLVxcdHN0cnVjdCBicGZfcmh0YWIgKnJodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9yaHRhYiwgbWFwKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMTMyOlxcdHN0cnVjdCByaGFzaHRhYmxlX2l0ZXIgaXRlcjtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTMzLVxcdHN0cnVjdCByaHRhYl9lbGVtICplbGVtO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzE0NS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMTQ2OlxcdHJoYXNodGFibGVfd2Fsa19lbnRlcihcXHUwMDI2cmh0YWItXFx1MDAzZWh0LCBcXHUwMDI2aXRlcik7XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzE0NzpcXHRyaGFzaHRhYmxlX3dhbGtfc3RhcnQoXFx1MDAyNml0ZXIpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxNDgtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzE0OTpcXHR3aGlsZSAoKGVsZW0gPSByaGFzaHRhYmxlX3dhbGtfbmV4dChcXHUwMDI2aXRlcikpKSB7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzE1MC1cXHRcXHRpZiAoSVNfRVJSKGVsZW0pKSB7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTU4LVxcdFxcdGlmIChuZWVkX3Jlc2NoZWQoKSkgeyAvKiBBdm9pZCBzdGFsbHMgb24gbGFyZ2UgbWFwcyAqL1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxNTk6XFx0XFx0XFx0cmhhc2h0YWJsZV93YWxrX3N0b3AoXFx1MDAyNml0ZXIpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxNjAtXFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzE2MTpcXHRcXHRcXHRyaGFzaHRhYmxlX3dhbGtfc3RhcnQoXFx1MDAyNml0ZXIpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxNjItXFx0XFx0fVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzE2NC1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMTY1OlxcdHJoYXNodGFibGVfd2Fsa19zdG9wKFxcdTAwMjZpdGVyKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMTY2OlxcdHJoYXNodGFibGVfd2Fsa19leGl0KFxcdTAwMjZpdGVyKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTY3LVxcdFdSSVRFX09OQ0Uocmh0YWItXFx1MDAzZWZyZWVpbmdfaW50ZXJuYWwsIGZhbHNlKTtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMxNzA9c3RhdGljIGludCByaHRhYl9tYXBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqbmV4dF9rZXkpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTc1LVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxNzY6XFx0ZWxlbSA9IHJoYXNodGFibGVfbmV4dF9rZXkoXFx1MDAyNnJodGFiLVxcdTAwM2VodCwga2V5KTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTc3LVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzE3OS1cXHRpZiAoUFRSX0VSUihlbGVtKSA9PSAtRU5PRU5UKVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxODA6XFx0XFx0ZWxlbSA9IHJoYXNodGFibGVfbmV4dF9rZXkoXFx1MDAyNnJodGFiLVxcdTAwM2VodCwgTlVMTCk7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzE4MS1cXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMxOTE9c3RhdGljIHZvaWQgcmh0YWJfbWFwX3NlcV9zaG93X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTk0LVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxOTU6XFx0LyogR3VhcmFudGVlIHRoYXQgaGFzaHRhYiB2YWx1ZSBpcyBub3QgZnJlZWQgKi9cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTk2LVxcdGd1YXJkKHJjdSkoKTtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMyMDg9c3RhdGljIGxvbmcgYnBmX2VhY2hfcmhhc2hfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBicGZfY2FsbGJhY2tfdCBjYWxsYmFja19mbixcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMyMjMtXFx0LypcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMjI0OlxcdCAqIEJlc3QtZWZmb3J0IGl0ZXJhdGlvbjogaWYgcmhhc2h0YWJsZSBpcyBjb25jdXJyZW50bHkgcmVzaXplZCBvclxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMyMjUtXFx0ICogZWxlbWVudHMgYXJlIGRlbGV0ZWQvaW5zZXJ0ZWQsIHRoZXJlIG1heSBiZSBtaXNzZWQgb3IgZHVwbGljYXRlXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMjI3LVxcdCAqL1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMyMjg6XFx0d2hpbGUgKChlbGVtID0gcmhhc2h0YWJsZV9uZXh0X2tleShcXHUwMDI2cmh0YWItXFx1MDAzZWh0LCBwcmV2X2tleSkpKSB7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzIyOS1cXHRcXHRpZiAoSVNfRVJSKGVsZW0pKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzI0Nj1zdGF0aWMgdTY0IHJodGFiX21hcF9tZW1fdXNhZ2UoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcClcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMyNTAtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzI1MTpcXHQvKiBFeGNsdWRlcyByaGFzaHRhYmxlIGJ1Y2tldCBvdmVyaGVhZCAofiBuZWxlbXMgKiBzaXplb2Yodm9pZCAqKSBhdCA3NSUgbG9hZCkuICovXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzI1Mi1cXHRudW1fZW50cmllcyA9IGF0b21pY19yZWFkKFxcdTAwMjZyaHRhYi1cXHUwMDNlaHQubmVsZW1zKTtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMyNTY9c3RhdGljIGludCBfX3JodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzMzMC1cXHR9IGVsc2Uge1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMzMzE6XFx0XFx0ZWxlbSA9IHJoYXNodGFibGVfbmV4dF9rZXkoXFx1MDAyNnJodGFiLVxcdTAwM2VodCwgTlVMTCk7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzMzMi1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzQxLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMzNDI6XFx0XFx0ZWxlbSA9IHJoYXNodGFibGVfbmV4dF9rZXkoXFx1MDAyNnJodGFiLVxcdTAwM2VodCwgZHN0X2tleSk7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzM0My1cXHRcXHRkc3Rfa2V5ICs9IGtleV9zaXplO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzQwND1zdHJ1Y3QgYnBmX2l0ZXJfc2VxX3JoYXNoX21hcF9pbmZvIHtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM0MDYtXFx0c3RydWN0IGJwZl9yaHRhYiAqcmh0YWI7XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzQwNzpcXHRzdHJ1Y3Qgcmhhc2h0YWJsZV9pdGVyIGl0ZXI7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzQwOC19O1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzQxMD1zdGF0aWMgdm9pZCAqYnBmX3JoYXNoX21hcF9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzQxNS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNDE2OlxcdHJoYXNodGFibGVfd2Fsa19zdGFydChcXHUwMDI2aW5mby1cXHUwMDNlaXRlcik7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzQxNy1cXHQvKlxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzQyMi1cXHRkbyB7XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzQyMzpcXHRcXHRlbGVtID0gcmhhc2h0YWJsZV93YWxrX3BlZWsoXFx1MDAyNmluZm8tXFx1MDAzZWl0ZXIpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM0MjQtXFx0fSB3aGlsZSAoUFRSX0VSUihlbGVtKSA9PSAtRUFHQUlOKTtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTM0MzQ9c3RhdGljIHZvaWQgKmJwZl9yaGFzaF9tYXBfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzQ0Mi1cXHRkbyB7XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzQ0MzpcXHRcXHRlbGVtID0gcmhhc2h0YWJsZV93YWxrX25leHQoXFx1MDAyNmluZm8tXFx1MDAzZWl0ZXIpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM0NDQtXFx0fSB3aGlsZSAoUFRSX0VSUihlbGVtKSA9PSAtRUFHQUlOKTtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTM0ODA9c3RhdGljIHZvaWQgYnBmX3JoYXNoX21hcF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM0ODctXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzQ4ODpcXHRyaGFzaHRhYmxlX3dhbGtfc3RvcChcXHUwMDI2aW5mby1cXHUwMDNlaXRlcik7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzQ4OS19XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zNDkxPXN0YXRpYyBpbnQgYnBmX2l0ZXJfaW5pdF9yaGFzaF9tYXAodm9pZCAqcHJpdl9kYXRhLCBzdHJ1Y3QgYnBmX2l0ZXJfYXV4X2luZm8gKmF1eClcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM0OTgtXFx0aW5mby1cXHUwMDNlcmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3JodGFiLCBtYXApO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjM0OTk6XFx0cmhhc2h0YWJsZV93YWxrX2VudGVyKFxcdTAwMjZpbmZvLVxcdTAwM2VyaHRhYi1cXHUwMDNlaHQsIFxcdTAwMjZpbmZvLVxcdTAwM2VpdGVyKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTAwLVxcdHJldHVybiAwO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzUwMz1zdGF0aWMgdm9pZCBicGZfaXRlcl9maW5pX3JoYXNoX21hcCh2b2lkICpwcml2X2RhdGEpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTA2LVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjM1MDc6XFx0cmhhc2h0YWJsZV93YWxrX2V4aXQoXFx1MDAyNmluZm8tXFx1MDAzZWl0ZXIpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM1MDgtXFx0YnBmX21hcF9wdXRfd2l0aF91cmVmKGluZm8tXFx1MDAzZW1hcCk7XFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNS0jaW5jbHVkZSBcXHUwMDNjbGludXgvYnRmLmhcXHUwMDNlXFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjY6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2hhc2h0YWJsZS5oXFx1MDAzZVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy03LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9qaGFzaC5oXFx1MDAzZVxcbi0tXFxua2VybmVsL2JwZi9vZmZsb2FkLmMtMTQtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Byb2NfbnMuaFxcdTAwM2VcXG5rZXJuZWwvYnBmL29mZmxvYWQuYzoxNTojaW5jbHVkZSBcXHUwMDNjbGludXgvcmhhc2h0YWJsZS5oXFx1MDAzZVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTE2LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFxcdTAwM2VcXG4tLVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jPTMzPXN0cnVjdCBicGZfb2ZmbG9hZF9uZXRkZXYge1xcbi0tXFxua2VybmVsL2JwZi9vZmZsb2FkLmMtNDEtXFxua2VybmVsL2JwZi9vZmZsb2FkLmM6NDI6c3RhdGljIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyBvZmZkZXZzX3BhcmFtcyA9IHtcXG5rZXJuZWwvYnBmL29mZmxvYWQuYy00My1cXHQubmVsZW1faGludFxcdFxcdD0gNCxcXG4tLVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTQ5LVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jOjUwOnN0YXRpYyBzdHJ1Y3Qgcmhhc2h0YWJsZSBvZmZkZXZzO1xcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTUxLVxcbi0tXFxua2VybmVsL2JwZi9vZmZsb2FkLmM9NjI9YnBmX29mZmxvYWRfZmluZF9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4tLVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTY1LVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jOjY2OlxcdHJldHVybiByaGFzaHRhYmxlX2xvb2t1cF9mYXN0KFxcdTAwMjZvZmZkZXZzLCBcXHUwMDI2bmV0ZGV2LCBvZmZkZXZzX3BhcmFtcyk7XFxua2VybmVsL2JwZi9vZmZsb2FkLmMtNjctfVxcbi0tXFxua2VybmVsL2JwZi9vZmZsb2FkLmM9Njk9c3RhdGljIGludCBfX2JwZl9vZmZsb2FkX2Rldl9uZXRkZXZfcmVnaXN0ZXIoc3RydWN0IGJwZl9vZmZsb2FkX2RldiAqb2ZmZGV2LFxcbi0tXFxua2VybmVsL2JwZi9vZmZsb2FkLmMtODMtXFxua2VybmVsL2JwZi9vZmZsb2FkLmM6ODQ6XFx0ZXJyID0gcmhhc2h0YWJsZV9pbnNlcnRfZmFzdChcXHUwMDI2b2ZmZGV2cywgXFx1MDAyNm9uZGV2LVxcdTAwM2VsLCBvZmZkZXZzX3BhcmFtcyk7XFxua2VybmVsL2JwZi9vZmZsb2FkLmMtODUtXFx0aWYgKGVycikge1xcbi0tXFxua2VybmVsL2JwZi9vZmZsb2FkLmM9MTM2PXN0YXRpYyB2b2lkIF9fYnBmX29mZmxvYWRfZGV2X25ldGRldl91bnJlZ2lzdGVyKHN0cnVjdCBicGZfb2ZmbG9hZF9kZXYgKm9mZmRldixcXG4tLVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTE0NC1cXG5rZXJuZWwvYnBmL29mZmxvYWQuYzoxNDU6XFx0b25kZXYgPSByaGFzaHRhYmxlX2xvb2t1cF9mYXN0KFxcdTAwMjZvZmZkZXZzLCBcXHUwMDI2bmV0ZGV2LCBvZmZkZXZzX3BhcmFtcyk7XFxua2VybmVsL2JwZi9vZmZsb2FkLmMtMTQ2LVxcdGlmIChXQVJOX09OKCFvbmRldikpXFxuLS1cXG5rZXJuZWwvYnBmL29mZmxvYWQuYy0xNDgtXFxua2VybmVsL2JwZi9vZmZsb2FkLmM6MTQ5OlxcdFdBUk5fT04ocmhhc2h0YWJsZV9yZW1vdmVfZmFzdChcXHUwMDI2b2ZmZGV2cywgXFx1MDAyNm9uZGV2LVxcdTAwM2VsLCBvZmZkZXZzX3BhcmFtcykpO1xcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTE1MC1cXG4tLVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jPTE3OT1zdGF0aWMgaW50IF9fYnBmX3Byb2dfZGV2X2JvdW5kX2luaXQoc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbi0tXFxua2VybmVsL2JwZi9vZmZsb2FkLmMtMjAxLVxcdFxcdC8qIFdoZW4gb25seSBiaW5kaW5nIHRvIHRoZSBkZXZpY2UsIGV4cGxpY2l0bHlcXG5rZXJuZWwvYnBmL29mZmxvYWQuYzoyMDI6XFx0XFx0ICogY3JlYXRlIGFuIGVudHJ5IGluIHRoZSBoYXNodGFibGUuXFxua2VybmVsL2JwZi9vZmZsb2FkLmMtMjAzLVxcdFxcdCAqL1xcbi0tXFxua2VybmVsL2JwZi9vZmZsb2FkLmM9ODYxPXN0YXRpYyBpbnQgX19pbml0IGJwZl9vZmZsb2FkX2luaXQodm9pZClcXG5rZXJuZWwvYnBmL29mZmxvYWQuYy04NjIte1xcbmtlcm5lbC9icGYvb2ZmbG9hZC5jOjg2MzpcXHRyZXR1cm4gcmhhc2h0YWJsZV9pbml0KFxcdTAwMjZvZmZkZXZzLCBcXHUwMDI2b2ZmZGV2c19wYXJhbXMpO1xcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTg2NC19XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0xMzgyPXN0YXRpYyBpbnQgbWFwX2NyZWF0ZV9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsIHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNDMzLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjE0MzQ6XFx0LyogZmluZCBtYXAgdHlwZSBhbmQgaW5pdCBtYXA6IGhhc2h0YWJsZSB2cyByYnRyZWUgdnMgYmxvb20gdnMgLi4uICovXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTQzNS1cXHRtYXBfdHlwZSA9IGF0dHItXFx1MDAzZW1hcF90eXBlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxODo1NToxMC4xMDQ1OTAzMzFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzU5NDIwOTQ5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCBpdDpcblxuKipDaGVja2luZyBLY29uZmlnIGZvciBCUEZfU1lTQ0FMTCoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ3ZlIGdvdCB0aGUgQlBGX1NZU0NBTEwgb3B0aW9uIGNvbmZpZ3VyZWQgY29ycmVjdGx5LiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBjb25zdWx0IHRoZSBLY29uZmlnIGZpbGVzLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCByaWdodD8gSSdsbCBwcm9iYWJseSBzdGFydCB3aXRoIHRoZSBjb3JlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzIOKAkyBwZXJoYXBzIGluIHRoZSBuZXR3b3JraW5nIG9yIHNlY3VyaXR5IHNlY3Rpb25zLCBkZXBlbmRpbmcgb24gaG93IGl0J3MgaW1wbGVtZW50ZWQuIEknbSBsb29raW5nIGZvciBhIHN0cmFpZ2h0Zm9yd2FyZCBkZWZpbml0aW9uIG9yIGEgY29uZGl0aW9uYWwgZGVwZW5kZW5jeSB0aGF0IGNvdWxkIGltcGFjdCB0aGlzIHNldHRpbmcuIEl0J3MgcG9zc2libGUgSSdsbCBuZWVkIHRvIHRyYWNlIGRlcGVuZGVuY2llcyBiYWNrd2FyZCBpZiBpdCdzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzLiBLbm93aW5nIG15IHdheSBhcm91bmQgdGhlIGNvbmZpZyBzeXN0ZW0sIEkgZXhwZWN0IEkgc2hvdWxkIGJlIGFibGUgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgaXQncyBlbmFibGVkLCBkaXNhYmxlZCwgb3Igc2V0IHRvIGEgbW9kdWxlLiBJIGFtIGFsc28gcGxhbm5pbmcgdG8gbG9vayBmb3IgYW55IGRlZmF1bHQgc2V0dGluZ3MgYXNzb2NpYXRlZCB3aXRoIGl0LCBvciBtYXliZSBhbnkgYXNzb2NpYXRlZCBtZW51IGVudHJpZXMuIFRoZW4gSSdsbCBjaGVjayBhbmQgbWFrZSBzdXJlIHRoYXQgdGhpcyBzZXR0aW5nIGlzIGFwcHJvcHJpYXRlIGZvciB0aGlzIGJ1aWxkIGFyY2hpdGVjdHVyZSwgYW5kIGFueSByZWxhdGVkIGRlcGVuZGVuY2llcyBvciBjb25mbGljdHMuIExldCdzIGdldCB0byBpdCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTQxMDUsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxODo1NToxMy42OTg4MDI5MzVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODUwMTEyLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE4OjU1OjEzLjc0MzY2MjEzOFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTM0Njg5MDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkh1bnRpbmcgZm9yIEJQRl9TWVNDQUxMIGluIHRoZSBDb25maWcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIGBCUEZfU1lTQ0FMTGAuIEknbSBnb2luZyB0byBzdGFydCBieSBhc3N1bWluZyBpdCdzIGxpa2VseSBhIGtlcm5lbCBjb25maWd1cmF0aW9uIHBhcmFtZXRlciwgcHJvYmFibHkgdW5kZXIgb25lIG9mIHRoZSBicm9hZGVyIEJQRiBvciBzZWN1cml0eS1yZWxhdGVkIHNlY3Rpb25zLiBTaW5jZSBpdCdzIGEgc3lzY2FsbC1yZWxhdGVkIGZlYXR1cmUsIEkgY2FuIGFsbW9zdCBndWFyYW50ZWUgaXRzIGV4aXN0ZW5jZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGl0J3MgZGVmaW5lZCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdXNlIHRoZSBzdGFuZGFyZCB0b29sczsgYSBgZ3JlcGAgdGhyb3VnaCB0aGUga2VybmVsJ3MgYEtjb25maWdgIGZpbGVzIHNob3VsZCBkbyB0aGUgdHJpY2ssIG1heWJlIHN0YXJ0aW5nIHdpdGggYSB3aWxkY2FyZCBzZWFyY2ggbGlrZSBgS2NvbmZpZyogQlBGX1NZU0NBTExgLiBPciBwZXJoYXBzIEkgd2lsbCB1c2UgJ2ZpbmQnIGFuZCAnZ3JlcCcgY29tbWFuZHMgdG8gc2VhcmNoLiBEZXBlbmRpbmcgb24gdGhlIHNpemUgb2YgdGhlIGNvZGViYXNlLCBJIG1pZ2h0IG5lZWQgdG8gcmVmaW5lIHRoYXQgc2VhcmNoIGlmIGl0J3MgdG9vIGJyb2FkIGluaXRpYWxseS4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGNvbnRleHQgYXJvdW5kIHRoYXQgb3B0aW9uIOKAkyB3aGF0IG90aGVyIGZlYXR1cmVzIGRvZXMgaXQgZW5hYmxlIG9yIGRpc2FibGU/IEFyZSB0aGVyZSBhbnkgcHJlcmVxdWlzaXRlcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFuZCBtb3JlIGltcG9ydGFudGx5LCB3aGF0J3MgdGhlIGRlZmF1bHQgdmFsdWUgYW5kIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGl0PyBJJ2xsIHByb2JhYmx5IGFsc28gY2hlY2sgcmVsZXZhbnQgYE1ha2VmaWxlYHMgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBjb25maWcgb3B0aW9uIHRyYW5zbGF0ZXMgaW50byBidWlsZCBmbGFncyBhbmQgdWx0aW1hdGVseSwgaG93IGl0IGFmZmVjdHMgdGhlIGdlbmVyYXRlZCBrZXJuZWwgY29kZS4gSWRlYWxseSwgSSdsbCBmaW5kIGEgY29uY2lzZSBkZXNjcmlwdGlvbiBvZiB3aGF0IHRoZSBvcHRpb24gYWN0dWFsbHkgKmRvZXMqIGFsb25nIHRoZSB3YXkuIFRoYXQncyB0aGUgcHJpb3JpdHkgcmlnaHQgbm93LCBmaW5kaW5nIGl0cyBkZWZpbml0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDM5MSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE4OjU1OjE2LjI3ODM1NDQzMVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1OTkzODIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI5PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTMwLVxcbmtlcm5lbC9icGYvS2NvbmZpZzozMTpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMzItXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxODo1NToxNy44MzgyOTgxNDFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkwNzI3MDEyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwncyBCUEYgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gc3RhcnQgd2l0aCB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUgQmVya2VsZXkgUGFja2V0IEZpbHRlciAoQlBGKSBzdWJzeXN0ZW0uIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGF2YWlsYWJsZSBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgYmVmb3JlIEkgZ28gZGVlcGVyLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBsb29rIGF0IGBrZXJuZWwvYnBmL0tjb25maWdgLiBUaGlzIEtjb25maWcgZmlsZSB3aWxsIGJlIHRoZSBjZW50cmFsIHBvaW50IHRvIHVuZGVyc3RhbmQgaG93IEJQRiBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIGtlcm5lbCdzIGJ1aWxkIHN5c3RlbSBhbmQgd2hhdCBmZWF0dXJlcyBjYW4gYmUgZW5hYmxlZCBvciBkaXNhYmxlZC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBCUEYgY29udHJvbHMgYXJlIGRlZmluZWQsIGFuZCB3aGVyZSBJIGNhbiBzdGFydCB1bnRhbmdsaW5nIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gZGlmZmVyZW50IEJQRiBmZWF0dXJlcy4gVGhpcyBpcyB0aGUgbG9naWNhbCBmaXJzdCBzdGVwIGZvciBtZSB0byB1bmRlcnN0YW5kIGhvdyBCUEYgZml0cyBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4MzIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxODo1NToxOS43NDU1NzAxNTZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU3MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDMwOlxcdFxcbiAgMzE6XFx0Y29uZmlnIEJQRl9TWVNDQUxMXFxuICAzMjpcXHRcXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuICAzMzpcXHRcXHRzZWxlY3QgQlBGXFxuICAzNDpcXHRcXHRzZWxlY3QgSVJRX1dPUktcXG4gIDM1OlxcdFxcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxcbiAgMzY6XFx0XFx0c2VsZWN0IFRBU0tTX1RSQUNFX1JDVVxcbiAgMzc6XFx0XFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcXG4gIDM4OlxcdFxcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXFxuICAzOTpcXHRcXHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcXG4gIDQwOlxcdFxcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXFxuICA0MTpcXHRcXHRkZWZhdWx0IG5cXG4gIDQyOlxcdFxcdGhlbHBcXG4gIDQzOlxcdFxcdCAgRW5hYmxlIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIEJQRiBwcm9ncmFtc1xcbiAgNDQ6XFx0XFx0ICBhbmQgbWFwcyB2aWEgZmlsZSBkZXNjcmlwdG9ycy5cXG4gIDQ1OlxcdFxcbiAgNDY6XFx0Y29uZmlnIEJQRl9KSVRcXG4gIDQ3OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXFxcIlxcbiAgNDg6XFx0XFx0ZGVwZW5kcyBvbiBCUEZcXG4gIDQ5OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9DQlBGX0pJVCB8fCBIQVZFX0VCUEZfSklUXFxuICA1MDpcXHRcXHRzZWxlY3QgRVhFQ01FTVxcbiAgNTE6XFx0XFx0aGVscFxcbiAgNTI6XFx0XFx0ICBCUEYgcHJvZ3JhbXMgYXJlIG5vcm1hbGx5IGhhbmRsZWQgYnkgYSBCUEYgaW50ZXJwcmV0ZXIuIFRoaXMgb3B0aW9uXFxuICA1MzpcXHRcXHQgIGFsbG93cyB0aGUga2VybmVsIHRvIGdlbmVyYXRlIG5hdGl2ZSBjb2RlIHdoZW4gYSBwcm9ncmFtIGlzIGxvYWRlZFxcbiAgNTQ6XFx0XFx0ICBpbnRvIHRoZSBrZXJuZWwuIFRoaXMgd2lsbCBzaWduaWZpY2FudGx5IHNwZWVkLXVwIHByb2Nlc3Npbmcgb2YgQlBGXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE4OjU1OjE5Ljc0NTYyNzA3NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4MTE0NDA5ODY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIEhhc2h0YWJsZSBCYXRjaCBMb29rdXAvRGVsZXRlIFBhdGNoIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gdGhlIGNvbmZpZyB3ZSdyZSBkZWFsaW5nIHdpdGggaXMgYEJQRl9TWVNDQUxMYC4gTGV0J3MgZGl2ZSBpbiBhbmQgc2VlIHdoYXQncyBjaGFuZ2VkLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGtlcm5lbC9icGYvaGFzaHRhYi5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCgpYCBmdW5jdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQncyB0aGUgY29yZSBpc3N1ZT8gQWgsIGl0IGFwcGVhcnMgdGhhdCB3aGVuIGl0ZXJhdGluZyB0aHJvdWdoIGVtcHR5IGJ1Y2tldHMgZHVyaW5nIGEgYmF0Y2ggbG9va3VwL2RlbGV0ZSwgdGhlIG9yaWdpbmFsIGNvZGUgdXNlZCB0byBqdXN0IGxvb3Agd2l0aG91dCBkcm9wcGluZyBSQ1UsIGVuYWJsaW5nIGluc3RydW1lbnRhdGlvbiwgb3IgcmVzY2hlZHVsaW5nLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIFJDVSBzdGFsbHMgb3IgcHJvbG9uZ2VkIHBlcmlvZHMgd2hlcmUgaW5zdHJ1bWVudGF0aW9uIGlzIGRpc2FibGVkLCBlc3BlY2lhbGx5IGluIHNwYXJzZSBoYXNoIG1hcHMuIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIHJlc2NoZWR1bGluZyBtZWNoYW5pc20gKGBIVEFCX0JBVENIX0VNUFRZX1JFU0NIRUQgNjRgKSBhZnRlciBhIGNlcnRhaW4gbnVtYmVyIG9mIGVtcHR5IGJ1Y2tldHMsIHdoaWNoIHNlZW1zIGxpa2UgYSBnb29kIGltcHJvdmVtZW50LiBJdCdzIGVzc2VudGlhbGx5IGRyb3BwaW5nIFJDVSwgZW5hYmxpbmcgaW5zdHJ1bWVudGF0aW9uLCBjYWxsaW5nIGBjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKClgLCBhbmQgdGhlbiByZXN0YXJ0aW5nIHRoZSBsb29wLiBUaGlzIGFsc28gY2FsbHMgYGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKWAgd2hlbiBhZHZhbmNpbmcgdG8gdGhlIG5leHQgbm9uLWVtcHR5IGJ1Y2tldC5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcywgaXMgdGhpcyBjb2RlIHJlYWNoYWJsZT8gQWJzb2x1dGVseSEgVGhpcyBjaGFuZ2UgZGlyZWN0bHkgYWZmZWN0cyB0aGUgYGJwZigpYCBzeXNjYWxsJ3MgbWFwIGJhdGNoIG9wZXJhdGlvbnM6IGBodGFiX21hcF9sb29rdXBfYmF0Y2hgLCBgaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgLCBgaHRhYl9scnVfbWFwX2xvb2t1cF9iYXRjaGAsIGBodGFiX2xydV9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgLCBgaHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9iYXRjaGAsIGBodGFiX3BlcmNwdV9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgLCBgaHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfYmF0Y2hgLCBhbmQgYGh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgIHdoaWNoIGFyZSBpbnZva2VkIGZyb20gdXNlcnNwYWNlIHZpYSBgc3lzX2JwZigpYCB3aXRoIGBCUEZfTUFQX0xPT0tVUF9CQVRDSGAgYW5kIGBCUEZfTUFQX0xPT0tVUF9BTkRfREVMRVRFX0JBVENIYC5cblxuVGhlIGNvcmUgc3Vic3lzdGVtIHRvdWNoZWQgaGVyZSBpcyBCUEYgbWFwIGhhbmRsaW5nIGFuZCBzeXNjYWxsIGhhbmRsaW5nLiBUaGlzIGlzIHJpZ2h0IGluIHRoZSB3aGVlbGhvdXNlIGZvciBwb3RlbnRpYWwgY29uY3VycmVuY3kgYnVncy4gSXQncyB0b3RhbGx5IHBsYXVzaWJsZSB0aGF0IHRoaXMgY291bGQgaW50cm9kdWNlIFJDVSBsaWZldGltZSBpc3N1ZXMsIHN0YXRlIGNvcnJ1cHRpb24sIGluZmluaXRlIGxvb3BzLCBvciBldmVuIG1pc3NlZCBlbGVtZW50cyBkdXJpbmcgYmF0Y2ggb3BlcmF0aW9ucyBpZiByZXNjaGVkdWxpbmcgaGFwcGVucyBtaWQtaXRlcmF0aW9uLCBlc3BlY2lhbGx5IHdpdGggY29uY3VycmVudCB1cGRhdGVzL2RlbGV0aW9ucyBvciBsYXJnZSwgc3BhcnNlIGhhc2ggbWFwcy4gR2l2ZW4gdGhlIGNyaXRlcmlhLCB0aGlzIGlzIGEgZGVmaW5pdGUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLlxuXG5Mb29raW5nIGF0IHRoZSBwb3NpdGl2ZSBjcml0ZXJpYSwgdGhpcyBwYXRjaCBkZWZpbml0aXZlbHkgdG91Y2hlcyBcInJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGVcIiB3aXRoaW4gYSBjb3JlIHN1YnN5c3RlbSAoQlBGIGFuZCBzeXNjYWxsIGhhbmRsaW5nKSwgc28gdGhlIHZlcmRpY3QgaXMgYSByZXNvdW5kaW5nIGB0cnVlYCBmb3IgYFdvcnRoRnV6emluZ2AuXG5cbkZvciBmb2N1cyBzeW1ib2xzLCB3ZSdsbCBuZWVkIHRvIGZvY3VzIG9uIGFsbCB0aGUgYmF0Y2ggb3BlcmF0aW9uczogYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgLCBgaHRhYl9tYXBfbG9va3VwX2JhdGNoYCwgYGh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgYGh0YWJfbHJ1X21hcF9sb29rdXBfYmF0Y2hgLCBgaHRhYl9scnVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgYGh0YWJfcGVyY3B1X21hcF9sb29rdXBfYmF0Y2hgLCBgaHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgYGh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2JhdGNoYCwgYW5kIGBodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYC4gV2UgYXJlIGRpcmVjdGx5IHRhcmdldGluZyB0aGUgZnVuY3Rpb25zIG1vZGlmaWVkIGFuZCBhbGwgZW50cnkgcG9pbnRzLlxuXG5UaGUgbmVjZXNzYXJ5IGNvbmZpZyBpcyBqdXN0IGBCUEZfU1lTQ0FMTGAsIG5vdGhpbmcgZWxzZSBuZWVkZWQuXG5cblRoZXJlZm9yZSwgb3VyIGZpbmFsIGFzc2Vzc21lbnQgaXM6XG5cbiogICBgV29ydGhGdXp6aW5nYDogYHRydWVgXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBgW1wiQlBGX1NZU0NBTExcIl1gXG4qICAgYEZvY3VzU3ltYm9sc2A6IGBbXCJfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoXCIsIFwiaHRhYl9tYXBfbG9va3VwX2JhdGNoXCIsIFwiaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hcIiwgXCJodGFiX2xydV9tYXBfbG9va3VwX2JhdGNoXCIsIFwiaHRhYl9scnVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoXCIsIFwiaHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9iYXRjaFwiLCBcImh0YWJfcGVyY3B1X21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaFwiLCBcImh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2JhdGNoXCIsIFwiaHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaFwiXWBcbiogICBSZWFzb25pbmc6IFRoZSBwYXRjaCBtb2RpZmllcyBjcml0aWNhbCBCUEYgYW5kIHN5c2NhbGwgaGFuZGxpbmcgY29kZSByZWxhdGVkIHRvIG1hcCBiYXRjaCBvcGVyYXRpb25zLiBUaGUgcG90ZW50aWFsIGZvciBjb25jdXJyZW5jeSBpc3N1ZXMgaW4gdGhlIGhhbmRsaW5nIG9mIHNwYXJzZSBoYXNoIG1hcHMgd2FycmFudHMgcmlnb3JvdXMgZnV6emluZy5cblxuTm93LCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1Mzk1LCJPdXRwdXRUb2tlbnMiOjI2NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxODo1NToyNy44NjAwMzkyNzVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjU4ODU5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoXCIsXG4gICAgXCJodGFiX21hcF9sb29rdXBfYmF0Y2hcIixcbiAgICBcImh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoXCIsXG4gICAgXCJodGFiX2xydV9tYXBfbG9va3VwX2JhdGNoXCIsXG4gICAgXCJodGFiX2xydV9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hcIixcbiAgICBcImh0YWJfcGVyY3B1X21hcF9sb29rdXBfYmF0Y2hcIixcbiAgICBcImh0YWJfcGVyY3B1X21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaFwiLFxuICAgIFwiaHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfYmF0Y2hcIixcbiAgICBcImh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmF0Y2ggbG9va3VwIGFuZCBkZWxldGUgaXRlcmF0aW9uIGxvZ2ljIGluIGtlcm5lbC9icGYvaGFzaHRhYi5jIChfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKSB0byBpbnRyb2R1Y2UgcGVyaW9kaWMgcmVzY2hlZHVsaW5nIChjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKSBhbmQgUkNVIGNyaXRpY2FsIHNlY3Rpb24gZXhpdHMgd2hlbiBlbmNvdW50ZXJpbmcgY29uc2VjdXRpdmUgZW1wdHkgYnVja2V0cy4gVGhpcyBhbHRlcnMgUkNVIHN5bmNocm9uaXphdGlvbiwgbG9ja2luZywgYW5kIGl0ZXJhdGlvbiBjb250cm9sIGZsb3cgaW4gcmVhY2hhYmxlIEJQRiBtYXAgc3lzY2FsbCBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaFwiLFxuICAgIFwiaHRhYl9tYXBfbG9va3VwX2JhdGNoXCIsXG4gICAgXCJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaFwiLFxuICAgIFwiaHRhYl9scnVfbWFwX2xvb2t1cF9iYXRjaFwiLFxuICAgIFwiaHRhYl9scnVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoXCIsXG4gICAgXCJodGFiX3BlcmNwdV9tYXBfbG9va3VwX2JhdGNoXCIsXG4gICAgXCJodGFiX3BlcmNwdV9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hcIixcbiAgICBcImh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2JhdGNoXCIsXG4gICAgXCJodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJhdGNoIGxvb2t1cCBhbmQgZGVsZXRlIGl0ZXJhdGlvbiBsb2dpYyBpbiBrZXJuZWwvYnBmL2hhc2h0YWIuYyAoX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCkgdG8gaW50cm9kdWNlIHBlcmlvZGljIHJlc2NoZWR1bGluZyAoY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcykgYW5kIFJDVSBjcml0aWNhbCBzZWN0aW9uIGV4aXRzIHdoZW4gZW5jb3VudGVyaW5nIGNvbnNlY3V0aXZlIGVtcHR5IGJ1Y2tldHMuIFRoaXMgYWx0ZXJzIFJDVSBzeW5jaHJvbml6YXRpb24sIGxvY2tpbmcsIGFuZCBpdGVyYXRpb24gY29udHJvbCBmbG93IGluIHJlYWNoYWJsZSBCUEYgbWFwIHN5c2NhbGwgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTg6NTU6MjcuOTMyNjM0NjUzWiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDgxMzIxNzg4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE4OjU1OjI3LjkzMzAzNTQ0M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE0ODEyODEzMTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHBlcmlvZGljIHZvbHVudGFyeSByZXNjaGVkdWxpbmcgKGBjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKClgKSBhbmQgUkNVIHVubG9ja2luZyBhZnRlciBpdGVyYXRpbmcgb3ZlciBhIGJhdGNoIG9mIGVtcHR5IGJ1Y2tldHMgKGBIVEFCX0JBVENIX0VNUFRZX1JFU0NIRURgKSBpbiBCUEYgaGFzaCB0YWJsZSBiYXRjaCBvcGVyYXRpb25zIChgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGApIHRvIHByZXZlbnQgc29mdCBsb2NrdXBzIGFuZCBSQ1Ugc3RhbGxzLlxcblxcblRoZSBuZXdseSBpbnRyb2R1Y2VkIGNvdW50ZXIgdmFyaWFibGUgYGVtcHR5X2NudGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byAwIGFuZCBjb3JyZWN0bHkgcmVzZXQuIFRoZSBwYXRjaCBtb2RpZmllcyBvbmx5IGxvb3AgY29udHJvbCBmbG93IGFuZCBzY2hlZHVsaW5nIGJlaGF2aW9yOyBpdCBkb2VzIG5vdCBjaGFuZ2UgYnVmZmVyIGFsbG9jYXRpb24sIGRhdGEgY29weWluZyBsZW5ndGhzLCBzdHJ1Y3QgZGVmaW5pdGlvbnMsIG9yIG1lbW9yeSBpbml0aWFsaXphdGlvbiBsb2dpYywgbm9yIGRvZXMgaXQgY3JlYXRlIGFueSByaXNrIG9mIHJlYWRpbmcgb3IgbGVha2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzNzBlNjc0ZmRjNjQ2Yjk2ZmI2ODNiNWM2NTRjYzkyN2QwZDI4MWUyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAxODo1NDo0NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGFzaHRhYi5jIGIva2VybmVsL2JwZi9oYXNodGFiLmNcbmluZGV4IDZmMzMxYzgwMTMwZDcuLmE3MmRjNWI5ZjE4NGQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuKysrIGIva2VybmVsL2JwZi9oYXNodGFiLmNcbkBAIC0xNzcyLDYgKzE3NzIsMTIgQEAgc3RhdGljIGludCBodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcdFx0XHRcdFx0XHQgZmxhZ3MpO1xuIH1cbiBcbisvKlxuKyAqIE1heCBjb25zZWN1dGl2ZSBlbXB0eSBidWNrZXRzIHRvIHdhbGsgaW4gb25lIFJDVSArXG4rICogaW5zdHJ1bWVudGF0aW9uLWRpc2FibGVkIHNlY3Rpb24gYmVmb3JlIHJlc2NoZWR1bGluZy5cbisgKi9cbisjZGVmaW5lIEhUQUJfQkFUQ0hfRU1QVFlfUkVTQ0hFRCA2NFxuK1xuIHN0YXRpYyBpbnRcbiBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXG4gXHRcdFx0XHQgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbkBAIC0xNzkzLDYgKzE3OTksNyBAQCBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzID0gMDtcbiBcdGJvb2wgbG9ja2VkID0gZmFsc2U7XG4gXHRzdHJ1Y3QgaHRhYl9lbGVtICpsO1xuK1x0dTMyIGVtcHR5X2NudCA9IDA7XG4gXHRzdHJ1Y3QgYnVja2V0ICpiO1xuIFx0aW50IHJldCA9IDA7XG4gXG5AQCAtMTk3MSwxMiArMTk3OCwyMSBAQCBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXG4gXHR9XG4gXG4gbmV4dF9iYXRjaDpcbi1cdC8qIElmIHdlIGFyZSBub3QgY29weWluZyBkYXRhLCB3ZSBjYW4gZ28gdG8gbmV4dCBidWNrZXQgYW5kIGF2b2lkXG4tXHQgKiB1bmxvY2tpbmcgdGhlIHJjdS5cbitcdC8qXG4rXHQgKiBJZiB3ZSBhcmUgbm90IGNvcHlpbmcgZGF0YSwgd2UgY2FuIGdvIHRvIG5leHQgYnVja2V0IGFuZCBhdm9pZFxuK1x0ICogdW5sb2NraW5nIHRoZSByY3UuIEJvdW5kIHRoZSB3YWxrIHRob3VnaDogYWZ0ZXJcbitcdCAqIEhUQUJfQkFUQ0hfRU1QVFlfUkVTQ0hFRCBjb25zZWN1dGl2ZSBlbXB0eSBidWNrZXRzLCBmdWxseSBleGl0XG4rXHQgKiB0aGUgY3JpdGljYWwgc2VjdGlvbiAobm8gbG9ja3MgYXJlIGhlbGQgaGVyZSkgYW5kIHJlc2NoZWR1bGUuXG4gXHQgKi9cbiBcdGlmICghYnVja2V0X2NudCBcdTAwMjZcdTAwMjYgKGJhdGNoICsgMSBcdTAwM2MgaHRhYi1cdTAwM2VuX2J1Y2tldHMpKSB7XG4gXHRcdGJhdGNoKys7XG4tXHRcdGdvdG8gYWdhaW5fbm9jb3B5O1xuK1x0XHRpZiAoKytlbXB0eV9jbnQgXHUwMDNjIEhUQUJfQkFUQ0hfRU1QVFlfUkVTQ0hFRClcbitcdFx0XHRnb3RvIGFnYWluX25vY29weTtcbitcdFx0ZW1wdHlfY250ID0gMDtcbitcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRcdGJwZl9lbmFibGVfaW5zdHJ1bWVudGF0aW9uKCk7XG4rXHRcdGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKTtcbitcdFx0Z290byBhZ2FpbjtcbiBcdH1cbiBcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuQEAgLTE5OTAsMTEgKzIwMDYsMTMgQEAgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuIFx0fVxuIFxuIFx0dG90YWwgKz0gYnVja2V0X2NudDtcbitcdGVtcHR5X2NudCA9IDA7XG4gXHRiYXRjaCsrO1xuIFx0aWYgKGJhdGNoIFx1MDAzZT0gaHRhYi1cdTAwM2VuX2J1Y2tldHMpIHtcbiBcdFx0cmV0ID0gLUVOT0VOVDtcbiBcdFx0Z290byBhZnRlcl9sb29wO1xuIFx0fVxuK1x0Y29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpO1xuIFx0Z290byBhZ2FpbjtcbiBcbiBhZnRlcl9sb29wOlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTg6NTU6MjcuOTMzMDM2MzQzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ1NzQ2NjI2MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBIYXNodGFibGUgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIHdlIGhhdmUgYSBwYXRjaCB0aGF0J3MgdG91Y2hpbmcgYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgIHdpdGhpbiBga2VybmVsL2JwZi9oYXNodGFiLmNgLiBOYXR1cmFsbHksIEkgd2FudCB0byBzZWUgdGhlICpjb250ZXh0KiBhcm91bmQgdGhpcyBmdW5jdGlvbi4gTW9kaWZpY2F0aW9ucyB0byBiYXRjaCBvcGVyYXRpb25zIGNhbiBiZSB0cmlja3ksIHNvIGEgdGhvcm91Z2ggaW5zcGVjdGlvbiBpcyBjcnVjaWFsLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgYGxvb2t1cF9hbmRfZGVsZXRlYCBmdW5jdGlvbiBpcyBiZWhhdmluZy4gVGhlcmVmb3JlLCBJJ2xsIG5lZWQgdG8gbG9vayBhcm91bmQgbGluZSAxNzcwIHRvIDIwMjAgd2l0aGluIHRoYXQgZmlsZS4gTGV0J3MgZmlyZSB1cCBgcmVhZC1maWxlYCBhbmQgdGFrZSBhIGRlZXAgZGl2ZSBpbnRvIHRoYXQgc2VjdGlvbiBvZiBgaGFzaHRhYi5jYC4gSSBuZWVkIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIHRoaXMgZnVuY3Rpb24ncyBsb2dpYyBhbmQgYW55IHJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIGJlZm9yZSBJIGNhbiBwcm9wZXJseSBldmFsdWF0ZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MzMsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE4OjU1OjMyLjUwNzcwMTc2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMTEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL2hhc2h0YWIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzgwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTc4MDpcXHRcXG4xNzgxOlxcdHN0YXRpYyBpbnRcXG4xNzgyOlxcdF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4xNzgzOlxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbjE3ODQ6XFx0XFx0XFx0XFx0XFx0ICAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cixcXG4xNzg1OlxcdFxcdFxcdFxcdFxcdCAgIGJvb2wgZG9fZGVsZXRlLCBib29sIGlzX2xydV9tYXAsXFxuMTc4NjpcXHRcXHRcXHRcXHRcXHQgICBib29sIGlzX3BlcmNwdSlcXG4xNzg3OlxcdHtcXG4xNzg4OlxcdFxcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcXG4xNzg5OlxcdFxcdHZvaWQgKmtleXMgPSBOVUxMLCAqdmFsdWVzID0gTlVMTCwgKnZhbHVlLCAqZHN0X2tleSwgKmRzdF92YWw7XFxuMTc5MDpcXHRcXHR2b2lkIF9fdXNlciAqdXZhbHVlcyA9IHU2NF90b191c2VyX3B0cihhdHRyLVxcdTAwM2ViYXRjaC52YWx1ZXMpO1xcbjE3OTE6XFx0XFx0dm9pZCBfX3VzZXIgKnVrZXlzID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXFx1MDAzZWJhdGNoLmtleXMpO1xcbjE3OTI6XFx0XFx0dm9pZCBfX3VzZXIgKnViYXRjaCA9IHU2NF90b191c2VyX3B0cihhdHRyLVxcdTAwM2ViYXRjaC5pbl9iYXRjaCk7XFxuMTc5MzpcXHRcXHR1MzIgYmF0Y2gsIG1heF9jb3VudCwgc2l6ZSwgYnVja2V0X3NpemUsIG1hcF9pZDtcXG4xNzk0OlxcdFxcdHU2NCBlbGVtX21hcF9mbGFncywgbWFwX2ZsYWdzLCBhbGxvd2VkX2ZsYWdzO1xcbjE3OTU6XFx0XFx0dTMyIGJ1Y2tldF9jbnQsIHRvdGFsLCBrZXlfc2l6ZSwgdmFsdWVfc2l6ZTtcXG4xNzk2OlxcdFxcdHN0cnVjdCBodGFiX2VsZW0gKm5vZGVfdG9fZnJlZSA9IE5VTEw7XFxuMTc5NzpcXHRcXHRzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGVhZDtcXG4xNzk4OlxcdFxcdHN0cnVjdCBobGlzdF9udWxsc19ub2RlICpuO1xcbjE3OTk6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncyA9IDA7XFxuMTgwMDpcXHRcXHRib29sIGxvY2tlZCA9IGZhbHNlO1xcbjE4MDE6XFx0XFx0c3RydWN0IGh0YWJfZWxlbSAqbDtcXG4xODAyOlxcdFxcdHUzMiBlbXB0eV9jbnQgPSAwO1xcbjE4MDM6XFx0XFx0c3RydWN0IGJ1Y2tldCAqYjtcXG4xODA0OlxcdFxcdGludCByZXQgPSAwO1xcbjE4MDU6XFx0XFxuMTgwNjpcXHRcXHRlbGVtX21hcF9mbGFncyA9IGF0dHItXFx1MDAzZWJhdGNoLmVsZW1fZmxhZ3M7XFxuMTgwNzpcXHRcXHRhbGxvd2VkX2ZsYWdzID0gQlBGX0ZfTE9DSztcXG4xODA4OlxcdFxcdGlmICghZG9fZGVsZXRlIFxcdTAwMjZcXHUwMDI2IGlzX3BlcmNwdSlcXG4xODA5OlxcdFxcdFxcdGFsbG93ZWRfZmxhZ3MgfD0gQlBGX0ZfQ1BVO1xcbjE4MTA6XFx0XFx0cmV0ID0gYnBmX21hcF9jaGVja19vcF9mbGFncyhtYXAsIGVsZW1fbWFwX2ZsYWdzLCBhbGxvd2VkX2ZsYWdzKTtcXG4xODExOlxcdFxcdGlmIChyZXQpXFxuMTgxMjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE4MTM6XFx0XFxuMTgxNDpcXHRcXHRtYXBfZmxhZ3MgPSBhdHRyLVxcdTAwM2ViYXRjaC5mbGFncztcXG4xODE1OlxcdFxcdGlmIChtYXBfZmxhZ3MpXFxuMTgxNjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xODE3OlxcdFxcbjE4MTg6XFx0XFx0bWF4X2NvdW50ID0gYXR0ci1cXHUwMDNlYmF0Y2guY291bnQ7XFxuMTgxOTpcXHRcXHRpZiAoIW1heF9jb3VudClcXG4xODIwOlxcdFxcdFxcdHJldHVybiAwO1xcbjE4MjE6XFx0XFxuMTgyMjpcXHRcXHRpZiAocHV0X3VzZXIoMCwgXFx1MDAyNnVhdHRyLVxcdTAwM2ViYXRjaC5jb3VudCkpXFxuMTgyMzpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4xODI0OlxcdFxcbjE4MjU6XFx0XFx0YmF0Y2ggPSAwO1xcbjE4MjY6XFx0XFx0aWYgKHViYXRjaCBcXHUwMDI2XFx1MDAyNiBjb3B5X2Zyb21fdXNlcihcXHUwMDI2YmF0Y2gsIHViYXRjaCwgc2l6ZW9mKGJhdGNoKSkpXFxuMTgyNzpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4xODI4OlxcdFxcbjE4Mjk6XFx0XFx0aWYgKGJhdGNoIFxcdTAwM2U9IGh0YWItXFx1MDAzZW5fYnVja2V0cylcXG4xODMwOlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbjE4MzE6XFx0XFxuMTgzMjpcXHRcXHRrZXlfc2l6ZSA9IGh0YWItXFx1MDAzZW1hcC5rZXlfc2l6ZTtcXG4xODMzOlxcdFxcdHZhbHVlX3NpemUgPSBodGFiLVxcdTAwM2VtYXAudmFsdWVfc2l6ZTtcXG4xODM0OlxcdFxcdHNpemUgPSByb3VuZF91cCh2YWx1ZV9zaXplLCA4KTtcXG4xODM1OlxcdFxcdGlmIChpc19wZXJjcHUgXFx1MDAyNlxcdTAwMjYgIShlbGVtX21hcF9mbGFncyBcXHUwMDI2IEJQRl9GX0NQVSkpXFxuMTgzNjpcXHRcXHRcXHR2YWx1ZV9zaXplID0gc2l6ZSAqIG51bV9wb3NzaWJsZV9jcHVzKCk7XFxuMTgzNzpcXHRcXHR0b3RhbCA9IDA7XFxuMTgzODpcXHRcXHQvKiB3aGlsZSBleHBlcmltZW50aW5nIHdpdGggaGFzaCB0YWJsZXMgd2l0aCBzaXplcyByYW5naW5nIGZyb20gMTAgdG9cXG4xODM5OlxcdFxcdCAqIDEwMDAsIGl0IHdhcyBvYnNlcnZlZCB0aGF0IGEgYnVja2V0IGNhbiBoYXZlIHVwIHRvIDUgZW50cmllcy5cXG4xODQwOlxcdFxcdCAqL1xcbjE4NDE6XFx0XFx0YnVja2V0X3NpemUgPSA1O1xcbjE4NDI6XFx0XFxuMTg0MzpcXHRhbGxvYzpcXG4xODQ0OlxcdFxcdC8qIFdlIGNhbm5vdCBkbyBjb3B5X2Zyb21fdXNlciBvciBjb3B5X3RvX3VzZXIgaW5zaWRlXFxuMTg0NTpcXHRcXHQgKiB0aGUgcmN1X3JlYWRfbG9jay4gQWxsb2NhdGUgZW5vdWdoIHNwYWNlIGhlcmUuXFxuMTg0NjpcXHRcXHQgKi9cXG4xODQ3OlxcdFxcdGtleXMgPSBrdm1hbGxvY19hcnJheShrZXlfc2l6ZSwgYnVja2V0X3NpemUsIEdGUF9VU0VSIHwgX19HRlBfTk9XQVJOKTtcXG4xODQ4OlxcdFxcdHZhbHVlcyA9IGt2bWFsbG9jX2FycmF5KHZhbHVlX3NpemUsIGJ1Y2tldF9zaXplLCBHRlBfVVNFUiB8IF9fR0ZQX05PV0FSTik7XFxuMTg0OTpcXHRcXHRpZiAoIWtleXMgfHwgIXZhbHVlcykge1xcbjE4NTA6XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4xODUxOlxcdFxcdFxcdGdvdG8gYWZ0ZXJfbG9vcDtcXG4xODUyOlxcdFxcdH1cXG4xODUzOlxcdFxcbjE4NTQ6XFx0YWdhaW46XFxuMTg1NTpcXHRcXHRicGZfZGlzYWJsZV9pbnN0cnVtZW50YXRpb24oKTtcXG4xODU2OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4xODU3OlxcdGFnYWluX25vY29weTpcXG4xODU4OlxcdFxcdGRzdF9rZXkgPSBrZXlzO1xcbjE4NTk6XFx0XFx0ZHN0X3ZhbCA9IHZhbHVlcztcXG4xODYwOlxcdFxcdGIgPSBcXHUwMDI2aHRhYi1cXHUwMDNlYnVja2V0c1tiYXRjaF07XFxuMTg2MTpcXHRcXHRoZWFkID0gXFx1MDAyNmItXFx1MDAzZWhlYWQ7XFxuMTg2MjpcXHRcXHQvKiBkbyBub3QgZ3JhYiB0aGUgbG9jayB1bmxlc3MgbmVlZCBpdCAoYnVja2V0X2NudCBcXHUwMDNlIDApLiAqL1xcbjE4NjM6XFx0XFx0aWYgKGxvY2tlZCkge1xcbjE4NjQ6XFx0XFx0XFx0cmV0ID0gaHRhYl9sb2NrX2J1Y2tldChiLCBcXHUwMDI2ZmxhZ3MpO1xcbjE4NjU6XFx0XFx0XFx0aWYgKHJldCkge1xcbjE4NjY6XFx0XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMTg2NzpcXHRcXHRcXHRcXHRicGZfZW5hYmxlX2luc3RydW1lbnRhdGlvbigpO1xcbjE4Njg6XFx0XFx0XFx0XFx0Z290byBhZnRlcl9sb29wO1xcbjE4Njk6XFx0XFx0XFx0fVxcbjE4NzA6XFx0XFx0fVxcbjE4NzE6XFx0XFxuMTg3MjpcXHRcXHRidWNrZXRfY250ID0gMDtcXG4xODczOlxcdFxcdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3JjdShsLCBuLCBoZWFkLCBoYXNoX25vZGUpXFxuMTg3NDpcXHRcXHRcXHRidWNrZXRfY250Kys7XFxuMTg3NTpcXHRcXG4xODc2OlxcdFxcdGlmIChidWNrZXRfY250IFxcdTAwMjZcXHUwMDI2ICFsb2NrZWQpIHtcXG4xODc3OlxcdFxcdFxcdGxvY2tlZCA9IHRydWU7XFxuMTg3ODpcXHRcXHRcXHRnb3RvIGFnYWluX25vY29weTtcXG4xODc5OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTg6NTU6MzIuNTA3OTM0OTFaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE5NTk0NDk2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIEZ1bmN0aW9uJ3MgU3Vic2VxdWVudCBMaW5lcyoqXG5cbkFscmlnaHQsIEkndmUgZ290IHRoZSBpbml0aWFsIGxpbmVzIG9mIHRoZSBmdW5jdGlvbiBwYXJzZWQsIGFuZCBJIGhhdmUgYSBzb2xpZCBncmlwIG9uIHRoZSBpbml0aWFsIHNldHVwLiBOb3csIEkgbmVlZCB0byBnZXQgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgaXRzIG92ZXJhbGwgb3BlcmF0aW9uLiBUaW1lIHRvIHpvb20gaW4gYW5kIGRpdmUgaW50byB0aGUgcmVzdCBvZiB0aGUgZnVuY3Rpb24ncyBsb2dpYy4gV2hhdCBkYXRhIHN0cnVjdHVyZXMgaXMgaXQgbWFuaXB1bGF0aW5nPyBXaGF0IGFyZSB0aGUga2V5IGNvbmRpdGlvbmFsIGJyYW5jaGVzPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgcG90ZW50aWFsIGVkZ2UgY2FzZXMgdGhhdCBqdW1wIG91dCBhdCBtZSBhcyBJIHNjYW4gdGhlIG5leHQgc2VjdGlvbj8gSSdtIGxvb2tpbmcgZm9yIHBhdHRlcm5zLCByZWR1bmRhbmNpZXMsIGFuZCBhbnkgbm9uLW9idmlvdXMgb3BlcmF0aW9ucyB0aGF0IG1pZ2h0IGJlIGNyaXRpY2FsIHRvIGl0cyBvdmVyYWxsIGVmZmVjdGl2ZW5lc3MuIExldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyBwcmVzZW50LiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIG1lYXQgb2YgdGhlIGZ1bmN0aW9uJ3MgcHVycG9zZSBzaG91bGQgYmVjb21lIGFwcGFyZW50LCBhbmQgd2hlcmUgSSBjYW4gc3RhcnQgdG8gbWFrZSBhIGZ1bGwgbWVudGFsIG1vZGVsIG9mIGl0cyBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU1NywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTg6NTU6MzQuNzAzODgyNDg4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MzcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL2hhc2h0YWIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODgwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTg4MDpcXHRcXG4xODgxOlxcdFxcdGlmIChidWNrZXRfY250IFxcdTAwM2UgKG1heF9jb3VudCAtIHRvdGFsKSkge1xcbjE4ODI6XFx0XFx0XFx0aWYgKHRvdGFsID09IDApXFxuMTg4MzpcXHRcXHRcXHRcXHRyZXQgPSAtRU5PU1BDO1xcbjE4ODQ6XFx0XFx0XFx0LyogTm90ZSB0aGF0IHNpbmNlIGJ1Y2tldF9jbnQgXFx1MDAzZSAwIGhlcmUsIGl0IGlzIGltcGxpY2l0XFxuMTg4NTpcXHRcXHRcXHQgKiB0aGF0IHRoZSBsb2NrZWQgd2FzIGdyYWJiZWQsIHNvIHJlbGVhc2UgaXQuXFxuMTg4NjpcXHRcXHRcXHQgKi9cXG4xODg3OlxcdFxcdFxcdGh0YWJfdW5sb2NrX2J1Y2tldChiLCBmbGFncyk7XFxuMTg4ODpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4xODg5OlxcdFxcdFxcdGJwZl9lbmFibGVfaW5zdHJ1bWVudGF0aW9uKCk7XFxuMTg5MDpcXHRcXHRcXHRnb3RvIGFmdGVyX2xvb3A7XFxuMTg5MTpcXHRcXHR9XFxuMTg5MjpcXHRcXG4xODkzOlxcdFxcdGlmIChidWNrZXRfY250IFxcdTAwM2UgYnVja2V0X3NpemUpIHtcXG4xODk0OlxcdFxcdFxcdGJ1Y2tldF9zaXplID0gYnVja2V0X2NudDtcXG4xODk1OlxcdFxcdFxcdC8qIE5vdGUgdGhhdCBzaW5jZSBidWNrZXRfY250IFxcdTAwM2UgMCBoZXJlLCBpdCBpcyBpbXBsaWNpdFxcbjE4OTY6XFx0XFx0XFx0ICogdGhhdCB0aGUgbG9ja2VkIHdhcyBncmFiYmVkLCBzbyByZWxlYXNlIGl0LlxcbjE4OTc6XFx0XFx0XFx0ICovXFxuMTg5ODpcXHRcXHRcXHRodGFiX3VubG9ja19idWNrZXQoYiwgZmxhZ3MpO1xcbjE4OTk6XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMTkwMDpcXHRcXHRcXHRicGZfZW5hYmxlX2luc3RydW1lbnRhdGlvbigpO1xcbjE5MDE6XFx0XFx0XFx0a3ZmcmVlKGtleXMpO1xcbjE5MDI6XFx0XFx0XFx0a3ZmcmVlKHZhbHVlcyk7XFxuMTkwMzpcXHRcXHRcXHRnb3RvIGFsbG9jO1xcbjE5MDQ6XFx0XFx0fVxcbjE5MDU6XFx0XFxuMTkwNjpcXHRcXHQvKiBOZXh0IGJsb2NrIGlzIG9ubHkgc2FmZSB0byBydW4gaWYgeW91IGhhdmUgZ3JhYmJlZCB0aGUgbG9jayAqL1xcbjE5MDc6XFx0XFx0aWYgKCFsb2NrZWQpXFxuMTkwODpcXHRcXHRcXHRnb3RvIG5leHRfYmF0Y2g7XFxuMTkwOTpcXHRcXG4xOTEwOlxcdFxcdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3NhZmUobCwgbiwgaGVhZCwgaGFzaF9ub2RlKSB7XFxuMTkxMTpcXHRcXHRcXHRtZW1jcHkoZHN0X2tleSwgbC1cXHUwMDNla2V5LCBrZXlfc2l6ZSk7XFxuMTkxMjpcXHRcXG4xOTEzOlxcdFxcdFxcdGlmIChpc19wZXJjcHUpIHtcXG4xOTE0OlxcdFxcdFxcdFxcdGludCBvZmYgPSAwLCBjcHU7XFxuMTkxNTpcXHRcXHRcXHRcXHR2b2lkIF9fcGVyY3B1ICpwcHRyO1xcbjE5MTY6XFx0XFxuMTkxNzpcXHRcXHRcXHRcXHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIobCwgbWFwLVxcdTAwM2VrZXlfc2l6ZSk7XFxuMTkxODpcXHRcXHRcXHRcXHRpZiAoZWxlbV9tYXBfZmxhZ3MgXFx1MDAyNiBCUEZfRl9DUFUpIHtcXG4xOTE5OlxcdFxcdFxcdFxcdFxcdGNwdSA9IGVsZW1fbWFwX2ZsYWdzIFxcdTAwM2VcXHUwMDNlIDMyO1xcbjE5MjA6XFx0XFx0XFx0XFx0XFx0Y29weV9tYXBfdmFsdWUoXFx1MDAyNmh0YWItXFx1MDAzZW1hcCwgZHN0X3ZhbCwgcGVyX2NwdV9wdHIocHB0ciwgY3B1KSk7XFxuMTkyMTpcXHRcXHRcXHRcXHRcXHRjaGVja19hbmRfaW5pdF9tYXBfdmFsdWUoXFx1MDAyNmh0YWItXFx1MDAzZW1hcCwgZHN0X3ZhbCk7XFxuMTkyMjpcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbjE5MjM6XFx0XFx0XFx0XFx0XFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xcbjE5MjQ6XFx0XFx0XFx0XFx0XFx0XFx0Y29weV9tYXBfdmFsdWVfbG9uZyhcXHUwMDI2aHRhYi1cXHUwMDNlbWFwLCBkc3RfdmFsICsgb2ZmLFxcbjE5MjU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHBlcl9jcHVfcHRyKHBwdHIsIGNwdSkpO1xcbjE5MjY6XFx0XFx0XFx0XFx0XFx0XFx0Y2hlY2tfYW5kX2luaXRfbWFwX3ZhbHVlKFxcdTAwMjZodGFiLVxcdTAwM2VtYXAsIGRzdF92YWwgKyBvZmYpO1xcbjE5Mjc6XFx0XFx0XFx0XFx0XFx0XFx0b2ZmICs9IHNpemU7XFxuMTkyODpcXHRcXHRcXHRcXHRcXHR9XFxuMTkyOTpcXHRcXHRcXHRcXHR9XFxuMTkzMDpcXHRcXHRcXHR9IGVsc2Uge1xcbjE5MzE6XFx0XFx0XFx0XFx0dmFsdWUgPSBodGFiX2VsZW1fdmFsdWUobCwga2V5X3NpemUpO1xcbjE5MzI6XFx0XFx0XFx0XFx0aWYgKGlzX2ZkX2h0YWIoaHRhYikpIHtcXG4xOTMzOlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfbWFwICoqaW5uZXJfbWFwID0gdmFsdWU7XFxuMTkzNDpcXHRcXG4xOTM1OlxcdFxcdFxcdFxcdFxcdCAvKiBBY3R1YWwgdmFsdWUgaXMgdGhlIGlkIG9mIHRoZSBpbm5lciBtYXAgKi9cXG4xOTM2OlxcdFxcdFxcdFxcdFxcdG1hcF9pZCA9IG1hcC1cXHUwMDNlb3BzLVxcdTAwM2VtYXBfZmRfc3lzX2xvb2t1cF9lbGVtKCppbm5lcl9tYXApO1xcbjE5Mzc6XFx0XFx0XFx0XFx0XFx0dmFsdWUgPSBcXHUwMDI2bWFwX2lkO1xcbjE5Mzg6XFx0XFx0XFx0XFx0fVxcbjE5Mzk6XFx0XFxuMTk0MDpcXHRcXHRcXHRcXHRpZiAoZWxlbV9tYXBfZmxhZ3MgXFx1MDAyNiBCUEZfRl9MT0NLKVxcbjE5NDE6XFx0XFx0XFx0XFx0XFx0Y29weV9tYXBfdmFsdWVfbG9ja2VkKG1hcCwgZHN0X3ZhbCwgdmFsdWUsXFxuMTk0MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICB0cnVlKTtcXG4xOTQzOlxcdFxcdFxcdFxcdGVsc2VcXG4xOTQ0OlxcdFxcdFxcdFxcdFxcdGNvcHlfbWFwX3ZhbHVlKG1hcCwgZHN0X3ZhbCwgdmFsdWUpO1xcbjE5NDU6XFx0XFx0XFx0XFx0LyogWmVyb2luZyBzcGVjaWFsIGZpZWxkcyBpbiB0aGUgdGVtcCBidWZmZXIgKi9cXG4xOTQ2OlxcdFxcdFxcdFxcdGNoZWNrX2FuZF9pbml0X21hcF92YWx1ZShtYXAsIGRzdF92YWwpO1xcbjE5NDc6XFx0XFx0XFx0fVxcbjE5NDg6XFx0XFx0XFx0aWYgKGRvX2RlbGV0ZSkge1xcbjE5NDk6XFx0XFx0XFx0XFx0aGxpc3RfbnVsbHNfZGVsX3JjdShcXHUwMDI2bC1cXHUwMDNlaGFzaF9ub2RlKTtcXG4xOTUwOlxcdFxcbjE5NTE6XFx0XFx0XFx0XFx0LyogYnBmX2xydV9wdXNoX2ZyZWUoKSB3aWxsIGFjcXVpcmUgbHJ1X2xvY2ssIHdoaWNoXFxuMTk1MjpcXHRcXHRcXHRcXHQgKiBtYXkgY2F1c2UgZGVhZGxvY2suIFNlZSBjb21tZW50cyBpbiBmdW5jdGlvblxcbjE5NTM6XFx0XFx0XFx0XFx0ICogcHJlYWxsb2NfbHJ1X3BvcCgpLiBMZXQgdXMgZG8gYnBmX2xydV9wdXNoX2ZyZWUoKVxcbjE5NTQ6XFx0XFx0XFx0XFx0ICogYWZ0ZXIgcmVsZWFzaW5nIHRoZSBidWNrZXQgbG9jay5cXG4xOTU1OlxcdFxcdFxcdFxcdCAqXFxuMTk1NjpcXHRcXHRcXHRcXHQgKiBGb3IgaHRhYiBvZiBtYXBzLCBodGFiX3B1dF9mZF92YWx1ZSgpIGluXFxuMTk1NzpcXHRcXHRcXHRcXHQgKiBmcmVlX2h0YWJfZWxlbSgpIG1heSBhY3F1aXJlIGEgc3BpbmxvY2sgd2l0aCBidWNrZXRcXG4xOTU4OlxcdFxcdFxcdFxcdCAqIGxvY2sgYmVpbmcgaGVsZCBhbmQgaXQgdmlvbGF0ZXMgdGhlIGxvY2sgcnVsZSwgc29cXG4xOTU5OlxcdFxcdFxcdFxcdCAqIGludm9rZSBmcmVlX2h0YWJfZWxlbSgpIGFmdGVyIHVubG9jayBhcyB3ZWxsLlxcbjE5NjA6XFx0XFx0XFx0XFx0ICovXFxuMTk2MTpcXHRcXHRcXHRcXHRsLVxcdTAwM2ViYXRjaF9mbGluayA9IG5vZGVfdG9fZnJlZTtcXG4xOTYyOlxcdFxcdFxcdFxcdG5vZGVfdG9fZnJlZSA9IGw7XFxuMTk2MzpcXHRcXHRcXHR9XFxuMTk2NDpcXHRcXHRcXHRkc3Rfa2V5ICs9IGtleV9zaXplO1xcbjE5NjU6XFx0XFx0XFx0ZHN0X3ZhbCArPSB2YWx1ZV9zaXplO1xcbjE5NjY6XFx0XFx0fVxcbjE5Njc6XFx0XFxuMTk2ODpcXHRcXHRodGFiX3VubG9ja19idWNrZXQoYiwgZmxhZ3MpO1xcbjE5Njk6XFx0XFx0bG9ja2VkID0gZmFsc2U7XFxuMTk3MDpcXHRcXG4xOTcxOlxcdFxcdHdoaWxlIChub2RlX3RvX2ZyZWUpIHtcXG4xOTcyOlxcdFxcdFxcdGwgPSBub2RlX3RvX2ZyZWU7XFxuMTk3MzpcXHRcXHRcXHRub2RlX3RvX2ZyZWUgPSBub2RlX3RvX2ZyZWUtXFx1MDAzZWJhdGNoX2ZsaW5rO1xcbjE5NzQ6XFx0XFx0XFx0aWYgKGlzX2xydV9tYXApXFxuMTk3NTpcXHRcXHRcXHRcXHRodGFiX2xydV9wdXNoX2ZyZWUoaHRhYiwgbCk7XFxuMTk3NjpcXHRcXHRcXHRlbHNlXFxuMTk3NzpcXHRcXHRcXHRcXHRmcmVlX2h0YWJfZWxlbShodGFiLCBsKTtcXG4xOTc4OlxcdFxcdH1cXG4xOTc5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxODo1NTozNC43MDQxNzgyNDhaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTMyODgyMjAzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgSSdtIHJlYWR5IHRvIGRpdmUgaW4uIEdpdmUgbWUgdGhlIHRleHQhIEknbGwgcHJvY2VzcyBpdCBhbmQgZm9ybXVsYXRlIGEgZmlyc3QtcGVyc29uIHN1bW1hcnkgYXMgaWYgdGhlIHRob3VnaHRzIGRlc2NyaWJlZCAqd2VyZSogbXkgb3duLCBrZWVwaW5nIGluIG1pbmQgbXkgcHJlc3VtZWQgZXhwZXJ0aXNlLiBMZXQncyBzZWUgd2hhdCB3ZSdyZSB3b3JraW5nIHdpdGggaGVyZS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBudWFuY2VzLCBzbyBJIHdpbGwgbWFrZSBzdXJlIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGxpbmVzIGxlYWRpbmcgdXAgdG8gMjAzMC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM2NywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTg6NTU6MzYuMDMzMDAxOTc1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2Njk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL2hhc2h0YWIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOTgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxOTgwOlxcdG5leHRfYmF0Y2g6XFxuMTk4MTpcXHRcXHQvKlxcbjE5ODI6XFx0XFx0ICogSWYgd2UgYXJlIG5vdCBjb3B5aW5nIGRhdGEsIHdlIGNhbiBnbyB0byBuZXh0IGJ1Y2tldCBhbmQgYXZvaWRcXG4xOTgzOlxcdFxcdCAqIHVubG9ja2luZyB0aGUgcmN1LiBCb3VuZCB0aGUgd2FsayB0aG91Z2g6IGFmdGVyXFxuMTk4NDpcXHRcXHQgKiBIVEFCX0JBVENIX0VNUFRZX1JFU0NIRUQgY29uc2VjdXRpdmUgZW1wdHkgYnVja2V0cywgZnVsbHkgZXhpdFxcbjE5ODU6XFx0XFx0ICogdGhlIGNyaXRpY2FsIHNlY3Rpb24gKG5vIGxvY2tzIGFyZSBoZWxkIGhlcmUpIGFuZCByZXNjaGVkdWxlLlxcbjE5ODY6XFx0XFx0ICovXFxuMTk4NzpcXHRcXHRpZiAoIWJ1Y2tldF9jbnQgXFx1MDAyNlxcdTAwMjYgKGJhdGNoICsgMSBcXHUwMDNjIGh0YWItXFx1MDAzZW5fYnVja2V0cykpIHtcXG4xOTg4OlxcdFxcdFxcdGJhdGNoKys7XFxuMTk4OTpcXHRcXHRcXHRpZiAoKytlbXB0eV9jbnQgXFx1MDAzYyBIVEFCX0JBVENIX0VNUFRZX1JFU0NIRUQpXFxuMTk5MDpcXHRcXHRcXHRcXHRnb3RvIGFnYWluX25vY29weTtcXG4xOTkxOlxcdFxcdFxcdGVtcHR5X2NudCA9IDA7XFxuMTk5MjpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4xOTkzOlxcdFxcdFxcdGJwZl9lbmFibGVfaW5zdHJ1bWVudGF0aW9uKCk7XFxuMTk5NDpcXHRcXHRcXHRjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKCk7XFxuMTk5NTpcXHRcXHRcXHRnb3RvIGFnYWluO1xcbjE5OTY6XFx0XFx0fVxcbjE5OTc6XFx0XFxuMTk5ODpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4xOTk5OlxcdFxcdGJwZl9lbmFibGVfaW5zdHJ1bWVudGF0aW9uKCk7XFxuMjAwMDpcXHRcXHRpZiAoYnVja2V0X2NudCBcXHUwMDI2XFx1MDAyNiAoY29weV90b191c2VyKHVrZXlzICsgdG90YWwgKiBrZXlfc2l6ZSwga2V5cyxcXG4yMDAxOlxcdFxcdCAgICBrZXlfc2l6ZSAqIGJ1Y2tldF9jbnQpIHx8XFxuMjAwMjpcXHRcXHQgICAgY29weV90b191c2VyKHV2YWx1ZXMgKyB0b3RhbCAqIHZhbHVlX3NpemUsIHZhbHVlcyxcXG4yMDAzOlxcdFxcdCAgICB2YWx1ZV9zaXplICogYnVja2V0X2NudCkpKSB7XFxuMjAwNDpcXHRcXHRcXHRyZXQgPSAtRUZBVUxUO1xcbjIwMDU6XFx0XFx0XFx0Z290byBhZnRlcl9sb29wO1xcbjIwMDY6XFx0XFx0fVxcbjIwMDc6XFx0XFxuMjAwODpcXHRcXHR0b3RhbCArPSBidWNrZXRfY250O1xcbjIwMDk6XFx0XFx0ZW1wdHlfY250ID0gMDtcXG4yMDEwOlxcdFxcdGJhdGNoKys7XFxuMjAxMTpcXHRcXHRpZiAoYmF0Y2ggXFx1MDAzZT0gaHRhYi1cXHUwMDNlbl9idWNrZXRzKSB7XFxuMjAxMjpcXHRcXHRcXHRyZXQgPSAtRU5PRU5UO1xcbjIwMTM6XFx0XFx0XFx0Z290byBhZnRlcl9sb29wO1xcbjIwMTQ6XFx0XFx0fVxcbjIwMTU6XFx0XFx0Y29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpO1xcbjIwMTY6XFx0XFx0Z290byBhZ2FpbjtcXG4yMDE3OlxcdFxcbjIwMTg6XFx0YWZ0ZXJfbG9vcDpcXG4yMDE5OlxcdFxcdGlmIChyZXQgPT0gLUVGQVVMVClcXG4yMDIwOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjIwMjE6XFx0XFxuMjAyMjpcXHRcXHQvKiBjb3B5ICMgb2YgZW50cmllcyBhbmQgbmV4dCBiYXRjaCAqL1xcbjIwMjM6XFx0XFx0dWJhdGNoID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXFx1MDAzZWJhdGNoLm91dF9iYXRjaCk7XFxuMjAyNDpcXHRcXHRpZiAoY29weV90b191c2VyKHViYXRjaCwgXFx1MDAyNmJhdGNoLCBzaXplb2YoYmF0Y2gpKSB8fFxcbjIwMjU6XFx0XFx0ICAgIHB1dF91c2VyKHRvdGFsLCBcXHUwMDI2dWF0dHItXFx1MDAzZWJhdGNoLmNvdW50KSlcXG4yMDI2OlxcdFxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuMjAyNzpcXHRcXG4yMDI4OlxcdG91dDpcXG4yMDI5OlxcdFxcdGt2ZnJlZShrZXlzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTg6NTU6MzYuMDMzMjcwMzE1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY3MTI1NDc3MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgSGFzaHRhYiBCYXRjaCBMb29rdXAvRGVsZXRlIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBhbmQgc3RhYmlsaXR5IGlzc3VlIHdpdGhpbiB0aGUgQlBGIGhhc2h0YWIgYmF0Y2ggbG9va3VwL2RlbGV0ZSBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IHRoZSBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAgZnVuY3Rpb24uIFRoZSBjb3JlIHByb2JsZW0gd2FzIHRoYXQgd2hlbiBkZWFsaW5nIHdpdGggYSBCUEYgaGFzaHRhYiB3aXRoIGEgaGlnaCBudW1iZXIgb2YgZW1wdHkgYnVja2V0cywgdGhlIGtlcm5lbCBjb3VsZCBnZXQgc3R1Y2sgaW4gYSB0aWdodCBsb29wIHVuZGVyIGByY3VfcmVhZF9sb2NrKClgIGFuZCB3aXRoIGluc3RydW1lbnRhdGlvbiBkaXNhYmxlZC4gVGhpcyBsZWQgdG8gcG90ZW50aWFsIFJDVSBzdGFsbHMsIHNvZnQgbG9ja3Vwcywgb3IgZXZlbiB3YXRjaGRvZyB0aW1lb3V0cy5cblxuVGhlIGZpeCBpbnRyb2R1Y2VzIGEgbmV3IGNvbnN0YW50LCBgSFRBQl9CQVRDSF9FTVBUWV9SRVNDSEVEYCwgd2hpY2ggYXBwZWFycyB0byBiZSBzZXQgdG8gNjQuICBBbiBgZW1wdHlfY250YCB2YXJpYWJsZSBpcyBhbHNvIGludHJvZHVjZWQgYXMgYSBjb3VudGVyLiBUaGUgbG9naWMgbm93IHdvcmtzIGxpa2UgdGhpczogIEluc3RlYWQgb2YgbG9vcGluZyBlbmRsZXNzbHkgb24gZW1wdHkgYnVja2V0cywgdGhlIGNvZGUgbm93IGluY3JlbWVudHMgYGVtcHR5X2NudGAgd2l0aCBlYWNoIGVtcHR5IGJ1Y2tldCBza2lwcGVkLiBJZiBgZW1wdHlfY250YCBpcyBsZXNzIHRoYW4gYEhUQUJfQkFUQ0hfRU1QVFlfUkVTQ0hFRGAsIGl0IGNvbnRpbnVlcyBza2lwcGluZy4gQnV0IGlmIGBlbXB0eV9jbnRgIHJlYWNoZXMgb3IgZXhjZWVkcyBgSFRBQl9CQVRDSF9FTVBUWV9SRVNDSEVEYCwgdGhlIGxvb3AgKnJlc2NoZWR1bGVzKiB1c2luZyBgcmN1X3JlYWRfdW5sb2NrKClgLCBgYnBmX2VuYWJsZV9pbnN0cnVtZW50YXRpb24oKWAsIGFuZCBgY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpYCwgZXNzZW50aWFsbHkgeWllbGRpbmcgY29udHJvbCBiZWZvcmUgcmVzdW1pbmcuIFRoaXMgaXMgYWxzbyBkb25lIHdoZW4gYWN0dWFsbHkgcHJvY2Vzc2luZyBkYXRhIChgYnVja2V0X2NudCBcdTAwM2UgMGApLiBUaGlzIHByZXZlbnRzIHRoZSB0aWdodCBsb29wLlxuXG5NeSBwcmltYXJ5IGNvbmNlcm4gaXMgYWx3YXlzIGFyb3VuZCBtZW1vcnkgc2FmZXR5LCBzbyBJJ3ZlIGNhcmVmdWxseSBleGFtaW5lZCB0aGUgcGF0Y2ggZm9yIGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiAgSSd2ZSBjaGVja2VkOlxuXG4xLiAgYGVtcHR5X2NudGA6IFByb3Blcmx5IGluaXRpYWxpemVkIHRvIHplcm8gYXQgZnVuY3Rpb24gZW50cnkuXG4yLiAgQnVmZmVyIHNpemluZywgbWVtb3J5IGluaXRpYWxpemF0aW9uLCBjb3B5IHNpemVzLCBhbmQgZGF0YSBsYXlvdXQuICBFdmVyeXRoaW5nIGxvb2tzIHNvdW5kLiAgYGtleXNgIGFuZCBgdmFsdWVzYCBhcmUgY29ycmVjdGx5IGFsbG9jYXRlZCB2aWEgYGt2bWFsbG9jX2FycmF5YCwgZmlsbGVkIG9ubHkgd2hlbiBgYnVja2V0X2NudCBcdTAwM2UgMGAgKGFuZCBgbG9ja2VkYCBpcyB0cnVlKSwgYW5kIGNvcGllZCB0byB1c2VyIHNwYWNlIHdpdGggdGhlIHJpZ2h0IHNpemUuXG4zLiAgVW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHVzZXItc3BhY2UgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCBwYWRkaW5nOiBUaGUgYGJhdGNoYCwgYHRvdGFsYCBhbmQgYGVtcHR5X2NudGAgdmFyaWFibGVzIGFyZSBhbGwgcHJvcGVybHkgaW5pdGlhbGl6ZWQgb3IgdXNlZC4gYGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKWAgZG9lc24ndCB0b3VjaCBtZW1vcnkgZGlyZWN0bHksIGl0IHNpbXBseSBmYWNpbGl0YXRlcyByZXNjaGVkdWxpbmcuXG5cblRoZXJlZm9yZSwgSSdtIGNvbmZpZGVudCB0aGF0IHRoaXMgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBleHBvc2UgYW55IGtlcm5lbCBpbmZvLWxlYWtzLlxuXG5Db25zaWRlcmluZyB0aGF0IHRoZSBwYXRjaCBmb2N1c2VzIG9uIGxvb3AgY29udHJvbCBmbG93IGFuZCB2b2x1bnRhcnkgcHJlZW1wdGlvbiB0byBwcmV2ZW50IFJDVSBzdGFsbHMvc29mdCBsb2NrdXBzLCBJIGRvbid0IHNlZSBhbnkgY2hhbmdlcyB0aGF0IHdvdWxkIHRyaWdnZXIgS0FTQU4gb3IgS01TQU4gaXNzdWVzLiBUaGVyZSBhcmUgbm8gbWVtb3J5IGluaXRpYWxpemF0aW9uIGNoYW5nZXMsIG5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgbm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHJlYWRzLCBhbmQgbm8gaW5mbyBsZWFrcy4gVGhpcyBwYXRjaCBpcyBmdW5kYW1lbnRhbGx5IGFkZHJlc3NpbmcgbGF0ZW5jeSBhbmQgc2NoZWR1bGluZywgbm90IG1lbW9yeSBjb3JydXB0aW9uLCB3aGljaCBpcyBtb3JlIG9mIGEgbG9ja2RlcCBvciBSQ1Ugc3RhbGwgZGV0ZWN0b3IgY29uY2Vybi4gIFNvLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGRlZmluaXRlbHkgYmUgYGZhbHNlYC4gSSd2ZSBkb3VibGUtY2hlY2tlZCBteSBhbmFseXNpcywgYW5kIEknbSBwcmVwYXJlZCB0byBzZXQgdGhlIHJlc3VsdHMgYWNjb3JkaW5nbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyNTUsIk91dHB1dFRva2VucyI6MTgwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODY1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTg6NTU6NDIuNzQ1ODIxMDU5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHBlcmlvZGljIHZvbHVudGFyeSByZXNjaGVkdWxpbmcgKGBjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKClgKSBhbmQgUkNVIHVubG9ja2luZyBhZnRlciBpdGVyYXRpbmcgb3ZlciBhIGJhdGNoIG9mIGVtcHR5IGJ1Y2tldHMgKGBIVEFCX0JBVENIX0VNUFRZX1JFU0NIRURgKSBpbiBCUEYgaGFzaCB0YWJsZSBiYXRjaCBvcGVyYXRpb25zIChgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGApIHRvIHByZXZlbnQgc29mdCBsb2NrdXBzIGFuZCBSQ1Ugc3RhbGxzLlxcblxcblRoZSBuZXdseSBpbnRyb2R1Y2VkIGNvdW50ZXIgdmFyaWFibGUgYGVtcHR5X2NudGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byAwIGFuZCBjb3JyZWN0bHkgcmVzZXQuIFRoZSBwYXRjaCBtb2RpZmllcyBvbmx5IGxvb3AgY29udHJvbCBmbG93IGFuZCBzY2hlZHVsaW5nIGJlaGF2aW9yOyBpdCBkb2VzIG5vdCBjaGFuZ2UgYnVmZmVyIGFsbG9jYXRpb24sIGRhdGEgY29weWluZyBsZW5ndGhzLCBzdHJ1Y3QgZGVmaW5pdGlvbnMsIG9yIG1lbW9yeSBpbml0aWFsaXphdGlvbiBsb2dpYywgbm9yIGRvZXMgaXQgY3JlYXRlIGFueSByaXNrIG9mIHJlYWRpbmcgb3IgbGVha2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHBlcmlvZGljIHZvbHVudGFyeSByZXNjaGVkdWxpbmcgKGBjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKClgKSBhbmQgUkNVIHVubG9ja2luZyBhZnRlciBpdGVyYXRpbmcgb3ZlciBhIGJhdGNoIG9mIGVtcHR5IGJ1Y2tldHMgKGBIVEFCX0JBVENIX0VNUFRZX1JFU0NIRURgKSBpbiBCUEYgaGFzaCB0YWJsZSBiYXRjaCBvcGVyYXRpb25zIChgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGApIHRvIHByZXZlbnQgc29mdCBsb2NrdXBzIGFuZCBSQ1Ugc3RhbGxzLlxcblxcblRoZSBuZXdseSBpbnRyb2R1Y2VkIGNvdW50ZXIgdmFyaWFibGUgYGVtcHR5X2NudGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byAwIGFuZCBjb3JyZWN0bHkgcmVzZXQuIFRoZSBwYXRjaCBtb2RpZmllcyBvbmx5IGxvb3AgY29udHJvbCBmbG93IGFuZCBzY2hlZHVsaW5nIGJlaGF2aW9yOyBpdCBkb2VzIG5vdCBjaGFuZ2UgYnVmZmVyIGFsbG9jYXRpb24sIGRhdGEgY29weWluZyBsZW5ndGhzLCBzdHJ1Y3QgZGVmaW5pdGlvbnMsIG9yIG1lbW9yeSBpbml0aWFsaXphdGlvbiBsb2dpYywgbm9yIGRvZXMgaXQgY3JlYXRlIGFueSByaXNrIG9mIHJlYWRpbmcgb3IgbGVha2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow72gdj[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-09 18:51:05 +0000 UTC FinishedAt: 2026-09-09 18:55:44 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "af0b84a9215d951d16f26b7ee34353b970cf5d4e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "af0b84a9215d951d16f26b7ee34353b970cf5d4e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "232355cb-a149-49dc-9b33-695e871b1f2d" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "__htab_map_lookup_and_delete_batch", "htab_map_lookup_batch", "htab_map_lookup_and_delete_batch", "htab_lru_map_lookup_batch", "htab_lru_map_lookup_and_delete_batch", "htab_percpu_map_lookup_batch", "htab_percpu_map_lookup_and_delete_batch", "htab_lru_percpu_map_lookup_batch", "htab_lru_percpu_map_lookup_and_delete_batch" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE4OjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCYjMzQ7LAogICAgJiMzNDtodGFiX21hcF9sb29rdXBfYmF0Y2gmIzM0OywKICAgICYjMzQ7aHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gmIzM0OywKICAgICYjMzQ7aHRhYl9scnVfbWFwX2xvb2t1cF9iYXRjaCYjMzQ7LAogICAgJiMzNDtodGFiX2xydV9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gmIzM0OywKICAgICYjMzQ7aHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9iYXRjaCYjMzQ7LAogICAgJiMzNDtodGFiX3BlcmNwdV9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gmIzM0OywKICAgICYjMzQ7aHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfYmF0Y2gmIzM0OywKICAgICYjMzQ7aHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgcGVyaW9kaWMgdm9sdW50YXJ5IHJlc2NoZWR1bGluZyAoYGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKWApIGFuZCBSQ1UgdW5sb2NraW5nIGFmdGVyIGl0ZXJhdGluZyBvdmVyIGEgYmF0Y2ggb2YgZW1wdHkgYnVja2V0cyAoYEhUQUJfQkFUQ0hfRU1QVFlfUkVTQ0hFRGApIGluIEJQRiBoYXNoIHRhYmxlIGJhdGNoIG9wZXJhdGlvbnMgKGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCkgdG8gcHJldmVudCBzb2Z0IGxvY2t1cHMgYW5kIFJDVSBzdGFsbHMuXG5cblRoZSBuZXdseSBpbnRyb2R1Y2VkIGNvdW50ZXIgdmFyaWFibGUgYGVtcHR5X2NudGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byAwIGFuZCBjb3JyZWN0bHkgcmVzZXQuIFRoZSBwYXRjaCBtb2RpZmllcyBvbmx5IGxvb3AgY29udHJvbCBmbG93IGFuZCBzY2hlZHVsaW5nIGJlaGF2aW9yOyBpdCBkb2VzIG5vdCBjaGFuZ2UgYnVmZmVyIGFsbG9jYXRpb24sIGRhdGEgY29weWluZyBsZW5ndGhzLCBzdHJ1Y3QgZGVmaW5pdGlvbnMsIG9yIG1lbW9yeSBpbml0aWFsaXphdGlvbiBsb2dpYywgbm9yIGRvZXMgaXQgY3JlYXRlIGFueSByaXNrIG9mIHJlYWRpbmcgb3IgbGVha2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJhdGNoIGxvb2t1cCBhbmQgZGVsZXRlIGl0ZXJhdGlvbiBsb2dpYyBpbiBrZXJuZWwvYnBmL2hhc2h0YWIuYyAoX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCkgdG8gaW50cm9kdWNlIHBlcmlvZGljIHJlc2NoZWR1bGluZyAoY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcykgYW5kIFJDVSBjcml0aWNhbCBzZWN0aW9uIGV4aXRzIHdoZW4gZW5jb3VudGVyaW5nIGNvbnNlY3V0aXZlIGVtcHR5IGJ1Y2tldHMuIFRoaXMgYWx0ZXJzIFJDVSBzeW5jaHJvbml6YXRpb24sIGxvY2tpbmcsIGFuZCBpdGVyYXRpb24gY29udHJvbCBmbG93IGluIHJlYWNoYWJsZSBCUEYgbWFwIHN5c2NhbGwgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxODo1NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDM3MGU2NzRmZGM2NDZiOTZmYjY4M2I1YzY1NGNjOTI3ZDBkMjgxZTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDE4OjU0OjQ2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGFzaHRhYi5jIGIva2VybmVsL2JwZi9oYXNodGFiLmNcbmluZGV4IDZmMzMxYzgwMTMwZDcuLmE3MmRjNWI5ZjE4NGQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9oYXNodGFiLmNcbkBAIC0xNzcyLDYgJiM0MzsxNzcyLDEyIEBAIHN0YXRpYyBpbnQgaHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsXG4gXHRcdFx0XHRcdFx0IGZsYWdzKTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIE1heCBjb25zZWN1dGl2ZSBlbXB0eSBidWNrZXRzIHRvIHdhbGsgaW4gb25lIFJDVSAmIzQzO1xuJiM0MzsgKiBpbnN0cnVtZW50YXRpb24tZGlzYWJsZWQgc2VjdGlvbiBiZWZvcmUgcmVzY2hlZHVsaW5nLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBIVEFCX0JBVENIX0VNUFRZX1JFU0NIRUQgNjRcbiYjNDM7XG4gc3RhdGljIGludFxuIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcdFx0XHRcdCAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuQEAgLTE3OTMsNiAmIzQzOzE3OTksNyBAQCBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzID0gMDtcbiBcdGJvb2wgbG9ja2VkID0gZmFsc2U7XG4gXHRzdHJ1Y3QgaHRhYl9lbGVtICpsO1xuJiM0MztcdHUzMiBlbXB0eV9jbnQgPSAwO1xuIFx0c3RydWN0IGJ1Y2tldCAqYjtcbiBcdGludCByZXQgPSAwO1xuIFxuQEAgLTE5NzEsMTIgJiM0MzsxOTc4LDIxIEBAIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcdH1cbiBcbiBuZXh0X2JhdGNoOlxuLVx0LyogSWYgd2UgYXJlIG5vdCBjb3B5aW5nIGRhdGEsIHdlIGNhbiBnbyB0byBuZXh0IGJ1Y2tldCBhbmQgYXZvaWRcbi1cdCAqIHVubG9ja2luZyB0aGUgcmN1LlxuJiM0MztcdC8qXG4mIzQzO1x0ICogSWYgd2UgYXJlIG5vdCBjb3B5aW5nIGRhdGEsIHdlIGNhbiBnbyB0byBuZXh0IGJ1Y2tldCBhbmQgYXZvaWRcbiYjNDM7XHQgKiB1bmxvY2tpbmcgdGhlIHJjdS4gQm91bmQgdGhlIHdhbGsgdGhvdWdoOiBhZnRlclxuJiM0MztcdCAqIEhUQUJfQkFUQ0hfRU1QVFlfUkVTQ0hFRCBjb25zZWN1dGl2ZSBlbXB0eSBidWNrZXRzLCBmdWxseSBleGl0XG4mIzQzO1x0ICogdGhlIGNyaXRpY2FsIHNlY3Rpb24gKG5vIGxvY2tzIGFyZSBoZWxkIGhlcmUpIGFuZCByZXNjaGVkdWxlLlxuIFx0ICovXG4gXHRpZiAoIWJ1Y2tldF9jbnQgXHUwMDI2XHUwMDI2IChiYXRjaCAmIzQzOyAxIFx1MDAzYyBodGFiLVx1MDAzZW5fYnVja2V0cykpIHtcbiBcdFx0YmF0Y2gmIzQzOyYjNDM7O1xuLVx0XHRnb3RvIGFnYWluX25vY29weTtcbiYjNDM7XHRcdGlmICgmIzQzOyYjNDM7ZW1wdHlfY250IFx1MDAzYyBIVEFCX0JBVENIX0VNUFRZX1JFU0NIRUQpXG4mIzQzO1x0XHRcdGdvdG8gYWdhaW5fbm9jb3B5O1xuJiM0MztcdFx0ZW1wdHlfY250ID0gMDtcbiYjNDM7XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdFx0YnBmX2VuYWJsZV9pbnN0cnVtZW50YXRpb24oKTtcbiYjNDM7XHRcdGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKTtcbiYjNDM7XHRcdGdvdG8gYWdhaW47XG4gXHR9XG4gXG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbkBAIC0xOTkwLDExICYjNDM7MjAwNiwxMyBAQCBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXG4gXHR9XG4gXG4gXHR0b3RhbCAmIzQzOz0gYnVja2V0X2NudDtcbiYjNDM7XHRlbXB0eV9jbnQgPSAwO1xuIFx0YmF0Y2gmIzQzOyYjNDM7O1xuIFx0aWYgKGJhdGNoIFx1MDAzZT0gaHRhYi1cdTAwM2VuX2J1Y2tldHMpIHtcbiBcdFx0cmV0ID0gLUVOT0VOVDtcbiBcdFx0Z290byBhZnRlcl9sb29wO1xuIFx0fVxuJiM0MztcdGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKTtcbiBcdGdvdG8gYWdhaW47XG4gXG4gYWZ0ZXJfbG9vcDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxODo1NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gmIzM0OywKICAgICYjMzQ7aHRhYl9tYXBfbG9va3VwX2JhdGNoJiMzNDssCiAgICAmIzM0O2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoJiMzNDssCiAgICAmIzM0O2h0YWJfbHJ1X21hcF9sb29rdXBfYmF0Y2gmIzM0OywKICAgICYjMzQ7aHRhYl9scnVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoJiMzNDssCiAgICAmIzM0O2h0YWJfcGVyY3B1X21hcF9sb29rdXBfYmF0Y2gmIzM0OywKICAgICYjMzQ7aHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoJiMzNDssCiAgICAmIzM0O2h0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2JhdGNoJiMzNDssCiAgICAmIzM0O2h0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJhdGNoIGxvb2t1cCBhbmQgZGVsZXRlIGl0ZXJhdGlvbiBsb2dpYyBpbiBrZXJuZWwvYnBmL2hhc2h0YWIuYyAoX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCkgdG8gaW50cm9kdWNlIHBlcmlvZGljIHJlc2NoZWR1bGluZyAoY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcykgYW5kIFJDVSBjcml0aWNhbCBzZWN0aW9uIGV4aXRzIHdoZW4gZW5jb3VudGVyaW5nIGNvbnNlY3V0aXZlIGVtcHR5IGJ1Y2tldHMuIFRoaXMgYWx0ZXJzIFJDVSBzeW5jaHJvbml6YXRpb24sIGxvY2tpbmcsIGFuZCBpdGVyYXRpb24gY29udHJvbCBmbG93IGluIHJlYWNoYWJsZSBCUEYgbWFwIHN5c2NhbGwgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDM3MGU2NzRmZGM2NDZiOTZmYjY4M2I1YzY1NGNjOTI3ZDBkMjgxZTIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDE4OjU0OjQ2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuYwppbmRleCA2ZjMzMWM4MDEzMGQ3Li5hNzJkYzViOWYxODRkIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2hhc2h0YWIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2hhc2h0YWIuYwpAQCAtMTc3Miw2ICYjNDM7MTc3MiwxMiBAQCBzdGF0aWMgaW50IGh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLAogCQkJCQkJIGZsYWdzKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogTWF4IGNvbnNlY3V0aXZlIGVtcHR5IGJ1Y2tldHMgdG8gd2FsayBpbiBvbmUgUkNVICYjNDM7CiYjNDM7ICogaW5zdHJ1bWVudGF0aW9uLWRpc2FibGVkIHNlY3Rpb24gYmVmb3JlIHJlc2NoZWR1bGluZy4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIEhUQUJfQkFUQ0hfRU1QVFlfUkVTQ0hFRCA2NAomIzQzOwogc3RhdGljIGludAogX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLAogCQkJCSAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLApAQCAtMTc5Myw2ICYjNDM7MTc5OSw3IEBAIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKIAlib29sIGxvY2tlZCA9IGZhbHNlOwogCXN0cnVjdCBodGFiX2VsZW0gKmw7CiYjNDM7CXUzMiBlbXB0eV9jbnQgPSAwOwogCXN0cnVjdCBidWNrZXQgKmI7CiAJaW50IHJldCA9IDA7CiAKQEAgLTE5NzEsMTIgJiM0MzsxOTc4LDIxIEBAIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwKIAl9CiAKIG5leHRfYmF0Y2g6Ci0JLyogSWYgd2UgYXJlIG5vdCBjb3B5aW5nIGRhdGEsIHdlIGNhbiBnbyB0byBuZXh0IGJ1Y2tldCBhbmQgYXZvaWQKLQkgKiB1bmxvY2tpbmcgdGhlIHJjdS4KJiM0MzsJLyoKJiM0MzsJICogSWYgd2UgYXJlIG5vdCBjb3B5aW5nIGRhdGEsIHdlIGNhbiBnbyB0byBuZXh0IGJ1Y2tldCBhbmQgYXZvaWQKJiM0MzsJICogdW5sb2NraW5nIHRoZSByY3UuIEJvdW5kIHRoZSB3YWxrIHRob3VnaDogYWZ0ZXIKJiM0MzsJICogSFRBQl9CQVRDSF9FTVBUWV9SRVNDSEVEIGNvbnNlY3V0aXZlIGVtcHR5IGJ1Y2tldHMsIGZ1bGx5IGV4aXQKJiM0MzsJICogdGhlIGNyaXRpY2FsIHNlY3Rpb24gKG5vIGxvY2tzIGFyZSBoZWxkIGhlcmUpIGFuZCByZXNjaGVkdWxlLgogCSAqLwogCWlmICghYnVja2V0X2NudCAmYW1wOyZhbXA7IChiYXRjaCAmIzQzOyAxICZsdDsgaHRhYi0mZ3Q7bl9idWNrZXRzKSkgewogCQliYXRjaCYjNDM7JiM0Mzs7Ci0JCWdvdG8gYWdhaW5fbm9jb3B5OwomIzQzOwkJaWYgKCYjNDM7JiM0MztlbXB0eV9jbnQgJmx0OyBIVEFCX0JBVENIX0VNUFRZX1JFU0NIRUQpCiYjNDM7CQkJZ290byBhZ2Fpbl9ub2NvcHk7CiYjNDM7CQllbXB0eV9jbnQgPSAwOwomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CQlicGZfZW5hYmxlX2luc3RydW1lbnRhdGlvbigpOwomIzQzOwkJY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpOwomIzQzOwkJZ290byBhZ2FpbjsKIAl9CiAKIAlyY3VfcmVhZF91bmxvY2soKTsKQEAgLTE5OTAsMTEgJiM0MzsyMDA2LDEzIEBAIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwKIAl9CiAKIAl0b3RhbCAmIzQzOz0gYnVja2V0X2NudDsKJiM0MzsJZW1wdHlfY250ID0gMDsKIAliYXRjaCYjNDM7JiM0Mzs7CiAJaWYgKGJhdGNoICZndDs9IGh0YWItJmd0O25fYnVja2V0cykgewogCQlyZXQgPSAtRU5PRU5UOwogCQlnb3RvIGFmdGVyX2xvb3A7CiAJfQomIzQzOwljb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKCk7CiAJZ290byBhZ2FpbjsKIAogYWZ0ZXJfbG9vcDoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTg6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQyMQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFdmFsdWF0aW5nIHRoZSBgaGFzaHRhYi5jYCBQYXRjaCBmb3IgU3l6a2FsbGVyIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzc2VzcyBpZiB0aGlzIG1vZGlmaWNhdGlvbiB0byBga2VybmVsL2JwZi9oYXNodGFiLmNg4oCUc3BlY2lmaWNhbGx5IGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYOKAlGp1c3RpZmllcyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgYWRkaW5nIHBlcmlvZGljIHJlc2NoZWR1bGluZyB3aXRoaW4gdGhlIEJQRiBoYXNoIHRhYmxlIGxvb2t1cCBhbmQgZGVsZXRlIGJhdGNoIG9wZXJhdGlvbiwgd2hpY2ggaXMgdHJpZ2dlcmVkIGJ5IHRoZSBgQlBGX01BUF9MT09LVVBfQU5EX0RFTEVURV9CQVRDSGAgc3lzY2FsbC4KCkVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIGBIVEFCX0JBVENIX0VNUFRZX1JFU0NIRURgIGNvdW50ZXIgKGRlZmluZWQgYXMgNjQpLiBJbnNpZGUgdGhlIGxvb3AgbG9naWMsIHdoZW4gd2Fsa2luZyB0aHJvdWdoIGNvbnNlY3V0aXZlIGVtcHR5IGJ1Y2tldHMsIGl0IGFkZHMgYSBjaGVjazogaWYgYGVtcHR5X2NudGAgaXMgbGVzcyB0aGFuIGBIVEFCX0JBVENIX0VNUFRZX1JFU0NIRURgLCBpdCBjb250aW51ZXMgdG8gYGFnYWluX25vY29weWAuIE9uY2UgYGVtcHR5X2NudGAgcmVhY2hlcyBvciBleGNlZWRzIHRoYXQgdGhyZXNob2xkLCB0aGUgY29kZSByZXNldHMgYGVtcHR5X2NudGAsIHVubG9ja3MgdGhlIFJDVSByZWFkIGxvY2ssIGVuYWJsZXMgQlBGIGluc3RydW1lbnRhdGlvbiwgY2FsbHMgYGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKWAsIGFuZCBnb2VzIGJhY2sgdG8gYGFnYWluYCAoaW5zdGVhZCBvZiBgYWdhaW5fbm9jb3B5YCkuIEl0IGFsc28gYWRkcyB0aGUgYGVtcHR5X2NudGAgcmVzZXQgYW5kIHRoZSBgY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpYCBjYWxsIHdpdGhpbiB0aGUgbWFpbiBwcm9jZXNzaW5nIHBhdGguCgpNeSBpbnN0aW5jdCB0ZWxscyBtZSB0aGlzIGlzIHNpZ25pZmljYW50LiBUaGUgaW50cm9kdWN0aW9uIG9mIHJlc2NoZWR1bGluZyB3aXRoaW4gYSBjcml0aWNhbCBCUEYgb3BlcmF0aW9uIGlzIGludGVyZXN0aW5nLiBJdCBjb3VsZCBwb3RlbnRpYWxseSB1bmNvdmVyIHJhY2UgY29uZGl0aW9ucyBvciB0aW1pbmctcmVsYXRlZCBpc3N1ZXMgdGhhdCBtaWdodCBub3QgYmUgcmVhZGlseSBhcHBhcmVudCB1bmRlciBub3JtYWwgZXhlY3V0aW9uLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBSQ1UgY29udGV4dC4gVGhpcyBpcyB0aGUga2luZCBvZiBjaGFuZ2UgdGhhdCwgd2hpbGUgc2VlbWluZ2x5IG1pbm9yLCBjb3VsZCBpbnRyb2R1Y2UgbmV3IHN0YXRlcyB3aXRoaW4gdGhlIEJQRiBzdWJzeXN0ZW0gdGhhdCBtaWdodCBub3QgYmUgZnVsbHkgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KCk5vdywgdG8gc29saWRpZnkgbXkgYXNzZXNzbWVudCwgSSYjMzk7bSBnb2luZyB0byBsZXZlcmFnZSBteSBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbCBhbmQgdGhlIHRvb2xzIGF0IGhhbmQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB3aWRlciBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgQlBGIHN1YnN5c3RlbS4gSSYjMzk7bGwgdXNlIGVpdGhlciBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gZ2V0IHRoZSBjb250ZXh0IG9mIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24uIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJpc2sgYW5kIHJld2FyZCBvZiBmdXp6aW5nIHRoaXMgY2hhbmdlIHdpdGggc3l6a2FsbGVyLiBUaGUgcXVlc3Rpb24gbm93IGlzOiBpcyB0aGlzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLCBvciBpcyB0aGUgY2hhbmdlIGFscmVhZHkgd2VsbC1jb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3Rpbmc/IExldCYjMzk7cyBmaW5kIG91dCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxODo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGFzaHRhYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTc5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTc5MDpcdFx0dm9pZCBfX3VzZXIgKnV2YWx1ZXMgPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cdTAwM2ViYXRjaC52YWx1ZXMpO1xuMTc5MTpcdFx0dm9pZCBfX3VzZXIgKnVrZXlzID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXHUwMDNlYmF0Y2gua2V5cyk7XG4xNzkyOlx0XHR2b2lkIF9fdXNlciAqdWJhdGNoID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXHUwMDNlYmF0Y2guaW5fYmF0Y2gpO1xuMTc5MzpcdFx0dTMyIGJhdGNoLCBtYXhfY291bnQsIHNpemUsIGJ1Y2tldF9zaXplLCBtYXBfaWQ7XG4xNzk0Olx0XHR1NjQgZWxlbV9tYXBfZmxhZ3MsIG1hcF9mbGFncywgYWxsb3dlZF9mbGFncztcbjE3OTU6XHRcdHUzMiBidWNrZXRfY250LCB0b3RhbCwga2V5X3NpemUsIHZhbHVlX3NpemU7XG4xNzk2Olx0XHRzdHJ1Y3QgaHRhYl9lbGVtICpub2RlX3RvX2ZyZWUgPSBOVUxMO1xuMTc5NzpcdFx0c3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmhlYWQ7XG4xNzk4Olx0XHRzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqbjtcbjE3OTk6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwO1xuMTgwMDpcdFx0Ym9vbCBsb2NrZWQgPSBmYWxzZTtcbjE4MDE6XHRcdHN0cnVjdCBodGFiX2VsZW0gKmw7XG4xODAyOlx0XHR1MzIgZW1wdHlfY250ID0gMDtcbjE4MDM6XHRcdHN0cnVjdCBidWNrZXQgKmI7XG4xODA0Olx0XHRpbnQgcmV0ID0gMDtcbjE4MDU6XHRcbjE4MDY6XHRcdGVsZW1fbWFwX2ZsYWdzID0gYXR0ci1cdTAwM2ViYXRjaC5lbGVtX2ZsYWdzO1xuMTgwNzpcdFx0YWxsb3dlZF9mbGFncyA9IEJQRl9GX0xPQ0s7XG4xODA4Olx0XHRpZiAoIWRvX2RlbGV0ZSBcdTAwMjZcdTAwMjYgaXNfcGVyY3B1KVxuMTgwOTpcdFx0XHRhbGxvd2VkX2ZsYWdzIHw9IEJQRl9GX0NQVTtcbjE4MTA6XHRcdHJldCA9IGJwZl9tYXBfY2hlY2tfb3BfZmxhZ3MobWFwLCBlbGVtX21hcF9mbGFncywgYWxsb3dlZF9mbGFncyk7XG4xODExOlx0XHRpZiAocmV0KVxuMTgxMjpcdFx0XHRyZXR1cm4gcmV0O1xuMTgxMzpcdFxuMTgxNDpcdFx0bWFwX2ZsYWdzID0gYXR0ci1cdTAwM2ViYXRjaC5mbGFncztcbjE4MTU6XHRcdGlmIChtYXBfZmxhZ3MpXG4xODE2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTgxNzpcdFxuMTgxODpcdFx0bWF4X2NvdW50ID0gYXR0ci1cdTAwM2ViYXRjaC5jb3VudDtcbjE4MTk6XHRcdGlmICghbWF4X2NvdW50KVxuMTgyMDpcdFx0XHRyZXR1cm4gMDtcbjE4MjE6XHRcbjE4MjI6XHRcdGlmIChwdXRfdXNlcigwLCBcdTAwMjZ1YXR0ci1cdTAwM2ViYXRjaC5jb3VudCkpXG4xODIzOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuMTgyNDpcdFxuMTgyNTpcdFx0YmF0Y2ggPSAwO1xuMTgyNjpcdFx0aWYgKHViYXRjaCBcdTAwMjZcdTAwMjYgY29weV9mcm9tX3VzZXIoXHUwMDI2YmF0Y2gsIHViYXRjaCwgc2l6ZW9mKGJhdGNoKSkpXG4xODI3Olx0XHRcdHJldHVybiAtRUZBVUxUO1xuMTgyODpcdFxuMTgyOTpcdFx0aWYgKGJhdGNoIFx1MDAzZT0gaHRhYi1cdTAwM2VuX2J1Y2tldHMpXG4xODMwOlx0XHRcdHJldHVybiAtRU5PRU5UO1xuMTgzMTpcdFxuMTgzMjpcdFx0a2V5X3NpemUgPSBodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZTtcbjE4MzM6XHRcdHZhbHVlX3NpemUgPSBodGFiLVx1MDAzZW1hcC52YWx1ZV9zaXplO1xuMTgzNDpcdFx0c2l6ZSA9IHJvdW5kX3VwKHZhbHVlX3NpemUsIDgpO1xuMTgzNTpcdFx0aWYgKGlzX3BlcmNwdSBcdTAwMjZcdTAwMjYgIShlbGVtX21hcF9mbGFncyBcdTAwMjYgQlBGX0ZfQ1BVKSlcbjE4MzY6XHRcdFx0dmFsdWVfc2l6ZSA9IHNpemUgKiBudW1fcG9zc2libGVfY3B1cygpO1xuMTgzNzpcdFx0dG90YWwgPSAwO1xuMTgzODpcdFx0Lyogd2hpbGUgZXhwZXJpbWVudGluZyB3aXRoIGhhc2ggdGFibGVzIHdpdGggc2l6ZXMgcmFuZ2luZyBmcm9tIDEwIHRvXG4xODM5Olx0XHQgKiAxMDAwLCBpdCB3YXMgb2JzZXJ2ZWQgdGhhdCBhIGJ1Y2tldCBjYW4gaGF2ZSB1cCB0byA1IGVudHJpZXMuXG4xODQwOlx0XHQgKi9cbjE4NDE6XHRcdGJ1Y2tldF9zaXplID0gNTtcbjE4NDI6XHRcbjE4NDM6XHRhbGxvYzpcbjE4NDQ6XHRcdC8qIFdlIGNhbm5vdCBkbyBjb3B5X2Zyb21fdXNlciBvciBjb3B5X3RvX3VzZXIgaW5zaWRlXG4xODQ1Olx0XHQgKiB0aGUgcmN1X3JlYWRfbG9jay4gQWxsb2NhdGUgZW5vdWdoIHNwYWNlIGhlcmUuXG4xODQ2Olx0XHQgKi9cbjE4NDc6XHRcdGtleXMgPSBrdm1hbGxvY19hcnJheShrZXlfc2l6ZSwgYnVja2V0X3NpemUsIEdGUF9VU0VSIHwgX19HRlBfTk9XQVJOKTtcbjE4NDg6XHRcdHZhbHVlcyA9IGt2bWFsbG9jX2FycmF5KHZhbHVlX3NpemUsIGJ1Y2tldF9zaXplLCBHRlBfVVNFUiB8IF9fR0ZQX05PV0FSTik7XG4xODQ5Olx0XHRpZiAoIWtleXMgfHwgIXZhbHVlcykge1xuMTg1MDpcdFx0XHRyZXQgPSAtRU5PTUVNO1xuMTg1MTpcdFx0XHRnb3RvIGFmdGVyX2xvb3A7XG4xODUyOlx0XHR9XG4xODUzOlx0XG4xODU0Olx0YWdhaW46XG4xODU1Olx0XHRicGZfZGlzYWJsZV9pbnN0cnVtZW50YXRpb24oKTtcbjE4NTY6XHRcdHJjdV9yZWFkX2xvY2soKTtcbjE4NTc6XHRhZ2Fpbl9ub2NvcHk6XG4xODU4Olx0XHRkc3Rfa2V5ID0ga2V5cztcbjE4NTk6XHRcdGRzdF92YWwgPSB2YWx1ZXM7XG4xODYwOlx0XHRiID0gXHUwMDI2aHRhYi1cdTAwM2VidWNrZXRzW2JhdGNoXTtcbjE4NjE6XHRcdGhlYWQgPSBcdTAwMjZiLVx1MDAzZWhlYWQ7XG4xODYyOlx0XHQvKiBkbyBub3QgZ3JhYiB0aGUgbG9jayB1bmxlc3MgbmVlZCBpdCAoYnVja2V0X2NudCBcdTAwM2UgMCkuICovXG4xODYzOlx0XHRpZiAobG9ja2VkKSB7XG4xODY0Olx0XHRcdHJldCA9IGh0YWJfbG9ja19idWNrZXQoYiwgXHUwMDI2ZmxhZ3MpO1xuMTg2NTpcdFx0XHRpZiAocmV0KSB7XG4xODY2Olx0XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4xODY3Olx0XHRcdFx0YnBmX2VuYWJsZV9pbnN0cnVtZW50YXRpb24oKTtcbjE4Njg6XHRcdFx0XHRnb3RvIGFmdGVyX2xvb3A7XG4xODY5Olx0XHRcdH1cbjE4NzA6XHRcdH1cbjE4NzE6XHRcbjE4NzI6XHRcdGJ1Y2tldF9jbnQgPSAwO1xuMTg3MzpcdFx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGwsIG4sIGhlYWQsIGhhc2hfbm9kZSlcbjE4NzQ6XHRcdFx0YnVja2V0X2NudCYjNDM7JiM0Mzs7XG4xODc1Olx0XG4xODc2Olx0XHRpZiAoYnVja2V0X2NudCBcdTAwMjZcdTAwMjYgIWxvY2tlZCkge1xuMTg3NzpcdFx0XHRsb2NrZWQgPSB0cnVlO1xuMTg3ODpcdFx0XHRnb3RvIGFnYWluX25vY29weTtcbjE4Nzk6XHRcdH1cbjE4ODA6XHRcbjE4ODE6XHRcdGlmIChidWNrZXRfY250IFx1MDAzZSAobWF4X2NvdW50IC0gdG90YWwpKSB7XG4xODgyOlx0XHRcdGlmICh0b3RhbCA9PSAwKVxuMTg4MzpcdFx0XHRcdHJldCA9IC1FTk9TUEM7XG4xODg0Olx0XHRcdC8qIE5vdGUgdGhhdCBzaW5jZSBidWNrZXRfY250IFx1MDAzZSAwIGhlcmUsIGl0IGlzIGltcGxpY2l0XG4xODg1Olx0XHRcdCAqIHRoYXQgdGhlIGxvY2tlZCB3YXMgZ3JhYmJlZCwgc28gcmVsZWFzZSBpdC5cbjE4ODY6XHRcdFx0ICovXG4xODg3Olx0XHRcdGh0YWJfdW5sb2NrX2J1Y2tldChiLCBmbGFncyk7XG4xODg4Olx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMTg4OTpcdFx0XHRicGZfZW5hYmxlX2luc3RydW1lbnRhdGlvbigpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE4OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4OTcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipEaXZpbmcgRGVlcGVyIGludG8gYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgKioKCk9rYXksIHNvIHdlJiMzOTt2ZSBpZGVudGlmaWVkIHRoaXMgY29yZSBmdW5jdGlvbiwgYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgLCBhcyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUuIE5vdywgbGV0JiMzOTtzIG5vdCBqdXN0IGlzb2xhdGUgaXQuIFRoZSByZWFsIHBvd2VyIGNvbWVzIGZyb20gdW5kZXJzdGFuZGluZyBpdHMgY29udGV4dC4gV2hhdCYjMzk7cyB0aGUgY29tcGxldGUgcGljdHVyZT8gSSBuZWVkIHRvIGFuYWx5emUgaXRzIGludGVybmFsIHdvcmtpbmdzLCBvZiBjb3Vyc2UsIGJ1dCBlcXVhbGx5IGltcG9ydGFudCBpcyB0cmFjaW5nIGl0cyBleGVjdXRpb24gcGF0aC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzICpiZWluZyogY2FsbGVkLiBUaGF0IG1lYW5zIHN5c3RlbWF0aWNhbGx5IGV4YW1pbmluZyBldmVyeSBvdGhlciBwYXJ0IG9mIHRoZSBjb2RlIHRoYXQgKnVzZXMqIGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYC4gQnkgY2FyZWZ1bGx5IGNvbnNpZGVyaW5nIGFsbCBvZiB0aGUgY2FsbGVycywgSSBjYW4gZmlndXJlIG91dCB0aGUgYmlnIHBpY3R1cmUuIFRoYXQmIzM5O3MgdGhlIG9ubHkgd2F5IHRvIGVmZmVjdGl2ZWx5IHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uJiMzOTtzIHRydWUgcHVycG9zZSBhbmQgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE4OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9oYXNodGFiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE5NzA6XHRcbjE5NzE6XHRcdHdoaWxlIChub2RlX3RvX2ZyZWUpIHtcbjE5NzI6XHRcdFx0bCA9IG5vZGVfdG9fZnJlZTtcbjE5NzM6XHRcdFx0bm9kZV90b19mcmVlID0gbm9kZV90b19mcmVlLVx1MDAzZWJhdGNoX2ZsaW5rO1xuMTk3NDpcdFx0XHRpZiAoaXNfbHJ1X21hcClcbjE5NzU6XHRcdFx0XHRodGFiX2xydV9wdXNoX2ZyZWUoaHRhYiwgbCk7XG4xOTc2Olx0XHRcdGVsc2VcbjE5Nzc6XHRcdFx0XHRmcmVlX2h0YWJfZWxlbShodGFiLCBsKTtcbjE5Nzg6XHRcdH1cbjE5Nzk6XHRcbjE5ODA6XHRuZXh0X2JhdGNoOlxuMTk4MTpcdFx0LypcbjE5ODI6XHRcdCAqIElmIHdlIGFyZSBub3QgY29weWluZyBkYXRhLCB3ZSBjYW4gZ28gdG8gbmV4dCBidWNrZXQgYW5kIGF2b2lkXG4xOTgzOlx0XHQgKiB1bmxvY2tpbmcgdGhlIHJjdS4gQm91bmQgdGhlIHdhbGsgdGhvdWdoOiBhZnRlclxuMTk4NDpcdFx0ICogSFRBQl9CQVRDSF9FTVBUWV9SRVNDSEVEIGNvbnNlY3V0aXZlIGVtcHR5IGJ1Y2tldHMsIGZ1bGx5IGV4aXRcbjE5ODU6XHRcdCAqIHRoZSBjcml0aWNhbCBzZWN0aW9uIChubyBsb2NrcyBhcmUgaGVsZCBoZXJlKSBhbmQgcmVzY2hlZHVsZS5cbjE5ODY6XHRcdCAqL1xuMTk4NzpcdFx0aWYgKCFidWNrZXRfY250IFx1MDAyNlx1MDAyNiAoYmF0Y2ggJiM0MzsgMSBcdTAwM2MgaHRhYi1cdTAwM2VuX2J1Y2tldHMpKSB7XG4xOTg4Olx0XHRcdGJhdGNoJiM0MzsmIzQzOztcbjE5ODk6XHRcdFx0aWYgKCYjNDM7JiM0MztlbXB0eV9jbnQgXHUwMDNjIEhUQUJfQkFUQ0hfRU1QVFlfUkVTQ0hFRClcbjE5OTA6XHRcdFx0XHRnb3RvIGFnYWluX25vY29weTtcbjE5OTE6XHRcdFx0ZW1wdHlfY250ID0gMDtcbjE5OTI6XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4xOTkzOlx0XHRcdGJwZl9lbmFibGVfaW5zdHJ1bWVudGF0aW9uKCk7XG4xOTk0Olx0XHRcdGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKTtcbjE5OTU6XHRcdFx0Z290byBhZ2FpbjtcbjE5OTY6XHRcdH1cbjE5OTc6XHRcbjE5OTg6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMTk5OTpcdFx0YnBmX2VuYWJsZV9pbnN0cnVtZW50YXRpb24oKTtcbjIwMDA6XHRcdGlmIChidWNrZXRfY250IFx1MDAyNlx1MDAyNiAoY29weV90b191c2VyKHVrZXlzICYjNDM7IHRvdGFsICoga2V5X3NpemUsIGtleXMsXG4yMDAxOlx0XHQgICAga2V5X3NpemUgKiBidWNrZXRfY250KSB8fFxuMjAwMjpcdFx0ICAgIGNvcHlfdG9fdXNlcih1dmFsdWVzICYjNDM7IHRvdGFsICogdmFsdWVfc2l6ZSwgdmFsdWVzLFxuMjAwMzpcdFx0ICAgIHZhbHVlX3NpemUgKiBidWNrZXRfY250KSkpIHtcbjIwMDQ6XHRcdFx0cmV0ID0gLUVGQVVMVDtcbjIwMDU6XHRcdFx0Z290byBhZnRlcl9sb29wO1xuMjAwNjpcdFx0fVxuMjAwNzpcdFxuMjAwODpcdFx0dG90YWwgJiM0Mzs9IGJ1Y2tldF9jbnQ7XG4yMDA5Olx0XHRlbXB0eV9jbnQgPSAwO1xuMjAxMDpcdFx0YmF0Y2gmIzQzOyYjNDM7O1xuMjAxMTpcdFx0aWYgKGJhdGNoIFx1MDAzZT0gaHRhYi1cdTAwM2VuX2J1Y2tldHMpIHtcbjIwMTI6XHRcdFx0cmV0ID0gLUVOT0VOVDtcbjIwMTM6XHRcdFx0Z290byBhZnRlcl9sb29wO1xuMjAxNDpcdFx0fVxuMjAxNTpcdFx0Y29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpO1xuMjAxNjpcdFx0Z290byBhZ2FpbjtcbjIwMTc6XHRcbjIwMTg6XHRhZnRlcl9sb29wOlxuMjAxOTpcdFx0aWYgKHJldCA9PSAtRUZBVUxUKVxuMjAyMDpcdFx0XHRnb3RvIG91dDtcbjIwMjE6XHRcbjIwMjI6XHRcdC8qIGNvcHkgIyBvZiBlbnRyaWVzIGFuZCBuZXh0IGJhdGNoICovXG4yMDIzOlx0XHR1YmF0Y2ggPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cdTAwM2ViYXRjaC5vdXRfYmF0Y2gpO1xuMjAyNDpcdFx0aWYgKGNvcHlfdG9fdXNlcih1YmF0Y2gsIFx1MDAyNmJhdGNoLCBzaXplb2YoYmF0Y2gpKSB8fFxuMjAyNTpcdFx0ICAgIHB1dF91c2VyKHRvdGFsLCBcdTAwMjZ1YXR0ci1cdTAwM2ViYXRjaC5jb3VudCkpXG4yMDI2Olx0XHRcdHJldCA9IC1FRkFVTFQ7XG4yMDI3Olx0XG4yMDI4Olx0b3V0OlxuMjAyOTpcdFx0a3ZmcmVlKGtleXMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE4OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwNDcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvZGUuIEhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHRoaW5raW5nIHJpZ2h0IG5vdzoKCioqSW52ZXN0aWdhdGluZyBDYWxsZXJzIG9mIGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCoqCgpSaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiwgYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgLCBpcyBiZWluZyB1dGlsaXplZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgaXRzIGNhbGxlcnMuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCB0aGUgY3Jvc3MtcmVmZXJlbmNlcywgdGhlIHBsYWNlcyBpbiB0aGUgY29kZSB0aGF0IGFjdHVhbGx5ICp1c2UqIHRoaXMgZnVuY3Rpb24uIEtub3dpbmcgd2hlcmUgaXQmIzM5O3MgYmVpbmcgY2FsbGVkIGZyb20gd2lsbCBnaXZlIG1lIGNvbnRleHQ6IHdoYXQmIzM5O3MgdGhlIGJyb2FkZXIgcHVycG9zZT8gV2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGludm9sdmVkIGFyb3VuZCBpdD8gV2hhdCYjMzk7cyB0aGUgY29udHJvbCBmbG93IHRoYXQgbGVhZHMgdG8gaXRzIGV4ZWN1dGlvbj8KCkVzc2VudGlhbGx5LCBJIHdhbnQgdG8gYnVpbGQgYSBtZW50YWwgcGljdHVyZSBvZiBpdHMgcm9sZSB3aXRoaW4gdGhlIHN5c3RlbS4gSXMgaXQgaW52b2x2ZWQgaW4gY2FjaGUgaW52YWxpZGF0aW9uLCBnYXJiYWdlIGNvbGxlY3Rpb24sIHJlc291cmNlIGNsZWFudXAsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgY2FsbGluZyBmdW5jdGlvbnMgd2lsbCByZXZlYWwgdGhlIGludGVudCBhbmQgbG9naWMuIEkmIzM5O20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGtleSBzdWJzeXN0ZW1zIHRoYXQgcmVseSBvbiB0aGlzICYjMzQ7YmF0Y2ggbG9va3VwIGFuZCBkZWxldGUmIzM0OyBjYXBhYmlsaXR5LiBUaGlzIHVuZGVyc3RhbmRpbmcgd2lsbCBiZSB0aGUgZm91bmRhdGlvbiBmb3IgZGVlcGVyIGFuYWx5c2lzIGFuZCBhbnkgcG90ZW50aWFsIG9wdGltaXphdGlvbnMgb3IgZGVidWdnaW5nIEkgbWlnaHQgbmVlZCB0byBkbyBkb3duIHRoZSBsaW5lLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNhbGwgZ3JhcGggcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxODo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9oYXNodGFiLmM9MTc4MT1zdGF0aWMgaW50XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoxNzgyOl9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTE3ODMtXHRcdFx0XHQgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMDM1PWh0YWJfcGVyY3B1X21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjAzNy17XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMDM4Olx0cmV0dXJuIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gobWFwLCBhdHRyLCB1YXR0ciwgZmFsc2UsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDM5LVx0XHRcdFx0XHRcdCAgZmFsc2UsIHRydWUpO1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIwNDM9aHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA0Ni17XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMDQ3Olx0cmV0dXJuIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gobWFwLCBhdHRyLCB1YXR0ciwgdHJ1ZSxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNDgtXHRcdFx0XHRcdFx0ICBmYWxzZSwgdHJ1ZSk7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjA1Mj1odGFiX21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA1NC17XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMDU1Olx0cmV0dXJuIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gobWFwLCBhdHRyLCB1YXR0ciwgZmFsc2UsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDU2LVx0XHRcdFx0XHRcdCAgZmFsc2UsIGZhbHNlKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMDYwPWh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA2My17XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMDY0Olx0cmV0dXJuIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gobWFwLCBhdHRyLCB1YXR0ciwgdHJ1ZSxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNjUtXHRcdFx0XHRcdFx0ICBmYWxzZSwgZmFsc2UpO1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIwNjk9aHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDcyLXtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIwNzM6XHRyZXR1cm4gX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCBmYWxzZSxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNzQtXHRcdFx0XHRcdFx0ICB0cnVlLCB0cnVlKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMDc4PWh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDgxLXtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIwODI6XHRyZXR1cm4gX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCB0cnVlLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA4My1cdFx0XHRcdFx0XHQgIHRydWUsIHRydWUpO1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIwODc9aHRhYl9scnVfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDg5LXtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIwOTA6XHRyZXR1cm4gX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCBmYWxzZSxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwOTEtXHRcdFx0XHRcdFx0ICB0cnVlLCBmYWxzZSk7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjA5NT1odGFiX2xydV9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDk4LXtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIwOTk6XHRyZXR1cm4gX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCB0cnVlLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjEwMC1cdFx0XHRcdFx0XHQgIHRydWUsIGZhbHNlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxODo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDUwCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgdGhlIEJQRiBIYXNodGFibGUgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBoYXNodGFibGUgaXMgaW1wbGVtZW50ZWQgZm9yIEJQRiwgc3BlY2lmaWNhbGx5IGBoYXNodGFiLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgYE1ha2VmaWxlYCBpbiB0aGUgYGtlcm5lbC9icGYvYCBkaXJlY3RvcnkuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgYnVpbGQgcnVsZXMgYW5kIGRlcGVuZGVuY2llcy4gVGhlIGBLY29uZmlnYCBmaWxlcyB3aWxsIGxpa2VseSBob2xkIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBtaWdodCBhZmZlY3QgaG93IGBoYXNodGFiLmNgIGlzIGNvbXBpbGVkIG9yIGV2ZW4gaWYgaXQmIzM5O3MgaW5jbHVkZWQuIEkgd2FudCB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9yIGZlYXR1cmUgZmxhZ3MgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIHJlbGF0ZWQgdG8gdGhlIGhhc2h0YWJsZSBpbXBsZW1lbnRhdGlvbi4gVGhhdCYjMzk7cyB3aGVyZSBJIHdpbGwgc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTg6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGFzaHRhYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9MTA9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjExOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGhhc2h0YWIubyBhcnJheW1hcC5vIHBlcmNwdV9mcmVlbGlzdC5vIGJwZl9scnVfbGlzdC5vIGxwbV90cmllLm8gbWFwX2luX21hcC5vIGJsb29tX2ZpbHRlci5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTEyLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGxvY2FsX3N0b3JhZ2UubyBxdWV1ZV9zdGFja19tYXBzLm8gcmluZ2J1Zi5vIGJwZl9pbnNuX2FycmF5Lm9cbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xMS0jaW5jbHVkZSBcdTAwM2NsaW51eC9yYW5kb20uaFx1MDAzZVxua2VybmVsL2JwZi9oYXNodGFiLmM6MTI6I2luY2x1ZGUgXHUwMDNjbGludXgvcmhhc2h0YWJsZS5oXHUwMDNlXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xMy0jaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L2J0Zi5oXHUwMDNlXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9ODY9c3RydWN0IGJwZl9odGFiIHtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy05Ni1cdHN0cnVjdCBodGFiX2VsZW0gKl9fcGVyY3B1ICpleHRyYV9lbGVtcztcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjk3Olx0LyogbnVtYmVyIG9mIGVsZW1lbnRzIGluIG5vbi1wcmVhbGxvY2F0ZWQgaGFzaHRhYmxlIGFyZSBrZXB0XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy05OC1cdCAqIGluIGVpdGhlciBwY291bnQgb3IgY291bnRcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNzM9c3RhdGljIHZvaWQgaHRhYl9mcmVlX2VsZW1zKHN0cnVjdCBicGZfaHRhYiAqaHRhYilcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTgtICpcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5OTogKiBJbiBoYXNodGFiLmMsIHRvIGF2b2lkIGRlYWRsb2NrLCBsb2NrIGFjcXVpc2l0aW9uIG9mXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMDAtICogYnVja2V0X2xvY2sgZm9sbG93ZWQgYnkgbHJ1X2xvY2sgaXMgbm90IGFsbG93ZWQuIEluIHN1Y2ggY2FzZXMsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9Mjc3Mz1zdHJ1Y3QgYnBmX3JodGFiIHtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI3NzQtXHRzdHJ1Y3QgYnBmX21hcCBtYXA7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNzc1Olx0c3RydWN0IHJoYXNodGFibGUgaHQ7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzc2LVx0c3RydWN0IGJwZl9tZW1fYWxsb2MgbWE7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjc4MC1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI3ODE6c3RhdGljIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyByaHRhYl9wYXJhbXMgPSB7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzgyLVx0LmhlYWRfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHJodGFiX2VsZW0sIG5vZGUpLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI3ODY9c3RhdGljIGlubGluZSB2b2lkICpyaHRhYl9lbGVtX3ZhbHVlKHN0cnVjdCByaHRhYl9lbGVtICpsLCB1MzIga2V5X3NpemUpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjc5MS0vKiBTcGVjaWFsaXplIGhhc2ggZnVuY3Rpb24gYW5kIG9iamNtcCBmb3IgbG9uZyBzaXplZCBrZXkgKi9cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI3OTI6c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgcmh0YWJfa2V5X2NtcF9sb25nKHN0cnVjdCByaGFzaHRhYmxlX2NvbXBhcmVfYXJnICphcmcsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzkzLVx0XHRcdFx0XHQgICAgICBjb25zdCB2b2lkICpwdHIpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjgwMT1zdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiByaHRhYl9oYXNoZm5fbG9uZyhjb25zdCB2b2lkICpkYXRhLCB1MzIgbGVuLCB1MzIgc2VlZClcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yODA3LVxua2VybmVsL2JwZi9oYXNodGFiLmM6MjgwODpzdGF0aWMgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIHJodGFiX3BhcmFtc19sb25nID0ge1xua2VybmVsL2JwZi9oYXNodGFiLmMtMjgwOS1cdC5oZWFkX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCByaHRhYl9lbGVtLCBub2RlKSxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yODE2PXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqcmh0YWJfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjgxNy17XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyODE4Olx0c3RydWN0IHJoYXNodGFibGVfcGFyYW1zIHBhcmFtcztcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI4MTktXHRzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYjtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yODQ1LVxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjg0NjpcdGVyciA9IHJoYXNodGFibGVfaW5pdChcdTAwMjZyaHRhYi1cdTAwM2VodCwgXHUwMDI2cGFyYW1zKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI4NDctXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI4NDktXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyODUwOlx0LyogU2V0IG1heF9lbGVtcyBhZnRlciByaGFzaHRhYmxlX2luaXQoKSBzaW5jZSBpbml0IHplcm9lcyB0aGUgc3RydWN0ICovXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yODUxLVx0cmh0YWItXHUwMDNlaHQubWF4X2VsZW1zID0gcmh0YWItXHUwMDNlbWFwLm1heF9lbnRyaWVzO1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI4NTktZGVzdHJveV9yaHRhYjpcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI4NjA6XHRyaGFzaHRhYmxlX2Rlc3Ryb3koXHUwMDI2cmh0YWItXHUwMDNlaHQpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMjg2MS1mcmVlX3JodGFiOlxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI5MTA9c3RhdGljIHZvaWQgcmh0YWJfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTEzLVxua2VybmVsL2JwZi9oYXNodGFiLmM6MjkxNDpcdHJoYXNodGFibGVfZnJlZV9hbmRfZGVzdHJveShcdTAwMjZyaHRhYi1cdTAwM2VodCwgcmh0YWJfZnJlZV9lbGVtLCByaHRhYik7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTE1LVx0YnBmX21lbV9hbGxvY19kZXN0cm95KFx1MDAyNnJodGFiLVx1MDAzZW1hKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yOTE5PXN0YXRpYyB2b2lkICpyaHRhYl9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjkyNi1cdGlmIChtYXAtXHUwMDNla2V5X3NpemUgPT0gc2l6ZW9mKGxvbmcpKVxua2VybmVsL2JwZi9oYXNodGFiLmM6MjkyNzpcdFx0cmV0dXJuIHJoYXNodGFibGVfbG9va3VwX2xpa2VseShcdTAwMjZyaHRhYi1cdTAwM2VodCwga2V5LCByaHRhYl9wYXJhbXNfbG9uZyk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTI4LVxua2VybmVsL2JwZi9oYXNodGFiLmM6MjkyOTpcdHJldHVybiByaGFzaHRhYmxlX2xvb2t1cF9saWtlbHkoXHUwMDI2cmh0YWItXHUwMDNlaHQsIGtleSwgcmh0YWJfcGFyYW1zKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5MzAtfVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI5NTE9c3RhdGljIGludCByaHRhYl9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYiwgc3RydWN0IHJodGFiX2VsZW0gKmVsZW0sIHZvaWQgKmNvcHksXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjk1Ny1cdCAqIGRpc2FibGVfaW5zdHJ1bWVudGF0aW9uKCkgbWl0aWdhdGVzIHRoZSBkZWFkbG9jayBmb3IgcHJvZ3JhbXMgcnVubmluZyBpbiBOTUkgY29udGV4dC5cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5NTg6XHQgKiByaGFzaHRhYmxlIGxvY2tzIGJ1Y2tldCB3aXRoIGxvY2FsX2lycV9zYXZlKCkuIE9ubHkgTk1JIHByb2dyYW1zIG1heSByZWVudGVyXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyOTU5Olx0ICogcmhhc2h0YWJsZSBjb2RlLCBicGZfZGlzYWJsZV9pbnN0cnVtZW50YXRpb24oKSBkaXNhYmxlcyBwcm9ncmFtcyBydW5uaW5nIGluIE5NSSwgZXhjZXB0XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyOTYwOlx0ICogcmF3IHRyYWNlcG9pbnRzLCB3aGljaCB3ZSBkb24mIzM5O3QgaGF2ZSBpbiByaGFzaHRhYmxlLlxua2VybmVsL2JwZi9oYXNodGFiLmMtMjk2MS1cdCAqL1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5NjQtXHRpZiAocmh0YWItXHUwMDNlbWFwLmtleV9zaXplID09IHNpemVvZihsb25nKSlcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5NjU6XHRcdGVyciA9IHJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoXHUwMDI2cmh0YWItXHUwMDNlaHQsIFx1MDAyNmVsZW0tXHUwMDNlbm9kZSwgcmh0YWJfcGFyYW1zX2xvbmcpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMjk2Ni1cdGVsc2Vcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5Njc6XHRcdGVyciA9IHJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoXHUwMDI2cmh0YWItXHUwMDNlaHQsIFx1MDAyNmVsZW0tXHUwMDNlbm9kZSwgcmh0YWJfcGFyYW1zKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5NjgtXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MzA0Mz1zdGF0aWMgbG9uZyByaHRhYl9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwgdTY0IG1hcF9mbGFncylcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMDg0LVx0aWYgKG1hcC1cdTAwM2VrZXlfc2l6ZSA9PSBzaXplb2YobG9uZykpXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMDg1Olx0XHR0bXAgPSByaGFzaHRhYmxlX2xvb2t1cF9nZXRfaW5zZXJ0X2Zhc3QoXHUwMDI2cmh0YWItXHUwMDNlaHQsIFx1MDAyNmVsZW0tXHUwMDNlbm9kZSwgcmh0YWJfcGFyYW1zX2xvbmcpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzA4Ni1cdGVsc2Vcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMwODc6XHRcdHRtcCA9IHJoYXNodGFibGVfbG9va3VwX2dldF9pbnNlcnRfZmFzdChcdTAwMjZyaHRhYi1cdTAwM2VodCwgXHUwMDI2ZWxlbS1cdTAwM2Vub2RlLCByaHRhYl9wYXJhbXMpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzA4OC1cbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMTI5PXN0YXRpYyB2b2lkIHJodGFiX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoc3RydWN0IGJwZl9tYXAgKm1hcClcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTMxLVx0c3RydWN0IGJwZl9yaHRhYiAqcmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3JodGFiLCBtYXApO1xua2VybmVsL2JwZi9oYXNodGFiLmM6MzEzMjpcdHN0cnVjdCByaGFzaHRhYmxlX2l0ZXIgaXRlcjtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxMzMtXHRzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTQ1LVxua2VybmVsL2JwZi9oYXNodGFiLmM6MzE0NjpcdHJoYXNodGFibGVfd2Fsa19lbnRlcihcdTAwMjZyaHRhYi1cdTAwM2VodCwgXHUwMDI2aXRlcik7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMTQ3Olx0cmhhc2h0YWJsZV93YWxrX3N0YXJ0KFx1MDAyNml0ZXIpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzE0OC1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxNDk6XHR3aGlsZSAoKGVsZW0gPSByaGFzaHRhYmxlX3dhbGtfbmV4dChcdTAwMjZpdGVyKSkpIHtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxNTAtXHRcdGlmIChJU19FUlIoZWxlbSkpIHtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTU4LVx0XHRpZiAobmVlZF9yZXNjaGVkKCkpIHsgLyogQXZvaWQgc3RhbGxzIG9uIGxhcmdlIG1hcHMgKi9cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxNTk6XHRcdFx0cmhhc2h0YWJsZV93YWxrX3N0b3AoXHUwMDI2aXRlcik7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTYwLVx0XHRcdGNvbmRfcmVzY2hlZCgpO1xua2VybmVsL2JwZi9oYXNodGFiLmM6MzE2MTpcdFx0XHRyaGFzaHRhYmxlX3dhbGtfc3RhcnQoXHUwMDI2aXRlcik7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTYyLVx0XHR9XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzE2NC1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxNjU6XHRyaGFzaHRhYmxlX3dhbGtfc3RvcChcdTAwMjZpdGVyKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxNjY6XHRyaGFzaHRhYmxlX3dhbGtfZXhpdChcdTAwMjZpdGVyKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxNjctXHRXUklURV9PTkNFKHJodGFiLVx1MDAzZWZyZWVpbmdfaW50ZXJuYWwsIGZhbHNlKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMTcwPXN0YXRpYyBpbnQgcmh0YWJfbWFwX2dldF9uZXh0X2tleShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKm5leHRfa2V5KVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxNzUtXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMTc2Olx0ZWxlbSA9IHJoYXNodGFibGVfbmV4dF9rZXkoXHUwMDI2cmh0YWItXHUwMDNlaHQsIGtleSk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTc3LVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxNzktXHRpZiAoUFRSX0VSUihlbGVtKSA9PSAtRU5PRU5UKVxua2VybmVsL2JwZi9oYXNodGFiLmM6MzE4MDpcdFx0ZWxlbSA9IHJoYXNodGFibGVfbmV4dF9rZXkoXHUwMDI2cmh0YWItXHUwMDNlaHQsIE5VTEwpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzE4MS1cbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMTkxPXN0YXRpYyB2b2lkIHJodGFiX21hcF9zZXFfc2hvd19lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgc3RydWN0IHNlcV9maWxlICptKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxOTQtXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMTk1Olx0LyogR3VhcmFudGVlIHRoYXQgaGFzaHRhYiB2YWx1ZSBpcyBub3QgZnJlZWQgKi9cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxOTYtXHRndWFyZChyY3UpKCk7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MzIwOD1zdGF0aWMgbG9uZyBicGZfZWFjaF9yaGFzaF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIGJwZl9jYWxsYmFja190IGNhbGxiYWNrX2ZuLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMyMjMtXHQvKlxua2VybmVsL2JwZi9oYXNodGFiLmM6MzIyNDpcdCAqIEJlc3QtZWZmb3J0IGl0ZXJhdGlvbjogaWYgcmhhc2h0YWJsZSBpcyBjb25jdXJyZW50bHkgcmVzaXplZCBvclxua2VybmVsL2JwZi9oYXNodGFiLmMtMzIyNS1cdCAqIGVsZW1lbnRzIGFyZSBkZWxldGVkL2luc2VydGVkLCB0aGVyZSBtYXkgYmUgbWlzc2VkIG9yIGR1cGxpY2F0ZVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMyMjctXHQgKi9cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMyMjg6XHR3aGlsZSAoKGVsZW0gPSByaGFzaHRhYmxlX25leHRfa2V5KFx1MDAyNnJodGFiLVx1MDAzZWh0LCBwcmV2X2tleSkpKSB7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMjI5LVx0XHRpZiAoSVNfRVJSKGVsZW0pKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMyNDY9c3RhdGljIHU2NCByaHRhYl9tYXBfbWVtX3VzYWdlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzI1MC1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMyNTE6XHQvKiBFeGNsdWRlcyByaGFzaHRhYmxlIGJ1Y2tldCBvdmVyaGVhZCAofiBuZWxlbXMgKiBzaXplb2Yodm9pZCAqKSBhdCA3NSUgbG9hZCkuICovXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMjUyLVx0bnVtX2VudHJpZXMgPSBhdG9taWNfcmVhZChcdTAwMjZyaHRhYi1cdTAwM2VodC5uZWxlbXMpO1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMyNTY9c3RhdGljIGludCBfX3JodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzMzAtXHR9IGVsc2Uge1xua2VybmVsL2JwZi9oYXNodGFiLmM6MzMzMTpcdFx0ZWxlbSA9IHJoYXNodGFibGVfbmV4dF9rZXkoXHUwMDI2cmh0YWItXHUwMDNlaHQsIE5VTEwpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzMzMi1cdH1cbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzQxLVxua2VybmVsL2JwZi9oYXNodGFiLmM6MzM0MjpcdFx0ZWxlbSA9IHJoYXNodGFibGVfbmV4dF9rZXkoXHUwMDI2cmh0YWItXHUwMDNlaHQsIGRzdF9rZXkpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzM0My1cdFx0ZHN0X2tleSAmIzQzOz0ga2V5X3NpemU7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MzQwND1zdHJ1Y3QgYnBmX2l0ZXJfc2VxX3JoYXNoX21hcF9pbmZvIHtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNDA2LVx0c3RydWN0IGJwZl9yaHRhYiAqcmh0YWI7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNDA3Olx0c3RydWN0IHJoYXNodGFibGVfaXRlciBpdGVyO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzQwOC19O1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTM0MTA9c3RhdGljIHZvaWQgKmJwZl9yaGFzaF9tYXBfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcylcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNDE1LVxua2VybmVsL2JwZi9oYXNodGFiLmM6MzQxNjpcdHJoYXNodGFibGVfd2Fsa19zdGFydChcdTAwMjZpbmZvLVx1MDAzZWl0ZXIpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzQxNy1cdC8qXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzQyMi1cdGRvIHtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjM0MjM6XHRcdGVsZW0gPSByaGFzaHRhYmxlX3dhbGtfcGVlayhcdTAwMjZpbmZvLVx1MDAzZWl0ZXIpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzQyNC1cdH0gd2hpbGUgKFBUUl9FUlIoZWxlbSkgPT0gLUVBR0FJTik7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MzQzND1zdGF0aWMgdm9pZCAqYnBmX3JoYXNoX21hcF9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzQ0Mi1cdGRvIHtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjM0NDM6XHRcdGVsZW0gPSByaGFzaHRhYmxlX3dhbGtfbmV4dChcdTAwMjZpbmZvLVx1MDAzZWl0ZXIpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzQ0NC1cdH0gd2hpbGUgKFBUUl9FUlIoZWxlbSkgPT0gLUVBR0FJTik7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MzQ4MD1zdGF0aWMgdm9pZCBicGZfcmhhc2hfbWFwX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM0ODctXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNDg4Olx0cmhhc2h0YWJsZV93YWxrX3N0b3AoXHUwMDI2aW5mby1cdTAwM2VpdGVyKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM0ODktfVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTM0OTE9c3RhdGljIGludCBicGZfaXRlcl9pbml0X3JoYXNoX21hcCh2b2lkICpwcml2X2RhdGEsIHN0cnVjdCBicGZfaXRlcl9hdXhfaW5mbyAqYXV4KVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM0OTgtXHRpbmZvLVx1MDAzZXJodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9yaHRhYiwgbWFwKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjM0OTk6XHRyaGFzaHRhYmxlX3dhbGtfZW50ZXIoXHUwMDI2aW5mby1cdTAwM2VyaHRhYi1cdTAwM2VodCwgXHUwMDI2aW5mby1cdTAwM2VpdGVyKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM1MDAtXHRyZXR1cm4gMDtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zNTAzPXN0YXRpYyB2b2lkIGJwZl9pdGVyX2Zpbmlfcmhhc2hfbWFwKHZvaWQgKnByaXZfZGF0YSlcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTA2LVxua2VybmVsL2JwZi9oYXNodGFiLmM6MzUwNzpcdHJoYXNodGFibGVfd2Fsa19leGl0KFx1MDAyNmluZm8tXHUwMDNlaXRlcik7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTA4LVx0YnBmX21hcF9wdXRfd2l0aF91cmVmKGluZm8tXHUwMDNlbWFwKTtcbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNS0jaW5jbHVkZSBcdTAwM2NsaW51eC9idGYuaFx1MDAzZVxua2VybmVsL2JwZi9saXZlbmVzcy5jOjY6I2luY2x1ZGUgXHUwMDNjbGludXgvaGFzaHRhYmxlLmhcdTAwM2Vcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy03LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2poYXNoLmhcdTAwM2Vcbi0tXG5rZXJuZWwvYnBmL29mZmxvYWQuYy0xNC0jaW5jbHVkZSBcdTAwM2NsaW51eC9wcm9jX25zLmhcdTAwM2Vcbmtlcm5lbC9icGYvb2ZmbG9hZC5jOjE1OiNpbmNsdWRlIFx1MDAzY2xpbnV4L3JoYXNodGFibGUuaFx1MDAzZVxua2VybmVsL2JwZi9vZmZsb2FkLmMtMTYtI2luY2x1ZGUgXHUwMDNjbGludXgvcnRuZXRsaW5rLmhcdTAwM2Vcbi0tXG5rZXJuZWwvYnBmL29mZmxvYWQuYz0zMz1zdHJ1Y3QgYnBmX29mZmxvYWRfbmV0ZGV2IHtcbi0tXG5rZXJuZWwvYnBmL29mZmxvYWQuYy00MS1cbmtlcm5lbC9icGYvb2ZmbG9hZC5jOjQyOnN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgb2ZmZGV2c19wYXJhbXMgPSB7XG5rZXJuZWwvYnBmL29mZmxvYWQuYy00My1cdC5uZWxlbV9oaW50XHRcdD0gNCxcbi0tXG5rZXJuZWwvYnBmL29mZmxvYWQuYy00OS1cbmtlcm5lbC9icGYvb2ZmbG9hZC5jOjUwOnN0YXRpYyBzdHJ1Y3Qgcmhhc2h0YWJsZSBvZmZkZXZzO1xua2VybmVsL2JwZi9vZmZsb2FkLmMtNTEtXG4tLVxua2VybmVsL2JwZi9vZmZsb2FkLmM9NjI9YnBmX29mZmxvYWRfZmluZF9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbi0tXG5rZXJuZWwvYnBmL29mZmxvYWQuYy02NS1cbmtlcm5lbC9icGYvb2ZmbG9hZC5jOjY2Olx0cmV0dXJuIHJoYXNodGFibGVfbG9va3VwX2Zhc3QoXHUwMDI2b2ZmZGV2cywgXHUwMDI2bmV0ZGV2LCBvZmZkZXZzX3BhcmFtcyk7XG5rZXJuZWwvYnBmL29mZmxvYWQuYy02Ny19XG4tLVxua2VybmVsL2JwZi9vZmZsb2FkLmM9Njk9c3RhdGljIGludCBfX2JwZl9vZmZsb2FkX2Rldl9uZXRkZXZfcmVnaXN0ZXIoc3RydWN0IGJwZl9vZmZsb2FkX2RldiAqb2ZmZGV2LFxuLS1cbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTgzLVxua2VybmVsL2JwZi9vZmZsb2FkLmM6ODQ6XHRlcnIgPSByaGFzaHRhYmxlX2luc2VydF9mYXN0KFx1MDAyNm9mZmRldnMsIFx1MDAyNm9uZGV2LVx1MDAzZWwsIG9mZmRldnNfcGFyYW1zKTtcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTg1LVx0aWYgKGVycikge1xuLS1cbmtlcm5lbC9icGYvb2ZmbG9hZC5jPTEzNj1zdGF0aWMgdm9pZCBfX2JwZl9vZmZsb2FkX2Rldl9uZXRkZXZfdW5yZWdpc3RlcihzdHJ1Y3QgYnBmX29mZmxvYWRfZGV2ICpvZmZkZXYsXG4tLVxua2VybmVsL2JwZi9vZmZsb2FkLmMtMTQ0LVxua2VybmVsL2JwZi9vZmZsb2FkLmM6MTQ1Olx0b25kZXYgPSByaGFzaHRhYmxlX2xvb2t1cF9mYXN0KFx1MDAyNm9mZmRldnMsIFx1MDAyNm5ldGRldiwgb2ZmZGV2c19wYXJhbXMpO1xua2VybmVsL2JwZi9vZmZsb2FkLmMtMTQ2LVx0aWYgKFdBUk5fT04oIW9uZGV2KSlcbi0tXG5rZXJuZWwvYnBmL29mZmxvYWQuYy0xNDgtXG5rZXJuZWwvYnBmL29mZmxvYWQuYzoxNDk6XHRXQVJOX09OKHJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoXHUwMDI2b2ZmZGV2cywgXHUwMDI2b25kZXYtXHUwMDNlbCwgb2ZmZGV2c19wYXJhbXMpKTtcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTE1MC1cbi0tXG5rZXJuZWwvYnBmL29mZmxvYWQuYz0xNzk9c3RhdGljIGludCBfX2JwZl9wcm9nX2Rldl9ib3VuZF9pbml0KHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbi0tXG5rZXJuZWwvYnBmL29mZmxvYWQuYy0yMDEtXHRcdC8qIFdoZW4gb25seSBiaW5kaW5nIHRvIHRoZSBkZXZpY2UsIGV4cGxpY2l0bHlcbmtlcm5lbC9icGYvb2ZmbG9hZC5jOjIwMjpcdFx0ICogY3JlYXRlIGFuIGVudHJ5IGluIHRoZSBoYXNodGFibGUuXG5rZXJuZWwvYnBmL29mZmxvYWQuYy0yMDMtXHRcdCAqL1xuLS1cbmtlcm5lbC9icGYvb2ZmbG9hZC5jPTg2MT1zdGF0aWMgaW50IF9faW5pdCBicGZfb2ZmbG9hZF9pbml0KHZvaWQpXG5rZXJuZWwvYnBmL29mZmxvYWQuYy04NjIte1xua2VybmVsL2JwZi9vZmZsb2FkLmM6ODYzOlx0cmV0dXJuIHJoYXNodGFibGVfaW5pdChcdTAwMjZvZmZkZXZzLCBcdTAwMjZvZmZkZXZzX3BhcmFtcyk7XG5rZXJuZWwvYnBmL29mZmxvYWQuYy04NjQtfVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTEzODI9c3RhdGljIGludCBtYXBfY3JlYXRlX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0ciwgc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNDMzLVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTQzNDpcdC8qIGZpbmQgbWFwIHR5cGUgYW5kIGluaXQgbWFwOiBoYXNodGFibGUgdnMgcmJ0cmVlIHZzIGJsb29tIHZzIC4uLiAqL1xua2VybmVsL2JwZi9zeXNjYWxsLmMtMTQzNS1cdG1hcF90eXBlID0gYXR0ci1cdTAwM2VtYXBfdHlwZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTg6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxMDUKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIGl0OgoKKipDaGVja2luZyBLY29uZmlnIGZvciBCUEZfU1lTQ0FMTCoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW4uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IHRoZSBCUEZfU1lTQ0FMTCBvcHRpb24gY29uZmlndXJlZCBjb3JyZWN0bHkuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGNvbnN1bHQgdGhlIEtjb25maWcgZmlsZXMuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIHJpZ2h0PyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIHRoZSBjb3JlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzIOKAkyBwZXJoYXBzIGluIHRoZSBuZXR3b3JraW5nIG9yIHNlY3VyaXR5IHNlY3Rpb25zLCBkZXBlbmRpbmcgb24gaG93IGl0JiMzOTtzIGltcGxlbWVudGVkLiBJJiMzOTttIGxvb2tpbmcgZm9yIGEgc3RyYWlnaHRmb3J3YXJkIGRlZmluaXRpb24gb3IgYSBjb25kaXRpb25hbCBkZXBlbmRlbmN5IHRoYXQgY291bGQgaW1wYWN0IHRoaXMgc2V0dGluZy4gSXQmIzM5O3MgcG9zc2libGUgSSYjMzk7bGwgbmVlZCB0byB0cmFjZSBkZXBlbmRlbmNpZXMgYmFja3dhcmQgaWYgaXQmIzM5O3Mgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMuIEtub3dpbmcgbXkgd2F5IGFyb3VuZCB0aGUgY29uZmlnIHN5c3RlbSwgSSBleHBlY3QgSSBzaG91bGQgYmUgYWJsZSB0byBxdWlja2x5IGRldGVybWluZSBpZiBpdCYjMzk7cyBlbmFibGVkLCBkaXNhYmxlZCwgb3Igc2V0IHRvIGEgbW9kdWxlLiBJIGFtIGFsc28gcGxhbm5pbmcgdG8gbG9vayBmb3IgYW55IGRlZmF1bHQgc2V0dGluZ3MgYXNzb2NpYXRlZCB3aXRoIGl0LCBvciBtYXliZSBhbnkgYXNzb2NpYXRlZCBtZW51IGVudHJpZXMuIFRoZW4gSSYjMzk7bGwgY2hlY2sgYW5kIG1ha2Ugc3VyZSB0aGF0IHRoaXMgc2V0dGluZyBpcyBhcHByb3ByaWF0ZSBmb3IgdGhpcyBidWlsZCBhcmNoaXRlY3R1cmUsIGFuZCBhbnkgcmVsYXRlZCBkZXBlbmRlbmNpZXMgb3IgY29uZmxpY3RzLiBMZXQmIzM5O3MgZ2V0IHRvIGl0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxODo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTg6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzOTEKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkh1bnRpbmcgZm9yIEJQRl9TWVNDQUxMIGluIHRoZSBDb25maWcqKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciBgQlBGX1NZU0NBTExgLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGFzc3VtaW5nIGl0JiMzOTtzIGxpa2VseSBhIGtlcm5lbCBjb25maWd1cmF0aW9uIHBhcmFtZXRlciwgcHJvYmFibHkgdW5kZXIgb25lIG9mIHRoZSBicm9hZGVyIEJQRiBvciBzZWN1cml0eS1yZWxhdGVkIHNlY3Rpb25zLiBTaW5jZSBpdCYjMzk7cyBhIHN5c2NhbGwtcmVsYXRlZCBmZWF0dXJlLCBJIGNhbiBhbG1vc3QgZ3VhcmFudGVlIGl0cyBleGlzdGVuY2UuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdCYjMzk7cyBkZWZpbmVkIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB1c2UgdGhlIHN0YW5kYXJkIHRvb2xzOyBhIGBncmVwYCB0aHJvdWdoIHRoZSBrZXJuZWwmIzM5O3MgYEtjb25maWdgIGZpbGVzIHNob3VsZCBkbyB0aGUgdHJpY2ssIG1heWJlIHN0YXJ0aW5nIHdpdGggYSB3aWxkY2FyZCBzZWFyY2ggbGlrZSBgS2NvbmZpZyogQlBGX1NZU0NBTExgLiBPciBwZXJoYXBzIEkgd2lsbCB1c2UgJiMzOTtmaW5kJiMzOTsgYW5kICYjMzk7Z3JlcCYjMzk7IGNvbW1hbmRzIHRvIHNlYXJjaC4gRGVwZW5kaW5nIG9uIHRoZSBzaXplIG9mIHRoZSBjb2RlYmFzZSwgSSBtaWdodCBuZWVkIHRvIHJlZmluZSB0aGF0IHNlYXJjaCBpZiBpdCYjMzk7cyB0b28gYnJvYWQgaW5pdGlhbGx5LiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGNvbnRleHQgYXJvdW5kIHRoYXQgb3B0aW9uIOKAkyB3aGF0IG90aGVyIGZlYXR1cmVzIGRvZXMgaXQgZW5hYmxlIG9yIGRpc2FibGU/IEFyZSB0aGVyZSBhbnkgcHJlcmVxdWlzaXRlcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFuZCBtb3JlIGltcG9ydGFudGx5LCB3aGF0JiMzOTtzIHRoZSBkZWZhdWx0IHZhbHVlIGFuZCB3aGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdD8gSSYjMzk7bGwgcHJvYmFibHkgYWxzbyBjaGVjayByZWxldmFudCBgTWFrZWZpbGVgcyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGNvbmZpZyBvcHRpb24gdHJhbnNsYXRlcyBpbnRvIGJ1aWxkIGZsYWdzIGFuZCB1bHRpbWF0ZWx5LCBob3cgaXQgYWZmZWN0cyB0aGUgZ2VuZXJhdGVkIGtlcm5lbCBjb2RlLiBJZGVhbGx5LCBJJiMzOTtsbCBmaW5kIGEgY29uY2lzZSBkZXNjcmlwdGlvbiBvZiB3aGF0IHRoZSBvcHRpb24gYWN0dWFsbHkgKmRvZXMqIGFsb25nIHRoZSB3YXkuIFRoYXQmIzM5O3MgdGhlIHByaW9yaXR5IHJpZ2h0IG5vdywgZmluZGluZyBpdHMgZGVmaW5pdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTg6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yOT1tZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy0zMC1cbmtlcm5lbC9icGYvS2NvbmZpZzozMTpjb25maWcgQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy0zMi1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE4OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODMyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwmIzM5O3MgQlBGIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBzdGFydCB3aXRoIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoZSBCZXJrZWxleSBQYWNrZXQgRmlsdGVyIChCUEYpIHN1YnN5c3RlbS4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYXZhaWxhYmxlIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBiZWZvcmUgSSBnbyBkZWVwZXIuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIGxvb2sgYXQgYGtlcm5lbC9icGYvS2NvbmZpZ2AuIFRoaXMgS2NvbmZpZyBmaWxlIHdpbGwgYmUgdGhlIGNlbnRyYWwgcG9pbnQgdG8gdW5kZXJzdGFuZCBob3cgQlBGIGlzIGludGVncmF0ZWQgaW50byB0aGUga2VybmVsJiMzOTtzIGJ1aWxkIHN5c3RlbSBhbmQgd2hhdCBmZWF0dXJlcyBjYW4gYmUgZW5hYmxlZCBvciBkaXNhYmxlZC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBCUEYgY29udHJvbHMgYXJlIGRlZmluZWQsIGFuZCB3aGVyZSBJIGNhbiBzdGFydCB1bnRhbmdsaW5nIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gZGlmZmVyZW50IEJQRiBmZWF0dXJlcy4gVGhpcyBpcyB0aGUgbG9naWNhbCBmaXJzdCBzdGVwIGZvciBtZSB0byB1bmRlcnN0YW5kIGhvdyBCUEYgZml0cyBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxODo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzA6XHRcbiAgMzE6XHRjb25maWcgQlBGX1NZU0NBTExcbiAgMzI6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4gIDMzOlx0XHRzZWxlY3QgQlBGXG4gIDM0Olx0XHRzZWxlY3QgSVJRX1dPUktcbiAgMzU6XHRcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxuICAzNjpcdFx0c2VsZWN0IFRBU0tTX1RSQUNFX1JDVVxuICAzNzpcdFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcbiAgMzg6XHRcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXG4gIDM5Olx0XHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcbiAgNDA6XHRcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXG4gIDQxOlx0XHRkZWZhdWx0IG5cbiAgNDI6XHRcdGhlbHBcbiAgNDM6XHRcdCAgRW5hYmxlIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIEJQRiBwcm9ncmFtc1xuICA0NDpcdFx0ICBhbmQgbWFwcyB2aWEgZmlsZSBkZXNjcmlwdG9ycy5cbiAgNDU6XHRcbiAgNDY6XHRjb25maWcgQlBGX0pJVFxuICA0NzpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclwmIzM0O1xuICA0ODpcdFx0ZGVwZW5kcyBvbiBCUEZcbiAgNDk6XHRcdGRlcGVuZHMgb24gSEFWRV9DQlBGX0pJVCB8fCBIQVZFX0VCUEZfSklUXG4gIDUwOlx0XHRzZWxlY3QgRVhFQ01FTVxuICA1MTpcdFx0aGVscFxuICA1MjpcdFx0ICBCUEYgcHJvZ3JhbXMgYXJlIG5vcm1hbGx5IGhhbmRsZWQgYnkgYSBCUEYgaW50ZXJwcmV0ZXIuIFRoaXMgb3B0aW9uXG4gIDUzOlx0XHQgIGFsbG93cyB0aGUga2VybmVsIHRvIGdlbmVyYXRlIG5hdGl2ZSBjb2RlIHdoZW4gYSBwcm9ncmFtIGlzIGxvYWRlZFxuICA1NDpcdFx0ICBpbnRvIHRoZSBrZXJuZWwuIFRoaXMgd2lsbCBzaWduaWZpY2FudGx5IHNwZWVkLXVwIHByb2Nlc3Npbmcgb2YgQlBGXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE4OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1Mzk1CgkJCQkJCQlvdXRwdXQ6IDI2NQoJCQkJCQkJdGhvdWdodHM6IDExNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgSGFzaHRhYmxlIEJhdGNoIExvb2t1cC9EZWxldGUgUGF0Y2ggZm9yIEZ1enppbmcqKgoKT2theSwgc28gdGhlIGNvbmZpZyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGlzIGBCUEZfU1lTQ0FMTGAuIExldCYjMzk7cyBkaXZlIGluIGFuZCBzZWUgd2hhdCYjMzk7cyBjaGFuZ2VkLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGtlcm5lbC9icGYvaGFzaHRhYi5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCgpYCBmdW5jdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQmIzM5O3MgdGhlIGNvcmUgaXNzdWU/IEFoLCBpdCBhcHBlYXJzIHRoYXQgd2hlbiBpdGVyYXRpbmcgdGhyb3VnaCBlbXB0eSBidWNrZXRzIGR1cmluZyBhIGJhdGNoIGxvb2t1cC9kZWxldGUsIHRoZSBvcmlnaW5hbCBjb2RlIHVzZWQgdG8ganVzdCBsb29wIHdpdGhvdXQgZHJvcHBpbmcgUkNVLCBlbmFibGluZyBpbnN0cnVtZW50YXRpb24sIG9yIHJlc2NoZWR1bGluZywgcG90ZW50aWFsbHkgbGVhZGluZyB0byBSQ1Ugc3RhbGxzIG9yIHByb2xvbmdlZCBwZXJpb2RzIHdoZXJlIGluc3RydW1lbnRhdGlvbiBpcyBkaXNhYmxlZCwgZXNwZWNpYWxseSBpbiBzcGFyc2UgaGFzaCBtYXBzLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSByZXNjaGVkdWxpbmcgbWVjaGFuaXNtIChgSFRBQl9CQVRDSF9FTVBUWV9SRVNDSEVEIDY0YCkgYWZ0ZXIgYSBjZXJ0YWluIG51bWJlciBvZiBlbXB0eSBidWNrZXRzLCB3aGljaCBzZWVtcyBsaWtlIGEgZ29vZCBpbXByb3ZlbWVudC4gSXQmIzM5O3MgZXNzZW50aWFsbHkgZHJvcHBpbmcgUkNVLCBlbmFibGluZyBpbnN0cnVtZW50YXRpb24sIGNhbGxpbmcgYGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKWAsIGFuZCB0aGVuIHJlc3RhcnRpbmcgdGhlIGxvb3AuIFRoaXMgYWxzbyBjYWxscyBgY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpYCB3aGVuIGFkdmFuY2luZyB0byB0aGUgbmV4dCBub24tZW1wdHkgYnVja2V0LgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcywgaXMgdGhpcyBjb2RlIHJlYWNoYWJsZT8gQWJzb2x1dGVseSEgVGhpcyBjaGFuZ2UgZGlyZWN0bHkgYWZmZWN0cyB0aGUgYGJwZigpYCBzeXNjYWxsJiMzOTtzIG1hcCBiYXRjaCBvcGVyYXRpb25zOiBgaHRhYl9tYXBfbG9va3VwX2JhdGNoYCwgYGh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgYGh0YWJfbHJ1X21hcF9sb29rdXBfYmF0Y2hgLCBgaHRhYl9scnVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgYGh0YWJfcGVyY3B1X21hcF9sb29rdXBfYmF0Y2hgLCBgaHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgYGh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2JhdGNoYCwgYW5kIGBodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCB3aGljaCBhcmUgaW52b2tlZCBmcm9tIHVzZXJzcGFjZSB2aWEgYHN5c19icGYoKWAgd2l0aCBgQlBGX01BUF9MT09LVVBfQkFUQ0hgIGFuZCBgQlBGX01BUF9MT09LVVBfQU5EX0RFTEVURV9CQVRDSGAuCgpUaGUgY29yZSBzdWJzeXN0ZW0gdG91Y2hlZCBoZXJlIGlzIEJQRiBtYXAgaGFuZGxpbmcgYW5kIHN5c2NhbGwgaGFuZGxpbmcuIFRoaXMgaXMgcmlnaHQgaW4gdGhlIHdoZWVsaG91c2UgZm9yIHBvdGVudGlhbCBjb25jdXJyZW5jeSBidWdzLiBJdCYjMzk7cyB0b3RhbGx5IHBsYXVzaWJsZSB0aGF0IHRoaXMgY291bGQgaW50cm9kdWNlIFJDVSBsaWZldGltZSBpc3N1ZXMsIHN0YXRlIGNvcnJ1cHRpb24sIGluZmluaXRlIGxvb3BzLCBvciBldmVuIG1pc3NlZCBlbGVtZW50cyBkdXJpbmcgYmF0Y2ggb3BlcmF0aW9ucyBpZiByZXNjaGVkdWxpbmcgaGFwcGVucyBtaWQtaXRlcmF0aW9uLCBlc3BlY2lhbGx5IHdpdGggY29uY3VycmVudCB1cGRhdGVzL2RlbGV0aW9ucyBvciBsYXJnZSwgc3BhcnNlIGhhc2ggbWFwcy4gR2l2ZW4gdGhlIGNyaXRlcmlhLCB0aGlzIGlzIGEgZGVmaW5pdGUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLgoKTG9va2luZyBhdCB0aGUgcG9zaXRpdmUgY3JpdGVyaWEsIHRoaXMgcGF0Y2ggZGVmaW5pdGl2ZWx5IHRvdWNoZXMgJiMzNDtyZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlJiMzNDsgd2l0aGluIGEgY29yZSBzdWJzeXN0ZW0gKEJQRiBhbmQgc3lzY2FsbCBoYW5kbGluZyksIHNvIHRoZSB2ZXJkaWN0IGlzIGEgcmVzb3VuZGluZyBgdHJ1ZWAgZm9yIGBXb3J0aEZ1enppbmdgLgoKRm9yIGZvY3VzIHN5bWJvbHMsIHdlJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uIGFsbCB0aGUgYmF0Y2ggb3BlcmF0aW9uczogYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgLCBgaHRhYl9tYXBfbG9va3VwX2JhdGNoYCwgYGh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgYGh0YWJfbHJ1X21hcF9sb29rdXBfYmF0Y2hgLCBgaHRhYl9scnVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgYGh0YWJfcGVyY3B1X21hcF9sb29rdXBfYmF0Y2hgLCBgaHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgYGh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2JhdGNoYCwgYW5kIGBodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYC4gV2UgYXJlIGRpcmVjdGx5IHRhcmdldGluZyB0aGUgZnVuY3Rpb25zIG1vZGlmaWVkIGFuZCBhbGwgZW50cnkgcG9pbnRzLgoKVGhlIG5lY2Vzc2FyeSBjb25maWcgaXMganVzdCBgQlBGX1NZU0NBTExgLCBub3RoaW5nIGVsc2UgbmVlZGVkLgoKVGhlcmVmb3JlLCBvdXIgZmluYWwgYXNzZXNzbWVudCBpczoKCiogICBgV29ydGhGdXp6aW5nYDogYHRydWVgCiogICBgRW5hYmxlQ29uZmlnc2A6IGBbJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7XWAKKiAgIGBGb2N1c1N5bWJvbHNgOiBgWyYjMzQ7X19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCYjMzQ7LCAmIzM0O2h0YWJfbWFwX2xvb2t1cF9iYXRjaCYjMzQ7LCAmIzM0O2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoJiMzNDssICYjMzQ7aHRhYl9scnVfbWFwX2xvb2t1cF9iYXRjaCYjMzQ7LCAmIzM0O2h0YWJfbHJ1X21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCYjMzQ7LCAmIzM0O2h0YWJfcGVyY3B1X21hcF9sb29rdXBfYmF0Y2gmIzM0OywgJiMzNDtodGFiX3BlcmNwdV9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gmIzM0OywgJiMzNDtodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9iYXRjaCYjMzQ7LCAmIzM0O2h0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gmIzM0O11gCiogICBSZWFzb25pbmc6IFRoZSBwYXRjaCBtb2RpZmllcyBjcml0aWNhbCBCUEYgYW5kIHN5c2NhbGwgaGFuZGxpbmcgY29kZSByZWxhdGVkIHRvIG1hcCBiYXRjaCBvcGVyYXRpb25zLiBUaGUgcG90ZW50aWFsIGZvciBjb25jdXJyZW5jeSBpc3N1ZXMgaW4gdGhlIGhhbmRsaW5nIG9mIHNwYXJzZSBoYXNoIG1hcHMgd2FycmFudHMgcmlnb3JvdXMgZnV6emluZy4KCk5vdywgbGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTg6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCYjMzQ7LAogICAgJiMzNDtodGFiX21hcF9sb29rdXBfYmF0Y2gmIzM0OywKICAgICYjMzQ7aHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gmIzM0OywKICAgICYjMzQ7aHRhYl9scnVfbWFwX2xvb2t1cF9iYXRjaCYjMzQ7LAogICAgJiMzNDtodGFiX2xydV9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gmIzM0OywKICAgICYjMzQ7aHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9iYXRjaCYjMzQ7LAogICAgJiMzNDtodGFiX3BlcmNwdV9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gmIzM0OywKICAgICYjMzQ7aHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfYmF0Y2gmIzM0OywKICAgICYjMzQ7aHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmF0Y2ggbG9va3VwIGFuZCBkZWxldGUgaXRlcmF0aW9uIGxvZ2ljIGluIGtlcm5lbC9icGYvaGFzaHRhYi5jIChfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKSB0byBpbnRyb2R1Y2UgcGVyaW9kaWMgcmVzY2hlZHVsaW5nIChjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKSBhbmQgUkNVIGNyaXRpY2FsIHNlY3Rpb24gZXhpdHMgd2hlbiBlbmNvdW50ZXJpbmcgY29uc2VjdXRpdmUgZW1wdHkgYnVja2V0cy4gVGhpcyBhbHRlcnMgUkNVIHN5bmNocm9uaXphdGlvbiwgbG9ja2luZywgYW5kIGl0ZXJhdGlvbiBjb250cm9sIGZsb3cgaW4gcmVhY2hhYmxlIEJQRiBtYXAgc3lzY2FsbCBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gmIzM0OywKICAgICYjMzQ7aHRhYl9tYXBfbG9va3VwX2JhdGNoJiMzNDssCiAgICAmIzM0O2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoJiMzNDssCiAgICAmIzM0O2h0YWJfbHJ1X21hcF9sb29rdXBfYmF0Y2gmIzM0OywKICAgICYjMzQ7aHRhYl9scnVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoJiMzNDssCiAgICAmIzM0O2h0YWJfcGVyY3B1X21hcF9sb29rdXBfYmF0Y2gmIzM0OywKICAgICYjMzQ7aHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoJiMzNDssCiAgICAmIzM0O2h0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2JhdGNoJiMzNDssCiAgICAmIzM0O2h0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJhdGNoIGxvb2t1cCBhbmQgZGVsZXRlIGl0ZXJhdGlvbiBsb2dpYyBpbiBrZXJuZWwvYnBmL2hhc2h0YWIuYyAoX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCkgdG8gaW50cm9kdWNlIHBlcmlvZGljIHJlc2NoZWR1bGluZyAoY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcykgYW5kIFJDVSBjcml0aWNhbCBzZWN0aW9uIGV4aXRzIHdoZW4gZW5jb3VudGVyaW5nIGNvbnNlY3V0aXZlIGVtcHR5IGJ1Y2tldHMuIFRoaXMgYWx0ZXJzIFJDVSBzeW5jaHJvbml6YXRpb24sIGxvY2tpbmcsIGFuZCBpdGVyYXRpb24gY29udHJvbCBmbG93IGluIHJlYWNoYWJsZSBCUEYgbWFwIHN5c2NhbGwgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTg6NTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxODo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgcGVyaW9kaWMgdm9sdW50YXJ5IHJlc2NoZWR1bGluZyAoYGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKWApIGFuZCBSQ1UgdW5sb2NraW5nIGFmdGVyIGl0ZXJhdGluZyBvdmVyIGEgYmF0Y2ggb2YgZW1wdHkgYnVja2V0cyAoYEhUQUJfQkFUQ0hfRU1QVFlfUkVTQ0hFRGApIGluIEJQRiBoYXNoIHRhYmxlIGJhdGNoIG9wZXJhdGlvbnMgKGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCkgdG8gcHJldmVudCBzb2Z0IGxvY2t1cHMgYW5kIFJDVSBzdGFsbHMuXG5cblRoZSBuZXdseSBpbnRyb2R1Y2VkIGNvdW50ZXIgdmFyaWFibGUgYGVtcHR5X2NudGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byAwIGFuZCBjb3JyZWN0bHkgcmVzZXQuIFRoZSBwYXRjaCBtb2RpZmllcyBvbmx5IGxvb3AgY29udHJvbCBmbG93IGFuZCBzY2hlZHVsaW5nIGJlaGF2aW9yOyBpdCBkb2VzIG5vdCBjaGFuZ2UgYnVmZmVyIGFsbG9jYXRpb24sIGRhdGEgY29weWluZyBsZW5ndGhzLCBzdHJ1Y3QgZGVmaW5pdGlvbnMsIG9yIG1lbW9yeSBpbml0aWFsaXphdGlvbiBsb2dpYywgbm9yIGRvZXMgaXQgY3JlYXRlIGFueSByaXNrIG9mIHJlYWRpbmcgb3IgbGVha2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDM3MGU2NzRmZGM2NDZiOTZmYjY4M2I1YzY1NGNjOTI3ZDBkMjgxZTIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDE4OjU0OjQ2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuYwppbmRleCA2ZjMzMWM4MDEzMGQ3Li5hNzJkYzViOWYxODRkIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2hhc2h0YWIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2hhc2h0YWIuYwpAQCAtMTc3Miw2ICYjNDM7MTc3MiwxMiBAQCBzdGF0aWMgaW50IGh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLAogCQkJCQkJIGZsYWdzKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogTWF4IGNvbnNlY3V0aXZlIGVtcHR5IGJ1Y2tldHMgdG8gd2FsayBpbiBvbmUgUkNVICYjNDM7CiYjNDM7ICogaW5zdHJ1bWVudGF0aW9uLWRpc2FibGVkIHNlY3Rpb24gYmVmb3JlIHJlc2NoZWR1bGluZy4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIEhUQUJfQkFUQ0hfRU1QVFlfUkVTQ0hFRCA2NAomIzQzOwogc3RhdGljIGludAogX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLAogCQkJCSAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLApAQCAtMTc5Myw2ICYjNDM7MTc5OSw3IEBAIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKIAlib29sIGxvY2tlZCA9IGZhbHNlOwogCXN0cnVjdCBodGFiX2VsZW0gKmw7CiYjNDM7CXUzMiBlbXB0eV9jbnQgPSAwOwogCXN0cnVjdCBidWNrZXQgKmI7CiAJaW50IHJldCA9IDA7CiAKQEAgLTE5NzEsMTIgJiM0MzsxOTc4LDIxIEBAIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwKIAl9CiAKIG5leHRfYmF0Y2g6Ci0JLyogSWYgd2UgYXJlIG5vdCBjb3B5aW5nIGRhdGEsIHdlIGNhbiBnbyB0byBuZXh0IGJ1Y2tldCBhbmQgYXZvaWQKLQkgKiB1bmxvY2tpbmcgdGhlIHJjdS4KJiM0MzsJLyoKJiM0MzsJICogSWYgd2UgYXJlIG5vdCBjb3B5aW5nIGRhdGEsIHdlIGNhbiBnbyB0byBuZXh0IGJ1Y2tldCBhbmQgYXZvaWQKJiM0MzsJICogdW5sb2NraW5nIHRoZSByY3UuIEJvdW5kIHRoZSB3YWxrIHRob3VnaDogYWZ0ZXIKJiM0MzsJICogSFRBQl9CQVRDSF9FTVBUWV9SRVNDSEVEIGNvbnNlY3V0aXZlIGVtcHR5IGJ1Y2tldHMsIGZ1bGx5IGV4aXQKJiM0MzsJICogdGhlIGNyaXRpY2FsIHNlY3Rpb24gKG5vIGxvY2tzIGFyZSBoZWxkIGhlcmUpIGFuZCByZXNjaGVkdWxlLgogCSAqLwogCWlmICghYnVja2V0X2NudCAmYW1wOyZhbXA7IChiYXRjaCAmIzQzOyAxICZsdDsgaHRhYi0mZ3Q7bl9idWNrZXRzKSkgewogCQliYXRjaCYjNDM7JiM0Mzs7Ci0JCWdvdG8gYWdhaW5fbm9jb3B5OwomIzQzOwkJaWYgKCYjNDM7JiM0MztlbXB0eV9jbnQgJmx0OyBIVEFCX0JBVENIX0VNUFRZX1JFU0NIRUQpCiYjNDM7CQkJZ290byBhZ2Fpbl9ub2NvcHk7CiYjNDM7CQllbXB0eV9jbnQgPSAwOwomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CQlicGZfZW5hYmxlX2luc3RydW1lbnRhdGlvbigpOwomIzQzOwkJY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpOwomIzQzOwkJZ290byBhZ2FpbjsKIAl9CiAKIAlyY3VfcmVhZF91bmxvY2soKTsKQEAgLTE5OTAsMTEgJiM0MzsyMDA2LDEzIEBAIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwKIAl9CiAKIAl0b3RhbCAmIzQzOz0gYnVja2V0X2NudDsKJiM0MzsJZW1wdHlfY250ID0gMDsKIAliYXRjaCYjNDM7JiM0Mzs7CiAJaWYgKGJhdGNoICZndDs9IGh0YWItJmd0O25fYnVja2V0cykgewogCQlyZXQgPSAtRU5PRU5UOwogCQlnb3RvIGFmdGVyX2xvb3A7CiAJfQomIzQzOwljb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKCk7CiAJZ290byBhZ2FpbjsKIAogYWZ0ZXJfbG9vcDoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE4OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MzMKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEhhc2h0YWJsZSBDaGFuZ2VzKioKCk9rYXksIHNvIHdlIGhhdmUgYSBwYXRjaCB0aGF0JiMzOTtzIHRvdWNoaW5nIGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCB3aXRoaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYC4gTmF0dXJhbGx5LCBJIHdhbnQgdG8gc2VlIHRoZSAqY29udGV4dCogYXJvdW5kIHRoaXMgZnVuY3Rpb24uIE1vZGlmaWNhdGlvbnMgdG8gYmF0Y2ggb3BlcmF0aW9ucyBjYW4gYmUgdHJpY2t5LCBzbyBhIHRob3JvdWdoIGluc3BlY3Rpb24gaXMgY3J1Y2lhbC4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyBob3cgdGhpcyBgbG9va3VwX2FuZF9kZWxldGVgIGZ1bmN0aW9uIGlzIGJlaGF2aW5nLiBUaGVyZWZvcmUsIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhcm91bmQgbGluZSAxNzcwIHRvIDIwMjAgd2l0aGluIHRoYXQgZmlsZS4gTGV0JiMzOTtzIGZpcmUgdXAgYHJlYWQtZmlsZWAgYW5kIHRha2UgYSBkZWVwIGRpdmUgaW50byB0aGF0IHNlY3Rpb24gb2YgYGhhc2h0YWIuY2AuIEkgbmVlZCB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiB0aGlzIGZ1bmN0aW9uJiMzOTtzIGxvZ2ljIGFuZCBhbnkgcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMgYmVmb3JlIEkgY2FuIHByb3Blcmx5IGV2YWx1YXRlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTg6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hhc2h0YWIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3ODA6XHRcbjE3ODE6XHRzdGF0aWMgaW50XG4xNzgyOlx0X19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuMTc4MzpcdFx0XHRcdFx0ICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4xNzg0Olx0XHRcdFx0XHQgICB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyLFxuMTc4NTpcdFx0XHRcdFx0ICAgYm9vbCBkb19kZWxldGUsIGJvb2wgaXNfbHJ1X21hcCxcbjE3ODY6XHRcdFx0XHRcdCAgIGJvb2wgaXNfcGVyY3B1KVxuMTc4NzpcdHtcbjE3ODg6XHRcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbjE3ODk6XHRcdHZvaWQgKmtleXMgPSBOVUxMLCAqdmFsdWVzID0gTlVMTCwgKnZhbHVlLCAqZHN0X2tleSwgKmRzdF92YWw7XG4xNzkwOlx0XHR2b2lkIF9fdXNlciAqdXZhbHVlcyA9IHU2NF90b191c2VyX3B0cihhdHRyLVx1MDAzZWJhdGNoLnZhbHVlcyk7XG4xNzkxOlx0XHR2b2lkIF9fdXNlciAqdWtleXMgPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cdTAwM2ViYXRjaC5rZXlzKTtcbjE3OTI6XHRcdHZvaWQgX191c2VyICp1YmF0Y2ggPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cdTAwM2ViYXRjaC5pbl9iYXRjaCk7XG4xNzkzOlx0XHR1MzIgYmF0Y2gsIG1heF9jb3VudCwgc2l6ZSwgYnVja2V0X3NpemUsIG1hcF9pZDtcbjE3OTQ6XHRcdHU2NCBlbGVtX21hcF9mbGFncywgbWFwX2ZsYWdzLCBhbGxvd2VkX2ZsYWdzO1xuMTc5NTpcdFx0dTMyIGJ1Y2tldF9jbnQsIHRvdGFsLCBrZXlfc2l6ZSwgdmFsdWVfc2l6ZTtcbjE3OTY6XHRcdHN0cnVjdCBodGFiX2VsZW0gKm5vZGVfdG9fZnJlZSA9IE5VTEw7XG4xNzk3Olx0XHRzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGVhZDtcbjE3OTg6XHRcdHN0cnVjdCBobGlzdF9udWxsc19ub2RlICpuO1xuMTc5OTpcdFx0dW5zaWduZWQgbG9uZyBmbGFncyA9IDA7XG4xODAwOlx0XHRib29sIGxvY2tlZCA9IGZhbHNlO1xuMTgwMTpcdFx0c3RydWN0IGh0YWJfZWxlbSAqbDtcbjE4MDI6XHRcdHUzMiBlbXB0eV9jbnQgPSAwO1xuMTgwMzpcdFx0c3RydWN0IGJ1Y2tldCAqYjtcbjE4MDQ6XHRcdGludCByZXQgPSAwO1xuMTgwNTpcdFxuMTgwNjpcdFx0ZWxlbV9tYXBfZmxhZ3MgPSBhdHRyLVx1MDAzZWJhdGNoLmVsZW1fZmxhZ3M7XG4xODA3Olx0XHRhbGxvd2VkX2ZsYWdzID0gQlBGX0ZfTE9DSztcbjE4MDg6XHRcdGlmICghZG9fZGVsZXRlIFx1MDAyNlx1MDAyNiBpc19wZXJjcHUpXG4xODA5Olx0XHRcdGFsbG93ZWRfZmxhZ3MgfD0gQlBGX0ZfQ1BVO1xuMTgxMDpcdFx0cmV0ID0gYnBmX21hcF9jaGVja19vcF9mbGFncyhtYXAsIGVsZW1fbWFwX2ZsYWdzLCBhbGxvd2VkX2ZsYWdzKTtcbjE4MTE6XHRcdGlmIChyZXQpXG4xODEyOlx0XHRcdHJldHVybiByZXQ7XG4xODEzOlx0XG4xODE0Olx0XHRtYXBfZmxhZ3MgPSBhdHRyLVx1MDAzZWJhdGNoLmZsYWdzO1xuMTgxNTpcdFx0aWYgKG1hcF9mbGFncylcbjE4MTY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xODE3Olx0XG4xODE4Olx0XHRtYXhfY291bnQgPSBhdHRyLVx1MDAzZWJhdGNoLmNvdW50O1xuMTgxOTpcdFx0aWYgKCFtYXhfY291bnQpXG4xODIwOlx0XHRcdHJldHVybiAwO1xuMTgyMTpcdFxuMTgyMjpcdFx0aWYgKHB1dF91c2VyKDAsIFx1MDAyNnVhdHRyLVx1MDAzZWJhdGNoLmNvdW50KSlcbjE4MjM6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4xODI0Olx0XG4xODI1Olx0XHRiYXRjaCA9IDA7XG4xODI2Olx0XHRpZiAodWJhdGNoIFx1MDAyNlx1MDAyNiBjb3B5X2Zyb21fdXNlcihcdTAwMjZiYXRjaCwgdWJhdGNoLCBzaXplb2YoYmF0Y2gpKSlcbjE4Mjc6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4xODI4Olx0XG4xODI5Olx0XHRpZiAoYmF0Y2ggXHUwMDNlPSBodGFiLVx1MDAzZW5fYnVja2V0cylcbjE4MzA6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4xODMxOlx0XG4xODMyOlx0XHRrZXlfc2l6ZSA9IGh0YWItXHUwMDNlbWFwLmtleV9zaXplO1xuMTgzMzpcdFx0dmFsdWVfc2l6ZSA9IGh0YWItXHUwMDNlbWFwLnZhbHVlX3NpemU7XG4xODM0Olx0XHRzaXplID0gcm91bmRfdXAodmFsdWVfc2l6ZSwgOCk7XG4xODM1Olx0XHRpZiAoaXNfcGVyY3B1IFx1MDAyNlx1MDAyNiAhKGVsZW1fbWFwX2ZsYWdzIFx1MDAyNiBCUEZfRl9DUFUpKVxuMTgzNjpcdFx0XHR2YWx1ZV9zaXplID0gc2l6ZSAqIG51bV9wb3NzaWJsZV9jcHVzKCk7XG4xODM3Olx0XHR0b3RhbCA9IDA7XG4xODM4Olx0XHQvKiB3aGlsZSBleHBlcmltZW50aW5nIHdpdGggaGFzaCB0YWJsZXMgd2l0aCBzaXplcyByYW5naW5nIGZyb20gMTAgdG9cbjE4Mzk6XHRcdCAqIDEwMDAsIGl0IHdhcyBvYnNlcnZlZCB0aGF0IGEgYnVja2V0IGNhbiBoYXZlIHVwIHRvIDUgZW50cmllcy5cbjE4NDA6XHRcdCAqL1xuMTg0MTpcdFx0YnVja2V0X3NpemUgPSA1O1xuMTg0MjpcdFxuMTg0MzpcdGFsbG9jOlxuMTg0NDpcdFx0LyogV2UgY2Fubm90IGRvIGNvcHlfZnJvbV91c2VyIG9yIGNvcHlfdG9fdXNlciBpbnNpZGVcbjE4NDU6XHRcdCAqIHRoZSByY3VfcmVhZF9sb2NrLiBBbGxvY2F0ZSBlbm91Z2ggc3BhY2UgaGVyZS5cbjE4NDY6XHRcdCAqL1xuMTg0NzpcdFx0a2V5cyA9IGt2bWFsbG9jX2FycmF5KGtleV9zaXplLCBidWNrZXRfc2l6ZSwgR0ZQX1VTRVIgfCBfX0dGUF9OT1dBUk4pO1xuMTg0ODpcdFx0dmFsdWVzID0ga3ZtYWxsb2NfYXJyYXkodmFsdWVfc2l6ZSwgYnVja2V0X3NpemUsIEdGUF9VU0VSIHwgX19HRlBfTk9XQVJOKTtcbjE4NDk6XHRcdGlmICgha2V5cyB8fCAhdmFsdWVzKSB7XG4xODUwOlx0XHRcdHJldCA9IC1FTk9NRU07XG4xODUxOlx0XHRcdGdvdG8gYWZ0ZXJfbG9vcDtcbjE4NTI6XHRcdH1cbjE4NTM6XHRcbjE4NTQ6XHRhZ2FpbjpcbjE4NTU6XHRcdGJwZl9kaXNhYmxlX2luc3RydW1lbnRhdGlvbigpO1xuMTg1NjpcdFx0cmN1X3JlYWRfbG9jaygpO1xuMTg1NzpcdGFnYWluX25vY29weTpcbjE4NTg6XHRcdGRzdF9rZXkgPSBrZXlzO1xuMTg1OTpcdFx0ZHN0X3ZhbCA9IHZhbHVlcztcbjE4NjA6XHRcdGIgPSBcdTAwMjZodGFiLVx1MDAzZWJ1Y2tldHNbYmF0Y2hdO1xuMTg2MTpcdFx0aGVhZCA9IFx1MDAyNmItXHUwMDNlaGVhZDtcbjE4NjI6XHRcdC8qIGRvIG5vdCBncmFiIHRoZSBsb2NrIHVubGVzcyBuZWVkIGl0IChidWNrZXRfY250IFx1MDAzZSAwKS4gKi9cbjE4NjM6XHRcdGlmIChsb2NrZWQpIHtcbjE4NjQ6XHRcdFx0cmV0ID0gaHRhYl9sb2NrX2J1Y2tldChiLCBcdTAwMjZmbGFncyk7XG4xODY1Olx0XHRcdGlmIChyZXQpIHtcbjE4NjY6XHRcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjE4Njc6XHRcdFx0XHRicGZfZW5hYmxlX2luc3RydW1lbnRhdGlvbigpO1xuMTg2ODpcdFx0XHRcdGdvdG8gYWZ0ZXJfbG9vcDtcbjE4Njk6XHRcdFx0fVxuMTg3MDpcdFx0fVxuMTg3MTpcdFxuMTg3MjpcdFx0YnVja2V0X2NudCA9IDA7XG4xODczOlx0XHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UobCwgbiwgaGVhZCwgaGFzaF9ub2RlKVxuMTg3NDpcdFx0XHRidWNrZXRfY250JiM0MzsmIzQzOztcbjE4NzU6XHRcbjE4NzY6XHRcdGlmIChidWNrZXRfY250IFx1MDAyNlx1MDAyNiAhbG9ja2VkKSB7XG4xODc3Olx0XHRcdGxvY2tlZCA9IHRydWU7XG4xODc4Olx0XHRcdGdvdG8gYWdhaW5fbm9jb3B5O1xuMTg3OTpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxODo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTU3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIEZ1bmN0aW9uJiMzOTtzIFN1YnNlcXVlbnQgTGluZXMqKgoKQWxyaWdodCwgSSYjMzk7dmUgZ290IHRoZSBpbml0aWFsIGxpbmVzIG9mIHRoZSBmdW5jdGlvbiBwYXJzZWQsIGFuZCBJIGhhdmUgYSBzb2xpZCBncmlwIG9uIHRoZSBpbml0aWFsIHNldHVwLiBOb3csIEkgbmVlZCB0byBnZXQgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgaXRzIG92ZXJhbGwgb3BlcmF0aW9uLiBUaW1lIHRvIHpvb20gaW4gYW5kIGRpdmUgaW50byB0aGUgcmVzdCBvZiB0aGUgZnVuY3Rpb24mIzM5O3MgbG9naWMuIFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGlzIGl0IG1hbmlwdWxhdGluZz8gV2hhdCBhcmUgdGhlIGtleSBjb25kaXRpb25hbCBicmFuY2hlcz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHBvdGVudGlhbCBlZGdlIGNhc2VzIHRoYXQganVtcCBvdXQgYXQgbWUgYXMgSSBzY2FuIHRoZSBuZXh0IHNlY3Rpb24/IEkmIzM5O20gbG9va2luZyBmb3IgcGF0dGVybnMsIHJlZHVuZGFuY2llcywgYW5kIGFueSBub24tb2J2aW91cyBvcGVyYXRpb25zIHRoYXQgbWlnaHQgYmUgY3JpdGljYWwgdG8gaXRzIG92ZXJhbGwgZWZmZWN0aXZlbmVzcy4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyBwcmVzZW50LiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIG1lYXQgb2YgdGhlIGZ1bmN0aW9uJiMzOTtzIHB1cnBvc2Ugc2hvdWxkIGJlY29tZSBhcHBhcmVudCwgYW5kIHdoZXJlIEkgY2FuIHN0YXJ0IHRvIG1ha2UgYSBmdWxsIG1lbnRhbCBtb2RlbCBvZiBpdHMgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE4OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9oYXNodGFiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODgwOlx0XG4xODgxOlx0XHRpZiAoYnVja2V0X2NudCBcdTAwM2UgKG1heF9jb3VudCAtIHRvdGFsKSkge1xuMTg4MjpcdFx0XHRpZiAodG90YWwgPT0gMClcbjE4ODM6XHRcdFx0XHRyZXQgPSAtRU5PU1BDO1xuMTg4NDpcdFx0XHQvKiBOb3RlIHRoYXQgc2luY2UgYnVja2V0X2NudCBcdTAwM2UgMCBoZXJlLCBpdCBpcyBpbXBsaWNpdFxuMTg4NTpcdFx0XHQgKiB0aGF0IHRoZSBsb2NrZWQgd2FzIGdyYWJiZWQsIHNvIHJlbGVhc2UgaXQuXG4xODg2Olx0XHRcdCAqL1xuMTg4NzpcdFx0XHRodGFiX3VubG9ja19idWNrZXQoYiwgZmxhZ3MpO1xuMTg4ODpcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjE4ODk6XHRcdFx0YnBmX2VuYWJsZV9pbnN0cnVtZW50YXRpb24oKTtcbjE4OTA6XHRcdFx0Z290byBhZnRlcl9sb29wO1xuMTg5MTpcdFx0fVxuMTg5MjpcdFxuMTg5MzpcdFx0aWYgKGJ1Y2tldF9jbnQgXHUwMDNlIGJ1Y2tldF9zaXplKSB7XG4xODk0Olx0XHRcdGJ1Y2tldF9zaXplID0gYnVja2V0X2NudDtcbjE4OTU6XHRcdFx0LyogTm90ZSB0aGF0IHNpbmNlIGJ1Y2tldF9jbnQgXHUwMDNlIDAgaGVyZSwgaXQgaXMgaW1wbGljaXRcbjE4OTY6XHRcdFx0ICogdGhhdCB0aGUgbG9ja2VkIHdhcyBncmFiYmVkLCBzbyByZWxlYXNlIGl0LlxuMTg5NzpcdFx0XHQgKi9cbjE4OTg6XHRcdFx0aHRhYl91bmxvY2tfYnVja2V0KGIsIGZsYWdzKTtcbjE4OTk6XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4xOTAwOlx0XHRcdGJwZl9lbmFibGVfaW5zdHJ1bWVudGF0aW9uKCk7XG4xOTAxOlx0XHRcdGt2ZnJlZShrZXlzKTtcbjE5MDI6XHRcdFx0a3ZmcmVlKHZhbHVlcyk7XG4xOTAzOlx0XHRcdGdvdG8gYWxsb2M7XG4xOTA0Olx0XHR9XG4xOTA1Olx0XG4xOTA2Olx0XHQvKiBOZXh0IGJsb2NrIGlzIG9ubHkgc2FmZSB0byBydW4gaWYgeW91IGhhdmUgZ3JhYmJlZCB0aGUgbG9jayAqL1xuMTkwNzpcdFx0aWYgKCFsb2NrZWQpXG4xOTA4Olx0XHRcdGdvdG8gbmV4dF9iYXRjaDtcbjE5MDk6XHRcbjE5MTA6XHRcdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3NhZmUobCwgbiwgaGVhZCwgaGFzaF9ub2RlKSB7XG4xOTExOlx0XHRcdG1lbWNweShkc3Rfa2V5LCBsLVx1MDAzZWtleSwga2V5X3NpemUpO1xuMTkxMjpcdFxuMTkxMzpcdFx0XHRpZiAoaXNfcGVyY3B1KSB7XG4xOTE0Olx0XHRcdFx0aW50IG9mZiA9IDAsIGNwdTtcbjE5MTU6XHRcdFx0XHR2b2lkIF9fcGVyY3B1ICpwcHRyO1xuMTkxNjpcdFxuMTkxNzpcdFx0XHRcdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihsLCBtYXAtXHUwMDNla2V5X3NpemUpO1xuMTkxODpcdFx0XHRcdGlmIChlbGVtX21hcF9mbGFncyBcdTAwMjYgQlBGX0ZfQ1BVKSB7XG4xOTE5Olx0XHRcdFx0XHRjcHUgPSBlbGVtX21hcF9mbGFncyBcdTAwM2VcdTAwM2UgMzI7XG4xOTIwOlx0XHRcdFx0XHRjb3B5X21hcF92YWx1ZShcdTAwMjZodGFiLVx1MDAzZW1hcCwgZHN0X3ZhbCwgcGVyX2NwdV9wdHIocHB0ciwgY3B1KSk7XG4xOTIxOlx0XHRcdFx0XHRjaGVja19hbmRfaW5pdF9tYXBfdmFsdWUoXHUwMDI2aHRhYi1cdTAwM2VtYXAsIGRzdF92YWwpO1xuMTkyMjpcdFx0XHRcdH0gZWxzZSB7XG4xOTIzOlx0XHRcdFx0XHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4xOTI0Olx0XHRcdFx0XHRcdGNvcHlfbWFwX3ZhbHVlX2xvbmcoXHUwMDI2aHRhYi1cdTAwM2VtYXAsIGRzdF92YWwgJiM0Mzsgb2ZmLFxuMTkyNTpcdFx0XHRcdFx0XHRcdFx0ICAgIHBlcl9jcHVfcHRyKHBwdHIsIGNwdSkpO1xuMTkyNjpcdFx0XHRcdFx0XHRjaGVja19hbmRfaW5pdF9tYXBfdmFsdWUoXHUwMDI2aHRhYi1cdTAwM2VtYXAsIGRzdF92YWwgJiM0Mzsgb2ZmKTtcbjE5Mjc6XHRcdFx0XHRcdFx0b2ZmICYjNDM7PSBzaXplO1xuMTkyODpcdFx0XHRcdFx0fVxuMTkyOTpcdFx0XHRcdH1cbjE5MzA6XHRcdFx0fSBlbHNlIHtcbjE5MzE6XHRcdFx0XHR2YWx1ZSA9IGh0YWJfZWxlbV92YWx1ZShsLCBrZXlfc2l6ZSk7XG4xOTMyOlx0XHRcdFx0aWYgKGlzX2ZkX2h0YWIoaHRhYikpIHtcbjE5MzM6XHRcdFx0XHRcdHN0cnVjdCBicGZfbWFwICoqaW5uZXJfbWFwID0gdmFsdWU7XG4xOTM0Olx0XG4xOTM1Olx0XHRcdFx0XHQgLyogQWN0dWFsIHZhbHVlIGlzIHRoZSBpZCBvZiB0aGUgaW5uZXIgbWFwICovXG4xOTM2Olx0XHRcdFx0XHRtYXBfaWQgPSBtYXAtXHUwMDNlb3BzLVx1MDAzZW1hcF9mZF9zeXNfbG9va3VwX2VsZW0oKmlubmVyX21hcCk7XG4xOTM3Olx0XHRcdFx0XHR2YWx1ZSA9IFx1MDAyNm1hcF9pZDtcbjE5Mzg6XHRcdFx0XHR9XG4xOTM5Olx0XG4xOTQwOlx0XHRcdFx0aWYgKGVsZW1fbWFwX2ZsYWdzIFx1MDAyNiBCUEZfRl9MT0NLKVxuMTk0MTpcdFx0XHRcdFx0Y29weV9tYXBfdmFsdWVfbG9ja2VkKG1hcCwgZHN0X3ZhbCwgdmFsdWUsXG4xOTQyOlx0XHRcdFx0XHRcdFx0ICAgICAgdHJ1ZSk7XG4xOTQzOlx0XHRcdFx0ZWxzZVxuMTk0NDpcdFx0XHRcdFx0Y29weV9tYXBfdmFsdWUobWFwLCBkc3RfdmFsLCB2YWx1ZSk7XG4xOTQ1Olx0XHRcdFx0LyogWmVyb2luZyBzcGVjaWFsIGZpZWxkcyBpbiB0aGUgdGVtcCBidWZmZXIgKi9cbjE5NDY6XHRcdFx0XHRjaGVja19hbmRfaW5pdF9tYXBfdmFsdWUobWFwLCBkc3RfdmFsKTtcbjE5NDc6XHRcdFx0fVxuMTk0ODpcdFx0XHRpZiAoZG9fZGVsZXRlKSB7XG4xOTQ5Olx0XHRcdFx0aGxpc3RfbnVsbHNfZGVsX3JjdShcdTAwMjZsLVx1MDAzZWhhc2hfbm9kZSk7XG4xOTUwOlx0XG4xOTUxOlx0XHRcdFx0LyogYnBmX2xydV9wdXNoX2ZyZWUoKSB3aWxsIGFjcXVpcmUgbHJ1X2xvY2ssIHdoaWNoXG4xOTUyOlx0XHRcdFx0ICogbWF5IGNhdXNlIGRlYWRsb2NrLiBTZWUgY29tbWVudHMgaW4gZnVuY3Rpb25cbjE5NTM6XHRcdFx0XHQgKiBwcmVhbGxvY19scnVfcG9wKCkuIExldCB1cyBkbyBicGZfbHJ1X3B1c2hfZnJlZSgpXG4xOTU0Olx0XHRcdFx0ICogYWZ0ZXIgcmVsZWFzaW5nIHRoZSBidWNrZXQgbG9jay5cbjE5NTU6XHRcdFx0XHQgKlxuMTk1NjpcdFx0XHRcdCAqIEZvciBodGFiIG9mIG1hcHMsIGh0YWJfcHV0X2ZkX3ZhbHVlKCkgaW5cbjE5NTc6XHRcdFx0XHQgKiBmcmVlX2h0YWJfZWxlbSgpIG1heSBhY3F1aXJlIGEgc3BpbmxvY2sgd2l0aCBidWNrZXRcbjE5NTg6XHRcdFx0XHQgKiBsb2NrIGJlaW5nIGhlbGQgYW5kIGl0IHZpb2xhdGVzIHRoZSBsb2NrIHJ1bGUsIHNvXG4xOTU5Olx0XHRcdFx0ICogaW52b2tlIGZyZWVfaHRhYl9lbGVtKCkgYWZ0ZXIgdW5sb2NrIGFzIHdlbGwuXG4xOTYwOlx0XHRcdFx0ICovXG4xOTYxOlx0XHRcdFx0bC1cdTAwM2ViYXRjaF9mbGluayA9IG5vZGVfdG9fZnJlZTtcbjE5NjI6XHRcdFx0XHRub2RlX3RvX2ZyZWUgPSBsO1xuMTk2MzpcdFx0XHR9XG4xOTY0Olx0XHRcdGRzdF9rZXkgJiM0Mzs9IGtleV9zaXplO1xuMTk2NTpcdFx0XHRkc3RfdmFsICYjNDM7PSB2YWx1ZV9zaXplO1xuMTk2NjpcdFx0fVxuMTk2NzpcdFxuMTk2ODpcdFx0aHRhYl91bmxvY2tfYnVja2V0KGIsIGZsYWdzKTtcbjE5Njk6XHRcdGxvY2tlZCA9IGZhbHNlO1xuMTk3MDpcdFxuMTk3MTpcdFx0d2hpbGUgKG5vZGVfdG9fZnJlZSkge1xuMTk3MjpcdFx0XHRsID0gbm9kZV90b19mcmVlO1xuMTk3MzpcdFx0XHRub2RlX3RvX2ZyZWUgPSBub2RlX3RvX2ZyZWUtXHUwMDNlYmF0Y2hfZmxpbms7XG4xOTc0Olx0XHRcdGlmIChpc19scnVfbWFwKVxuMTk3NTpcdFx0XHRcdGh0YWJfbHJ1X3B1c2hfZnJlZShodGFiLCBsKTtcbjE5NzY6XHRcdFx0ZWxzZVxuMTk3NzpcdFx0XHRcdGZyZWVfaHRhYl9lbGVtKGh0YWIsIGwpO1xuMTk3ODpcdFx0fVxuMTk3OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxODo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzY3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIEkmIzM5O20gcmVhZHkgdG8gZGl2ZSBpbi4gR2l2ZSBtZSB0aGUgdGV4dCEgSSYjMzk7bGwgcHJvY2VzcyBpdCBhbmQgZm9ybXVsYXRlIGEgZmlyc3QtcGVyc29uIHN1bW1hcnkgYXMgaWYgdGhlIHRob3VnaHRzIGRlc2NyaWJlZCAqd2VyZSogbXkgb3duLCBrZWVwaW5nIGluIG1pbmQgbXkgcHJlc3VtZWQgZXhwZXJ0aXNlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCBoZXJlLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBudWFuY2VzLCBzbyBJIHdpbGwgbWFrZSBzdXJlIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGxpbmVzIGxlYWRpbmcgdXAgdG8gMjAzMC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTg6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hhc2h0YWIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTk4MDpcdG5leHRfYmF0Y2g6XG4xOTgxOlx0XHQvKlxuMTk4MjpcdFx0ICogSWYgd2UgYXJlIG5vdCBjb3B5aW5nIGRhdGEsIHdlIGNhbiBnbyB0byBuZXh0IGJ1Y2tldCBhbmQgYXZvaWRcbjE5ODM6XHRcdCAqIHVubG9ja2luZyB0aGUgcmN1LiBCb3VuZCB0aGUgd2FsayB0aG91Z2g6IGFmdGVyXG4xOTg0Olx0XHQgKiBIVEFCX0JBVENIX0VNUFRZX1JFU0NIRUQgY29uc2VjdXRpdmUgZW1wdHkgYnVja2V0cywgZnVsbHkgZXhpdFxuMTk4NTpcdFx0ICogdGhlIGNyaXRpY2FsIHNlY3Rpb24gKG5vIGxvY2tzIGFyZSBoZWxkIGhlcmUpIGFuZCByZXNjaGVkdWxlLlxuMTk4NjpcdFx0ICovXG4xOTg3Olx0XHRpZiAoIWJ1Y2tldF9jbnQgXHUwMDI2XHUwMDI2IChiYXRjaCAmIzQzOyAxIFx1MDAzYyBodGFiLVx1MDAzZW5fYnVja2V0cykpIHtcbjE5ODg6XHRcdFx0YmF0Y2gmIzQzOyYjNDM7O1xuMTk4OTpcdFx0XHRpZiAoJiM0MzsmIzQzO2VtcHR5X2NudCBcdTAwM2MgSFRBQl9CQVRDSF9FTVBUWV9SRVNDSEVEKVxuMTk5MDpcdFx0XHRcdGdvdG8gYWdhaW5fbm9jb3B5O1xuMTk5MTpcdFx0XHRlbXB0eV9jbnQgPSAwO1xuMTk5MjpcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjE5OTM6XHRcdFx0YnBmX2VuYWJsZV9pbnN0cnVtZW50YXRpb24oKTtcbjE5OTQ6XHRcdFx0Y29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpO1xuMTk5NTpcdFx0XHRnb3RvIGFnYWluO1xuMTk5NjpcdFx0fVxuMTk5NzpcdFxuMTk5ODpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4xOTk5Olx0XHRicGZfZW5hYmxlX2luc3RydW1lbnRhdGlvbigpO1xuMjAwMDpcdFx0aWYgKGJ1Y2tldF9jbnQgXHUwMDI2XHUwMDI2IChjb3B5X3RvX3VzZXIodWtleXMgJiM0MzsgdG90YWwgKiBrZXlfc2l6ZSwga2V5cyxcbjIwMDE6XHRcdCAgICBrZXlfc2l6ZSAqIGJ1Y2tldF9jbnQpIHx8XG4yMDAyOlx0XHQgICAgY29weV90b191c2VyKHV2YWx1ZXMgJiM0MzsgdG90YWwgKiB2YWx1ZV9zaXplLCB2YWx1ZXMsXG4yMDAzOlx0XHQgICAgdmFsdWVfc2l6ZSAqIGJ1Y2tldF9jbnQpKSkge1xuMjAwNDpcdFx0XHRyZXQgPSAtRUZBVUxUO1xuMjAwNTpcdFx0XHRnb3RvIGFmdGVyX2xvb3A7XG4yMDA2Olx0XHR9XG4yMDA3Olx0XG4yMDA4Olx0XHR0b3RhbCAmIzQzOz0gYnVja2V0X2NudDtcbjIwMDk6XHRcdGVtcHR5X2NudCA9IDA7XG4yMDEwOlx0XHRiYXRjaCYjNDM7JiM0Mzs7XG4yMDExOlx0XHRpZiAoYmF0Y2ggXHUwMDNlPSBodGFiLVx1MDAzZW5fYnVja2V0cykge1xuMjAxMjpcdFx0XHRyZXQgPSAtRU5PRU5UO1xuMjAxMzpcdFx0XHRnb3RvIGFmdGVyX2xvb3A7XG4yMDE0Olx0XHR9XG4yMDE1Olx0XHRjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKCk7XG4yMDE2Olx0XHRnb3RvIGFnYWluO1xuMjAxNzpcdFxuMjAxODpcdGFmdGVyX2xvb3A6XG4yMDE5Olx0XHRpZiAocmV0ID09IC1FRkFVTFQpXG4yMDIwOlx0XHRcdGdvdG8gb3V0O1xuMjAyMTpcdFxuMjAyMjpcdFx0LyogY29weSAjIG9mIGVudHJpZXMgYW5kIG5leHQgYmF0Y2ggKi9cbjIwMjM6XHRcdHViYXRjaCA9IHU2NF90b191c2VyX3B0cihhdHRyLVx1MDAzZWJhdGNoLm91dF9iYXRjaCk7XG4yMDI0Olx0XHRpZiAoY29weV90b191c2VyKHViYXRjaCwgXHUwMDI2YmF0Y2gsIHNpemVvZihiYXRjaCkpIHx8XG4yMDI1Olx0XHQgICAgcHV0X3VzZXIodG90YWwsIFx1MDAyNnVhdHRyLVx1MDAzZWJhdGNoLmNvdW50KSlcbjIwMjY6XHRcdFx0cmV0ID0gLUVGQVVMVDtcbjIwMjc6XHRcbjIwMjg6XHRvdXQ6XG4yMDI5Olx0XHRrdmZyZWUoa2V5cyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE4OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNTUKCQkJCQkJCW91dHB1dDogMTgwCgkJCQkJCQl0aG91Z2h0czogODY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIEhhc2h0YWIgQmF0Y2ggTG9va3VwL0RlbGV0ZSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBhbmQgc3RhYmlsaXR5IGlzc3VlIHdpdGhpbiB0aGUgQlBGIGhhc2h0YWIgYmF0Y2ggbG9va3VwL2RlbGV0ZSBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IHRoZSBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAgZnVuY3Rpb24uIFRoZSBjb3JlIHByb2JsZW0gd2FzIHRoYXQgd2hlbiBkZWFsaW5nIHdpdGggYSBCUEYgaGFzaHRhYiB3aXRoIGEgaGlnaCBudW1iZXIgb2YgZW1wdHkgYnVja2V0cywgdGhlIGtlcm5lbCBjb3VsZCBnZXQgc3R1Y2sgaW4gYSB0aWdodCBsb29wIHVuZGVyIGByY3VfcmVhZF9sb2NrKClgIGFuZCB3aXRoIGluc3RydW1lbnRhdGlvbiBkaXNhYmxlZC4gVGhpcyBsZWQgdG8gcG90ZW50aWFsIFJDVSBzdGFsbHMsIHNvZnQgbG9ja3Vwcywgb3IgZXZlbiB3YXRjaGRvZyB0aW1lb3V0cy4KClRoZSBmaXggaW50cm9kdWNlcyBhIG5ldyBjb25zdGFudCwgYEhUQUJfQkFUQ0hfRU1QVFlfUkVTQ0hFRGAsIHdoaWNoIGFwcGVhcnMgdG8gYmUgc2V0IHRvIDY0LiAgQW4gYGVtcHR5X2NudGAgdmFyaWFibGUgaXMgYWxzbyBpbnRyb2R1Y2VkIGFzIGEgY291bnRlci4gVGhlIGxvZ2ljIG5vdyB3b3JrcyBsaWtlIHRoaXM6ICBJbnN0ZWFkIG9mIGxvb3BpbmcgZW5kbGVzc2x5IG9uIGVtcHR5IGJ1Y2tldHMsIHRoZSBjb2RlIG5vdyBpbmNyZW1lbnRzIGBlbXB0eV9jbnRgIHdpdGggZWFjaCBlbXB0eSBidWNrZXQgc2tpcHBlZC4gSWYgYGVtcHR5X2NudGAgaXMgbGVzcyB0aGFuIGBIVEFCX0JBVENIX0VNUFRZX1JFU0NIRURgLCBpdCBjb250aW51ZXMgc2tpcHBpbmcuIEJ1dCBpZiBgZW1wdHlfY250YCByZWFjaGVzIG9yIGV4Y2VlZHMgYEhUQUJfQkFUQ0hfRU1QVFlfUkVTQ0hFRGAsIHRoZSBsb29wICpyZXNjaGVkdWxlcyogdXNpbmcgYHJjdV9yZWFkX3VubG9jaygpYCwgYGJwZl9lbmFibGVfaW5zdHJ1bWVudGF0aW9uKClgLCBhbmQgYGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKWAsIGVzc2VudGlhbGx5IHlpZWxkaW5nIGNvbnRyb2wgYmVmb3JlIHJlc3VtaW5nLiBUaGlzIGlzIGFsc28gZG9uZSB3aGVuIGFjdHVhbGx5IHByb2Nlc3NpbmcgZGF0YSAoYGJ1Y2tldF9jbnQgJmd0OyAwYCkuIFRoaXMgcHJldmVudHMgdGhlIHRpZ2h0IGxvb3AuCgpNeSBwcmltYXJ5IGNvbmNlcm4gaXMgYWx3YXlzIGFyb3VuZCBtZW1vcnkgc2FmZXR5LCBzbyBJJiMzOTt2ZSBjYXJlZnVsbHkgZXhhbWluZWQgdGhlIHBhdGNoIGZvciBhbnkgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gIEkmIzM5O3ZlIGNoZWNrZWQ6CgoxLiAgYGVtcHR5X2NudGA6IFByb3Blcmx5IGluaXRpYWxpemVkIHRvIHplcm8gYXQgZnVuY3Rpb24gZW50cnkuCjIuICBCdWZmZXIgc2l6aW5nLCBtZW1vcnkgaW5pdGlhbGl6YXRpb24sIGNvcHkgc2l6ZXMsIGFuZCBkYXRhIGxheW91dC4gIEV2ZXJ5dGhpbmcgbG9va3Mgc291bmQuICBga2V5c2AgYW5kIGB2YWx1ZXNgIGFyZSBjb3JyZWN0bHkgYWxsb2NhdGVkIHZpYSBga3ZtYWxsb2NfYXJyYXlgLCBmaWxsZWQgb25seSB3aGVuIGBidWNrZXRfY250ICZndDsgMGAgKGFuZCBgbG9ja2VkYCBpcyB0cnVlKSwgYW5kIGNvcGllZCB0byB1c2VyIHNwYWNlIHdpdGggdGhlIHJpZ2h0IHNpemUuCjMuICBVbmluaXRpYWxpemVkIHZhcmlhYmxlcywgdXNlci1zcGFjZSBpbmZvLWxlYWtzLCBvciB1bmluaXRpYWxpemVkIHBhZGRpbmc6IFRoZSBgYmF0Y2hgLCBgdG90YWxgIGFuZCBgZW1wdHlfY250YCB2YXJpYWJsZXMgYXJlIGFsbCBwcm9wZXJseSBpbml0aWFsaXplZCBvciB1c2VkLiBgY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpYCBkb2VzbiYjMzk7dCB0b3VjaCBtZW1vcnkgZGlyZWN0bHksIGl0IHNpbXBseSBmYWNpbGl0YXRlcyByZXNjaGVkdWxpbmcuCgpUaGVyZWZvcmUsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBleHBvc2UgYW55IGtlcm5lbCBpbmZvLWxlYWtzLgoKQ29uc2lkZXJpbmcgdGhhdCB0aGUgcGF0Y2ggZm9jdXNlcyBvbiBsb29wIGNvbnRyb2wgZmxvdyBhbmQgdm9sdW50YXJ5IHByZWVtcHRpb24gdG8gcHJldmVudCBSQ1Ugc3RhbGxzL3NvZnQgbG9ja3VwcywgSSBkb24mIzM5O3Qgc2VlIGFueSBjaGFuZ2VzIHRoYXQgd291bGQgdHJpZ2dlciBLQVNBTiBvciBLTVNBTiBpc3N1ZXMuIFRoZXJlIGFyZSBubyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gY2hhbmdlcywgbm8gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBubyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgcmVhZHMsIGFuZCBubyBpbmZvIGxlYWtzLiBUaGlzIHBhdGNoIGlzIGZ1bmRhbWVudGFsbHkgYWRkcmVzc2luZyBsYXRlbmN5IGFuZCBzY2hlZHVsaW5nLCBub3QgbWVtb3J5IGNvcnJ1cHRpb24sIHdoaWNoIGlzIG1vcmUgb2YgYSBsb2NrZGVwIG9yIFJDVSBzdGFsbCBkZXRlY3RvciBjb25jZXJuLiAgU28sIGBOZWVkc0tNU0FOYCBzaG91bGQgZGVmaW5pdGVseSBiZSBgZmFsc2VgLiBJJiMzOTt2ZSBkb3VibGUtY2hlY2tlZCBteSBhbmFseXNpcywgYW5kIEkmIzM5O20gcHJlcGFyZWQgdG8gc2V0IHRoZSByZXN1bHRzIGFjY29yZGluZ2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxODo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHBlcmlvZGljIHZvbHVudGFyeSByZXNjaGVkdWxpbmcgKGBjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKClgKSBhbmQgUkNVIHVubG9ja2luZyBhZnRlciBpdGVyYXRpbmcgb3ZlciBhIGJhdGNoIG9mIGVtcHR5IGJ1Y2tldHMgKGBIVEFCX0JBVENIX0VNUFRZX1JFU0NIRURgKSBpbiBCUEYgaGFzaCB0YWJsZSBiYXRjaCBvcGVyYXRpb25zIChgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGApIHRvIHByZXZlbnQgc29mdCBsb2NrdXBzIGFuZCBSQ1Ugc3RhbGxzLlxuXG5UaGUgbmV3bHkgaW50cm9kdWNlZCBjb3VudGVyIHZhcmlhYmxlIGBlbXB0eV9jbnRgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gMCBhbmQgY29ycmVjdGx5IHJlc2V0LiBUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSBsb29wIGNvbnRyb2wgZmxvdyBhbmQgc2NoZWR1bGluZyBiZWhhdmlvcjsgaXQgZG9lcyBub3QgY2hhbmdlIGJ1ZmZlciBhbGxvY2F0aW9uLCBkYXRhIGNvcHlpbmcgbGVuZ3Rocywgc3RydWN0IGRlZmluaXRpb25zLCBvciBtZW1vcnkgaW5pdGlhbGl6YXRpb24gbG9naWMsIG5vciBkb2VzIGl0IGNyZWF0ZSBhbnkgcmlzayBvZiByZWFkaW5nIG9yIGxlYWtpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHBlcmlvZGljIHZvbHVudGFyeSByZXNjaGVkdWxpbmcgKGBjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKClgKSBhbmQgUkNVIHVubG9ja2luZyBhZnRlciBpdGVyYXRpbmcgb3ZlciBhIGJhdGNoIG9mIGVtcHR5IGJ1Y2tldHMgKGBIVEFCX0JBVENIX0VNUFRZX1JFU0NIRURgKSBpbiBCUEYgaGFzaCB0YWJsZSBiYXRjaCBvcGVyYXRpb25zIChgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGApIHRvIHByZXZlbnQgc29mdCBsb2NrdXBzIGFuZCBSQ1Ugc3RhbGxzLlxuXG5UaGUgbmV3bHkgaW50cm9kdWNlZCBjb3VudGVyIHZhcmlhYmxlIGBlbXB0eV9jbnRgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gMCBhbmQgY29ycmVjdGx5IHJlc2V0LiBUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSBsb29wIGNvbnRyb2wgZmxvdyBhbmQgc2NoZWR1bGluZyBiZWhhdmlvcjsgaXQgZG9lcyBub3QgY2hhbmdlIGJ1ZmZlciBhbGxvY2F0aW9uLCBkYXRhIGNvcHlpbmcgbGVuZ3Rocywgc3RydWN0IGRlZmluaXRpb25zLCBvciBtZW1vcnkgaW5pdGlhbGl6YXRpb24gbG9naWMsIG5vciBkb2VzIGl0IGNyZWF0ZSBhbnkgcmlzayBvZiByZWFkaW5nIG9yIGxlYWtpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE4OjU0OjQ4LjQyMDgzMTM5NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MzI1MDMzMzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaFwiLFxuICAgIFwiaHRhYl9tYXBfbG9va3VwX2JhdGNoXCIsXG4gICAgXCJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaFwiLFxuICAgIFwiaHRhYl9scnVfbWFwX2xvb2t1cF9iYXRjaFwiLFxuICAgIFwiaHRhYl9scnVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoXCIsXG4gICAgXCJodGFiX3BlcmNwdV9tYXBfbG9va3VwX2JhdGNoXCIsXG4gICAgXCJodGFiX3BlcmNwdV9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hcIixcbiAgICBcImh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2JhdGNoXCIsXG4gICAgXCJodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHBlcmlvZGljIHZvbHVudGFyeSByZXNjaGVkdWxpbmcgKGBjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKClgKSBhbmQgUkNVIHVubG9ja2luZyBhZnRlciBpdGVyYXRpbmcgb3ZlciBhIGJhdGNoIG9mIGVtcHR5IGJ1Y2tldHMgKGBIVEFCX0JBVENIX0VNUFRZX1JFU0NIRURgKSBpbiBCUEYgaGFzaCB0YWJsZSBiYXRjaCBvcGVyYXRpb25zIChgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGApIHRvIHByZXZlbnQgc29mdCBsb2NrdXBzIGFuZCBSQ1Ugc3RhbGxzLlxcblxcblRoZSBuZXdseSBpbnRyb2R1Y2VkIGNvdW50ZXIgdmFyaWFibGUgYGVtcHR5X2NudGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byAwIGFuZCBjb3JyZWN0bHkgcmVzZXQuIFRoZSBwYXRjaCBtb2RpZmllcyBvbmx5IGxvb3AgY29udHJvbCBmbG93IGFuZCBzY2hlZHVsaW5nIGJlaGF2aW9yOyBpdCBkb2VzIG5vdCBjaGFuZ2UgYnVmZmVyIGFsbG9jYXRpb24sIGRhdGEgY29weWluZyBsZW5ndGhzLCBzdHJ1Y3QgZGVmaW5pdGlvbnMsIG9yIG1lbW9yeSBpbml0aWFsaXphdGlvbiBsb2dpYywgbm9yIGRvZXMgaXQgY3JlYXRlIGFueSByaXNrIG9mIHJlYWRpbmcgb3IgbGVha2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmF0Y2ggbG9va3VwIGFuZCBkZWxldGUgaXRlcmF0aW9uIGxvZ2ljIGluIGtlcm5lbC9icGYvaGFzaHRhYi5jIChfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKSB0byBpbnRyb2R1Y2UgcGVyaW9kaWMgcmVzY2hlZHVsaW5nIChjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKSBhbmQgUkNVIGNyaXRpY2FsIHNlY3Rpb24gZXhpdHMgd2hlbiBlbmNvdW50ZXJpbmcgY29uc2VjdXRpdmUgZW1wdHkgYnVja2V0cy4gVGhpcyBhbHRlcnMgUkNVIHN5bmNocm9uaXphdGlvbiwgbG9ja2luZywgYW5kIGl0ZXJhdGlvbiBjb250cm9sIGZsb3cgaW4gcmVhY2hhYmxlIEJQRiBtYXAgc3lzY2FsbCBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxODo1NDo0OC40MjA4MzU1ODVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTYyMTQ4MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzNzBlNjc0ZmRjNjQ2Yjk2ZmI2ODNiNWM2NTRjYzkyN2QwZDI4MWUyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDkgMTg6NTQ6NDYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xcbmluZGV4IDZmMzMxYzgwMTMwZDcuLmE3MmRjNWI5ZjE4NGQgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9oYXNodGFiLmNcXG4rKysgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xcbkBAIC0xNzcyLDYgKzE3NzIsMTIgQEAgc3RhdGljIGludCBodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0IGZsYWdzKTtcXG4gfVxcbiBcXG4rLypcXG4rICogTWF4IGNvbnNlY3V0aXZlIGVtcHR5IGJ1Y2tldHMgdG8gd2FsayBpbiBvbmUgUkNVICtcXG4rICogaW5zdHJ1bWVudGF0aW9uLWRpc2FibGVkIHNlY3Rpb24gYmVmb3JlIHJlc2NoZWR1bGluZy5cXG4rICovXFxuKyNkZWZpbmUgSFRBQl9CQVRDSF9FTVBUWV9SRVNDSEVEIDY0XFxuK1xcbiBzdGF0aWMgaW50XFxuIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4gXFx0XFx0XFx0XFx0ICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuQEAgLTE3OTMsNiArMTc5OSw3IEBAIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncyA9IDA7XFxuIFxcdGJvb2wgbG9ja2VkID0gZmFsc2U7XFxuIFxcdHN0cnVjdCBodGFiX2VsZW0gKmw7XFxuK1xcdHUzMiBlbXB0eV9jbnQgPSAwO1xcbiBcXHRzdHJ1Y3QgYnVja2V0ICpiO1xcbiBcXHRpbnQgcmV0ID0gMDtcXG4gXFxuQEAgLTE5NzEsMTIgKzE5NzgsMjEgQEAgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbiBcXHR9XFxuIFxcbiBuZXh0X2JhdGNoOlxcbi1cXHQvKiBJZiB3ZSBhcmUgbm90IGNvcHlpbmcgZGF0YSwgd2UgY2FuIGdvIHRvIG5leHQgYnVja2V0IGFuZCBhdm9pZFxcbi1cXHQgKiB1bmxvY2tpbmcgdGhlIHJjdS5cXG4rXFx0LypcXG4rXFx0ICogSWYgd2UgYXJlIG5vdCBjb3B5aW5nIGRhdGEsIHdlIGNhbiBnbyB0byBuZXh0IGJ1Y2tldCBhbmQgYXZvaWRcXG4rXFx0ICogdW5sb2NraW5nIHRoZSByY3UuIEJvdW5kIHRoZSB3YWxrIHRob3VnaDogYWZ0ZXJcXG4rXFx0ICogSFRBQl9CQVRDSF9FTVBUWV9SRVNDSEVEIGNvbnNlY3V0aXZlIGVtcHR5IGJ1Y2tldHMsIGZ1bGx5IGV4aXRcXG4rXFx0ICogdGhlIGNyaXRpY2FsIHNlY3Rpb24gKG5vIGxvY2tzIGFyZSBoZWxkIGhlcmUpIGFuZCByZXNjaGVkdWxlLlxcbiBcXHQgKi9cXG4gXFx0aWYgKCFidWNrZXRfY250IFxcdTAwMjZcXHUwMDI2IChiYXRjaCArIDEgXFx1MDAzYyBodGFiLVxcdTAwM2VuX2J1Y2tldHMpKSB7XFxuIFxcdFxcdGJhdGNoKys7XFxuLVxcdFxcdGdvdG8gYWdhaW5fbm9jb3B5O1xcbitcXHRcXHRpZiAoKytlbXB0eV9jbnQgXFx1MDAzYyBIVEFCX0JBVENIX0VNUFRZX1JFU0NIRUQpXFxuK1xcdFxcdFxcdGdvdG8gYWdhaW5fbm9jb3B5O1xcbitcXHRcXHRlbXB0eV9jbnQgPSAwO1xcbitcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFx0XFx0YnBmX2VuYWJsZV9pbnN0cnVtZW50YXRpb24oKTtcXG4rXFx0XFx0Y29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpO1xcbitcXHRcXHRnb3RvIGFnYWluO1xcbiBcXHR9XFxuIFxcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG5AQCAtMTk5MCwxMSArMjAwNiwxMyBAQCBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXFxuIFxcdH1cXG4gXFxuIFxcdHRvdGFsICs9IGJ1Y2tldF9jbnQ7XFxuK1xcdGVtcHR5X2NudCA9IDA7XFxuIFxcdGJhdGNoKys7XFxuIFxcdGlmIChiYXRjaCBcXHUwMDNlPSBodGFiLVxcdTAwM2VuX2J1Y2tldHMpIHtcXG4gXFx0XFx0cmV0ID0gLUVOT0VOVDtcXG4gXFx0XFx0Z290byBhZnRlcl9sb29wO1xcbiBcXHR9XFxuK1xcdGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKTtcXG4gXFx0Z290byBhZ2FpbjtcXG4gXFxuIGFmdGVyX2xvb3A6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE4OjU0OjQ5Ljg3NzczMjcwMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzgwNTQ4OTg0MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoXCIsXG4gICAgXCJodGFiX21hcF9sb29rdXBfYmF0Y2hcIixcbiAgICBcImh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoXCIsXG4gICAgXCJodGFiX2xydV9tYXBfbG9va3VwX2JhdGNoXCIsXG4gICAgXCJodGFiX2xydV9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hcIixcbiAgICBcImh0YWJfcGVyY3B1X21hcF9sb29rdXBfYmF0Y2hcIixcbiAgICBcImh0YWJfcGVyY3B1X21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaFwiLFxuICAgIFwiaHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfYmF0Y2hcIixcbiAgICBcImh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmF0Y2ggbG9va3VwIGFuZCBkZWxldGUgaXRlcmF0aW9uIGxvZ2ljIGluIGtlcm5lbC9icGYvaGFzaHRhYi5jIChfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKSB0byBpbnRyb2R1Y2UgcGVyaW9kaWMgcmVzY2hlZHVsaW5nIChjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKSBhbmQgUkNVIGNyaXRpY2FsIHNlY3Rpb24gZXhpdHMgd2hlbiBlbmNvdW50ZXJpbmcgY29uc2VjdXRpdmUgZW1wdHkgYnVja2V0cy4gVGhpcyBhbHRlcnMgUkNVIHN5bmNocm9uaXphdGlvbiwgbG9ja2luZywgYW5kIGl0ZXJhdGlvbiBjb250cm9sIGZsb3cgaW4gcmVhY2hhYmxlIEJQRiBtYXAgc3lzY2FsbCBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDM3MGU2NzRmZGM2NDZiOTZmYjY4M2I1YzY1NGNjOTI3ZDBkMjgxZTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDE4OjU0OjQ2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuaW5kZXggNmYzMzFjODAxMzBkNy4uYTcyZGM1YjlmMTg0ZCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvaGFzaHRhYi5jXG4rKysgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuQEAgLTE3NzIsNiArMTc3MiwxMiBAQCBzdGF0aWMgaW50IGh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuIFx0XHRcdFx0XHRcdCBmbGFncyk7XG4gfVxuIFxuKy8qXG4rICogTWF4IGNvbnNlY3V0aXZlIGVtcHR5IGJ1Y2tldHMgdG8gd2FsayBpbiBvbmUgUkNVICtcbisgKiBpbnN0cnVtZW50YXRpb24tZGlzYWJsZWQgc2VjdGlvbiBiZWZvcmUgcmVzY2hlZHVsaW5nLlxuKyAqL1xuKyNkZWZpbmUgSFRBQl9CQVRDSF9FTVBUWV9SRVNDSEVEIDY0XG4rXG4gc3RhdGljIGludFxuIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcdFx0XHRcdCAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuQEAgLTE3OTMsNiArMTc5OSw3IEBAIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwO1xuIFx0Ym9vbCBsb2NrZWQgPSBmYWxzZTtcbiBcdHN0cnVjdCBodGFiX2VsZW0gKmw7XG4rXHR1MzIgZW1wdHlfY250ID0gMDtcbiBcdHN0cnVjdCBidWNrZXQgKmI7XG4gXHRpbnQgcmV0ID0gMDtcbiBcbkBAIC0xOTcxLDEyICsxOTc4LDIxIEBAIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcdH1cbiBcbiBuZXh0X2JhdGNoOlxuLVx0LyogSWYgd2UgYXJlIG5vdCBjb3B5aW5nIGRhdGEsIHdlIGNhbiBnbyB0byBuZXh0IGJ1Y2tldCBhbmQgYXZvaWRcbi1cdCAqIHVubG9ja2luZyB0aGUgcmN1LlxuK1x0LypcbitcdCAqIElmIHdlIGFyZSBub3QgY29weWluZyBkYXRhLCB3ZSBjYW4gZ28gdG8gbmV4dCBidWNrZXQgYW5kIGF2b2lkXG4rXHQgKiB1bmxvY2tpbmcgdGhlIHJjdS4gQm91bmQgdGhlIHdhbGsgdGhvdWdoOiBhZnRlclxuK1x0ICogSFRBQl9CQVRDSF9FTVBUWV9SRVNDSEVEIGNvbnNlY3V0aXZlIGVtcHR5IGJ1Y2tldHMsIGZ1bGx5IGV4aXRcbitcdCAqIHRoZSBjcml0aWNhbCBzZWN0aW9uIChubyBsb2NrcyBhcmUgaGVsZCBoZXJlKSBhbmQgcmVzY2hlZHVsZS5cbiBcdCAqL1xuIFx0aWYgKCFidWNrZXRfY250IFx1MDAyNlx1MDAyNiAoYmF0Y2ggKyAxIFx1MDAzYyBodGFiLVx1MDAzZW5fYnVja2V0cykpIHtcbiBcdFx0YmF0Y2grKztcbi1cdFx0Z290byBhZ2Fpbl9ub2NvcHk7XG4rXHRcdGlmICgrK2VtcHR5X2NudCBcdTAwM2MgSFRBQl9CQVRDSF9FTVBUWV9SRVNDSEVEKVxuK1x0XHRcdGdvdG8gYWdhaW5fbm9jb3B5O1xuK1x0XHRlbXB0eV9jbnQgPSAwO1xuK1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbitcdFx0YnBmX2VuYWJsZV9pbnN0cnVtZW50YXRpb24oKTtcbitcdFx0Y29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpO1xuK1x0XHRnb3RvIGFnYWluO1xuIFx0fVxuIFxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG5AQCAtMTk5MCwxMSArMjAwNiwxMyBAQCBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXG4gXHR9XG4gXG4gXHR0b3RhbCArPSBidWNrZXRfY250O1xuK1x0ZW1wdHlfY250ID0gMDtcbiBcdGJhdGNoKys7XG4gXHRpZiAoYmF0Y2ggXHUwMDNlPSBodGFiLVx1MDAzZW5fYnVja2V0cykge1xuIFx0XHRyZXQgPSAtRU5PRU5UO1xuIFx0XHRnb3RvIGFmdGVyX2xvb3A7XG4gXHR9XG4rXHRjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKCk7XG4gXHRnb3RvIGFnYWluO1xuIFxuIGFmdGVyX2xvb3A6XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxODo1NDo0OS44Nzc3MzM5MTJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMzg2NjYxNDcwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFdmFsdWF0aW5nIHRoZSBgaGFzaHRhYi5jYCBQYXRjaCBmb3IgU3l6a2FsbGVyIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBhc3Nlc3MgaWYgdGhpcyBtb2RpZmljYXRpb24gdG8gYGtlcm5lbC9icGYvaGFzaHRhYi5jYOKAlHNwZWNpZmljYWxseSBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGDigJRqdXN0aWZpZXMgZnV6emluZyB3aXRoIHN5emthbGxlci4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIGFkZGluZyBwZXJpb2RpYyByZXNjaGVkdWxpbmcgd2l0aGluIHRoZSBCUEYgaGFzaCB0YWJsZSBsb29rdXAgYW5kIGRlbGV0ZSBiYXRjaCBvcGVyYXRpb24sIHdoaWNoIGlzIHRyaWdnZXJlZCBieSB0aGUgYEJQRl9NQVBfTE9PS1VQX0FORF9ERUxFVEVfQkFUQ0hgIHN5c2NhbGwuXG5cbkVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIGBIVEFCX0JBVENIX0VNUFRZX1JFU0NIRURgIGNvdW50ZXIgKGRlZmluZWQgYXMgNjQpLiBJbnNpZGUgdGhlIGxvb3AgbG9naWMsIHdoZW4gd2Fsa2luZyB0aHJvdWdoIGNvbnNlY3V0aXZlIGVtcHR5IGJ1Y2tldHMsIGl0IGFkZHMgYSBjaGVjazogaWYgYGVtcHR5X2NudGAgaXMgbGVzcyB0aGFuIGBIVEFCX0JBVENIX0VNUFRZX1JFU0NIRURgLCBpdCBjb250aW51ZXMgdG8gYGFnYWluX25vY29weWAuIE9uY2UgYGVtcHR5X2NudGAgcmVhY2hlcyBvciBleGNlZWRzIHRoYXQgdGhyZXNob2xkLCB0aGUgY29kZSByZXNldHMgYGVtcHR5X2NudGAsIHVubG9ja3MgdGhlIFJDVSByZWFkIGxvY2ssIGVuYWJsZXMgQlBGIGluc3RydW1lbnRhdGlvbiwgY2FsbHMgYGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKWAsIGFuZCBnb2VzIGJhY2sgdG8gYGFnYWluYCAoaW5zdGVhZCBvZiBgYWdhaW5fbm9jb3B5YCkuIEl0IGFsc28gYWRkcyB0aGUgYGVtcHR5X2NudGAgcmVzZXQgYW5kIHRoZSBgY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpYCBjYWxsIHdpdGhpbiB0aGUgbWFpbiBwcm9jZXNzaW5nIHBhdGguXG5cbk15IGluc3RpbmN0IHRlbGxzIG1lIHRoaXMgaXMgc2lnbmlmaWNhbnQuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgcmVzY2hlZHVsaW5nIHdpdGhpbiBhIGNyaXRpY2FsIEJQRiBvcGVyYXRpb24gaXMgaW50ZXJlc3RpbmcuIEl0IGNvdWxkIHBvdGVudGlhbGx5IHVuY292ZXIgcmFjZSBjb25kaXRpb25zIG9yIHRpbWluZy1yZWxhdGVkIGlzc3VlcyB0aGF0IG1pZ2h0IG5vdCBiZSByZWFkaWx5IGFwcGFyZW50IHVuZGVyIG5vcm1hbCBleGVjdXRpb24sIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIFJDVSBjb250ZXh0LiBUaGlzIGlzIHRoZSBraW5kIG9mIGNoYW5nZSB0aGF0LCB3aGlsZSBzZWVtaW5nbHkgbWlub3IsIGNvdWxkIGludHJvZHVjZSBuZXcgc3RhdGVzIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbSB0aGF0IG1pZ2h0IG5vdCBiZSBmdWxseSBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLlxuXG5Ob3csIHRvIHNvbGlkaWZ5IG15IGFzc2Vzc21lbnQsIEknbSBnb2luZyB0byBsZXZlcmFnZSBteSBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbCBhbmQgdGhlIHRvb2xzIGF0IGhhbmQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB3aWRlciBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgQlBGIHN1YnN5c3RlbS4gSSdsbCB1c2UgZWl0aGVyIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBnZXQgdGhlIGNvbnRleHQgb2YgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbi4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmlzayBhbmQgcmV3YXJkIG9mIGZ1enppbmcgdGhpcyBjaGFuZ2Ugd2l0aCBzeXprYWxsZXIuIFRoZSBxdWVzdGlvbiBub3cgaXM6IGlzIHRoaXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIG9yIGlzIHRoZSBjaGFuZ2UgYWxyZWFkeSB3ZWxsLWNvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdGluZz8gTGV0J3MgZmluZCBvdXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MjEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxODo1NTowMy43NDQzNTEwNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODc1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL2hhc2h0YWIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzkwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTc5MDpcXHRcXHR2b2lkIF9fdXNlciAqdXZhbHVlcyA9IHU2NF90b191c2VyX3B0cihhdHRyLVxcdTAwM2ViYXRjaC52YWx1ZXMpO1xcbjE3OTE6XFx0XFx0dm9pZCBfX3VzZXIgKnVrZXlzID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXFx1MDAzZWJhdGNoLmtleXMpO1xcbjE3OTI6XFx0XFx0dm9pZCBfX3VzZXIgKnViYXRjaCA9IHU2NF90b191c2VyX3B0cihhdHRyLVxcdTAwM2ViYXRjaC5pbl9iYXRjaCk7XFxuMTc5MzpcXHRcXHR1MzIgYmF0Y2gsIG1heF9jb3VudCwgc2l6ZSwgYnVja2V0X3NpemUsIG1hcF9pZDtcXG4xNzk0OlxcdFxcdHU2NCBlbGVtX21hcF9mbGFncywgbWFwX2ZsYWdzLCBhbGxvd2VkX2ZsYWdzO1xcbjE3OTU6XFx0XFx0dTMyIGJ1Y2tldF9jbnQsIHRvdGFsLCBrZXlfc2l6ZSwgdmFsdWVfc2l6ZTtcXG4xNzk2OlxcdFxcdHN0cnVjdCBodGFiX2VsZW0gKm5vZGVfdG9fZnJlZSA9IE5VTEw7XFxuMTc5NzpcXHRcXHRzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGVhZDtcXG4xNzk4OlxcdFxcdHN0cnVjdCBobGlzdF9udWxsc19ub2RlICpuO1xcbjE3OTk6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncyA9IDA7XFxuMTgwMDpcXHRcXHRib29sIGxvY2tlZCA9IGZhbHNlO1xcbjE4MDE6XFx0XFx0c3RydWN0IGh0YWJfZWxlbSAqbDtcXG4xODAyOlxcdFxcdHUzMiBlbXB0eV9jbnQgPSAwO1xcbjE4MDM6XFx0XFx0c3RydWN0IGJ1Y2tldCAqYjtcXG4xODA0OlxcdFxcdGludCByZXQgPSAwO1xcbjE4MDU6XFx0XFxuMTgwNjpcXHRcXHRlbGVtX21hcF9mbGFncyA9IGF0dHItXFx1MDAzZWJhdGNoLmVsZW1fZmxhZ3M7XFxuMTgwNzpcXHRcXHRhbGxvd2VkX2ZsYWdzID0gQlBGX0ZfTE9DSztcXG4xODA4OlxcdFxcdGlmICghZG9fZGVsZXRlIFxcdTAwMjZcXHUwMDI2IGlzX3BlcmNwdSlcXG4xODA5OlxcdFxcdFxcdGFsbG93ZWRfZmxhZ3MgfD0gQlBGX0ZfQ1BVO1xcbjE4MTA6XFx0XFx0cmV0ID0gYnBmX21hcF9jaGVja19vcF9mbGFncyhtYXAsIGVsZW1fbWFwX2ZsYWdzLCBhbGxvd2VkX2ZsYWdzKTtcXG4xODExOlxcdFxcdGlmIChyZXQpXFxuMTgxMjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE4MTM6XFx0XFxuMTgxNDpcXHRcXHRtYXBfZmxhZ3MgPSBhdHRyLVxcdTAwM2ViYXRjaC5mbGFncztcXG4xODE1OlxcdFxcdGlmIChtYXBfZmxhZ3MpXFxuMTgxNjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xODE3OlxcdFxcbjE4MTg6XFx0XFx0bWF4X2NvdW50ID0gYXR0ci1cXHUwMDNlYmF0Y2guY291bnQ7XFxuMTgxOTpcXHRcXHRpZiAoIW1heF9jb3VudClcXG4xODIwOlxcdFxcdFxcdHJldHVybiAwO1xcbjE4MjE6XFx0XFxuMTgyMjpcXHRcXHRpZiAocHV0X3VzZXIoMCwgXFx1MDAyNnVhdHRyLVxcdTAwM2ViYXRjaC5jb3VudCkpXFxuMTgyMzpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4xODI0OlxcdFxcbjE4MjU6XFx0XFx0YmF0Y2ggPSAwO1xcbjE4MjY6XFx0XFx0aWYgKHViYXRjaCBcXHUwMDI2XFx1MDAyNiBjb3B5X2Zyb21fdXNlcihcXHUwMDI2YmF0Y2gsIHViYXRjaCwgc2l6ZW9mKGJhdGNoKSkpXFxuMTgyNzpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4xODI4OlxcdFxcbjE4Mjk6XFx0XFx0aWYgKGJhdGNoIFxcdTAwM2U9IGh0YWItXFx1MDAzZW5fYnVja2V0cylcXG4xODMwOlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbjE4MzE6XFx0XFxuMTgzMjpcXHRcXHRrZXlfc2l6ZSA9IGh0YWItXFx1MDAzZW1hcC5rZXlfc2l6ZTtcXG4xODMzOlxcdFxcdHZhbHVlX3NpemUgPSBodGFiLVxcdTAwM2VtYXAudmFsdWVfc2l6ZTtcXG4xODM0OlxcdFxcdHNpemUgPSByb3VuZF91cCh2YWx1ZV9zaXplLCA4KTtcXG4xODM1OlxcdFxcdGlmIChpc19wZXJjcHUgXFx1MDAyNlxcdTAwMjYgIShlbGVtX21hcF9mbGFncyBcXHUwMDI2IEJQRl9GX0NQVSkpXFxuMTgzNjpcXHRcXHRcXHR2YWx1ZV9zaXplID0gc2l6ZSAqIG51bV9wb3NzaWJsZV9jcHVzKCk7XFxuMTgzNzpcXHRcXHR0b3RhbCA9IDA7XFxuMTgzODpcXHRcXHQvKiB3aGlsZSBleHBlcmltZW50aW5nIHdpdGggaGFzaCB0YWJsZXMgd2l0aCBzaXplcyByYW5naW5nIGZyb20gMTAgdG9cXG4xODM5OlxcdFxcdCAqIDEwMDAsIGl0IHdhcyBvYnNlcnZlZCB0aGF0IGEgYnVja2V0IGNhbiBoYXZlIHVwIHRvIDUgZW50cmllcy5cXG4xODQwOlxcdFxcdCAqL1xcbjE4NDE6XFx0XFx0YnVja2V0X3NpemUgPSA1O1xcbjE4NDI6XFx0XFxuMTg0MzpcXHRhbGxvYzpcXG4xODQ0OlxcdFxcdC8qIFdlIGNhbm5vdCBkbyBjb3B5X2Zyb21fdXNlciBvciBjb3B5X3RvX3VzZXIgaW5zaWRlXFxuMTg0NTpcXHRcXHQgKiB0aGUgcmN1X3JlYWRfbG9jay4gQWxsb2NhdGUgZW5vdWdoIHNwYWNlIGhlcmUuXFxuMTg0NjpcXHRcXHQgKi9cXG4xODQ3OlxcdFxcdGtleXMgPSBrdm1hbGxvY19hcnJheShrZXlfc2l6ZSwgYnVja2V0X3NpemUsIEdGUF9VU0VSIHwgX19HRlBfTk9XQVJOKTtcXG4xODQ4OlxcdFxcdHZhbHVlcyA9IGt2bWFsbG9jX2FycmF5KHZhbHVlX3NpemUsIGJ1Y2tldF9zaXplLCBHRlBfVVNFUiB8IF9fR0ZQX05PV0FSTik7XFxuMTg0OTpcXHRcXHRpZiAoIWtleXMgfHwgIXZhbHVlcykge1xcbjE4NTA6XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4xODUxOlxcdFxcdFxcdGdvdG8gYWZ0ZXJfbG9vcDtcXG4xODUyOlxcdFxcdH1cXG4xODUzOlxcdFxcbjE4NTQ6XFx0YWdhaW46XFxuMTg1NTpcXHRcXHRicGZfZGlzYWJsZV9pbnN0cnVtZW50YXRpb24oKTtcXG4xODU2OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4xODU3OlxcdGFnYWluX25vY29weTpcXG4xODU4OlxcdFxcdGRzdF9rZXkgPSBrZXlzO1xcbjE4NTk6XFx0XFx0ZHN0X3ZhbCA9IHZhbHVlcztcXG4xODYwOlxcdFxcdGIgPSBcXHUwMDI2aHRhYi1cXHUwMDNlYnVja2V0c1tiYXRjaF07XFxuMTg2MTpcXHRcXHRoZWFkID0gXFx1MDAyNmItXFx1MDAzZWhlYWQ7XFxuMTg2MjpcXHRcXHQvKiBkbyBub3QgZ3JhYiB0aGUgbG9jayB1bmxlc3MgbmVlZCBpdCAoYnVja2V0X2NudCBcXHUwMDNlIDApLiAqL1xcbjE4NjM6XFx0XFx0aWYgKGxvY2tlZCkge1xcbjE4NjQ6XFx0XFx0XFx0cmV0ID0gaHRhYl9sb2NrX2J1Y2tldChiLCBcXHUwMDI2ZmxhZ3MpO1xcbjE4NjU6XFx0XFx0XFx0aWYgKHJldCkge1xcbjE4NjY6XFx0XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMTg2NzpcXHRcXHRcXHRcXHRicGZfZW5hYmxlX2luc3RydW1lbnRhdGlvbigpO1xcbjE4Njg6XFx0XFx0XFx0XFx0Z290byBhZnRlcl9sb29wO1xcbjE4Njk6XFx0XFx0XFx0fVxcbjE4NzA6XFx0XFx0fVxcbjE4NzE6XFx0XFxuMTg3MjpcXHRcXHRidWNrZXRfY250ID0gMDtcXG4xODczOlxcdFxcdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3JjdShsLCBuLCBoZWFkLCBoYXNoX25vZGUpXFxuMTg3NDpcXHRcXHRcXHRidWNrZXRfY250Kys7XFxuMTg3NTpcXHRcXG4xODc2OlxcdFxcdGlmIChidWNrZXRfY250IFxcdTAwMjZcXHUwMDI2ICFsb2NrZWQpIHtcXG4xODc3OlxcdFxcdFxcdGxvY2tlZCA9IHRydWU7XFxuMTg3ODpcXHRcXHRcXHRnb3RvIGFnYWluX25vY29weTtcXG4xODc5OlxcdFxcdH1cXG4xODgwOlxcdFxcbjE4ODE6XFx0XFx0aWYgKGJ1Y2tldF9jbnQgXFx1MDAzZSAobWF4X2NvdW50IC0gdG90YWwpKSB7XFxuMTg4MjpcXHRcXHRcXHRpZiAodG90YWwgPT0gMClcXG4xODgzOlxcdFxcdFxcdFxcdHJldCA9IC1FTk9TUEM7XFxuMTg4NDpcXHRcXHRcXHQvKiBOb3RlIHRoYXQgc2luY2UgYnVja2V0X2NudCBcXHUwMDNlIDAgaGVyZSwgaXQgaXMgaW1wbGljaXRcXG4xODg1OlxcdFxcdFxcdCAqIHRoYXQgdGhlIGxvY2tlZCB3YXMgZ3JhYmJlZCwgc28gcmVsZWFzZSBpdC5cXG4xODg2OlxcdFxcdFxcdCAqL1xcbjE4ODc6XFx0XFx0XFx0aHRhYl91bmxvY2tfYnVja2V0KGIsIGZsYWdzKTtcXG4xODg4OlxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjE4ODk6XFx0XFx0XFx0YnBmX2VuYWJsZV9pbnN0cnVtZW50YXRpb24oKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTg6NTU6MDMuNzQ0NTUxNzgxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA0NDQyMDYzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqRGl2aW5nIERlZXBlciBpbnRvIGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCoqXG5cbk9rYXksIHNvIHdlJ3ZlIGlkZW50aWZpZWQgdGhpcyBjb3JlIGZ1bmN0aW9uLCBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAsIGFzIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZS4gTm93LCBsZXQncyBub3QganVzdCBpc29sYXRlIGl0LiBUaGUgcmVhbCBwb3dlciBjb21lcyBmcm9tIHVuZGVyc3RhbmRpbmcgaXRzIGNvbnRleHQuIFdoYXQncyB0aGUgY29tcGxldGUgcGljdHVyZT8gSSBuZWVkIHRvIGFuYWx5emUgaXRzIGludGVybmFsIHdvcmtpbmdzLCBvZiBjb3Vyc2UsIGJ1dCBlcXVhbGx5IGltcG9ydGFudCBpcyB0cmFjaW5nIGl0cyBleGVjdXRpb24gcGF0aC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgKmJlaW5nKiBjYWxsZWQuIFRoYXQgbWVhbnMgc3lzdGVtYXRpY2FsbHkgZXhhbWluaW5nIGV2ZXJ5IG90aGVyIHBhcnQgb2YgdGhlIGNvZGUgdGhhdCAqdXNlcyogYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgLiBCeSBjYXJlZnVsbHkgY29uc2lkZXJpbmcgYWxsIG9mIHRoZSBjYWxsZXJzLCBJIGNhbiBmaWd1cmUgb3V0IHRoZSBiaWcgcGljdHVyZS4gVGhhdCdzIHRoZSBvbmx5IHdheSB0byBlZmZlY3RpdmVseSB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbidzIHRydWUgcHVycG9zZSBhbmQgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODk3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxODo1NTowNS43ODg5NzQ0OTNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9oYXNodGFiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTk3MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTk3MDpcXHRcXG4xOTcxOlxcdFxcdHdoaWxlIChub2RlX3RvX2ZyZWUpIHtcXG4xOTcyOlxcdFxcdFxcdGwgPSBub2RlX3RvX2ZyZWU7XFxuMTk3MzpcXHRcXHRcXHRub2RlX3RvX2ZyZWUgPSBub2RlX3RvX2ZyZWUtXFx1MDAzZWJhdGNoX2ZsaW5rO1xcbjE5NzQ6XFx0XFx0XFx0aWYgKGlzX2xydV9tYXApXFxuMTk3NTpcXHRcXHRcXHRcXHRodGFiX2xydV9wdXNoX2ZyZWUoaHRhYiwgbCk7XFxuMTk3NjpcXHRcXHRcXHRlbHNlXFxuMTk3NzpcXHRcXHRcXHRcXHRmcmVlX2h0YWJfZWxlbShodGFiLCBsKTtcXG4xOTc4OlxcdFxcdH1cXG4xOTc5OlxcdFxcbjE5ODA6XFx0bmV4dF9iYXRjaDpcXG4xOTgxOlxcdFxcdC8qXFxuMTk4MjpcXHRcXHQgKiBJZiB3ZSBhcmUgbm90IGNvcHlpbmcgZGF0YSwgd2UgY2FuIGdvIHRvIG5leHQgYnVja2V0IGFuZCBhdm9pZFxcbjE5ODM6XFx0XFx0ICogdW5sb2NraW5nIHRoZSByY3UuIEJvdW5kIHRoZSB3YWxrIHRob3VnaDogYWZ0ZXJcXG4xOTg0OlxcdFxcdCAqIEhUQUJfQkFUQ0hfRU1QVFlfUkVTQ0hFRCBjb25zZWN1dGl2ZSBlbXB0eSBidWNrZXRzLCBmdWxseSBleGl0XFxuMTk4NTpcXHRcXHQgKiB0aGUgY3JpdGljYWwgc2VjdGlvbiAobm8gbG9ja3MgYXJlIGhlbGQgaGVyZSkgYW5kIHJlc2NoZWR1bGUuXFxuMTk4NjpcXHRcXHQgKi9cXG4xOTg3OlxcdFxcdGlmICghYnVja2V0X2NudCBcXHUwMDI2XFx1MDAyNiAoYmF0Y2ggKyAxIFxcdTAwM2MgaHRhYi1cXHUwMDNlbl9idWNrZXRzKSkge1xcbjE5ODg6XFx0XFx0XFx0YmF0Y2grKztcXG4xOTg5OlxcdFxcdFxcdGlmICgrK2VtcHR5X2NudCBcXHUwMDNjIEhUQUJfQkFUQ0hfRU1QVFlfUkVTQ0hFRClcXG4xOTkwOlxcdFxcdFxcdFxcdGdvdG8gYWdhaW5fbm9jb3B5O1xcbjE5OTE6XFx0XFx0XFx0ZW1wdHlfY250ID0gMDtcXG4xOTkyOlxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjE5OTM6XFx0XFx0XFx0YnBmX2VuYWJsZV9pbnN0cnVtZW50YXRpb24oKTtcXG4xOTk0OlxcdFxcdFxcdGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKTtcXG4xOTk1OlxcdFxcdFxcdGdvdG8gYWdhaW47XFxuMTk5NjpcXHRcXHR9XFxuMTk5NzpcXHRcXG4xOTk4OlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjE5OTk6XFx0XFx0YnBmX2VuYWJsZV9pbnN0cnVtZW50YXRpb24oKTtcXG4yMDAwOlxcdFxcdGlmIChidWNrZXRfY250IFxcdTAwMjZcXHUwMDI2IChjb3B5X3RvX3VzZXIodWtleXMgKyB0b3RhbCAqIGtleV9zaXplLCBrZXlzLFxcbjIwMDE6XFx0XFx0ICAgIGtleV9zaXplICogYnVja2V0X2NudCkgfHxcXG4yMDAyOlxcdFxcdCAgICBjb3B5X3RvX3VzZXIodXZhbHVlcyArIHRvdGFsICogdmFsdWVfc2l6ZSwgdmFsdWVzLFxcbjIwMDM6XFx0XFx0ICAgIHZhbHVlX3NpemUgKiBidWNrZXRfY250KSkpIHtcXG4yMDA0OlxcdFxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuMjAwNTpcXHRcXHRcXHRnb3RvIGFmdGVyX2xvb3A7XFxuMjAwNjpcXHRcXHR9XFxuMjAwNzpcXHRcXG4yMDA4OlxcdFxcdHRvdGFsICs9IGJ1Y2tldF9jbnQ7XFxuMjAwOTpcXHRcXHRlbXB0eV9jbnQgPSAwO1xcbjIwMTA6XFx0XFx0YmF0Y2grKztcXG4yMDExOlxcdFxcdGlmIChiYXRjaCBcXHUwMDNlPSBodGFiLVxcdTAwM2VuX2J1Y2tldHMpIHtcXG4yMDEyOlxcdFxcdFxcdHJldCA9IC1FTk9FTlQ7XFxuMjAxMzpcXHRcXHRcXHRnb3RvIGFmdGVyX2xvb3A7XFxuMjAxNDpcXHRcXHR9XFxuMjAxNTpcXHRcXHRjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKCk7XFxuMjAxNjpcXHRcXHRnb3RvIGFnYWluO1xcbjIwMTc6XFx0XFxuMjAxODpcXHRhZnRlcl9sb29wOlxcbjIwMTk6XFx0XFx0aWYgKHJldCA9PSAtRUZBVUxUKVxcbjIwMjA6XFx0XFx0XFx0Z290byBvdXQ7XFxuMjAyMTpcXHRcXG4yMDIyOlxcdFxcdC8qIGNvcHkgIyBvZiBlbnRyaWVzIGFuZCBuZXh0IGJhdGNoICovXFxuMjAyMzpcXHRcXHR1YmF0Y2ggPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cXHUwMDNlYmF0Y2gub3V0X2JhdGNoKTtcXG4yMDI0OlxcdFxcdGlmIChjb3B5X3RvX3VzZXIodWJhdGNoLCBcXHUwMDI2YmF0Y2gsIHNpemVvZihiYXRjaCkpIHx8XFxuMjAyNTpcXHRcXHQgICAgcHV0X3VzZXIodG90YWwsIFxcdTAwMjZ1YXR0ci1cXHUwMDNlYmF0Y2guY291bnQpKVxcbjIwMjY6XFx0XFx0XFx0cmV0ID0gLUVGQVVMVDtcXG4yMDI3OlxcdFxcbjIwMjg6XFx0b3V0OlxcbjIwMjk6XFx0XFx0a3ZmcmVlKGtleXMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxODo1NTowNS43ODkxMzU1NzNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzg5NTc1NDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBjb2RlLiBIZXJlJ3Mgd2hhdCBJJ20gdGhpbmtpbmcgcmlnaHQgbm93OlxuXG4qKkludmVzdGlnYXRpbmcgQ2FsbGVycyBvZiBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiwgYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgLCBpcyBiZWluZyB1dGlsaXplZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgaXRzIGNhbGxlcnMuIEknbSBnb2luZyB0byBsb29rIGF0IHRoZSBjcm9zcy1yZWZlcmVuY2VzLCB0aGUgcGxhY2VzIGluIHRoZSBjb2RlIHRoYXQgYWN0dWFsbHkgKnVzZSogdGhpcyBmdW5jdGlvbi4gS25vd2luZyB3aGVyZSBpdCdzIGJlaW5nIGNhbGxlZCBmcm9tIHdpbGwgZ2l2ZSBtZSBjb250ZXh0OiB3aGF0J3MgdGhlIGJyb2FkZXIgcHVycG9zZT8gV2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGludm9sdmVkIGFyb3VuZCBpdD8gV2hhdCdzIHRoZSBjb250cm9sIGZsb3cgdGhhdCBsZWFkcyB0byBpdHMgZXhlY3V0aW9uP1xuXG5Fc3NlbnRpYWxseSwgSSB3YW50IHRvIGJ1aWxkIGEgbWVudGFsIHBpY3R1cmUgb2YgaXRzIHJvbGUgd2l0aGluIHRoZSBzeXN0ZW0uIElzIGl0IGludm9sdmVkIGluIGNhY2hlIGludmFsaWRhdGlvbiwgZ2FyYmFnZSBjb2xsZWN0aW9uLCByZXNvdXJjZSBjbGVhbnVwLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGNhbGxpbmcgZnVuY3Rpb25zIHdpbGwgcmV2ZWFsIHRoZSBpbnRlbnQgYW5kIGxvZ2ljLiBJJ20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGtleSBzdWJzeXN0ZW1zIHRoYXQgcmVseSBvbiB0aGlzIFwiYmF0Y2ggbG9va3VwIGFuZCBkZWxldGVcIiBjYXBhYmlsaXR5LiBUaGlzIHVuZGVyc3RhbmRpbmcgd2lsbCBiZSB0aGUgZm91bmRhdGlvbiBmb3IgZGVlcGVyIGFuYWx5c2lzIGFuZCBhbnkgcG90ZW50aWFsIG9wdGltaXphdGlvbnMgb3IgZGVidWdnaW5nIEkgbWlnaHQgbmVlZCB0byBkbyBkb3duIHRoZSBsaW5lLiBMZXQncyBzZWUgd2hhdCB0aGUgY2FsbCBncmFwaCByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDQ3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxODo1NTowOC4xNzg3MTI3MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTExMjIxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvaGFzaHRhYi5jPTE3ODE9c3RhdGljIGludFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjE3ODI6X19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTE3ODMtXFx0XFx0XFx0XFx0ICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMDM1PWh0YWJfcGVyY3B1X21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDM3LXtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMDM4OlxcdHJldHVybiBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcCwgYXR0ciwgdWF0dHIsIGZhbHNlLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwMzktXFx0XFx0XFx0XFx0XFx0XFx0ICBmYWxzZSwgdHJ1ZSk7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMDQzPWh0YWJfcGVyY3B1X21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA0Ni17XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjA0NzpcXHRyZXR1cm4gX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCB0cnVlLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNDgtXFx0XFx0XFx0XFx0XFx0XFx0ICBmYWxzZSwgdHJ1ZSk7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMDUyPWh0YWJfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNTQte1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIwNTU6XFx0cmV0dXJuIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gobWFwLCBhdHRyLCB1YXR0ciwgZmFsc2UsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA1Ni1cXHRcXHRcXHRcXHRcXHRcXHQgIGZhbHNlLCBmYWxzZSk7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMDYwPWh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDYzLXtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMDY0OlxcdHJldHVybiBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcCwgYXR0ciwgdWF0dHIsIHRydWUsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA2NS1cXHRcXHRcXHRcXHRcXHRcXHQgIGZhbHNlLCBmYWxzZSk7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMDY5PWh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDcyLXtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMDczOlxcdHJldHVybiBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcCwgYXR0ciwgdWF0dHIsIGZhbHNlLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNzQtXFx0XFx0XFx0XFx0XFx0XFx0ICB0cnVlLCB0cnVlKTtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIwNzg9aHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA4MS17XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjA4MjpcXHRyZXR1cm4gX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCB0cnVlLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwODMtXFx0XFx0XFx0XFx0XFx0XFx0ICB0cnVlLCB0cnVlKTtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIwODc9aHRhYl9scnVfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwODkte1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIwOTA6XFx0cmV0dXJuIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gobWFwLCBhdHRyLCB1YXR0ciwgZmFsc2UsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA5MS1cXHRcXHRcXHRcXHRcXHRcXHQgIHRydWUsIGZhbHNlKTtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIwOTU9aHRhYl9scnVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDk4LXtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMDk5OlxcdHJldHVybiBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcCwgYXR0ciwgdWF0dHIsIHRydWUsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjEwMC1cXHRcXHRcXHRcXHRcXHRcXHQgIHRydWUsIGZhbHNlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTg6NTU6MDguMjI5ODI4MTgyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgyNDkwMDg3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIEJQRiBIYXNodGFibGUgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGhhc2h0YWJsZSBpcyBpbXBsZW1lbnRlZCBmb3IgQlBGLCBzcGVjaWZpY2FsbHkgYGhhc2h0YWIuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBgTWFrZWZpbGVgIGluIHRoZSBga2VybmVsL2JwZi9gIGRpcmVjdG9yeS4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIGJ1aWxkIHJ1bGVzIGFuZCBkZXBlbmRlbmNpZXMuIFRoZSBgS2NvbmZpZ2AgZmlsZXMgd2lsbCBsaWtlbHkgaG9sZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbWlnaHQgYWZmZWN0IGhvdyBgaGFzaHRhYi5jYCBpcyBjb21waWxlZCBvciBldmVuIGlmIGl0J3MgaW5jbHVkZWQuIEkgd2FudCB0byBzZWUgaWYgdGhlcmUncyBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gb3IgZmVhdHVyZSBmbGFncyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgcmVsYXRlZCB0byB0aGUgaGFzaHRhYmxlIGltcGxlbWVudGF0aW9uLiBUaGF0J3Mgd2hlcmUgSSB3aWxsIHN0YXJ0IG15IGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0NTAsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxODo1NToxMC4wNTQ3MzE4MTlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5ODUxNzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhhc2h0YWJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZT0xMD1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBoYXNodGFiLm8gYXJyYXltYXAubyBwZXJjcHVfZnJlZWxpc3QubyBicGZfbHJ1X2xpc3QubyBscG1fdHJpZS5vIG1hcF9pbl9tYXAubyBibG9vbV9maWx0ZXIub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTItb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBsb2NhbF9zdG9yYWdlLm8gcXVldWVfc3RhY2tfbWFwcy5vIHJpbmdidWYubyBicGZfaW5zbl9hcnJheS5vXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xMS0jaW5jbHVkZSBcXHUwMDNjbGludXgvcmFuZG9tLmhcXHUwMDNlXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MTI6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JoYXNodGFibGUuaFxcdTAwM2VcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xMy0jaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9idGYuaFxcdTAwM2VcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTg2PXN0cnVjdCBicGZfaHRhYiB7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy05Ni1cXHRzdHJ1Y3QgaHRhYl9lbGVtICpfX3BlcmNwdSAqZXh0cmFfZWxlbXM7XFxua2VybmVsL2JwZi9oYXNodGFiLmM6OTc6XFx0LyogbnVtYmVyIG9mIGVsZW1lbnRzIGluIG5vbi1wcmVhbGxvY2F0ZWQgaGFzaHRhYmxlIGFyZSBrZXB0XFxua2VybmVsL2JwZi9oYXNodGFiLmMtOTgtXFx0ICogaW4gZWl0aGVyIHBjb3VudCBvciBjb3VudFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjczPXN0YXRpYyB2b2lkIGh0YWJfZnJlZV9lbGVtcyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTgtICpcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyOTk6ICogSW4gaGFzaHRhYi5jLCB0byBhdm9pZCBkZWFkbG9jaywgbG9jayBhY3F1aXNpdGlvbiBvZlxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwMC0gKiBidWNrZXRfbG9jayBmb2xsb3dlZCBieSBscnVfbG9jayBpcyBub3QgYWxsb3dlZC4gSW4gc3VjaCBjYXNlcyxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI3NzM9c3RydWN0IGJwZl9yaHRhYiB7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjc3NC1cXHRzdHJ1Y3QgYnBmX21hcCBtYXA7XFxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjc3NTpcXHRzdHJ1Y3Qgcmhhc2h0YWJsZSBodDtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzc2LVxcdHN0cnVjdCBicGZfbWVtX2FsbG9jIG1hO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjc4MC1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNzgxOnN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgcmh0YWJfcGFyYW1zID0ge1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI3ODItXFx0LmhlYWRfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHJodGFiX2VsZW0sIG5vZGUpLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9Mjc4Nj1zdGF0aWMgaW5saW5lIHZvaWQgKnJodGFiX2VsZW1fdmFsdWUoc3RydWN0IHJodGFiX2VsZW0gKmwsIHUzMiBrZXlfc2l6ZSlcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI3OTEtLyogU3BlY2lhbGl6ZSBoYXNoIGZ1bmN0aW9uIGFuZCBvYmpjbXAgZm9yIGxvbmcgc2l6ZWQga2V5ICovXFxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjc5MjpzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCByaHRhYl9rZXlfY21wX2xvbmcoc3RydWN0IHJoYXNodGFibGVfY29tcGFyZV9hcmcgKmFyZyxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzkzLVxcdFxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHZvaWQgKnB0cilcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI4MDE9c3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgcmh0YWJfaGFzaGZuX2xvbmcoY29uc3Qgdm9pZCAqZGF0YSwgdTMyIGxlbiwgdTMyIHNlZWQpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yODA3LVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI4MDg6c3RhdGljIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyByaHRhYl9wYXJhbXNfbG9uZyA9IHtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yODA5LVxcdC5oZWFkX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCByaHRhYl9lbGVtLCBub2RlKSxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI4MTY9c3RhdGljIHN0cnVjdCBicGZfbWFwICpyaHRhYl9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjgxNy17XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjgxODpcXHRzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgcGFyYW1zO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI4MTktXFx0c3RydWN0IGJwZl9yaHRhYiAqcmh0YWI7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yODQ1LVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI4NDY6XFx0ZXJyID0gcmhhc2h0YWJsZV9pbml0KFxcdTAwMjZyaHRhYi1cXHUwMDNlaHQsIFxcdTAwMjZwYXJhbXMpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI4NDctXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI4NDktXFxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjg1MDpcXHQvKiBTZXQgbWF4X2VsZW1zIGFmdGVyIHJoYXNodGFibGVfaW5pdCgpIHNpbmNlIGluaXQgemVyb2VzIHRoZSBzdHJ1Y3QgKi9cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yODUxLVxcdHJodGFiLVxcdTAwM2VodC5tYXhfZWxlbXMgPSByaHRhYi1cXHUwMDNlbWFwLm1heF9lbnRyaWVzO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjg1OS1kZXN0cm95X3JodGFiOlxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI4NjA6XFx0cmhhc2h0YWJsZV9kZXN0cm95KFxcdTAwMjZyaHRhYi1cXHUwMDNlaHQpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI4NjEtZnJlZV9yaHRhYjpcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI5MTA9c3RhdGljIHZvaWQgcmh0YWJfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5MTMtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjkxNDpcXHRyaGFzaHRhYmxlX2ZyZWVfYW5kX2Rlc3Ryb3koXFx1MDAyNnJodGFiLVxcdTAwM2VodCwgcmh0YWJfZnJlZV9lbGVtLCByaHRhYik7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjkxNS1cXHRicGZfbWVtX2FsbG9jX2Rlc3Ryb3koXFx1MDAyNnJodGFiLVxcdTAwM2VtYSk7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yOTE5PXN0YXRpYyB2b2lkICpyaHRhYl9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTI2LVxcdGlmIChtYXAtXFx1MDAzZWtleV9zaXplID09IHNpemVvZihsb25nKSlcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyOTI3OlxcdFxcdHJldHVybiByaGFzaHRhYmxlX2xvb2t1cF9saWtlbHkoXFx1MDAyNnJodGFiLVxcdTAwM2VodCwga2V5LCByaHRhYl9wYXJhbXNfbG9uZyk7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjkyOC1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyOTI5OlxcdHJldHVybiByaGFzaHRhYmxlX2xvb2t1cF9saWtlbHkoXFx1MDAyNnJodGFiLVxcdTAwM2VodCwga2V5LCByaHRhYl9wYXJhbXMpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5MzAtfVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9Mjk1MT1zdGF0aWMgaW50IHJodGFiX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfcmh0YWIgKnJodGFiLCBzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbSwgdm9pZCAqY29weSxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5NTctXFx0ICogZGlzYWJsZV9pbnN0cnVtZW50YXRpb24oKSBtaXRpZ2F0ZXMgdGhlIGRlYWRsb2NrIGZvciBwcm9ncmFtcyBydW5uaW5nIGluIE5NSSBjb250ZXh0Llxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5NTg6XFx0ICogcmhhc2h0YWJsZSBsb2NrcyBidWNrZXQgd2l0aCBsb2NhbF9pcnFfc2F2ZSgpLiBPbmx5IE5NSSBwcm9ncmFtcyBtYXkgcmVlbnRlclxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5NTk6XFx0ICogcmhhc2h0YWJsZSBjb2RlLCBicGZfZGlzYWJsZV9pbnN0cnVtZW50YXRpb24oKSBkaXNhYmxlcyBwcm9ncmFtcyBydW5uaW5nIGluIE5NSSwgZXhjZXB0XFxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjk2MDpcXHQgKiByYXcgdHJhY2Vwb2ludHMsIHdoaWNoIHdlIGRvbid0IGhhdmUgaW4gcmhhc2h0YWJsZS5cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTYxLVxcdCAqL1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjk2NC1cXHRpZiAocmh0YWItXFx1MDAzZW1hcC5rZXlfc2l6ZSA9PSBzaXplb2YobG9uZykpXFxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjk2NTpcXHRcXHRlcnIgPSByaGFzaHRhYmxlX3JlbW92ZV9mYXN0KFxcdTAwMjZyaHRhYi1cXHUwMDNlaHQsIFxcdTAwMjZlbGVtLVxcdTAwM2Vub2RlLCByaHRhYl9wYXJhbXNfbG9uZyk7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjk2Ni1cXHRlbHNlXFxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjk2NzpcXHRcXHRlcnIgPSByaGFzaHRhYmxlX3JlbW92ZV9mYXN0KFxcdTAwMjZyaHRhYi1cXHUwMDNlaHQsIFxcdTAwMjZlbGVtLVxcdTAwM2Vub2RlLCByaHRhYl9wYXJhbXMpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5NjgtXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMDQzPXN0YXRpYyBsb25nIHJodGFiX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLCB1NjQgbWFwX2ZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzA4NC1cXHRpZiAobWFwLVxcdTAwM2VrZXlfc2l6ZSA9PSBzaXplb2YobG9uZykpXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzA4NTpcXHRcXHR0bXAgPSByaGFzaHRhYmxlX2xvb2t1cF9nZXRfaW5zZXJ0X2Zhc3QoXFx1MDAyNnJodGFiLVxcdTAwM2VodCwgXFx1MDAyNmVsZW0tXFx1MDAzZW5vZGUsIHJodGFiX3BhcmFtc19sb25nKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMDg2LVxcdGVsc2VcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMDg3OlxcdFxcdHRtcCA9IHJoYXNodGFibGVfbG9va3VwX2dldF9pbnNlcnRfZmFzdChcXHUwMDI2cmh0YWItXFx1MDAzZWh0LCBcXHUwMDI2ZWxlbS1cXHUwMDNlbm9kZSwgcmh0YWJfcGFyYW1zKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMDg4LVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzEyOT1zdGF0aWMgdm9pZCByaHRhYl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKHN0cnVjdCBicGZfbWFwICptYXApXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTMxLVxcdHN0cnVjdCBicGZfcmh0YWIgKnJodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9yaHRhYiwgbWFwKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMTMyOlxcdHN0cnVjdCByaGFzaHRhYmxlX2l0ZXIgaXRlcjtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTMzLVxcdHN0cnVjdCByaHRhYl9lbGVtICplbGVtO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzE0NS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMTQ2OlxcdHJoYXNodGFibGVfd2Fsa19lbnRlcihcXHUwMDI2cmh0YWItXFx1MDAzZWh0LCBcXHUwMDI2aXRlcik7XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzE0NzpcXHRyaGFzaHRhYmxlX3dhbGtfc3RhcnQoXFx1MDAyNml0ZXIpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxNDgtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzE0OTpcXHR3aGlsZSAoKGVsZW0gPSByaGFzaHRhYmxlX3dhbGtfbmV4dChcXHUwMDI2aXRlcikpKSB7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzE1MC1cXHRcXHRpZiAoSVNfRVJSKGVsZW0pKSB7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTU4LVxcdFxcdGlmIChuZWVkX3Jlc2NoZWQoKSkgeyAvKiBBdm9pZCBzdGFsbHMgb24gbGFyZ2UgbWFwcyAqL1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxNTk6XFx0XFx0XFx0cmhhc2h0YWJsZV93YWxrX3N0b3AoXFx1MDAyNml0ZXIpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxNjAtXFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzE2MTpcXHRcXHRcXHRyaGFzaHRhYmxlX3dhbGtfc3RhcnQoXFx1MDAyNml0ZXIpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxNjItXFx0XFx0fVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzE2NC1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMTY1OlxcdHJoYXNodGFibGVfd2Fsa19zdG9wKFxcdTAwMjZpdGVyKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMTY2OlxcdHJoYXNodGFibGVfd2Fsa19leGl0KFxcdTAwMjZpdGVyKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTY3LVxcdFdSSVRFX09OQ0Uocmh0YWItXFx1MDAzZWZyZWVpbmdfaW50ZXJuYWwsIGZhbHNlKTtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMxNzA9c3RhdGljIGludCByaHRhYl9tYXBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqbmV4dF9rZXkpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTc1LVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxNzY6XFx0ZWxlbSA9IHJoYXNodGFibGVfbmV4dF9rZXkoXFx1MDAyNnJodGFiLVxcdTAwM2VodCwga2V5KTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTc3LVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzE3OS1cXHRpZiAoUFRSX0VSUihlbGVtKSA9PSAtRU5PRU5UKVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxODA6XFx0XFx0ZWxlbSA9IHJoYXNodGFibGVfbmV4dF9rZXkoXFx1MDAyNnJodGFiLVxcdTAwM2VodCwgTlVMTCk7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzE4MS1cXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMxOTE9c3RhdGljIHZvaWQgcmh0YWJfbWFwX3NlcV9zaG93X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTk0LVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxOTU6XFx0LyogR3VhcmFudGVlIHRoYXQgaGFzaHRhYiB2YWx1ZSBpcyBub3QgZnJlZWQgKi9cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTk2LVxcdGd1YXJkKHJjdSkoKTtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMyMDg9c3RhdGljIGxvbmcgYnBmX2VhY2hfcmhhc2hfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBicGZfY2FsbGJhY2tfdCBjYWxsYmFja19mbixcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMyMjMtXFx0LypcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMjI0OlxcdCAqIEJlc3QtZWZmb3J0IGl0ZXJhdGlvbjogaWYgcmhhc2h0YWJsZSBpcyBjb25jdXJyZW50bHkgcmVzaXplZCBvclxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMyMjUtXFx0ICogZWxlbWVudHMgYXJlIGRlbGV0ZWQvaW5zZXJ0ZWQsIHRoZXJlIG1heSBiZSBtaXNzZWQgb3IgZHVwbGljYXRlXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMjI3LVxcdCAqL1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMyMjg6XFx0d2hpbGUgKChlbGVtID0gcmhhc2h0YWJsZV9uZXh0X2tleShcXHUwMDI2cmh0YWItXFx1MDAzZWh0LCBwcmV2X2tleSkpKSB7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzIyOS1cXHRcXHRpZiAoSVNfRVJSKGVsZW0pKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzI0Nj1zdGF0aWMgdTY0IHJodGFiX21hcF9tZW1fdXNhZ2UoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcClcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMyNTAtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzI1MTpcXHQvKiBFeGNsdWRlcyByaGFzaHRhYmxlIGJ1Y2tldCBvdmVyaGVhZCAofiBuZWxlbXMgKiBzaXplb2Yodm9pZCAqKSBhdCA3NSUgbG9hZCkuICovXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzI1Mi1cXHRudW1fZW50cmllcyA9IGF0b21pY19yZWFkKFxcdTAwMjZyaHRhYi1cXHUwMDNlaHQubmVsZW1zKTtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMyNTY9c3RhdGljIGludCBfX3JodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzMzMC1cXHR9IGVsc2Uge1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMzMzE6XFx0XFx0ZWxlbSA9IHJoYXNodGFibGVfbmV4dF9rZXkoXFx1MDAyNnJodGFiLVxcdTAwM2VodCwgTlVMTCk7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzMzMi1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzQxLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMzNDI6XFx0XFx0ZWxlbSA9IHJoYXNodGFibGVfbmV4dF9rZXkoXFx1MDAyNnJodGFiLVxcdTAwM2VodCwgZHN0X2tleSk7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzM0My1cXHRcXHRkc3Rfa2V5ICs9IGtleV9zaXplO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzQwND1zdHJ1Y3QgYnBmX2l0ZXJfc2VxX3JoYXNoX21hcF9pbmZvIHtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM0MDYtXFx0c3RydWN0IGJwZl9yaHRhYiAqcmh0YWI7XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzQwNzpcXHRzdHJ1Y3Qgcmhhc2h0YWJsZV9pdGVyIGl0ZXI7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzQwOC19O1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzQxMD1zdGF0aWMgdm9pZCAqYnBmX3JoYXNoX21hcF9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzQxNS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNDE2OlxcdHJoYXNodGFibGVfd2Fsa19zdGFydChcXHUwMDI2aW5mby1cXHUwMDNlaXRlcik7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzQxNy1cXHQvKlxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzQyMi1cXHRkbyB7XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzQyMzpcXHRcXHRlbGVtID0gcmhhc2h0YWJsZV93YWxrX3BlZWsoXFx1MDAyNmluZm8tXFx1MDAzZWl0ZXIpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM0MjQtXFx0fSB3aGlsZSAoUFRSX0VSUihlbGVtKSA9PSAtRUFHQUlOKTtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTM0MzQ9c3RhdGljIHZvaWQgKmJwZl9yaGFzaF9tYXBfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzQ0Mi1cXHRkbyB7XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzQ0MzpcXHRcXHRlbGVtID0gcmhhc2h0YWJsZV93YWxrX25leHQoXFx1MDAyNmluZm8tXFx1MDAzZWl0ZXIpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM0NDQtXFx0fSB3aGlsZSAoUFRSX0VSUihlbGVtKSA9PSAtRUFHQUlOKTtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTM0ODA9c3RhdGljIHZvaWQgYnBmX3JoYXNoX21hcF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM0ODctXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzQ4ODpcXHRyaGFzaHRhYmxlX3dhbGtfc3RvcChcXHUwMDI2aW5mby1cXHUwMDNlaXRlcik7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzQ4OS19XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zNDkxPXN0YXRpYyBpbnQgYnBmX2l0ZXJfaW5pdF9yaGFzaF9tYXAodm9pZCAqcHJpdl9kYXRhLCBzdHJ1Y3QgYnBmX2l0ZXJfYXV4X2luZm8gKmF1eClcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM0OTgtXFx0aW5mby1cXHUwMDNlcmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3JodGFiLCBtYXApO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjM0OTk6XFx0cmhhc2h0YWJsZV93YWxrX2VudGVyKFxcdTAwMjZpbmZvLVxcdTAwM2VyaHRhYi1cXHUwMDNlaHQsIFxcdTAwMjZpbmZvLVxcdTAwM2VpdGVyKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTAwLVxcdHJldHVybiAwO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzUwMz1zdGF0aWMgdm9pZCBicGZfaXRlcl9maW5pX3JoYXNoX21hcCh2b2lkICpwcml2X2RhdGEpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTA2LVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjM1MDc6XFx0cmhhc2h0YWJsZV93YWxrX2V4aXQoXFx1MDAyNmluZm8tXFx1MDAzZWl0ZXIpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM1MDgtXFx0YnBmX21hcF9wdXRfd2l0aF91cmVmKGluZm8tXFx1MDAzZW1hcCk7XFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNS0jaW5jbHVkZSBcXHUwMDNjbGludXgvYnRmLmhcXHUwMDNlXFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjY6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2hhc2h0YWJsZS5oXFx1MDAzZVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy03LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9qaGFzaC5oXFx1MDAzZVxcbi0tXFxua2VybmVsL2JwZi9vZmZsb2FkLmMtMTQtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Byb2NfbnMuaFxcdTAwM2VcXG5rZXJuZWwvYnBmL29mZmxvYWQuYzoxNTojaW5jbHVkZSBcXHUwMDNjbGludXgvcmhhc2h0YWJsZS5oXFx1MDAzZVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTE2LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFxcdTAwM2VcXG4tLVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jPTMzPXN0cnVjdCBicGZfb2ZmbG9hZF9uZXRkZXYge1xcbi0tXFxua2VybmVsL2JwZi9vZmZsb2FkLmMtNDEtXFxua2VybmVsL2JwZi9vZmZsb2FkLmM6NDI6c3RhdGljIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyBvZmZkZXZzX3BhcmFtcyA9IHtcXG5rZXJuZWwvYnBmL29mZmxvYWQuYy00My1cXHQubmVsZW1faGludFxcdFxcdD0gNCxcXG4tLVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTQ5LVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jOjUwOnN0YXRpYyBzdHJ1Y3Qgcmhhc2h0YWJsZSBvZmZkZXZzO1xcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTUxLVxcbi0tXFxua2VybmVsL2JwZi9vZmZsb2FkLmM9NjI9YnBmX29mZmxvYWRfZmluZF9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4tLVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTY1LVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jOjY2OlxcdHJldHVybiByaGFzaHRhYmxlX2xvb2t1cF9mYXN0KFxcdTAwMjZvZmZkZXZzLCBcXHUwMDI2bmV0ZGV2LCBvZmZkZXZzX3BhcmFtcyk7XFxua2VybmVsL2JwZi9vZmZsb2FkLmMtNjctfVxcbi0tXFxua2VybmVsL2JwZi9vZmZsb2FkLmM9Njk9c3RhdGljIGludCBfX2JwZl9vZmZsb2FkX2Rldl9uZXRkZXZfcmVnaXN0ZXIoc3RydWN0IGJwZl9vZmZsb2FkX2RldiAqb2ZmZGV2LFxcbi0tXFxua2VybmVsL2JwZi9vZmZsb2FkLmMtODMtXFxua2VybmVsL2JwZi9vZmZsb2FkLmM6ODQ6XFx0ZXJyID0gcmhhc2h0YWJsZV9pbnNlcnRfZmFzdChcXHUwMDI2b2ZmZGV2cywgXFx1MDAyNm9uZGV2LVxcdTAwM2VsLCBvZmZkZXZzX3BhcmFtcyk7XFxua2VybmVsL2JwZi9vZmZsb2FkLmMtODUtXFx0aWYgKGVycikge1xcbi0tXFxua2VybmVsL2JwZi9vZmZsb2FkLmM9MTM2PXN0YXRpYyB2b2lkIF9fYnBmX29mZmxvYWRfZGV2X25ldGRldl91bnJlZ2lzdGVyKHN0cnVjdCBicGZfb2ZmbG9hZF9kZXYgKm9mZmRldixcXG4tLVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTE0NC1cXG5rZXJuZWwvYnBmL29mZmxvYWQuYzoxNDU6XFx0b25kZXYgPSByaGFzaHRhYmxlX2xvb2t1cF9mYXN0KFxcdTAwMjZvZmZkZXZzLCBcXHUwMDI2bmV0ZGV2LCBvZmZkZXZzX3BhcmFtcyk7XFxua2VybmVsL2JwZi9vZmZsb2FkLmMtMTQ2LVxcdGlmIChXQVJOX09OKCFvbmRldikpXFxuLS1cXG5rZXJuZWwvYnBmL29mZmxvYWQuYy0xNDgtXFxua2VybmVsL2JwZi9vZmZsb2FkLmM6MTQ5OlxcdFdBUk5fT04ocmhhc2h0YWJsZV9yZW1vdmVfZmFzdChcXHUwMDI2b2ZmZGV2cywgXFx1MDAyNm9uZGV2LVxcdTAwM2VsLCBvZmZkZXZzX3BhcmFtcykpO1xcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTE1MC1cXG4tLVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jPTE3OT1zdGF0aWMgaW50IF9fYnBmX3Byb2dfZGV2X2JvdW5kX2luaXQoc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbi0tXFxua2VybmVsL2JwZi9vZmZsb2FkLmMtMjAxLVxcdFxcdC8qIFdoZW4gb25seSBiaW5kaW5nIHRvIHRoZSBkZXZpY2UsIGV4cGxpY2l0bHlcXG5rZXJuZWwvYnBmL29mZmxvYWQuYzoyMDI6XFx0XFx0ICogY3JlYXRlIGFuIGVudHJ5IGluIHRoZSBoYXNodGFibGUuXFxua2VybmVsL2JwZi9vZmZsb2FkLmMtMjAzLVxcdFxcdCAqL1xcbi0tXFxua2VybmVsL2JwZi9vZmZsb2FkLmM9ODYxPXN0YXRpYyBpbnQgX19pbml0IGJwZl9vZmZsb2FkX2luaXQodm9pZClcXG5rZXJuZWwvYnBmL29mZmxvYWQuYy04NjIte1xcbmtlcm5lbC9icGYvb2ZmbG9hZC5jOjg2MzpcXHRyZXR1cm4gcmhhc2h0YWJsZV9pbml0KFxcdTAwMjZvZmZkZXZzLCBcXHUwMDI2b2ZmZGV2c19wYXJhbXMpO1xcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTg2NC19XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0xMzgyPXN0YXRpYyBpbnQgbWFwX2NyZWF0ZV9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsIHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNDMzLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjE0MzQ6XFx0LyogZmluZCBtYXAgdHlwZSBhbmQgaW5pdCBtYXA6IGhhc2h0YWJsZSB2cyByYnRyZWUgdnMgYmxvb20gdnMgLi4uICovXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTQzNS1cXHRtYXBfdHlwZSA9IGF0dHItXFx1MDAzZW1hcF90eXBlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxODo1NToxMC4xMDQ1OTAzMzFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzU5NDIwOTQ5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCBpdDpcblxuKipDaGVja2luZyBLY29uZmlnIGZvciBCUEZfU1lTQ0FMTCoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ3ZlIGdvdCB0aGUgQlBGX1NZU0NBTEwgb3B0aW9uIGNvbmZpZ3VyZWQgY29ycmVjdGx5LiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBjb25zdWx0IHRoZSBLY29uZmlnIGZpbGVzLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCByaWdodD8gSSdsbCBwcm9iYWJseSBzdGFydCB3aXRoIHRoZSBjb3JlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzIOKAkyBwZXJoYXBzIGluIHRoZSBuZXR3b3JraW5nIG9yIHNlY3VyaXR5IHNlY3Rpb25zLCBkZXBlbmRpbmcgb24gaG93IGl0J3MgaW1wbGVtZW50ZWQuIEknbSBsb29raW5nIGZvciBhIHN0cmFpZ2h0Zm9yd2FyZCBkZWZpbml0aW9uIG9yIGEgY29uZGl0aW9uYWwgZGVwZW5kZW5jeSB0aGF0IGNvdWxkIGltcGFjdCB0aGlzIHNldHRpbmcuIEl0J3MgcG9zc2libGUgSSdsbCBuZWVkIHRvIHRyYWNlIGRlcGVuZGVuY2llcyBiYWNrd2FyZCBpZiBpdCdzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzLiBLbm93aW5nIG15IHdheSBhcm91bmQgdGhlIGNvbmZpZyBzeXN0ZW0sIEkgZXhwZWN0IEkgc2hvdWxkIGJlIGFibGUgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgaXQncyBlbmFibGVkLCBkaXNhYmxlZCwgb3Igc2V0IHRvIGEgbW9kdWxlLiBJIGFtIGFsc28gcGxhbm5pbmcgdG8gbG9vayBmb3IgYW55IGRlZmF1bHQgc2V0dGluZ3MgYXNzb2NpYXRlZCB3aXRoIGl0LCBvciBtYXliZSBhbnkgYXNzb2NpYXRlZCBtZW51IGVudHJpZXMuIFRoZW4gSSdsbCBjaGVjayBhbmQgbWFrZSBzdXJlIHRoYXQgdGhpcyBzZXR0aW5nIGlzIGFwcHJvcHJpYXRlIGZvciB0aGlzIGJ1aWxkIGFyY2hpdGVjdHVyZSwgYW5kIGFueSByZWxhdGVkIGRlcGVuZGVuY2llcyBvciBjb25mbGljdHMuIExldCdzIGdldCB0byBpdCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTQxMDUsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxODo1NToxMy42OTg4MDI5MzVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODUwMTEyLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE4OjU1OjEzLjc0MzY2MjEzOFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTM0Njg5MDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkh1bnRpbmcgZm9yIEJQRl9TWVNDQUxMIGluIHRoZSBDb25maWcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIGBCUEZfU1lTQ0FMTGAuIEknbSBnb2luZyB0byBzdGFydCBieSBhc3N1bWluZyBpdCdzIGxpa2VseSBhIGtlcm5lbCBjb25maWd1cmF0aW9uIHBhcmFtZXRlciwgcHJvYmFibHkgdW5kZXIgb25lIG9mIHRoZSBicm9hZGVyIEJQRiBvciBzZWN1cml0eS1yZWxhdGVkIHNlY3Rpb25zLiBTaW5jZSBpdCdzIGEgc3lzY2FsbC1yZWxhdGVkIGZlYXR1cmUsIEkgY2FuIGFsbW9zdCBndWFyYW50ZWUgaXRzIGV4aXN0ZW5jZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGl0J3MgZGVmaW5lZCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdXNlIHRoZSBzdGFuZGFyZCB0b29sczsgYSBgZ3JlcGAgdGhyb3VnaCB0aGUga2VybmVsJ3MgYEtjb25maWdgIGZpbGVzIHNob3VsZCBkbyB0aGUgdHJpY2ssIG1heWJlIHN0YXJ0aW5nIHdpdGggYSB3aWxkY2FyZCBzZWFyY2ggbGlrZSBgS2NvbmZpZyogQlBGX1NZU0NBTExgLiBPciBwZXJoYXBzIEkgd2lsbCB1c2UgJ2ZpbmQnIGFuZCAnZ3JlcCcgY29tbWFuZHMgdG8gc2VhcmNoLiBEZXBlbmRpbmcgb24gdGhlIHNpemUgb2YgdGhlIGNvZGViYXNlLCBJIG1pZ2h0IG5lZWQgdG8gcmVmaW5lIHRoYXQgc2VhcmNoIGlmIGl0J3MgdG9vIGJyb2FkIGluaXRpYWxseS4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGNvbnRleHQgYXJvdW5kIHRoYXQgb3B0aW9uIOKAkyB3aGF0IG90aGVyIGZlYXR1cmVzIGRvZXMgaXQgZW5hYmxlIG9yIGRpc2FibGU/IEFyZSB0aGVyZSBhbnkgcHJlcmVxdWlzaXRlcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFuZCBtb3JlIGltcG9ydGFudGx5LCB3aGF0J3MgdGhlIGRlZmF1bHQgdmFsdWUgYW5kIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGl0PyBJJ2xsIHByb2JhYmx5IGFsc28gY2hlY2sgcmVsZXZhbnQgYE1ha2VmaWxlYHMgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBjb25maWcgb3B0aW9uIHRyYW5zbGF0ZXMgaW50byBidWlsZCBmbGFncyBhbmQgdWx0aW1hdGVseSwgaG93IGl0IGFmZmVjdHMgdGhlIGdlbmVyYXRlZCBrZXJuZWwgY29kZS4gSWRlYWxseSwgSSdsbCBmaW5kIGEgY29uY2lzZSBkZXNjcmlwdGlvbiBvZiB3aGF0IHRoZSBvcHRpb24gYWN0dWFsbHkgKmRvZXMqIGFsb25nIHRoZSB3YXkuIFRoYXQncyB0aGUgcHJpb3JpdHkgcmlnaHQgbm93LCBmaW5kaW5nIGl0cyBkZWZpbml0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDM5MSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE4OjU1OjE2LjI3ODM1NDQzMVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1OTkzODIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI5PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTMwLVxcbmtlcm5lbC9icGYvS2NvbmZpZzozMTpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMzItXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxODo1NToxNy44MzgyOTgxNDFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkwNzI3MDEyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwncyBCUEYgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gc3RhcnQgd2l0aCB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUgQmVya2VsZXkgUGFja2V0IEZpbHRlciAoQlBGKSBzdWJzeXN0ZW0uIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGF2YWlsYWJsZSBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgYmVmb3JlIEkgZ28gZGVlcGVyLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBsb29rIGF0IGBrZXJuZWwvYnBmL0tjb25maWdgLiBUaGlzIEtjb25maWcgZmlsZSB3aWxsIGJlIHRoZSBjZW50cmFsIHBvaW50IHRvIHVuZGVyc3RhbmQgaG93IEJQRiBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIGtlcm5lbCdzIGJ1aWxkIHN5c3RlbSBhbmQgd2hhdCBmZWF0dXJlcyBjYW4gYmUgZW5hYmxlZCBvciBkaXNhYmxlZC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBCUEYgY29udHJvbHMgYXJlIGRlZmluZWQsIGFuZCB3aGVyZSBJIGNhbiBzdGFydCB1bnRhbmdsaW5nIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gZGlmZmVyZW50IEJQRiBmZWF0dXJlcy4gVGhpcyBpcyB0aGUgbG9naWNhbCBmaXJzdCBzdGVwIGZvciBtZSB0byB1bmRlcnN0YW5kIGhvdyBCUEYgZml0cyBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4MzIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxODo1NToxOS43NDU1NzAxNTZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU3MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDMwOlxcdFxcbiAgMzE6XFx0Y29uZmlnIEJQRl9TWVNDQUxMXFxuICAzMjpcXHRcXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuICAzMzpcXHRcXHRzZWxlY3QgQlBGXFxuICAzNDpcXHRcXHRzZWxlY3QgSVJRX1dPUktcXG4gIDM1OlxcdFxcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxcbiAgMzY6XFx0XFx0c2VsZWN0IFRBU0tTX1RSQUNFX1JDVVxcbiAgMzc6XFx0XFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcXG4gIDM4OlxcdFxcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXFxuICAzOTpcXHRcXHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcXG4gIDQwOlxcdFxcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXFxuICA0MTpcXHRcXHRkZWZhdWx0IG5cXG4gIDQyOlxcdFxcdGhlbHBcXG4gIDQzOlxcdFxcdCAgRW5hYmxlIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIEJQRiBwcm9ncmFtc1xcbiAgNDQ6XFx0XFx0ICBhbmQgbWFwcyB2aWEgZmlsZSBkZXNjcmlwdG9ycy5cXG4gIDQ1OlxcdFxcbiAgNDY6XFx0Y29uZmlnIEJQRl9KSVRcXG4gIDQ3OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXFxcIlxcbiAgNDg6XFx0XFx0ZGVwZW5kcyBvbiBCUEZcXG4gIDQ5OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9DQlBGX0pJVCB8fCBIQVZFX0VCUEZfSklUXFxuICA1MDpcXHRcXHRzZWxlY3QgRVhFQ01FTVxcbiAgNTE6XFx0XFx0aGVscFxcbiAgNTI6XFx0XFx0ICBCUEYgcHJvZ3JhbXMgYXJlIG5vcm1hbGx5IGhhbmRsZWQgYnkgYSBCUEYgaW50ZXJwcmV0ZXIuIFRoaXMgb3B0aW9uXFxuICA1MzpcXHRcXHQgIGFsbG93cyB0aGUga2VybmVsIHRvIGdlbmVyYXRlIG5hdGl2ZSBjb2RlIHdoZW4gYSBwcm9ncmFtIGlzIGxvYWRlZFxcbiAgNTQ6XFx0XFx0ICBpbnRvIHRoZSBrZXJuZWwuIFRoaXMgd2lsbCBzaWduaWZpY2FudGx5IHNwZWVkLXVwIHByb2Nlc3Npbmcgb2YgQlBGXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE4OjU1OjE5Ljc0NTYyNzA3NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4MTE0NDA5ODY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIEhhc2h0YWJsZSBCYXRjaCBMb29rdXAvRGVsZXRlIFBhdGNoIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gdGhlIGNvbmZpZyB3ZSdyZSBkZWFsaW5nIHdpdGggaXMgYEJQRl9TWVNDQUxMYC4gTGV0J3MgZGl2ZSBpbiBhbmQgc2VlIHdoYXQncyBjaGFuZ2VkLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGtlcm5lbC9icGYvaGFzaHRhYi5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCgpYCBmdW5jdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQncyB0aGUgY29yZSBpc3N1ZT8gQWgsIGl0IGFwcGVhcnMgdGhhdCB3aGVuIGl0ZXJhdGluZyB0aHJvdWdoIGVtcHR5IGJ1Y2tldHMgZHVyaW5nIGEgYmF0Y2ggbG9va3VwL2RlbGV0ZSwgdGhlIG9yaWdpbmFsIGNvZGUgdXNlZCB0byBqdXN0IGxvb3Agd2l0aG91dCBkcm9wcGluZyBSQ1UsIGVuYWJsaW5nIGluc3RydW1lbnRhdGlvbiwgb3IgcmVzY2hlZHVsaW5nLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIFJDVSBzdGFsbHMgb3IgcHJvbG9uZ2VkIHBlcmlvZHMgd2hlcmUgaW5zdHJ1bWVudGF0aW9uIGlzIGRpc2FibGVkLCBlc3BlY2lhbGx5IGluIHNwYXJzZSBoYXNoIG1hcHMuIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIHJlc2NoZWR1bGluZyBtZWNoYW5pc20gKGBIVEFCX0JBVENIX0VNUFRZX1JFU0NIRUQgNjRgKSBhZnRlciBhIGNlcnRhaW4gbnVtYmVyIG9mIGVtcHR5IGJ1Y2tldHMsIHdoaWNoIHNlZW1zIGxpa2UgYSBnb29kIGltcHJvdmVtZW50LiBJdCdzIGVzc2VudGlhbGx5IGRyb3BwaW5nIFJDVSwgZW5hYmxpbmcgaW5zdHJ1bWVudGF0aW9uLCBjYWxsaW5nIGBjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKClgLCBhbmQgdGhlbiByZXN0YXJ0aW5nIHRoZSBsb29wLiBUaGlzIGFsc28gY2FsbHMgYGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKWAgd2hlbiBhZHZhbmNpbmcgdG8gdGhlIG5leHQgbm9uLWVtcHR5IGJ1Y2tldC5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcywgaXMgdGhpcyBjb2RlIHJlYWNoYWJsZT8gQWJzb2x1dGVseSEgVGhpcyBjaGFuZ2UgZGlyZWN0bHkgYWZmZWN0cyB0aGUgYGJwZigpYCBzeXNjYWxsJ3MgbWFwIGJhdGNoIG9wZXJhdGlvbnM6IGBodGFiX21hcF9sb29rdXBfYmF0Y2hgLCBgaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgLCBgaHRhYl9scnVfbWFwX2xvb2t1cF9iYXRjaGAsIGBodGFiX2xydV9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgLCBgaHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9iYXRjaGAsIGBodGFiX3BlcmNwdV9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgLCBgaHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfYmF0Y2hgLCBhbmQgYGh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgIHdoaWNoIGFyZSBpbnZva2VkIGZyb20gdXNlcnNwYWNlIHZpYSBgc3lzX2JwZigpYCB3aXRoIGBCUEZfTUFQX0xPT0tVUF9CQVRDSGAgYW5kIGBCUEZfTUFQX0xPT0tVUF9BTkRfREVMRVRFX0JBVENIYC5cblxuVGhlIGNvcmUgc3Vic3lzdGVtIHRvdWNoZWQgaGVyZSBpcyBCUEYgbWFwIGhhbmRsaW5nIGFuZCBzeXNjYWxsIGhhbmRsaW5nLiBUaGlzIGlzIHJpZ2h0IGluIHRoZSB3aGVlbGhvdXNlIGZvciBwb3RlbnRpYWwgY29uY3VycmVuY3kgYnVncy4gSXQncyB0b3RhbGx5IHBsYXVzaWJsZSB0aGF0IHRoaXMgY291bGQgaW50cm9kdWNlIFJDVSBsaWZldGltZSBpc3N1ZXMsIHN0YXRlIGNvcnJ1cHRpb24sIGluZmluaXRlIGxvb3BzLCBvciBldmVuIG1pc3NlZCBlbGVtZW50cyBkdXJpbmcgYmF0Y2ggb3BlcmF0aW9ucyBpZiByZXNjaGVkdWxpbmcgaGFwcGVucyBtaWQtaXRlcmF0aW9uLCBlc3BlY2lhbGx5IHdpdGggY29uY3VycmVudCB1cGRhdGVzL2RlbGV0aW9ucyBvciBsYXJnZSwgc3BhcnNlIGhhc2ggbWFwcy4gR2l2ZW4gdGhlIGNyaXRlcmlhLCB0aGlzIGlzIGEgZGVmaW5pdGUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLlxuXG5Mb29raW5nIGF0IHRoZSBwb3NpdGl2ZSBjcml0ZXJpYSwgdGhpcyBwYXRjaCBkZWZpbml0aXZlbHkgdG91Y2hlcyBcInJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGVcIiB3aXRoaW4gYSBjb3JlIHN1YnN5c3RlbSAoQlBGIGFuZCBzeXNjYWxsIGhhbmRsaW5nKSwgc28gdGhlIHZlcmRpY3QgaXMgYSByZXNvdW5kaW5nIGB0cnVlYCBmb3IgYFdvcnRoRnV6emluZ2AuXG5cbkZvciBmb2N1cyBzeW1ib2xzLCB3ZSdsbCBuZWVkIHRvIGZvY3VzIG9uIGFsbCB0aGUgYmF0Y2ggb3BlcmF0aW9uczogYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgLCBgaHRhYl9tYXBfbG9va3VwX2JhdGNoYCwgYGh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgYGh0YWJfbHJ1X21hcF9sb29rdXBfYmF0Y2hgLCBgaHRhYl9scnVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgYGh0YWJfcGVyY3B1X21hcF9sb29rdXBfYmF0Y2hgLCBgaHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgYGh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2JhdGNoYCwgYW5kIGBodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYC4gV2UgYXJlIGRpcmVjdGx5IHRhcmdldGluZyB0aGUgZnVuY3Rpb25zIG1vZGlmaWVkIGFuZCBhbGwgZW50cnkgcG9pbnRzLlxuXG5UaGUgbmVjZXNzYXJ5IGNvbmZpZyBpcyBqdXN0IGBCUEZfU1lTQ0FMTGAsIG5vdGhpbmcgZWxzZSBuZWVkZWQuXG5cblRoZXJlZm9yZSwgb3VyIGZpbmFsIGFzc2Vzc21lbnQgaXM6XG5cbiogICBgV29ydGhGdXp6aW5nYDogYHRydWVgXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBgW1wiQlBGX1NZU0NBTExcIl1gXG4qICAgYEZvY3VzU3ltYm9sc2A6IGBbXCJfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoXCIsIFwiaHRhYl9tYXBfbG9va3VwX2JhdGNoXCIsIFwiaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hcIiwgXCJodGFiX2xydV9tYXBfbG9va3VwX2JhdGNoXCIsIFwiaHRhYl9scnVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoXCIsIFwiaHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9iYXRjaFwiLCBcImh0YWJfcGVyY3B1X21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaFwiLCBcImh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2JhdGNoXCIsIFwiaHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaFwiXWBcbiogICBSZWFzb25pbmc6IFRoZSBwYXRjaCBtb2RpZmllcyBjcml0aWNhbCBCUEYgYW5kIHN5c2NhbGwgaGFuZGxpbmcgY29kZSByZWxhdGVkIHRvIG1hcCBiYXRjaCBvcGVyYXRpb25zLiBUaGUgcG90ZW50aWFsIGZvciBjb25jdXJyZW5jeSBpc3N1ZXMgaW4gdGhlIGhhbmRsaW5nIG9mIHNwYXJzZSBoYXNoIG1hcHMgd2FycmFudHMgcmlnb3JvdXMgZnV6emluZy5cblxuTm93LCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1Mzk1LCJPdXRwdXRUb2tlbnMiOjI2NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxODo1NToyNy44NjAwMzkyNzVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjU4ODU5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoXCIsXG4gICAgXCJodGFiX21hcF9sb29rdXBfYmF0Y2hcIixcbiAgICBcImh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoXCIsXG4gICAgXCJodGFiX2xydV9tYXBfbG9va3VwX2JhdGNoXCIsXG4gICAgXCJodGFiX2xydV9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hcIixcbiAgICBcImh0YWJfcGVyY3B1X21hcF9sb29rdXBfYmF0Y2hcIixcbiAgICBcImh0YWJfcGVyY3B1X21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaFwiLFxuICAgIFwiaHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfYmF0Y2hcIixcbiAgICBcImh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmF0Y2ggbG9va3VwIGFuZCBkZWxldGUgaXRlcmF0aW9uIGxvZ2ljIGluIGtlcm5lbC9icGYvaGFzaHRhYi5jIChfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKSB0byBpbnRyb2R1Y2UgcGVyaW9kaWMgcmVzY2hlZHVsaW5nIChjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKSBhbmQgUkNVIGNyaXRpY2FsIHNlY3Rpb24gZXhpdHMgd2hlbiBlbmNvdW50ZXJpbmcgY29uc2VjdXRpdmUgZW1wdHkgYnVja2V0cy4gVGhpcyBhbHRlcnMgUkNVIHN5bmNocm9uaXphdGlvbiwgbG9ja2luZywgYW5kIGl0ZXJhdGlvbiBjb250cm9sIGZsb3cgaW4gcmVhY2hhYmxlIEJQRiBtYXAgc3lzY2FsbCBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaFwiLFxuICAgIFwiaHRhYl9tYXBfbG9va3VwX2JhdGNoXCIsXG4gICAgXCJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaFwiLFxuICAgIFwiaHRhYl9scnVfbWFwX2xvb2t1cF9iYXRjaFwiLFxuICAgIFwiaHRhYl9scnVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoXCIsXG4gICAgXCJodGFiX3BlcmNwdV9tYXBfbG9va3VwX2JhdGNoXCIsXG4gICAgXCJodGFiX3BlcmNwdV9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hcIixcbiAgICBcImh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2JhdGNoXCIsXG4gICAgXCJodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJhdGNoIGxvb2t1cCBhbmQgZGVsZXRlIGl0ZXJhdGlvbiBsb2dpYyBpbiBrZXJuZWwvYnBmL2hhc2h0YWIuYyAoX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCkgdG8gaW50cm9kdWNlIHBlcmlvZGljIHJlc2NoZWR1bGluZyAoY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcykgYW5kIFJDVSBjcml0aWNhbCBzZWN0aW9uIGV4aXRzIHdoZW4gZW5jb3VudGVyaW5nIGNvbnNlY3V0aXZlIGVtcHR5IGJ1Y2tldHMuIFRoaXMgYWx0ZXJzIFJDVSBzeW5jaHJvbml6YXRpb24sIGxvY2tpbmcsIGFuZCBpdGVyYXRpb24gY29udHJvbCBmbG93IGluIHJlYWNoYWJsZSBCUEYgbWFwIHN5c2NhbGwgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTg6NTU6MjcuOTMyNjM0NjUzWiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDgxMzIxNzg4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE4OjU1OjI3LjkzMzAzNTQ0M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE0ODEyODEzMTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHBlcmlvZGljIHZvbHVudGFyeSByZXNjaGVkdWxpbmcgKGBjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKClgKSBhbmQgUkNVIHVubG9ja2luZyBhZnRlciBpdGVyYXRpbmcgb3ZlciBhIGJhdGNoIG9mIGVtcHR5IGJ1Y2tldHMgKGBIVEFCX0JBVENIX0VNUFRZX1JFU0NIRURgKSBpbiBCUEYgaGFzaCB0YWJsZSBiYXRjaCBvcGVyYXRpb25zIChgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGApIHRvIHByZXZlbnQgc29mdCBsb2NrdXBzIGFuZCBSQ1Ugc3RhbGxzLlxcblxcblRoZSBuZXdseSBpbnRyb2R1Y2VkIGNvdW50ZXIgdmFyaWFibGUgYGVtcHR5X2NudGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byAwIGFuZCBjb3JyZWN0bHkgcmVzZXQuIFRoZSBwYXRjaCBtb2RpZmllcyBvbmx5IGxvb3AgY29udHJvbCBmbG93IGFuZCBzY2hlZHVsaW5nIGJlaGF2aW9yOyBpdCBkb2VzIG5vdCBjaGFuZ2UgYnVmZmVyIGFsbG9jYXRpb24sIGRhdGEgY29weWluZyBsZW5ndGhzLCBzdHJ1Y3QgZGVmaW5pdGlvbnMsIG9yIG1lbW9yeSBpbml0aWFsaXphdGlvbiBsb2dpYywgbm9yIGRvZXMgaXQgY3JlYXRlIGFueSByaXNrIG9mIHJlYWRpbmcgb3IgbGVha2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzNzBlNjc0ZmRjNjQ2Yjk2ZmI2ODNiNWM2NTRjYzkyN2QwZDI4MWUyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAxODo1NDo0NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGFzaHRhYi5jIGIva2VybmVsL2JwZi9oYXNodGFiLmNcbmluZGV4IDZmMzMxYzgwMTMwZDcuLmE3MmRjNWI5ZjE4NGQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuKysrIGIva2VybmVsL2JwZi9oYXNodGFiLmNcbkBAIC0xNzcyLDYgKzE3NzIsMTIgQEAgc3RhdGljIGludCBodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcdFx0XHRcdFx0XHQgZmxhZ3MpO1xuIH1cbiBcbisvKlxuKyAqIE1heCBjb25zZWN1dGl2ZSBlbXB0eSBidWNrZXRzIHRvIHdhbGsgaW4gb25lIFJDVSArXG4rICogaW5zdHJ1bWVudGF0aW9uLWRpc2FibGVkIHNlY3Rpb24gYmVmb3JlIHJlc2NoZWR1bGluZy5cbisgKi9cbisjZGVmaW5lIEhUQUJfQkFUQ0hfRU1QVFlfUkVTQ0hFRCA2NFxuK1xuIHN0YXRpYyBpbnRcbiBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXG4gXHRcdFx0XHQgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbkBAIC0xNzkzLDYgKzE3OTksNyBAQCBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzID0gMDtcbiBcdGJvb2wgbG9ja2VkID0gZmFsc2U7XG4gXHRzdHJ1Y3QgaHRhYl9lbGVtICpsO1xuK1x0dTMyIGVtcHR5X2NudCA9IDA7XG4gXHRzdHJ1Y3QgYnVja2V0ICpiO1xuIFx0aW50IHJldCA9IDA7XG4gXG5AQCAtMTk3MSwxMiArMTk3OCwyMSBAQCBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXG4gXHR9XG4gXG4gbmV4dF9iYXRjaDpcbi1cdC8qIElmIHdlIGFyZSBub3QgY29weWluZyBkYXRhLCB3ZSBjYW4gZ28gdG8gbmV4dCBidWNrZXQgYW5kIGF2b2lkXG4tXHQgKiB1bmxvY2tpbmcgdGhlIHJjdS5cbitcdC8qXG4rXHQgKiBJZiB3ZSBhcmUgbm90IGNvcHlpbmcgZGF0YSwgd2UgY2FuIGdvIHRvIG5leHQgYnVja2V0IGFuZCBhdm9pZFxuK1x0ICogdW5sb2NraW5nIHRoZSByY3UuIEJvdW5kIHRoZSB3YWxrIHRob3VnaDogYWZ0ZXJcbitcdCAqIEhUQUJfQkFUQ0hfRU1QVFlfUkVTQ0hFRCBjb25zZWN1dGl2ZSBlbXB0eSBidWNrZXRzLCBmdWxseSBleGl0XG4rXHQgKiB0aGUgY3JpdGljYWwgc2VjdGlvbiAobm8gbG9ja3MgYXJlIGhlbGQgaGVyZSkgYW5kIHJlc2NoZWR1bGUuXG4gXHQgKi9cbiBcdGlmICghYnVja2V0X2NudCBcdTAwMjZcdTAwMjYgKGJhdGNoICsgMSBcdTAwM2MgaHRhYi1cdTAwM2VuX2J1Y2tldHMpKSB7XG4gXHRcdGJhdGNoKys7XG4tXHRcdGdvdG8gYWdhaW5fbm9jb3B5O1xuK1x0XHRpZiAoKytlbXB0eV9jbnQgXHUwMDNjIEhUQUJfQkFUQ0hfRU1QVFlfUkVTQ0hFRClcbitcdFx0XHRnb3RvIGFnYWluX25vY29weTtcbitcdFx0ZW1wdHlfY250ID0gMDtcbitcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRcdGJwZl9lbmFibGVfaW5zdHJ1bWVudGF0aW9uKCk7XG4rXHRcdGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKTtcbitcdFx0Z290byBhZ2FpbjtcbiBcdH1cbiBcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuQEAgLTE5OTAsMTEgKzIwMDYsMTMgQEAgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuIFx0fVxuIFxuIFx0dG90YWwgKz0gYnVja2V0X2NudDtcbitcdGVtcHR5X2NudCA9IDA7XG4gXHRiYXRjaCsrO1xuIFx0aWYgKGJhdGNoIFx1MDAzZT0gaHRhYi1cdTAwM2VuX2J1Y2tldHMpIHtcbiBcdFx0cmV0ID0gLUVOT0VOVDtcbiBcdFx0Z290byBhZnRlcl9sb29wO1xuIFx0fVxuK1x0Y29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpO1xuIFx0Z290byBhZ2FpbjtcbiBcbiBhZnRlcl9sb29wOlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTg6NTU6MjcuOTMzMDM2MzQzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ1NzQ2NjI2MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBIYXNodGFibGUgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIHdlIGhhdmUgYSBwYXRjaCB0aGF0J3MgdG91Y2hpbmcgYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgIHdpdGhpbiBga2VybmVsL2JwZi9oYXNodGFiLmNgLiBOYXR1cmFsbHksIEkgd2FudCB0byBzZWUgdGhlICpjb250ZXh0KiBhcm91bmQgdGhpcyBmdW5jdGlvbi4gTW9kaWZpY2F0aW9ucyB0byBiYXRjaCBvcGVyYXRpb25zIGNhbiBiZSB0cmlja3ksIHNvIGEgdGhvcm91Z2ggaW5zcGVjdGlvbiBpcyBjcnVjaWFsLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgYGxvb2t1cF9hbmRfZGVsZXRlYCBmdW5jdGlvbiBpcyBiZWhhdmluZy4gVGhlcmVmb3JlLCBJJ2xsIG5lZWQgdG8gbG9vayBhcm91bmQgbGluZSAxNzcwIHRvIDIwMjAgd2l0aGluIHRoYXQgZmlsZS4gTGV0J3MgZmlyZSB1cCBgcmVhZC1maWxlYCBhbmQgdGFrZSBhIGRlZXAgZGl2ZSBpbnRvIHRoYXQgc2VjdGlvbiBvZiBgaGFzaHRhYi5jYC4gSSBuZWVkIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIHRoaXMgZnVuY3Rpb24ncyBsb2dpYyBhbmQgYW55IHJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIGJlZm9yZSBJIGNhbiBwcm9wZXJseSBldmFsdWF0ZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MzMsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE4OjU1OjMyLjUwNzcwMTc2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMTEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL2hhc2h0YWIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzgwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTc4MDpcXHRcXG4xNzgxOlxcdHN0YXRpYyBpbnRcXG4xNzgyOlxcdF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4xNzgzOlxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbjE3ODQ6XFx0XFx0XFx0XFx0XFx0ICAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cixcXG4xNzg1OlxcdFxcdFxcdFxcdFxcdCAgIGJvb2wgZG9fZGVsZXRlLCBib29sIGlzX2xydV9tYXAsXFxuMTc4NjpcXHRcXHRcXHRcXHRcXHQgICBib29sIGlzX3BlcmNwdSlcXG4xNzg3OlxcdHtcXG4xNzg4OlxcdFxcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcXG4xNzg5OlxcdFxcdHZvaWQgKmtleXMgPSBOVUxMLCAqdmFsdWVzID0gTlVMTCwgKnZhbHVlLCAqZHN0X2tleSwgKmRzdF92YWw7XFxuMTc5MDpcXHRcXHR2b2lkIF9fdXNlciAqdXZhbHVlcyA9IHU2NF90b191c2VyX3B0cihhdHRyLVxcdTAwM2ViYXRjaC52YWx1ZXMpO1xcbjE3OTE6XFx0XFx0dm9pZCBfX3VzZXIgKnVrZXlzID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXFx1MDAzZWJhdGNoLmtleXMpO1xcbjE3OTI6XFx0XFx0dm9pZCBfX3VzZXIgKnViYXRjaCA9IHU2NF90b191c2VyX3B0cihhdHRyLVxcdTAwM2ViYXRjaC5pbl9iYXRjaCk7XFxuMTc5MzpcXHRcXHR1MzIgYmF0Y2gsIG1heF9jb3VudCwgc2l6ZSwgYnVja2V0X3NpemUsIG1hcF9pZDtcXG4xNzk0OlxcdFxcdHU2NCBlbGVtX21hcF9mbGFncywgbWFwX2ZsYWdzLCBhbGxvd2VkX2ZsYWdzO1xcbjE3OTU6XFx0XFx0dTMyIGJ1Y2tldF9jbnQsIHRvdGFsLCBrZXlfc2l6ZSwgdmFsdWVfc2l6ZTtcXG4xNzk2OlxcdFxcdHN0cnVjdCBodGFiX2VsZW0gKm5vZGVfdG9fZnJlZSA9IE5VTEw7XFxuMTc5NzpcXHRcXHRzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGVhZDtcXG4xNzk4OlxcdFxcdHN0cnVjdCBobGlzdF9udWxsc19ub2RlICpuO1xcbjE3OTk6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncyA9IDA7XFxuMTgwMDpcXHRcXHRib29sIGxvY2tlZCA9IGZhbHNlO1xcbjE4MDE6XFx0XFx0c3RydWN0IGh0YWJfZWxlbSAqbDtcXG4xODAyOlxcdFxcdHUzMiBlbXB0eV9jbnQgPSAwO1xcbjE4MDM6XFx0XFx0c3RydWN0IGJ1Y2tldCAqYjtcXG4xODA0OlxcdFxcdGludCByZXQgPSAwO1xcbjE4MDU6XFx0XFxuMTgwNjpcXHRcXHRlbGVtX21hcF9mbGFncyA9IGF0dHItXFx1MDAzZWJhdGNoLmVsZW1fZmxhZ3M7XFxuMTgwNzpcXHRcXHRhbGxvd2VkX2ZsYWdzID0gQlBGX0ZfTE9DSztcXG4xODA4OlxcdFxcdGlmICghZG9fZGVsZXRlIFxcdTAwMjZcXHUwMDI2IGlzX3BlcmNwdSlcXG4xODA5OlxcdFxcdFxcdGFsbG93ZWRfZmxhZ3MgfD0gQlBGX0ZfQ1BVO1xcbjE4MTA6XFx0XFx0cmV0ID0gYnBmX21hcF9jaGVja19vcF9mbGFncyhtYXAsIGVsZW1fbWFwX2ZsYWdzLCBhbGxvd2VkX2ZsYWdzKTtcXG4xODExOlxcdFxcdGlmIChyZXQpXFxuMTgxMjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE4MTM6XFx0XFxuMTgxNDpcXHRcXHRtYXBfZmxhZ3MgPSBhdHRyLVxcdTAwM2ViYXRjaC5mbGFncztcXG4xODE1OlxcdFxcdGlmIChtYXBfZmxhZ3MpXFxuMTgxNjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xODE3OlxcdFxcbjE4MTg6XFx0XFx0bWF4X2NvdW50ID0gYXR0ci1cXHUwMDNlYmF0Y2guY291bnQ7XFxuMTgxOTpcXHRcXHRpZiAoIW1heF9jb3VudClcXG4xODIwOlxcdFxcdFxcdHJldHVybiAwO1xcbjE4MjE6XFx0XFxuMTgyMjpcXHRcXHRpZiAocHV0X3VzZXIoMCwgXFx1MDAyNnVhdHRyLVxcdTAwM2ViYXRjaC5jb3VudCkpXFxuMTgyMzpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4xODI0OlxcdFxcbjE4MjU6XFx0XFx0YmF0Y2ggPSAwO1xcbjE4MjY6XFx0XFx0aWYgKHViYXRjaCBcXHUwMDI2XFx1MDAyNiBjb3B5X2Zyb21fdXNlcihcXHUwMDI2YmF0Y2gsIHViYXRjaCwgc2l6ZW9mKGJhdGNoKSkpXFxuMTgyNzpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4xODI4OlxcdFxcbjE4Mjk6XFx0XFx0aWYgKGJhdGNoIFxcdTAwM2U9IGh0YWItXFx1MDAzZW5fYnVja2V0cylcXG4xODMwOlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbjE4MzE6XFx0XFxuMTgzMjpcXHRcXHRrZXlfc2l6ZSA9IGh0YWItXFx1MDAzZW1hcC5rZXlfc2l6ZTtcXG4xODMzOlxcdFxcdHZhbHVlX3NpemUgPSBodGFiLVxcdTAwM2VtYXAudmFsdWVfc2l6ZTtcXG4xODM0OlxcdFxcdHNpemUgPSByb3VuZF91cCh2YWx1ZV9zaXplLCA4KTtcXG4xODM1OlxcdFxcdGlmIChpc19wZXJjcHUgXFx1MDAyNlxcdTAwMjYgIShlbGVtX21hcF9mbGFncyBcXHUwMDI2IEJQRl9GX0NQVSkpXFxuMTgzNjpcXHRcXHRcXHR2YWx1ZV9zaXplID0gc2l6ZSAqIG51bV9wb3NzaWJsZV9jcHVzKCk7XFxuMTgzNzpcXHRcXHR0b3RhbCA9IDA7XFxuMTgzODpcXHRcXHQvKiB3aGlsZSBleHBlcmltZW50aW5nIHdpdGggaGFzaCB0YWJsZXMgd2l0aCBzaXplcyByYW5naW5nIGZyb20gMTAgdG9cXG4xODM5OlxcdFxcdCAqIDEwMDAsIGl0IHdhcyBvYnNlcnZlZCB0aGF0IGEgYnVja2V0IGNhbiBoYXZlIHVwIHRvIDUgZW50cmllcy5cXG4xODQwOlxcdFxcdCAqL1xcbjE4NDE6XFx0XFx0YnVja2V0X3NpemUgPSA1O1xcbjE4NDI6XFx0XFxuMTg0MzpcXHRhbGxvYzpcXG4xODQ0OlxcdFxcdC8qIFdlIGNhbm5vdCBkbyBjb3B5X2Zyb21fdXNlciBvciBjb3B5X3RvX3VzZXIgaW5zaWRlXFxuMTg0NTpcXHRcXHQgKiB0aGUgcmN1X3JlYWRfbG9jay4gQWxsb2NhdGUgZW5vdWdoIHNwYWNlIGhlcmUuXFxuMTg0NjpcXHRcXHQgKi9cXG4xODQ3OlxcdFxcdGtleXMgPSBrdm1hbGxvY19hcnJheShrZXlfc2l6ZSwgYnVja2V0X3NpemUsIEdGUF9VU0VSIHwgX19HRlBfTk9XQVJOKTtcXG4xODQ4OlxcdFxcdHZhbHVlcyA9IGt2bWFsbG9jX2FycmF5KHZhbHVlX3NpemUsIGJ1Y2tldF9zaXplLCBHRlBfVVNFUiB8IF9fR0ZQX05PV0FSTik7XFxuMTg0OTpcXHRcXHRpZiAoIWtleXMgfHwgIXZhbHVlcykge1xcbjE4NTA6XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4xODUxOlxcdFxcdFxcdGdvdG8gYWZ0ZXJfbG9vcDtcXG4xODUyOlxcdFxcdH1cXG4xODUzOlxcdFxcbjE4NTQ6XFx0YWdhaW46XFxuMTg1NTpcXHRcXHRicGZfZGlzYWJsZV9pbnN0cnVtZW50YXRpb24oKTtcXG4xODU2OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4xODU3OlxcdGFnYWluX25vY29weTpcXG4xODU4OlxcdFxcdGRzdF9rZXkgPSBrZXlzO1xcbjE4NTk6XFx0XFx0ZHN0X3ZhbCA9IHZhbHVlcztcXG4xODYwOlxcdFxcdGIgPSBcXHUwMDI2aHRhYi1cXHUwMDNlYnVja2V0c1tiYXRjaF07XFxuMTg2MTpcXHRcXHRoZWFkID0gXFx1MDAyNmItXFx1MDAzZWhlYWQ7XFxuMTg2MjpcXHRcXHQvKiBkbyBub3QgZ3JhYiB0aGUgbG9jayB1bmxlc3MgbmVlZCBpdCAoYnVja2V0X2NudCBcXHUwMDNlIDApLiAqL1xcbjE4NjM6XFx0XFx0aWYgKGxvY2tlZCkge1xcbjE4NjQ6XFx0XFx0XFx0cmV0ID0gaHRhYl9sb2NrX2J1Y2tldChiLCBcXHUwMDI2ZmxhZ3MpO1xcbjE4NjU6XFx0XFx0XFx0aWYgKHJldCkge1xcbjE4NjY6XFx0XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMTg2NzpcXHRcXHRcXHRcXHRicGZfZW5hYmxlX2luc3RydW1lbnRhdGlvbigpO1xcbjE4Njg6XFx0XFx0XFx0XFx0Z290byBhZnRlcl9sb29wO1xcbjE4Njk6XFx0XFx0XFx0fVxcbjE4NzA6XFx0XFx0fVxcbjE4NzE6XFx0XFxuMTg3MjpcXHRcXHRidWNrZXRfY250ID0gMDtcXG4xODczOlxcdFxcdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3JjdShsLCBuLCBoZWFkLCBoYXNoX25vZGUpXFxuMTg3NDpcXHRcXHRcXHRidWNrZXRfY250Kys7XFxuMTg3NTpcXHRcXG4xODc2OlxcdFxcdGlmIChidWNrZXRfY250IFxcdTAwMjZcXHUwMDI2ICFsb2NrZWQpIHtcXG4xODc3OlxcdFxcdFxcdGxvY2tlZCA9IHRydWU7XFxuMTg3ODpcXHRcXHRcXHRnb3RvIGFnYWluX25vY29weTtcXG4xODc5OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTg6NTU6MzIuNTA3OTM0OTFaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE5NTk0NDk2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIEZ1bmN0aW9uJ3MgU3Vic2VxdWVudCBMaW5lcyoqXG5cbkFscmlnaHQsIEkndmUgZ290IHRoZSBpbml0aWFsIGxpbmVzIG9mIHRoZSBmdW5jdGlvbiBwYXJzZWQsIGFuZCBJIGhhdmUgYSBzb2xpZCBncmlwIG9uIHRoZSBpbml0aWFsIHNldHVwLiBOb3csIEkgbmVlZCB0byBnZXQgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgaXRzIG92ZXJhbGwgb3BlcmF0aW9uLiBUaW1lIHRvIHpvb20gaW4gYW5kIGRpdmUgaW50byB0aGUgcmVzdCBvZiB0aGUgZnVuY3Rpb24ncyBsb2dpYy4gV2hhdCBkYXRhIHN0cnVjdHVyZXMgaXMgaXQgbWFuaXB1bGF0aW5nPyBXaGF0IGFyZSB0aGUga2V5IGNvbmRpdGlvbmFsIGJyYW5jaGVzPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgcG90ZW50aWFsIGVkZ2UgY2FzZXMgdGhhdCBqdW1wIG91dCBhdCBtZSBhcyBJIHNjYW4gdGhlIG5leHQgc2VjdGlvbj8gSSdtIGxvb2tpbmcgZm9yIHBhdHRlcm5zLCByZWR1bmRhbmNpZXMsIGFuZCBhbnkgbm9uLW9idmlvdXMgb3BlcmF0aW9ucyB0aGF0IG1pZ2h0IGJlIGNyaXRpY2FsIHRvIGl0cyBvdmVyYWxsIGVmZmVjdGl2ZW5lc3MuIExldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyBwcmVzZW50LiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIG1lYXQgb2YgdGhlIGZ1bmN0aW9uJ3MgcHVycG9zZSBzaG91bGQgYmVjb21lIGFwcGFyZW50LCBhbmQgd2hlcmUgSSBjYW4gc3RhcnQgdG8gbWFrZSBhIGZ1bGwgbWVudGFsIG1vZGVsIG9mIGl0cyBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU1NywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTg6NTU6MzQuNzAzODgyNDg4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MzcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL2hhc2h0YWIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODgwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTg4MDpcXHRcXG4xODgxOlxcdFxcdGlmIChidWNrZXRfY250IFxcdTAwM2UgKG1heF9jb3VudCAtIHRvdGFsKSkge1xcbjE4ODI6XFx0XFx0XFx0aWYgKHRvdGFsID09IDApXFxuMTg4MzpcXHRcXHRcXHRcXHRyZXQgPSAtRU5PU1BDO1xcbjE4ODQ6XFx0XFx0XFx0LyogTm90ZSB0aGF0IHNpbmNlIGJ1Y2tldF9jbnQgXFx1MDAzZSAwIGhlcmUsIGl0IGlzIGltcGxpY2l0XFxuMTg4NTpcXHRcXHRcXHQgKiB0aGF0IHRoZSBsb2NrZWQgd2FzIGdyYWJiZWQsIHNvIHJlbGVhc2UgaXQuXFxuMTg4NjpcXHRcXHRcXHQgKi9cXG4xODg3OlxcdFxcdFxcdGh0YWJfdW5sb2NrX2J1Y2tldChiLCBmbGFncyk7XFxuMTg4ODpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4xODg5OlxcdFxcdFxcdGJwZl9lbmFibGVfaW5zdHJ1bWVudGF0aW9uKCk7XFxuMTg5MDpcXHRcXHRcXHRnb3RvIGFmdGVyX2xvb3A7XFxuMTg5MTpcXHRcXHR9XFxuMTg5MjpcXHRcXG4xODkzOlxcdFxcdGlmIChidWNrZXRfY250IFxcdTAwM2UgYnVja2V0X3NpemUpIHtcXG4xODk0OlxcdFxcdFxcdGJ1Y2tldF9zaXplID0gYnVja2V0X2NudDtcXG4xODk1OlxcdFxcdFxcdC8qIE5vdGUgdGhhdCBzaW5jZSBidWNrZXRfY250IFxcdTAwM2UgMCBoZXJlLCBpdCBpcyBpbXBsaWNpdFxcbjE4OTY6XFx0XFx0XFx0ICogdGhhdCB0aGUgbG9ja2VkIHdhcyBncmFiYmVkLCBzbyByZWxlYXNlIGl0LlxcbjE4OTc6XFx0XFx0XFx0ICovXFxuMTg5ODpcXHRcXHRcXHRodGFiX3VubG9ja19idWNrZXQoYiwgZmxhZ3MpO1xcbjE4OTk6XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMTkwMDpcXHRcXHRcXHRicGZfZW5hYmxlX2luc3RydW1lbnRhdGlvbigpO1xcbjE5MDE6XFx0XFx0XFx0a3ZmcmVlKGtleXMpO1xcbjE5MDI6XFx0XFx0XFx0a3ZmcmVlKHZhbHVlcyk7XFxuMTkwMzpcXHRcXHRcXHRnb3RvIGFsbG9jO1xcbjE5MDQ6XFx0XFx0fVxcbjE5MDU6XFx0XFxuMTkwNjpcXHRcXHQvKiBOZXh0IGJsb2NrIGlzIG9ubHkgc2FmZSB0byBydW4gaWYgeW91IGhhdmUgZ3JhYmJlZCB0aGUgbG9jayAqL1xcbjE5MDc6XFx0XFx0aWYgKCFsb2NrZWQpXFxuMTkwODpcXHRcXHRcXHRnb3RvIG5leHRfYmF0Y2g7XFxuMTkwOTpcXHRcXG4xOTEwOlxcdFxcdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3NhZmUobCwgbiwgaGVhZCwgaGFzaF9ub2RlKSB7XFxuMTkxMTpcXHRcXHRcXHRtZW1jcHkoZHN0X2tleSwgbC1cXHUwMDNla2V5LCBrZXlfc2l6ZSk7XFxuMTkxMjpcXHRcXG4xOTEzOlxcdFxcdFxcdGlmIChpc19wZXJjcHUpIHtcXG4xOTE0OlxcdFxcdFxcdFxcdGludCBvZmYgPSAwLCBjcHU7XFxuMTkxNTpcXHRcXHRcXHRcXHR2b2lkIF9fcGVyY3B1ICpwcHRyO1xcbjE5MTY6XFx0XFxuMTkxNzpcXHRcXHRcXHRcXHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIobCwgbWFwLVxcdTAwM2VrZXlfc2l6ZSk7XFxuMTkxODpcXHRcXHRcXHRcXHRpZiAoZWxlbV9tYXBfZmxhZ3MgXFx1MDAyNiBCUEZfRl9DUFUpIHtcXG4xOTE5OlxcdFxcdFxcdFxcdFxcdGNwdSA9IGVsZW1fbWFwX2ZsYWdzIFxcdTAwM2VcXHUwMDNlIDMyO1xcbjE5MjA6XFx0XFx0XFx0XFx0XFx0Y29weV9tYXBfdmFsdWUoXFx1MDAyNmh0YWItXFx1MDAzZW1hcCwgZHN0X3ZhbCwgcGVyX2NwdV9wdHIocHB0ciwgY3B1KSk7XFxuMTkyMTpcXHRcXHRcXHRcXHRcXHRjaGVja19hbmRfaW5pdF9tYXBfdmFsdWUoXFx1MDAyNmh0YWItXFx1MDAzZW1hcCwgZHN0X3ZhbCk7XFxuMTkyMjpcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbjE5MjM6XFx0XFx0XFx0XFx0XFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xcbjE5MjQ6XFx0XFx0XFx0XFx0XFx0XFx0Y29weV9tYXBfdmFsdWVfbG9uZyhcXHUwMDI2aHRhYi1cXHUwMDNlbWFwLCBkc3RfdmFsICsgb2ZmLFxcbjE5MjU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHBlcl9jcHVfcHRyKHBwdHIsIGNwdSkpO1xcbjE5MjY6XFx0XFx0XFx0XFx0XFx0XFx0Y2hlY2tfYW5kX2luaXRfbWFwX3ZhbHVlKFxcdTAwMjZodGFiLVxcdTAwM2VtYXAsIGRzdF92YWwgKyBvZmYpO1xcbjE5Mjc6XFx0XFx0XFx0XFx0XFx0XFx0b2ZmICs9IHNpemU7XFxuMTkyODpcXHRcXHRcXHRcXHRcXHR9XFxuMTkyOTpcXHRcXHRcXHRcXHR9XFxuMTkzMDpcXHRcXHRcXHR9IGVsc2Uge1xcbjE5MzE6XFx0XFx0XFx0XFx0dmFsdWUgPSBodGFiX2VsZW1fdmFsdWUobCwga2V5X3NpemUpO1xcbjE5MzI6XFx0XFx0XFx0XFx0aWYgKGlzX2ZkX2h0YWIoaHRhYikpIHtcXG4xOTMzOlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfbWFwICoqaW5uZXJfbWFwID0gdmFsdWU7XFxuMTkzNDpcXHRcXG4xOTM1OlxcdFxcdFxcdFxcdFxcdCAvKiBBY3R1YWwgdmFsdWUgaXMgdGhlIGlkIG9mIHRoZSBpbm5lciBtYXAgKi9cXG4xOTM2OlxcdFxcdFxcdFxcdFxcdG1hcF9pZCA9IG1hcC1cXHUwMDNlb3BzLVxcdTAwM2VtYXBfZmRfc3lzX2xvb2t1cF9lbGVtKCppbm5lcl9tYXApO1xcbjE5Mzc6XFx0XFx0XFx0XFx0XFx0dmFsdWUgPSBcXHUwMDI2bWFwX2lkO1xcbjE5Mzg6XFx0XFx0XFx0XFx0fVxcbjE5Mzk6XFx0XFxuMTk0MDpcXHRcXHRcXHRcXHRpZiAoZWxlbV9tYXBfZmxhZ3MgXFx1MDAyNiBCUEZfRl9MT0NLKVxcbjE5NDE6XFx0XFx0XFx0XFx0XFx0Y29weV9tYXBfdmFsdWVfbG9ja2VkKG1hcCwgZHN0X3ZhbCwgdmFsdWUsXFxuMTk0MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICB0cnVlKTtcXG4xOTQzOlxcdFxcdFxcdFxcdGVsc2VcXG4xOTQ0OlxcdFxcdFxcdFxcdFxcdGNvcHlfbWFwX3ZhbHVlKG1hcCwgZHN0X3ZhbCwgdmFsdWUpO1xcbjE5NDU6XFx0XFx0XFx0XFx0LyogWmVyb2luZyBzcGVjaWFsIGZpZWxkcyBpbiB0aGUgdGVtcCBidWZmZXIgKi9cXG4xOTQ2OlxcdFxcdFxcdFxcdGNoZWNrX2FuZF9pbml0X21hcF92YWx1ZShtYXAsIGRzdF92YWwpO1xcbjE5NDc6XFx0XFx0XFx0fVxcbjE5NDg6XFx0XFx0XFx0aWYgKGRvX2RlbGV0ZSkge1xcbjE5NDk6XFx0XFx0XFx0XFx0aGxpc3RfbnVsbHNfZGVsX3JjdShcXHUwMDI2bC1cXHUwMDNlaGFzaF9ub2RlKTtcXG4xOTUwOlxcdFxcbjE5NTE6XFx0XFx0XFx0XFx0LyogYnBmX2xydV9wdXNoX2ZyZWUoKSB3aWxsIGFjcXVpcmUgbHJ1X2xvY2ssIHdoaWNoXFxuMTk1MjpcXHRcXHRcXHRcXHQgKiBtYXkgY2F1c2UgZGVhZGxvY2suIFNlZSBjb21tZW50cyBpbiBmdW5jdGlvblxcbjE5NTM6XFx0XFx0XFx0XFx0ICogcHJlYWxsb2NfbHJ1X3BvcCgpLiBMZXQgdXMgZG8gYnBmX2xydV9wdXNoX2ZyZWUoKVxcbjE5NTQ6XFx0XFx0XFx0XFx0ICogYWZ0ZXIgcmVsZWFzaW5nIHRoZSBidWNrZXQgbG9jay5cXG4xOTU1OlxcdFxcdFxcdFxcdCAqXFxuMTk1NjpcXHRcXHRcXHRcXHQgKiBGb3IgaHRhYiBvZiBtYXBzLCBodGFiX3B1dF9mZF92YWx1ZSgpIGluXFxuMTk1NzpcXHRcXHRcXHRcXHQgKiBmcmVlX2h0YWJfZWxlbSgpIG1heSBhY3F1aXJlIGEgc3BpbmxvY2sgd2l0aCBidWNrZXRcXG4xOTU4OlxcdFxcdFxcdFxcdCAqIGxvY2sgYmVpbmcgaGVsZCBhbmQgaXQgdmlvbGF0ZXMgdGhlIGxvY2sgcnVsZSwgc29cXG4xOTU5OlxcdFxcdFxcdFxcdCAqIGludm9rZSBmcmVlX2h0YWJfZWxlbSgpIGFmdGVyIHVubG9jayBhcyB3ZWxsLlxcbjE5NjA6XFx0XFx0XFx0XFx0ICovXFxuMTk2MTpcXHRcXHRcXHRcXHRsLVxcdTAwM2ViYXRjaF9mbGluayA9IG5vZGVfdG9fZnJlZTtcXG4xOTYyOlxcdFxcdFxcdFxcdG5vZGVfdG9fZnJlZSA9IGw7XFxuMTk2MzpcXHRcXHRcXHR9XFxuMTk2NDpcXHRcXHRcXHRkc3Rfa2V5ICs9IGtleV9zaXplO1xcbjE5NjU6XFx0XFx0XFx0ZHN0X3ZhbCArPSB2YWx1ZV9zaXplO1xcbjE5NjY6XFx0XFx0fVxcbjE5Njc6XFx0XFxuMTk2ODpcXHRcXHRodGFiX3VubG9ja19idWNrZXQoYiwgZmxhZ3MpO1xcbjE5Njk6XFx0XFx0bG9ja2VkID0gZmFsc2U7XFxuMTk3MDpcXHRcXG4xOTcxOlxcdFxcdHdoaWxlIChub2RlX3RvX2ZyZWUpIHtcXG4xOTcyOlxcdFxcdFxcdGwgPSBub2RlX3RvX2ZyZWU7XFxuMTk3MzpcXHRcXHRcXHRub2RlX3RvX2ZyZWUgPSBub2RlX3RvX2ZyZWUtXFx1MDAzZWJhdGNoX2ZsaW5rO1xcbjE5NzQ6XFx0XFx0XFx0aWYgKGlzX2xydV9tYXApXFxuMTk3NTpcXHRcXHRcXHRcXHRodGFiX2xydV9wdXNoX2ZyZWUoaHRhYiwgbCk7XFxuMTk3NjpcXHRcXHRcXHRlbHNlXFxuMTk3NzpcXHRcXHRcXHRcXHRmcmVlX2h0YWJfZWxlbShodGFiLCBsKTtcXG4xOTc4OlxcdFxcdH1cXG4xOTc5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxODo1NTozNC43MDQxNzgyNDhaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTMyODgyMjAzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgSSdtIHJlYWR5IHRvIGRpdmUgaW4uIEdpdmUgbWUgdGhlIHRleHQhIEknbGwgcHJvY2VzcyBpdCBhbmQgZm9ybXVsYXRlIGEgZmlyc3QtcGVyc29uIHN1bW1hcnkgYXMgaWYgdGhlIHRob3VnaHRzIGRlc2NyaWJlZCAqd2VyZSogbXkgb3duLCBrZWVwaW5nIGluIG1pbmQgbXkgcHJlc3VtZWQgZXhwZXJ0aXNlLiBMZXQncyBzZWUgd2hhdCB3ZSdyZSB3b3JraW5nIHdpdGggaGVyZS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBudWFuY2VzLCBzbyBJIHdpbGwgbWFrZSBzdXJlIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGxpbmVzIGxlYWRpbmcgdXAgdG8gMjAzMC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM2NywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTg6NTU6MzYuMDMzMDAxOTc1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2Njk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL2hhc2h0YWIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOTgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxOTgwOlxcdG5leHRfYmF0Y2g6XFxuMTk4MTpcXHRcXHQvKlxcbjE5ODI6XFx0XFx0ICogSWYgd2UgYXJlIG5vdCBjb3B5aW5nIGRhdGEsIHdlIGNhbiBnbyB0byBuZXh0IGJ1Y2tldCBhbmQgYXZvaWRcXG4xOTgzOlxcdFxcdCAqIHVubG9ja2luZyB0aGUgcmN1LiBCb3VuZCB0aGUgd2FsayB0aG91Z2g6IGFmdGVyXFxuMTk4NDpcXHRcXHQgKiBIVEFCX0JBVENIX0VNUFRZX1JFU0NIRUQgY29uc2VjdXRpdmUgZW1wdHkgYnVja2V0cywgZnVsbHkgZXhpdFxcbjE5ODU6XFx0XFx0ICogdGhlIGNyaXRpY2FsIHNlY3Rpb24gKG5vIGxvY2tzIGFyZSBoZWxkIGhlcmUpIGFuZCByZXNjaGVkdWxlLlxcbjE5ODY6XFx0XFx0ICovXFxuMTk4NzpcXHRcXHRpZiAoIWJ1Y2tldF9jbnQgXFx1MDAyNlxcdTAwMjYgKGJhdGNoICsgMSBcXHUwMDNjIGh0YWItXFx1MDAzZW5fYnVja2V0cykpIHtcXG4xOTg4OlxcdFxcdFxcdGJhdGNoKys7XFxuMTk4OTpcXHRcXHRcXHRpZiAoKytlbXB0eV9jbnQgXFx1MDAzYyBIVEFCX0JBVENIX0VNUFRZX1JFU0NIRUQpXFxuMTk5MDpcXHRcXHRcXHRcXHRnb3RvIGFnYWluX25vY29weTtcXG4xOTkxOlxcdFxcdFxcdGVtcHR5X2NudCA9IDA7XFxuMTk5MjpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4xOTkzOlxcdFxcdFxcdGJwZl9lbmFibGVfaW5zdHJ1bWVudGF0aW9uKCk7XFxuMTk5NDpcXHRcXHRcXHRjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKCk7XFxuMTk5NTpcXHRcXHRcXHRnb3RvIGFnYWluO1xcbjE5OTY6XFx0XFx0fVxcbjE5OTc6XFx0XFxuMTk5ODpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4xOTk5OlxcdFxcdGJwZl9lbmFibGVfaW5zdHJ1bWVudGF0aW9uKCk7XFxuMjAwMDpcXHRcXHRpZiAoYnVja2V0X2NudCBcXHUwMDI2XFx1MDAyNiAoY29weV90b191c2VyKHVrZXlzICsgdG90YWwgKiBrZXlfc2l6ZSwga2V5cyxcXG4yMDAxOlxcdFxcdCAgICBrZXlfc2l6ZSAqIGJ1Y2tldF9jbnQpIHx8XFxuMjAwMjpcXHRcXHQgICAgY29weV90b191c2VyKHV2YWx1ZXMgKyB0b3RhbCAqIHZhbHVlX3NpemUsIHZhbHVlcyxcXG4yMDAzOlxcdFxcdCAgICB2YWx1ZV9zaXplICogYnVja2V0X2NudCkpKSB7XFxuMjAwNDpcXHRcXHRcXHRyZXQgPSAtRUZBVUxUO1xcbjIwMDU6XFx0XFx0XFx0Z290byBhZnRlcl9sb29wO1xcbjIwMDY6XFx0XFx0fVxcbjIwMDc6XFx0XFxuMjAwODpcXHRcXHR0b3RhbCArPSBidWNrZXRfY250O1xcbjIwMDk6XFx0XFx0ZW1wdHlfY250ID0gMDtcXG4yMDEwOlxcdFxcdGJhdGNoKys7XFxuMjAxMTpcXHRcXHRpZiAoYmF0Y2ggXFx1MDAzZT0gaHRhYi1cXHUwMDNlbl9idWNrZXRzKSB7XFxuMjAxMjpcXHRcXHRcXHRyZXQgPSAtRU5PRU5UO1xcbjIwMTM6XFx0XFx0XFx0Z290byBhZnRlcl9sb29wO1xcbjIwMTQ6XFx0XFx0fVxcbjIwMTU6XFx0XFx0Y29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpO1xcbjIwMTY6XFx0XFx0Z290byBhZ2FpbjtcXG4yMDE3OlxcdFxcbjIwMTg6XFx0YWZ0ZXJfbG9vcDpcXG4yMDE5OlxcdFxcdGlmIChyZXQgPT0gLUVGQVVMVClcXG4yMDIwOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjIwMjE6XFx0XFxuMjAyMjpcXHRcXHQvKiBjb3B5ICMgb2YgZW50cmllcyBhbmQgbmV4dCBiYXRjaCAqL1xcbjIwMjM6XFx0XFx0dWJhdGNoID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXFx1MDAzZWJhdGNoLm91dF9iYXRjaCk7XFxuMjAyNDpcXHRcXHRpZiAoY29weV90b191c2VyKHViYXRjaCwgXFx1MDAyNmJhdGNoLCBzaXplb2YoYmF0Y2gpKSB8fFxcbjIwMjU6XFx0XFx0ICAgIHB1dF91c2VyKHRvdGFsLCBcXHUwMDI2dWF0dHItXFx1MDAzZWJhdGNoLmNvdW50KSlcXG4yMDI2OlxcdFxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuMjAyNzpcXHRcXG4yMDI4OlxcdG91dDpcXG4yMDI5OlxcdFxcdGt2ZnJlZShrZXlzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTg6NTU6MzYuMDMzMjcwMzE1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY3MTI1NDc3MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgSGFzaHRhYiBCYXRjaCBMb29rdXAvRGVsZXRlIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBhbmQgc3RhYmlsaXR5IGlzc3VlIHdpdGhpbiB0aGUgQlBGIGhhc2h0YWIgYmF0Y2ggbG9va3VwL2RlbGV0ZSBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IHRoZSBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAgZnVuY3Rpb24uIFRoZSBjb3JlIHByb2JsZW0gd2FzIHRoYXQgd2hlbiBkZWFsaW5nIHdpdGggYSBCUEYgaGFzaHRhYiB3aXRoIGEgaGlnaCBudW1iZXIgb2YgZW1wdHkgYnVja2V0cywgdGhlIGtlcm5lbCBjb3VsZCBnZXQgc3R1Y2sgaW4gYSB0aWdodCBsb29wIHVuZGVyIGByY3VfcmVhZF9sb2NrKClgIGFuZCB3aXRoIGluc3RydW1lbnRhdGlvbiBkaXNhYmxlZC4gVGhpcyBsZWQgdG8gcG90ZW50aWFsIFJDVSBzdGFsbHMsIHNvZnQgbG9ja3Vwcywgb3IgZXZlbiB3YXRjaGRvZyB0aW1lb3V0cy5cblxuVGhlIGZpeCBpbnRyb2R1Y2VzIGEgbmV3IGNvbnN0YW50LCBgSFRBQl9CQVRDSF9FTVBUWV9SRVNDSEVEYCwgd2hpY2ggYXBwZWFycyB0byBiZSBzZXQgdG8gNjQuICBBbiBgZW1wdHlfY250YCB2YXJpYWJsZSBpcyBhbHNvIGludHJvZHVjZWQgYXMgYSBjb3VudGVyLiBUaGUgbG9naWMgbm93IHdvcmtzIGxpa2UgdGhpczogIEluc3RlYWQgb2YgbG9vcGluZyBlbmRsZXNzbHkgb24gZW1wdHkgYnVja2V0cywgdGhlIGNvZGUgbm93IGluY3JlbWVudHMgYGVtcHR5X2NudGAgd2l0aCBlYWNoIGVtcHR5IGJ1Y2tldCBza2lwcGVkLiBJZiBgZW1wdHlfY250YCBpcyBsZXNzIHRoYW4gYEhUQUJfQkFUQ0hfRU1QVFlfUkVTQ0hFRGAsIGl0IGNvbnRpbnVlcyBza2lwcGluZy4gQnV0IGlmIGBlbXB0eV9jbnRgIHJlYWNoZXMgb3IgZXhjZWVkcyBgSFRBQl9CQVRDSF9FTVBUWV9SRVNDSEVEYCwgdGhlIGxvb3AgKnJlc2NoZWR1bGVzKiB1c2luZyBgcmN1X3JlYWRfdW5sb2NrKClgLCBgYnBmX2VuYWJsZV9pbnN0cnVtZW50YXRpb24oKWAsIGFuZCBgY29uZF9yZXNjaGVkX3Rhc2tzX3JjdV9xcygpYCwgZXNzZW50aWFsbHkgeWllbGRpbmcgY29udHJvbCBiZWZvcmUgcmVzdW1pbmcuIFRoaXMgaXMgYWxzbyBkb25lIHdoZW4gYWN0dWFsbHkgcHJvY2Vzc2luZyBkYXRhIChgYnVja2V0X2NudCBcdTAwM2UgMGApLiBUaGlzIHByZXZlbnRzIHRoZSB0aWdodCBsb29wLlxuXG5NeSBwcmltYXJ5IGNvbmNlcm4gaXMgYWx3YXlzIGFyb3VuZCBtZW1vcnkgc2FmZXR5LCBzbyBJJ3ZlIGNhcmVmdWxseSBleGFtaW5lZCB0aGUgcGF0Y2ggZm9yIGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiAgSSd2ZSBjaGVja2VkOlxuXG4xLiAgYGVtcHR5X2NudGA6IFByb3Blcmx5IGluaXRpYWxpemVkIHRvIHplcm8gYXQgZnVuY3Rpb24gZW50cnkuXG4yLiAgQnVmZmVyIHNpemluZywgbWVtb3J5IGluaXRpYWxpemF0aW9uLCBjb3B5IHNpemVzLCBhbmQgZGF0YSBsYXlvdXQuICBFdmVyeXRoaW5nIGxvb2tzIHNvdW5kLiAgYGtleXNgIGFuZCBgdmFsdWVzYCBhcmUgY29ycmVjdGx5IGFsbG9jYXRlZCB2aWEgYGt2bWFsbG9jX2FycmF5YCwgZmlsbGVkIG9ubHkgd2hlbiBgYnVja2V0X2NudCBcdTAwM2UgMGAgKGFuZCBgbG9ja2VkYCBpcyB0cnVlKSwgYW5kIGNvcGllZCB0byB1c2VyIHNwYWNlIHdpdGggdGhlIHJpZ2h0IHNpemUuXG4zLiAgVW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHVzZXItc3BhY2UgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCBwYWRkaW5nOiBUaGUgYGJhdGNoYCwgYHRvdGFsYCBhbmQgYGVtcHR5X2NudGAgdmFyaWFibGVzIGFyZSBhbGwgcHJvcGVybHkgaW5pdGlhbGl6ZWQgb3IgdXNlZC4gYGNvbmRfcmVzY2hlZF90YXNrc19yY3VfcXMoKWAgZG9lc24ndCB0b3VjaCBtZW1vcnkgZGlyZWN0bHksIGl0IHNpbXBseSBmYWNpbGl0YXRlcyByZXNjaGVkdWxpbmcuXG5cblRoZXJlZm9yZSwgSSdtIGNvbmZpZGVudCB0aGF0IHRoaXMgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBleHBvc2UgYW55IGtlcm5lbCBpbmZvLWxlYWtzLlxuXG5Db25zaWRlcmluZyB0aGF0IHRoZSBwYXRjaCBmb2N1c2VzIG9uIGxvb3AgY29udHJvbCBmbG93IGFuZCB2b2x1bnRhcnkgcHJlZW1wdGlvbiB0byBwcmV2ZW50IFJDVSBzdGFsbHMvc29mdCBsb2NrdXBzLCBJIGRvbid0IHNlZSBhbnkgY2hhbmdlcyB0aGF0IHdvdWxkIHRyaWdnZXIgS0FTQU4gb3IgS01TQU4gaXNzdWVzLiBUaGVyZSBhcmUgbm8gbWVtb3J5IGluaXRpYWxpemF0aW9uIGNoYW5nZXMsIG5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgbm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHJlYWRzLCBhbmQgbm8gaW5mbyBsZWFrcy4gVGhpcyBwYXRjaCBpcyBmdW5kYW1lbnRhbGx5IGFkZHJlc3NpbmcgbGF0ZW5jeSBhbmQgc2NoZWR1bGluZywgbm90IG1lbW9yeSBjb3JydXB0aW9uLCB3aGljaCBpcyBtb3JlIG9mIGEgbG9ja2RlcCBvciBSQ1Ugc3RhbGwgZGV0ZWN0b3IgY29uY2Vybi4gIFNvLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGRlZmluaXRlbHkgYmUgYGZhbHNlYC4gSSd2ZSBkb3VibGUtY2hlY2tlZCBteSBhbmFseXNpcywgYW5kIEknbSBwcmVwYXJlZCB0byBzZXQgdGhlIHJlc3VsdHMgYWNjb3JkaW5nbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyNTUsIk91dHB1dFRva2VucyI6MTgwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODY1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTg6NTU6NDIuNzQ1ODIxMDU5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHBlcmlvZGljIHZvbHVudGFyeSByZXNjaGVkdWxpbmcgKGBjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKClgKSBhbmQgUkNVIHVubG9ja2luZyBhZnRlciBpdGVyYXRpbmcgb3ZlciBhIGJhdGNoIG9mIGVtcHR5IGJ1Y2tldHMgKGBIVEFCX0JBVENIX0VNUFRZX1JFU0NIRURgKSBpbiBCUEYgaGFzaCB0YWJsZSBiYXRjaCBvcGVyYXRpb25zIChgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGApIHRvIHByZXZlbnQgc29mdCBsb2NrdXBzIGFuZCBSQ1Ugc3RhbGxzLlxcblxcblRoZSBuZXdseSBpbnRyb2R1Y2VkIGNvdW50ZXIgdmFyaWFibGUgYGVtcHR5X2NudGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byAwIGFuZCBjb3JyZWN0bHkgcmVzZXQuIFRoZSBwYXRjaCBtb2RpZmllcyBvbmx5IGxvb3AgY29udHJvbCBmbG93IGFuZCBzY2hlZHVsaW5nIGJlaGF2aW9yOyBpdCBkb2VzIG5vdCBjaGFuZ2UgYnVmZmVyIGFsbG9jYXRpb24sIGRhdGEgY29weWluZyBsZW5ndGhzLCBzdHJ1Y3QgZGVmaW5pdGlvbnMsIG9yIG1lbW9yeSBpbml0aWFsaXphdGlvbiBsb2dpYywgbm9yIGRvZXMgaXQgY3JlYXRlIGFueSByaXNrIG9mIHJlYWRpbmcgb3IgbGVha2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHBlcmlvZGljIHZvbHVudGFyeSByZXNjaGVkdWxpbmcgKGBjb25kX3Jlc2NoZWRfdGFza3NfcmN1X3FzKClgKSBhbmQgUkNVIHVubG9ja2luZyBhZnRlciBpdGVyYXRpbmcgb3ZlciBhIGJhdGNoIG9mIGVtcHR5IGJ1Y2tldHMgKGBIVEFCX0JBVENIX0VNUFRZX1JFU0NIRURgKSBpbiBCUEYgaGFzaCB0YWJsZSBiYXRjaCBvcGVyYXRpb25zIChgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGApIHRvIHByZXZlbnQgc29mdCBsb2NrdXBzIGFuZCBSQ1Ugc3RhbGxzLlxcblxcblRoZSBuZXdseSBpbnRyb2R1Y2VkIGNvdW50ZXIgdmFyaWFibGUgYGVtcHR5X2NudGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byAwIGFuZCBjb3JyZWN0bHkgcmVzZXQuIFRoZSBwYXRjaCBtb2RpZmllcyBvbmx5IGxvb3AgY29udHJvbCBmbG93IGFuZCBzY2hlZHVsaW5nIGJlaGF2aW9yOyBpdCBkb2VzIG5vdCBjaGFuZ2UgYnVmZmVyIGFsbG9jYXRpb24sIGRhdGEgY29weWluZyBsZW5ndGhzLCBzdHJ1Y3QgZGVmaW5pdGlvbnMsIG9yIG1lbW9yeSBpbml0aWFsaXphdGlvbiBsb2dpYywgbm9yIGRvZXMgaXQgY3JlYXRlIGFueSByaXNrIG9mIHJlYWRpbmcgb3IgbGVha2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow72gdj[1] Phase: Succeeded StartedAt: 2026-09-09 18:56:18 +0000 UTC FinishedAt: 2026-09-09 18:56:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow72gdj[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-09 18:56:18 +0000 UTC FinishedAt: 2026-09-09 18:56:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow72gdj[2] Phase: Succeeded StartedAt: 2026-09-09 18:56:18 +0000 UTC FinishedAt: 2026-09-09 22:35:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow72gdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","htab_lru_map_lookup_batch","htab_lru_map_lookup_and_delete_batch","htab_percpu_map_lookup_batch","htab_percpu_map_lookup_and_delete_batch","htab_lru_percpu_map_lookup_batch","htab_lru_percpu_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"232355cb-a149-49dc-9b33-695e871b1f2d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-09 18:56:18 +0000 UTC FinishedAt: 2026-09-09 22:35:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","htab_lru_map_lookup_batch","htab_lru_map_lookup_and_delete_batch","htab_percpu_map_lookup_batch","htab_percpu_map_lookup_and_delete_batch","htab_lru_percpu_map_lookup_batch","htab_lru_percpu_map_lookup_and_delete_batch"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"232355cb-a149-49dc-9b33-695e871b1f2d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow72gdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","htab_lru_map_lookup_batch","htab_lru_map_lookup_and_delete_batch","htab_percpu_map_lookup_batch","htab_percpu_map_lookup_and_delete_batch","htab_lru_percpu_map_lookup_batch","htab_lru_percpu_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"232355cb-a149-49dc-9b33-695e871b1f2d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-09 18:56:18 +0000 UTC FinishedAt: 2026-09-09 18:56:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow72gdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","htab_lru_map_lookup_batch","htab_lru_map_lookup_and_delete_batch","htab_percpu_map_lookup_batch","htab_percpu_map_lookup_and_delete_batch","htab_lru_percpu_map_lookup_batch","htab_lru_percpu_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"232355cb-a149-49dc-9b33-695e871b1f2d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-09 18:56:18 +0000 UTC FinishedAt: 2026-09-09 18:56:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow72gdj/series-workflow72gdj-convert-artifact-1280190364/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow72gdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","htab_lru_map_lookup_batch","htab_lru_map_lookup_and_delete_batch","htab_percpu_map_lookup_batch","htab_percpu_map_lookup_and_delete_batch","htab_lru_percpu_map_lookup_batch","htab_lru_percpu_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"232355cb-a149-49dc-9b33-695e871b1f2d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-09 18:56:28 +0000 UTC FinishedAt: 2026-09-09 19:13:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow72gdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","htab_lru_map_lookup_batch","htab_lru_map_lookup_and_delete_batch","htab_percpu_map_lookup_batch","htab_percpu_map_lookup_and_delete_batch","htab_lru_percpu_map_lookup_batch","htab_lru_percpu_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"232355cb-a149-49dc-9b33-695e871b1f2d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-09 18:56:28 +0000 UTC FinishedAt: 2026-09-09 19:13:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*56f367b3-a710-46bb-a6f2-d1d9edb6caa4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow72gdj/series-workflow72gdj-convert-artifact-1280190364/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "659e3959-dd75-47b7-a444-cec193f0920f", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow72gdj/series-workflow72gdj-build-action-3405303242/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow72gdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","htab_lru_map_lookup_batch","htab_lru_map_lookup_and_delete_batch","htab_percpu_map_lookup_batch","htab_percpu_map_lookup_and_delete_batch","htab_lru_percpu_map_lookup_batch","htab_lru_percpu_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"232355cb-a149-49dc-9b33-695e871b1f2d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-09 18:56:28 +0000 UTC FinishedAt: 2026-09-09 19:13:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*56f367b3-a710-46bb-a6f2-d1d9edb6caa4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow72gdj/series-workflow72gdj-convert-artifact-1280190364/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "659e3959-dd75-47b7-a444-cec193f0920f", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow72gdj/series-workflow72gdj-build-action-3405303242/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow72gdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","htab_lru_map_lookup_batch","htab_lru_map_lookup_and_delete_batch","htab_percpu_map_lookup_batch","htab_percpu_map_lookup_and_delete_batch","htab_lru_percpu_map_lookup_batch","htab_lru_percpu_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"232355cb-a149-49dc-9b33-695e871b1f2d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-09 19:13:11 +0000 UTC FinishedAt: 2026-09-09 19:13:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow72gdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","htab_lru_map_lookup_batch","htab_lru_map_lookup_and_delete_batch","htab_percpu_map_lookup_batch","htab_percpu_map_lookup_and_delete_batch","htab_lru_percpu_map_lookup_batch","htab_lru_percpu_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"232355cb-a149-49dc-9b33-695e871b1f2d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-09 19:13:11 +0000 UTC FinishedAt: 2026-09-09 19:13:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow72gdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","htab_lru_map_lookup_batch","htab_lru_map_lookup_and_delete_batch","htab_percpu_map_lookup_batch","htab_percpu_map_lookup_and_delete_batch","htab_lru_percpu_map_lookup_batch","htab_lru_percpu_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"232355cb-a149-49dc-9b33-695e871b1f2d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-09 19:13:11 +0000 UTC FinishedAt: 2026-09-09 19:13:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow72gdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","htab_lru_map_lookup_batch","htab_lru_map_lookup_and_delete_batch","htab_percpu_map_lookup_batch","htab_percpu_map_lookup_and_delete_batch","htab_lru_percpu_map_lookup_batch","htab_lru_percpu_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"232355cb-a149-49dc-9b33-695e871b1f2d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-09 19:13:11 +0000 UTC FinishedAt: 2026-09-09 19:13:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"232355cb-a149-49dc-9b33-695e871b1f2d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow72gdj/series-workflow72gdj-convert-artifact-1702603227/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow72gdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","htab_lru_map_lookup_batch","htab_lru_map_lookup_and_delete_batch","htab_percpu_map_lookup_batch","htab_percpu_map_lookup_and_delete_batch","htab_lru_percpu_map_lookup_batch","htab_lru_percpu_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"232355cb-a149-49dc-9b33-695e871b1f2d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-09 19:13:21 +0000 UTC FinishedAt: 2026-09-09 19:15:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow72gdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","htab_lru_map_lookup_batch","htab_lru_map_lookup_and_delete_batch","htab_percpu_map_lookup_batch","htab_percpu_map_lookup_and_delete_batch","htab_lru_percpu_map_lookup_batch","htab_lru_percpu_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"232355cb-a149-49dc-9b33-695e871b1f2d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-09 19:13:21 +0000 UTC FinishedAt: 2026-09-09 19:15:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*659e3959-dd75-47b7-a444-cec193f0920f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow72gdj/series-workflow72gdj-build-action-3405303242/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow72gdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","htab_lru_map_lookup_batch","htab_lru_map_lookup_and_delete_batch","htab_percpu_map_lookup_batch","htab_percpu_map_lookup_and_delete_batch","htab_lru_percpu_map_lookup_batch","htab_lru_percpu_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"232355cb-a149-49dc-9b33-695e871b1f2d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-09 19:15:14 +0000 UTC FinishedAt: 2026-09-09 19:15:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow72gdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","htab_lru_map_lookup_batch","htab_lru_map_lookup_and_delete_batch","htab_percpu_map_lookup_batch","htab_percpu_map_lookup_and_delete_batch","htab_lru_percpu_map_lookup_batch","htab_lru_percpu_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"232355cb-a149-49dc-9b33-695e871b1f2d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-09 19:15:14 +0000 UTC FinishedAt: 2026-09-09 19:15:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow72gdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","htab_lru_map_lookup_batch","htab_lru_map_lookup_and_delete_batch","htab_percpu_map_lookup_batch","htab_percpu_map_lookup_and_delete_batch","htab_lru_percpu_map_lookup_batch","htab_lru_percpu_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"232355cb-a149-49dc-9b33-695e871b1f2d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-09 19:15:14 +0000 UTC FinishedAt: 2026-09-09 19:32:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow72gdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","htab_lru_map_lookup_batch","htab_lru_map_lookup_and_delete_batch","htab_percpu_map_lookup_batch","htab_percpu_map_lookup_and_delete_batch","htab_lru_percpu_map_lookup_batch","htab_lru_percpu_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"232355cb-a149-49dc-9b33-695e871b1f2d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-09 19:15:14 +0000 UTC FinishedAt: 2026-09-09 19:32:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*56f367b3-a710-46bb-a6f2-d1d9edb6caa4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow72gdj/series-workflow72gdj-convert-artifact-1702603227/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "dbf3f347-9d79-4882-9ef7-1f160a3896f7", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow72gdj/series-workflow72gdj-build-action-1739542655/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow72gdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","htab_lru_map_lookup_batch","htab_lru_map_lookup_and_delete_batch","htab_percpu_map_lookup_batch","htab_percpu_map_lookup_and_delete_batch","htab_lru_percpu_map_lookup_batch","htab_lru_percpu_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"232355cb-a149-49dc-9b33-695e871b1f2d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-09 19:15:14 +0000 UTC FinishedAt: 2026-09-09 19:32:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*56f367b3-a710-46bb-a6f2-d1d9edb6caa4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow72gdj/series-workflow72gdj-convert-artifact-1702603227/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "dbf3f347-9d79-4882-9ef7-1f160a3896f7", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow72gdj/series-workflow72gdj-build-action-1739542655/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow72gdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","htab_lru_map_lookup_batch","htab_lru_map_lookup_and_delete_batch","htab_percpu_map_lookup_batch","htab_percpu_map_lookup_and_delete_batch","htab_lru_percpu_map_lookup_batch","htab_lru_percpu_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"232355cb-a149-49dc-9b33-695e871b1f2d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-09 19:32:38 +0000 UTC FinishedAt: 2026-09-09 19:32:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow72gdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","htab_lru_map_lookup_batch","htab_lru_map_lookup_and_delete_batch","htab_percpu_map_lookup_batch","htab_percpu_map_lookup_and_delete_batch","htab_lru_percpu_map_lookup_batch","htab_lru_percpu_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"232355cb-a149-49dc-9b33-695e871b1f2d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-09 19:32:38 +0000 UTC FinishedAt: 2026-09-09 19:32:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow72gdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","htab_lru_map_lookup_batch","htab_lru_map_lookup_and_delete_batch","htab_percpu_map_lookup_batch","htab_percpu_map_lookup_and_delete_batch","htab_lru_percpu_map_lookup_batch","htab_lru_percpu_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"232355cb-a149-49dc-9b33-695e871b1f2d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-09 19:32:38 +0000 UTC FinishedAt: 2026-09-09 19:34:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow72gdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","htab_lru_map_lookup_batch","htab_lru_map_lookup_and_delete_batch","htab_percpu_map_lookup_batch","htab_percpu_map_lookup_and_delete_batch","htab_lru_percpu_map_lookup_batch","htab_lru_percpu_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"232355cb-a149-49dc-9b33-695e871b1f2d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-09 19:32:38 +0000 UTC FinishedAt: 2026-09-09 19:34:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*dbf3f347-9d79-4882-9ef7-1f160a3896f7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow72gdj/series-workflow72gdj-build-action-1739542655/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow72gdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","htab_lru_map_lookup_batch","htab_lru_map_lookup_and_delete_batch","htab_percpu_map_lookup_batch","htab_percpu_map_lookup_and_delete_batch","htab_lru_percpu_map_lookup_batch","htab_lru_percpu_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"232355cb-a149-49dc-9b33-695e871b1f2d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-09 19:34:20 +0000 UTC FinishedAt: 2026-09-09 22:35:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow72gdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","htab_lru_map_lookup_batch","htab_lru_map_lookup_and_delete_batch","htab_percpu_map_lookup_batch","htab_percpu_map_lookup_and_delete_batch","htab_lru_percpu_map_lookup_batch","htab_lru_percpu_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"232355cb-a149-49dc-9b33-695e871b1f2d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-09 19:34:20 +0000 UTC FinishedAt: 2026-09-09 22:35:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","htab_lru_map_lookup_batch","htab_lru_map_lookup_and_delete_batch","htab_percpu_map_lookup_batch","htab_percpu_map_lookup_and_delete_batch","htab_lru_percpu_map_lookup_batch","htab_lru_percpu_map_lookup_and_delete_batch"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*659e3959-dd75-47b7-a444-cec193f0920f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*dbf3f347-9d79-4882-9ef7-1f160a3896f7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow72gdj/series-workflow72gdj-build-action-3405303242/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow72gdj/series-workflow72gdj-build-action-1739542655/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow72gdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","htab_lru_map_lookup_batch","htab_lru_map_lookup_and_delete_batch","htab_percpu_map_lookup_batch","htab_percpu_map_lookup_and_delete_batch","htab_lru_percpu_map_lookup_batch","htab_lru_percpu_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"232355cb-a149-49dc-9b33-695e871b1f2d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-09 19:34:20 +0000 UTC FinishedAt: 2026-09-09 19:34:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow72gdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","htab_lru_map_lookup_batch","htab_lru_map_lookup_and_delete_batch","htab_percpu_map_lookup_batch","htab_percpu_map_lookup_and_delete_batch","htab_lru_percpu_map_lookup_batch","htab_lru_percpu_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"232355cb-a149-49dc-9b33-695e871b1f2d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-09 19:34:20 +0000 UTC FinishedAt: 2026-09-09 19:34:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","htab_lru_map_lookup_batch","htab_lru_map_lookup_and_delete_batch","htab_percpu_map_lookup_batch","htab_percpu_map_lookup_and_delete_batch","htab_lru_percpu_map_lookup_batch","htab_lru_percpu_map_lookup_and_delete_batch"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow72gdj/series-workflow72gdj-convert-artifact-1058695124/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow72gdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","htab_lru_map_lookup_batch","htab_lru_map_lookup_and_delete_batch","htab_percpu_map_lookup_batch","htab_percpu_map_lookup_and_delete_batch","htab_lru_percpu_map_lookup_batch","htab_lru_percpu_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"232355cb-a149-49dc-9b33-695e871b1f2d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-09 19:34:20 +0000 UTC FinishedAt: 2026-09-09 19:34:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow72gdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","htab_lru_map_lookup_batch","htab_lru_map_lookup_and_delete_batch","htab_percpu_map_lookup_batch","htab_percpu_map_lookup_and_delete_batch","htab_lru_percpu_map_lookup_batch","htab_lru_percpu_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"232355cb-a149-49dc-9b33-695e871b1f2d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-09 19:34:20 +0000 UTC FinishedAt: 2026-09-09 19:34:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow72gdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","htab_lru_map_lookup_batch","htab_lru_map_lookup_and_delete_batch","htab_percpu_map_lookup_batch","htab_percpu_map_lookup_and_delete_batch","htab_lru_percpu_map_lookup_batch","htab_lru_percpu_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"232355cb-a149-49dc-9b33-695e871b1f2d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-09 19:34:20 +0000 UTC FinishedAt: 2026-09-09 19:34:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow72gdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","htab_lru_map_lookup_batch","htab_lru_map_lookup_and_delete_batch","htab_percpu_map_lookup_batch","htab_percpu_map_lookup_and_delete_batch","htab_lru_percpu_map_lookup_batch","htab_lru_percpu_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"232355cb-a149-49dc-9b33-695e871b1f2d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-09 19:34:31 +0000 UTC FinishedAt: 2026-09-09 22:35:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow72gdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__htab_map_lookup_and_delete_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch","htab_lru_map_lookup_batch","htab_lru_map_lookup_and_delete_batch","htab_percpu_map_lookup_batch","htab_percpu_map_lookup_and_delete_batch","htab_lru_percpu_map_lookup_batch","htab_lru_percpu_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af0b84a9215d951d16f26b7ee34353b970cf5d4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"232355cb-a149-49dc-9b33-695e871b1f2d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-09 19:34:31 +0000 UTC FinishedAt: 2026-09-09 22:35:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*659e3959-dd75-47b7-a444-cec193f0920f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*dbf3f347-9d79-4882-9ef7-1f160a3896f7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow72gdj/series-workflow72gdj-build-action-3405303242/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow72gdj/series-workflow72gdj-build-action-1739542655/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow72gdj/series-workflow72gdj-convert-artifact-1058695124/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}